diff --git a/src/case.ts b/src/case.ts index 4cd770126..ec6d5a320 100644 --- a/src/case.ts +++ b/src/case.ts @@ -6,12 +6,9 @@ export function maybeSnakeToCamel(s: string, options: Pick { - if (i === 0) { - // if first symbol is "_" then skip it - return word ? word[0] + (hasLowerCase ? word.substring(1) : word.substring(1).toLowerCase()) : ''; - } else { - return capitalize(word.toLowerCase()); - } + // If the word is already mixed case, leave the exist case as-is + word = hasLowerCase ? word : word.toLowerCase(); + return i === 0 ? word : capitalize(word); }) .join(''); } else { diff --git a/tests/case-test.ts b/tests/case-test.ts index 1e5a55764..37dd06b74 100644 --- a/tests/case-test.ts +++ b/tests/case-test.ts @@ -13,11 +13,13 @@ describe('case', () => { }); it('de-upper cases', () => { - expect(maybeSnakeToCamel('FOO_BAR', keys)).toEqual('FooBar'); + expect(maybeSnakeToCamel('FOO_BAR', keys)).toEqual('fooBar'); }); it('leaves existing mixed cases', () => { expect(maybeSnakeToCamel('clientI_d', keys)).toEqual('clientID'); + expect(maybeSnakeToCamel('menu_calendarI_d', keys)).toEqual('menuCalendarID'); + expect(maybeSnakeToCamel('display_nameI18n', keys)).toEqual('displayNameI18n'); }); it('leaves the first character as it was', () => {