From 486eb3a1f6d3239609388fff5c74c9ed73c5a099 Mon Sep 17 00:00:00 2001 From: Yann Provoost Date: Thu, 27 Feb 2025 15:11:03 +0100 Subject: [PATCH] feat(zod-mock): add support for readonly fields --- packages/zod-mock/src/lib/zod-mock.spec.ts | 2 ++ packages/zod-mock/src/lib/zod-mock.ts | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/packages/zod-mock/src/lib/zod-mock.spec.ts b/packages/zod-mock/src/lib/zod-mock.spec.ts index dd19d88..81d836a 100644 --- a/packages/zod-mock/src/lib/zod-mock.spec.ts +++ b/packages/zod-mock/src/lib/zod-mock.spec.ts @@ -32,6 +32,7 @@ describe('zod-mock', () => { z.object({ discriminator: z.literal('a'), a: z.boolean() }), z.object({ discriminator: z.literal('b'), b: z.string() }), ]), + readonly: z.boolean().readonly(), }); const mockData = generateMock(schema); @@ -58,6 +59,7 @@ describe('zod-mock', () => { expect(mockData.set).toBeTruthy(); expect(mockData.map).toBeTruthy(); expect(mockData.discriminatedUnion).toBeTruthy(); + expect(typeof mockData.readonly).toEqual('boolean'); }); it('should generate mock data of the appropriate type when the field names overlap Faker properties that are not valid functions', () => { diff --git a/packages/zod-mock/src/lib/zod-mock.ts b/packages/zod-mock/src/lib/zod-mock.ts index 45d08c2..5799857 100644 --- a/packages/zod-mock/src/lib/zod-mock.ts +++ b/packages/zod-mock/src/lib/zod-mock.ts @@ -536,6 +536,13 @@ function parseLazy( return generateMock(zodRef._def.getter(), options); } +function parseReadonly( + zodRef: z.ZodReadonly, + options?: GenerateMockOptions +) { + return generateMock(zodRef._def.innerType, options); +} + const workerMap = { ZodObject: parseObject, ZodRecord: parseRecord, @@ -565,6 +572,7 @@ const workerMap = { ZodBranded: parseBranded, ZodNull: () => null, ZodNaN: () => NaN, + ZodReadonly: parseReadonly, }; type WorkerKeys = keyof typeof workerMap;