@zodyac/zod-mongoose 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +3 -1
- package/dist/index.cjs +110 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +110 -23
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
This package provides a function to convert [zod](https://www.npmjs.com/package/zod) object to [mongoose](https://www.npmjs.com/package/mongoose) schema.
|
|
9
9
|
|
|
10
|
+
> [!NOTE] This package is in early development stage. Please report any issues you find and please expect API to change in minor versions.
|
|
11
|
+
|
|
10
12
|
## Installation
|
|
11
13
|
|
|
12
14
|
```bash
|
|
@@ -89,7 +91,7 @@ userModel.find({ name: "John" });
|
|
|
89
91
|
- ✅ Unique for String, Number, Date, ObjectId and UUID
|
|
90
92
|
|
|
91
93
|
- ⚠️ Record (Being converted to Map)
|
|
92
|
-
- ⚠️ Unions (
|
|
94
|
+
- ⚠️ Unions (Not supported by mongoose, will pick first inner type)
|
|
93
95
|
|
|
94
96
|
- ❗️ Intersection (not supported by mongoose)
|
|
95
97
|
- ❗️ Set (not supported by mongoose)
|
package/dist/index.cjs
CHANGED
|
@@ -30,7 +30,91 @@ __export(src_exports, {
|
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(src_exports);
|
|
32
32
|
var import_mongoose2 = require("mongoose");
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
// src/helpers.ts
|
|
35
|
+
var zmAssert;
|
|
36
|
+
(function(zmAssert2) {
|
|
37
|
+
function string(f) {
|
|
38
|
+
return f.constructor.name === "ZodString";
|
|
39
|
+
}
|
|
40
|
+
__name(string, "string");
|
|
41
|
+
zmAssert2.string = string;
|
|
42
|
+
function number(f) {
|
|
43
|
+
return f.constructor.name === "ZodNumber";
|
|
44
|
+
}
|
|
45
|
+
__name(number, "number");
|
|
46
|
+
zmAssert2.number = number;
|
|
47
|
+
function object(f) {
|
|
48
|
+
return f.constructor.name === "ZodObject";
|
|
49
|
+
}
|
|
50
|
+
__name(object, "object");
|
|
51
|
+
zmAssert2.object = object;
|
|
52
|
+
function array(f) {
|
|
53
|
+
return f.constructor.name === "ZodArray";
|
|
54
|
+
}
|
|
55
|
+
__name(array, "array");
|
|
56
|
+
zmAssert2.array = array;
|
|
57
|
+
function boolean(f) {
|
|
58
|
+
return f.constructor.name === "ZodBoolean";
|
|
59
|
+
}
|
|
60
|
+
__name(boolean, "boolean");
|
|
61
|
+
zmAssert2.boolean = boolean;
|
|
62
|
+
function enumerable(f) {
|
|
63
|
+
return f.constructor.name === "ZodEnum";
|
|
64
|
+
}
|
|
65
|
+
__name(enumerable, "enumerable");
|
|
66
|
+
zmAssert2.enumerable = enumerable;
|
|
67
|
+
function date(f) {
|
|
68
|
+
return f.constructor.name === "ZodDate";
|
|
69
|
+
}
|
|
70
|
+
__name(date, "date");
|
|
71
|
+
zmAssert2.date = date;
|
|
72
|
+
function objectId(f) {
|
|
73
|
+
return "__zm_type" in f && f.__zm_type === "ObjectId";
|
|
74
|
+
}
|
|
75
|
+
__name(objectId, "objectId");
|
|
76
|
+
zmAssert2.objectId = objectId;
|
|
77
|
+
function uuid(f) {
|
|
78
|
+
return "__zm_type" in f && f.__zm_type === "UUID";
|
|
79
|
+
}
|
|
80
|
+
__name(uuid, "uuid");
|
|
81
|
+
zmAssert2.uuid = uuid;
|
|
82
|
+
function def(f) {
|
|
83
|
+
return f.constructor.name === "ZodDefault";
|
|
84
|
+
}
|
|
85
|
+
__name(def, "def");
|
|
86
|
+
zmAssert2.def = def;
|
|
87
|
+
function optional(f) {
|
|
88
|
+
return f.constructor.name === "ZodOptional";
|
|
89
|
+
}
|
|
90
|
+
__name(optional, "optional");
|
|
91
|
+
zmAssert2.optional = optional;
|
|
92
|
+
function nullable(f) {
|
|
93
|
+
return f.constructor.name === "ZodNullable";
|
|
94
|
+
}
|
|
95
|
+
__name(nullable, "nullable");
|
|
96
|
+
zmAssert2.nullable = nullable;
|
|
97
|
+
function union(f) {
|
|
98
|
+
return f.constructor.name === "ZodUnion";
|
|
99
|
+
}
|
|
100
|
+
__name(union, "union");
|
|
101
|
+
zmAssert2.union = union;
|
|
102
|
+
function any(f) {
|
|
103
|
+
return f.constructor.name === "ZodAny";
|
|
104
|
+
}
|
|
105
|
+
__name(any, "any");
|
|
106
|
+
zmAssert2.any = any;
|
|
107
|
+
function mapOrRecord(f) {
|
|
108
|
+
return f.constructor.name === "ZodMap" || f.constructor.name === "ZodRecord";
|
|
109
|
+
}
|
|
110
|
+
__name(mapOrRecord, "mapOrRecord");
|
|
111
|
+
zmAssert2.mapOrRecord = mapOrRecord;
|
|
112
|
+
function effect(f) {
|
|
113
|
+
return f.constructor.name === "ZodEffects";
|
|
114
|
+
}
|
|
115
|
+
__name(effect, "effect");
|
|
116
|
+
zmAssert2.effect = effect;
|
|
117
|
+
})(zmAssert || (zmAssert = {}));
|
|
34
118
|
|
|
35
119
|
// src/extension.ts
|
|
36
120
|
var import_mongoose = require("mongoose");
|
|
@@ -112,7 +196,7 @@ __name(zodSchemaRaw, "zodSchemaRaw");
|
|
|
112
196
|
function parseObject(obj) {
|
|
113
197
|
const object = {};
|
|
114
198
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
115
|
-
if (field
|
|
199
|
+
if (zmAssert.object(field)) {
|
|
116
200
|
object[key] = parseObject(field);
|
|
117
201
|
} else {
|
|
118
202
|
const f = parseField(field);
|
|
@@ -124,59 +208,58 @@ function parseObject(obj) {
|
|
|
124
208
|
}
|
|
125
209
|
__name(parseObject, "parseObject");
|
|
126
210
|
function parseField(field, required = true, def, refinement) {
|
|
127
|
-
|
|
128
|
-
if ("__zm_type" in field && field.__zm_type === "ObjectId") {
|
|
211
|
+
if (zmAssert.objectId(field)) {
|
|
129
212
|
const ref = field.__zm_ref;
|
|
130
213
|
const unique = field.__zm_unique;
|
|
131
214
|
return parseObjectId(required, ref, unique);
|
|
132
215
|
}
|
|
133
|
-
if (
|
|
216
|
+
if (zmAssert.uuid(field)) {
|
|
134
217
|
const unique = field.__zm_unique;
|
|
135
218
|
return parseUUID(required, unique);
|
|
136
219
|
}
|
|
137
|
-
if (field
|
|
220
|
+
if (zmAssert.object(field)) {
|
|
138
221
|
return parseObject(field);
|
|
139
222
|
}
|
|
140
|
-
if (field
|
|
223
|
+
if (zmAssert.number(field)) {
|
|
141
224
|
const isUnique = field.__zm_unique ?? false;
|
|
142
225
|
return parseNumber(field, required, def, isUnique, refinement);
|
|
143
226
|
}
|
|
144
|
-
if (field
|
|
227
|
+
if (zmAssert.string(field)) {
|
|
145
228
|
const isUnique = field.__zm_unique ?? false;
|
|
146
229
|
return parseString(field, required, def, isUnique, refinement);
|
|
147
230
|
}
|
|
148
|
-
if (field
|
|
231
|
+
if (zmAssert.enumerable(field)) {
|
|
149
232
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
150
233
|
}
|
|
151
|
-
if (
|
|
234
|
+
if (zmAssert.boolean(field)) {
|
|
152
235
|
return parseBoolean(required, def);
|
|
153
236
|
}
|
|
154
|
-
if (field
|
|
237
|
+
if (zmAssert.date(field)) {
|
|
155
238
|
const isUnique = field.__zm_unique ?? false;
|
|
156
239
|
return parseDate(required, def, refinement, isUnique);
|
|
157
240
|
}
|
|
158
|
-
if (field
|
|
241
|
+
if (zmAssert.array(field)) {
|
|
159
242
|
return parseArray(required, field.element, def);
|
|
160
243
|
}
|
|
161
|
-
if (field
|
|
244
|
+
if (zmAssert.def(field)) {
|
|
162
245
|
return parseField(field._def.innerType, required, field._def.defaultValue());
|
|
163
246
|
}
|
|
164
|
-
if (field
|
|
247
|
+
if (zmAssert.optional(field)) {
|
|
165
248
|
return parseField(field._def.innerType, false, void 0);
|
|
166
249
|
}
|
|
167
|
-
if (field
|
|
250
|
+
if (zmAssert.nullable(field)) {
|
|
168
251
|
return parseField(field._def.innerType, false, def || null);
|
|
169
252
|
}
|
|
170
|
-
if (field
|
|
253
|
+
if (zmAssert.union(field)) {
|
|
171
254
|
return parseField(field._def.options[0]);
|
|
172
255
|
}
|
|
173
|
-
if (
|
|
256
|
+
if (zmAssert.any(field)) {
|
|
174
257
|
return parseMixed(required, def);
|
|
175
258
|
}
|
|
176
|
-
if (
|
|
259
|
+
if (zmAssert.mapOrRecord(field)) {
|
|
177
260
|
return parseMap(required, field.keySchema, def);
|
|
178
261
|
}
|
|
179
|
-
if (field
|
|
262
|
+
if (zmAssert.effect(field)) {
|
|
180
263
|
const effect = field._def.effect;
|
|
181
264
|
if (effect.type === "refinement") {
|
|
182
265
|
const validation = effect.__zm_validation;
|
|
@@ -275,13 +358,17 @@ function parseMap(required = true, key, def) {
|
|
|
275
358
|
__name(parseMap, "parseMap");
|
|
276
359
|
function typeConstructor(t) {
|
|
277
360
|
switch (true) {
|
|
278
|
-
case t
|
|
361
|
+
case zmAssert.string(t):
|
|
279
362
|
return String;
|
|
280
|
-
case t
|
|
363
|
+
case zmAssert.enumerable(t):
|
|
281
364
|
return String;
|
|
282
|
-
case t
|
|
365
|
+
case zmAssert.uuid(t):
|
|
366
|
+
return import_mongoose2.SchemaTypes.UUID;
|
|
367
|
+
case zmAssert.objectId(t):
|
|
368
|
+
return import_mongoose2.SchemaTypes.ObjectId;
|
|
369
|
+
case zmAssert.number(t):
|
|
283
370
|
return Number;
|
|
284
|
-
case t
|
|
371
|
+
case zmAssert.date(t):
|
|
285
372
|
return Date;
|
|
286
373
|
default:
|
|
287
374
|
return void 0;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport {\n ZodArray,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n type ZodRawShape,\n ZodRecord,\n ZodString,\n type ZodType,\n ZodUnion,\n type z,\n} from \"zod\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const schema = zodSchema(zDoc);\n * const userModel = model('User', schema);\n */\nexport function zodSchema<T extends ZodRawShape>(\n schema: ZodObject<T>,\n options?: SchemaOptions<any>, // TODO: Fix any\n): Schema<z.infer<typeof schema>> {\n const definition = parseObject(schema);\n return new Schema<z.infer<typeof schema>>(definition, options);\n}\n\n/**\n * Converts a Zod schema to a raw Mongoose schema object\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';\n * import { model, Schema } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n const field_type = field.constructor.name;\n\n if (\"__zm_type\" in field && field.__zm_type === \"ObjectId\") {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (\"__zm_type\" in field && field.__zm_type === \"UUID\") {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (field instanceof ZodObject) {\n return parseObject(field);\n }\n\n if (field instanceof ZodNumber) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>,\n );\n }\n\n if (field instanceof ZodString) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>,\n );\n }\n\n if (field instanceof ZodEnum) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (field_type === \"ZodBoolean\") {\n return parseBoolean(required, def as boolean);\n }\n\n if (field instanceof ZodDate) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n );\n }\n\n if (field instanceof ZodArray) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never,\n );\n }\n\n if (field instanceof ZodDefault) {\n return parseField(field._def.innerType, required, field._def.defaultValue());\n }\n\n if (field instanceof ZodOptional) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (field instanceof ZodNullable) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (field instanceof ZodUnion) {\n return parseField(field._def.options[0]);\n }\n\n if (field_type === \"ZodAny\") {\n return parseMixed(required, def);\n }\n\n if (field instanceof ZodMap || field instanceof ZodRecord) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >,\n );\n }\n\n if (field instanceof ZodEffects) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>,\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>,\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case t instanceof ZodString:\n return String;\n case t instanceof ZodEnum:\n return String;\n case t instanceof ZodNumber:\n return Number;\n case t instanceof ZodDate:\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["import_mongoose","import_zod","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","ZodObject","f","parseField","Error","constructor","required","def","refinement","field_type","name","__zm_type","ref","__zm_ref","unique","__zm_unique","parseObjectId","parseUUID","ZodNumber","isUnique","parseNumber","ZodString","parseString","ZodEnum","parseEnum","keys","Values","parseBoolean","ZodDate","parseDate","ZodArray","parseArray","element","ZodDefault","_def","innerType","defaultValue","ZodOptional","undefined","ZodNullable","ZodUnion","parseMixed","ZodMap","ZodRecord","parseMap","keySchema","ZodEffects","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/helpers.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport type {\n ZodNumber,\n ZodObject,\n ZodRawShape,\n ZodString,\n ZodType,\n z,\n} from \"zod\";\nimport { zmAssert } from \"./helpers.js\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const schema = zodSchema(zDoc);\n * const userModel = model('User', schema);\n */\nexport function zodSchema<T extends ZodRawShape>(\n schema: ZodObject<T>,\n options?: SchemaOptions<any> // TODO: Fix any\n): Schema<z.infer<typeof schema>> {\n const definition = parseObject(schema);\n return new Schema<z.infer<typeof schema>>(definition, options);\n}\n\n/**\n * Converts a Zod schema to a raw Mongoose schema object\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';\n * import { model, Schema } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(\n schema: ZodObject<T>\n): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (zmAssert.object(field)) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>\n): zm.mField | null {\n if (zmAssert.objectId(field)) {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (zmAssert.uuid(field)) {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (zmAssert.object(field)) {\n return parseObject(field);\n }\n\n if (zmAssert.number(field)) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>\n );\n }\n\n if (zmAssert.string(field)) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>\n );\n }\n\n if (zmAssert.enumerable(field)) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (zmAssert.boolean(field)) {\n return parseBoolean(required, def as boolean);\n }\n\n if (zmAssert.date(field)) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique\n );\n }\n\n if (zmAssert.array(field)) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never\n );\n }\n\n if (zmAssert.def(field)) {\n return parseField(\n field._def.innerType,\n required,\n field._def.defaultValue()\n );\n }\n\n if (zmAssert.optional(field)) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (zmAssert.nullable(field)) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (zmAssert.union(field)) {\n return parseField(field._def.options[0]);\n }\n\n if (zmAssert.any(field)) {\n return parseMixed(required, def);\n }\n\n if (zmAssert.mapOrRecord(field)) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >\n );\n }\n\n if (zmAssert.effect(field)) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(\n values: string[],\n required = true,\n def?: string\n): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(\n required = true,\n ref?: string,\n unique = false\n): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\nfunction parseArray<T>(\n // biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\n required = true,\n element: ZodType<T>,\n def?: T[]\n): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency with other functions\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case zmAssert.string(t):\n return String;\n case zmAssert.enumerable(t):\n return String;\n case zmAssert.uuid(t):\n return SchemaTypes.UUID;\n case zmAssert.objectId(t):\n return SchemaTypes.ObjectId;\n case zmAssert.number(t):\n return Number;\n case zmAssert.date(t):\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import type {\n ZodAny,\n ZodArray,\n ZodBoolean,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n ZodRecord,\n ZodString,\n ZodType,\n ZodUnion,\n} from \"zod\";\n\nexport namespace zmAssert {\n export function string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n }\n\n export function number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n }\n\n export function object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n }\n\n export function array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n }\n\n export function boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n }\n\n export function enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n }\n\n export function date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n }\n\n export function objectId(f: ZodType<any>): f is ZodType<string> {\n return \"__zm_type\" in f && f.__zm_type === \"ObjectId\";\n }\n\n export function uuid(f: ZodType<any>): f is ZodType<string> {\n return \"__zm_type\" in f && f.__zm_type === \"UUID\";\n }\n\n export function def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n }\n\n export function optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n }\n\n export function nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n }\n\n export function union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n }\n\n export function any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n }\n\n export function mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n }\n\n export function effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n }\n}\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["import_mongoose","zmAssert","string","f","constructor","name","number","object","array","boolean","enumerable","date","objectId","__zm_type","uuid","def","optional","nullable","union","any","mapOrRecord","effect","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","zmAssert","f","parseField","Error","constructor","required","def","refinement","objectId","ref","__zm_ref","unique","__zm_unique","parseObjectId","uuid","parseUUID","number","isUnique","parseNumber","string","parseString","enumerable","parseEnum","keys","Values","boolean","parseBoolean","date","parseDate","array","parseArray","element","_def","innerType","defaultValue","optional","undefined","nullable","union","any","parseMixed","mapOrRecord","parseMap","keySchema","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -60,7 +60,7 @@ declare namespace zm {
|
|
|
60
60
|
interface mMixed<T> extends _Field<T> {
|
|
61
61
|
type: typeof SchemaTypes.Mixed;
|
|
62
62
|
}
|
|
63
|
-
type Constructor = StringConstructor | NumberConstructor | ObjectConstructor | DateConstructor | BooleanConstructor | BigIntConstructor;
|
|
63
|
+
type Constructor = StringConstructor | NumberConstructor | ObjectConstructor | DateConstructor | BooleanConstructor | BigIntConstructor | typeof SchemaTypes.ObjectId | typeof SchemaTypes.UUID;
|
|
64
64
|
interface mMap<T, K> extends _Field<Map<T, K>> {
|
|
65
65
|
type: typeof Map;
|
|
66
66
|
of?: Constructor;
|
package/dist/index.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ declare namespace zm {
|
|
|
60
60
|
interface mMixed<T> extends _Field<T> {
|
|
61
61
|
type: typeof SchemaTypes.Mixed;
|
|
62
62
|
}
|
|
63
|
-
type Constructor = StringConstructor | NumberConstructor | ObjectConstructor | DateConstructor | BooleanConstructor | BigIntConstructor;
|
|
63
|
+
type Constructor = StringConstructor | NumberConstructor | ObjectConstructor | DateConstructor | BooleanConstructor | BigIntConstructor | typeof SchemaTypes.ObjectId | typeof SchemaTypes.UUID;
|
|
64
64
|
interface mMap<T, K> extends _Field<Map<T, K>> {
|
|
65
65
|
type: typeof Map;
|
|
66
66
|
of?: Constructor;
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,91 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
3
3
|
|
|
4
4
|
// src/index.ts
|
|
5
5
|
import { Schema, SchemaTypes } from "mongoose";
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
// src/helpers.ts
|
|
8
|
+
var zmAssert;
|
|
9
|
+
(function(zmAssert2) {
|
|
10
|
+
function string(f) {
|
|
11
|
+
return f.constructor.name === "ZodString";
|
|
12
|
+
}
|
|
13
|
+
__name(string, "string");
|
|
14
|
+
zmAssert2.string = string;
|
|
15
|
+
function number(f) {
|
|
16
|
+
return f.constructor.name === "ZodNumber";
|
|
17
|
+
}
|
|
18
|
+
__name(number, "number");
|
|
19
|
+
zmAssert2.number = number;
|
|
20
|
+
function object(f) {
|
|
21
|
+
return f.constructor.name === "ZodObject";
|
|
22
|
+
}
|
|
23
|
+
__name(object, "object");
|
|
24
|
+
zmAssert2.object = object;
|
|
25
|
+
function array(f) {
|
|
26
|
+
return f.constructor.name === "ZodArray";
|
|
27
|
+
}
|
|
28
|
+
__name(array, "array");
|
|
29
|
+
zmAssert2.array = array;
|
|
30
|
+
function boolean(f) {
|
|
31
|
+
return f.constructor.name === "ZodBoolean";
|
|
32
|
+
}
|
|
33
|
+
__name(boolean, "boolean");
|
|
34
|
+
zmAssert2.boolean = boolean;
|
|
35
|
+
function enumerable(f) {
|
|
36
|
+
return f.constructor.name === "ZodEnum";
|
|
37
|
+
}
|
|
38
|
+
__name(enumerable, "enumerable");
|
|
39
|
+
zmAssert2.enumerable = enumerable;
|
|
40
|
+
function date(f) {
|
|
41
|
+
return f.constructor.name === "ZodDate";
|
|
42
|
+
}
|
|
43
|
+
__name(date, "date");
|
|
44
|
+
zmAssert2.date = date;
|
|
45
|
+
function objectId(f) {
|
|
46
|
+
return "__zm_type" in f && f.__zm_type === "ObjectId";
|
|
47
|
+
}
|
|
48
|
+
__name(objectId, "objectId");
|
|
49
|
+
zmAssert2.objectId = objectId;
|
|
50
|
+
function uuid(f) {
|
|
51
|
+
return "__zm_type" in f && f.__zm_type === "UUID";
|
|
52
|
+
}
|
|
53
|
+
__name(uuid, "uuid");
|
|
54
|
+
zmAssert2.uuid = uuid;
|
|
55
|
+
function def(f) {
|
|
56
|
+
return f.constructor.name === "ZodDefault";
|
|
57
|
+
}
|
|
58
|
+
__name(def, "def");
|
|
59
|
+
zmAssert2.def = def;
|
|
60
|
+
function optional(f) {
|
|
61
|
+
return f.constructor.name === "ZodOptional";
|
|
62
|
+
}
|
|
63
|
+
__name(optional, "optional");
|
|
64
|
+
zmAssert2.optional = optional;
|
|
65
|
+
function nullable(f) {
|
|
66
|
+
return f.constructor.name === "ZodNullable";
|
|
67
|
+
}
|
|
68
|
+
__name(nullable, "nullable");
|
|
69
|
+
zmAssert2.nullable = nullable;
|
|
70
|
+
function union(f) {
|
|
71
|
+
return f.constructor.name === "ZodUnion";
|
|
72
|
+
}
|
|
73
|
+
__name(union, "union");
|
|
74
|
+
zmAssert2.union = union;
|
|
75
|
+
function any(f) {
|
|
76
|
+
return f.constructor.name === "ZodAny";
|
|
77
|
+
}
|
|
78
|
+
__name(any, "any");
|
|
79
|
+
zmAssert2.any = any;
|
|
80
|
+
function mapOrRecord(f) {
|
|
81
|
+
return f.constructor.name === "ZodMap" || f.constructor.name === "ZodRecord";
|
|
82
|
+
}
|
|
83
|
+
__name(mapOrRecord, "mapOrRecord");
|
|
84
|
+
zmAssert2.mapOrRecord = mapOrRecord;
|
|
85
|
+
function effect(f) {
|
|
86
|
+
return f.constructor.name === "ZodEffects";
|
|
87
|
+
}
|
|
88
|
+
__name(effect, "effect");
|
|
89
|
+
zmAssert2.effect = effect;
|
|
90
|
+
})(zmAssert || (zmAssert = {}));
|
|
7
91
|
|
|
8
92
|
// src/extension.ts
|
|
9
93
|
import { Types, isValidObjectId } from "mongoose";
|
|
@@ -85,7 +169,7 @@ __name(zodSchemaRaw, "zodSchemaRaw");
|
|
|
85
169
|
function parseObject(obj) {
|
|
86
170
|
const object = {};
|
|
87
171
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
88
|
-
if (field
|
|
172
|
+
if (zmAssert.object(field)) {
|
|
89
173
|
object[key] = parseObject(field);
|
|
90
174
|
} else {
|
|
91
175
|
const f = parseField(field);
|
|
@@ -97,59 +181,58 @@ function parseObject(obj) {
|
|
|
97
181
|
}
|
|
98
182
|
__name(parseObject, "parseObject");
|
|
99
183
|
function parseField(field, required = true, def, refinement) {
|
|
100
|
-
|
|
101
|
-
if ("__zm_type" in field && field.__zm_type === "ObjectId") {
|
|
184
|
+
if (zmAssert.objectId(field)) {
|
|
102
185
|
const ref = field.__zm_ref;
|
|
103
186
|
const unique = field.__zm_unique;
|
|
104
187
|
return parseObjectId(required, ref, unique);
|
|
105
188
|
}
|
|
106
|
-
if (
|
|
189
|
+
if (zmAssert.uuid(field)) {
|
|
107
190
|
const unique = field.__zm_unique;
|
|
108
191
|
return parseUUID(required, unique);
|
|
109
192
|
}
|
|
110
|
-
if (field
|
|
193
|
+
if (zmAssert.object(field)) {
|
|
111
194
|
return parseObject(field);
|
|
112
195
|
}
|
|
113
|
-
if (field
|
|
196
|
+
if (zmAssert.number(field)) {
|
|
114
197
|
const isUnique = field.__zm_unique ?? false;
|
|
115
198
|
return parseNumber(field, required, def, isUnique, refinement);
|
|
116
199
|
}
|
|
117
|
-
if (field
|
|
200
|
+
if (zmAssert.string(field)) {
|
|
118
201
|
const isUnique = field.__zm_unique ?? false;
|
|
119
202
|
return parseString(field, required, def, isUnique, refinement);
|
|
120
203
|
}
|
|
121
|
-
if (field
|
|
204
|
+
if (zmAssert.enumerable(field)) {
|
|
122
205
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
123
206
|
}
|
|
124
|
-
if (
|
|
207
|
+
if (zmAssert.boolean(field)) {
|
|
125
208
|
return parseBoolean(required, def);
|
|
126
209
|
}
|
|
127
|
-
if (field
|
|
210
|
+
if (zmAssert.date(field)) {
|
|
128
211
|
const isUnique = field.__zm_unique ?? false;
|
|
129
212
|
return parseDate(required, def, refinement, isUnique);
|
|
130
213
|
}
|
|
131
|
-
if (field
|
|
214
|
+
if (zmAssert.array(field)) {
|
|
132
215
|
return parseArray(required, field.element, def);
|
|
133
216
|
}
|
|
134
|
-
if (field
|
|
217
|
+
if (zmAssert.def(field)) {
|
|
135
218
|
return parseField(field._def.innerType, required, field._def.defaultValue());
|
|
136
219
|
}
|
|
137
|
-
if (field
|
|
220
|
+
if (zmAssert.optional(field)) {
|
|
138
221
|
return parseField(field._def.innerType, false, void 0);
|
|
139
222
|
}
|
|
140
|
-
if (field
|
|
223
|
+
if (zmAssert.nullable(field)) {
|
|
141
224
|
return parseField(field._def.innerType, false, def || null);
|
|
142
225
|
}
|
|
143
|
-
if (field
|
|
226
|
+
if (zmAssert.union(field)) {
|
|
144
227
|
return parseField(field._def.options[0]);
|
|
145
228
|
}
|
|
146
|
-
if (
|
|
229
|
+
if (zmAssert.any(field)) {
|
|
147
230
|
return parseMixed(required, def);
|
|
148
231
|
}
|
|
149
|
-
if (field
|
|
232
|
+
if (zmAssert.mapOrRecord(field)) {
|
|
150
233
|
return parseMap(required, field.keySchema, def);
|
|
151
234
|
}
|
|
152
|
-
if (field
|
|
235
|
+
if (zmAssert.effect(field)) {
|
|
153
236
|
const effect = field._def.effect;
|
|
154
237
|
if (effect.type === "refinement") {
|
|
155
238
|
const validation = effect.__zm_validation;
|
|
@@ -248,13 +331,17 @@ function parseMap(required = true, key, def) {
|
|
|
248
331
|
__name(parseMap, "parseMap");
|
|
249
332
|
function typeConstructor(t) {
|
|
250
333
|
switch (true) {
|
|
251
|
-
case t
|
|
334
|
+
case zmAssert.string(t):
|
|
252
335
|
return String;
|
|
253
|
-
case t
|
|
336
|
+
case zmAssert.enumerable(t):
|
|
254
337
|
return String;
|
|
255
|
-
case t
|
|
338
|
+
case zmAssert.uuid(t):
|
|
339
|
+
return SchemaTypes.UUID;
|
|
340
|
+
case zmAssert.objectId(t):
|
|
341
|
+
return SchemaTypes.ObjectId;
|
|
342
|
+
case zmAssert.number(t):
|
|
256
343
|
return Number;
|
|
257
|
-
case t
|
|
344
|
+
case zmAssert.date(t):
|
|
258
345
|
return Date;
|
|
259
346
|
default:
|
|
260
347
|
return void 0;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport {\n ZodArray,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n type ZodRawShape,\n ZodRecord,\n ZodString,\n type ZodType,\n ZodUnion,\n type z,\n} from \"zod\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const schema = zodSchema(zDoc);\n * const userModel = model('User', schema);\n */\nexport function zodSchema<T extends ZodRawShape>(\n schema: ZodObject<T>,\n options?: SchemaOptions<any>, // TODO: Fix any\n): Schema<z.infer<typeof schema>> {\n const definition = parseObject(schema);\n return new Schema<z.infer<typeof schema>>(definition, options);\n}\n\n/**\n * Converts a Zod schema to a raw Mongoose schema object\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';\n * import { model, Schema } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n const field_type = field.constructor.name;\n\n if (\"__zm_type\" in field && field.__zm_type === \"ObjectId\") {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (\"__zm_type\" in field && field.__zm_type === \"UUID\") {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (field instanceof ZodObject) {\n return parseObject(field);\n }\n\n if (field instanceof ZodNumber) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>,\n );\n }\n\n if (field instanceof ZodString) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>,\n );\n }\n\n if (field instanceof ZodEnum) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (field_type === \"ZodBoolean\") {\n return parseBoolean(required, def as boolean);\n }\n\n if (field instanceof ZodDate) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n );\n }\n\n if (field instanceof ZodArray) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never,\n );\n }\n\n if (field instanceof ZodDefault) {\n return parseField(field._def.innerType, required, field._def.defaultValue());\n }\n\n if (field instanceof ZodOptional) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (field instanceof ZodNullable) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (field instanceof ZodUnion) {\n return parseField(field._def.options[0]);\n }\n\n if (field_type === \"ZodAny\") {\n return parseMixed(required, def);\n }\n\n if (field instanceof ZodMap || field instanceof ZodRecord) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >,\n );\n }\n\n if (field instanceof ZodEffects) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>,\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>,\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case t instanceof ZodString:\n return String;\n case t instanceof ZodEnum:\n return String;\n case t instanceof ZodNumber:\n return Number;\n case t instanceof ZodDate:\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["Schema","SchemaTypes","ZodArray","ZodDate","ZodDefault","ZodEffects","ZodEnum","ZodMap","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodRecord","ZodString","ZodUnion","Types","isValidObjectId","z","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","ZodObject","f","parseField","Error","constructor","required","def","refinement","field_type","name","__zm_type","ref","__zm_ref","unique","__zm_unique","parseObjectId","parseUUID","ZodNumber","isUnique","parseNumber","ZodString","parseString","ZodEnum","parseEnum","keys","Values","parseBoolean","ZodDate","parseDate","ZodArray","parseArray","element","ZodDefault","_def","innerType","defaultValue","ZodOptional","undefined","ZodNullable","ZodUnion","parseMixed","ZodMap","ZodRecord","parseMap","keySchema","ZodEffects","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/helpers.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport type {\n ZodNumber,\n ZodObject,\n ZodRawShape,\n ZodString,\n ZodType,\n z,\n} from \"zod\";\nimport { zmAssert } from \"./helpers.js\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const schema = zodSchema(zDoc);\n * const userModel = model('User', schema);\n */\nexport function zodSchema<T extends ZodRawShape>(\n schema: ZodObject<T>,\n options?: SchemaOptions<any> // TODO: Fix any\n): Schema<z.infer<typeof schema>> {\n const definition = parseObject(schema);\n return new Schema<z.infer<typeof schema>>(definition, options);\n}\n\n/**\n * Converts a Zod schema to a raw Mongoose schema object\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';\n * import { model, Schema } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(\n schema: ZodObject<T>\n): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (zmAssert.object(field)) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>\n): zm.mField | null {\n if (zmAssert.objectId(field)) {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (zmAssert.uuid(field)) {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (zmAssert.object(field)) {\n return parseObject(field);\n }\n\n if (zmAssert.number(field)) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>\n );\n }\n\n if (zmAssert.string(field)) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>\n );\n }\n\n if (zmAssert.enumerable(field)) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (zmAssert.boolean(field)) {\n return parseBoolean(required, def as boolean);\n }\n\n if (zmAssert.date(field)) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique\n );\n }\n\n if (zmAssert.array(field)) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never\n );\n }\n\n if (zmAssert.def(field)) {\n return parseField(\n field._def.innerType,\n required,\n field._def.defaultValue()\n );\n }\n\n if (zmAssert.optional(field)) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (zmAssert.nullable(field)) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (zmAssert.union(field)) {\n return parseField(field._def.options[0]);\n }\n\n if (zmAssert.any(field)) {\n return parseMixed(required, def);\n }\n\n if (zmAssert.mapOrRecord(field)) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >\n );\n }\n\n if (zmAssert.effect(field)) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(\n values: string[],\n required = true,\n def?: string\n): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(\n required = true,\n ref?: string,\n unique = false\n): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\nfunction parseArray<T>(\n // biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\n required = true,\n element: ZodType<T>,\n def?: T[]\n): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency with other functions\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case zmAssert.string(t):\n return String;\n case zmAssert.enumerable(t):\n return String;\n case zmAssert.uuid(t):\n return SchemaTypes.UUID;\n case zmAssert.objectId(t):\n return SchemaTypes.ObjectId;\n case zmAssert.number(t):\n return Number;\n case zmAssert.date(t):\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import type {\n ZodAny,\n ZodArray,\n ZodBoolean,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n ZodRecord,\n ZodString,\n ZodType,\n ZodUnion,\n} from \"zod\";\n\nexport namespace zmAssert {\n export function string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n }\n\n export function number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n }\n\n export function object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n }\n\n export function array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n }\n\n export function boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n }\n\n export function enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n }\n\n export function date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n }\n\n export function objectId(f: ZodType<any>): f is ZodType<string> {\n return \"__zm_type\" in f && f.__zm_type === \"ObjectId\";\n }\n\n export function uuid(f: ZodType<any>): f is ZodType<string> {\n return \"__zm_type\" in f && f.__zm_type === \"UUID\";\n }\n\n export function def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n }\n\n export function optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n }\n\n export function nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n }\n\n export function union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n }\n\n export function any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n }\n\n export function mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n }\n\n export function effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n }\n}\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["Schema","SchemaTypes","zmAssert","string","f","constructor","name","number","object","array","boolean","enumerable","date","objectId","__zm_type","uuid","def","optional","nullable","union","any","mapOrRecord","effect","Types","isValidObjectId","z","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","zmAssert","f","parseField","Error","constructor","required","def","refinement","objectId","ref","__zm_ref","unique","__zm_unique","parseObjectId","uuid","parseUUID","number","isUnique","parseNumber","string","parseString","enumerable","parseEnum","keys","Values","boolean","parseBoolean","date","parseDate","array","parseArray","element","_def","innerType","defaultValue","optional","undefined","nullable","union","any","parseMixed","mapOrRecord","parseMap","keySchema","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|