orchid-orm-schema-to-zod 0.0.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.js ADDED
@@ -0,0 +1,374 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var pqb = require('pqb');
6
+ var zod = require('zod');
7
+ var node_buffer = require('node:buffer');
8
+
9
+ const modelToZod = (model) => {
10
+ return instanceToZod(new model().columns);
11
+ };
12
+ const instanceToZod = ({
13
+ shape
14
+ }) => {
15
+ const result = {};
16
+ for (const key in shape) {
17
+ result[key] = columnToZod(shape[key]);
18
+ }
19
+ return zod.z.object(result);
20
+ };
21
+ const columnToZod = (column) => {
22
+ var _a;
23
+ const dataType = ((_a = column.data.as) == null ? void 0 : _a.dataType) || column.dataType;
24
+ const converter = converters[dataType];
25
+ if (!converter)
26
+ throw new Error(`Cannot parse column ${dataType}`);
27
+ return converter(column);
28
+ };
29
+ const typeHandler = (fn) => {
30
+ return (column) => {
31
+ let type = fn(column);
32
+ column.chain.forEach((item) => {
33
+ if (item[0] === "transform") {
34
+ type = type.transform(item[1]);
35
+ } else if (item[0] === "to") {
36
+ type = zod.z.preprocess(item[1], itemToZod(item[2]));
37
+ } else if (item[0] === "refine") {
38
+ type = type.refine(item[1]);
39
+ } else if (item[0] === "superRefine") {
40
+ type = type.superRefine(item[1]);
41
+ }
42
+ });
43
+ if ("nullable" in column.data && column.data.nullable || column.isNullable) {
44
+ if ("optional" in column.data && column.data.optional) {
45
+ type = type.nullish();
46
+ } else {
47
+ type = type.nullable();
48
+ }
49
+ } else if ("optional" in column.data && column.data.optional) {
50
+ type = type.optional();
51
+ }
52
+ if (column instanceof pqb.ColumnType) {
53
+ if (column.data.validationDefault !== void 0) {
54
+ type = type.default(column.data.validationDefault);
55
+ }
56
+ } else if (column.data.default !== void 0) {
57
+ type = type.default(column.data.default);
58
+ }
59
+ return type;
60
+ };
61
+ };
62
+ const stringParams = [
63
+ "min",
64
+ "max",
65
+ "length",
66
+ "regex",
67
+ "startsWith",
68
+ "endsWith"
69
+ ];
70
+ const stringEmptyParams = ["email", "url", "uuid", "cuid", "trim"];
71
+ const handleString = typeHandler((column) => {
72
+ let type = zod.z.string();
73
+ stringParams.forEach((key) => {
74
+ const value = column.data[key];
75
+ if (value !== void 0) {
76
+ type = type[key](value);
77
+ }
78
+ });
79
+ stringEmptyParams.forEach((key) => {
80
+ const value = column.data[key];
81
+ if (value) {
82
+ type = type[key]();
83
+ }
84
+ });
85
+ return type;
86
+ });
87
+ const numberParams = ["lt", "lte", "gt", "gte", "multipleOf"];
88
+ const handleNumber = typeHandler((column) => {
89
+ let type = zod.z.number();
90
+ numberParams.forEach((key) => {
91
+ const value = column.data[key];
92
+ if (value !== void 0) {
93
+ type = type[key](value);
94
+ }
95
+ });
96
+ if (column.data.int) {
97
+ type = type.int();
98
+ }
99
+ return type;
100
+ });
101
+ const handleBigInt = typeHandler(() => {
102
+ return zod.z.string().refine(
103
+ (value) => {
104
+ try {
105
+ BigInt(value);
106
+ return true;
107
+ } catch (_) {
108
+ return false;
109
+ }
110
+ },
111
+ {
112
+ message: "Failed to parse bigint"
113
+ }
114
+ );
115
+ });
116
+ const handleBuffer = typeHandler(() => {
117
+ return zod.z.instanceof(node_buffer.Buffer);
118
+ });
119
+ const dateParams = ["min", "max"];
120
+ const handleDate = typeHandler((column) => {
121
+ let type = zod.z.date();
122
+ dateParams.forEach((key) => {
123
+ const value = column.data[key];
124
+ if (value !== void 0) {
125
+ type = type[key](value);
126
+ }
127
+ });
128
+ return zod.z.preprocess(
129
+ (val) => typeof val === "string" ? new Date(val) : val,
130
+ type
131
+ );
132
+ });
133
+ const handleTime = typeHandler(() => {
134
+ return zod.z.string().refine(
135
+ (val) => {
136
+ return !isNaN(new Date(`2000-01-01 ${val}`).getTime());
137
+ },
138
+ {
139
+ message: "Invalid time"
140
+ }
141
+ );
142
+ });
143
+ const interval = zod.z.object({
144
+ years: zod.z.number().optional(),
145
+ months: zod.z.number().optional(),
146
+ days: zod.z.number().optional(),
147
+ hours: zod.z.number().optional(),
148
+ seconds: zod.z.number().optional()
149
+ }).strict();
150
+ const handleInterval = typeHandler(() => {
151
+ return interval;
152
+ });
153
+ const handleBoolean = typeHandler(() => {
154
+ return zod.z.boolean();
155
+ });
156
+ const handleEnum = typeHandler((column) => {
157
+ const enumColumn = column;
158
+ return zod.z.enum(enumColumn.options);
159
+ });
160
+ const handleBitString = typeHandler(() => {
161
+ return zod.z.string().regex(/[10]/g);
162
+ });
163
+ const handleUUID = typeHandler(() => {
164
+ return zod.z.string().uuid();
165
+ });
166
+ const arrayParams = ["min", "max", "length"];
167
+ const handleArray = typeHandler(
168
+ (array) => {
169
+ let type;
170
+ if ("element" in array) {
171
+ type = zod.z.array(jsonItemToZod(array.element));
172
+ } else {
173
+ type = zod.z.array(columnToZod(array.data.item));
174
+ }
175
+ arrayParams.forEach((key) => {
176
+ const value = array.data[key];
177
+ if (value !== void 0) {
178
+ type = type[key](value);
179
+ }
180
+ });
181
+ return type;
182
+ }
183
+ );
184
+ const handleJson = typeHandler((column) => {
185
+ const type = column.data.schema;
186
+ return jsonItemToZod(type);
187
+ });
188
+ const jsonItemToZod = (type) => {
189
+ const converter = jsonConverters[type.dataType];
190
+ if (!converter)
191
+ throw new Error(`Cannot parse column ${type.dataType}`);
192
+ return converter(type);
193
+ };
194
+ const itemToZod = (item) => {
195
+ return item instanceof pqb.ColumnType ? columnToZod(item) : jsonItemToZod(item);
196
+ };
197
+ const converters = {
198
+ varchar: handleString,
199
+ char: handleString,
200
+ text: handleString,
201
+ smallint: handleNumber,
202
+ integer: handleNumber,
203
+ real: handleNumber,
204
+ smallserial: handleNumber,
205
+ serial: handleNumber,
206
+ money: handleNumber,
207
+ bigint: handleBigInt,
208
+ decimal: handleBigInt,
209
+ "double precision": handleBigInt,
210
+ bigserial: handleBigInt,
211
+ bytea: handleBuffer,
212
+ date: handleDate,
213
+ timestamp: handleDate,
214
+ "timestamp with time zone": handleDate,
215
+ time: handleTime,
216
+ "time with time zone": handleTime,
217
+ interval: handleInterval,
218
+ boolean: handleBoolean,
219
+ enum: handleEnum,
220
+ point: handleString,
221
+ line: handleString,
222
+ lseg: handleString,
223
+ box: handleString,
224
+ path: handleString,
225
+ polygon: handleString,
226
+ circle: handleString,
227
+ cidr: handleString,
228
+ inet: handleString,
229
+ macaddr: handleString,
230
+ macaddr8: handleString,
231
+ bit: handleBitString,
232
+ "bit varying": handleBitString,
233
+ tsvector: handleString,
234
+ tsquery: handleString,
235
+ xml: handleString,
236
+ json: handleString,
237
+ uuid: handleUUID,
238
+ array: handleArray,
239
+ jsonb: handleJson
240
+ };
241
+ const handleAny = typeHandler(() => {
242
+ return zod.z.any();
243
+ });
244
+ const handleNaN = typeHandler(() => {
245
+ return zod.z.nan();
246
+ });
247
+ const handleNever = typeHandler(() => {
248
+ return zod.z.never();
249
+ });
250
+ const handleNull = typeHandler(() => {
251
+ return zod.z.null();
252
+ });
253
+ const handleUndefined = typeHandler(() => {
254
+ return zod.z.undefined();
255
+ });
256
+ const handleUnknown = typeHandler(() => {
257
+ return zod.z.unknown();
258
+ });
259
+ const handleVoid = typeHandler(() => {
260
+ return zod.z.void();
261
+ });
262
+ const handleInstanceOf = typeHandler(
263
+ (type) => {
264
+ return zod.z.instanceof(type.class);
265
+ }
266
+ );
267
+ const handleLiteral = typeHandler((type) => {
268
+ return zod.z.literal(type.value);
269
+ });
270
+ const handleMap = typeHandler((type) => {
271
+ const { keyType, valueType } = type;
272
+ return zod.z.map(jsonItemToZod(keyType), jsonItemToZod(valueType));
273
+ });
274
+ const setParams = ["min", "max", "size"];
275
+ const handleSet = typeHandler((column) => {
276
+ const { valueType } = column;
277
+ let type = zod.z.set(jsonItemToZod(valueType));
278
+ setParams.forEach((key) => {
279
+ const value = column.data[key];
280
+ if (value !== void 0) {
281
+ type = type[key](value);
282
+ }
283
+ });
284
+ return type;
285
+ });
286
+ const handleNativeEnum = typeHandler((type) => {
287
+ return zod.z.nativeEnum(type.enum);
288
+ });
289
+ const handleTuple = typeHandler((column) => {
290
+ let type = zod.z.tuple(
291
+ column.items.map((item) => jsonItemToZod(item))
292
+ );
293
+ if (column.restType) {
294
+ type = type.rest(jsonItemToZod(column.restType));
295
+ }
296
+ return type;
297
+ });
298
+ const handleObject = typeHandler(
299
+ (type) => {
300
+ const shape = {};
301
+ for (const key in type.shape) {
302
+ shape[key] = jsonItemToZod(type.shape[key]);
303
+ }
304
+ let object = zod.z.object(shape);
305
+ if (type.unknownKeys === "passthrough") {
306
+ object = object.passthrough();
307
+ } else if (type.unknownKeys === "strict") {
308
+ object = object.strict();
309
+ }
310
+ if (type.catchAllType) {
311
+ object = object.catchall(jsonItemToZod(type.catchAllType));
312
+ }
313
+ return object;
314
+ }
315
+ );
316
+ const handleRecord = typeHandler(
317
+ (type) => {
318
+ return zod.z.record(jsonItemToZod(type.keyType), jsonItemToZod(type.valueType));
319
+ }
320
+ );
321
+ const handleUnion = typeHandler(
322
+ (type) => {
323
+ return zod.z.union(type.types.map(jsonItemToZod));
324
+ }
325
+ );
326
+ const handleIntersection = typeHandler(
327
+ (type) => {
328
+ return zod.z.intersection(jsonItemToZod(type.left), jsonItemToZod(type.right));
329
+ }
330
+ );
331
+ const handleDiscriminatedUnion = typeHandler(
332
+ (type) => {
333
+ return zod.z.discriminatedUnion(
334
+ type.discriminator,
335
+ [...type.options.values()].map(jsonItemToZod)
336
+ );
337
+ }
338
+ );
339
+ const handleLazy = typeHandler((type) => {
340
+ return zod.z.lazy(() => jsonItemToZod(type.getter()));
341
+ });
342
+ const jsonConverters = {
343
+ any: handleAny,
344
+ bigint: handleBigInt,
345
+ boolean: handleBoolean,
346
+ date: handleDate,
347
+ nan: handleNaN,
348
+ never: handleNever,
349
+ null: handleNull,
350
+ number: handleNumber,
351
+ string: handleString,
352
+ undefined: handleUndefined,
353
+ unknown: handleUnknown,
354
+ void: handleVoid,
355
+ array: handleArray,
356
+ enum: handleEnum,
357
+ instanceOf: handleInstanceOf,
358
+ literal: handleLiteral,
359
+ map: handleMap,
360
+ set: handleSet,
361
+ nativeEnum: handleNativeEnum,
362
+ tuple: handleTuple,
363
+ object: handleObject,
364
+ record: handleRecord,
365
+ union: handleUnion,
366
+ intersection: handleIntersection,
367
+ discriminatedUnion: handleDiscriminatedUnion,
368
+ lazy: handleLazy
369
+ };
370
+
371
+ exports.columnToZod = columnToZod;
372
+ exports.instanceToZod = instanceToZod;
373
+ exports.modelToZod = modelToZod;
374
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import {\n ArrayColumn,\n ColumnsShape,\n ColumnType,\n DateColumn,\n EnumColumn,\n JSONColumn,\n NumberColumn,\n TextColumn,\n JSONTypeAny,\n Primitive,\n JSONArray,\n JSONEnum,\n JSONInstanceOf,\n JSONLiteral,\n JSONMap,\n EnumLike,\n JSONNativeEnum,\n JSONDate,\n JSONNumber,\n JSONString,\n JSONSet,\n JSONTuple,\n JSONObject,\n UnknownKeysParam,\n JSONDiscriminatedObject,\n JSONDiscriminatedUnion,\n JSONRecord,\n JSONRecordKeyType,\n JSONIntersection,\n JSONUnion,\n JSONLazy,\n} from 'pqb';\nimport { z, ZodTypeAny } from 'zod';\nimport { Buffer } from 'node:buffer';\n\ntype NumberType =\n | 'smallint'\n | 'integer'\n | 'real'\n | 'smallserial'\n | 'serial'\n | 'money';\n\ntype BigIntType =\n | 'bigint'\n | 'numeric'\n | 'decimal'\n | 'double precision'\n | 'bigserial';\n\ntype StringType = 'varchar' | 'char' | 'text' | 'string' | 'xml' | 'json';\n\ntype DateTimeType = 'date' | 'timestamp' | 'timestamp with time zone';\n\ntype TimeType = 'time' | 'time with time zone';\n\ntype GeometryType =\n | 'point'\n | 'line'\n | 'lseg'\n | 'box'\n | 'path'\n | 'polygon'\n | 'circle';\n\ntype NetworkType = 'cidr' | 'inet' | 'macaddr' | 'macaddr8';\n\ntype BitStringType = 'bit' | 'bit varying';\n\ntype FullTextSearchType = 'tsvector' | 'tsquery';\n\ntype UUIDType = 'uuid';\n\ntype ByteaType = 'bytea';\n\ntype SchemaToZod<\n T extends ColumnType,\n D = T['dataType'],\n> = T['isNullable'] extends true\n ? z.ZodNullable<SchemaToZod<Omit<T, 'isNullable'> & { isNullable: false }>>\n : D extends NumberType\n ? z.ZodNumber\n : D extends\n | BigIntType\n | StringType\n | TimeType\n | GeometryType\n | NetworkType\n | BitStringType\n | FullTextSearchType\n | UUIDType\n ? z.ZodString\n : D extends ByteaType\n ? z.ZodType<Buffer>\n : D extends DateTimeType\n ? z.ZodDate\n : D extends 'interval'\n ? typeof interval\n : D extends 'boolean'\n ? z.ZodBoolean\n : T extends EnumColumn<string, infer U>\n ? z.ZodEnum<U>\n : T extends ArrayColumn<infer U>\n ? z.ZodArray<SchemaToZod<U>>\n : T extends JSONColumn\n ? JsonToZod<T['data']['schema']>\n : never;\n\ntype JsonToZod<T extends JSONTypeAny, D = T['dataType']> = T extends {\n types: [JSONTypeAny, JSONTypeAny, ...JSONTypeAny[]];\n}\n ? z.ZodUnion<MapJsonTuple<T['types']>>\n : T['data'] extends {\n nullable: true;\n }\n ? T['data'] extends { optional: true }\n ? z.ZodNullable<\n z.ZodOptional<\n JsonToZod<\n Omit<T, 'data'> & { data: Omit<T['data'], 'nullable' | 'optional'> }\n >\n >\n >\n : z.ZodNullable<\n JsonToZod<Omit<T, 'data'> & { data: Omit<T['data'], 'nullable'> }>\n >\n : T['data'] extends { optional: true }\n ? z.ZodOptional<\n JsonToZod<Omit<T, 'data'> & { data: Omit<T['data'], 'optional'> }>\n >\n : D extends 'bigint'\n ? z.ZodString\n : D extends 'boolean'\n ? z.ZodBoolean\n : D extends 'date'\n ? z.ZodDate\n : D extends 'nan'\n ? z.ZodNaN\n : D extends 'never'\n ? z.ZodNever\n : D extends 'null'\n ? z.ZodNull\n : D extends 'number'\n ? z.ZodNumber\n : D extends 'string'\n ? z.ZodString\n : D extends 'undefined'\n ? z.ZodUndefined\n : D extends 'unknown'\n ? z.ZodUnknown\n : D extends 'void'\n ? z.ZodVoid\n : T extends JSONArray<infer U>\n ? z.ZodArray<JsonToZod<U>>\n : T extends JSONEnum<string, infer U>\n ? z.ZodEnum<U>\n : T extends JSONInstanceOf<infer U>\n ? z.ZodType<InstanceType<U>, z.ZodTypeDef, InstanceType<U>>\n : T extends JSONLiteral<infer U>\n ? z.ZodLiteral<U>\n : T extends JSONMap<infer K, infer V>\n ? z.ZodMap<JsonToZod<K>, JsonToZod<V>>\n : T extends JSONSet<infer U>\n ? z.ZodSet<JsonToZod<U>>\n : T extends JSONNativeEnum<infer U>\n ? z.ZodNativeEnum<U>\n : T extends JSONTuple<infer U, infer R>\n ? z.ZodTuple<MapJsonTuple<U>, R extends JSONTypeAny ? JsonToZod<R> : null>\n : T extends JSONObject<Record<string, JSONTypeAny>, UnknownKeysParam>\n ? z.ZodObject<\n { [K in keyof T['shape']]: JsonToZod<T['shape'][K]> },\n T['unknownKeys'],\n JsonToZod<T['catchAllType']>\n >\n : T extends JSONRecord<JSONRecordKeyType, JSONTypeAny>\n ? z.ZodRecord<\n JsonToZod<T['keyType']> extends z.ZodType<\n string | number | symbol,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any\n >\n ? JsonToZod<T['keyType']>\n : never,\n JsonToZod<T['valueType']>\n >\n : T extends JSONIntersection<JSONTypeAny, JSONTypeAny>\n ? z.ZodIntersection<JsonToZod<T['left']>, JsonToZod<T['right']>>\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends JSONDiscriminatedUnion<string, Primitive, any>\n ? z.ZodDiscriminatedUnion<\n T['discriminator'],\n T['discriminatorValue'],\n JsonToZod<T['_option']> extends z.ZodDiscriminatedUnionOption<\n T['discriminator'],\n T['discriminatorValue']\n >\n ? JsonToZod<T['_option']>\n : never\n >\n : D extends 'any'\n ? z.ZodTypeAny\n : z.ZodType<T['type']>;\n\ntype MapJsonTuple<T extends unknown[]> = T extends [infer Head, ...infer Tail]\n ? [Head extends JSONTypeAny ? JsonToZod<Head> : never, ...MapJsonTuple<Tail>]\n : [];\n\nexport type ModelToZod<\n T extends new () => { columns: { shape: ColumnsShape } },\n> = InstanceToZod<InstanceType<T>['columns']>;\n\nexport const modelToZod = <\n T extends new () => { columns: { shape: ColumnsShape } },\n>(\n model: T,\n): ModelToZod<T> => {\n return instanceToZod(new model().columns) as unknown as ModelToZod<T>;\n};\n\nexport type InstanceToZod<T extends { shape: ColumnsShape }> = z.ZodObject<{\n [K in keyof T['shape']]: SchemaToZod<T['shape'][K]>;\n}>;\n\nexport const instanceToZod = <T extends { shape: ColumnsShape }>({\n shape,\n}: T): InstanceToZod<T> => {\n const result = {} as z.ZodRawShape;\n for (const key in shape) {\n result[key as keyof typeof result] = columnToZod(shape[key]);\n }\n return z.object(result) as InstanceToZod<T>;\n};\n\nexport const columnToZod = <T extends ColumnType>(\n column: T,\n): SchemaToZod<T> => {\n const dataType = column.data.as?.dataType || column.dataType;\n const converter = converters[dataType];\n if (!converter) throw new Error(`Cannot parse column ${dataType}`);\n return converter(column) as SchemaToZod<T>;\n};\n\nconst typeHandler = <Type extends ColumnType | JSONTypeAny>(\n fn: (column: Type) => z.ZodTypeAny,\n) => {\n return (column: ColumnType | JSONTypeAny) => {\n let type = fn(column as Type);\n\n column.chain.forEach((item) => {\n if (item[0] === 'transform') {\n type = type.transform(item[1]);\n } else if (item[0] === 'to') {\n type = z.preprocess(item[1], itemToZod(item[2]));\n } else if (item[0] === 'refine') {\n type = type.refine(item[1]);\n } else if (item[0] === 'superRefine') {\n type = type.superRefine(item[1]);\n }\n });\n\n if (\n ('nullable' in column.data && column.data.nullable) ||\n (column as ColumnType).isNullable\n ) {\n if ('optional' in column.data && column.data.optional) {\n type = type.nullish();\n } else {\n type = type.nullable();\n }\n } else if ('optional' in column.data && column.data.optional) {\n type = type.optional();\n }\n\n if (column instanceof ColumnType) {\n if (column.data.validationDefault !== undefined) {\n type = type.default(column.data.validationDefault);\n }\n } else if (column.data.default !== undefined) {\n type = type.default(column.data.default);\n }\n\n return type;\n };\n};\n\nconst stringParams = [\n 'min',\n 'max',\n 'length',\n 'regex',\n 'startsWith',\n 'endsWith',\n];\nconst stringEmptyParams = ['email', 'url', 'uuid', 'cuid', 'trim'];\nconst handleString = typeHandler((column: TextColumn | JSONString) => {\n let type = z.string();\n stringParams.forEach((key) => {\n const value = (column.data as Record<string, unknown>)[key];\n if (value !== undefined) {\n type = (\n type as unknown as Record<string, (value: unknown) => z.ZodString>\n )[key](value);\n }\n });\n stringEmptyParams.forEach((key) => {\n const value = (column.data as Record<string, unknown>)[key];\n if (value) {\n type = (type as unknown as Record<string, () => z.ZodString>)[key]();\n }\n });\n return type;\n});\n\nconst numberParams = ['lt', 'lte', 'gt', 'gte', 'multipleOf'];\nconst handleNumber = typeHandler((column: NumberColumn | JSONNumber) => {\n let type = z.number();\n numberParams.forEach((key) => {\n const value = (column.data as Record<string, unknown>)[key];\n if (value !== undefined) {\n type = (\n type as unknown as Record<string, (value: unknown) => z.ZodNumber>\n )[key](value);\n }\n });\n if ((column.data as Record<string, boolean>).int) {\n type = type.int();\n }\n return type;\n});\n\nconst handleBigInt = typeHandler(() => {\n return z.string().refine(\n (value) => {\n try {\n BigInt(value);\n return true;\n } catch (_) {\n return false;\n }\n },\n {\n message: 'Failed to parse bigint',\n },\n );\n});\n\nconst handleBuffer = typeHandler(() => {\n return z.instanceof(Buffer);\n});\n\nconst dateParams = ['min', 'max'];\nconst handleDate = typeHandler((column: DateColumn | JSONDate) => {\n let type = z.date();\n dateParams.forEach((key) => {\n const value = (column.data as Record<string, unknown>)[key];\n if (value !== undefined) {\n type = (type as unknown as Record<string, (value: unknown) => z.ZodDate>)[\n key\n ](value);\n }\n });\n\n return z.preprocess(\n (val) => (typeof val === 'string' ? new Date(val) : val),\n type,\n );\n});\n\nconst handleTime = typeHandler(() => {\n return z.string().refine(\n (val) => {\n return !isNaN(new Date(`2000-01-01 ${val}`).getTime());\n },\n {\n message: 'Invalid time',\n },\n );\n});\n\nconst interval = z\n .object({\n years: z.number().optional(),\n months: z.number().optional(),\n days: z.number().optional(),\n hours: z.number().optional(),\n seconds: z.number().optional(),\n })\n .strict();\n\nconst handleInterval = typeHandler(() => {\n return interval;\n});\n\nconst handleBoolean = typeHandler(() => {\n return z.boolean();\n});\n\nconst handleEnum = typeHandler((column: EnumColumn | JSONEnum) => {\n const enumColumn = column as\n | EnumColumn<string, [string, ...string[]]>\n | JSONEnum<string, [string, ...string[]]>;\n return z.enum(enumColumn.options);\n});\n\nconst handleBitString = typeHandler(() => {\n return z.string().regex(/[10]/g);\n});\n\nconst handleUUID = typeHandler(() => {\n return z.string().uuid();\n});\n\nconst arrayParams = ['min', 'max', 'length'];\nconst handleArray = typeHandler(\n (array: ArrayColumn<ColumnType> | JSONArray<JSONTypeAny>) => {\n let type: z.ZodArray<z.ZodTypeAny>;\n if ('element' in array) {\n type = z.array(jsonItemToZod(array.element));\n } else {\n type = z.array(columnToZod(array.data.item));\n }\n\n arrayParams.forEach((key) => {\n const value = (array.data as Record<string, unknown>)[key];\n if (value !== undefined) {\n type = (\n type as unknown as Record<\n string,\n (value: unknown) => z.ZodArray<z.ZodTypeAny>\n >\n )[key](value);\n }\n });\n\n return type;\n },\n);\n\nconst handleJson = typeHandler((column: JSONColumn) => {\n const type = column.data.schema;\n return jsonItemToZod(type);\n});\n\nconst jsonItemToZod = (type: JSONTypeAny) => {\n const converter = jsonConverters[type.dataType];\n if (!converter) throw new Error(`Cannot parse column ${type.dataType}`);\n return converter(type);\n};\n\nconst itemToZod = (item: ColumnType | JSONTypeAny) => {\n return item instanceof ColumnType ? columnToZod(item) : jsonItemToZod(item);\n};\n\nconst converters: Record<string, (column: ColumnType) => z.ZodType> = {\n varchar: handleString,\n char: handleString,\n text: handleString,\n smallint: handleNumber,\n integer: handleNumber,\n real: handleNumber,\n smallserial: handleNumber,\n serial: handleNumber,\n money: handleNumber,\n bigint: handleBigInt,\n decimal: handleBigInt,\n 'double precision': handleBigInt,\n bigserial: handleBigInt,\n bytea: handleBuffer,\n date: handleDate,\n timestamp: handleDate,\n 'timestamp with time zone': handleDate,\n time: handleTime,\n 'time with time zone': handleTime,\n interval: handleInterval,\n boolean: handleBoolean,\n enum: handleEnum,\n point: handleString,\n line: handleString,\n lseg: handleString,\n box: handleString,\n path: handleString,\n polygon: handleString,\n circle: handleString,\n cidr: handleString,\n inet: handleString,\n macaddr: handleString,\n macaddr8: handleString,\n bit: handleBitString,\n 'bit varying': handleBitString,\n tsvector: handleString,\n tsquery: handleString,\n xml: handleString,\n json: handleString,\n uuid: handleUUID,\n array: handleArray,\n jsonb: handleJson,\n};\n\nconst handleAny = typeHandler(() => {\n return z.any();\n});\n\nconst handleNaN = typeHandler(() => {\n return z.nan();\n});\n\nconst handleNever = typeHandler(() => {\n return z.never();\n});\n\nconst handleNull = typeHandler(() => {\n return z.null();\n});\n\nconst handleUndefined = typeHandler(() => {\n return z.undefined();\n});\n\nconst handleUnknown = typeHandler(() => {\n return z.unknown();\n});\n\nconst handleVoid = typeHandler(() => {\n return z.void();\n});\n\nconst handleInstanceOf = typeHandler(\n (type: JSONInstanceOf<new () => unknown>) => {\n return z.instanceof(type.class);\n },\n);\n\nconst handleLiteral = typeHandler((type: JSONTypeAny) => {\n return z.literal((type as JSONLiteral<string>).value);\n});\n\nconst handleMap = typeHandler((type: JSONMap<JSONTypeAny, JSONTypeAny>) => {\n const { keyType, valueType } = type;\n return z.map(jsonItemToZod(keyType), jsonItemToZod(valueType));\n});\n\nconst setParams = ['min', 'max', 'size'];\nconst handleSet = typeHandler((column: JSONSet<JSONTypeAny>) => {\n const { valueType } = column;\n let type = z.set(jsonItemToZod(valueType));\n setParams.forEach((key) => {\n const value = (column.data as Record<string, unknown>)[key];\n if (value !== undefined) {\n type = (\n type as unknown as Record<\n string,\n (value: unknown) => z.ZodSet<z.ZodTypeAny>\n >\n )[key](value);\n }\n });\n return type;\n});\n\nconst handleNativeEnum = typeHandler((type: JSONTypeAny) => {\n return z.nativeEnum((type as JSONNativeEnum<EnumLike>).enum);\n});\n\nconst handleTuple = typeHandler((column: JSONTuple) => {\n let type: z.ZodTuple<[], ZodTypeAny | null> = z.tuple(\n column.items.map((item) => jsonItemToZod(item)) as [],\n );\n if (column.restType) {\n type = type.rest(jsonItemToZod(column.restType));\n }\n return type;\n});\n\nconst handleObject = typeHandler(\n (type: JSONObject<Record<string, JSONTypeAny>, UnknownKeysParam>) => {\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const key in type.shape) {\n shape[key] = jsonItemToZod(type.shape[key]);\n }\n\n let object: z.ZodObject<z.ZodRawShape, UnknownKeysParam, z.ZodTypeAny> =\n z.object(shape);\n\n if (type.unknownKeys === 'passthrough') {\n object = object.passthrough();\n } else if (type.unknownKeys === 'strict') {\n object = object.strict();\n }\n\n if (type.catchAllType) {\n object = object.catchall(jsonItemToZod(type.catchAllType));\n }\n\n return object;\n },\n);\n\nconst handleRecord = typeHandler(\n (type: JSONRecord<JSONRecordKeyType, JSONTypeAny>) => {\n return z.record(jsonItemToZod(type.keyType), jsonItemToZod(type.valueType));\n },\n);\n\nconst handleUnion = typeHandler(\n (type: JSONUnion<[JSONTypeAny, JSONTypeAny, ...JSONTypeAny[]]>) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return z.union(type.types.map(jsonItemToZod) as any);\n },\n);\n\nconst handleIntersection = typeHandler(\n (type: JSONIntersection<JSONTypeAny, JSONTypeAny>) => {\n return z.intersection(jsonItemToZod(type.left), jsonItemToZod(type.right));\n },\n);\n\nconst handleDiscriminatedUnion = typeHandler(\n (\n type: JSONDiscriminatedUnion<\n string,\n Primitive,\n JSONDiscriminatedObject<string, Primitive>\n >,\n ) => {\n return z.discriminatedUnion(\n type.discriminator,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [...type.options.values()].map(jsonItemToZod) as any,\n );\n },\n);\n\nconst handleLazy = typeHandler((type: JSONLazy<JSONTypeAny>) => {\n return z.lazy(() => jsonItemToZod(type.getter()));\n});\n\nconst jsonConverters: Record<string, (type: JSONTypeAny) => z.ZodType> = {\n any: handleAny,\n bigint: handleBigInt,\n boolean: handleBoolean,\n date: handleDate,\n nan: handleNaN,\n never: handleNever,\n null: handleNull,\n number: handleNumber,\n string: handleString,\n undefined: handleUndefined,\n unknown: handleUnknown,\n void: handleVoid,\n array: handleArray,\n enum: handleEnum,\n instanceOf: handleInstanceOf,\n literal: handleLiteral,\n map: handleMap,\n set: handleSet,\n nativeEnum: handleNativeEnum,\n tuple: handleTuple,\n object: handleObject,\n record: handleRecord,\n union: handleUnion,\n intersection: handleIntersection,\n discriminatedUnion: handleDiscriminatedUnion,\n lazy: handleLazy,\n};\n"],"names":["z","ColumnType","Buffer"],"mappings":"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"}
package/jest-setup.ts ADDED
@@ -0,0 +1,3 @@
1
+ jest.mock('pqb', () => require('../pqb/src'), {
2
+ virtual: true,
3
+ });
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "orchid-orm-schema-to-zod",
3
+ "version": "0.0.1",
4
+ "description": "Orchid-ORM columns schema to Zod converter",
5
+ "homepage": "https://orchid-orm.netlify.app/guide/columns-validation-methods",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/romeerez/orchid-orm/tree/main/packages/schema-to-zod"
9
+ },
10
+ "main": "dist/index.js",
11
+ "module": "dist/index.esm.js",
12
+ "typings": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "require": "./dist/index.js",
16
+ "import": "./dist/index.esm.js",
17
+ "types": "./dist/index.d.ts"
18
+ }
19
+ },
20
+ "jest": {
21
+ "setupFiles": [
22
+ "dotenv/config"
23
+ ],
24
+ "globalSetup": "../../jest-global-setup.ts",
25
+ "setupFilesAfterEnv": [
26
+ "../../jest-setup.ts",
27
+ "./jest-setup.ts"
28
+ ],
29
+ "transform": {
30
+ "^.+\\.ts$": "@swc/jest"
31
+ }
32
+ },
33
+ "keywords": [
34
+ "orchid-orm",
35
+ "query-builder",
36
+ "schema",
37
+ "zod"
38
+ ],
39
+ "author": "Roman Kushyn",
40
+ "license": "ISC",
41
+ "dependencies": {
42
+ "pqb": "0.5.4",
43
+ "zod": "^3.19.1"
44
+ },
45
+ "devDependencies": {
46
+ "rollup": "^2.79.0",
47
+ "rollup-plugin-dts": "^4.2.2",
48
+ "rollup-plugin-esbuild": "^4.10.1",
49
+ "@swc/core": "^1.2.210",
50
+ "@swc/jest": "^0.2.21",
51
+ "@types/jest": "^28.1.2",
52
+ "@types/node": "^18.0.1",
53
+ "jest": "^28.1.2",
54
+ "rimraf": "^3.0.2",
55
+ "tslib": "^2.4.0",
56
+ "typescript": "^4.7.4"
57
+ },
58
+ "scripts": {
59
+ "test": "jest",
60
+ "build": "rimraf ./dist/ && rollup -c --rollup.config"
61
+ }
62
+ }
@@ -0,0 +1,3 @@
1
+ import config from '../../rollup.config';
2
+
3
+ export default config;