Files
aniplay-api/src/libs/changeStringCase.ts

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 ? "_" : "");
}