@korix/zod-schema 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -25,33 +25,108 @@ const __korix_kori = __toESM(require("@korix/kori"));
25
25
  require("zod");
26
26
 
27
27
  //#region src/zod-schema.ts
28
- const ZodSchemaBrand = Symbol("zod-schema-brand");
28
+ const ZodSchemaProvider = Symbol("zod-schema-provider");
29
29
  const createKoriZodSchema = (schema) => {
30
- return (0, __korix_kori.createKoriSchema)(ZodSchemaBrand, schema);
30
+ return (0, __korix_kori.createKoriSchema)({
31
+ provider: ZodSchemaProvider,
32
+ definition: schema
33
+ });
31
34
  };
32
35
  function isKoriZodSchema(value) {
33
36
  if (!(0, __korix_kori.isKoriSchema)(value)) return false;
34
- return (0, __korix_kori.getKoriSchemaBrand)(value) === ZodSchemaBrand;
37
+ return (0, __korix_kori.getKoriSchemaProvider)(value) === ZodSchemaProvider;
35
38
  }
36
39
 
37
40
  //#endregion
38
41
  //#region src/zod-request-schema.ts
39
- function zodRequestSchema(input) {
40
- const result = {};
41
- if (input.params) result.params = createKoriZodSchema(input.params);
42
- if (input.headers) result.headers = createKoriZodSchema(input.headers);
43
- if (input.queries) result.queries = createKoriZodSchema(input.queries);
44
- if (input.body) result.body = createKoriZodSchema(input.body);
45
- return result;
42
+ function isZodType$1(value) {
43
+ return !!value && typeof value === "object" && "safeParse" in value;
44
+ }
45
+ function zodRequestSchema(options) {
46
+ const params = options.params ? createKoriZodSchema(options.params) : void 0;
47
+ const headers = options.headers ? createKoriZodSchema(options.headers) : void 0;
48
+ const queries = options.queries ? createKoriZodSchema(options.queries) : void 0;
49
+ let simpleBody;
50
+ let contentBody;
51
+ if (options.body) if (isZodType$1(options.body)) simpleBody = createKoriZodSchema(options.body);
52
+ else if (!("content" in options.body)) simpleBody = {
53
+ description: options.body.description,
54
+ schema: createKoriZodSchema(options.body.schema),
55
+ examples: options.body.examples
56
+ };
57
+ else contentBody = {
58
+ description: options.body.description,
59
+ content: mapZodBodyMapping(options.body.content)
60
+ };
61
+ if (contentBody) return (0, __korix_kori.createKoriRequestSchema)({
62
+ provider: ZodSchemaProvider,
63
+ params,
64
+ headers,
65
+ queries,
66
+ body: contentBody
67
+ });
68
+ else return (0, __korix_kori.createKoriRequestSchema)({
69
+ provider: ZodSchemaProvider,
70
+ params,
71
+ headers,
72
+ queries,
73
+ body: simpleBody
74
+ });
75
+ }
76
+ function mapZodBodyMapping(m) {
77
+ const out = {};
78
+ for (const [mt, item] of Object.entries(m)) if (isZodType$1(item)) out[mt] = createKoriZodSchema(item);
79
+ else out[mt] = {
80
+ schema: createKoriZodSchema(item.schema),
81
+ examples: item.examples
82
+ };
83
+ return out;
46
84
  }
47
85
 
48
86
  //#endregion
49
87
  //#region src/zod-response-schema.ts
50
- function zodResponseSchema(schema) {
51
- return schema;
88
+ function isZodType(value) {
89
+ return !!value && typeof value === "object" && "safeParse" in value;
90
+ }
91
+ function toKoriContent(content) {
92
+ const out = {};
93
+ for (const [mt, item] of Object.entries(content)) if (isZodType(item)) out[mt] = createKoriZodSchema(item);
94
+ else out[mt] = {
95
+ schema: createKoriZodSchema(item.schema),
96
+ examples: item.examples
97
+ };
98
+ return out;
99
+ }
100
+ function toKoriEntry(entry) {
101
+ if (isZodType(entry)) return createKoriZodSchema(entry);
102
+ if ("content" in entry) return {
103
+ description: entry.description,
104
+ headers: entry.headers ? createKoriZodSchema(entry.headers) : void 0,
105
+ content: toKoriContent(entry.content),
106
+ links: entry.links
107
+ };
108
+ return {
109
+ description: entry.description,
110
+ headers: entry.headers ? createKoriZodSchema(entry.headers) : void 0,
111
+ schema: createKoriZodSchema(entry.schema),
112
+ examples: entry.examples,
113
+ links: entry.links
114
+ };
115
+ }
116
+ function zodResponseSchema(responses) {
117
+ const out = {};
118
+ for (const status in responses) {
119
+ const entry = responses[status];
120
+ if (entry !== void 0) out[status] = toKoriEntry(entry);
121
+ }
122
+ return (0, __korix_kori.createKoriResponseSchema)({
123
+ provider: ZodSchemaProvider,
124
+ responses: out
125
+ });
52
126
  }
53
127
 
54
128
  //#endregion
129
+ exports.ZodSchemaProvider = ZodSchemaProvider;
55
130
  exports.createKoriZodSchema = createKoriZodSchema;
56
131
  exports.isKoriZodSchema = isKoriZodSchema;
57
132
  exports.zodRequestSchema = zodRequestSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["schema: T","value: unknown","input: {\n params?: TParams;\n headers?: THeaders;\n queries?: TQueries;\n body?: TBody;\n}","result: Record<string, KoriZodSchema<z.ZodType>>","schema: KoriResponseSchemaStructure<S>"],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":["import {\n type KoriSchema,\n type KoriSchemaProvider,\n createKoriSchema,\n isKoriSchema,\n getKoriSchemaBrand,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nconst ZodSchemaBrand = Symbol('zod-schema-brand');\n\nexport type KoriZodSchemaProvider = KoriSchemaProvider<'zod'>;\n\nexport type KoriZodSchema<T extends z.ZodType> = KoriSchema<T, z.output<T>>;\n\nexport type KoriZodSchemaDefault = KoriZodSchema<z.ZodType>;\n\nexport const createKoriZodSchema = <T extends z.ZodType>(schema: T): KoriZodSchema<T> => {\n return createKoriSchema(ZodSchemaBrand, schema);\n};\n\nexport function isKoriZodSchema(value: unknown): value is KoriZodSchemaDefault {\n if (!isKoriSchema(value)) {\n return false;\n }\n return getKoriSchemaBrand(value) === ZodSchemaBrand;\n}\n","import {\n type KoriRequestSchema,\n type KoriRequestSchemaStructure,\n type KoriRequestSchemaContent,\n type KoriRequestSchemaBody,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nimport { type KoriZodSchema, type KoriZodSchemaProvider, createKoriZodSchema } from './zod-schema.js';\n\nexport type KoriZodRequestSchema<\n Params extends KoriZodSchema<z.ZodType> = never,\n Headers extends KoriZodSchema<z.ZodType> = never,\n Queries extends KoriZodSchema<z.ZodType> = never,\n Body extends KoriZodSchema<z.ZodType> = never,\n> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body>;\n\nexport type KoriZodRequestParts = KoriRequestSchemaStructure<\n KoriZodSchema<z.ZodType>,\n KoriZodSchema<z.ZodType>,\n KoriZodSchema<z.ZodType>,\n KoriZodSchema<z.ZodType>\n>;\n\nexport type KoriZodRequestBodySchema =\n | KoriZodSchema<z.ZodType>\n | KoriRequestSchemaContent<KoriZodSchema<z.ZodType>>\n | KoriRequestSchemaBody<KoriZodSchema<z.ZodType>>;\n\ntype ToKoriZodSchema<T extends z.ZodType> = KoriZodSchema<T>;\n\nexport function zodRequestSchema<\n TParams extends z.ZodType | undefined = undefined,\n THeaders extends z.ZodType | undefined = undefined,\n TQueries extends z.ZodType | undefined = undefined,\n TBody extends z.ZodType | undefined = undefined,\n>(input: {\n params?: TParams;\n headers?: THeaders;\n queries?: TQueries;\n body?: TBody;\n}): KoriZodRequestSchema<\n TParams extends z.ZodType ? ToKoriZodSchema<TParams> : never,\n THeaders extends z.ZodType ? ToKoriZodSchema<THeaders> : never,\n TQueries extends z.ZodType ? ToKoriZodSchema<TQueries> : never,\n TBody extends z.ZodType ? ToKoriZodSchema<TBody> : never\n> {\n const result: Record<string, KoriZodSchema<z.ZodType>> = {};\n\n if (input.params) {\n result.params = createKoriZodSchema(input.params);\n }\n\n if (input.headers) {\n result.headers = createKoriZodSchema(input.headers);\n }\n\n if (input.queries) {\n result.queries = createKoriZodSchema(input.queries);\n }\n\n if (input.body) {\n result.body = createKoriZodSchema(input.body);\n }\n\n return result;\n}\n","import { type KoriResponseSchema, type KoriResponseSchemaStructure } from '@korix/kori';\nimport { type z } from 'zod';\n\nimport { type KoriZodSchema, type KoriZodSchemaProvider } from './zod-schema.js';\n\nexport type KoriZodResponseSchema<S extends KoriZodSchema<z.ZodType>> = KoriResponseSchema<KoriZodSchemaProvider, S>;\n\nexport function zodResponseSchema<S extends KoriZodSchema<z.ZodType>>(\n schema: KoriResponseSchemaStructure<S>,\n): KoriZodResponseSchema<S> {\n return schema;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,iBAAiB,OAAO,mBAAmB;AAQjD,MAAa,sBAAsB,CAAsBA,WAAgC;AACvF,QAAO,mCAAiB,gBAAgB,OAAO;AAChD;AAED,SAAgB,gBAAgBC,OAA+C;AAC7E,MAAK,+BAAa,MAAM,CACtB,QAAO;AAET,QAAO,qCAAmB,MAAM,KAAK;AACtC;;;;ACKD,SAAgB,iBAKdC,OAUA;CACA,MAAMC,SAAmD,CAAE;AAE3D,KAAI,MAAM,OACR,QAAO,SAAS,oBAAoB,MAAM,OAAO;AAGnD,KAAI,MAAM,QACR,QAAO,UAAU,oBAAoB,MAAM,QAAQ;AAGrD,KAAI,MAAM,QACR,QAAO,UAAU,oBAAoB,MAAM,QAAQ;AAGrD,KAAI,MAAM,KACR,QAAO,OAAO,oBAAoB,MAAM,KAAK;AAG/C,QAAO;AACR;;;;AC3DD,SAAgB,kBACdC,QAC0B;AAC1B,QAAO;AACR"}
1
+ {"version":3,"file":"index.cjs","names":["schema: T","value: unknown","isZodType","value: unknown","options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaSimpleBody<ZBody> | ZodRequestSchemaContentBody<ZBodyMapping>;\n}","simpleBody:\n | KoriZodSchema<ZBody>\n | { description?: string; schema: KoriZodSchema<ZBody>; examples?: Record<string, unknown> }\n | undefined","contentBody: KoriRequestSchemaContentBody<ZBodyMappingToBodyMapping<ZBodyMapping>> | undefined","m: M","out: Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchema<z.ZodType>>>","value: unknown","content: ZodResponseSchemaContentEntryMappingDefault","out: Record<string, KoriResponseSchemaContentEntryItem<KoriZodSchema<z.ZodType>>>","entry: ZodResponseSchemaEntry","responses: ZResponses"],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":["import { type KoriSchema, createKoriSchema, getKoriSchemaProvider, isKoriSchema } from '@korix/kori';\nimport { type z } from 'zod';\n\nexport const ZodSchemaProvider = Symbol('zod-schema-provider');\n\nexport type KoriZodSchemaProvider = typeof ZodSchemaProvider;\n\nexport type KoriZodSchema<T extends z.ZodType> = KoriSchema<KoriZodSchemaProvider, T, z.output<T>>;\n\nexport type KoriZodSchemaDefault = KoriZodSchema<z.ZodType>;\n\nexport const createKoriZodSchema = <T extends z.ZodType>(schema: T): KoriZodSchema<T> => {\n return createKoriSchema({ provider: ZodSchemaProvider, definition: schema });\n};\n\nexport function isKoriZodSchema(value: unknown): value is KoriZodSchemaDefault {\n if (!isKoriSchema(value)) {\n return false;\n }\n return getKoriSchemaProvider(value) === ZodSchemaProvider;\n}\n","import {\n createKoriRequestSchema,\n type KoriRequestSchema,\n type KoriRequestSchemaContentBody,\n type KoriRequestSchemaContentBodyItem,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nimport {\n type KoriZodSchema,\n type KoriZodSchemaDefault,\n type KoriZodSchemaProvider,\n ZodSchemaProvider,\n createKoriZodSchema,\n} from './zod-schema.js';\n\nexport type KoriZodRequestSchema<\n Params extends KoriZodSchemaDefault = never,\n Headers extends KoriZodSchemaDefault = never,\n Queries extends KoriZodSchemaDefault = never,\n Body extends KoriZodSchemaDefault = never,\n BodyMapping extends Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchemaDefault>> = never,\n> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body, BodyMapping>;\n\ntype ZodRequestSchemaSimpleBody<Z extends z.ZodType> =\n | Z\n | {\n description?: string;\n schema: Z;\n examples?: Record<string, unknown>;\n };\n\ntype ZodRequestSchemaContentBodyItem<Z extends z.ZodType> =\n | Z\n | {\n schema: Z;\n examples?: Record<string, unknown>;\n };\n\ntype ZodRequestSchemaContentBodyItemDefault = ZodRequestSchemaContentBodyItem<z.ZodType>;\n\ntype ZodRequestSchemaContentBodyMappingDefault = Record<string, ZodRequestSchemaContentBodyItemDefault>;\n\ntype ZodRequestSchemaContentBody<ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault> = {\n description?: string;\n content: ZBodyMapping;\n};\n\ntype ZBodyItemToBodyItem<Item extends ZodRequestSchemaContentBodyItemDefault> = Item extends z.ZodType\n ? KoriZodSchema<Item>\n : Item extends { schema: infer S; examples?: infer X }\n ? S extends z.ZodType\n ? { schema: KoriZodSchema<S>; examples?: X }\n : never\n : never;\n\ntype ZBodyMappingToBodyMapping<M extends ZodRequestSchemaContentBodyMappingDefault> = {\n [K in keyof M]: ZBodyItemToBodyItem<M[K]>;\n};\n\nfunction isZodType(value: unknown): value is z.ZodType {\n return !!value && typeof value === 'object' && 'safeParse' in (value as Record<string, unknown>);\n}\n\n// Overload 1: single zod types\nexport function zodRequestSchema<\n ZParams extends z.ZodType = never,\n ZHeaders extends z.ZodType = never,\n ZQueries extends z.ZodType = never,\n ZBody extends z.ZodType = never,\n>(options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaSimpleBody<ZBody>;\n}): KoriZodRequestSchema<\n KoriZodSchema<ZParams>,\n KoriZodSchema<ZHeaders>,\n KoriZodSchema<ZQueries>,\n KoriZodSchema<ZBody>\n>;\n\n// Overload 2: content map or body spec using zod types\nexport function zodRequestSchema<\n ZParams extends z.ZodType = never,\n ZHeaders extends z.ZodType = never,\n ZQueries extends z.ZodType = never,\n ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault = never,\n>(options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaContentBody<ZBodyMapping>;\n}): KoriZodRequestSchema<\n KoriZodSchema<ZParams>,\n KoriZodSchema<ZHeaders>,\n KoriZodSchema<ZQueries>,\n never,\n ZBodyMappingToBodyMapping<ZBodyMapping>\n>;\n\n// Impl\nexport function zodRequestSchema<\n ZParams extends z.ZodType = never,\n ZHeaders extends z.ZodType = never,\n ZQueries extends z.ZodType = never,\n ZBody extends z.ZodType = never,\n ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault = never,\n>(options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaSimpleBody<ZBody> | ZodRequestSchemaContentBody<ZBodyMapping>;\n}): KoriZodRequestSchema<\n KoriZodSchema<ZParams>,\n KoriZodSchema<ZHeaders>,\n KoriZodSchema<ZQueries>,\n KoriZodSchema<ZBody>,\n ZBodyMappingToBodyMapping<ZBodyMapping>\n> {\n const params = options.params ? createKoriZodSchema(options.params) : undefined;\n const headers = options.headers ? createKoriZodSchema(options.headers) : undefined;\n const queries = options.queries ? createKoriZodSchema(options.queries) : undefined;\n\n let simpleBody:\n | KoriZodSchema<ZBody>\n | { description?: string; schema: KoriZodSchema<ZBody>; examples?: Record<string, unknown> }\n | undefined;\n\n let contentBody: KoriRequestSchemaContentBody<ZBodyMappingToBodyMapping<ZBodyMapping>> | undefined;\n\n if (options.body) {\n if (isZodType(options.body)) {\n // simple body\n simpleBody = createKoriZodSchema(options.body);\n } else if (!('content' in options.body)) {\n simpleBody = {\n description: options.body.description,\n schema: createKoriZodSchema(options.body.schema),\n examples: options.body.examples,\n };\n } else {\n // content body\n contentBody = {\n description: options.body.description,\n content: mapZodBodyMapping(options.body.content),\n };\n }\n }\n\n if (contentBody) {\n return createKoriRequestSchema({\n provider: ZodSchemaProvider,\n params,\n headers,\n queries,\n body: contentBody,\n });\n } else {\n return createKoriRequestSchema({\n provider: ZodSchemaProvider,\n params,\n headers,\n queries,\n body: simpleBody,\n });\n }\n}\n\nfunction mapZodBodyMapping<M extends Record<string, ZodRequestSchemaContentBodyItem<z.ZodType>>>(\n m: M,\n): ZBodyMappingToBodyMapping<M> {\n const out: Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchema<z.ZodType>>> = {};\n for (const [mt, item] of Object.entries(m)) {\n if (isZodType(item)) {\n out[mt] = createKoriZodSchema(item);\n } else {\n out[mt] = { schema: createKoriZodSchema(item.schema), examples: item.examples };\n }\n }\n return out as ZBodyMappingToBodyMapping<M>;\n}\n","import {\n createKoriResponseSchema,\n type KoriResponseSchema,\n type KoriResponseSchemaContentEntry,\n type KoriResponseSchemaContentEntryItem,\n type KoriResponseSchemaEntry,\n type KoriResponseSchemaSimpleEntry,\n type KoriResponseSchemaStatusCode,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nimport {\n type KoriZodSchema,\n type KoriZodSchemaProvider,\n ZodSchemaProvider,\n createKoriZodSchema,\n} from './zod-schema.js';\n\nexport type KoriZodResponseSchema<\n Responses extends Partial<Record<KoriResponseSchemaStatusCode, KoriResponseSchemaEntry<KoriZodSchemaProvider>>>,\n> = KoriResponseSchema<KoriZodSchemaProvider, Responses>;\n\ntype ZodResponseSchemaSimpleEntry<ZHeaders extends z.ZodType, Z extends z.ZodType> =\n | Z\n | {\n description?: string;\n headers?: ZHeaders;\n schema: Z;\n examples?: Record<string, unknown>;\n links?: Record<string, unknown>;\n };\n\ntype ZodResponseSchemaContentEntryItem<Z extends z.ZodType> =\n | Z\n | {\n schema: Z;\n examples?: Record<string, unknown>;\n };\n\ntype ZodResponseSchemaContentEntryItemDefault = ZodResponseSchemaContentEntryItem<z.ZodType>;\n\ntype ZodResponseSchemaContentEntryMappingDefault = Record<string, ZodResponseSchemaContentEntryItemDefault>;\n\ntype ZodResponseSchemaContentEntry<\n ZHeaders extends z.ZodType,\n ZContentMapping extends ZodResponseSchemaContentEntryMappingDefault,\n> = {\n description?: string;\n headers?: ZHeaders;\n content: ZContentMapping;\n links?: Record<string, unknown>;\n};\n\ntype ZodResponseSchemaEntry =\n | ZodResponseSchemaSimpleEntry<z.ZodType, z.ZodType>\n | ZodResponseSchemaContentEntry<z.ZodType, ZodResponseSchemaContentEntryMappingDefault>;\n\ntype ZContentItemToKori<Item> = Item extends z.ZodType\n ? KoriResponseSchemaContentEntryItem<KoriZodSchema<Item>>\n : Item extends { schema: infer SZ; examples?: infer EX }\n ? SZ extends z.ZodType\n ? { schema: KoriZodSchema<SZ>; examples?: EX }\n : never\n : never;\n\ntype ZContentMapToKori<Map extends ZodResponseSchemaContentEntryMappingDefault> = {\n [K in keyof Map]: ZContentItemToKori<Map[K]>;\n};\n\ntype ZEntryToKori<E> =\n // simple\n E extends z.ZodType\n ? KoriResponseSchemaSimpleEntry<KoriZodSchema<z.ZodType>, KoriZodSchema<E>>\n : // simple wrapper\n E extends { schema: infer SZ; headers?: infer H }\n ? SZ extends z.ZodType\n ? KoriResponseSchemaSimpleEntry<\n H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>,\n KoriZodSchema<SZ>\n >\n : never\n : // content: content map\n E extends { content: infer CM; headers?: infer H }\n ? KoriResponseSchemaContentEntry<\n H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>,\n ZContentMapToKori<Extract<CM, ZodResponseSchemaContentEntryMappingDefault>>\n >\n : never;\n\nexport type ToKoriZodResponseSchema<\n ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>,\n> = KoriZodResponseSchema<{ [S in keyof ZResponses]?: ZEntryToKori<ZResponses[S]> }>;\n\nfunction isZodType(value: unknown): value is z.ZodType {\n return !!value && typeof value === 'object' && 'safeParse' in (value as Record<string, unknown>);\n}\n\nfunction toKoriContent(\n content: ZodResponseSchemaContentEntryMappingDefault,\n): Record<string, KoriResponseSchemaContentEntryItem<KoriZodSchema<z.ZodType>>> {\n const out: Record<string, KoriResponseSchemaContentEntryItem<KoriZodSchema<z.ZodType>>> = {};\n for (const [mt, item] of Object.entries(content)) {\n if (isZodType(item)) {\n out[mt] = createKoriZodSchema(item);\n } else {\n out[mt] = { schema: createKoriZodSchema(item.schema), examples: item.examples };\n }\n }\n return out;\n}\n\nfunction toKoriEntry(entry: ZodResponseSchemaEntry) {\n // simple: zod directly\n if (isZodType(entry)) {\n return createKoriZodSchema(entry);\n }\n // content entry\n if ('content' in entry) {\n return {\n description: entry.description,\n headers: entry.headers ? createKoriZodSchema(entry.headers) : undefined,\n content: toKoriContent(entry.content),\n links: entry.links,\n };\n }\n // simple: spec\n return {\n description: entry.description,\n headers: entry.headers ? createKoriZodSchema(entry.headers) : undefined,\n schema: createKoriZodSchema(entry.schema),\n examples: entry.examples,\n links: entry.links,\n };\n}\n\nexport function zodResponseSchema<\n ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>,\n>(responses: ZResponses): ToKoriZodResponseSchema<ZResponses> {\n const out = {} as { [S in keyof ZResponses]?: ZEntryToKori<ZResponses[S]> };\n\n for (const status in responses) {\n const entry = responses[status] as ZodResponseSchemaEntry;\n if (entry !== undefined) {\n out[status] = toKoriEntry(entry) as ZEntryToKori<ZResponses[typeof status]>;\n }\n }\n\n return createKoriResponseSchema({\n provider: ZodSchemaProvider,\n responses: out as unknown as Partial<\n Record<KoriResponseSchemaStatusCode, KoriResponseSchemaEntry<KoriZodSchemaProvider>>\n >,\n }) as ToKoriZodResponseSchema<ZResponses>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAa,oBAAoB,OAAO,sBAAsB;AAQ9D,MAAa,sBAAsB,CAAsBA,WAAgC;AACvF,QAAO,mCAAiB;EAAE,UAAU;EAAmB,YAAY;CAAQ,EAAC;AAC7E;AAED,SAAgB,gBAAgBC,OAA+C;AAC7E,MAAK,+BAAa,MAAM,CACtB,QAAO;AAET,QAAO,wCAAsB,MAAM,KAAK;AACzC;;;;ACwCD,SAASC,YAAUC,OAAoC;AACrD,UAAS,gBAAgB,UAAU,YAAY,eAAgB;AAChE;AAwCD,SAAgB,iBAMdC,SAWA;CACA,MAAM,SAAS,QAAQ,SAAS,oBAAoB,QAAQ,OAAO;CACnE,MAAM,UAAU,QAAQ,UAAU,oBAAoB,QAAQ,QAAQ;CACtE,MAAM,UAAU,QAAQ,UAAU,oBAAoB,QAAQ,QAAQ;CAEtE,IAAIC;CAKJ,IAAIC;AAEJ,KAAI,QAAQ,KACV,KAAI,YAAU,QAAQ,KAAK,CAEzB,cAAa,oBAAoB,QAAQ,KAAK;YACnC,aAAa,QAAQ,MAChC,cAAa;EACX,aAAa,QAAQ,KAAK;EAC1B,QAAQ,oBAAoB,QAAQ,KAAK,OAAO;EAChD,UAAU,QAAQ,KAAK;CACxB;KAGD,eAAc;EACZ,aAAa,QAAQ,KAAK;EAC1B,SAAS,kBAAkB,QAAQ,KAAK,QAAQ;CACjD;AAIL,KAAI,YACF,QAAO,0CAAwB;EAC7B,UAAU;EACV;EACA;EACA;EACA,MAAM;CACP,EAAC;KAEF,QAAO,0CAAwB;EAC7B,UAAU;EACV;EACA;EACA;EACA,MAAM;CACP,EAAC;AAEL;AAED,SAAS,kBACPC,GAC8B;CAC9B,MAAMC,MAAkF,CAAE;AAC1F,MAAK,MAAM,CAAC,IAAI,KAAK,IAAI,OAAO,QAAQ,EAAE,CACxC,KAAI,YAAU,KAAK,CACjB,KAAI,MAAM,oBAAoB,KAAK;KAEnC,KAAI,MAAM;EAAE,QAAQ,oBAAoB,KAAK,OAAO;EAAE,UAAU,KAAK;CAAU;AAGnF,QAAO;AACR;;;;ACxFD,SAAS,UAAUC,OAAoC;AACrD,UAAS,gBAAgB,UAAU,YAAY,eAAgB;AAChE;AAED,SAAS,cACPC,SAC8E;CAC9E,MAAMC,MAAoF,CAAE;AAC5F,MAAK,MAAM,CAAC,IAAI,KAAK,IAAI,OAAO,QAAQ,QAAQ,CAC9C,KAAI,UAAU,KAAK,CACjB,KAAI,MAAM,oBAAoB,KAAK;KAEnC,KAAI,MAAM;EAAE,QAAQ,oBAAoB,KAAK,OAAO;EAAE,UAAU,KAAK;CAAU;AAGnF,QAAO;AACR;AAED,SAAS,YAAYC,OAA+B;AAElD,KAAI,UAAU,MAAM,CAClB,QAAO,oBAAoB,MAAM;AAGnC,KAAI,aAAa,MACf,QAAO;EACL,aAAa,MAAM;EACnB,SAAS,MAAM,UAAU,oBAAoB,MAAM,QAAQ;EAC3D,SAAS,cAAc,MAAM,QAAQ;EACrC,OAAO,MAAM;CACd;AAGH,QAAO;EACL,aAAa,MAAM;EACnB,SAAS,MAAM,UAAU,oBAAoB,MAAM,QAAQ;EAC3D,QAAQ,oBAAoB,MAAM,OAAO;EACzC,UAAU,MAAM;EAChB,OAAO,MAAM;CACd;AACF;AAED,SAAgB,kBAEdC,WAA4D;CAC5D,MAAM,MAAM,CAAE;AAEd,MAAK,MAAM,UAAU,WAAW;EAC9B,MAAM,QAAQ,UAAU;AACxB,MAAI,iBACF,KAAI,UAAU,YAAY,MAAM;CAEnC;AAED,QAAO,2CAAyB;EAC9B,UAAU;EACV,WAAW;CAGZ,EAAC;AACH"}
package/dist/index.d.cts CHANGED
@@ -1,30 +1,92 @@
1
- import { KoriRequestSchema, KoriRequestSchemaStructure, KoriResponseSchema, KoriResponseSchemaStructure, KoriSchema, KoriSchemaProvider } from "@korix/kori";
1
+ import { KoriRequestSchema, KoriRequestSchemaContentBodyItem, KoriResponseSchema, KoriResponseSchemaContentEntry, KoriResponseSchemaContentEntryItem, KoriResponseSchemaEntry, KoriResponseSchemaSimpleEntry, KoriResponseSchemaStatusCode, KoriSchema } from "@korix/kori";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/zod-schema.d.ts
5
- type KoriZodSchemaProvider = KoriSchemaProvider<'zod'>;
6
- type KoriZodSchema<T extends z.ZodType> = KoriSchema<T, z.output<T>>;
5
+ declare const ZodSchemaProvider: unique symbol;
6
+ type KoriZodSchemaProvider = typeof ZodSchemaProvider;
7
+ type KoriZodSchema<T extends z.ZodType> = KoriSchema<KoriZodSchemaProvider, T, z.output<T>>;
7
8
  type KoriZodSchemaDefault = KoriZodSchema<z.ZodType>;
8
9
  declare const createKoriZodSchema: <T extends z.ZodType>(schema: T) => KoriZodSchema<T>;
9
10
  declare function isKoriZodSchema(value: unknown): value is KoriZodSchemaDefault;
10
11
  //# sourceMappingURL=zod-schema.d.ts.map
11
12
  //#endregion
12
13
  //#region src/zod-request-schema.d.ts
13
- type KoriZodRequestSchema<Params extends KoriZodSchema<z.ZodType> = never, Headers extends KoriZodSchema<z.ZodType> = never, Queries extends KoriZodSchema<z.ZodType> = never, Body extends KoriZodSchema<z.ZodType> = never> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body>;
14
- type KoriZodRequestParts = KoriRequestSchemaStructure<KoriZodSchema<z.ZodType>, KoriZodSchema<z.ZodType>, KoriZodSchema<z.ZodType>, KoriZodSchema<z.ZodType>>;
15
- type ToKoriZodSchema<T extends z.ZodType> = KoriZodSchema<T>;
16
- declare function zodRequestSchema<TParams extends z.ZodType | undefined = undefined, THeaders extends z.ZodType | undefined = undefined, TQueries extends z.ZodType | undefined = undefined, TBody extends z.ZodType | undefined = undefined>(input: {
17
- params?: TParams;
18
- headers?: THeaders;
19
- queries?: TQueries;
20
- body?: TBody;
21
- }): KoriZodRequestSchema<TParams extends z.ZodType ? ToKoriZodSchema<TParams> : never, THeaders extends z.ZodType ? ToKoriZodSchema<THeaders> : never, TQueries extends z.ZodType ? ToKoriZodSchema<TQueries> : never, TBody extends z.ZodType ? ToKoriZodSchema<TBody> : never>;
14
+ type KoriZodRequestSchema<Params extends KoriZodSchemaDefault = never, Headers extends KoriZodSchemaDefault = never, Queries extends KoriZodSchemaDefault = never, Body extends KoriZodSchemaDefault = never, BodyMapping extends Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchemaDefault>> = never> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body, BodyMapping>;
15
+ type ZodRequestSchemaSimpleBody<Z extends z.ZodType> = Z | {
16
+ description?: string;
17
+ schema: Z;
18
+ examples?: Record<string, unknown>;
19
+ };
20
+ type ZodRequestSchemaContentBodyItem<Z extends z.ZodType> = Z | {
21
+ schema: Z;
22
+ examples?: Record<string, unknown>;
23
+ };
24
+ type ZodRequestSchemaContentBodyItemDefault = ZodRequestSchemaContentBodyItem<z.ZodType>;
25
+ type ZodRequestSchemaContentBodyMappingDefault = Record<string, ZodRequestSchemaContentBodyItemDefault>;
26
+ type ZodRequestSchemaContentBody<ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault> = {
27
+ description?: string;
28
+ content: ZBodyMapping;
29
+ };
30
+ type ZBodyItemToBodyItem<Item extends ZodRequestSchemaContentBodyItemDefault> = Item extends z.ZodType ? KoriZodSchema<Item> : Item extends {
31
+ schema: infer S;
32
+ examples?: infer X;
33
+ } ? S extends z.ZodType ? {
34
+ schema: KoriZodSchema<S>;
35
+ examples?: X;
36
+ } : never : never;
37
+ type ZBodyMappingToBodyMapping<M extends ZodRequestSchemaContentBodyMappingDefault> = { [K in keyof M]: ZBodyItemToBodyItem<M[K]> };
38
+ declare function zodRequestSchema<ZParams extends z.ZodType = never, ZHeaders extends z.ZodType = never, ZQueries extends z.ZodType = never, ZBody extends z.ZodType = never>(options: {
39
+ params?: ZParams;
40
+ headers?: ZHeaders;
41
+ queries?: ZQueries;
42
+ body?: ZodRequestSchemaSimpleBody<ZBody>;
43
+ }): KoriZodRequestSchema<KoriZodSchema<ZParams>, KoriZodSchema<ZHeaders>, KoriZodSchema<ZQueries>, KoriZodSchema<ZBody>>;
44
+ declare function zodRequestSchema<ZParams extends z.ZodType = never, ZHeaders extends z.ZodType = never, ZQueries extends z.ZodType = never, ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault = never>(options: {
45
+ params?: ZParams;
46
+ headers?: ZHeaders;
47
+ queries?: ZQueries;
48
+ body?: ZodRequestSchemaContentBody<ZBodyMapping>;
49
+ }): KoriZodRequestSchema<KoriZodSchema<ZParams>, KoriZodSchema<ZHeaders>, KoriZodSchema<ZQueries>, never, ZBodyMappingToBodyMapping<ZBodyMapping>>;
22
50
  //#endregion
23
51
  //#region src/zod-response-schema.d.ts
24
- type KoriZodResponseSchema<S extends KoriZodSchema<z.ZodType>> = KoriResponseSchema<KoriZodSchemaProvider, S>;
25
- declare function zodResponseSchema<S extends KoriZodSchema<z.ZodType>>(schema: KoriResponseSchemaStructure<S>): KoriZodResponseSchema<S>;
26
- //# sourceMappingURL=zod-response-schema.d.ts.map
27
-
52
+ type KoriZodResponseSchema<Responses extends Partial<Record<KoriResponseSchemaStatusCode, KoriResponseSchemaEntry<KoriZodSchemaProvider>>>> = KoriResponseSchema<KoriZodSchemaProvider, Responses>;
53
+ type ZodResponseSchemaSimpleEntry<ZHeaders extends z.ZodType, Z extends z.ZodType> = Z | {
54
+ description?: string;
55
+ headers?: ZHeaders;
56
+ schema: Z;
57
+ examples?: Record<string, unknown>;
58
+ links?: Record<string, unknown>;
59
+ };
60
+ type ZodResponseSchemaContentEntryItem<Z extends z.ZodType> = Z | {
61
+ schema: Z;
62
+ examples?: Record<string, unknown>;
63
+ };
64
+ type ZodResponseSchemaContentEntryItemDefault = ZodResponseSchemaContentEntryItem<z.ZodType>;
65
+ type ZodResponseSchemaContentEntryMappingDefault = Record<string, ZodResponseSchemaContentEntryItemDefault>;
66
+ type ZodResponseSchemaContentEntry<ZHeaders extends z.ZodType, ZContentMapping extends ZodResponseSchemaContentEntryMappingDefault> = {
67
+ description?: string;
68
+ headers?: ZHeaders;
69
+ content: ZContentMapping;
70
+ links?: Record<string, unknown>;
71
+ };
72
+ type ZodResponseSchemaEntry = ZodResponseSchemaSimpleEntry<z.ZodType, z.ZodType> | ZodResponseSchemaContentEntry<z.ZodType, ZodResponseSchemaContentEntryMappingDefault>;
73
+ type ZContentItemToKori<Item> = Item extends z.ZodType ? KoriResponseSchemaContentEntryItem<KoriZodSchema<Item>> : Item extends {
74
+ schema: infer SZ;
75
+ examples?: infer EX;
76
+ } ? SZ extends z.ZodType ? {
77
+ schema: KoriZodSchema<SZ>;
78
+ examples?: EX;
79
+ } : never : never;
80
+ type ZContentMapToKori<Map extends ZodResponseSchemaContentEntryMappingDefault> = { [K in keyof Map]: ZContentItemToKori<Map[K]> };
81
+ type ZEntryToKori<E> = E extends z.ZodType ? KoriResponseSchemaSimpleEntry<KoriZodSchema<z.ZodType>, KoriZodSchema<E>> : E extends {
82
+ schema: infer SZ;
83
+ headers?: infer H;
84
+ } ? SZ extends z.ZodType ? KoriResponseSchemaSimpleEntry<H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>, KoriZodSchema<SZ>> : never : E extends {
85
+ content: infer CM;
86
+ headers?: infer H;
87
+ } ? KoriResponseSchemaContentEntry<H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>, ZContentMapToKori<Extract<CM, ZodResponseSchemaContentEntryMappingDefault>>> : never;
88
+ type ToKoriZodResponseSchema<ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>> = KoriZodResponseSchema<{ [S in keyof ZResponses]?: ZEntryToKori<ZResponses[S]> }>;
89
+ declare function zodResponseSchema<ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>>(responses: ZResponses): ToKoriZodResponseSchema<ZResponses>;
28
90
  //#endregion
29
- export { KoriZodRequestParts, KoriZodRequestSchema, KoriZodResponseSchema, KoriZodSchema, KoriZodSchemaDefault, KoriZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
91
+ export { KoriZodRequestSchema, KoriZodResponseSchema, KoriZodSchema, KoriZodSchemaDefault, KoriZodSchemaProvider, ZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
30
92
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":[],"mappings":";;;;KAWY,qBAAA,GAAwB;KAExB,wBAAwB,CAAA,CAAE,WAAW,WAAW,GAAG,CAAA,CAAE,OAAO;AAF5D,KAIA,oBAAA,GAAuB,aAJC,CAIa,CAAA,CAAE,OAJG,CAAA;AAE1C,cAIC,mBAJY,EAAA,CAAA,UAIqB,CAAA,CAAE,OAJvB,CAAA,CAAA,MAAA,EAIwC,CAJxC,EAAA,GAI4C,aAJ5C,CAI0D,CAJ1D,CAAA;AAAA,iBAQT,eAAA,CARS,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAQiC,oBARjC;;;;KCHb,oCACK,cAAc,CAAA,CAAE,kCACf,cAAc,CAAA,CAAE,kCAChB,cAAc,CAAA,CAAE,+BACnB,cAAc,CAAA,CAAE,oBAC3B,kBAAkB,uBAAuB,QAAQ,SAAS,SAAS;ADJ3D,KCMA,mBAAA,GAAsB,0BDNoB,CCOpD,aDPoD,CCOtC,CAAA,CAAE,ODPoC,CAAA,ECQpD,aDRoD,CCQtC,CAAA,CAAE,ODRoC,CAAA,ECSpD,aDToD,CCStC,CAAA,CAAE,ODToC,CAAA,ECUpD,aDVoD,CCUtC,CAAA,CAAE,ODVoC,CAAA,CAAA;KCkBjD,eDhBoB,CAAA,UCgBM,CAAA,CAAE,ODhBR,CAAA,GCgBmB,aDhBnB,CCgBiC,CDhBjC,CAAA;AAAW,iBCkBpB,gBDlBsB,CAAA,gBCmBpB,CAAA,CAAE,ODnBkB,GAAA,SAAA,GAAA,SAAA,EAAA,iBCoBnB,CAAA,CAAE,ODpBiB,GAAA,SAAA,GAAA,SAAA,EAAA,iBCqBnB,CAAA,CAAE,ODrBiB,GAAA,SAAA,GAAA,SAAA,EAAA,cCsBtB,CAAA,CAAE,ODtBoB,GAAA,SAAA,GAAA,SAAA,CAAA,CAAA,KAAA,EAAA;EAAO,MAAe,CAAA,ECwBjD,ODxBiD;EAAC,OAAW,CAAA,ECyB5D,QDzB4D;EAAC,OAAR,CAAA,EC0BrD,QD1BqD;EAAM,IAAtB,CAAA,EC2BxC,KD3BwC;AAAU,CAAA,CAAA,EC4BvD,oBD5BuD,CC6BzD,OD7ByD,SC6BzC,CAAA,CAAE,OD7BuC,GC6B7B,eD7B6B,CC6Bb,OD7Ba,CAAA,GAAA,KAAA,EC8BzD,QD9ByD,SC8BxC,CAAA,CAAE,OD9BsC,GC8B5B,eD9B4B,CC8BZ,QD9BY,CAAA,GAAA,KAAA,EC+BzD,QD/ByD,SC+BxC,CAAA,CAAE,OD/BsC,GC+B5B,eD/B4B,CC+BZ,QD/BY,CAAA,GAAA,KAAA,ECgCzD,KDhCyD,SCgC3C,CAAA,CAAE,ODhCyC,GCgC/B,eDhC+B,CCgCf,KDhCe,CAAA,GAAA,KAAA,CAAA;;;KER/C,gCAAgC,cAAc,CAAA,CAAE,YAAY,mBAAmB,uBAAuB;AFMtG,iBEJI,iBFIoB,CAAA,UEJQ,aFIU,CEJI,CAAA,CAAE,OFIN,CAAA,CAAA,CAAA,MAAA,EEH5C,2BFG4C,CEHhB,CFGgB,CAAA,CAAA,EEFnD,qBFEmD,CEF7B,CFE6B,CAAA;AAEtD"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":[],"mappings":"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lDY,CCkDO,GDlDP,CCkDW,CDlDX,CAAA,CAAA,EAAA;KCqD3B,YDnDa,CAAA,CAAA,CAAA,GCqDhB,CDrDgB,SCqDN,CAAA,CAAE,ODrDI,GCsDZ,6BDtDY,CCsDkB,aDtDlB,CCsDgC,CAAA,CAAE,ODtDlC,CAAA,ECsD4C,aDtD5C,CCsD0D,CDtD1D,CAAA,CAAA,GCwDZ,CDxDY,SAAA;EAAoB,MACpB,EAAA,KAAA,GAAA;EAAoB,OACvB,CAAA,EAAA,KAAA,EAAA;CAAoB,GCuD3B,EDvD2B,SCuDhB,CAAA,CAAE,ODtDiD,GCuD5D,6BDvD4D,CCwD1D,CDxD0D,SCwDhD,CAAA,CAAE,ODxD8C,GCwDpC,aDxDoC,CCwDtB,CDxDsB,CAAA,GCwDjB,aDxDiB,CCwDH,CAAA,CAAE,ODxDC,CAAA,ECyD1D,aDzD0D,CCyD5C,EDzD4C,CAAA,CAAA,GAAA,KAAA,GC6D9D,CD7D8D,SAAA;EAAoB,OAArD,EAAA,KAAA,GAAA;EAAgC,OAA/C,CAAA,EAAA,KAAA,EAAA;CAAM,GC8DlB,8BD7DY,CC8DV,CD9DU,SC8DA,CAAA,CAAE,OD9DF,GC8DY,aD9DZ,CC8D0B,CD9D1B,CAAA,GC8D+B,aD9D/B,CC8D6C,CAAA,CAAE,OD9D/C,CAAA,EC+DV,iBD/DU,CC+DQ,OD/DR,CC+DgB,ED/DhB,EC+DoB,2CD/DpB,CAAA,CAAA,CAAA,GAAA,KAAA;AAAuB,KCmEjC,uBDnEiC,CAAA,mBCoExB,ODpEwB,CCoEhB,MDpEgB,CCoET,4BDpES,ECoEqB,sBDpErB,CAAA,CAAA,CAAA,GCqEzC,qBDrEyC,CAAA,QAAQ,MCqEb,UDrEa,ICqEC,YDrED,CCqEc,UDrEd,CCqEyB,CDrEzB,CAAA,CAAA,EAAO,CAAA;AAAW,iBCiHvD,iBDjHuD,CAAA,mBCkHlD,ODlHkD,CCkH1C,MDlH0C,CCkHnC,4BDlHmC,ECkHL,sBDlHK,CAAA,CAAA,CAAA,CAAA,SAAA,ECmH1D,UDnH0D,CAAA,ECmH7C,uBDnH6C,CCmHrB,UDnHqB,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,30 +1,92 @@
1
- import { KoriRequestSchema, KoriRequestSchemaStructure, KoriResponseSchema, KoriResponseSchemaStructure, KoriSchema, KoriSchemaProvider } from "@korix/kori";
1
+ import { KoriRequestSchema, KoriRequestSchemaContentBodyItem, KoriResponseSchema, KoriResponseSchemaContentEntry, KoriResponseSchemaContentEntryItem, KoriResponseSchemaEntry, KoriResponseSchemaSimpleEntry, KoriResponseSchemaStatusCode, KoriSchema } from "@korix/kori";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/zod-schema.d.ts
5
- type KoriZodSchemaProvider = KoriSchemaProvider<'zod'>;
6
- type KoriZodSchema<T extends z.ZodType> = KoriSchema<T, z.output<T>>;
5
+ declare const ZodSchemaProvider: unique symbol;
6
+ type KoriZodSchemaProvider = typeof ZodSchemaProvider;
7
+ type KoriZodSchema<T extends z.ZodType> = KoriSchema<KoriZodSchemaProvider, T, z.output<T>>;
7
8
  type KoriZodSchemaDefault = KoriZodSchema<z.ZodType>;
8
9
  declare const createKoriZodSchema: <T extends z.ZodType>(schema: T) => KoriZodSchema<T>;
9
10
  declare function isKoriZodSchema(value: unknown): value is KoriZodSchemaDefault;
10
11
  //# sourceMappingURL=zod-schema.d.ts.map
11
12
  //#endregion
12
13
  //#region src/zod-request-schema.d.ts
13
- type KoriZodRequestSchema<Params extends KoriZodSchema<z.ZodType> = never, Headers extends KoriZodSchema<z.ZodType> = never, Queries extends KoriZodSchema<z.ZodType> = never, Body extends KoriZodSchema<z.ZodType> = never> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body>;
14
- type KoriZodRequestParts = KoriRequestSchemaStructure<KoriZodSchema<z.ZodType>, KoriZodSchema<z.ZodType>, KoriZodSchema<z.ZodType>, KoriZodSchema<z.ZodType>>;
15
- type ToKoriZodSchema<T extends z.ZodType> = KoriZodSchema<T>;
16
- declare function zodRequestSchema<TParams extends z.ZodType | undefined = undefined, THeaders extends z.ZodType | undefined = undefined, TQueries extends z.ZodType | undefined = undefined, TBody extends z.ZodType | undefined = undefined>(input: {
17
- params?: TParams;
18
- headers?: THeaders;
19
- queries?: TQueries;
20
- body?: TBody;
21
- }): KoriZodRequestSchema<TParams extends z.ZodType ? ToKoriZodSchema<TParams> : never, THeaders extends z.ZodType ? ToKoriZodSchema<THeaders> : never, TQueries extends z.ZodType ? ToKoriZodSchema<TQueries> : never, TBody extends z.ZodType ? ToKoriZodSchema<TBody> : never>;
14
+ type KoriZodRequestSchema<Params extends KoriZodSchemaDefault = never, Headers extends KoriZodSchemaDefault = never, Queries extends KoriZodSchemaDefault = never, Body extends KoriZodSchemaDefault = never, BodyMapping extends Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchemaDefault>> = never> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body, BodyMapping>;
15
+ type ZodRequestSchemaSimpleBody<Z extends z.ZodType> = Z | {
16
+ description?: string;
17
+ schema: Z;
18
+ examples?: Record<string, unknown>;
19
+ };
20
+ type ZodRequestSchemaContentBodyItem<Z extends z.ZodType> = Z | {
21
+ schema: Z;
22
+ examples?: Record<string, unknown>;
23
+ };
24
+ type ZodRequestSchemaContentBodyItemDefault = ZodRequestSchemaContentBodyItem<z.ZodType>;
25
+ type ZodRequestSchemaContentBodyMappingDefault = Record<string, ZodRequestSchemaContentBodyItemDefault>;
26
+ type ZodRequestSchemaContentBody<ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault> = {
27
+ description?: string;
28
+ content: ZBodyMapping;
29
+ };
30
+ type ZBodyItemToBodyItem<Item extends ZodRequestSchemaContentBodyItemDefault> = Item extends z.ZodType ? KoriZodSchema<Item> : Item extends {
31
+ schema: infer S;
32
+ examples?: infer X;
33
+ } ? S extends z.ZodType ? {
34
+ schema: KoriZodSchema<S>;
35
+ examples?: X;
36
+ } : never : never;
37
+ type ZBodyMappingToBodyMapping<M extends ZodRequestSchemaContentBodyMappingDefault> = { [K in keyof M]: ZBodyItemToBodyItem<M[K]> };
38
+ declare function zodRequestSchema<ZParams extends z.ZodType = never, ZHeaders extends z.ZodType = never, ZQueries extends z.ZodType = never, ZBody extends z.ZodType = never>(options: {
39
+ params?: ZParams;
40
+ headers?: ZHeaders;
41
+ queries?: ZQueries;
42
+ body?: ZodRequestSchemaSimpleBody<ZBody>;
43
+ }): KoriZodRequestSchema<KoriZodSchema<ZParams>, KoriZodSchema<ZHeaders>, KoriZodSchema<ZQueries>, KoriZodSchema<ZBody>>;
44
+ declare function zodRequestSchema<ZParams extends z.ZodType = never, ZHeaders extends z.ZodType = never, ZQueries extends z.ZodType = never, ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault = never>(options: {
45
+ params?: ZParams;
46
+ headers?: ZHeaders;
47
+ queries?: ZQueries;
48
+ body?: ZodRequestSchemaContentBody<ZBodyMapping>;
49
+ }): KoriZodRequestSchema<KoriZodSchema<ZParams>, KoriZodSchema<ZHeaders>, KoriZodSchema<ZQueries>, never, ZBodyMappingToBodyMapping<ZBodyMapping>>;
22
50
  //#endregion
23
51
  //#region src/zod-response-schema.d.ts
24
- type KoriZodResponseSchema<S extends KoriZodSchema<z.ZodType>> = KoriResponseSchema<KoriZodSchemaProvider, S>;
25
- declare function zodResponseSchema<S extends KoriZodSchema<z.ZodType>>(schema: KoriResponseSchemaStructure<S>): KoriZodResponseSchema<S>;
26
- //# sourceMappingURL=zod-response-schema.d.ts.map
27
-
52
+ type KoriZodResponseSchema<Responses extends Partial<Record<KoriResponseSchemaStatusCode, KoriResponseSchemaEntry<KoriZodSchemaProvider>>>> = KoriResponseSchema<KoriZodSchemaProvider, Responses>;
53
+ type ZodResponseSchemaSimpleEntry<ZHeaders extends z.ZodType, Z extends z.ZodType> = Z | {
54
+ description?: string;
55
+ headers?: ZHeaders;
56
+ schema: Z;
57
+ examples?: Record<string, unknown>;
58
+ links?: Record<string, unknown>;
59
+ };
60
+ type ZodResponseSchemaContentEntryItem<Z extends z.ZodType> = Z | {
61
+ schema: Z;
62
+ examples?: Record<string, unknown>;
63
+ };
64
+ type ZodResponseSchemaContentEntryItemDefault = ZodResponseSchemaContentEntryItem<z.ZodType>;
65
+ type ZodResponseSchemaContentEntryMappingDefault = Record<string, ZodResponseSchemaContentEntryItemDefault>;
66
+ type ZodResponseSchemaContentEntry<ZHeaders extends z.ZodType, ZContentMapping extends ZodResponseSchemaContentEntryMappingDefault> = {
67
+ description?: string;
68
+ headers?: ZHeaders;
69
+ content: ZContentMapping;
70
+ links?: Record<string, unknown>;
71
+ };
72
+ type ZodResponseSchemaEntry = ZodResponseSchemaSimpleEntry<z.ZodType, z.ZodType> | ZodResponseSchemaContentEntry<z.ZodType, ZodResponseSchemaContentEntryMappingDefault>;
73
+ type ZContentItemToKori<Item> = Item extends z.ZodType ? KoriResponseSchemaContentEntryItem<KoriZodSchema<Item>> : Item extends {
74
+ schema: infer SZ;
75
+ examples?: infer EX;
76
+ } ? SZ extends z.ZodType ? {
77
+ schema: KoriZodSchema<SZ>;
78
+ examples?: EX;
79
+ } : never : never;
80
+ type ZContentMapToKori<Map extends ZodResponseSchemaContentEntryMappingDefault> = { [K in keyof Map]: ZContentItemToKori<Map[K]> };
81
+ type ZEntryToKori<E> = E extends z.ZodType ? KoriResponseSchemaSimpleEntry<KoriZodSchema<z.ZodType>, KoriZodSchema<E>> : E extends {
82
+ schema: infer SZ;
83
+ headers?: infer H;
84
+ } ? SZ extends z.ZodType ? KoriResponseSchemaSimpleEntry<H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>, KoriZodSchema<SZ>> : never : E extends {
85
+ content: infer CM;
86
+ headers?: infer H;
87
+ } ? KoriResponseSchemaContentEntry<H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>, ZContentMapToKori<Extract<CM, ZodResponseSchemaContentEntryMappingDefault>>> : never;
88
+ type ToKoriZodResponseSchema<ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>> = KoriZodResponseSchema<{ [S in keyof ZResponses]?: ZEntryToKori<ZResponses[S]> }>;
89
+ declare function zodResponseSchema<ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>>(responses: ZResponses): ToKoriZodResponseSchema<ZResponses>;
28
90
  //#endregion
29
- export { KoriZodRequestParts, KoriZodRequestSchema, KoriZodResponseSchema, KoriZodSchema, KoriZodSchemaDefault, KoriZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
91
+ export { KoriZodRequestSchema, KoriZodResponseSchema, KoriZodSchema, KoriZodSchemaDefault, KoriZodSchemaProvider, ZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
30
92
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":[],"mappings":";;;;KAWY,qBAAA,GAAwB;KAExB,wBAAwB,CAAA,CAAE,WAAW,WAAW,GAAG,CAAA,CAAE,OAAO;AAF5D,KAIA,oBAAA,GAAuB,aAJC,CAIa,CAAA,CAAE,OAJG,CAAA;AAE1C,cAIC,mBAJY,EAAA,CAAA,UAIqB,CAAA,CAAE,OAJvB,CAAA,CAAA,MAAA,EAIwC,CAJxC,EAAA,GAI4C,aAJ5C,CAI0D,CAJ1D,CAAA;AAAA,iBAQT,eAAA,CARS,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAQiC,oBARjC;;;;KCHb,oCACK,cAAc,CAAA,CAAE,kCACf,cAAc,CAAA,CAAE,kCAChB,cAAc,CAAA,CAAE,+BACnB,cAAc,CAAA,CAAE,oBAC3B,kBAAkB,uBAAuB,QAAQ,SAAS,SAAS;ADJ3D,KCMA,mBAAA,GAAsB,0BDNoB,CCOpD,aDPoD,CCOtC,CAAA,CAAE,ODPoC,CAAA,ECQpD,aDRoD,CCQtC,CAAA,CAAE,ODRoC,CAAA,ECSpD,aDToD,CCStC,CAAA,CAAE,ODToC,CAAA,ECUpD,aDVoD,CCUtC,CAAA,CAAE,ODVoC,CAAA,CAAA;KCkBjD,eDhBoB,CAAA,UCgBM,CAAA,CAAE,ODhBR,CAAA,GCgBmB,aDhBnB,CCgBiC,CDhBjC,CAAA;AAAW,iBCkBpB,gBDlBsB,CAAA,gBCmBpB,CAAA,CAAE,ODnBkB,GAAA,SAAA,GAAA,SAAA,EAAA,iBCoBnB,CAAA,CAAE,ODpBiB,GAAA,SAAA,GAAA,SAAA,EAAA,iBCqBnB,CAAA,CAAE,ODrBiB,GAAA,SAAA,GAAA,SAAA,EAAA,cCsBtB,CAAA,CAAE,ODtBoB,GAAA,SAAA,GAAA,SAAA,CAAA,CAAA,KAAA,EAAA;EAAO,MAAe,CAAA,ECwBjD,ODxBiD;EAAC,OAAW,CAAA,ECyB5D,QDzB4D;EAAC,OAAR,CAAA,EC0BrD,QD1BqD;EAAM,IAAtB,CAAA,EC2BxC,KD3BwC;AAAU,CAAA,CAAA,EC4BvD,oBD5BuD,CC6BzD,OD7ByD,SC6BzC,CAAA,CAAE,OD7BuC,GC6B7B,eD7B6B,CC6Bb,OD7Ba,CAAA,GAAA,KAAA,EC8BzD,QD9ByD,SC8BxC,CAAA,CAAE,OD9BsC,GC8B5B,eD9B4B,CC8BZ,QD9BY,CAAA,GAAA,KAAA,EC+BzD,QD/ByD,SC+BxC,CAAA,CAAE,OD/BsC,GC+B5B,eD/B4B,CC+BZ,QD/BY,CAAA,GAAA,KAAA,ECgCzD,KDhCyD,SCgC3C,CAAA,CAAE,ODhCyC,GCgC/B,eDhC+B,CCgCf,KDhCe,CAAA,GAAA,KAAA,CAAA;;;KER/C,gCAAgC,cAAc,CAAA,CAAE,YAAY,mBAAmB,uBAAuB;AFMtG,iBEJI,iBFIoB,CAAA,UEJQ,aFIU,CEJI,CAAA,CAAE,OFIN,CAAA,CAAA,CAAA,MAAA,EEH5C,2BFG4C,CEHhB,CFGgB,CAAA,CAAA,EEFnD,qBFEmD,CEF7B,CFE6B,CAAA;AAEtD"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":[],"mappings":"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lDY,CCkDO,GDlDP,CCkDW,CDlDX,CAAA,CAAA,EAAA;KCqD3B,YDnDa,CAAA,CAAA,CAAA,GCqDhB,CDrDgB,SCqDN,CAAA,CAAE,ODrDI,GCsDZ,6BDtDY,CCsDkB,aDtDlB,CCsDgC,CAAA,CAAE,ODtDlC,CAAA,ECsD4C,aDtD5C,CCsD0D,CDtD1D,CAAA,CAAA,GCwDZ,CDxDY,SAAA;EAAoB,MACpB,EAAA,KAAA,GAAA;EAAoB,OACvB,CAAA,EAAA,KAAA,EAAA;CAAoB,GCuD3B,EDvD2B,SCuDhB,CAAA,CAAE,ODtDiD,GCuD5D,6BDvD4D,CCwD1D,CDxD0D,SCwDhD,CAAA,CAAE,ODxD8C,GCwDpC,aDxDoC,CCwDtB,CDxDsB,CAAA,GCwDjB,aDxDiB,CCwDH,CAAA,CAAE,ODxDC,CAAA,ECyD1D,aDzD0D,CCyD5C,EDzD4C,CAAA,CAAA,GAAA,KAAA,GC6D9D,CD7D8D,SAAA;EAAoB,OAArD,EAAA,KAAA,GAAA;EAAgC,OAA/C,CAAA,EAAA,KAAA,EAAA;CAAM,GC8DlB,8BD7DY,CC8DV,CD9DU,SC8DA,CAAA,CAAE,OD9DF,GC8DY,aD9DZ,CC8D0B,CD9D1B,CAAA,GC8D+B,aD9D/B,CC8D6C,CAAA,CAAE,OD9D/C,CAAA,EC+DV,iBD/DU,CC+DQ,OD/DR,CC+DgB,ED/DhB,EC+DoB,2CD/DpB,CAAA,CAAA,CAAA,GAAA,KAAA;AAAuB,KCmEjC,uBDnEiC,CAAA,mBCoExB,ODpEwB,CCoEhB,MDpEgB,CCoET,4BDpES,ECoEqB,sBDpErB,CAAA,CAAA,CAAA,GCqEzC,qBDrEyC,CAAA,QAAQ,MCqEb,UDrEa,ICqEC,YDrED,CCqEc,UDrEd,CCqEyB,CDrEzB,CAAA,CAAA,EAAO,CAAA;AAAW,iBCiHvD,iBDjHuD,CAAA,mBCkHlD,ODlHkD,CCkH1C,MDlH0C,CCkHnC,4BDlHmC,ECkHL,sBDlHK,CAAA,CAAA,CAAA,CAAA,SAAA,ECmH1D,UDnH0D,CAAA,ECmH7C,uBDnH6C,CCmHrB,UDnHqB,CAAA"}
package/dist/index.js CHANGED
@@ -1,33 +1,107 @@
1
- import { createKoriSchema, getKoriSchemaBrand, isKoriSchema } from "@korix/kori";
1
+ import { createKoriRequestSchema, createKoriResponseSchema, createKoriSchema, getKoriSchemaProvider, isKoriSchema } from "@korix/kori";
2
2
  import "zod";
3
3
 
4
4
  //#region src/zod-schema.ts
5
- const ZodSchemaBrand = Symbol("zod-schema-brand");
5
+ const ZodSchemaProvider = Symbol("zod-schema-provider");
6
6
  const createKoriZodSchema = (schema) => {
7
- return createKoriSchema(ZodSchemaBrand, schema);
7
+ return createKoriSchema({
8
+ provider: ZodSchemaProvider,
9
+ definition: schema
10
+ });
8
11
  };
9
12
  function isKoriZodSchema(value) {
10
13
  if (!isKoriSchema(value)) return false;
11
- return getKoriSchemaBrand(value) === ZodSchemaBrand;
14
+ return getKoriSchemaProvider(value) === ZodSchemaProvider;
12
15
  }
13
16
 
14
17
  //#endregion
15
18
  //#region src/zod-request-schema.ts
16
- function zodRequestSchema(input) {
17
- const result = {};
18
- if (input.params) result.params = createKoriZodSchema(input.params);
19
- if (input.headers) result.headers = createKoriZodSchema(input.headers);
20
- if (input.queries) result.queries = createKoriZodSchema(input.queries);
21
- if (input.body) result.body = createKoriZodSchema(input.body);
22
- return result;
19
+ function isZodType$1(value) {
20
+ return !!value && typeof value === "object" && "safeParse" in value;
21
+ }
22
+ function zodRequestSchema(options) {
23
+ const params = options.params ? createKoriZodSchema(options.params) : void 0;
24
+ const headers = options.headers ? createKoriZodSchema(options.headers) : void 0;
25
+ const queries = options.queries ? createKoriZodSchema(options.queries) : void 0;
26
+ let simpleBody;
27
+ let contentBody;
28
+ if (options.body) if (isZodType$1(options.body)) simpleBody = createKoriZodSchema(options.body);
29
+ else if (!("content" in options.body)) simpleBody = {
30
+ description: options.body.description,
31
+ schema: createKoriZodSchema(options.body.schema),
32
+ examples: options.body.examples
33
+ };
34
+ else contentBody = {
35
+ description: options.body.description,
36
+ content: mapZodBodyMapping(options.body.content)
37
+ };
38
+ if (contentBody) return createKoriRequestSchema({
39
+ provider: ZodSchemaProvider,
40
+ params,
41
+ headers,
42
+ queries,
43
+ body: contentBody
44
+ });
45
+ else return createKoriRequestSchema({
46
+ provider: ZodSchemaProvider,
47
+ params,
48
+ headers,
49
+ queries,
50
+ body: simpleBody
51
+ });
52
+ }
53
+ function mapZodBodyMapping(m) {
54
+ const out = {};
55
+ for (const [mt, item] of Object.entries(m)) if (isZodType$1(item)) out[mt] = createKoriZodSchema(item);
56
+ else out[mt] = {
57
+ schema: createKoriZodSchema(item.schema),
58
+ examples: item.examples
59
+ };
60
+ return out;
23
61
  }
24
62
 
25
63
  //#endregion
26
64
  //#region src/zod-response-schema.ts
27
- function zodResponseSchema(schema) {
28
- return schema;
65
+ function isZodType(value) {
66
+ return !!value && typeof value === "object" && "safeParse" in value;
67
+ }
68
+ function toKoriContent(content) {
69
+ const out = {};
70
+ for (const [mt, item] of Object.entries(content)) if (isZodType(item)) out[mt] = createKoriZodSchema(item);
71
+ else out[mt] = {
72
+ schema: createKoriZodSchema(item.schema),
73
+ examples: item.examples
74
+ };
75
+ return out;
76
+ }
77
+ function toKoriEntry(entry) {
78
+ if (isZodType(entry)) return createKoriZodSchema(entry);
79
+ if ("content" in entry) return {
80
+ description: entry.description,
81
+ headers: entry.headers ? createKoriZodSchema(entry.headers) : void 0,
82
+ content: toKoriContent(entry.content),
83
+ links: entry.links
84
+ };
85
+ return {
86
+ description: entry.description,
87
+ headers: entry.headers ? createKoriZodSchema(entry.headers) : void 0,
88
+ schema: createKoriZodSchema(entry.schema),
89
+ examples: entry.examples,
90
+ links: entry.links
91
+ };
92
+ }
93
+ function zodResponseSchema(responses) {
94
+ const out = {};
95
+ for (const status in responses) {
96
+ const entry = responses[status];
97
+ if (entry !== void 0) out[status] = toKoriEntry(entry);
98
+ }
99
+ return createKoriResponseSchema({
100
+ provider: ZodSchemaProvider,
101
+ responses: out
102
+ });
29
103
  }
30
104
 
31
105
  //#endregion
32
- export { createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
106
+ export { ZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
33
107
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["schema: T","value: unknown","input: {\n params?: TParams;\n headers?: THeaders;\n queries?: TQueries;\n body?: TBody;\n}","result: Record<string, KoriZodSchema<z.ZodType>>","schema: KoriResponseSchemaStructure<S>"],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":["import {\n type KoriSchema,\n type KoriSchemaProvider,\n createKoriSchema,\n isKoriSchema,\n getKoriSchemaBrand,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nconst ZodSchemaBrand = Symbol('zod-schema-brand');\n\nexport type KoriZodSchemaProvider = KoriSchemaProvider<'zod'>;\n\nexport type KoriZodSchema<T extends z.ZodType> = KoriSchema<T, z.output<T>>;\n\nexport type KoriZodSchemaDefault = KoriZodSchema<z.ZodType>;\n\nexport const createKoriZodSchema = <T extends z.ZodType>(schema: T): KoriZodSchema<T> => {\n return createKoriSchema(ZodSchemaBrand, schema);\n};\n\nexport function isKoriZodSchema(value: unknown): value is KoriZodSchemaDefault {\n if (!isKoriSchema(value)) {\n return false;\n }\n return getKoriSchemaBrand(value) === ZodSchemaBrand;\n}\n","import {\n type KoriRequestSchema,\n type KoriRequestSchemaStructure,\n type KoriRequestSchemaContent,\n type KoriRequestSchemaBody,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nimport { type KoriZodSchema, type KoriZodSchemaProvider, createKoriZodSchema } from './zod-schema.js';\n\nexport type KoriZodRequestSchema<\n Params extends KoriZodSchema<z.ZodType> = never,\n Headers extends KoriZodSchema<z.ZodType> = never,\n Queries extends KoriZodSchema<z.ZodType> = never,\n Body extends KoriZodSchema<z.ZodType> = never,\n> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body>;\n\nexport type KoriZodRequestParts = KoriRequestSchemaStructure<\n KoriZodSchema<z.ZodType>,\n KoriZodSchema<z.ZodType>,\n KoriZodSchema<z.ZodType>,\n KoriZodSchema<z.ZodType>\n>;\n\nexport type KoriZodRequestBodySchema =\n | KoriZodSchema<z.ZodType>\n | KoriRequestSchemaContent<KoriZodSchema<z.ZodType>>\n | KoriRequestSchemaBody<KoriZodSchema<z.ZodType>>;\n\ntype ToKoriZodSchema<T extends z.ZodType> = KoriZodSchema<T>;\n\nexport function zodRequestSchema<\n TParams extends z.ZodType | undefined = undefined,\n THeaders extends z.ZodType | undefined = undefined,\n TQueries extends z.ZodType | undefined = undefined,\n TBody extends z.ZodType | undefined = undefined,\n>(input: {\n params?: TParams;\n headers?: THeaders;\n queries?: TQueries;\n body?: TBody;\n}): KoriZodRequestSchema<\n TParams extends z.ZodType ? ToKoriZodSchema<TParams> : never,\n THeaders extends z.ZodType ? ToKoriZodSchema<THeaders> : never,\n TQueries extends z.ZodType ? ToKoriZodSchema<TQueries> : never,\n TBody extends z.ZodType ? ToKoriZodSchema<TBody> : never\n> {\n const result: Record<string, KoriZodSchema<z.ZodType>> = {};\n\n if (input.params) {\n result.params = createKoriZodSchema(input.params);\n }\n\n if (input.headers) {\n result.headers = createKoriZodSchema(input.headers);\n }\n\n if (input.queries) {\n result.queries = createKoriZodSchema(input.queries);\n }\n\n if (input.body) {\n result.body = createKoriZodSchema(input.body);\n }\n\n return result;\n}\n","import { type KoriResponseSchema, type KoriResponseSchemaStructure } from '@korix/kori';\nimport { type z } from 'zod';\n\nimport { type KoriZodSchema, type KoriZodSchemaProvider } from './zod-schema.js';\n\nexport type KoriZodResponseSchema<S extends KoriZodSchema<z.ZodType>> = KoriResponseSchema<KoriZodSchemaProvider, S>;\n\nexport function zodResponseSchema<S extends KoriZodSchema<z.ZodType>>(\n schema: KoriResponseSchemaStructure<S>,\n): KoriZodResponseSchema<S> {\n return schema;\n}\n"],"mappings":";;;;AASA,MAAM,iBAAiB,OAAO,mBAAmB;AAQjD,MAAa,sBAAsB,CAAsBA,WAAgC;AACvF,QAAO,iBAAiB,gBAAgB,OAAO;AAChD;AAED,SAAgB,gBAAgBC,OAA+C;AAC7E,MAAK,aAAa,MAAM,CACtB,QAAO;AAET,QAAO,mBAAmB,MAAM,KAAK;AACtC;;;;ACKD,SAAgB,iBAKdC,OAUA;CACA,MAAMC,SAAmD,CAAE;AAE3D,KAAI,MAAM,OACR,QAAO,SAAS,oBAAoB,MAAM,OAAO;AAGnD,KAAI,MAAM,QACR,QAAO,UAAU,oBAAoB,MAAM,QAAQ;AAGrD,KAAI,MAAM,QACR,QAAO,UAAU,oBAAoB,MAAM,QAAQ;AAGrD,KAAI,MAAM,KACR,QAAO,OAAO,oBAAoB,MAAM,KAAK;AAG/C,QAAO;AACR;;;;AC3DD,SAAgB,kBACdC,QAC0B;AAC1B,QAAO;AACR"}
1
+ {"version":3,"file":"index.js","names":["schema: T","value: unknown","isZodType","value: unknown","options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaSimpleBody<ZBody> | ZodRequestSchemaContentBody<ZBodyMapping>;\n}","simpleBody:\n | KoriZodSchema<ZBody>\n | { description?: string; schema: KoriZodSchema<ZBody>; examples?: Record<string, unknown> }\n | undefined","contentBody: KoriRequestSchemaContentBody<ZBodyMappingToBodyMapping<ZBodyMapping>> | undefined","m: M","out: Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchema<z.ZodType>>>","value: unknown","content: ZodResponseSchemaContentEntryMappingDefault","out: Record<string, KoriResponseSchemaContentEntryItem<KoriZodSchema<z.ZodType>>>","entry: ZodResponseSchemaEntry","responses: ZResponses"],"sources":["../src/zod-schema.ts","../src/zod-request-schema.ts","../src/zod-response-schema.ts"],"sourcesContent":["import { type KoriSchema, createKoriSchema, getKoriSchemaProvider, isKoriSchema } from '@korix/kori';\nimport { type z } from 'zod';\n\nexport const ZodSchemaProvider = Symbol('zod-schema-provider');\n\nexport type KoriZodSchemaProvider = typeof ZodSchemaProvider;\n\nexport type KoriZodSchema<T extends z.ZodType> = KoriSchema<KoriZodSchemaProvider, T, z.output<T>>;\n\nexport type KoriZodSchemaDefault = KoriZodSchema<z.ZodType>;\n\nexport const createKoriZodSchema = <T extends z.ZodType>(schema: T): KoriZodSchema<T> => {\n return createKoriSchema({ provider: ZodSchemaProvider, definition: schema });\n};\n\nexport function isKoriZodSchema(value: unknown): value is KoriZodSchemaDefault {\n if (!isKoriSchema(value)) {\n return false;\n }\n return getKoriSchemaProvider(value) === ZodSchemaProvider;\n}\n","import {\n createKoriRequestSchema,\n type KoriRequestSchema,\n type KoriRequestSchemaContentBody,\n type KoriRequestSchemaContentBodyItem,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nimport {\n type KoriZodSchema,\n type KoriZodSchemaDefault,\n type KoriZodSchemaProvider,\n ZodSchemaProvider,\n createKoriZodSchema,\n} from './zod-schema.js';\n\nexport type KoriZodRequestSchema<\n Params extends KoriZodSchemaDefault = never,\n Headers extends KoriZodSchemaDefault = never,\n Queries extends KoriZodSchemaDefault = never,\n Body extends KoriZodSchemaDefault = never,\n BodyMapping extends Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchemaDefault>> = never,\n> = KoriRequestSchema<KoriZodSchemaProvider, Params, Headers, Queries, Body, BodyMapping>;\n\ntype ZodRequestSchemaSimpleBody<Z extends z.ZodType> =\n | Z\n | {\n description?: string;\n schema: Z;\n examples?: Record<string, unknown>;\n };\n\ntype ZodRequestSchemaContentBodyItem<Z extends z.ZodType> =\n | Z\n | {\n schema: Z;\n examples?: Record<string, unknown>;\n };\n\ntype ZodRequestSchemaContentBodyItemDefault = ZodRequestSchemaContentBodyItem<z.ZodType>;\n\ntype ZodRequestSchemaContentBodyMappingDefault = Record<string, ZodRequestSchemaContentBodyItemDefault>;\n\ntype ZodRequestSchemaContentBody<ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault> = {\n description?: string;\n content: ZBodyMapping;\n};\n\ntype ZBodyItemToBodyItem<Item extends ZodRequestSchemaContentBodyItemDefault> = Item extends z.ZodType\n ? KoriZodSchema<Item>\n : Item extends { schema: infer S; examples?: infer X }\n ? S extends z.ZodType\n ? { schema: KoriZodSchema<S>; examples?: X }\n : never\n : never;\n\ntype ZBodyMappingToBodyMapping<M extends ZodRequestSchemaContentBodyMappingDefault> = {\n [K in keyof M]: ZBodyItemToBodyItem<M[K]>;\n};\n\nfunction isZodType(value: unknown): value is z.ZodType {\n return !!value && typeof value === 'object' && 'safeParse' in (value as Record<string, unknown>);\n}\n\n// Overload 1: single zod types\nexport function zodRequestSchema<\n ZParams extends z.ZodType = never,\n ZHeaders extends z.ZodType = never,\n ZQueries extends z.ZodType = never,\n ZBody extends z.ZodType = never,\n>(options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaSimpleBody<ZBody>;\n}): KoriZodRequestSchema<\n KoriZodSchema<ZParams>,\n KoriZodSchema<ZHeaders>,\n KoriZodSchema<ZQueries>,\n KoriZodSchema<ZBody>\n>;\n\n// Overload 2: content map or body spec using zod types\nexport function zodRequestSchema<\n ZParams extends z.ZodType = never,\n ZHeaders extends z.ZodType = never,\n ZQueries extends z.ZodType = never,\n ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault = never,\n>(options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaContentBody<ZBodyMapping>;\n}): KoriZodRequestSchema<\n KoriZodSchema<ZParams>,\n KoriZodSchema<ZHeaders>,\n KoriZodSchema<ZQueries>,\n never,\n ZBodyMappingToBodyMapping<ZBodyMapping>\n>;\n\n// Impl\nexport function zodRequestSchema<\n ZParams extends z.ZodType = never,\n ZHeaders extends z.ZodType = never,\n ZQueries extends z.ZodType = never,\n ZBody extends z.ZodType = never,\n ZBodyMapping extends ZodRequestSchemaContentBodyMappingDefault = never,\n>(options: {\n params?: ZParams;\n headers?: ZHeaders;\n queries?: ZQueries;\n body?: ZodRequestSchemaSimpleBody<ZBody> | ZodRequestSchemaContentBody<ZBodyMapping>;\n}): KoriZodRequestSchema<\n KoriZodSchema<ZParams>,\n KoriZodSchema<ZHeaders>,\n KoriZodSchema<ZQueries>,\n KoriZodSchema<ZBody>,\n ZBodyMappingToBodyMapping<ZBodyMapping>\n> {\n const params = options.params ? createKoriZodSchema(options.params) : undefined;\n const headers = options.headers ? createKoriZodSchema(options.headers) : undefined;\n const queries = options.queries ? createKoriZodSchema(options.queries) : undefined;\n\n let simpleBody:\n | KoriZodSchema<ZBody>\n | { description?: string; schema: KoriZodSchema<ZBody>; examples?: Record<string, unknown> }\n | undefined;\n\n let contentBody: KoriRequestSchemaContentBody<ZBodyMappingToBodyMapping<ZBodyMapping>> | undefined;\n\n if (options.body) {\n if (isZodType(options.body)) {\n // simple body\n simpleBody = createKoriZodSchema(options.body);\n } else if (!('content' in options.body)) {\n simpleBody = {\n description: options.body.description,\n schema: createKoriZodSchema(options.body.schema),\n examples: options.body.examples,\n };\n } else {\n // content body\n contentBody = {\n description: options.body.description,\n content: mapZodBodyMapping(options.body.content),\n };\n }\n }\n\n if (contentBody) {\n return createKoriRequestSchema({\n provider: ZodSchemaProvider,\n params,\n headers,\n queries,\n body: contentBody,\n });\n } else {\n return createKoriRequestSchema({\n provider: ZodSchemaProvider,\n params,\n headers,\n queries,\n body: simpleBody,\n });\n }\n}\n\nfunction mapZodBodyMapping<M extends Record<string, ZodRequestSchemaContentBodyItem<z.ZodType>>>(\n m: M,\n): ZBodyMappingToBodyMapping<M> {\n const out: Record<string, KoriRequestSchemaContentBodyItem<KoriZodSchema<z.ZodType>>> = {};\n for (const [mt, item] of Object.entries(m)) {\n if (isZodType(item)) {\n out[mt] = createKoriZodSchema(item);\n } else {\n out[mt] = { schema: createKoriZodSchema(item.schema), examples: item.examples };\n }\n }\n return out as ZBodyMappingToBodyMapping<M>;\n}\n","import {\n createKoriResponseSchema,\n type KoriResponseSchema,\n type KoriResponseSchemaContentEntry,\n type KoriResponseSchemaContentEntryItem,\n type KoriResponseSchemaEntry,\n type KoriResponseSchemaSimpleEntry,\n type KoriResponseSchemaStatusCode,\n} from '@korix/kori';\nimport { type z } from 'zod';\n\nimport {\n type KoriZodSchema,\n type KoriZodSchemaProvider,\n ZodSchemaProvider,\n createKoriZodSchema,\n} from './zod-schema.js';\n\nexport type KoriZodResponseSchema<\n Responses extends Partial<Record<KoriResponseSchemaStatusCode, KoriResponseSchemaEntry<KoriZodSchemaProvider>>>,\n> = KoriResponseSchema<KoriZodSchemaProvider, Responses>;\n\ntype ZodResponseSchemaSimpleEntry<ZHeaders extends z.ZodType, Z extends z.ZodType> =\n | Z\n | {\n description?: string;\n headers?: ZHeaders;\n schema: Z;\n examples?: Record<string, unknown>;\n links?: Record<string, unknown>;\n };\n\ntype ZodResponseSchemaContentEntryItem<Z extends z.ZodType> =\n | Z\n | {\n schema: Z;\n examples?: Record<string, unknown>;\n };\n\ntype ZodResponseSchemaContentEntryItemDefault = ZodResponseSchemaContentEntryItem<z.ZodType>;\n\ntype ZodResponseSchemaContentEntryMappingDefault = Record<string, ZodResponseSchemaContentEntryItemDefault>;\n\ntype ZodResponseSchemaContentEntry<\n ZHeaders extends z.ZodType,\n ZContentMapping extends ZodResponseSchemaContentEntryMappingDefault,\n> = {\n description?: string;\n headers?: ZHeaders;\n content: ZContentMapping;\n links?: Record<string, unknown>;\n};\n\ntype ZodResponseSchemaEntry =\n | ZodResponseSchemaSimpleEntry<z.ZodType, z.ZodType>\n | ZodResponseSchemaContentEntry<z.ZodType, ZodResponseSchemaContentEntryMappingDefault>;\n\ntype ZContentItemToKori<Item> = Item extends z.ZodType\n ? KoriResponseSchemaContentEntryItem<KoriZodSchema<Item>>\n : Item extends { schema: infer SZ; examples?: infer EX }\n ? SZ extends z.ZodType\n ? { schema: KoriZodSchema<SZ>; examples?: EX }\n : never\n : never;\n\ntype ZContentMapToKori<Map extends ZodResponseSchemaContentEntryMappingDefault> = {\n [K in keyof Map]: ZContentItemToKori<Map[K]>;\n};\n\ntype ZEntryToKori<E> =\n // simple\n E extends z.ZodType\n ? KoriResponseSchemaSimpleEntry<KoriZodSchema<z.ZodType>, KoriZodSchema<E>>\n : // simple wrapper\n E extends { schema: infer SZ; headers?: infer H }\n ? SZ extends z.ZodType\n ? KoriResponseSchemaSimpleEntry<\n H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>,\n KoriZodSchema<SZ>\n >\n : never\n : // content: content map\n E extends { content: infer CM; headers?: infer H }\n ? KoriResponseSchemaContentEntry<\n H extends z.ZodType ? KoriZodSchema<H> : KoriZodSchema<z.ZodType>,\n ZContentMapToKori<Extract<CM, ZodResponseSchemaContentEntryMappingDefault>>\n >\n : never;\n\nexport type ToKoriZodResponseSchema<\n ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>,\n> = KoriZodResponseSchema<{ [S in keyof ZResponses]?: ZEntryToKori<ZResponses[S]> }>;\n\nfunction isZodType(value: unknown): value is z.ZodType {\n return !!value && typeof value === 'object' && 'safeParse' in (value as Record<string, unknown>);\n}\n\nfunction toKoriContent(\n content: ZodResponseSchemaContentEntryMappingDefault,\n): Record<string, KoriResponseSchemaContentEntryItem<KoriZodSchema<z.ZodType>>> {\n const out: Record<string, KoriResponseSchemaContentEntryItem<KoriZodSchema<z.ZodType>>> = {};\n for (const [mt, item] of Object.entries(content)) {\n if (isZodType(item)) {\n out[mt] = createKoriZodSchema(item);\n } else {\n out[mt] = { schema: createKoriZodSchema(item.schema), examples: item.examples };\n }\n }\n return out;\n}\n\nfunction toKoriEntry(entry: ZodResponseSchemaEntry) {\n // simple: zod directly\n if (isZodType(entry)) {\n return createKoriZodSchema(entry);\n }\n // content entry\n if ('content' in entry) {\n return {\n description: entry.description,\n headers: entry.headers ? createKoriZodSchema(entry.headers) : undefined,\n content: toKoriContent(entry.content),\n links: entry.links,\n };\n }\n // simple: spec\n return {\n description: entry.description,\n headers: entry.headers ? createKoriZodSchema(entry.headers) : undefined,\n schema: createKoriZodSchema(entry.schema),\n examples: entry.examples,\n links: entry.links,\n };\n}\n\nexport function zodResponseSchema<\n ZResponses extends Partial<Record<KoriResponseSchemaStatusCode, ZodResponseSchemaEntry>>,\n>(responses: ZResponses): ToKoriZodResponseSchema<ZResponses> {\n const out = {} as { [S in keyof ZResponses]?: ZEntryToKori<ZResponses[S]> };\n\n for (const status in responses) {\n const entry = responses[status] as ZodResponseSchemaEntry;\n if (entry !== undefined) {\n out[status] = toKoriEntry(entry) as ZEntryToKori<ZResponses[typeof status]>;\n }\n }\n\n return createKoriResponseSchema({\n provider: ZodSchemaProvider,\n responses: out as unknown as Partial<\n Record<KoriResponseSchemaStatusCode, KoriResponseSchemaEntry<KoriZodSchemaProvider>>\n >,\n }) as ToKoriZodResponseSchema<ZResponses>;\n}\n"],"mappings":";;;;AAGA,MAAa,oBAAoB,OAAO,sBAAsB;AAQ9D,MAAa,sBAAsB,CAAsBA,WAAgC;AACvF,QAAO,iBAAiB;EAAE,UAAU;EAAmB,YAAY;CAAQ,EAAC;AAC7E;AAED,SAAgB,gBAAgBC,OAA+C;AAC7E,MAAK,aAAa,MAAM,CACtB,QAAO;AAET,QAAO,sBAAsB,MAAM,KAAK;AACzC;;;;ACwCD,SAASC,YAAUC,OAAoC;AACrD,UAAS,gBAAgB,UAAU,YAAY,eAAgB;AAChE;AAwCD,SAAgB,iBAMdC,SAWA;CACA,MAAM,SAAS,QAAQ,SAAS,oBAAoB,QAAQ,OAAO;CACnE,MAAM,UAAU,QAAQ,UAAU,oBAAoB,QAAQ,QAAQ;CACtE,MAAM,UAAU,QAAQ,UAAU,oBAAoB,QAAQ,QAAQ;CAEtE,IAAIC;CAKJ,IAAIC;AAEJ,KAAI,QAAQ,KACV,KAAI,YAAU,QAAQ,KAAK,CAEzB,cAAa,oBAAoB,QAAQ,KAAK;YACnC,aAAa,QAAQ,MAChC,cAAa;EACX,aAAa,QAAQ,KAAK;EAC1B,QAAQ,oBAAoB,QAAQ,KAAK,OAAO;EAChD,UAAU,QAAQ,KAAK;CACxB;KAGD,eAAc;EACZ,aAAa,QAAQ,KAAK;EAC1B,SAAS,kBAAkB,QAAQ,KAAK,QAAQ;CACjD;AAIL,KAAI,YACF,QAAO,wBAAwB;EAC7B,UAAU;EACV;EACA;EACA;EACA,MAAM;CACP,EAAC;KAEF,QAAO,wBAAwB;EAC7B,UAAU;EACV;EACA;EACA;EACA,MAAM;CACP,EAAC;AAEL;AAED,SAAS,kBACPC,GAC8B;CAC9B,MAAMC,MAAkF,CAAE;AAC1F,MAAK,MAAM,CAAC,IAAI,KAAK,IAAI,OAAO,QAAQ,EAAE,CACxC,KAAI,YAAU,KAAK,CACjB,KAAI,MAAM,oBAAoB,KAAK;KAEnC,KAAI,MAAM;EAAE,QAAQ,oBAAoB,KAAK,OAAO;EAAE,UAAU,KAAK;CAAU;AAGnF,QAAO;AACR;;;;ACxFD,SAAS,UAAUC,OAAoC;AACrD,UAAS,gBAAgB,UAAU,YAAY,eAAgB;AAChE;AAED,SAAS,cACPC,SAC8E;CAC9E,MAAMC,MAAoF,CAAE;AAC5F,MAAK,MAAM,CAAC,IAAI,KAAK,IAAI,OAAO,QAAQ,QAAQ,CAC9C,KAAI,UAAU,KAAK,CACjB,KAAI,MAAM,oBAAoB,KAAK;KAEnC,KAAI,MAAM;EAAE,QAAQ,oBAAoB,KAAK,OAAO;EAAE,UAAU,KAAK;CAAU;AAGnF,QAAO;AACR;AAED,SAAS,YAAYC,OAA+B;AAElD,KAAI,UAAU,MAAM,CAClB,QAAO,oBAAoB,MAAM;AAGnC,KAAI,aAAa,MACf,QAAO;EACL,aAAa,MAAM;EACnB,SAAS,MAAM,UAAU,oBAAoB,MAAM,QAAQ;EAC3D,SAAS,cAAc,MAAM,QAAQ;EACrC,OAAO,MAAM;CACd;AAGH,QAAO;EACL,aAAa,MAAM;EACnB,SAAS,MAAM,UAAU,oBAAoB,MAAM,QAAQ;EAC3D,QAAQ,oBAAoB,MAAM,OAAO;EACzC,UAAU,MAAM;EAChB,OAAO,MAAM;CACd;AACF;AAED,SAAgB,kBAEdC,WAA4D;CAC5D,MAAM,MAAM,CAAE;AAEd,MAAK,MAAM,UAAU,WAAW;EAC9B,MAAM,QAAQ,UAAU;AACxB,MAAI,iBACF,KAAI,UAAU,YAAY,MAAM;CAEnC;AAED,QAAO,yBAAyB;EAC9B,UAAU;EACV,WAAW;CAGZ,EAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@korix/zod-schema",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "Zod schema integration for Kori framework",
5
5
  "type": "module",
6
6
  "author": "mitz (@bufferings)",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "peerDependencies": {
36
36
  "zod": "^4.0.0",
37
- "@korix/kori": "0.1.2"
37
+ "@korix/kori": "0.2.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "20.11.17",
@@ -42,10 +42,10 @@
42
42
  "rimraf": "6.0.1",
43
43
  "tsdown": "0.12.9",
44
44
  "typescript": "5.8.3",
45
- "vitest": "2.1.9",
45
+ "vitest": "3.2.4",
46
46
  "zod": "4.0.0",
47
- "@korix/kori": "0.1.2",
48
- "@korix/eslint-config": "0.1.0"
47
+ "@korix/eslint-config": "0.2.0",
48
+ "@korix/kori": "0.2.1"
49
49
  },
50
50
  "scripts": {
51
51
  "clean": "rimraf dist *.tsbuildinfo .turbo .tsup",