orchid-orm-schema-to-zod 0.1.12 → 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/CHANGELOG.md +19 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.esm.js +13 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.test.ts +38 -6
- package/src/index.ts +18 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# orchid-orm-schema-to-zod
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3f25b4d: Rename all model words to table words, because all models here are not models in OOP meaning
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [3f25b4d]
|
|
12
|
+
- pqb@0.8.0
|
|
13
|
+
|
|
14
|
+
## 0.1.13
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Refactor create and update of relations
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
- pqb@0.7.13
|
|
21
|
+
|
|
3
22
|
## 0.1.12
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as pqb from 'pqb';
|
|
2
|
-
import { ColumnsShape, ColumnType, EnumColumn, ArrayColumn, JSONColumn, JSONTypeAny, JSONArray, JSONEnum, JSONInstanceOf, JSONLiteral, JSONMap, JSONSet, JSONNativeEnum, JSONTuple, JSONObject, UnknownKeysParam, JSONRecord, JSONRecordKeyType, JSONIntersection, JSONDiscriminatedUnion, Primitive } from 'pqb';
|
|
2
|
+
import { ColumnsShape, ColumnType, EnumColumn, ArrayColumn, JSONColumn, VirtualColumn, JSONTypeAny, JSONArray, JSONEnum, JSONInstanceOf, JSONLiteral, JSONMap, JSONSet, JSONNativeEnum, JSONTuple, JSONObject, UnknownKeysParam, JSONRecord, JSONRecordKeyType, JSONIntersection, JSONDiscriminatedUnion, Primitive } from 'pqb';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { Buffer } from 'node:buffer';
|
|
5
5
|
|
|
@@ -16,7 +16,7 @@ declare type UUIDType = 'uuid';
|
|
|
16
16
|
declare type ByteaType = 'bytea';
|
|
17
17
|
declare type SchemaToZod<T extends ColumnType, D = T['dataType']> = T['isNullable'] extends true ? z.ZodNullable<SchemaToZod<Omit<T, 'isNullable'> & {
|
|
18
18
|
isNullable: false;
|
|
19
|
-
}>> : D extends NumberType ? z.ZodNumber : D extends BigIntType | StringType | TimeType | GeometryType | NetworkType | BitStringType | FullTextSearchType | UUIDType ? z.ZodString : D extends ByteaType ? z.ZodType<Buffer> : D extends DateTimeType ? z.ZodDate : D extends 'interval' ? typeof interval : D extends 'boolean' ? z.ZodBoolean : T extends EnumColumn<string, infer U> ? z.ZodEnum<U> : T extends ArrayColumn<infer U> ? z.ZodArray<SchemaToZod<U>> : T extends JSONColumn ? JsonToZod<T['data']['schema']> : never;
|
|
19
|
+
}>> : D extends NumberType ? z.ZodNumber : D extends BigIntType | StringType | TimeType | GeometryType | NetworkType | BitStringType | FullTextSearchType | UUIDType ? z.ZodString : D extends ByteaType ? z.ZodType<Buffer> : D extends DateTimeType ? z.ZodDate : D extends 'interval' ? typeof interval : D extends 'boolean' ? z.ZodBoolean : T extends EnumColumn<string, infer U> ? z.ZodEnum<U> : T extends ArrayColumn<infer U> ? z.ZodArray<SchemaToZod<U>> : T extends JSONColumn ? JsonToZod<T['data']['schema']> : T extends VirtualColumn ? z.ZodNever : never;
|
|
20
20
|
declare type JsonToZod<T extends JSONTypeAny, D = T['dataType']> = T extends {
|
|
21
21
|
types: [JSONTypeAny, JSONTypeAny, ...JSONTypeAny[]];
|
|
22
22
|
} ? z.ZodUnion<MapJsonTuple<T['types']>> : T['data'] extends {
|
|
@@ -35,16 +35,16 @@ declare type JsonToZod<T extends JSONTypeAny, D = T['dataType']> = T extends {
|
|
|
35
35
|
[K in keyof T['shape']]: JsonToZod<T['shape'][K]>;
|
|
36
36
|
}, T['unknownKeys'], JsonToZod<T['catchAllType']>> : T extends JSONRecord<JSONRecordKeyType, JSONTypeAny> ? z.ZodRecord<JsonToZod<T['keyType']> extends z.ZodType<string | number | symbol, any, any> ? JsonToZod<T['keyType']> : never, JsonToZod<T['valueType']>> : T extends JSONIntersection<JSONTypeAny, JSONTypeAny> ? z.ZodIntersection<JsonToZod<T['left']>, JsonToZod<T['right']>> : T extends JSONDiscriminatedUnion<string, Primitive, any> ? z.ZodDiscriminatedUnion<T['discriminator'], T['discriminatorValue'], JsonToZod<T['_option']> extends z.ZodDiscriminatedUnionOption<T['discriminator'], T['discriminatorValue']> ? JsonToZod<T['_option']> : never> : D extends 'any' ? z.ZodTypeAny : z.ZodType<T['type']>;
|
|
37
37
|
declare type MapJsonTuple<T extends unknown[]> = T extends [infer Head, ...infer Tail] ? [Head extends JSONTypeAny ? JsonToZod<Head> : never, ...MapJsonTuple<Tail>] : [];
|
|
38
|
-
declare type
|
|
38
|
+
declare type TableToZod<T extends new () => {
|
|
39
39
|
columns: {
|
|
40
40
|
shape: ColumnsShape;
|
|
41
41
|
};
|
|
42
42
|
}> = InstanceToZod<InstanceType<T>['columns']>;
|
|
43
|
-
declare const
|
|
43
|
+
declare const tableToZod: <T extends new () => {
|
|
44
44
|
columns: {
|
|
45
45
|
shape: ColumnsShape;
|
|
46
46
|
};
|
|
47
|
-
}>(
|
|
47
|
+
}>(table: T) => TableToZod<T>;
|
|
48
48
|
declare type InstanceToZod<T extends {
|
|
49
49
|
shape: ColumnsShape;
|
|
50
50
|
}> = z.ZodObject<{
|
|
@@ -74,4 +74,4 @@ declare const interval: z.ZodObject<{
|
|
|
74
74
|
seconds?: number | undefined;
|
|
75
75
|
}>;
|
|
76
76
|
|
|
77
|
-
export { InstanceToZod,
|
|
77
|
+
export { InstanceToZod, TableToZod, columnToZod, instanceToZod, tableToZod };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import { ColumnType } from 'pqb';
|
|
1
|
+
import { VirtualColumn, ColumnType } from 'pqb';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { Buffer } from 'node:buffer';
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
return instanceToZod(new
|
|
5
|
+
const tableToZod = (table) => {
|
|
6
|
+
return instanceToZod(new table().columns);
|
|
7
7
|
};
|
|
8
8
|
const instanceToZod = ({
|
|
9
9
|
shape
|
|
10
10
|
}) => {
|
|
11
11
|
const result = {};
|
|
12
12
|
for (const key in shape) {
|
|
13
|
-
|
|
13
|
+
const column = shape[key];
|
|
14
|
+
if (!(column instanceof VirtualColumn)) {
|
|
15
|
+
result[key] = columnToZod(column);
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
18
|
return z.object(result);
|
|
16
19
|
};
|
|
@@ -18,8 +21,12 @@ const columnToZod = (column) => {
|
|
|
18
21
|
var _a;
|
|
19
22
|
const dataType = ((_a = column.data.as) == null ? void 0 : _a.dataType) || column.dataType;
|
|
20
23
|
const converter = converters[dataType];
|
|
21
|
-
if (!converter)
|
|
24
|
+
if (!converter) {
|
|
25
|
+
if (column instanceof VirtualColumn) {
|
|
26
|
+
return handleNever(column);
|
|
27
|
+
}
|
|
22
28
|
throw new Error(`Cannot parse column ${dataType}`);
|
|
29
|
+
}
|
|
23
30
|
return converter(column);
|
|
24
31
|
};
|
|
25
32
|
const typeHandler = (fn) => {
|
|
@@ -364,5 +371,5 @@ const jsonConverters = {
|
|
|
364
371
|
lazy: handleLazy
|
|
365
372
|
};
|
|
366
373
|
|
|
367
|
-
export { columnToZod, instanceToZod,
|
|
374
|
+
export { columnToZod, instanceToZod, tableToZod };
|
|
368
375
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.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":[],"mappings":";;;;AAsNa,MAAA,UAAA,GAAa,CAGxB,KACkB,KAAA;AAClB,EAAA,OAAO,aAAc,CAAA,IAAI,KAAM,EAAA,CAAE,OAAO,CAAA,CAAA;AAC1C,EAAA;AAMO,MAAM,gBAAgB,CAAoC;AAAA,EAC/D,KAAA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,SAAS,EAAC,CAAA;AAChB,EAAA,KAAA,MAAW,OAAO,KAAO,EAAA;AACvB,IAAO,MAAA,CAAA,GAAA,CAAA,GAA8B,WAAY,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA;AAAA,GAC7D;AACA,EAAO,OAAA,CAAA,CAAE,OAAO,MAAM,CAAA,CAAA;AACxB,EAAA;AAEa,MAAA,WAAA,GAAc,CACzB,MACmB,KAAA;AA9OrB,EAAA,IAAA,EAAA,CAAA;AA+OE,EAAA,MAAM,aAAW,EAAO,GAAA,MAAA,CAAA,IAAA,CAAK,EAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,aAAY,MAAO,CAAA,QAAA,CAAA;AACpD,EAAA,MAAM,YAAY,UAAW,CAAA,QAAA,CAAA,CAAA;AAC7B,EAAA,IAAI,CAAC,SAAA;AAAW,IAAM,MAAA,IAAI,KAAM,CAAA,CAAA,oBAAA,EAAuB,QAAU,CAAA,CAAA,CAAA,CAAA;AACjE,EAAA,OAAO,UAAU,MAAM,CAAA,CAAA;AACzB,EAAA;AAEA,MAAM,WAAA,GAAc,CAClB,EACG,KAAA;AACH,EAAA,OAAO,CAAC,MAAqC,KAAA;AAC3C,IAAI,IAAA,IAAA,GAAO,GAAG,MAAc,CAAA,CAAA;AAE5B,IAAO,MAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC7B,MAAI,IAAA,IAAA,CAAK,OAAO,WAAa,EAAA;AAC3B,QAAO,IAAA,GAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,CAAE,CAAA,CAAA,CAAA;AAAA,OAC/B,MAAA,IAAW,IAAK,CAAA,CAAA,CAAA,KAAO,IAAM,EAAA;AAC3B,QAAA,IAAA,GAAO,EAAE,UAAW,CAAA,IAAA,CAAK,IAAI,SAAU,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAAA,OACjD,MAAA,IAAW,IAAK,CAAA,CAAA,CAAA,KAAO,QAAU,EAAA;AAC/B,QAAO,IAAA,GAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,CAAE,CAAA,CAAA,CAAA;AAAA,OAC5B,MAAA,IAAW,IAAK,CAAA,CAAA,CAAA,KAAO,aAAe,EAAA;AACpC,QAAO,IAAA,GAAA,IAAA,CAAK,WAAY,CAAA,IAAA,CAAK,CAAE,CAAA,CAAA,CAAA;AAAA,OACjC;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IACG,cAAc,MAAO,CAAA,IAAA,IAAQ,OAAO,IAAK,CAAA,QAAA,IACzC,OAAsB,UACvB,EAAA;AACA,MAAA,IAAI,UAAc,IAAA,MAAA,CAAO,IAAQ,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AACrD,QAAA,IAAA,GAAO,KAAK,OAAQ,EAAA,CAAA;AAAA,OACf,MAAA;AACL,QAAA,IAAA,GAAO,KAAK,QAAS,EAAA,CAAA;AAAA,OACvB;AAAA,eACS,UAAc,IAAA,MAAA,CAAO,IAAQ,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AAC5D,MAAA,IAAA,GAAO,KAAK,QAAS,EAAA,CAAA;AAAA,KACvB;AAEA,IAAA,IAAI,kBAAkB,UAAY,EAAA;AAChC,MAAI,IAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,KAAsB,KAAW,CAAA,EAAA;AAC/C,QAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAA;AAAA,OACnD;AAAA,KACS,MAAA,IAAA,MAAA,CAAO,IAAK,CAAA,OAAA,KAAY,KAAW,CAAA,EAAA;AAC5C,MAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,KACzC;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AACF,CAAA,CAAA;AACA,MAAM,oBAAoB,CAAC,OAAA,EAAS,KAAO,EAAA,MAAA,EAAQ,QAAQ,MAAM,CAAA,CAAA;AACjE,MAAM,YAAA,GAAe,WAAY,CAAA,CAAC,MAAoC,KAAA;AACpE,EAAI,IAAA,IAAA,GAAO,EAAE,MAAO,EAAA,CAAA;AACpB,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC5B,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MACE,IAAA,GAAA,IAAA,CACA,KAAK,KAAK,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA,CAAA;AACD,EAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACjC,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,IAAA,GAAQ,KAAsD,GAAK,CAAA,EAAA,CAAA;AAAA,KACrE;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,eAAe,CAAC,IAAA,EAAM,KAAO,EAAA,IAAA,EAAM,OAAO,YAAY,CAAA,CAAA;AAC5D,MAAM,YAAA,GAAe,WAAY,CAAA,CAAC,MAAsC,KAAA;AACtE,EAAI,IAAA,IAAA,GAAO,EAAE,MAAO,EAAA,CAAA;AACpB,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC5B,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MACE,IAAA,GAAA,IAAA,CACA,KAAK,KAAK,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA,CAAA;AACD,EAAK,IAAA,MAAA,CAAO,KAAiC,GAAK,EAAA;AAChD,IAAA,IAAA,GAAO,KAAK,GAAI,EAAA,CAAA;AAAA,GAClB;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,EAAO,OAAA,CAAA,CAAE,QAAS,CAAA,MAAA;AAAA,IAChB,CAAC,KAAU,KAAA;AACT,MAAI,IAAA;AACF,QAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACZ,QAAO,OAAA,IAAA,CAAA;AAAA,eACA,CAAP,EAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,IACA;AAAA,MACE,OAAS,EAAA,wBAAA;AAAA,KACX;AAAA,GACF,CAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,EAAO,OAAA,CAAA,CAAE,WAAW,MAAM,CAAA,CAAA;AAC5B,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,CAAC,KAAA,EAAO,KAAK,CAAA,CAAA;AAChC,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,MAAkC,KAAA;AAChE,EAAI,IAAA,IAAA,GAAO,EAAE,IAAK,EAAA,CAAA;AAClB,EAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC1B,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MAAQ,IAAA,GAAA,IAAA,CACN,KACA,KAAK,CAAA,CAAA;AAAA,KACT;AAAA,GACD,CAAA,CAAA;AAED,EAAA,OAAO,CAAE,CAAA,UAAA;AAAA,IACP,CAAC,QAAS,OAAO,GAAA,KAAQ,WAAW,IAAI,IAAA,CAAK,GAAG,CAAI,GAAA,GAAA;AAAA,IACpD,IAAA;AAAA,GACF,CAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAO,OAAA,CAAA,CAAE,QAAS,CAAA,MAAA;AAAA,IAChB,CAAC,GAAQ,KAAA;AACP,MAAO,OAAA,CAAC,MAAM,IAAI,IAAA,CAAK,cAAc,GAAK,CAAA,CAAA,CAAA,CAAE,SAAS,CAAA,CAAA;AAAA,KACvD;AAAA,IACA;AAAA,MACE,OAAS,EAAA,cAAA;AAAA,KACX;AAAA,GACF,CAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,QAAA,GAAW,EACd,MAAO,CAAA;AAAA,EACN,KAAO,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC3B,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC5B,IAAM,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC1B,KAAO,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC3B,OAAS,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAC/B,CAAC,EACA,MAAO,EAAA,CAAA;AAEV,MAAM,cAAA,GAAiB,YAAY,MAAM;AACvC,EAAO,OAAA,QAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,EAAA,OAAO,EAAE,OAAQ,EAAA,CAAA;AACnB,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,MAAkC,KAAA;AAChE,EAAA,MAAM,UAAa,GAAA,MAAA,CAAA;AAGnB,EAAO,OAAA,CAAA,CAAE,IAAK,CAAA,UAAA,CAAW,OAAO,CAAA,CAAA;AAClC,CAAC,CAAA,CAAA;AAED,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,EAAA,OAAO,CAAE,CAAA,MAAA,EAAS,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACjC,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAO,OAAA,CAAA,CAAE,MAAO,EAAA,CAAE,IAAK,EAAA,CAAA;AACzB,CAAC,CAAA,CAAA;AAED,MAAM,WAAc,GAAA,CAAC,KAAO,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAC3C,MAAM,WAAc,GAAA,WAAA;AAAA,EAClB,CAAC,KAA4D,KAAA;AAC3D,IAAI,IAAA,IAAA,CAAA;AACJ,IAAA,IAAI,aAAa,KAAO,EAAA;AACtB,MAAA,IAAA,GAAO,CAAE,CAAA,KAAA,CAAM,aAAc,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAAA,KACtC,MAAA;AACL,MAAA,IAAA,GAAO,EAAE,KAAM,CAAA,WAAA,CAAY,KAAM,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC3B,MAAM,MAAA,KAAA,GAAS,MAAM,IAAiC,CAAA,GAAA,CAAA,CAAA;AACtD,MAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,QACE,IAAA,GAAA,IAAA,CAIA,KAAK,KAAK,CAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,MAAuB,KAAA;AACrD,EAAM,MAAA,IAAA,GAAO,OAAO,IAAK,CAAA,MAAA,CAAA;AACzB,EAAA,OAAO,cAAc,IAAI,CAAA,CAAA;AAC3B,CAAC,CAAA,CAAA;AAED,MAAM,aAAA,GAAgB,CAAC,IAAsB,KAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,eAAe,IAAK,CAAA,QAAA,CAAA,CAAA;AACtC,EAAA,IAAI,CAAC,SAAA;AAAW,IAAA,MAAM,IAAI,KAAA,CAAM,CAAuB,oBAAA,EAAA,IAAA,CAAK,QAAU,CAAA,CAAA,CAAA,CAAA;AACtE,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,IAAmC,KAAA;AACpD,EAAA,OAAO,gBAAgB,UAAa,GAAA,WAAA,CAAY,IAAI,CAAA,GAAI,cAAc,IAAI,CAAA,CAAA;AAC5E,CAAA,CAAA;AAEA,MAAM,UAAgE,GAAA;AAAA,EACpE,OAAS,EAAA,YAAA;AAAA,EACT,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,QAAU,EAAA,YAAA;AAAA,EACV,OAAS,EAAA,YAAA;AAAA,EACT,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,YAAA;AAAA,EACb,MAAQ,EAAA,YAAA;AAAA,EACR,KAAO,EAAA,YAAA;AAAA,EACP,MAAQ,EAAA,YAAA;AAAA,EACR,OAAS,EAAA,YAAA;AAAA,EACT,kBAAoB,EAAA,YAAA;AAAA,EACpB,SAAW,EAAA,YAAA;AAAA,EACX,KAAO,EAAA,YAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,SAAW,EAAA,UAAA;AAAA,EACX,0BAA4B,EAAA,UAAA;AAAA,EAC5B,IAAM,EAAA,UAAA;AAAA,EACN,qBAAuB,EAAA,UAAA;AAAA,EACvB,QAAU,EAAA,cAAA;AAAA,EACV,OAAS,EAAA,aAAA;AAAA,EACT,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,YAAA;AAAA,EACP,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,GAAK,EAAA,YAAA;AAAA,EACL,IAAM,EAAA,YAAA;AAAA,EACN,OAAS,EAAA,YAAA;AAAA,EACT,MAAQ,EAAA,YAAA;AAAA,EACR,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,OAAS,EAAA,YAAA;AAAA,EACT,QAAU,EAAA,YAAA;AAAA,EACV,GAAK,EAAA,eAAA;AAAA,EACL,aAAe,EAAA,eAAA;AAAA,EACf,QAAU,EAAA,YAAA;AAAA,EACV,OAAS,EAAA,YAAA;AAAA,EACT,GAAK,EAAA,YAAA;AAAA,EACL,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,WAAA;AAAA,EACP,KAAO,EAAA,UAAA;AACT,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,EAAA,OAAO,EAAE,GAAI,EAAA,CAAA;AACf,CAAC,CAAA,CAAA;AAED,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,EAAA,OAAO,EAAE,GAAI,EAAA,CAAA;AACf,CAAC,CAAA,CAAA;AAED,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,EAAA,OAAO,EAAE,KAAM,EAAA,CAAA;AACjB,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAA,OAAO,EAAE,IAAK,EAAA,CAAA;AAChB,CAAC,CAAA,CAAA;AAED,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,EAAA,OAAO,EAAE,SAAU,EAAA,CAAA;AACrB,CAAC,CAAA,CAAA;AAED,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,EAAA,OAAO,EAAE,OAAQ,EAAA,CAAA;AACnB,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAA,OAAO,EAAE,IAAK,EAAA,CAAA;AAChB,CAAC,CAAA,CAAA;AAED,MAAM,gBAAmB,GAAA,WAAA;AAAA,EACvB,CAAC,IAA4C,KAAA;AAC3C,IAAO,OAAA,CAAA,CAAE,UAAW,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,GAChC;AACF,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,WAAY,CAAA,CAAC,IAAsB,KAAA;AACvD,EAAO,OAAA,CAAA,CAAE,OAAS,CAAA,IAAA,CAA6B,KAAK,CAAA,CAAA;AACtD,CAAC,CAAA,CAAA;AAED,MAAM,SAAA,GAAY,WAAY,CAAA,CAAC,IAA4C,KAAA;AACzE,EAAM,MAAA,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,IAAA,CAAA;AAC/B,EAAA,OAAO,EAAE,GAAI,CAAA,aAAA,CAAc,OAAO,CAAG,EAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AAC/D,CAAC,CAAA,CAAA;AAED,MAAM,SAAY,GAAA,CAAC,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AACvC,MAAM,SAAA,GAAY,WAAY,CAAA,CAAC,MAAiC,KAAA;AAC9D,EAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,EAAA,IAAI,IAAO,GAAA,CAAA,CAAE,GAAI,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AACzC,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACzB,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MACE,IAAA,GAAA,IAAA,CAIA,KAAK,KAAK,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,gBAAA,GAAmB,WAAY,CAAA,CAAC,IAAsB,KAAA;AAC1D,EAAO,OAAA,CAAA,CAAE,UAAY,CAAA,IAAA,CAAkC,IAAI,CAAA,CAAA;AAC7D,CAAC,CAAA,CAAA;AAED,MAAM,WAAA,GAAc,WAAY,CAAA,CAAC,MAAsB,KAAA;AACrD,EAAA,IAAI,OAA0C,CAAE,CAAA,KAAA;AAAA,IAC9C,OAAO,KAAM,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,GAChD,CAAA;AACA,EAAA,IAAI,OAAO,QAAU,EAAA;AACnB,IAAA,IAAA,GAAO,IAAK,CAAA,IAAA,CAAK,aAAc,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA;AAAA,GACjD;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,YAAe,GAAA,WAAA;AAAA,EACnB,CAAC,IAAoE,KAAA;AACnE,IAAA,MAAM,QAAsC,EAAC,CAAA;AAC7C,IAAW,KAAA,MAAA,GAAA,IAAO,KAAK,KAAO,EAAA;AAC5B,MAAA,KAAA,CAAM,GAAO,CAAA,GAAA,aAAA,CAAc,IAAK,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA;AAAA,KAC5C;AAEA,IAAI,IAAA,MAAA,GACF,CAAE,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAEhB,IAAI,IAAA,IAAA,CAAK,gBAAgB,aAAe,EAAA;AACtC,MAAA,MAAA,GAAS,OAAO,WAAY,EAAA,CAAA;AAAA,KAC9B,MAAA,IAAW,IAAK,CAAA,WAAA,KAAgB,QAAU,EAAA;AACxC,MAAA,MAAA,GAAS,OAAO,MAAO,EAAA,CAAA;AAAA,KACzB;AAEA,IAAA,IAAI,KAAK,YAAc,EAAA;AACrB,MAAA,MAAA,GAAS,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,IAAA,CAAK,YAAY,CAAC,CAAA,CAAA;AAAA,KAC3D;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,WAAA;AAAA,EACnB,CAAC,IAAqD,KAAA;AACpD,IAAO,OAAA,CAAA,CAAE,OAAO,aAAc,CAAA,IAAA,CAAK,OAAO,CAAG,EAAA,aAAA,CAAc,IAAK,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GAC5E;AACF,CAAA,CAAA;AAEA,MAAM,WAAc,GAAA,WAAA;AAAA,EAClB,CAAC,IAAkE,KAAA;AAEjE,IAAA,OAAO,EAAE,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,GAAA,CAAI,aAAa,CAAQ,CAAA,CAAA;AAAA,GACrD;AACF,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,WAAA;AAAA,EACzB,CAAC,IAAqD,KAAA;AACpD,IAAO,OAAA,CAAA,CAAE,aAAa,aAAc,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA,aAAA,CAAc,IAAK,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,CAAA,CAAA;AAEA,MAAM,wBAA2B,GAAA,WAAA;AAAA,EAC/B,CACE,IAKG,KAAA;AACH,IAAA,OAAO,CAAE,CAAA,kBAAA;AAAA,MACP,IAAK,CAAA,aAAA;AAAA,MAEL,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAI,aAAa,CAAA;AAAA,KAC9C,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,IAAgC,KAAA;AAC9D,EAAA,OAAO,EAAE,IAAK,CAAA,MAAM,cAAc,IAAK,CAAA,MAAA,EAAQ,CAAC,CAAA,CAAA;AAClD,CAAC,CAAA,CAAA;AAED,MAAM,cAAmE,GAAA;AAAA,EACvE,GAAK,EAAA,SAAA;AAAA,EACL,MAAQ,EAAA,YAAA;AAAA,EACR,OAAS,EAAA,aAAA;AAAA,EACT,IAAM,EAAA,UAAA;AAAA,EACN,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,WAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,MAAQ,EAAA,YAAA;AAAA,EACR,MAAQ,EAAA,YAAA;AAAA,EACR,SAAW,EAAA,eAAA;AAAA,EACX,OAAS,EAAA,aAAA;AAAA,EACT,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,WAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,UAAY,EAAA,gBAAA;AAAA,EACZ,OAAS,EAAA,aAAA;AAAA,EACT,GAAK,EAAA,SAAA;AAAA,EACL,GAAK,EAAA,SAAA;AAAA,EACL,UAAY,EAAA,gBAAA;AAAA,EACZ,KAAO,EAAA,WAAA;AAAA,EACP,MAAQ,EAAA,YAAA;AAAA,EACR,MAAQ,EAAA,YAAA;AAAA,EACR,KAAO,EAAA,WAAA;AAAA,EACP,YAAc,EAAA,kBAAA;AAAA,EACd,kBAAoB,EAAA,wBAAA;AAAA,EACpB,IAAM,EAAA,UAAA;AACR,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"index.esm.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 VirtualColumn,\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 : T extends VirtualColumn\n ? z.ZodNever\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 TableToZod<\n T extends new () => { columns: { shape: ColumnsShape } },\n> = InstanceToZod<InstanceType<T>['columns']>;\n\nexport const tableToZod = <\n T extends new () => { columns: { shape: ColumnsShape } },\n>(\n table: T,\n): TableToZod<T> => {\n return instanceToZod(new table().columns) as unknown as TableToZod<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 const column = shape[key];\n if (!(column instanceof VirtualColumn)) {\n result[key as keyof typeof result] = columnToZod(column);\n }\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) {\n if (column instanceof VirtualColumn) {\n return handleNever(column) as SchemaToZod<T>;\n }\n throw new Error(`Cannot parse column ${dataType}`);\n }\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":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,15 +6,18 @@ var pqb = require('pqb');
|
|
|
6
6
|
var zod = require('zod');
|
|
7
7
|
var node_buffer = require('node:buffer');
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
return instanceToZod(new
|
|
9
|
+
const tableToZod = (table) => {
|
|
10
|
+
return instanceToZod(new table().columns);
|
|
11
11
|
};
|
|
12
12
|
const instanceToZod = ({
|
|
13
13
|
shape
|
|
14
14
|
}) => {
|
|
15
15
|
const result = {};
|
|
16
16
|
for (const key in shape) {
|
|
17
|
-
|
|
17
|
+
const column = shape[key];
|
|
18
|
+
if (!(column instanceof pqb.VirtualColumn)) {
|
|
19
|
+
result[key] = columnToZod(column);
|
|
20
|
+
}
|
|
18
21
|
}
|
|
19
22
|
return zod.z.object(result);
|
|
20
23
|
};
|
|
@@ -22,8 +25,12 @@ const columnToZod = (column) => {
|
|
|
22
25
|
var _a;
|
|
23
26
|
const dataType = ((_a = column.data.as) == null ? void 0 : _a.dataType) || column.dataType;
|
|
24
27
|
const converter = converters[dataType];
|
|
25
|
-
if (!converter)
|
|
28
|
+
if (!converter) {
|
|
29
|
+
if (column instanceof pqb.VirtualColumn) {
|
|
30
|
+
return handleNever(column);
|
|
31
|
+
}
|
|
26
32
|
throw new Error(`Cannot parse column ${dataType}`);
|
|
33
|
+
}
|
|
27
34
|
return converter(column);
|
|
28
35
|
};
|
|
29
36
|
const typeHandler = (fn) => {
|
|
@@ -370,5 +377,5 @@ const jsonConverters = {
|
|
|
370
377
|
|
|
371
378
|
exports.columnToZod = columnToZod;
|
|
372
379
|
exports.instanceToZod = instanceToZod;
|
|
373
|
-
exports.
|
|
380
|
+
exports.tableToZod = tableToZod;
|
|
374
381
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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":";;;;;;;;AAsNa,MAAA,UAAA,GAAa,CAGxB,KACkB,KAAA;AAClB,EAAA,OAAO,aAAc,CAAA,IAAI,KAAM,EAAA,CAAE,OAAO,CAAA,CAAA;AAC1C,EAAA;AAMO,MAAM,gBAAgB,CAAoC;AAAA,EAC/D,KAAA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,SAAS,EAAC,CAAA;AAChB,EAAA,KAAA,MAAW,OAAO,KAAO,EAAA;AACvB,IAAO,MAAA,CAAA,GAAA,CAAA,GAA8B,WAAY,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA;AAAA,GAC7D;AACA,EAAO,OAAAA,KAAA,CAAE,OAAO,MAAM,CAAA,CAAA;AACxB,EAAA;AAEa,MAAA,WAAA,GAAc,CACzB,MACmB,KAAA;AA9OrB,EAAA,IAAA,EAAA,CAAA;AA+OE,EAAA,MAAM,aAAW,EAAO,GAAA,MAAA,CAAA,IAAA,CAAK,EAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,aAAY,MAAO,CAAA,QAAA,CAAA;AACpD,EAAA,MAAM,YAAY,UAAW,CAAA,QAAA,CAAA,CAAA;AAC7B,EAAA,IAAI,CAAC,SAAA;AAAW,IAAM,MAAA,IAAI,KAAM,CAAA,CAAA,oBAAA,EAAuB,QAAU,CAAA,CAAA,CAAA,CAAA;AACjE,EAAA,OAAO,UAAU,MAAM,CAAA,CAAA;AACzB,EAAA;AAEA,MAAM,WAAA,GAAc,CAClB,EACG,KAAA;AACH,EAAA,OAAO,CAAC,MAAqC,KAAA;AAC3C,IAAI,IAAA,IAAA,GAAO,GAAG,MAAc,CAAA,CAAA;AAE5B,IAAO,MAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC7B,MAAI,IAAA,IAAA,CAAK,OAAO,WAAa,EAAA;AAC3B,QAAO,IAAA,GAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,CAAE,CAAA,CAAA,CAAA;AAAA,OAC/B,MAAA,IAAW,IAAK,CAAA,CAAA,CAAA,KAAO,IAAM,EAAA;AAC3B,QAAA,IAAA,GAAOA,MAAE,UAAW,CAAA,IAAA,CAAK,IAAI,SAAU,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAAA,OACjD,MAAA,IAAW,IAAK,CAAA,CAAA,CAAA,KAAO,QAAU,EAAA;AAC/B,QAAO,IAAA,GAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,CAAE,CAAA,CAAA,CAAA;AAAA,OAC5B,MAAA,IAAW,IAAK,CAAA,CAAA,CAAA,KAAO,aAAe,EAAA;AACpC,QAAO,IAAA,GAAA,IAAA,CAAK,WAAY,CAAA,IAAA,CAAK,CAAE,CAAA,CAAA,CAAA;AAAA,OACjC;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IACG,cAAc,MAAO,CAAA,IAAA,IAAQ,OAAO,IAAK,CAAA,QAAA,IACzC,OAAsB,UACvB,EAAA;AACA,MAAA,IAAI,UAAc,IAAA,MAAA,CAAO,IAAQ,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AACrD,QAAA,IAAA,GAAO,KAAK,OAAQ,EAAA,CAAA;AAAA,OACf,MAAA;AACL,QAAA,IAAA,GAAO,KAAK,QAAS,EAAA,CAAA;AAAA,OACvB;AAAA,eACS,UAAc,IAAA,MAAA,CAAO,IAAQ,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AAC5D,MAAA,IAAA,GAAO,KAAK,QAAS,EAAA,CAAA;AAAA,KACvB;AAEA,IAAA,IAAI,kBAAkBC,cAAY,EAAA;AAChC,MAAI,IAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,KAAsB,KAAW,CAAA,EAAA;AAC/C,QAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAA;AAAA,OACnD;AAAA,KACS,MAAA,IAAA,MAAA,CAAO,IAAK,CAAA,OAAA,KAAY,KAAW,CAAA,EAAA;AAC5C,MAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,KACzC;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AACF,CAAA,CAAA;AACA,MAAM,oBAAoB,CAAC,OAAA,EAAS,KAAO,EAAA,MAAA,EAAQ,QAAQ,MAAM,CAAA,CAAA;AACjE,MAAM,YAAA,GAAe,WAAY,CAAA,CAAC,MAAoC,KAAA;AACpE,EAAI,IAAA,IAAA,GAAOD,MAAE,MAAO,EAAA,CAAA;AACpB,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC5B,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MACE,IAAA,GAAA,IAAA,CACA,KAAK,KAAK,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA,CAAA;AACD,EAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACjC,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,IAAA,GAAQ,KAAsD,GAAK,CAAA,EAAA,CAAA;AAAA,KACrE;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,eAAe,CAAC,IAAA,EAAM,KAAO,EAAA,IAAA,EAAM,OAAO,YAAY,CAAA,CAAA;AAC5D,MAAM,YAAA,GAAe,WAAY,CAAA,CAAC,MAAsC,KAAA;AACtE,EAAI,IAAA,IAAA,GAAOA,MAAE,MAAO,EAAA,CAAA;AACpB,EAAa,YAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC5B,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MACE,IAAA,GAAA,IAAA,CACA,KAAK,KAAK,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA,CAAA;AACD,EAAK,IAAA,MAAA,CAAO,KAAiC,GAAK,EAAA;AAChD,IAAA,IAAA,GAAO,KAAK,GAAI,EAAA,CAAA;AAAA,GAClB;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,EAAO,OAAAA,KAAA,CAAE,QAAS,CAAA,MAAA;AAAA,IAChB,CAAC,KAAU,KAAA;AACT,MAAI,IAAA;AACF,QAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACZ,QAAO,OAAA,IAAA,CAAA;AAAA,eACA,CAAP,EAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,IACA;AAAA,MACE,OAAS,EAAA,wBAAA;AAAA,KACX;AAAA,GACF,CAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,EAAO,OAAAA,KAAA,CAAE,WAAWE,kBAAM,CAAA,CAAA;AAC5B,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,CAAC,KAAA,EAAO,KAAK,CAAA,CAAA;AAChC,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,MAAkC,KAAA;AAChE,EAAI,IAAA,IAAA,GAAOF,MAAE,IAAK,EAAA,CAAA;AAClB,EAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC1B,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MAAQ,IAAA,GAAA,IAAA,CACN,KACA,KAAK,CAAA,CAAA;AAAA,KACT;AAAA,GACD,CAAA,CAAA;AAED,EAAA,OAAOA,KAAE,CAAA,UAAA;AAAA,IACP,CAAC,QAAS,OAAO,GAAA,KAAQ,WAAW,IAAI,IAAA,CAAK,GAAG,CAAI,GAAA,GAAA;AAAA,IACpD,IAAA;AAAA,GACF,CAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAO,OAAAA,KAAA,CAAE,QAAS,CAAA,MAAA;AAAA,IAChB,CAAC,GAAQ,KAAA;AACP,MAAO,OAAA,CAAC,MAAM,IAAI,IAAA,CAAK,cAAc,GAAK,CAAA,CAAA,CAAA,CAAE,SAAS,CAAA,CAAA;AAAA,KACvD;AAAA,IACA;AAAA,MACE,OAAS,EAAA,cAAA;AAAA,KACX;AAAA,GACF,CAAA;AACF,CAAC,CAAA,CAAA;AAED,MAAM,QAAA,GAAWA,MACd,MAAO,CAAA;AAAA,EACN,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC3B,MAAQ,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC5B,IAAM,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC1B,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC3B,OAAS,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAC/B,CAAC,EACA,MAAO,EAAA,CAAA;AAEV,MAAM,cAAA,GAAiB,YAAY,MAAM;AACvC,EAAO,OAAA,QAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,EAAA,OAAOA,MAAE,OAAQ,EAAA,CAAA;AACnB,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,MAAkC,KAAA;AAChE,EAAA,MAAM,UAAa,GAAA,MAAA,CAAA;AAGnB,EAAO,OAAAA,KAAA,CAAE,IAAK,CAAA,UAAA,CAAW,OAAO,CAAA,CAAA;AAClC,CAAC,CAAA,CAAA;AAED,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,EAAA,OAAOA,KAAE,CAAA,MAAA,EAAS,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACjC,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAO,OAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,IAAK,EAAA,CAAA;AACzB,CAAC,CAAA,CAAA;AAED,MAAM,WAAc,GAAA,CAAC,KAAO,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAC3C,MAAM,WAAc,GAAA,WAAA;AAAA,EAClB,CAAC,KAA4D,KAAA;AAC3D,IAAI,IAAA,IAAA,CAAA;AACJ,IAAA,IAAI,aAAa,KAAO,EAAA;AACtB,MAAA,IAAA,GAAOA,KAAE,CAAA,KAAA,CAAM,aAAc,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAAA,KACtC,MAAA;AACL,MAAA,IAAA,GAAOA,MAAE,KAAM,CAAA,WAAA,CAAY,KAAM,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,KAC7C;AAEA,IAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC3B,MAAM,MAAA,KAAA,GAAS,MAAM,IAAiC,CAAA,GAAA,CAAA,CAAA;AACtD,MAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,QACE,IAAA,GAAA,IAAA,CAIA,KAAK,KAAK,CAAA,CAAA;AAAA,OACd;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,MAAuB,KAAA;AACrD,EAAM,MAAA,IAAA,GAAO,OAAO,IAAK,CAAA,MAAA,CAAA;AACzB,EAAA,OAAO,cAAc,IAAI,CAAA,CAAA;AAC3B,CAAC,CAAA,CAAA;AAED,MAAM,aAAA,GAAgB,CAAC,IAAsB,KAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,eAAe,IAAK,CAAA,QAAA,CAAA,CAAA;AACtC,EAAA,IAAI,CAAC,SAAA;AAAW,IAAA,MAAM,IAAI,KAAA,CAAM,CAAuB,oBAAA,EAAA,IAAA,CAAK,QAAU,CAAA,CAAA,CAAA,CAAA;AACtE,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,IAAmC,KAAA;AACpD,EAAA,OAAO,gBAAgBC,cAAa,GAAA,WAAA,CAAY,IAAI,CAAA,GAAI,cAAc,IAAI,CAAA,CAAA;AAC5E,CAAA,CAAA;AAEA,MAAM,UAAgE,GAAA;AAAA,EACpE,OAAS,EAAA,YAAA;AAAA,EACT,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,QAAU,EAAA,YAAA;AAAA,EACV,OAAS,EAAA,YAAA;AAAA,EACT,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,YAAA;AAAA,EACb,MAAQ,EAAA,YAAA;AAAA,EACR,KAAO,EAAA,YAAA;AAAA,EACP,MAAQ,EAAA,YAAA;AAAA,EACR,OAAS,EAAA,YAAA;AAAA,EACT,kBAAoB,EAAA,YAAA;AAAA,EACpB,SAAW,EAAA,YAAA;AAAA,EACX,KAAO,EAAA,YAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,SAAW,EAAA,UAAA;AAAA,EACX,0BAA4B,EAAA,UAAA;AAAA,EAC5B,IAAM,EAAA,UAAA;AAAA,EACN,qBAAuB,EAAA,UAAA;AAAA,EACvB,QAAU,EAAA,cAAA;AAAA,EACV,OAAS,EAAA,aAAA;AAAA,EACT,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,YAAA;AAAA,EACP,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,GAAK,EAAA,YAAA;AAAA,EACL,IAAM,EAAA,YAAA;AAAA,EACN,OAAS,EAAA,YAAA;AAAA,EACT,MAAQ,EAAA,YAAA;AAAA,EACR,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,OAAS,EAAA,YAAA;AAAA,EACT,QAAU,EAAA,YAAA;AAAA,EACV,GAAK,EAAA,eAAA;AAAA,EACL,aAAe,EAAA,eAAA;AAAA,EACf,QAAU,EAAA,YAAA;AAAA,EACV,OAAS,EAAA,YAAA;AAAA,EACT,GAAK,EAAA,YAAA;AAAA,EACL,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,WAAA;AAAA,EACP,KAAO,EAAA,UAAA;AACT,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,EAAA,OAAOD,MAAE,GAAI,EAAA,CAAA;AACf,CAAC,CAAA,CAAA;AAED,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,EAAA,OAAOA,MAAE,GAAI,EAAA,CAAA;AACf,CAAC,CAAA,CAAA;AAED,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,EAAA,OAAOA,MAAE,KAAM,EAAA,CAAA;AACjB,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAA,OAAOA,MAAE,IAAK,EAAA,CAAA;AAChB,CAAC,CAAA,CAAA;AAED,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,EAAA,OAAOA,MAAE,SAAU,EAAA,CAAA;AACrB,CAAC,CAAA,CAAA;AAED,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,EAAA,OAAOA,MAAE,OAAQ,EAAA,CAAA;AACnB,CAAC,CAAA,CAAA;AAED,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,EAAA,OAAOA,MAAE,IAAK,EAAA,CAAA;AAChB,CAAC,CAAA,CAAA;AAED,MAAM,gBAAmB,GAAA,WAAA;AAAA,EACvB,CAAC,IAA4C,KAAA;AAC3C,IAAO,OAAAA,KAAA,CAAE,UAAW,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,GAChC;AACF,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,WAAY,CAAA,CAAC,IAAsB,KAAA;AACvD,EAAO,OAAAA,KAAA,CAAE,OAAS,CAAA,IAAA,CAA6B,KAAK,CAAA,CAAA;AACtD,CAAC,CAAA,CAAA;AAED,MAAM,SAAA,GAAY,WAAY,CAAA,CAAC,IAA4C,KAAA;AACzE,EAAM,MAAA,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,IAAA,CAAA;AAC/B,EAAA,OAAOA,MAAE,GAAI,CAAA,aAAA,CAAc,OAAO,CAAG,EAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AAC/D,CAAC,CAAA,CAAA;AAED,MAAM,SAAY,GAAA,CAAC,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AACvC,MAAM,SAAA,GAAY,WAAY,CAAA,CAAC,MAAiC,KAAA;AAC9D,EAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,EAAA,IAAI,IAAO,GAAAA,KAAA,CAAE,GAAI,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AACzC,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACzB,IAAM,MAAA,KAAA,GAAS,OAAO,IAAiC,CAAA,GAAA,CAAA,CAAA;AACvD,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MACE,IAAA,GAAA,IAAA,CAIA,KAAK,KAAK,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,gBAAA,GAAmB,WAAY,CAAA,CAAC,IAAsB,KAAA;AAC1D,EAAO,OAAAA,KAAA,CAAE,UAAY,CAAA,IAAA,CAAkC,IAAI,CAAA,CAAA;AAC7D,CAAC,CAAA,CAAA;AAED,MAAM,WAAA,GAAc,WAAY,CAAA,CAAC,MAAsB,KAAA;AACrD,EAAA,IAAI,OAA0CA,KAAE,CAAA,KAAA;AAAA,IAC9C,OAAO,KAAM,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,GAChD,CAAA;AACA,EAAA,IAAI,OAAO,QAAU,EAAA;AACnB,IAAA,IAAA,GAAO,IAAK,CAAA,IAAA,CAAK,aAAc,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA;AAAA,GACjD;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAC,CAAA,CAAA;AAED,MAAM,YAAe,GAAA,WAAA;AAAA,EACnB,CAAC,IAAoE,KAAA;AACnE,IAAA,MAAM,QAAsC,EAAC,CAAA;AAC7C,IAAW,KAAA,MAAA,GAAA,IAAO,KAAK,KAAO,EAAA;AAC5B,MAAA,KAAA,CAAM,GAAO,CAAA,GAAA,aAAA,CAAc,IAAK,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA;AAAA,KAC5C;AAEA,IAAI,IAAA,MAAA,GACFA,KAAE,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAEhB,IAAI,IAAA,IAAA,CAAK,gBAAgB,aAAe,EAAA;AACtC,MAAA,MAAA,GAAS,OAAO,WAAY,EAAA,CAAA;AAAA,KAC9B,MAAA,IAAW,IAAK,CAAA,WAAA,KAAgB,QAAU,EAAA;AACxC,MAAA,MAAA,GAAS,OAAO,MAAO,EAAA,CAAA;AAAA,KACzB;AAEA,IAAA,IAAI,KAAK,YAAc,EAAA;AACrB,MAAA,MAAA,GAAS,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,IAAA,CAAK,YAAY,CAAC,CAAA,CAAA;AAAA,KAC3D;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,WAAA;AAAA,EACnB,CAAC,IAAqD,KAAA;AACpD,IAAO,OAAAA,KAAA,CAAE,OAAO,aAAc,CAAA,IAAA,CAAK,OAAO,CAAG,EAAA,aAAA,CAAc,IAAK,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GAC5E;AACF,CAAA,CAAA;AAEA,MAAM,WAAc,GAAA,WAAA;AAAA,EAClB,CAAC,IAAkE,KAAA;AAEjE,IAAA,OAAOA,MAAE,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,GAAA,CAAI,aAAa,CAAQ,CAAA,CAAA;AAAA,GACrD;AACF,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,WAAA;AAAA,EACzB,CAAC,IAAqD,KAAA;AACpD,IAAO,OAAAA,KAAA,CAAE,aAAa,aAAc,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA,aAAA,CAAc,IAAK,CAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AACF,CAAA,CAAA;AAEA,MAAM,wBAA2B,GAAA,WAAA;AAAA,EAC/B,CACE,IAKG,KAAA;AACH,IAAA,OAAOA,KAAE,CAAA,kBAAA;AAAA,MACP,IAAK,CAAA,aAAA;AAAA,MAEL,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAI,aAAa,CAAA;AAAA,KAC9C,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,WAAY,CAAA,CAAC,IAAgC,KAAA;AAC9D,EAAA,OAAOA,MAAE,IAAK,CAAA,MAAM,cAAc,IAAK,CAAA,MAAA,EAAQ,CAAC,CAAA,CAAA;AAClD,CAAC,CAAA,CAAA;AAED,MAAM,cAAmE,GAAA;AAAA,EACvE,GAAK,EAAA,SAAA;AAAA,EACL,MAAQ,EAAA,YAAA;AAAA,EACR,OAAS,EAAA,aAAA;AAAA,EACT,IAAM,EAAA,UAAA;AAAA,EACN,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,WAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,MAAQ,EAAA,YAAA;AAAA,EACR,MAAQ,EAAA,YAAA;AAAA,EACR,SAAW,EAAA,eAAA;AAAA,EACX,OAAS,EAAA,aAAA;AAAA,EACT,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA,WAAA;AAAA,EACP,IAAM,EAAA,UAAA;AAAA,EACN,UAAY,EAAA,gBAAA;AAAA,EACZ,OAAS,EAAA,aAAA;AAAA,EACT,GAAK,EAAA,SAAA;AAAA,EACL,GAAK,EAAA,SAAA;AAAA,EACL,UAAY,EAAA,gBAAA;AAAA,EACZ,KAAO,EAAA,WAAA;AAAA,EACP,MAAQ,EAAA,YAAA;AAAA,EACR,MAAQ,EAAA,YAAA;AAAA,EACR,KAAO,EAAA,WAAA;AAAA,EACP,YAAc,EAAA,kBAAA;AAAA,EACd,kBAAoB,EAAA,wBAAA;AAAA,EACpB,IAAM,EAAA,UAAA;AACR,CAAA;;;;;;"}
|
|
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 VirtualColumn,\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 : T extends VirtualColumn\n ? z.ZodNever\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 TableToZod<\n T extends new () => { columns: { shape: ColumnsShape } },\n> = InstanceToZod<InstanceType<T>['columns']>;\n\nexport const tableToZod = <\n T extends new () => { columns: { shape: ColumnsShape } },\n>(\n table: T,\n): TableToZod<T> => {\n return instanceToZod(new table().columns) as unknown as TableToZod<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 const column = shape[key];\n if (!(column instanceof VirtualColumn)) {\n result[key as keyof typeof result] = columnToZod(column);\n }\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) {\n if (column instanceof VirtualColumn) {\n return handleNever(column) as SchemaToZod<T>;\n }\n throw new Error(`Cannot parse column ${dataType}`);\n }\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":["VirtualColumn","z","ColumnType","Buffer"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orchid-orm-schema-to-zod",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Orchid-ORM columns schema to Zod converter",
|
|
5
5
|
"homepage": "https://orchid-orm.netlify.app/guide/columns-validation-methods.html",
|
|
6
6
|
"repository": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"author": "Roman Kushyn",
|
|
40
40
|
"license": "ISC",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"pqb": "0.
|
|
42
|
+
"pqb": "0.8.0",
|
|
43
43
|
"zod": "^3.19.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
package/src/index.test.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ArrayColumn,
|
|
3
3
|
ColumnType,
|
|
4
|
-
columnTypes
|
|
4
|
+
columnTypes,
|
|
5
5
|
DateColumn,
|
|
6
6
|
IntegerColumn,
|
|
7
7
|
jsonTypes,
|
|
@@ -12,11 +12,18 @@ import {
|
|
|
12
12
|
JSONNumber,
|
|
13
13
|
JSONString,
|
|
14
14
|
JSONArray,
|
|
15
|
+
VirtualColumn,
|
|
15
16
|
} from 'pqb';
|
|
16
|
-
import { columnToZod, instanceToZod,
|
|
17
|
+
import { columnToZod, instanceToZod, tableToZod } from './index';
|
|
17
18
|
import { z } from 'zod';
|
|
18
19
|
import { Buffer } from 'node:buffer';
|
|
19
20
|
|
|
21
|
+
const t = {
|
|
22
|
+
...columnTypes,
|
|
23
|
+
text: (min = 0, max = Infinity) => columnTypes.text(min, max),
|
|
24
|
+
string: (min = 0, max = Infinity) => columnTypes.string(min, max),
|
|
25
|
+
};
|
|
26
|
+
|
|
20
27
|
type AssertEqual<T, Expected> = [T] extends [Expected]
|
|
21
28
|
? [Expected] extends [T]
|
|
22
29
|
? true
|
|
@@ -35,9 +42,9 @@ const columnOrJsonToZod = (type: any): z.ZodTypeAny => {
|
|
|
35
42
|
: columnToZod(t.json(() => type));
|
|
36
43
|
};
|
|
37
44
|
|
|
38
|
-
describe('
|
|
39
|
-
it('should convert a
|
|
40
|
-
const
|
|
45
|
+
describe('table to zod', () => {
|
|
46
|
+
it('should convert a table to a zod validation schema', () => {
|
|
47
|
+
const table = class Table {
|
|
41
48
|
columns = {
|
|
42
49
|
shape: {
|
|
43
50
|
id: t.serial().primaryKey(),
|
|
@@ -46,7 +53,7 @@ describe('model to zod', () => {
|
|
|
46
53
|
};
|
|
47
54
|
};
|
|
48
55
|
|
|
49
|
-
const result =
|
|
56
|
+
const result = tableToZod(table);
|
|
50
57
|
assertType<
|
|
51
58
|
typeof result,
|
|
52
59
|
z.ZodObject<{ id: z.ZodNumber; name: z.ZodNullable<z.ZodString> }>
|
|
@@ -1246,4 +1253,29 @@ describe('schema to zod', () => {
|
|
|
1246
1253
|
expect(timestampAsDate.parse(date)).toEqual(date);
|
|
1247
1254
|
});
|
|
1248
1255
|
});
|
|
1256
|
+
|
|
1257
|
+
describe('virtual', () => {
|
|
1258
|
+
class Virtual extends VirtualColumn {}
|
|
1259
|
+
|
|
1260
|
+
it('should skip virtual column in instanceToZod', () => {
|
|
1261
|
+
const schema = instanceToZod({
|
|
1262
|
+
shape: {
|
|
1263
|
+
text: t.text(),
|
|
1264
|
+
virtual: new Virtual(),
|
|
1265
|
+
},
|
|
1266
|
+
});
|
|
1267
|
+
|
|
1268
|
+
expect(Object.keys(schema.shape)).toEqual(['text']);
|
|
1269
|
+
});
|
|
1270
|
+
|
|
1271
|
+
it('should return ZodNever from columnToZod', () => {
|
|
1272
|
+
const schema = columnToZod(new Virtual());
|
|
1273
|
+
|
|
1274
|
+
assertType<typeof schema, z.ZodNever>(true);
|
|
1275
|
+
|
|
1276
|
+
expect(() => schema.parse(123)).toThrow(
|
|
1277
|
+
'Expected never, received number',
|
|
1278
|
+
);
|
|
1279
|
+
});
|
|
1280
|
+
});
|
|
1249
1281
|
});
|
package/src/index.ts
CHANGED
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
JSONIntersection,
|
|
31
31
|
JSONUnion,
|
|
32
32
|
JSONLazy,
|
|
33
|
+
VirtualColumn,
|
|
33
34
|
} from 'pqb';
|
|
34
35
|
import { z, ZodTypeAny } from 'zod';
|
|
35
36
|
import { Buffer } from 'node:buffer';
|
|
@@ -105,6 +106,8 @@ type SchemaToZod<
|
|
|
105
106
|
? z.ZodArray<SchemaToZod<U>>
|
|
106
107
|
: T extends JSONColumn
|
|
107
108
|
? JsonToZod<T['data']['schema']>
|
|
109
|
+
: T extends VirtualColumn
|
|
110
|
+
? z.ZodNever
|
|
108
111
|
: never;
|
|
109
112
|
|
|
110
113
|
type JsonToZod<T extends JSONTypeAny, D = T['dataType']> = T extends {
|
|
@@ -208,16 +211,16 @@ type MapJsonTuple<T extends unknown[]> = T extends [infer Head, ...infer Tail]
|
|
|
208
211
|
? [Head extends JSONTypeAny ? JsonToZod<Head> : never, ...MapJsonTuple<Tail>]
|
|
209
212
|
: [];
|
|
210
213
|
|
|
211
|
-
export type
|
|
214
|
+
export type TableToZod<
|
|
212
215
|
T extends new () => { columns: { shape: ColumnsShape } },
|
|
213
216
|
> = InstanceToZod<InstanceType<T>['columns']>;
|
|
214
217
|
|
|
215
|
-
export const
|
|
218
|
+
export const tableToZod = <
|
|
216
219
|
T extends new () => { columns: { shape: ColumnsShape } },
|
|
217
220
|
>(
|
|
218
|
-
|
|
219
|
-
):
|
|
220
|
-
return instanceToZod(new
|
|
221
|
+
table: T,
|
|
222
|
+
): TableToZod<T> => {
|
|
223
|
+
return instanceToZod(new table().columns) as unknown as TableToZod<T>;
|
|
221
224
|
};
|
|
222
225
|
|
|
223
226
|
export type InstanceToZod<T extends { shape: ColumnsShape }> = z.ZodObject<{
|
|
@@ -229,7 +232,10 @@ export const instanceToZod = <T extends { shape: ColumnsShape }>({
|
|
|
229
232
|
}: T): InstanceToZod<T> => {
|
|
230
233
|
const result = {} as z.ZodRawShape;
|
|
231
234
|
for (const key in shape) {
|
|
232
|
-
|
|
235
|
+
const column = shape[key];
|
|
236
|
+
if (!(column instanceof VirtualColumn)) {
|
|
237
|
+
result[key as keyof typeof result] = columnToZod(column);
|
|
238
|
+
}
|
|
233
239
|
}
|
|
234
240
|
return z.object(result) as InstanceToZod<T>;
|
|
235
241
|
};
|
|
@@ -239,7 +245,12 @@ export const columnToZod = <T extends ColumnType>(
|
|
|
239
245
|
): SchemaToZod<T> => {
|
|
240
246
|
const dataType = column.data.as?.dataType || column.dataType;
|
|
241
247
|
const converter = converters[dataType];
|
|
242
|
-
if (!converter)
|
|
248
|
+
if (!converter) {
|
|
249
|
+
if (column instanceof VirtualColumn) {
|
|
250
|
+
return handleNever(column) as SchemaToZod<T>;
|
|
251
|
+
}
|
|
252
|
+
throw new Error(`Cannot parse column ${dataType}`);
|
|
253
|
+
}
|
|
243
254
|
return converter(column) as SchemaToZod<T>;
|
|
244
255
|
};
|
|
245
256
|
|