Skip to content

Commit

Permalink
fix: Transform arrays inside an object
Browse files Browse the repository at this point in the history
  • Loading branch information
neet committed Apr 24, 2021
1 parent d2695a0 commit d22a145
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
25 changes: 25 additions & 0 deletions src/serializers/serializer-impl.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,29 @@ describe('transformKeys', () => {
key: { keyKey: { keyKeyKey: 'value' } },
});
});

it('transforms a deep object inside an array', () => {
expect(transformKeys([{ key_one: 'value' }], camelCase)).toEqual([
{
keyOne: 'value',
},
]);
});

it('transforms a array inside an object', () => {
expect(
transformKeys(
{
key_one: [
{
value_one: 'value',
},
],
},
camelCase,
),
).toEqual({
keyOne: [{ valueOne: 'value' }],
});
});
});
6 changes: 3 additions & 3 deletions src/serializers/transform-keys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const fromEntries = <T>(entries: [string, unknown][]) => {

// prettier-ignore
export const transformKeys = <T>(
data: Record<string, unknown>,
data: unknown,
transform: (key: string) => string,
): T => {
if (Array.isArray(data)) {
Expand All @@ -26,10 +26,10 @@ export const transformKeys = <T>(
return fromEntries<T>(
Object.entries(data).map(([key, value]) => [
transform(key),
isObject(value) ? transformKeys(value, transform) : value,
transformKeys(value, transform),
]) as any,
);
}

return data;
return data as T;
}

0 comments on commit d22a145

Please sign in to comment.