35 lines
774 B
TypeScript
35 lines
774 B
TypeScript
export enum Case {
|
|
camelCase,
|
|
snake_case,
|
|
}
|
|
|
|
export function changeStringCase<T>(
|
|
str: string,
|
|
currentCase: Case,
|
|
newCase: Case,
|
|
): string {
|
|
if (currentCase === newCase) {
|
|
return str;
|
|
}
|
|
|
|
const currentSeparator = currentCase === Case.snake_case ? "_" : /(?=[A-Z])/;
|
|
const words = str.split(currentSeparator);
|
|
|
|
return words
|
|
.map((word, index) => {
|
|
switch (newCase) {
|
|
case Case.camelCase:
|
|
if (index === 0) {
|
|
return word.toLowerCase();
|
|
}
|
|
|
|
return word[0].toUpperCase() + word.slice(1).toLowerCase();
|
|
case Case.snake_case:
|
|
return word.toLowerCase();
|
|
default:
|
|
throw new Error("Unknown case");
|
|
}
|
|
})
|
|
.join(newCase === Case.snake_case ? "_" : "");
|
|
}
|