@zodyac/zod-mongoose 2.3.1 → 2.3.2
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 +2 -0
- package/dist/index.cjs +47 -57
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +63 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +47 -59
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -33,86 +32,70 @@ var import_mongoose2 = require("mongoose");
|
|
|
33
32
|
|
|
34
33
|
// src/helpers.ts
|
|
35
34
|
var zmAssert;
|
|
36
|
-
(
|
|
35
|
+
((zmAssert2) => {
|
|
37
36
|
function string(f) {
|
|
38
37
|
return f.constructor.name === "ZodString";
|
|
39
38
|
}
|
|
40
|
-
__name(string, "string");
|
|
41
39
|
zmAssert2.string = string;
|
|
42
40
|
function number(f) {
|
|
43
41
|
return f.constructor.name === "ZodNumber";
|
|
44
42
|
}
|
|
45
|
-
__name(number, "number");
|
|
46
43
|
zmAssert2.number = number;
|
|
47
44
|
function object(f) {
|
|
48
45
|
return f.constructor.name === "ZodObject";
|
|
49
46
|
}
|
|
50
|
-
__name(object, "object");
|
|
51
47
|
zmAssert2.object = object;
|
|
52
48
|
function array(f) {
|
|
53
49
|
return f.constructor.name === "ZodArray";
|
|
54
50
|
}
|
|
55
|
-
__name(array, "array");
|
|
56
51
|
zmAssert2.array = array;
|
|
57
52
|
function boolean(f) {
|
|
58
53
|
return f.constructor.name === "ZodBoolean";
|
|
59
54
|
}
|
|
60
|
-
__name(boolean, "boolean");
|
|
61
55
|
zmAssert2.boolean = boolean;
|
|
62
56
|
function enumerable(f) {
|
|
63
57
|
return f.constructor.name === "ZodEnum";
|
|
64
58
|
}
|
|
65
|
-
__name(enumerable, "enumerable");
|
|
66
59
|
zmAssert2.enumerable = enumerable;
|
|
67
60
|
function date(f) {
|
|
68
61
|
return f.constructor.name === "ZodDate";
|
|
69
62
|
}
|
|
70
|
-
__name(date, "date");
|
|
71
63
|
zmAssert2.date = date;
|
|
72
64
|
function objectId(f) {
|
|
73
65
|
return "__zm_type" in f && f.__zm_type === "ObjectId";
|
|
74
66
|
}
|
|
75
|
-
__name(objectId, "objectId");
|
|
76
67
|
zmAssert2.objectId = objectId;
|
|
77
68
|
function uuid(f) {
|
|
78
69
|
return "__zm_type" in f && f.__zm_type === "UUID";
|
|
79
70
|
}
|
|
80
|
-
__name(uuid, "uuid");
|
|
81
71
|
zmAssert2.uuid = uuid;
|
|
82
72
|
function def(f) {
|
|
83
73
|
return f.constructor.name === "ZodDefault";
|
|
84
74
|
}
|
|
85
|
-
__name(def, "def");
|
|
86
75
|
zmAssert2.def = def;
|
|
87
76
|
function optional(f) {
|
|
88
77
|
return f.constructor.name === "ZodOptional";
|
|
89
78
|
}
|
|
90
|
-
__name(optional, "optional");
|
|
91
79
|
zmAssert2.optional = optional;
|
|
92
80
|
function nullable(f) {
|
|
93
81
|
return f.constructor.name === "ZodNullable";
|
|
94
82
|
}
|
|
95
|
-
__name(nullable, "nullable");
|
|
96
83
|
zmAssert2.nullable = nullable;
|
|
97
84
|
function union(f) {
|
|
98
85
|
return f.constructor.name === "ZodUnion";
|
|
99
86
|
}
|
|
100
|
-
__name(union, "union");
|
|
101
87
|
zmAssert2.union = union;
|
|
102
88
|
function any(f) {
|
|
103
89
|
return f.constructor.name === "ZodAny";
|
|
104
90
|
}
|
|
105
|
-
__name(any, "any");
|
|
106
91
|
zmAssert2.any = any;
|
|
107
92
|
function mapOrRecord(f) {
|
|
108
93
|
return f.constructor.name === "ZodMap" || f.constructor.name === "ZodRecord";
|
|
109
94
|
}
|
|
110
|
-
__name(mapOrRecord, "mapOrRecord");
|
|
111
95
|
zmAssert2.mapOrRecord = mapOrRecord;
|
|
112
96
|
function effect(f) {
|
|
113
97
|
return f.constructor.name === "ZodEffects";
|
|
114
98
|
}
|
|
115
|
-
__name(effect, "effect");
|
|
116
99
|
zmAssert2.effect = effect;
|
|
117
100
|
})(zmAssert || (zmAssert = {}));
|
|
118
101
|
|
|
@@ -148,13 +131,10 @@ function extendZod(z_0) {
|
|
|
148
131
|
return this;
|
|
149
132
|
};
|
|
150
133
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
156
|
-
}, "createId");
|
|
157
|
-
var zId = /* @__PURE__ */ __name((ref) => {
|
|
134
|
+
var createId = () => {
|
|
135
|
+
return import_zod.z.string().refine((v) => (0, import_mongoose.isValidObjectId)(v), { message: "Invalid ObjectId" }).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
136
|
+
};
|
|
137
|
+
var zId = (ref) => {
|
|
158
138
|
const output = createId();
|
|
159
139
|
output.__zm_type = "ObjectId";
|
|
160
140
|
output.__zm_ref = ref;
|
|
@@ -167,13 +147,11 @@ var zId = /* @__PURE__ */ __name((ref) => {
|
|
|
167
147
|
return this;
|
|
168
148
|
};
|
|
169
149
|
return output;
|
|
170
|
-
}
|
|
171
|
-
var createUUID =
|
|
172
|
-
return import_zod.z.string().uuid({
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}, "createUUID");
|
|
176
|
-
var zUUID = /* @__PURE__ */ __name(() => {
|
|
150
|
+
};
|
|
151
|
+
var createUUID = () => {
|
|
152
|
+
return import_zod.z.string().uuid({ message: "Invalid UUID" }).or(import_zod.z.instanceof(import_mongoose.Types.UUID));
|
|
153
|
+
};
|
|
154
|
+
var zUUID = () => {
|
|
177
155
|
const output = createUUID();
|
|
178
156
|
output.__zm_type = "UUID";
|
|
179
157
|
output.unique = function(val = true) {
|
|
@@ -181,18 +159,16 @@ var zUUID = /* @__PURE__ */ __name(() => {
|
|
|
181
159
|
return this;
|
|
182
160
|
};
|
|
183
161
|
return output;
|
|
184
|
-
}
|
|
162
|
+
};
|
|
185
163
|
|
|
186
164
|
// src/index.ts
|
|
187
165
|
function zodSchema(schema, options) {
|
|
188
166
|
const definition = parseObject(schema);
|
|
189
167
|
return new import_mongoose2.Schema(definition, options);
|
|
190
168
|
}
|
|
191
|
-
__name(zodSchema, "zodSchema");
|
|
192
169
|
function zodSchemaRaw(schema) {
|
|
193
170
|
return parseObject(schema);
|
|
194
171
|
}
|
|
195
|
-
__name(zodSchemaRaw, "zodSchemaRaw");
|
|
196
172
|
function parseObject(obj) {
|
|
197
173
|
const object = {};
|
|
198
174
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
@@ -206,7 +182,6 @@ function parseObject(obj) {
|
|
|
206
182
|
}
|
|
207
183
|
return object;
|
|
208
184
|
}
|
|
209
|
-
__name(parseObject, "parseObject");
|
|
210
185
|
function parseField(field, required = true, def, refinement) {
|
|
211
186
|
if (zmAssert.objectId(field)) {
|
|
212
187
|
const ref = field.__zm_ref;
|
|
@@ -222,11 +197,23 @@ function parseField(field, required = true, def, refinement) {
|
|
|
222
197
|
}
|
|
223
198
|
if (zmAssert.number(field)) {
|
|
224
199
|
const isUnique = field.__zm_unique ?? false;
|
|
225
|
-
return parseNumber(
|
|
200
|
+
return parseNumber(
|
|
201
|
+
field,
|
|
202
|
+
required,
|
|
203
|
+
def,
|
|
204
|
+
isUnique,
|
|
205
|
+
refinement
|
|
206
|
+
);
|
|
226
207
|
}
|
|
227
208
|
if (zmAssert.string(field)) {
|
|
228
209
|
const isUnique = field.__zm_unique ?? false;
|
|
229
|
-
return parseString(
|
|
210
|
+
return parseString(
|
|
211
|
+
field,
|
|
212
|
+
required,
|
|
213
|
+
def,
|
|
214
|
+
isUnique,
|
|
215
|
+
refinement
|
|
216
|
+
);
|
|
230
217
|
}
|
|
231
218
|
if (zmAssert.enumerable(field)) {
|
|
232
219
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
@@ -236,13 +223,26 @@ function parseField(field, required = true, def, refinement) {
|
|
|
236
223
|
}
|
|
237
224
|
if (zmAssert.date(field)) {
|
|
238
225
|
const isUnique = field.__zm_unique ?? false;
|
|
239
|
-
return parseDate(
|
|
226
|
+
return parseDate(
|
|
227
|
+
required,
|
|
228
|
+
def,
|
|
229
|
+
refinement,
|
|
230
|
+
isUnique
|
|
231
|
+
);
|
|
240
232
|
}
|
|
241
233
|
if (zmAssert.array(field)) {
|
|
242
|
-
return parseArray(
|
|
234
|
+
return parseArray(
|
|
235
|
+
required,
|
|
236
|
+
field.element,
|
|
237
|
+
def
|
|
238
|
+
);
|
|
243
239
|
}
|
|
244
240
|
if (zmAssert.def(field)) {
|
|
245
|
-
return parseField(
|
|
241
|
+
return parseField(
|
|
242
|
+
field._def.innerType,
|
|
243
|
+
required,
|
|
244
|
+
field._def.defaultValue()
|
|
245
|
+
);
|
|
246
246
|
}
|
|
247
247
|
if (zmAssert.optional(field)) {
|
|
248
248
|
return parseField(field._def.innerType, false, void 0);
|
|
@@ -257,7 +257,11 @@ function parseField(field, required = true, def, refinement) {
|
|
|
257
257
|
return parseMixed(required, def);
|
|
258
258
|
}
|
|
259
259
|
if (zmAssert.mapOrRecord(field)) {
|
|
260
|
-
return parseMap(
|
|
260
|
+
return parseMap(
|
|
261
|
+
required,
|
|
262
|
+
field.keySchema,
|
|
263
|
+
def
|
|
264
|
+
);
|
|
261
265
|
}
|
|
262
266
|
if (zmAssert.effect(field)) {
|
|
263
267
|
const effect = field._def.effect;
|
|
@@ -268,7 +272,6 @@ function parseField(field, required = true, def, refinement) {
|
|
|
268
272
|
}
|
|
269
273
|
return null;
|
|
270
274
|
}
|
|
271
|
-
__name(parseField, "parseField");
|
|
272
275
|
function parseNumber(field, required = true, def, unique = false, validate) {
|
|
273
276
|
const output = {
|
|
274
277
|
type: Number,
|
|
@@ -281,7 +284,6 @@ function parseNumber(field, required = true, def, unique = false, validate) {
|
|
|
281
284
|
if (validate) output.validate = validate;
|
|
282
285
|
return output;
|
|
283
286
|
}
|
|
284
|
-
__name(parseNumber, "parseNumber");
|
|
285
287
|
function parseString(field, required = true, def, unique = false, validate) {
|
|
286
288
|
const output = {
|
|
287
289
|
type: String,
|
|
@@ -294,7 +296,6 @@ function parseString(field, required = true, def, unique = false, validate) {
|
|
|
294
296
|
if (validate) output.validate = validate;
|
|
295
297
|
return output;
|
|
296
298
|
}
|
|
297
|
-
__name(parseString, "parseString");
|
|
298
299
|
function parseEnum(values, required = true, def) {
|
|
299
300
|
return {
|
|
300
301
|
type: String,
|
|
@@ -304,7 +305,6 @@ function parseEnum(values, required = true, def) {
|
|
|
304
305
|
required
|
|
305
306
|
};
|
|
306
307
|
}
|
|
307
|
-
__name(parseEnum, "parseEnum");
|
|
308
308
|
function parseBoolean(required = true, def) {
|
|
309
309
|
return {
|
|
310
310
|
type: Boolean,
|
|
@@ -312,7 +312,6 @@ function parseBoolean(required = true, def) {
|
|
|
312
312
|
required
|
|
313
313
|
};
|
|
314
314
|
}
|
|
315
|
-
__name(parseBoolean, "parseBoolean");
|
|
316
315
|
function parseDate(required = true, def, validate, unique = false) {
|
|
317
316
|
const output = {
|
|
318
317
|
type: Date,
|
|
@@ -323,7 +322,6 @@ function parseDate(required = true, def, validate, unique = false) {
|
|
|
323
322
|
if (validate) output.validate = validate;
|
|
324
323
|
return output;
|
|
325
324
|
}
|
|
326
|
-
__name(parseDate, "parseDate");
|
|
327
325
|
function parseObjectId(required = true, ref, unique = false) {
|
|
328
326
|
const output = {
|
|
329
327
|
type: import_mongoose2.SchemaTypes.ObjectId,
|
|
@@ -333,19 +331,15 @@ function parseObjectId(required = true, ref, unique = false) {
|
|
|
333
331
|
if (ref) output.ref = ref;
|
|
334
332
|
return output;
|
|
335
333
|
}
|
|
336
|
-
__name(parseObjectId, "parseObjectId");
|
|
337
334
|
function parseArray(required = true, element, def) {
|
|
338
335
|
const innerType = parseField(element);
|
|
339
336
|
if (!innerType) throw new Error("Unsupported array type");
|
|
340
337
|
return {
|
|
341
|
-
type: [
|
|
342
|
-
innerType
|
|
343
|
-
],
|
|
338
|
+
type: [innerType],
|
|
344
339
|
default: def,
|
|
345
340
|
required
|
|
346
341
|
};
|
|
347
342
|
}
|
|
348
|
-
__name(parseArray, "parseArray");
|
|
349
343
|
function parseMap(required = true, key, def) {
|
|
350
344
|
const pointer = typeConstructor(key);
|
|
351
345
|
return {
|
|
@@ -355,7 +349,6 @@ function parseMap(required = true, key, def) {
|
|
|
355
349
|
required
|
|
356
350
|
};
|
|
357
351
|
}
|
|
358
|
-
__name(parseMap, "parseMap");
|
|
359
352
|
function typeConstructor(t) {
|
|
360
353
|
switch (true) {
|
|
361
354
|
case zmAssert.string(t):
|
|
@@ -374,7 +367,6 @@ function typeConstructor(t) {
|
|
|
374
367
|
return void 0;
|
|
375
368
|
}
|
|
376
369
|
}
|
|
377
|
-
__name(typeConstructor, "typeConstructor");
|
|
378
370
|
function parseUUID(required = true, unique = false) {
|
|
379
371
|
return {
|
|
380
372
|
type: import_mongoose2.SchemaTypes.UUID,
|
|
@@ -382,7 +374,6 @@ function parseUUID(required = true, unique = false) {
|
|
|
382
374
|
unique
|
|
383
375
|
};
|
|
384
376
|
}
|
|
385
|
-
__name(parseUUID, "parseUUID");
|
|
386
377
|
function parseMixed(required = true, def) {
|
|
387
378
|
return {
|
|
388
379
|
type: import_mongoose2.SchemaTypes.Mixed,
|
|
@@ -390,7 +381,6 @@ function parseMixed(required = true, def) {
|
|
|
390
381
|
required
|
|
391
382
|
};
|
|
392
383
|
}
|
|
393
|
-
__name(parseMixed, "parseMixed");
|
|
394
384
|
var src_default = zodSchema;
|
|
395
385
|
// Annotate the CommonJS export names for ESM import in node:
|
|
396
386
|
0 && (module.exports = {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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","ref"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -105,7 +105,70 @@ type TzmUUID = ReturnType<typeof createUUID> & {
|
|
|
105
105
|
declare const createUUID: () => z.ZodUnion<[z.ZodString, z.ZodType<Types.UUID, z.ZodTypeDef, Types.UUID>]>;
|
|
106
106
|
declare const zUUID: () => TzmUUID;
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Converts a Zod schema to a Mongoose schema
|
|
110
|
+
* @param schema zod schema to parse
|
|
111
|
+
* @returns mongoose schema
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* import { extendZod, zodSchema } from '@zodyac/zod-mongoose';
|
|
115
|
+
* import { model } from 'mongoose';
|
|
116
|
+
* import { z } from 'zod';
|
|
117
|
+
*
|
|
118
|
+
* extendZod(z);
|
|
119
|
+
*
|
|
120
|
+
* const zUser = z.object({
|
|
121
|
+
* name: z.string().min(3).max(255),
|
|
122
|
+
* age: z.number().min(18).max(100),
|
|
123
|
+
* active: z.boolean().default(false),
|
|
124
|
+
* access: z.enum(['admin', 'user']).default('user'),
|
|
125
|
+
* companyId: zId('Company'),
|
|
126
|
+
* address: z.object({
|
|
127
|
+
* street: z.string(),
|
|
128
|
+
* city: z.string(),
|
|
129
|
+
* state: z.enum(['CA', 'NY', 'TX']),
|
|
130
|
+
* }),
|
|
131
|
+
* tags: z.array(z.string()),
|
|
132
|
+
* createdAt: z.date(),
|
|
133
|
+
* updatedAt: z.date(),
|
|
134
|
+
* });
|
|
135
|
+
*
|
|
136
|
+
* const schema = zodSchema(zDoc);
|
|
137
|
+
* const userModel = model('User', schema);
|
|
138
|
+
*/
|
|
108
139
|
declare function zodSchema<T extends ZodRawShape>(schema: ZodObject<T>, options?: SchemaOptions<any>): Schema<z.infer<typeof schema>>;
|
|
140
|
+
/**
|
|
141
|
+
* Converts a Zod schema to a raw Mongoose schema object
|
|
142
|
+
* @param schema zod schema to parse
|
|
143
|
+
* @returns mongoose schema
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';
|
|
147
|
+
* import { model, Schema } from 'mongoose';
|
|
148
|
+
* import { z } from 'zod';
|
|
149
|
+
*
|
|
150
|
+
* extendZod(z);
|
|
151
|
+
*
|
|
152
|
+
* const zUser = z.object({
|
|
153
|
+
* name: z.string().min(3).max(255),
|
|
154
|
+
* age: z.number().min(18).max(100),
|
|
155
|
+
* active: z.boolean().default(false),
|
|
156
|
+
* access: z.enum(['admin', 'user']).default('user'),
|
|
157
|
+
* companyId: zId('Company'),
|
|
158
|
+
* address: z.object({
|
|
159
|
+
* street: z.string(),
|
|
160
|
+
* city: z.string(),
|
|
161
|
+
* state: z.enum(['CA', 'NY', 'TX']),
|
|
162
|
+
* }),
|
|
163
|
+
* tags: z.array(z.string()),
|
|
164
|
+
* createdAt: z.date(),
|
|
165
|
+
* updatedAt: z.date(),
|
|
166
|
+
* });
|
|
167
|
+
*
|
|
168
|
+
* const rawSchema = zodSchemaRaw(zDoc);
|
|
169
|
+
* const schema = new Schema(rawSchema);
|
|
170
|
+
* const userModel = model('User', schema);
|
|
171
|
+
*/
|
|
109
172
|
declare function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T>;
|
|
110
173
|
|
|
111
174
|
export { type TzmId, type TzmUUID, zodSchema as default, extendZod, zId, zUUID, zodSchema, zodSchemaRaw };
|
package/dist/index.d.ts
CHANGED
|
@@ -105,7 +105,70 @@ type TzmUUID = ReturnType<typeof createUUID> & {
|
|
|
105
105
|
declare const createUUID: () => z.ZodUnion<[z.ZodString, z.ZodType<Types.UUID, z.ZodTypeDef, Types.UUID>]>;
|
|
106
106
|
declare const zUUID: () => TzmUUID;
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Converts a Zod schema to a Mongoose schema
|
|
110
|
+
* @param schema zod schema to parse
|
|
111
|
+
* @returns mongoose schema
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* import { extendZod, zodSchema } from '@zodyac/zod-mongoose';
|
|
115
|
+
* import { model } from 'mongoose';
|
|
116
|
+
* import { z } from 'zod';
|
|
117
|
+
*
|
|
118
|
+
* extendZod(z);
|
|
119
|
+
*
|
|
120
|
+
* const zUser = z.object({
|
|
121
|
+
* name: z.string().min(3).max(255),
|
|
122
|
+
* age: z.number().min(18).max(100),
|
|
123
|
+
* active: z.boolean().default(false),
|
|
124
|
+
* access: z.enum(['admin', 'user']).default('user'),
|
|
125
|
+
* companyId: zId('Company'),
|
|
126
|
+
* address: z.object({
|
|
127
|
+
* street: z.string(),
|
|
128
|
+
* city: z.string(),
|
|
129
|
+
* state: z.enum(['CA', 'NY', 'TX']),
|
|
130
|
+
* }),
|
|
131
|
+
* tags: z.array(z.string()),
|
|
132
|
+
* createdAt: z.date(),
|
|
133
|
+
* updatedAt: z.date(),
|
|
134
|
+
* });
|
|
135
|
+
*
|
|
136
|
+
* const schema = zodSchema(zDoc);
|
|
137
|
+
* const userModel = model('User', schema);
|
|
138
|
+
*/
|
|
108
139
|
declare function zodSchema<T extends ZodRawShape>(schema: ZodObject<T>, options?: SchemaOptions<any>): Schema<z.infer<typeof schema>>;
|
|
140
|
+
/**
|
|
141
|
+
* Converts a Zod schema to a raw Mongoose schema object
|
|
142
|
+
* @param schema zod schema to parse
|
|
143
|
+
* @returns mongoose schema
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';
|
|
147
|
+
* import { model, Schema } from 'mongoose';
|
|
148
|
+
* import { z } from 'zod';
|
|
149
|
+
*
|
|
150
|
+
* extendZod(z);
|
|
151
|
+
*
|
|
152
|
+
* const zUser = z.object({
|
|
153
|
+
* name: z.string().min(3).max(255),
|
|
154
|
+
* age: z.number().min(18).max(100),
|
|
155
|
+
* active: z.boolean().default(false),
|
|
156
|
+
* access: z.enum(['admin', 'user']).default('user'),
|
|
157
|
+
* companyId: zId('Company'),
|
|
158
|
+
* address: z.object({
|
|
159
|
+
* street: z.string(),
|
|
160
|
+
* city: z.string(),
|
|
161
|
+
* state: z.enum(['CA', 'NY', 'TX']),
|
|
162
|
+
* }),
|
|
163
|
+
* tags: z.array(z.string()),
|
|
164
|
+
* createdAt: z.date(),
|
|
165
|
+
* updatedAt: z.date(),
|
|
166
|
+
* });
|
|
167
|
+
*
|
|
168
|
+
* const rawSchema = zodSchemaRaw(zDoc);
|
|
169
|
+
* const schema = new Schema(rawSchema);
|
|
170
|
+
* const userModel = model('User', schema);
|
|
171
|
+
*/
|
|
109
172
|
declare function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T>;
|
|
110
173
|
|
|
111
174
|
export { type TzmId, type TzmUUID, zodSchema as default, extendZod, zId, zUUID, zodSchema, zodSchemaRaw };
|
package/dist/index.js
CHANGED
|
@@ -1,91 +1,72 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/index.ts
|
|
5
2
|
import { Schema, SchemaTypes } from "mongoose";
|
|
6
3
|
|
|
7
4
|
// src/helpers.ts
|
|
8
5
|
var zmAssert;
|
|
9
|
-
(
|
|
6
|
+
((zmAssert2) => {
|
|
10
7
|
function string(f) {
|
|
11
8
|
return f.constructor.name === "ZodString";
|
|
12
9
|
}
|
|
13
|
-
__name(string, "string");
|
|
14
10
|
zmAssert2.string = string;
|
|
15
11
|
function number(f) {
|
|
16
12
|
return f.constructor.name === "ZodNumber";
|
|
17
13
|
}
|
|
18
|
-
__name(number, "number");
|
|
19
14
|
zmAssert2.number = number;
|
|
20
15
|
function object(f) {
|
|
21
16
|
return f.constructor.name === "ZodObject";
|
|
22
17
|
}
|
|
23
|
-
__name(object, "object");
|
|
24
18
|
zmAssert2.object = object;
|
|
25
19
|
function array(f) {
|
|
26
20
|
return f.constructor.name === "ZodArray";
|
|
27
21
|
}
|
|
28
|
-
__name(array, "array");
|
|
29
22
|
zmAssert2.array = array;
|
|
30
23
|
function boolean(f) {
|
|
31
24
|
return f.constructor.name === "ZodBoolean";
|
|
32
25
|
}
|
|
33
|
-
__name(boolean, "boolean");
|
|
34
26
|
zmAssert2.boolean = boolean;
|
|
35
27
|
function enumerable(f) {
|
|
36
28
|
return f.constructor.name === "ZodEnum";
|
|
37
29
|
}
|
|
38
|
-
__name(enumerable, "enumerable");
|
|
39
30
|
zmAssert2.enumerable = enumerable;
|
|
40
31
|
function date(f) {
|
|
41
32
|
return f.constructor.name === "ZodDate";
|
|
42
33
|
}
|
|
43
|
-
__name(date, "date");
|
|
44
34
|
zmAssert2.date = date;
|
|
45
35
|
function objectId(f) {
|
|
46
36
|
return "__zm_type" in f && f.__zm_type === "ObjectId";
|
|
47
37
|
}
|
|
48
|
-
__name(objectId, "objectId");
|
|
49
38
|
zmAssert2.objectId = objectId;
|
|
50
39
|
function uuid(f) {
|
|
51
40
|
return "__zm_type" in f && f.__zm_type === "UUID";
|
|
52
41
|
}
|
|
53
|
-
__name(uuid, "uuid");
|
|
54
42
|
zmAssert2.uuid = uuid;
|
|
55
43
|
function def(f) {
|
|
56
44
|
return f.constructor.name === "ZodDefault";
|
|
57
45
|
}
|
|
58
|
-
__name(def, "def");
|
|
59
46
|
zmAssert2.def = def;
|
|
60
47
|
function optional(f) {
|
|
61
48
|
return f.constructor.name === "ZodOptional";
|
|
62
49
|
}
|
|
63
|
-
__name(optional, "optional");
|
|
64
50
|
zmAssert2.optional = optional;
|
|
65
51
|
function nullable(f) {
|
|
66
52
|
return f.constructor.name === "ZodNullable";
|
|
67
53
|
}
|
|
68
|
-
__name(nullable, "nullable");
|
|
69
54
|
zmAssert2.nullable = nullable;
|
|
70
55
|
function union(f) {
|
|
71
56
|
return f.constructor.name === "ZodUnion";
|
|
72
57
|
}
|
|
73
|
-
__name(union, "union");
|
|
74
58
|
zmAssert2.union = union;
|
|
75
59
|
function any(f) {
|
|
76
60
|
return f.constructor.name === "ZodAny";
|
|
77
61
|
}
|
|
78
|
-
__name(any, "any");
|
|
79
62
|
zmAssert2.any = any;
|
|
80
63
|
function mapOrRecord(f) {
|
|
81
64
|
return f.constructor.name === "ZodMap" || f.constructor.name === "ZodRecord";
|
|
82
65
|
}
|
|
83
|
-
__name(mapOrRecord, "mapOrRecord");
|
|
84
66
|
zmAssert2.mapOrRecord = mapOrRecord;
|
|
85
67
|
function effect(f) {
|
|
86
68
|
return f.constructor.name === "ZodEffects";
|
|
87
69
|
}
|
|
88
|
-
__name(effect, "effect");
|
|
89
70
|
zmAssert2.effect = effect;
|
|
90
71
|
})(zmAssert || (zmAssert = {}));
|
|
91
72
|
|
|
@@ -121,13 +102,10 @@ function extendZod(z_0) {
|
|
|
121
102
|
return this;
|
|
122
103
|
};
|
|
123
104
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}).or(z.instanceof(Types.ObjectId));
|
|
129
|
-
}, "createId");
|
|
130
|
-
var zId = /* @__PURE__ */ __name((ref) => {
|
|
105
|
+
var createId = () => {
|
|
106
|
+
return z.string().refine((v) => isValidObjectId(v), { message: "Invalid ObjectId" }).or(z.instanceof(Types.ObjectId));
|
|
107
|
+
};
|
|
108
|
+
var zId = (ref) => {
|
|
131
109
|
const output = createId();
|
|
132
110
|
output.__zm_type = "ObjectId";
|
|
133
111
|
output.__zm_ref = ref;
|
|
@@ -140,13 +118,11 @@ var zId = /* @__PURE__ */ __name((ref) => {
|
|
|
140
118
|
return this;
|
|
141
119
|
};
|
|
142
120
|
return output;
|
|
143
|
-
}
|
|
144
|
-
var createUUID =
|
|
145
|
-
return z.string().uuid({
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}, "createUUID");
|
|
149
|
-
var zUUID = /* @__PURE__ */ __name(() => {
|
|
121
|
+
};
|
|
122
|
+
var createUUID = () => {
|
|
123
|
+
return z.string().uuid({ message: "Invalid UUID" }).or(z.instanceof(Types.UUID));
|
|
124
|
+
};
|
|
125
|
+
var zUUID = () => {
|
|
150
126
|
const output = createUUID();
|
|
151
127
|
output.__zm_type = "UUID";
|
|
152
128
|
output.unique = function(val = true) {
|
|
@@ -154,18 +130,16 @@ var zUUID = /* @__PURE__ */ __name(() => {
|
|
|
154
130
|
return this;
|
|
155
131
|
};
|
|
156
132
|
return output;
|
|
157
|
-
}
|
|
133
|
+
};
|
|
158
134
|
|
|
159
135
|
// src/index.ts
|
|
160
136
|
function zodSchema(schema, options) {
|
|
161
137
|
const definition = parseObject(schema);
|
|
162
138
|
return new Schema(definition, options);
|
|
163
139
|
}
|
|
164
|
-
__name(zodSchema, "zodSchema");
|
|
165
140
|
function zodSchemaRaw(schema) {
|
|
166
141
|
return parseObject(schema);
|
|
167
142
|
}
|
|
168
|
-
__name(zodSchemaRaw, "zodSchemaRaw");
|
|
169
143
|
function parseObject(obj) {
|
|
170
144
|
const object = {};
|
|
171
145
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
@@ -179,7 +153,6 @@ function parseObject(obj) {
|
|
|
179
153
|
}
|
|
180
154
|
return object;
|
|
181
155
|
}
|
|
182
|
-
__name(parseObject, "parseObject");
|
|
183
156
|
function parseField(field, required = true, def, refinement) {
|
|
184
157
|
if (zmAssert.objectId(field)) {
|
|
185
158
|
const ref = field.__zm_ref;
|
|
@@ -195,11 +168,23 @@ function parseField(field, required = true, def, refinement) {
|
|
|
195
168
|
}
|
|
196
169
|
if (zmAssert.number(field)) {
|
|
197
170
|
const isUnique = field.__zm_unique ?? false;
|
|
198
|
-
return parseNumber(
|
|
171
|
+
return parseNumber(
|
|
172
|
+
field,
|
|
173
|
+
required,
|
|
174
|
+
def,
|
|
175
|
+
isUnique,
|
|
176
|
+
refinement
|
|
177
|
+
);
|
|
199
178
|
}
|
|
200
179
|
if (zmAssert.string(field)) {
|
|
201
180
|
const isUnique = field.__zm_unique ?? false;
|
|
202
|
-
return parseString(
|
|
181
|
+
return parseString(
|
|
182
|
+
field,
|
|
183
|
+
required,
|
|
184
|
+
def,
|
|
185
|
+
isUnique,
|
|
186
|
+
refinement
|
|
187
|
+
);
|
|
203
188
|
}
|
|
204
189
|
if (zmAssert.enumerable(field)) {
|
|
205
190
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
@@ -209,13 +194,26 @@ function parseField(field, required = true, def, refinement) {
|
|
|
209
194
|
}
|
|
210
195
|
if (zmAssert.date(field)) {
|
|
211
196
|
const isUnique = field.__zm_unique ?? false;
|
|
212
|
-
return parseDate(
|
|
197
|
+
return parseDate(
|
|
198
|
+
required,
|
|
199
|
+
def,
|
|
200
|
+
refinement,
|
|
201
|
+
isUnique
|
|
202
|
+
);
|
|
213
203
|
}
|
|
214
204
|
if (zmAssert.array(field)) {
|
|
215
|
-
return parseArray(
|
|
205
|
+
return parseArray(
|
|
206
|
+
required,
|
|
207
|
+
field.element,
|
|
208
|
+
def
|
|
209
|
+
);
|
|
216
210
|
}
|
|
217
211
|
if (zmAssert.def(field)) {
|
|
218
|
-
return parseField(
|
|
212
|
+
return parseField(
|
|
213
|
+
field._def.innerType,
|
|
214
|
+
required,
|
|
215
|
+
field._def.defaultValue()
|
|
216
|
+
);
|
|
219
217
|
}
|
|
220
218
|
if (zmAssert.optional(field)) {
|
|
221
219
|
return parseField(field._def.innerType, false, void 0);
|
|
@@ -230,7 +228,11 @@ function parseField(field, required = true, def, refinement) {
|
|
|
230
228
|
return parseMixed(required, def);
|
|
231
229
|
}
|
|
232
230
|
if (zmAssert.mapOrRecord(field)) {
|
|
233
|
-
return parseMap(
|
|
231
|
+
return parseMap(
|
|
232
|
+
required,
|
|
233
|
+
field.keySchema,
|
|
234
|
+
def
|
|
235
|
+
);
|
|
234
236
|
}
|
|
235
237
|
if (zmAssert.effect(field)) {
|
|
236
238
|
const effect = field._def.effect;
|
|
@@ -241,7 +243,6 @@ function parseField(field, required = true, def, refinement) {
|
|
|
241
243
|
}
|
|
242
244
|
return null;
|
|
243
245
|
}
|
|
244
|
-
__name(parseField, "parseField");
|
|
245
246
|
function parseNumber(field, required = true, def, unique = false, validate) {
|
|
246
247
|
const output = {
|
|
247
248
|
type: Number,
|
|
@@ -254,7 +255,6 @@ function parseNumber(field, required = true, def, unique = false, validate) {
|
|
|
254
255
|
if (validate) output.validate = validate;
|
|
255
256
|
return output;
|
|
256
257
|
}
|
|
257
|
-
__name(parseNumber, "parseNumber");
|
|
258
258
|
function parseString(field, required = true, def, unique = false, validate) {
|
|
259
259
|
const output = {
|
|
260
260
|
type: String,
|
|
@@ -267,7 +267,6 @@ function parseString(field, required = true, def, unique = false, validate) {
|
|
|
267
267
|
if (validate) output.validate = validate;
|
|
268
268
|
return output;
|
|
269
269
|
}
|
|
270
|
-
__name(parseString, "parseString");
|
|
271
270
|
function parseEnum(values, required = true, def) {
|
|
272
271
|
return {
|
|
273
272
|
type: String,
|
|
@@ -277,7 +276,6 @@ function parseEnum(values, required = true, def) {
|
|
|
277
276
|
required
|
|
278
277
|
};
|
|
279
278
|
}
|
|
280
|
-
__name(parseEnum, "parseEnum");
|
|
281
279
|
function parseBoolean(required = true, def) {
|
|
282
280
|
return {
|
|
283
281
|
type: Boolean,
|
|
@@ -285,7 +283,6 @@ function parseBoolean(required = true, def) {
|
|
|
285
283
|
required
|
|
286
284
|
};
|
|
287
285
|
}
|
|
288
|
-
__name(parseBoolean, "parseBoolean");
|
|
289
286
|
function parseDate(required = true, def, validate, unique = false) {
|
|
290
287
|
const output = {
|
|
291
288
|
type: Date,
|
|
@@ -296,7 +293,6 @@ function parseDate(required = true, def, validate, unique = false) {
|
|
|
296
293
|
if (validate) output.validate = validate;
|
|
297
294
|
return output;
|
|
298
295
|
}
|
|
299
|
-
__name(parseDate, "parseDate");
|
|
300
296
|
function parseObjectId(required = true, ref, unique = false) {
|
|
301
297
|
const output = {
|
|
302
298
|
type: SchemaTypes.ObjectId,
|
|
@@ -306,19 +302,15 @@ function parseObjectId(required = true, ref, unique = false) {
|
|
|
306
302
|
if (ref) output.ref = ref;
|
|
307
303
|
return output;
|
|
308
304
|
}
|
|
309
|
-
__name(parseObjectId, "parseObjectId");
|
|
310
305
|
function parseArray(required = true, element, def) {
|
|
311
306
|
const innerType = parseField(element);
|
|
312
307
|
if (!innerType) throw new Error("Unsupported array type");
|
|
313
308
|
return {
|
|
314
|
-
type: [
|
|
315
|
-
innerType
|
|
316
|
-
],
|
|
309
|
+
type: [innerType],
|
|
317
310
|
default: def,
|
|
318
311
|
required
|
|
319
312
|
};
|
|
320
313
|
}
|
|
321
|
-
__name(parseArray, "parseArray");
|
|
322
314
|
function parseMap(required = true, key, def) {
|
|
323
315
|
const pointer = typeConstructor(key);
|
|
324
316
|
return {
|
|
@@ -328,7 +320,6 @@ function parseMap(required = true, key, def) {
|
|
|
328
320
|
required
|
|
329
321
|
};
|
|
330
322
|
}
|
|
331
|
-
__name(parseMap, "parseMap");
|
|
332
323
|
function typeConstructor(t) {
|
|
333
324
|
switch (true) {
|
|
334
325
|
case zmAssert.string(t):
|
|
@@ -347,7 +338,6 @@ function typeConstructor(t) {
|
|
|
347
338
|
return void 0;
|
|
348
339
|
}
|
|
349
340
|
}
|
|
350
|
-
__name(typeConstructor, "typeConstructor");
|
|
351
341
|
function parseUUID(required = true, unique = false) {
|
|
352
342
|
return {
|
|
353
343
|
type: SchemaTypes.UUID,
|
|
@@ -355,7 +345,6 @@ function parseUUID(required = true, unique = false) {
|
|
|
355
345
|
unique
|
|
356
346
|
};
|
|
357
347
|
}
|
|
358
|
-
__name(parseUUID, "parseUUID");
|
|
359
348
|
function parseMixed(required = true, def) {
|
|
360
349
|
return {
|
|
361
350
|
type: SchemaTypes.Mixed,
|
|
@@ -363,7 +352,6 @@ function parseMixed(required = true, def) {
|
|
|
363
352
|
required
|
|
364
353
|
};
|
|
365
354
|
}
|
|
366
|
-
__name(parseMixed, "parseMixed");
|
|
367
355
|
var src_default = zodSchema;
|
|
368
356
|
export {
|
|
369
357
|
src_default as default,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":";;;;AAAA,SAASA,QAA4BC,mBAAmB;;;;UCmBvCC,WAAAA;AACR,WAASC,OAAOC,GAAe;AACpC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBH;YAAAA,SAAAA;AAIT,WAASI,OAAOH,GAAe;AACpC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBC;YAAAA,SAAAA;AAIT,WAASC,OAAOJ,GAAe;AACpC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBE;YAAAA,SAAAA;AAIT,WAASC,MAAML,GAAe;AACnC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBG;YAAAA,QAAAA;AAIT,WAASC,QAAQN,GAAe;AACrC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBI;YAAAA,UAAAA;AAIT,WAASC,WAAWP,GAAe;AACxC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBK;YAAAA,aAAAA;AAIT,WAASC,KAAKR,GAAe;AAClC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBM;YAAAA,OAAAA;AAIT,WAASC,SAAST,GAAe;AACtC,WAAO,eAAeA,KAAKA,EAAEU,cAAc;EAC7C;AAFgBD;YAAAA,WAAAA;AAIT,WAASE,KAAKX,GAAe;AAClC,WAAO,eAAeA,KAAKA,EAAEU,cAAc;EAC7C;AAFgBC;YAAAA,OAAAA;AAIT,WAASC,IAAIZ,GAAe;AACjC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBU;YAAAA,MAAAA;AAIT,WAASC,SAASb,GAAe;AACtC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBW;YAAAA,WAAAA;AAIT,WAASC,SAASd,GAAe;AACtC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBY;YAAAA,WAAAA;AAIT,WAASC,MAAMf,GAAe;AACnC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBa;YAAAA,QAAAA;AAIT,WAASC,IAAIhB,GAAe;AACjC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBc;YAAAA,MAAAA;AAIT,WAASC,YAAYjB,GAAe;AACzC,WAAOA,EAAEC,YAAYC,SAAS,YAAYF,EAAEC,YAAYC,SAAS;EACnE;AAFgBe;YAAAA,cAAAA;AAIT,WAASC,OAAOlB,GAAe;AACpC,WAAOA,EAAEC,YAAYC,SAAS;EAChC;AAFgBgB;YAAAA,SAAAA;AAGlB,GAhEiBpB,aAAAA,WAAAA,CAAAA,EAAAA;;;ACnBjB,SAASqB,OAAOC,uBAAuB;AACvC,SAAiCC,SAAS;AA2B1C,IAAIC,eAAe;AACZ,SAASC,UAAUC,KAAa;AAErC,MAAIF,aAAc;AAClBA,iBAAe;AAEf,QAAMG,UAAUD,IAAIE,QAAQC,UAAUC;AACtCJ,MAAIE,QAAQC,UAAUC,SAAS,SAC7BC,OACAC,MAAkE;AAElE,UAAMC,UAAUN,QAAQO,KAAK,IAAI,EAAEH,OAAOC,IAAAA;AAE1C,QAAIG,UAA+DC;AACnE,QAAI,OAAOJ,SAAS,SAAUG,WAAUH;aAC/B,aAAaA,KAAMG,WAAUH,KAAKG;AAErCF,YAAQI,KAAKC,OAAQC,kBAAkB;MAC3CC,WAAWT;MACXI;IACF;AAEA,WAAOF;EACT;AAEAP,MAAIe,UAAUZ,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACnD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEAjB,MAAImB,UAAUhB,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACnD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEAjB,MAAIoB,QAAQjB,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACjD,SAAKC,cAAcD;AACnB,WAAO;EACT;AACF;AAtCgBlB;AA6ChB,IAAMsB,WAAW,6BAAA;AACf,SAAOC,EACJC,OAAM,EACNnB,OAAO,CAACoB,MAAMC,gBAAgBD,CAAAA,GAAI;IAAEf,SAAS;EAAmB,CAAA,EAChEiB,GAAGJ,EAAEK,WAAWC,MAAMC,QAAQ,CAAA;AACnC,GALiB;AAOV,IAAMC,MAAM,wBAACC,QAAAA;AAClB,QAAMC,SAASX,SAAAA;AAETW,SAAQC,YAAY;AACpBD,SAAQE,WAAWH;AAEnBC,SAAQD,MAAM,SAAUA,MAAW;AACjC,SAAMG,WAAWH;AACvB,WAAO;EACT;AAEMC,SAAQhB,SAAS,SAAUmB,MAAM,MAAI;AACnC,SAAMjB,cAAciB;AAC1B,WAAO;EACT;AAEA,SAAOH;AACT,GAjBmB;AAuBnB,IAAMI,aAAa,6BAAA;AACjB,SAAOd,EAAEC,OAAM,EAAGc,KAAK;IAAE5B,SAAS;EAAe,CAAA,EAAGiB,GAAGJ,EAAEK,WAAWC,MAAMU,IAAI,CAAA;AAChF,GAFmB;AAIZ,IAAMC,QAAQ,6BAAA;AACnB,QAAMP,SAASI,WAAAA;AAETJ,SAAQC,YAAY;AAEpBD,SAAQhB,SAAS,SAAUmB,MAAM,MAAI;AACnC,SAAMjB,cAAciB;AAC1B,WAAO;EACT;AAEA,SAAOH;AACT,GAXqB;;;AFhEd,SAASQ,UACdC,QACAC,SAA4B;AAE5B,QAAMC,aAAaC,YAAYH,MAAAA;AAC/B,SAAO,IAAII,OAA+BF,YAAYD,OAAAA;AACxD;AANgBF;AAwCT,SAASM,aACdL,QAAoB;AAEpB,SAAOG,YAAYH,MAAAA;AACrB;AAJgBK;AAOhB,SAASF,YAAmCG,KAAiB;AAC3D,QAAMC,SAAc,CAAC;AACrB,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQL,IAAIM,KAAK,GAAG;AACpD,QAAIC,SAASN,OAAOE,KAAAA,GAAQ;AAC1BF,aAAOC,GAAAA,IAAOL,YAAYM,KAAAA;IAC5B,OAAO;AACL,YAAMK,IAAIC,WAAWN,KAAAA;AACrB,UAAI,CAACK,EAAG,OAAM,IAAIE,MAAM,2BAA2BP,MAAMQ,WAAW,EAAE;AAEtEV,aAAOC,GAAAA,IAAOM;IAChB;EACF;AAEA,SAAOP;AACT;AAdSJ;AAgBT,SAASY,WACPN,OACAS,WAAW,MACXC,KACAC,YAAkC;AAElC,MAAIP,SAASQ,SAASZ,KAAAA,GAAQ;AAC5B,UAAMa,MAAYb,MAAOc;AACzB,UAAMC,SAAef,MAAOgB;AAC5B,WAAOC,cAAcR,UAAUI,KAAKE,MAAAA;EACtC;AAEA,MAAIX,SAASc,KAAKlB,KAAAA,GAAQ;AACxB,UAAMe,SAAef,MAAOgB;AAC5B,WAAOG,UAAUV,UAAUM,MAAAA;EAC7B;AAEA,MAAIX,SAASN,OAAOE,KAAAA,GAAQ;AAC1B,WAAON,YAAYM,KAAAA;EACrB;AAEA,MAAII,SAASgB,OAAOpB,KAAAA,GAAQ;AAC1B,UAAMqB,WAAWrB,MAAMgB,eAAe;AACtC,WAAOM,YACLtB,OACAS,UACAC,KACAW,UACAV,UAAAA;EAEJ;AAEA,MAAIP,SAASmB,OAAOvB,KAAAA,GAAQ;AAC1B,UAAMqB,WAAWrB,MAAMgB,eAAe;AACtC,WAAOQ,YACLxB,OACAS,UACAC,KACAW,UACAV,UAAAA;EAEJ;AAEA,MAAIP,SAASqB,WAAWzB,KAAAA,GAAQ;AAC9B,WAAO0B,UAAUzB,OAAO0B,KAAK3B,MAAM4B,MAAM,GAAGnB,UAAUC,GAAAA;EACxD;AAEA,MAAIN,SAASyB,QAAQ7B,KAAAA,GAAQ;AAC3B,WAAO8B,aAAarB,UAAUC,GAAAA;EAChC;AAEA,MAAIN,SAAS2B,KAAK/B,KAAAA,GAAQ;AACxB,UAAMqB,WAAWrB,MAAMgB,eAAe;AACtC,WAAOgB,UACLvB,UACAC,KACAC,YACAU,QAAAA;EAEJ;AAEA,MAAIjB,SAAS6B,MAAMjC,KAAAA,GAAQ;AACzB,WAAOkC,WACLzB,UACAT,MAAMmC,SACNzB,GAAAA;EAEJ;AAEA,MAAIN,SAASM,IAAIV,KAAAA,GAAQ;AACvB,WAAOM,WACLN,MAAMoC,KAAKC,WACX5B,UACAT,MAAMoC,KAAKE,aAAY,CAAA;EAE3B;AAEA,MAAIlC,SAASmC,SAASvC,KAAAA,GAAQ;AAC5B,WAAOM,WAAWN,MAAMoC,KAAKC,WAAW,OAAOG,MAAAA;EACjD;AAEA,MAAIpC,SAASqC,SAASzC,KAAAA,GAAQ;AAC5B,WAAOM,WAAWN,MAAMoC,KAAKC,WAAW,OAAO3B,OAAO,IAAA;EACxD;AAEA,MAAIN,SAASsC,MAAM1C,KAAAA,GAAQ;AACzB,WAAOM,WAAWN,MAAMoC,KAAK5C,QAAQ,CAAA,CAAE;EACzC;AAEA,MAAIY,SAASuC,IAAI3C,KAAAA,GAAQ;AACvB,WAAO4C,WAAWnC,UAAUC,GAAAA;EAC9B;AAEA,MAAIN,SAASyC,YAAY7C,KAAAA,GAAQ;AAC/B,WAAO8C,SACLrC,UACAT,MAAM+C,WACNrC,GAAAA;EAKJ;AAEA,MAAIN,SAAS4C,OAAOhD,KAAAA,GAAQ;AAC1B,UAAMgD,SAAShD,MAAMoC,KAAKY;AAE1B,QAAIA,OAAOC,SAAS,cAAc;AAChC,YAAMC,aAAmBF,OAAQG;AACjC,aAAO7C,WAAWN,MAAMoC,KAAK7C,QAAQkB,UAAUC,KAAKwC,UAAAA;IACtD;EACF;AAEA,SAAO;AACT;AAlHS5C;AAoHT,SAASgB,YACPtB,OACAS,WAAW,MACXC,KACAK,SAAS,OACTqC,UAAqC;AAErC,QAAMC,SAAqB;IACzBJ,MAAMK;IACNC,SAAS7C;IACT8C,KAAKxD,MAAMyD,YAAYjB;IACvBkB,KAAK1D,MAAM2D,YAAYnB;IACvB/B;IACAM;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAlBS/B;AAoBT,SAASE,YACPxB,OACAS,WAAW,MACXC,KACAK,SAAS,OACTqC,UAAqC;AAErC,QAAMC,SAAqB;IACzBJ,MAAMW;IACNL,SAAS7C;IACTD;IACAoD,WAAW7D,MAAM6D,aAAarB;IAC9BsB,WAAW9D,MAAM8D,aAAatB;IAC9BzB;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAlBS7B;AAoBT,SAASE,UACPqC,QACAtD,WAAW,MACXC,KAAY;AAEZ,SAAO;IACLuC,MAAMW;IACN7C,QAAQ;IACRwC,SAAS7C;IACTsD,MAAMD;IACNtD;EACF;AACF;AAZSiB;AAcT,SAASI,aAAarB,WAAW,MAAMC,KAAa;AAClD,SAAO;IACLuC,MAAMgB;IACNV,SAAS7C;IACTD;EACF;AACF;AANSqB;AAQT,SAASE,UACPvB,WAAW,MACXC,KACA0C,UACArC,SAAS,OAAK;AAEd,QAAMsC,SAAmB;IACvBJ,MAAMiB;IACNX,SAAS7C;IACTD;IACAM;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAfSrB;AAiBT,SAASf,cACPR,WAAW,MACXI,KACAE,SAAS,OAAK;AAEd,QAAMsC,SAAuB;IAC3BJ,MAAMkB,YAAYC;IAClB3D;IACAM;EACF;AAEA,MAAIF,IAAKwC,QAAOxC,MAAMA;AACtB,SAAOwC;AACT;AAbSpC;AAeT,SAASiB,WAEPzB,WAAW,MACX0B,SACAzB,KAAS;AAET,QAAM2B,YAAY/B,WAAW6B,OAAAA;AAC7B,MAAI,CAACE,UAAW,OAAM,IAAI9B,MAAM,wBAAA;AAChC,SAAO;IACL0C,MAAM;MAACZ;;IACPkB,SAAS7C;IACTD;EACF;AACF;AAbSyB;AAeT,SAASY,SAEPrC,WAAW,MACXV,KACAW,KAAwB;AAExB,QAAM2D,UAAUC,gBAAgBvE,GAAAA;AAChC,SAAO;IACLkD,MAAMsB;IACNC,IAAIH;IACJd,SAAS7C;IACTD;EACF;AACF;AAbSqC;AAeT,SAASwB,gBAAmBG,GAAa;AACvC,UAAQ,MAAA;IACN,KAAKrE,SAASmB,OAAOkD,CAAAA;AACnB,aAAOb;IACT,KAAKxD,SAASqB,WAAWgD,CAAAA;AACvB,aAAOb;IACT,KAAKxD,SAASc,KAAKuD,CAAAA;AACjB,aAAON,YAAYO;IACrB,KAAKtE,SAASQ,SAAS6D,CAAAA;AACrB,aAAON,YAAYC;IACrB,KAAKhE,SAASgB,OAAOqD,CAAAA;AACnB,aAAOnB;IACT,KAAKlD,SAAS2B,KAAK0C,CAAAA;AACjB,aAAOP;IACT;AACE,aAAO1B;EACX;AACF;AAjBS8B;AAmBT,SAASnD,UAAUV,WAAW,MAAMM,SAAS,OAAK;AAChD,SAAO;IACLkC,MAAMkB,YAAYO;IAClBjE;IACAM;EACF;AACF;AANSI;AAQT,SAASyB,WAAWnC,WAAW,MAAMC,KAAa;AAChD,SAAO;IACLuC,MAAMkB,YAAYQ;IAClBpB,SAAS7C;IACTD;EACF;AACF;AANSmC;AAQT,IAAA,cAAetD;","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"]}
|
|
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":["zmAssert","ref"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zodyac/zod-mongoose",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.2",
|
|
4
4
|
"description": "A library that allows you to generate mongoose schemas from zod objects.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
14
|
"main": "./dist/index.cjs",
|
|
15
|
-
"module": "./dist/index.
|
|
15
|
+
"module": "./dist/index.js",
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
17
|
"typings": "./dist/index.d.ts",
|
|
18
18
|
"private": false,
|