UNPKG

fastify-type-provider-zod

Version:

Zod Type Provider for Fastify@5

1 lines 3.75 kB
{"version":3,"file":"zod-to-json.cjs","sources":["../../src/zod-to-json.ts"],"sourcesContent":["import { z } from 'zod/v4'\n\nconst getSchemaId = (id: string, io: 'input' | 'output') => {\n return io === 'input' ? `${id}Input` : id\n}\n\nconst getReferenceUri = (id: string, io: 'input' | 'output') => {\n return `#/components/schemas/${getSchemaId(id, io)}`\n}\n\nfunction isZodDate(entity: unknown): entity is z.ZodDate {\n // @ts-expect-error this is expected\n return entity.constructor.name === 'ZodDate'\n}\n\nconst getOverride = (\n ctx: {\n zodSchema: z.core.$ZodType\n jsonSchema: z.core.JSONSchema.BaseSchema\n },\n io: 'input' | 'output',\n) => {\n if (io === 'output') {\n // Allow dates to be represented as strings in output schemas\n if (isZodDate(ctx.zodSchema)) {\n ctx.jsonSchema.type = 'string'\n ctx.jsonSchema.format = 'date-time'\n }\n }\n}\n\nconst deleteInvalidProperties: (\n schema: z.core.JSONSchema.BaseSchema,\n) => Omit<z.core.JSONSchema.BaseSchema, 'id' | '$schema'> = (schema) => {\n const object = { ...schema }\n\n delete object.id\n delete object.$schema\n\n return object\n}\n\nexport const zodSchemaToJson: (\n zodSchema: z.ZodType,\n registry: z.core.$ZodRegistry<{ id?: string }>,\n io: 'input' | 'output',\n) => ReturnType<typeof deleteInvalidProperties> = (zodSchema, registry, io) => {\n const result = z.toJSONSchema(zodSchema, {\n io,\n unrepresentable: 'any',\n cycles: 'ref',\n reused: 'inline',\n external: {\n registry,\n uri: (id) => getReferenceUri(id, io),\n defs: {},\n },\n override: (ctx) => getOverride(ctx, io),\n })\n\n const jsonSchema = deleteInvalidProperties(result)\n\n return jsonSchema\n}\n\nexport const zodRegistryToJson: (\n registry: z.core.$ZodRegistry<{ id?: string }>,\n io: 'input' | 'output',\n) => Record<string, z.core.JSONSchema.BaseSchema> = (registry, io) => {\n const result = z.toJSONSchema(registry, {\n io,\n unrepresentable: 'any',\n cycles: 'ref',\n reused: 'inline',\n uri: (id) => getReferenceUri(id, io),\n external: {\n registry,\n uri: (id) => getReferenceUri(id, io),\n defs: {},\n },\n override: (ctx) => getOverride(ctx, io),\n }).schemas\n\n const jsonSchemas: Record<string, z.core.JSONSchema.BaseSchema> = {}\n\n for (const id in result) {\n jsonSchemas[getSchemaId(id, io)] = deleteInvalidProperties(result[id])\n }\n\n return jsonSchemas\n}\n"],"names":["z"],"mappings":";;;AAEA,MAAM,cAAc,CAAC,IAAY,OAA2B;AAC1D,SAAO,OAAO,UAAU,GAAG,EAAE,UAAU;AACzC;AAEA,MAAM,kBAAkB,CAAC,IAAY,OAA2B;AAC9D,SAAO,wBAAwB,YAAY,IAAI,EAAE,CAAC;AACpD;AAEA,SAAS,UAAU,QAAsC;AAEhD,SAAA,OAAO,YAAY,SAAS;AACrC;AAEA,MAAM,cAAc,CAClB,KAIA,OACG;AACH,MAAI,OAAO,UAAU;AAEf,QAAA,UAAU,IAAI,SAAS,GAAG;AAC5B,UAAI,WAAW,OAAO;AACtB,UAAI,WAAW,SAAS;AAAA,IAAA;AAAA,EAC1B;AAEJ;AAEA,MAAM,0BAEsD,CAAC,WAAW;AAChE,QAAA,SAAS,EAAE,GAAG,OAAO;AAE3B,SAAO,OAAO;AACd,SAAO,OAAO;AAEP,SAAA;AACT;AAEO,MAAM,kBAIqC,CAAC,WAAW,UAAU,OAAO;AACvE,QAAA,SAASA,GAAAA,EAAE,aAAa,WAAW;AAAA,IACvC;AAAA,IACA,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,MACR;AAAA,MACA,KAAK,CAAC,OAAO,gBAAgB,IAAI,EAAE;AAAA,MACnC,MAAM,CAAA;AAAA,IACR;AAAA,IACA,UAAU,CAAC,QAAQ,YAAY,KAAK,EAAE;AAAA,EAAA,CACvC;AAEK,QAAA,aAAa,wBAAwB,MAAM;AAE1C,SAAA;AACT;AAEa,MAAA,oBAGuC,CAAC,UAAU,OAAO;AAC9D,QAAA,SAASA,GAAAA,EAAE,aAAa,UAAU;AAAA,IACtC;AAAA,IACA,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK,CAAC,OAAO,gBAAgB,IAAI,EAAE;AAAA,IACnC,UAAU;AAAA,MACR;AAAA,MACA,KAAK,CAAC,OAAO,gBAAgB,IAAI,EAAE;AAAA,MACnC,MAAM,CAAA;AAAA,IACR;AAAA,IACA,UAAU,CAAC,QAAQ,YAAY,KAAK,EAAE;AAAA,EACvC,CAAA,EAAE;AAEH,QAAM,cAA4D,CAAC;AAEnE,aAAW,MAAM,QAAQ;AACX,gBAAA,YAAY,IAAI,EAAE,CAAC,IAAI,wBAAwB,OAAO,EAAE,CAAC;AAAA,EAAA;AAGhE,SAAA;AACT;;;"}