diff --git a/lib/util/schema-utils.spec.ts b/lib/util/schema-utils.spec.ts index 1a9528d07c8448..45ef6761229fe0 100644 --- a/lib/util/schema-utils.spec.ts +++ b/lib/util/schema-utils.spec.ts @@ -51,10 +51,13 @@ describe('util/schema-utils', () => { it('supports key schema', () => { const s = LooseRecord( - z.string().refine((x) => x === 'bar'), - z.string() + z + .string() + .refine((x) => x === 'bar') + .transform((x) => x.toUpperCase()), + z.string().transform((x) => x.toUpperCase()) ); - expect(s.parse({ foo: 'foo', bar: 'bar' })).toEqual({ bar: 'bar' }); + expect(s.parse({ foo: 'foo', bar: 'bar' })).toEqual({ BAR: 'BAR' }); }); it('reports key schema errors', () => { diff --git a/lib/util/schema-utils.ts b/lib/util/schema-utils.ts index bc0b9e0cf1855d..f7d7c0985104ee 100644 --- a/lib/util/schema-utils.ts +++ b/lib/util/schema-utils.ts @@ -146,11 +146,11 @@ export function LooseRecord< // Avoid error-related computations inside the loop return z.record(z.any()).transform((input) => { const output: Record> = {}; - for (const [key, val] of Object.entries(input)) { - const parsedKey = Key.safeParse(key); - const parsedValue = Value.safeParse(val); + for (const [inputKey, inputVal] of Object.entries(input)) { + const parsedKey = Key.safeParse(inputKey); + const parsedValue = Value.safeParse(inputVal); if (parsedKey.success && parsedValue.success) { - output[key] = parsedValue.data; + output[parsedKey.data] = parsedValue.data; } } return output; @@ -161,26 +161,26 @@ export function LooseRecord< const output: Record> = {}; const issues: z.ZodIssue[] = []; - for (const [key, val] of Object.entries(input)) { - const parsedKey = Key.safeParse(key); + for (const [inputKey, inputVal] of Object.entries(input)) { + const parsedKey = Key.safeParse(inputKey); if (!parsedKey.success) { for (const issue of parsedKey.error.issues) { - issue.path.unshift(key); + issue.path.unshift(inputKey); issues.push(issue); } continue; } - const parsedValue = Value.safeParse(val); + const parsedValue = Value.safeParse(inputVal); if (!parsedValue.success) { for (const issue of parsedValue.error.issues) { - issue.path.unshift(key); + issue.path.unshift(inputKey); issues.push(issue); } continue; } - output[key] = parsedValue.data; + output[parsedKey.data] = parsedValue.data; continue; }