export enum Case { camelCase, snake_case, } export function changeStringCase( 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 ? "_" : ""); }