You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.0 KiB
69 lines
2.0 KiB
|
2 years ago
|
const NUMBER_CHAR_RE = /\d/;
|
||
|
|
const STR_SPLITTERS = ["-", "_", "/", "."];
|
||
|
|
function isUppercase(char = "") {
|
||
|
|
if (NUMBER_CHAR_RE.test(char)) {
|
||
|
|
return void 0;
|
||
|
|
}
|
||
|
|
return char.toUpperCase() === char;
|
||
|
|
}
|
||
|
|
function splitByCase(string_, separators) {
|
||
|
|
const splitters = separators ?? STR_SPLITTERS;
|
||
|
|
const parts = [];
|
||
|
|
if (!string_ || typeof string_ !== "string") {
|
||
|
|
return parts;
|
||
|
|
}
|
||
|
|
let buff = "";
|
||
|
|
let previousUpper;
|
||
|
|
let previousSplitter;
|
||
|
|
for (const char of string_) {
|
||
|
|
const isSplitter = splitters.includes(char);
|
||
|
|
if (isSplitter === true) {
|
||
|
|
parts.push(buff);
|
||
|
|
buff = "";
|
||
|
|
previousUpper = void 0;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
const isUpper = isUppercase(char);
|
||
|
|
if (previousSplitter === false) {
|
||
|
|
if (previousUpper === false && isUpper === true) {
|
||
|
|
parts.push(buff);
|
||
|
|
buff = char;
|
||
|
|
previousUpper = isUpper;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
if (previousUpper === true && isUpper === false && buff.length > 1) {
|
||
|
|
const lastChar = buff[buff.length - 1];
|
||
|
|
parts.push(buff.slice(0, Math.max(0, buff.length - 1)));
|
||
|
|
buff = lastChar + char;
|
||
|
|
previousUpper = isUpper;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
buff += char;
|
||
|
|
previousUpper = isUpper;
|
||
|
|
previousSplitter = isSplitter;
|
||
|
|
}
|
||
|
|
parts.push(buff);
|
||
|
|
return parts;
|
||
|
|
}
|
||
|
|
function upperFirst(string_) {
|
||
|
|
return !string_ ? "" : string_[0].toUpperCase() + string_.slice(1);
|
||
|
|
}
|
||
|
|
function lowerFirst(string_) {
|
||
|
|
return !string_ ? "" : string_[0].toLowerCase() + string_.slice(1);
|
||
|
|
}
|
||
|
|
function pascalCase(string_) {
|
||
|
|
return !string_ ? "" : (Array.isArray(string_) ? string_ : splitByCase(string_)).map((p) => upperFirst(p)).join("");
|
||
|
|
}
|
||
|
|
function camelCase(string_) {
|
||
|
|
return lowerFirst(pascalCase(string_));
|
||
|
|
}
|
||
|
|
function kebabCase(string_, joiner) {
|
||
|
|
return !string_ ? "" : (Array.isArray(string_) ? string_ : splitByCase(string_)).map((p) => p.toLowerCase()).join(joiner ?? "-");
|
||
|
|
}
|
||
|
|
function snakeCase(string_) {
|
||
|
|
return kebabCase(string_, "_");
|
||
|
|
}
|
||
|
|
|
||
|
|
export { camelCase, isUppercase, kebabCase, lowerFirst, pascalCase, snakeCase, splitByCase, upperFirst };
|