@korix/zod-schema 0.1.2 → 0.2.0
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 +87 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +79 -17
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +79 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -14
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
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
|
|
28
|
+
const ZodSchemaProvider = Symbol("zod-schema-provider");
|
|
29
29
|
const createKoriZodSchema = (schema) => {
|
|
30
|
-
return (0, __korix_kori.createKoriSchema)(
|
|
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.
|
|
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
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
51
|
-
return
|
|
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;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
6
|
-
type
|
|
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
|
|
14
|
-
type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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<
|
|
25
|
-
|
|
26
|
-
|
|
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 {
|
|
91
|
+
export { KoriZodRequestSchema, KoriZodResponseSchema, KoriZodSchema, KoriZodSchemaDefault, KoriZodSchemaProvider, ZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
|
|
30
92
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -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":";;;;
|
|
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,
|
|
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
|
-
|
|
6
|
-
type
|
|
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
|
|
14
|
-
type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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<
|
|
25
|
-
|
|
26
|
-
|
|
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 {
|
|
91
|
+
export { KoriZodRequestSchema, KoriZodResponseSchema, KoriZodSchema, KoriZodSchemaDefault, KoriZodSchemaProvider, ZodSchemaProvider, createKoriZodSchema, isKoriZodSchema, zodRequestSchema, zodResponseSchema };
|
|
30
92
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":";;;;
|
|
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":";;;;cAGa;KAED,qBAAA,UAA+B;AAF9B,KAID,aAJkD,CAAA,UAI1B,CAAA,CAAE,OAJwB,CAAA,GAIb,UAJa,CAIF,qBAJE,EAIqB,CAJrB,EAIwB,CAAA,CAAE,MAJ1B,CAIiC,CAJjC,CAAA,CAAA;AAElD,KAIA,oBAAA,GAAuB,aAJQ,CAIM,CAAA,CAAE,OAJS,CAAA;AAEhD,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;;;;KCSb,oCACK,8CACC,8CACA,2CACH,kDACO,eAAe,iCAAiC,kCAClE,kBAAkB,uBAAuB,QAAQ,SAAS,SAAS,MAAM;ADnB7E,KCqBK,0BDrByD,CAAA,UCqBpB,CAAA,CAAE,ODrBkB,CAAA,GCsB1D,CDtB0D,GAAA;EAElD,WAAA,CAAA,EAAA,MAAA;EAEA,MAAA,ECqBE,CDrBF;EAAa,QAAA,CAAA,ECsBR,MDtBQ,CAAA,MAAA,EAAA,OAAA,CAAA;CAAA;KCyBpB,+BDzBuD,CAAA,UCyBb,CAAA,CAAE,ODzBW,CAAA,GC0BxD,CD1BwD,GAAA;EAAqB,MAAE,EC4BrE,CD5BqE;EAAC,QAAW,CAAA,EC6B9E,MD7B8E,CAAA,MAAA,EAAA,OAAA,CAAA;CAAC;KCgC3F,sCAAA,GAAyC,+BDhCG,CCgC6B,CAAA,CAAE,ODhC/B,CAAA;AAAU,KCkCtD,yCAAA,GAA4C,MDlCU,CAAA,MAAA,ECkCK,sCDlCL,CAAA;AAE3D,KCkCK,2BDlC2B,CAAA,qBCkCsB,yCDlCtB,CAAA,GAAA;EAAA,WAAA,CAAA,EAAA,MAAA;EAAA,OAAmB,ECoCxC,YDpCwC;CAAO;AAAV,KCuC3C,mBDvC2C,CAAA,aCuCV,sCDvCU,CAAA,GCuCgC,IDvChC,SCuC6C,CAAA,CAAE,ODvC/C,GCwC5C,aDxC4C,CCwC9B,IDxC8B,CAAA,GCyC5C,IDzC4C,SAAA;EAEnC,MAAA,EAAA,KAAA,EAAA;EAEZ,QAAA,CAAA,EAAA,KAAA,EAAA;CAAA,GCsCK,CDtCL,SCsCe,CAAA,CAAE,ODxC8B,GAAA;EAAO,MAAU,ECyC/C,aDzC+C,CCyCjC,CDzCiC,CAAA;EAAC,QAAiB,CAAA,ECyCpC,CDzCoC;CAAC,GAAA,KAAf,GAAA,KAAA;AAAa,KC6C7E,yBD7C6E,CAAA,UC6CzC,yCD7CyC,CAAA,GAAA,QAIlE,MC0CF,CD1CE,GC0CE,mBD1CwC,CC0CpB,CD1CoB,CC0ClB,CD1CkB,CAAA,CAAA;iBCkD1C,iCACE,CAAA,CAAE,kCACD,CAAA,CAAE,kCACF,CAAA,CAAE,+BACL,CAAA,CAAE;WAEP;EAvDC,OAAA,CAAA,EAwDA,QAxDA;EAAoB,OAAA,CAAA,EAyDpB,QAzDoB;EAAA,IACf,CAAA,EAyDR,0BAzDQ,CAyDmB,KAzDnB,CAAA;CAAoB,CAAA,EA0DjC,oBAzDc,CA0DhB,aA1DgB,CA0DF,OA1DE,CAAA,EA2DhB,aA3DgB,CA2DF,QA3DE,CAAA,EA4DhB,aA5DgB,CA4DF,QA5DE,CAAA,EA6DhB,aA7DgB,CA6DF,KA7DE,CAAA,CAAA;AACA,iBAgEF,gBAhEE,CAAA,gBAiEA,CAAA,CAAE,OAjEF,GAAA,KAAA,EAAA,iBAkEC,CAAA,CAAE,OAlEH,GAAA,KAAA,EAAA,iBAmEC,CAAA,CAAE,OAnEH,GAAA,KAAA,EAAA,qBAoEK,yCApEL,GAAA,KAAA,CAAA,CAAA,OAAA,EAAA;EAAoB,MACvB,CAAA,EAqEJ,OArEI;EAAoB,OACmC,CAAA,EAqE1D,QArE0D;EAAoB,OAArD,CAAA,EAsEzB,QAtEyB;EAAgC,IAA/C,CAAA,EAuEb,2BAvEa,CAuEe,YAvEf,CAAA;CAAM,CAAA,EAwExB,oBAvEkB,CAwEpB,aAxEoB,CAwEN,OAxEM,CAAA,EAyEpB,aAzEoB,CAyEN,QAzEM,CAAA,EA0EpB,aA1EoB,CA0EN,QA1EM,CAAA,EAAA,KAAA,EA4EpB,yBA5EoB,CA4EM,YA5EN,CAAA,CAAA;;;KCJV,wCACQ,QAAQ,OAAO,8BAA8B,wBAAwB,4BACrF,mBAAmB,uBAAuB;AFjB9C,KEmBK,4BFnByD,CAAA,iBEmBX,CAAA,CAAE,OFnBS,EAAA,UEmBU,CAAA,CAAE,OFnBZ,CAAA,GEoB1D,CFpB0D,GAAA;EAElD,WAAA,CAAA,EAAA,MAAA;EAEA,OAAA,CAAA,EEmBI,QFnBS;EAAA,MAAA,EEoBX,CFpBW;EAAA,QAAa,CAAA,EEqBrB,MFrBqB,CAAA,MAAA,EAAA,OAAA,CAAA;EAAO,KAAe,CAAA,EEsB9C,MFtB8C,CAAA,MAAA,EAAA,OAAA,CAAA;CAAqB;KEyB5E,iCFzB0F,CAAA,UEyB9C,CAAA,CAAE,OFzB4C,CAAA,GE0B3F,CF1B2F,GAAA;EAAC,MAAR,EE4B1E,CF5B0E;EAAM,QAA7C,CAAA,EE6BhC,MF7BgC,CAAA,MAAA,EAAA,OAAA,CAAA;AAAU,CAAA;AAE3D,KE8BK,wCAAA,GAA2C,iCF9BhB,CE8BkD,CAAA,CAAE,OF9BpD,CAAA;KEgC3B,2CAAA,GAA8C,MFhCnB,CAAA,MAAA,EEgCkC,wCFhClC,CAAA;KEkC3B,6BFlC8C,CAAA,iBEmChC,CAAA,CAAE,OFnC8B,EAAA,wBEoCzB,2CFpCyB,CAAA,GAAA;EAAO,WAAvB,CAAA,EAAA,MAAA;EAAa,OAAA,CAAA,EEuCpC,QFvCoC;EAEnC,OAAA,EEsCF,eFpCV;EAAA,KAAA,CAAA,EEqCS,MFrCT,CAAA,MAAA,EAAA,OAAA,CAAA;CAAA;KEwCI,sBAAA,GACD,4BF3C6D,CE2ChC,CAAA,CAAE,OF3C8B,EE2CrB,CAAA,CAAE,OF3CmB,CAAA,GE4C7D,6BF5C6D,CE4C/B,CAAA,CAAE,OF5C6B,EE4CpB,2CF5CoB,CAAA;KE8C5D,kBF9C8E,CAAA,IAAA,CAAA,GE8CnD,IF9CmD,SE8CtC,CAAA,CAAE,OF9CoC,GE+C/E,kCF/C+E,CE+C5C,aF/C4C,CE+C9B,IF/C8B,CAAA,CAAA,GEgD/E,IFhD+E,SAAA;EAAC,MAAf,EAAA,KAAA,GAAA;EAAa,QAAA,CAAA,EAAA,KAAA,GAAA;AAIlF,CAAA,GE6CM,EF7CU,SE6CC,CAAA,CAAE,OF7CY,GAAA;UE8Cb,cAAc;aAAgB;;AD7ChD,KCiDK,iBDjDO,CAAA,YCiDuB,2CDjDH,CAAA,GAAA,QAAA,MCkDlB,GDlDkB,GCkDZ,kBDlDY,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,
|
|
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
|
|
5
|
+
const ZodSchemaProvider = Symbol("zod-schema-provider");
|
|
6
6
|
const createKoriZodSchema = (schema) => {
|
|
7
|
-
return createKoriSchema(
|
|
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
|
|
14
|
+
return getKoriSchemaProvider(value) === ZodSchemaProvider;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
//#endregion
|
|
15
18
|
//#region src/zod-request-schema.ts
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
28
|
-
return
|
|
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.
|
|
3
|
+
"version": "0.2.0",
|
|
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.
|
|
37
|
+
"@korix/kori": "0.2.0"
|
|
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.
|
|
45
|
+
"vitest": "3.2.4",
|
|
46
46
|
"zod": "4.0.0",
|
|
47
|
-
"@korix/
|
|
48
|
-
"@korix/
|
|
47
|
+
"@korix/eslint-config": "0.2.0",
|
|
48
|
+
"@korix/kori": "0.2.0"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"clean": "rimraf dist *.tsbuildinfo .turbo .tsup",
|