Skip to content

Commit 741d5a5

Browse files
committed
fix(cli): exclude nested kebab-case keys, update tests
1 parent adf6003 commit 741d5a5

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

packages/cli/src/lib/implementation/filter-kebab-case-keys.ts

+15-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,21 @@ export function filterKebabCaseKeys<T extends Record<string, unknown>>(
77
if (key.includes('-')) {
88
return;
99
}
10-
newObj[key] = obj[key];
10+
11+
if (
12+
typeof obj[key] === 'string' ||
13+
(typeof obj[key] === 'object' && Array.isArray(obj[key]))
14+
) {
15+
newObj[key] = obj[key];
16+
}
17+
18+
if (
19+
typeof obj[key] === 'object' &&
20+
!Array.isArray(obj[key]) &&
21+
obj[key] != null
22+
) {
23+
newObj[key] = filterKebabCaseKeys(obj[key] as Record<string, unknown>);
24+
}
1125
});
1226

1327
return newObj as T;

packages/cli/src/lib/implementation/filter-kebab-case-keys.unit.test.ts

+26-3
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,39 @@ import { expect } from 'vitest';
22
import { filterKebabCaseKeys } from './filter-kebab-case-keys';
33

44
describe('filterKebabCaseKeys', () => {
5-
it('should filter kebab-case keys', () => {
5+
it('should filter root level kebab-case keys', () => {
66
const obj = {
77
'kebab-case': 'value',
88
camelCase: 'value',
99
snake_case: 'value',
1010
};
11-
const filtered = filterKebabCaseKeys(obj);
12-
expect(filtered).toEqual({
11+
expect(filterKebabCaseKeys(obj)).toEqual({
1312
camelCase: 'value',
1413
snake_case: 'value',
1514
});
1615
});
16+
17+
it('should filter nested kebab-case keys', () => {
18+
const obj = {
19+
nested: {
20+
'nested-kebab-case': 'value',
21+
nestedCamelCase: 'value',
22+
},
23+
};
24+
expect(filterKebabCaseKeys(obj)).toEqual({
25+
nested: {
26+
nestedCamelCase: 'value',
27+
},
28+
});
29+
});
30+
31+
it('should keep array values untouched', () => {
32+
const obj = {
33+
'kebab-case': [],
34+
camelCase: ['kebab-case', { 'kebab-case': 'value' }],
35+
};
36+
expect(filterKebabCaseKeys(obj)).toEqual({
37+
camelCase: ['kebab-case', { 'kebab-case': 'value' }],
38+
});
39+
});
1740
});

0 commit comments

Comments
 (0)