@zodyac/zod-mongoose 2.3.0 → 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 +4 -0
- package/dist/index.cjs +48 -59
- 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 +48 -61
- 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 });
|
|
@@ -30,90 +29,73 @@ __export(src_exports, {
|
|
|
30
29
|
});
|
|
31
30
|
module.exports = __toCommonJS(src_exports);
|
|
32
31
|
var import_mongoose2 = require("mongoose");
|
|
33
|
-
var import_zod2 = require("zod");
|
|
34
32
|
|
|
35
33
|
// src/helpers.ts
|
|
36
34
|
var zmAssert;
|
|
37
|
-
(
|
|
35
|
+
((zmAssert2) => {
|
|
38
36
|
function string(f) {
|
|
39
37
|
return f.constructor.name === "ZodString";
|
|
40
38
|
}
|
|
41
|
-
__name(string, "string");
|
|
42
39
|
zmAssert2.string = string;
|
|
43
40
|
function number(f) {
|
|
44
41
|
return f.constructor.name === "ZodNumber";
|
|
45
42
|
}
|
|
46
|
-
__name(number, "number");
|
|
47
43
|
zmAssert2.number = number;
|
|
48
44
|
function object(f) {
|
|
49
45
|
return f.constructor.name === "ZodObject";
|
|
50
46
|
}
|
|
51
|
-
__name(object, "object");
|
|
52
47
|
zmAssert2.object = object;
|
|
53
48
|
function array(f) {
|
|
54
49
|
return f.constructor.name === "ZodArray";
|
|
55
50
|
}
|
|
56
|
-
__name(array, "array");
|
|
57
51
|
zmAssert2.array = array;
|
|
58
52
|
function boolean(f) {
|
|
59
53
|
return f.constructor.name === "ZodBoolean";
|
|
60
54
|
}
|
|
61
|
-
__name(boolean, "boolean");
|
|
62
55
|
zmAssert2.boolean = boolean;
|
|
63
56
|
function enumerable(f) {
|
|
64
57
|
return f.constructor.name === "ZodEnum";
|
|
65
58
|
}
|
|
66
|
-
__name(enumerable, "enumerable");
|
|
67
59
|
zmAssert2.enumerable = enumerable;
|
|
68
60
|
function date(f) {
|
|
69
61
|
return f.constructor.name === "ZodDate";
|
|
70
62
|
}
|
|
71
|
-
__name(date, "date");
|
|
72
63
|
zmAssert2.date = date;
|
|
73
64
|
function objectId(f) {
|
|
74
65
|
return "__zm_type" in f && f.__zm_type === "ObjectId";
|
|
75
66
|
}
|
|
76
|
-
__name(objectId, "objectId");
|
|
77
67
|
zmAssert2.objectId = objectId;
|
|
78
68
|
function uuid(f) {
|
|
79
69
|
return "__zm_type" in f && f.__zm_type === "UUID";
|
|
80
70
|
}
|
|
81
|
-
__name(uuid, "uuid");
|
|
82
71
|
zmAssert2.uuid = uuid;
|
|
83
72
|
function def(f) {
|
|
84
73
|
return f.constructor.name === "ZodDefault";
|
|
85
74
|
}
|
|
86
|
-
__name(def, "def");
|
|
87
75
|
zmAssert2.def = def;
|
|
88
76
|
function optional(f) {
|
|
89
77
|
return f.constructor.name === "ZodOptional";
|
|
90
78
|
}
|
|
91
|
-
__name(optional, "optional");
|
|
92
79
|
zmAssert2.optional = optional;
|
|
93
80
|
function nullable(f) {
|
|
94
81
|
return f.constructor.name === "ZodNullable";
|
|
95
82
|
}
|
|
96
|
-
__name(nullable, "nullable");
|
|
97
83
|
zmAssert2.nullable = nullable;
|
|
98
84
|
function union(f) {
|
|
99
85
|
return f.constructor.name === "ZodUnion";
|
|
100
86
|
}
|
|
101
|
-
__name(union, "union");
|
|
102
87
|
zmAssert2.union = union;
|
|
103
88
|
function any(f) {
|
|
104
89
|
return f.constructor.name === "ZodAny";
|
|
105
90
|
}
|
|
106
|
-
__name(any, "any");
|
|
107
91
|
zmAssert2.any = any;
|
|
108
92
|
function mapOrRecord(f) {
|
|
109
93
|
return f.constructor.name === "ZodMap" || f.constructor.name === "ZodRecord";
|
|
110
94
|
}
|
|
111
|
-
__name(mapOrRecord, "mapOrRecord");
|
|
112
95
|
zmAssert2.mapOrRecord = mapOrRecord;
|
|
113
96
|
function effect(f) {
|
|
114
97
|
return f.constructor.name === "ZodEffects";
|
|
115
98
|
}
|
|
116
|
-
__name(effect, "effect");
|
|
117
99
|
zmAssert2.effect = effect;
|
|
118
100
|
})(zmAssert || (zmAssert = {}));
|
|
119
101
|
|
|
@@ -149,13 +131,10 @@ function extendZod(z_0) {
|
|
|
149
131
|
return this;
|
|
150
132
|
};
|
|
151
133
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
157
|
-
}, "createId");
|
|
158
|
-
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) => {
|
|
159
138
|
const output = createId();
|
|
160
139
|
output.__zm_type = "ObjectId";
|
|
161
140
|
output.__zm_ref = ref;
|
|
@@ -168,13 +147,11 @@ var zId = /* @__PURE__ */ __name((ref) => {
|
|
|
168
147
|
return this;
|
|
169
148
|
};
|
|
170
149
|
return output;
|
|
171
|
-
}
|
|
172
|
-
var createUUID =
|
|
173
|
-
return import_zod.z.string().uuid({
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}, "createUUID");
|
|
177
|
-
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 = () => {
|
|
178
155
|
const output = createUUID();
|
|
179
156
|
output.__zm_type = "UUID";
|
|
180
157
|
output.unique = function(val = true) {
|
|
@@ -182,22 +159,20 @@ var zUUID = /* @__PURE__ */ __name(() => {
|
|
|
182
159
|
return this;
|
|
183
160
|
};
|
|
184
161
|
return output;
|
|
185
|
-
}
|
|
162
|
+
};
|
|
186
163
|
|
|
187
164
|
// src/index.ts
|
|
188
165
|
function zodSchema(schema, options) {
|
|
189
166
|
const definition = parseObject(schema);
|
|
190
167
|
return new import_mongoose2.Schema(definition, options);
|
|
191
168
|
}
|
|
192
|
-
__name(zodSchema, "zodSchema");
|
|
193
169
|
function zodSchemaRaw(schema) {
|
|
194
170
|
return parseObject(schema);
|
|
195
171
|
}
|
|
196
|
-
__name(zodSchemaRaw, "zodSchemaRaw");
|
|
197
172
|
function parseObject(obj) {
|
|
198
173
|
const object = {};
|
|
199
174
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
200
|
-
if (field
|
|
175
|
+
if (zmAssert.object(field)) {
|
|
201
176
|
object[key] = parseObject(field);
|
|
202
177
|
} else {
|
|
203
178
|
const f = parseField(field);
|
|
@@ -207,7 +182,6 @@ function parseObject(obj) {
|
|
|
207
182
|
}
|
|
208
183
|
return object;
|
|
209
184
|
}
|
|
210
|
-
__name(parseObject, "parseObject");
|
|
211
185
|
function parseField(field, required = true, def, refinement) {
|
|
212
186
|
if (zmAssert.objectId(field)) {
|
|
213
187
|
const ref = field.__zm_ref;
|
|
@@ -223,11 +197,23 @@ function parseField(field, required = true, def, refinement) {
|
|
|
223
197
|
}
|
|
224
198
|
if (zmAssert.number(field)) {
|
|
225
199
|
const isUnique = field.__zm_unique ?? false;
|
|
226
|
-
return parseNumber(
|
|
200
|
+
return parseNumber(
|
|
201
|
+
field,
|
|
202
|
+
required,
|
|
203
|
+
def,
|
|
204
|
+
isUnique,
|
|
205
|
+
refinement
|
|
206
|
+
);
|
|
227
207
|
}
|
|
228
208
|
if (zmAssert.string(field)) {
|
|
229
209
|
const isUnique = field.__zm_unique ?? false;
|
|
230
|
-
return parseString(
|
|
210
|
+
return parseString(
|
|
211
|
+
field,
|
|
212
|
+
required,
|
|
213
|
+
def,
|
|
214
|
+
isUnique,
|
|
215
|
+
refinement
|
|
216
|
+
);
|
|
231
217
|
}
|
|
232
218
|
if (zmAssert.enumerable(field)) {
|
|
233
219
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
@@ -237,13 +223,26 @@ function parseField(field, required = true, def, refinement) {
|
|
|
237
223
|
}
|
|
238
224
|
if (zmAssert.date(field)) {
|
|
239
225
|
const isUnique = field.__zm_unique ?? false;
|
|
240
|
-
return parseDate(
|
|
226
|
+
return parseDate(
|
|
227
|
+
required,
|
|
228
|
+
def,
|
|
229
|
+
refinement,
|
|
230
|
+
isUnique
|
|
231
|
+
);
|
|
241
232
|
}
|
|
242
233
|
if (zmAssert.array(field)) {
|
|
243
|
-
return parseArray(
|
|
234
|
+
return parseArray(
|
|
235
|
+
required,
|
|
236
|
+
field.element,
|
|
237
|
+
def
|
|
238
|
+
);
|
|
244
239
|
}
|
|
245
240
|
if (zmAssert.def(field)) {
|
|
246
|
-
return parseField(
|
|
241
|
+
return parseField(
|
|
242
|
+
field._def.innerType,
|
|
243
|
+
required,
|
|
244
|
+
field._def.defaultValue()
|
|
245
|
+
);
|
|
247
246
|
}
|
|
248
247
|
if (zmAssert.optional(field)) {
|
|
249
248
|
return parseField(field._def.innerType, false, void 0);
|
|
@@ -258,7 +257,11 @@ function parseField(field, required = true, def, refinement) {
|
|
|
258
257
|
return parseMixed(required, def);
|
|
259
258
|
}
|
|
260
259
|
if (zmAssert.mapOrRecord(field)) {
|
|
261
|
-
return parseMap(
|
|
260
|
+
return parseMap(
|
|
261
|
+
required,
|
|
262
|
+
field.keySchema,
|
|
263
|
+
def
|
|
264
|
+
);
|
|
262
265
|
}
|
|
263
266
|
if (zmAssert.effect(field)) {
|
|
264
267
|
const effect = field._def.effect;
|
|
@@ -269,7 +272,6 @@ function parseField(field, required = true, def, refinement) {
|
|
|
269
272
|
}
|
|
270
273
|
return null;
|
|
271
274
|
}
|
|
272
|
-
__name(parseField, "parseField");
|
|
273
275
|
function parseNumber(field, required = true, def, unique = false, validate) {
|
|
274
276
|
const output = {
|
|
275
277
|
type: Number,
|
|
@@ -282,7 +284,6 @@ function parseNumber(field, required = true, def, unique = false, validate) {
|
|
|
282
284
|
if (validate) output.validate = validate;
|
|
283
285
|
return output;
|
|
284
286
|
}
|
|
285
|
-
__name(parseNumber, "parseNumber");
|
|
286
287
|
function parseString(field, required = true, def, unique = false, validate) {
|
|
287
288
|
const output = {
|
|
288
289
|
type: String,
|
|
@@ -295,7 +296,6 @@ function parseString(field, required = true, def, unique = false, validate) {
|
|
|
295
296
|
if (validate) output.validate = validate;
|
|
296
297
|
return output;
|
|
297
298
|
}
|
|
298
|
-
__name(parseString, "parseString");
|
|
299
299
|
function parseEnum(values, required = true, def) {
|
|
300
300
|
return {
|
|
301
301
|
type: String,
|
|
@@ -305,7 +305,6 @@ function parseEnum(values, required = true, def) {
|
|
|
305
305
|
required
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
|
-
__name(parseEnum, "parseEnum");
|
|
309
308
|
function parseBoolean(required = true, def) {
|
|
310
309
|
return {
|
|
311
310
|
type: Boolean,
|
|
@@ -313,7 +312,6 @@ function parseBoolean(required = true, def) {
|
|
|
313
312
|
required
|
|
314
313
|
};
|
|
315
314
|
}
|
|
316
|
-
__name(parseBoolean, "parseBoolean");
|
|
317
315
|
function parseDate(required = true, def, validate, unique = false) {
|
|
318
316
|
const output = {
|
|
319
317
|
type: Date,
|
|
@@ -324,7 +322,6 @@ function parseDate(required = true, def, validate, unique = false) {
|
|
|
324
322
|
if (validate) output.validate = validate;
|
|
325
323
|
return output;
|
|
326
324
|
}
|
|
327
|
-
__name(parseDate, "parseDate");
|
|
328
325
|
function parseObjectId(required = true, ref, unique = false) {
|
|
329
326
|
const output = {
|
|
330
327
|
type: import_mongoose2.SchemaTypes.ObjectId,
|
|
@@ -334,19 +331,15 @@ function parseObjectId(required = true, ref, unique = false) {
|
|
|
334
331
|
if (ref) output.ref = ref;
|
|
335
332
|
return output;
|
|
336
333
|
}
|
|
337
|
-
__name(parseObjectId, "parseObjectId");
|
|
338
334
|
function parseArray(required = true, element, def) {
|
|
339
335
|
const innerType = parseField(element);
|
|
340
336
|
if (!innerType) throw new Error("Unsupported array type");
|
|
341
337
|
return {
|
|
342
|
-
type: [
|
|
343
|
-
innerType
|
|
344
|
-
],
|
|
338
|
+
type: [innerType],
|
|
345
339
|
default: def,
|
|
346
340
|
required
|
|
347
341
|
};
|
|
348
342
|
}
|
|
349
|
-
__name(parseArray, "parseArray");
|
|
350
343
|
function parseMap(required = true, key, def) {
|
|
351
344
|
const pointer = typeConstructor(key);
|
|
352
345
|
return {
|
|
@@ -356,7 +349,6 @@ function parseMap(required = true, key, def) {
|
|
|
356
349
|
required
|
|
357
350
|
};
|
|
358
351
|
}
|
|
359
|
-
__name(parseMap, "parseMap");
|
|
360
352
|
function typeConstructor(t) {
|
|
361
353
|
switch (true) {
|
|
362
354
|
case zmAssert.string(t):
|
|
@@ -375,7 +367,6 @@ function typeConstructor(t) {
|
|
|
375
367
|
return void 0;
|
|
376
368
|
}
|
|
377
369
|
}
|
|
378
|
-
__name(typeConstructor, "typeConstructor");
|
|
379
370
|
function parseUUID(required = true, unique = false) {
|
|
380
371
|
return {
|
|
381
372
|
type: import_mongoose2.SchemaTypes.UUID,
|
|
@@ -383,7 +374,6 @@ function parseUUID(required = true, unique = false) {
|
|
|
383
374
|
unique
|
|
384
375
|
};
|
|
385
376
|
}
|
|
386
|
-
__name(parseUUID, "parseUUID");
|
|
387
377
|
function parseMixed(required = true, def) {
|
|
388
378
|
return {
|
|
389
379
|
type: import_mongoose2.SchemaTypes.Mixed,
|
|
@@ -391,7 +381,6 @@ function parseMixed(required = true, def) {
|
|
|
391
381
|
required
|
|
392
382
|
};
|
|
393
383
|
}
|
|
394
|
-
__name(parseMixed, "parseMixed");
|
|
395
384
|
var src_default = zodSchema;
|
|
396
385
|
// Annotate the CommonJS export names for ESM import in node:
|
|
397
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 {\n type ZodNumber,\n ZodObject,\n type ZodRawShape,\n type ZodString,\n type ZodType,\n type 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>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n 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(field._def.innerType, required, field._def.defaultValue());\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(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency 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","import_zod","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","ZodObject","f","parseField","Error","constructor","required","def","refinement","zmAssert","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,92 +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
|
-
import { ZodObject } from "zod";
|
|
7
3
|
|
|
8
4
|
// src/helpers.ts
|
|
9
5
|
var zmAssert;
|
|
10
|
-
(
|
|
6
|
+
((zmAssert2) => {
|
|
11
7
|
function string(f) {
|
|
12
8
|
return f.constructor.name === "ZodString";
|
|
13
9
|
}
|
|
14
|
-
__name(string, "string");
|
|
15
10
|
zmAssert2.string = string;
|
|
16
11
|
function number(f) {
|
|
17
12
|
return f.constructor.name === "ZodNumber";
|
|
18
13
|
}
|
|
19
|
-
__name(number, "number");
|
|
20
14
|
zmAssert2.number = number;
|
|
21
15
|
function object(f) {
|
|
22
16
|
return f.constructor.name === "ZodObject";
|
|
23
17
|
}
|
|
24
|
-
__name(object, "object");
|
|
25
18
|
zmAssert2.object = object;
|
|
26
19
|
function array(f) {
|
|
27
20
|
return f.constructor.name === "ZodArray";
|
|
28
21
|
}
|
|
29
|
-
__name(array, "array");
|
|
30
22
|
zmAssert2.array = array;
|
|
31
23
|
function boolean(f) {
|
|
32
24
|
return f.constructor.name === "ZodBoolean";
|
|
33
25
|
}
|
|
34
|
-
__name(boolean, "boolean");
|
|
35
26
|
zmAssert2.boolean = boolean;
|
|
36
27
|
function enumerable(f) {
|
|
37
28
|
return f.constructor.name === "ZodEnum";
|
|
38
29
|
}
|
|
39
|
-
__name(enumerable, "enumerable");
|
|
40
30
|
zmAssert2.enumerable = enumerable;
|
|
41
31
|
function date(f) {
|
|
42
32
|
return f.constructor.name === "ZodDate";
|
|
43
33
|
}
|
|
44
|
-
__name(date, "date");
|
|
45
34
|
zmAssert2.date = date;
|
|
46
35
|
function objectId(f) {
|
|
47
36
|
return "__zm_type" in f && f.__zm_type === "ObjectId";
|
|
48
37
|
}
|
|
49
|
-
__name(objectId, "objectId");
|
|
50
38
|
zmAssert2.objectId = objectId;
|
|
51
39
|
function uuid(f) {
|
|
52
40
|
return "__zm_type" in f && f.__zm_type === "UUID";
|
|
53
41
|
}
|
|
54
|
-
__name(uuid, "uuid");
|
|
55
42
|
zmAssert2.uuid = uuid;
|
|
56
43
|
function def(f) {
|
|
57
44
|
return f.constructor.name === "ZodDefault";
|
|
58
45
|
}
|
|
59
|
-
__name(def, "def");
|
|
60
46
|
zmAssert2.def = def;
|
|
61
47
|
function optional(f) {
|
|
62
48
|
return f.constructor.name === "ZodOptional";
|
|
63
49
|
}
|
|
64
|
-
__name(optional, "optional");
|
|
65
50
|
zmAssert2.optional = optional;
|
|
66
51
|
function nullable(f) {
|
|
67
52
|
return f.constructor.name === "ZodNullable";
|
|
68
53
|
}
|
|
69
|
-
__name(nullable, "nullable");
|
|
70
54
|
zmAssert2.nullable = nullable;
|
|
71
55
|
function union(f) {
|
|
72
56
|
return f.constructor.name === "ZodUnion";
|
|
73
57
|
}
|
|
74
|
-
__name(union, "union");
|
|
75
58
|
zmAssert2.union = union;
|
|
76
59
|
function any(f) {
|
|
77
60
|
return f.constructor.name === "ZodAny";
|
|
78
61
|
}
|
|
79
|
-
__name(any, "any");
|
|
80
62
|
zmAssert2.any = any;
|
|
81
63
|
function mapOrRecord(f) {
|
|
82
64
|
return f.constructor.name === "ZodMap" || f.constructor.name === "ZodRecord";
|
|
83
65
|
}
|
|
84
|
-
__name(mapOrRecord, "mapOrRecord");
|
|
85
66
|
zmAssert2.mapOrRecord = mapOrRecord;
|
|
86
67
|
function effect(f) {
|
|
87
68
|
return f.constructor.name === "ZodEffects";
|
|
88
69
|
}
|
|
89
|
-
__name(effect, "effect");
|
|
90
70
|
zmAssert2.effect = effect;
|
|
91
71
|
})(zmAssert || (zmAssert = {}));
|
|
92
72
|
|
|
@@ -122,13 +102,10 @@ function extendZod(z_0) {
|
|
|
122
102
|
return this;
|
|
123
103
|
};
|
|
124
104
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}).or(z.instanceof(Types.ObjectId));
|
|
130
|
-
}, "createId");
|
|
131
|
-
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) => {
|
|
132
109
|
const output = createId();
|
|
133
110
|
output.__zm_type = "ObjectId";
|
|
134
111
|
output.__zm_ref = ref;
|
|
@@ -141,13 +118,11 @@ var zId = /* @__PURE__ */ __name((ref) => {
|
|
|
141
118
|
return this;
|
|
142
119
|
};
|
|
143
120
|
return output;
|
|
144
|
-
}
|
|
145
|
-
var createUUID =
|
|
146
|
-
return z.string().uuid({
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}, "createUUID");
|
|
150
|
-
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 = () => {
|
|
151
126
|
const output = createUUID();
|
|
152
127
|
output.__zm_type = "UUID";
|
|
153
128
|
output.unique = function(val = true) {
|
|
@@ -155,22 +130,20 @@ var zUUID = /* @__PURE__ */ __name(() => {
|
|
|
155
130
|
return this;
|
|
156
131
|
};
|
|
157
132
|
return output;
|
|
158
|
-
}
|
|
133
|
+
};
|
|
159
134
|
|
|
160
135
|
// src/index.ts
|
|
161
136
|
function zodSchema(schema, options) {
|
|
162
137
|
const definition = parseObject(schema);
|
|
163
138
|
return new Schema(definition, options);
|
|
164
139
|
}
|
|
165
|
-
__name(zodSchema, "zodSchema");
|
|
166
140
|
function zodSchemaRaw(schema) {
|
|
167
141
|
return parseObject(schema);
|
|
168
142
|
}
|
|
169
|
-
__name(zodSchemaRaw, "zodSchemaRaw");
|
|
170
143
|
function parseObject(obj) {
|
|
171
144
|
const object = {};
|
|
172
145
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
173
|
-
if (field
|
|
146
|
+
if (zmAssert.object(field)) {
|
|
174
147
|
object[key] = parseObject(field);
|
|
175
148
|
} else {
|
|
176
149
|
const f = parseField(field);
|
|
@@ -180,7 +153,6 @@ function parseObject(obj) {
|
|
|
180
153
|
}
|
|
181
154
|
return object;
|
|
182
155
|
}
|
|
183
|
-
__name(parseObject, "parseObject");
|
|
184
156
|
function parseField(field, required = true, def, refinement) {
|
|
185
157
|
if (zmAssert.objectId(field)) {
|
|
186
158
|
const ref = field.__zm_ref;
|
|
@@ -196,11 +168,23 @@ function parseField(field, required = true, def, refinement) {
|
|
|
196
168
|
}
|
|
197
169
|
if (zmAssert.number(field)) {
|
|
198
170
|
const isUnique = field.__zm_unique ?? false;
|
|
199
|
-
return parseNumber(
|
|
171
|
+
return parseNumber(
|
|
172
|
+
field,
|
|
173
|
+
required,
|
|
174
|
+
def,
|
|
175
|
+
isUnique,
|
|
176
|
+
refinement
|
|
177
|
+
);
|
|
200
178
|
}
|
|
201
179
|
if (zmAssert.string(field)) {
|
|
202
180
|
const isUnique = field.__zm_unique ?? false;
|
|
203
|
-
return parseString(
|
|
181
|
+
return parseString(
|
|
182
|
+
field,
|
|
183
|
+
required,
|
|
184
|
+
def,
|
|
185
|
+
isUnique,
|
|
186
|
+
refinement
|
|
187
|
+
);
|
|
204
188
|
}
|
|
205
189
|
if (zmAssert.enumerable(field)) {
|
|
206
190
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
@@ -210,13 +194,26 @@ function parseField(field, required = true, def, refinement) {
|
|
|
210
194
|
}
|
|
211
195
|
if (zmAssert.date(field)) {
|
|
212
196
|
const isUnique = field.__zm_unique ?? false;
|
|
213
|
-
return parseDate(
|
|
197
|
+
return parseDate(
|
|
198
|
+
required,
|
|
199
|
+
def,
|
|
200
|
+
refinement,
|
|
201
|
+
isUnique
|
|
202
|
+
);
|
|
214
203
|
}
|
|
215
204
|
if (zmAssert.array(field)) {
|
|
216
|
-
return parseArray(
|
|
205
|
+
return parseArray(
|
|
206
|
+
required,
|
|
207
|
+
field.element,
|
|
208
|
+
def
|
|
209
|
+
);
|
|
217
210
|
}
|
|
218
211
|
if (zmAssert.def(field)) {
|
|
219
|
-
return parseField(
|
|
212
|
+
return parseField(
|
|
213
|
+
field._def.innerType,
|
|
214
|
+
required,
|
|
215
|
+
field._def.defaultValue()
|
|
216
|
+
);
|
|
220
217
|
}
|
|
221
218
|
if (zmAssert.optional(field)) {
|
|
222
219
|
return parseField(field._def.innerType, false, void 0);
|
|
@@ -231,7 +228,11 @@ function parseField(field, required = true, def, refinement) {
|
|
|
231
228
|
return parseMixed(required, def);
|
|
232
229
|
}
|
|
233
230
|
if (zmAssert.mapOrRecord(field)) {
|
|
234
|
-
return parseMap(
|
|
231
|
+
return parseMap(
|
|
232
|
+
required,
|
|
233
|
+
field.keySchema,
|
|
234
|
+
def
|
|
235
|
+
);
|
|
235
236
|
}
|
|
236
237
|
if (zmAssert.effect(field)) {
|
|
237
238
|
const effect = field._def.effect;
|
|
@@ -242,7 +243,6 @@ function parseField(field, required = true, def, refinement) {
|
|
|
242
243
|
}
|
|
243
244
|
return null;
|
|
244
245
|
}
|
|
245
|
-
__name(parseField, "parseField");
|
|
246
246
|
function parseNumber(field, required = true, def, unique = false, validate) {
|
|
247
247
|
const output = {
|
|
248
248
|
type: Number,
|
|
@@ -255,7 +255,6 @@ function parseNumber(field, required = true, def, unique = false, validate) {
|
|
|
255
255
|
if (validate) output.validate = validate;
|
|
256
256
|
return output;
|
|
257
257
|
}
|
|
258
|
-
__name(parseNumber, "parseNumber");
|
|
259
258
|
function parseString(field, required = true, def, unique = false, validate) {
|
|
260
259
|
const output = {
|
|
261
260
|
type: String,
|
|
@@ -268,7 +267,6 @@ function parseString(field, required = true, def, unique = false, validate) {
|
|
|
268
267
|
if (validate) output.validate = validate;
|
|
269
268
|
return output;
|
|
270
269
|
}
|
|
271
|
-
__name(parseString, "parseString");
|
|
272
270
|
function parseEnum(values, required = true, def) {
|
|
273
271
|
return {
|
|
274
272
|
type: String,
|
|
@@ -278,7 +276,6 @@ function parseEnum(values, required = true, def) {
|
|
|
278
276
|
required
|
|
279
277
|
};
|
|
280
278
|
}
|
|
281
|
-
__name(parseEnum, "parseEnum");
|
|
282
279
|
function parseBoolean(required = true, def) {
|
|
283
280
|
return {
|
|
284
281
|
type: Boolean,
|
|
@@ -286,7 +283,6 @@ function parseBoolean(required = true, def) {
|
|
|
286
283
|
required
|
|
287
284
|
};
|
|
288
285
|
}
|
|
289
|
-
__name(parseBoolean, "parseBoolean");
|
|
290
286
|
function parseDate(required = true, def, validate, unique = false) {
|
|
291
287
|
const output = {
|
|
292
288
|
type: Date,
|
|
@@ -297,7 +293,6 @@ function parseDate(required = true, def, validate, unique = false) {
|
|
|
297
293
|
if (validate) output.validate = validate;
|
|
298
294
|
return output;
|
|
299
295
|
}
|
|
300
|
-
__name(parseDate, "parseDate");
|
|
301
296
|
function parseObjectId(required = true, ref, unique = false) {
|
|
302
297
|
const output = {
|
|
303
298
|
type: SchemaTypes.ObjectId,
|
|
@@ -307,19 +302,15 @@ function parseObjectId(required = true, ref, unique = false) {
|
|
|
307
302
|
if (ref) output.ref = ref;
|
|
308
303
|
return output;
|
|
309
304
|
}
|
|
310
|
-
__name(parseObjectId, "parseObjectId");
|
|
311
305
|
function parseArray(required = true, element, def) {
|
|
312
306
|
const innerType = parseField(element);
|
|
313
307
|
if (!innerType) throw new Error("Unsupported array type");
|
|
314
308
|
return {
|
|
315
|
-
type: [
|
|
316
|
-
innerType
|
|
317
|
-
],
|
|
309
|
+
type: [innerType],
|
|
318
310
|
default: def,
|
|
319
311
|
required
|
|
320
312
|
};
|
|
321
313
|
}
|
|
322
|
-
__name(parseArray, "parseArray");
|
|
323
314
|
function parseMap(required = true, key, def) {
|
|
324
315
|
const pointer = typeConstructor(key);
|
|
325
316
|
return {
|
|
@@ -329,7 +320,6 @@ function parseMap(required = true, key, def) {
|
|
|
329
320
|
required
|
|
330
321
|
};
|
|
331
322
|
}
|
|
332
|
-
__name(parseMap, "parseMap");
|
|
333
323
|
function typeConstructor(t) {
|
|
334
324
|
switch (true) {
|
|
335
325
|
case zmAssert.string(t):
|
|
@@ -348,7 +338,6 @@ function typeConstructor(t) {
|
|
|
348
338
|
return void 0;
|
|
349
339
|
}
|
|
350
340
|
}
|
|
351
|
-
__name(typeConstructor, "typeConstructor");
|
|
352
341
|
function parseUUID(required = true, unique = false) {
|
|
353
342
|
return {
|
|
354
343
|
type: SchemaTypes.UUID,
|
|
@@ -356,7 +345,6 @@ function parseUUID(required = true, unique = false) {
|
|
|
356
345
|
unique
|
|
357
346
|
};
|
|
358
347
|
}
|
|
359
|
-
__name(parseUUID, "parseUUID");
|
|
360
348
|
function parseMixed(required = true, def) {
|
|
361
349
|
return {
|
|
362
350
|
type: SchemaTypes.Mixed,
|
|
@@ -364,7 +352,6 @@ function parseMixed(required = true, def) {
|
|
|
364
352
|
required
|
|
365
353
|
};
|
|
366
354
|
}
|
|
367
|
-
__name(parseMixed, "parseMixed");
|
|
368
355
|
var src_default = zodSchema;
|
|
369
356
|
export {
|
|
370
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 {\n type ZodNumber,\n ZodObject,\n type ZodRawShape,\n type ZodString,\n type ZodType,\n type 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>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n 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(field._def.innerType, required, field._def.defaultValue());\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(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency with other functions\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case zmAssert.string(t):\n return String;\n case zmAssert.enumerable(t):\n return String;\n case zmAssert.uuid(t):\n return SchemaTypes.UUID;\n case zmAssert.objectId(t):\n return SchemaTypes.ObjectId;\n case zmAssert.number(t):\n return Number;\n case zmAssert.date(t):\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import type {\n ZodAny,\n ZodArray,\n ZodBoolean,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n ZodRecord,\n ZodString,\n ZodType,\n ZodUnion,\n} from \"zod\";\n\nexport namespace zmAssert {\n export function string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n }\n\n export function number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n }\n\n export function object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n }\n\n export function array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n }\n\n export function boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n }\n\n export function enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n }\n\n export function date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n }\n\n export function objectId(f: ZodType<any>): f is ZodType<string> {\n return \"__zm_type\" in f && f.__zm_type === \"ObjectId\";\n }\n\n export function uuid(f: ZodType<any>): f is ZodType<string> {\n return \"__zm_type\" in f && f.__zm_type === \"UUID\";\n }\n\n export function def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n }\n\n export function optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n }\n\n export function nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n }\n\n export function union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n }\n\n export function any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n }\n\n export function mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n }\n\n export function effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n }\n}\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["Schema","SchemaTypes","ZodObject","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","ZodObject","f","parseField","Error","constructor","required","def","refinement","zmAssert","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,
|