@zodyac/zod-mongoose 2.3.1 → 2.3.3
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 +51 -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 +51 -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 });
|
|
@@ -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
|
|
|
@@ -127,8 +110,10 @@ function extendZod(z_0) {
|
|
|
127
110
|
z_0.ZodType.prototype.refine = function(check, opts) {
|
|
128
111
|
const zEffect = _refine.bind(this)(check, opts);
|
|
129
112
|
let message = void 0;
|
|
130
|
-
if (
|
|
131
|
-
|
|
113
|
+
if (opts) {
|
|
114
|
+
if (typeof opts === "string") message = opts;
|
|
115
|
+
else if ("message" in opts) message = opts.message;
|
|
116
|
+
}
|
|
132
117
|
zEffect._def.effect.__zm_validation = {
|
|
133
118
|
validator: check,
|
|
134
119
|
message
|
|
@@ -148,13 +133,10 @@ function extendZod(z_0) {
|
|
|
148
133
|
return this;
|
|
149
134
|
};
|
|
150
135
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
156
|
-
}, "createId");
|
|
157
|
-
var zId = /* @__PURE__ */ __name((ref) => {
|
|
136
|
+
var createId = () => {
|
|
137
|
+
return import_zod.z.string().refine((v) => (0, import_mongoose.isValidObjectId)(v), { message: "Invalid ObjectId" }).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
138
|
+
};
|
|
139
|
+
var zId = (ref) => {
|
|
158
140
|
const output = createId();
|
|
159
141
|
output.__zm_type = "ObjectId";
|
|
160
142
|
output.__zm_ref = ref;
|
|
@@ -167,13 +149,11 @@ var zId = /* @__PURE__ */ __name((ref) => {
|
|
|
167
149
|
return this;
|
|
168
150
|
};
|
|
169
151
|
return output;
|
|
170
|
-
}
|
|
171
|
-
var createUUID =
|
|
172
|
-
return import_zod.z.string().uuid({
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}, "createUUID");
|
|
176
|
-
var zUUID = /* @__PURE__ */ __name(() => {
|
|
152
|
+
};
|
|
153
|
+
var createUUID = () => {
|
|
154
|
+
return import_zod.z.string().uuid({ message: "Invalid UUID" }).or(import_zod.z.instanceof(import_mongoose.Types.UUID));
|
|
155
|
+
};
|
|
156
|
+
var zUUID = () => {
|
|
177
157
|
const output = createUUID();
|
|
178
158
|
output.__zm_type = "UUID";
|
|
179
159
|
output.unique = function(val = true) {
|
|
@@ -181,18 +161,16 @@ var zUUID = /* @__PURE__ */ __name(() => {
|
|
|
181
161
|
return this;
|
|
182
162
|
};
|
|
183
163
|
return output;
|
|
184
|
-
}
|
|
164
|
+
};
|
|
185
165
|
|
|
186
166
|
// src/index.ts
|
|
187
167
|
function zodSchema(schema, options) {
|
|
188
168
|
const definition = parseObject(schema);
|
|
189
169
|
return new import_mongoose2.Schema(definition, options);
|
|
190
170
|
}
|
|
191
|
-
__name(zodSchema, "zodSchema");
|
|
192
171
|
function zodSchemaRaw(schema) {
|
|
193
172
|
return parseObject(schema);
|
|
194
173
|
}
|
|
195
|
-
__name(zodSchemaRaw, "zodSchemaRaw");
|
|
196
174
|
function parseObject(obj) {
|
|
197
175
|
const object = {};
|
|
198
176
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
@@ -206,7 +184,6 @@ function parseObject(obj) {
|
|
|
206
184
|
}
|
|
207
185
|
return object;
|
|
208
186
|
}
|
|
209
|
-
__name(parseObject, "parseObject");
|
|
210
187
|
function parseField(field, required = true, def, refinement) {
|
|
211
188
|
if (zmAssert.objectId(field)) {
|
|
212
189
|
const ref = field.__zm_ref;
|
|
@@ -222,11 +199,23 @@ function parseField(field, required = true, def, refinement) {
|
|
|
222
199
|
}
|
|
223
200
|
if (zmAssert.number(field)) {
|
|
224
201
|
const isUnique = field.__zm_unique ?? false;
|
|
225
|
-
return parseNumber(
|
|
202
|
+
return parseNumber(
|
|
203
|
+
field,
|
|
204
|
+
required,
|
|
205
|
+
def,
|
|
206
|
+
isUnique,
|
|
207
|
+
refinement
|
|
208
|
+
);
|
|
226
209
|
}
|
|
227
210
|
if (zmAssert.string(field)) {
|
|
228
211
|
const isUnique = field.__zm_unique ?? false;
|
|
229
|
-
return parseString(
|
|
212
|
+
return parseString(
|
|
213
|
+
field,
|
|
214
|
+
required,
|
|
215
|
+
def,
|
|
216
|
+
isUnique,
|
|
217
|
+
refinement
|
|
218
|
+
);
|
|
230
219
|
}
|
|
231
220
|
if (zmAssert.enumerable(field)) {
|
|
232
221
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
@@ -236,13 +225,26 @@ function parseField(field, required = true, def, refinement) {
|
|
|
236
225
|
}
|
|
237
226
|
if (zmAssert.date(field)) {
|
|
238
227
|
const isUnique = field.__zm_unique ?? false;
|
|
239
|
-
return parseDate(
|
|
228
|
+
return parseDate(
|
|
229
|
+
required,
|
|
230
|
+
def,
|
|
231
|
+
refinement,
|
|
232
|
+
isUnique
|
|
233
|
+
);
|
|
240
234
|
}
|
|
241
235
|
if (zmAssert.array(field)) {
|
|
242
|
-
return parseArray(
|
|
236
|
+
return parseArray(
|
|
237
|
+
required,
|
|
238
|
+
field.element,
|
|
239
|
+
def
|
|
240
|
+
);
|
|
243
241
|
}
|
|
244
242
|
if (zmAssert.def(field)) {
|
|
245
|
-
return parseField(
|
|
243
|
+
return parseField(
|
|
244
|
+
field._def.innerType,
|
|
245
|
+
required,
|
|
246
|
+
field._def.defaultValue()
|
|
247
|
+
);
|
|
246
248
|
}
|
|
247
249
|
if (zmAssert.optional(field)) {
|
|
248
250
|
return parseField(field._def.innerType, false, void 0);
|
|
@@ -257,7 +259,11 @@ function parseField(field, required = true, def, refinement) {
|
|
|
257
259
|
return parseMixed(required, def);
|
|
258
260
|
}
|
|
259
261
|
if (zmAssert.mapOrRecord(field)) {
|
|
260
|
-
return parseMap(
|
|
262
|
+
return parseMap(
|
|
263
|
+
required,
|
|
264
|
+
field.keySchema,
|
|
265
|
+
def
|
|
266
|
+
);
|
|
261
267
|
}
|
|
262
268
|
if (zmAssert.effect(field)) {
|
|
263
269
|
const effect = field._def.effect;
|
|
@@ -268,7 +274,6 @@ function parseField(field, required = true, def, refinement) {
|
|
|
268
274
|
}
|
|
269
275
|
return null;
|
|
270
276
|
}
|
|
271
|
-
__name(parseField, "parseField");
|
|
272
277
|
function parseNumber(field, required = true, def, unique = false, validate) {
|
|
273
278
|
const output = {
|
|
274
279
|
type: Number,
|
|
@@ -281,7 +286,6 @@ function parseNumber(field, required = true, def, unique = false, validate) {
|
|
|
281
286
|
if (validate) output.validate = validate;
|
|
282
287
|
return output;
|
|
283
288
|
}
|
|
284
|
-
__name(parseNumber, "parseNumber");
|
|
285
289
|
function parseString(field, required = true, def, unique = false, validate) {
|
|
286
290
|
const output = {
|
|
287
291
|
type: String,
|
|
@@ -294,7 +298,6 @@ function parseString(field, required = true, def, unique = false, validate) {
|
|
|
294
298
|
if (validate) output.validate = validate;
|
|
295
299
|
return output;
|
|
296
300
|
}
|
|
297
|
-
__name(parseString, "parseString");
|
|
298
301
|
function parseEnum(values, required = true, def) {
|
|
299
302
|
return {
|
|
300
303
|
type: String,
|
|
@@ -304,7 +307,6 @@ function parseEnum(values, required = true, def) {
|
|
|
304
307
|
required
|
|
305
308
|
};
|
|
306
309
|
}
|
|
307
|
-
__name(parseEnum, "parseEnum");
|
|
308
310
|
function parseBoolean(required = true, def) {
|
|
309
311
|
return {
|
|
310
312
|
type: Boolean,
|
|
@@ -312,7 +314,6 @@ function parseBoolean(required = true, def) {
|
|
|
312
314
|
required
|
|
313
315
|
};
|
|
314
316
|
}
|
|
315
|
-
__name(parseBoolean, "parseBoolean");
|
|
316
317
|
function parseDate(required = true, def, validate, unique = false) {
|
|
317
318
|
const output = {
|
|
318
319
|
type: Date,
|
|
@@ -323,7 +324,6 @@ function parseDate(required = true, def, validate, unique = false) {
|
|
|
323
324
|
if (validate) output.validate = validate;
|
|
324
325
|
return output;
|
|
325
326
|
}
|
|
326
|
-
__name(parseDate, "parseDate");
|
|
327
327
|
function parseObjectId(required = true, ref, unique = false) {
|
|
328
328
|
const output = {
|
|
329
329
|
type: import_mongoose2.SchemaTypes.ObjectId,
|
|
@@ -333,19 +333,15 @@ function parseObjectId(required = true, ref, unique = false) {
|
|
|
333
333
|
if (ref) output.ref = ref;
|
|
334
334
|
return output;
|
|
335
335
|
}
|
|
336
|
-
__name(parseObjectId, "parseObjectId");
|
|
337
336
|
function parseArray(required = true, element, def) {
|
|
338
337
|
const innerType = parseField(element);
|
|
339
338
|
if (!innerType) throw new Error("Unsupported array type");
|
|
340
339
|
return {
|
|
341
|
-
type: [
|
|
342
|
-
innerType
|
|
343
|
-
],
|
|
340
|
+
type: [innerType],
|
|
344
341
|
default: def,
|
|
345
342
|
required
|
|
346
343
|
};
|
|
347
344
|
}
|
|
348
|
-
__name(parseArray, "parseArray");
|
|
349
345
|
function parseMap(required = true, key, def) {
|
|
350
346
|
const pointer = typeConstructor(key);
|
|
351
347
|
return {
|
|
@@ -355,7 +351,6 @@ function parseMap(required = true, key, def) {
|
|
|
355
351
|
required
|
|
356
352
|
};
|
|
357
353
|
}
|
|
358
|
-
__name(parseMap, "parseMap");
|
|
359
354
|
function typeConstructor(t) {
|
|
360
355
|
switch (true) {
|
|
361
356
|
case zmAssert.string(t):
|
|
@@ -374,7 +369,6 @@ function typeConstructor(t) {
|
|
|
374
369
|
return void 0;
|
|
375
370
|
}
|
|
376
371
|
}
|
|
377
|
-
__name(typeConstructor, "typeConstructor");
|
|
378
372
|
function parseUUID(required = true, unique = false) {
|
|
379
373
|
return {
|
|
380
374
|
type: import_mongoose2.SchemaTypes.UUID,
|
|
@@ -382,7 +376,6 @@ function parseUUID(required = true, unique = false) {
|
|
|
382
376
|
unique
|
|
383
377
|
};
|
|
384
378
|
}
|
|
385
|
-
__name(parseUUID, "parseUUID");
|
|
386
379
|
function parseMixed(required = true, def) {
|
|
387
380
|
return {
|
|
388
381
|
type: import_mongoose2.SchemaTypes.Mixed,
|
|
@@ -390,7 +383,6 @@ function parseMixed(required = true, def) {
|
|
|
390
383
|
required
|
|
391
384
|
};
|
|
392
385
|
}
|
|
393
|
-
__name(parseMixed, "parseMixed");
|
|
394
386
|
var src_default = zodSchema;
|
|
395
387
|
// Annotate the CommonJS export names for ESM import in node:
|
|
396
388
|
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 (opts) {\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n }\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
|
|
|
@@ -100,8 +81,10 @@ function extendZod(z_0) {
|
|
|
100
81
|
z_0.ZodType.prototype.refine = function(check, opts) {
|
|
101
82
|
const zEffect = _refine.bind(this)(check, opts);
|
|
102
83
|
let message = void 0;
|
|
103
|
-
if (
|
|
104
|
-
|
|
84
|
+
if (opts) {
|
|
85
|
+
if (typeof opts === "string") message = opts;
|
|
86
|
+
else if ("message" in opts) message = opts.message;
|
|
87
|
+
}
|
|
105
88
|
zEffect._def.effect.__zm_validation = {
|
|
106
89
|
validator: check,
|
|
107
90
|
message
|
|
@@ -121,13 +104,10 @@ function extendZod(z_0) {
|
|
|
121
104
|
return this;
|
|
122
105
|
};
|
|
123
106
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}).or(z.instanceof(Types.ObjectId));
|
|
129
|
-
}, "createId");
|
|
130
|
-
var zId = /* @__PURE__ */ __name((ref) => {
|
|
107
|
+
var createId = () => {
|
|
108
|
+
return z.string().refine((v) => isValidObjectId(v), { message: "Invalid ObjectId" }).or(z.instanceof(Types.ObjectId));
|
|
109
|
+
};
|
|
110
|
+
var zId = (ref) => {
|
|
131
111
|
const output = createId();
|
|
132
112
|
output.__zm_type = "ObjectId";
|
|
133
113
|
output.__zm_ref = ref;
|
|
@@ -140,13 +120,11 @@ var zId = /* @__PURE__ */ __name((ref) => {
|
|
|
140
120
|
return this;
|
|
141
121
|
};
|
|
142
122
|
return output;
|
|
143
|
-
}
|
|
144
|
-
var createUUID =
|
|
145
|
-
return z.string().uuid({
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}, "createUUID");
|
|
149
|
-
var zUUID = /* @__PURE__ */ __name(() => {
|
|
123
|
+
};
|
|
124
|
+
var createUUID = () => {
|
|
125
|
+
return z.string().uuid({ message: "Invalid UUID" }).or(z.instanceof(Types.UUID));
|
|
126
|
+
};
|
|
127
|
+
var zUUID = () => {
|
|
150
128
|
const output = createUUID();
|
|
151
129
|
output.__zm_type = "UUID";
|
|
152
130
|
output.unique = function(val = true) {
|
|
@@ -154,18 +132,16 @@ var zUUID = /* @__PURE__ */ __name(() => {
|
|
|
154
132
|
return this;
|
|
155
133
|
};
|
|
156
134
|
return output;
|
|
157
|
-
}
|
|
135
|
+
};
|
|
158
136
|
|
|
159
137
|
// src/index.ts
|
|
160
138
|
function zodSchema(schema, options) {
|
|
161
139
|
const definition = parseObject(schema);
|
|
162
140
|
return new Schema(definition, options);
|
|
163
141
|
}
|
|
164
|
-
__name(zodSchema, "zodSchema");
|
|
165
142
|
function zodSchemaRaw(schema) {
|
|
166
143
|
return parseObject(schema);
|
|
167
144
|
}
|
|
168
|
-
__name(zodSchemaRaw, "zodSchemaRaw");
|
|
169
145
|
function parseObject(obj) {
|
|
170
146
|
const object = {};
|
|
171
147
|
for (const [key, field] of Object.entries(obj.shape)) {
|
|
@@ -179,7 +155,6 @@ function parseObject(obj) {
|
|
|
179
155
|
}
|
|
180
156
|
return object;
|
|
181
157
|
}
|
|
182
|
-
__name(parseObject, "parseObject");
|
|
183
158
|
function parseField(field, required = true, def, refinement) {
|
|
184
159
|
if (zmAssert.objectId(field)) {
|
|
185
160
|
const ref = field.__zm_ref;
|
|
@@ -195,11 +170,23 @@ function parseField(field, required = true, def, refinement) {
|
|
|
195
170
|
}
|
|
196
171
|
if (zmAssert.number(field)) {
|
|
197
172
|
const isUnique = field.__zm_unique ?? false;
|
|
198
|
-
return parseNumber(
|
|
173
|
+
return parseNumber(
|
|
174
|
+
field,
|
|
175
|
+
required,
|
|
176
|
+
def,
|
|
177
|
+
isUnique,
|
|
178
|
+
refinement
|
|
179
|
+
);
|
|
199
180
|
}
|
|
200
181
|
if (zmAssert.string(field)) {
|
|
201
182
|
const isUnique = field.__zm_unique ?? false;
|
|
202
|
-
return parseString(
|
|
183
|
+
return parseString(
|
|
184
|
+
field,
|
|
185
|
+
required,
|
|
186
|
+
def,
|
|
187
|
+
isUnique,
|
|
188
|
+
refinement
|
|
189
|
+
);
|
|
203
190
|
}
|
|
204
191
|
if (zmAssert.enumerable(field)) {
|
|
205
192
|
return parseEnum(Object.keys(field.Values), required, def);
|
|
@@ -209,13 +196,26 @@ function parseField(field, required = true, def, refinement) {
|
|
|
209
196
|
}
|
|
210
197
|
if (zmAssert.date(field)) {
|
|
211
198
|
const isUnique = field.__zm_unique ?? false;
|
|
212
|
-
return parseDate(
|
|
199
|
+
return parseDate(
|
|
200
|
+
required,
|
|
201
|
+
def,
|
|
202
|
+
refinement,
|
|
203
|
+
isUnique
|
|
204
|
+
);
|
|
213
205
|
}
|
|
214
206
|
if (zmAssert.array(field)) {
|
|
215
|
-
return parseArray(
|
|
207
|
+
return parseArray(
|
|
208
|
+
required,
|
|
209
|
+
field.element,
|
|
210
|
+
def
|
|
211
|
+
);
|
|
216
212
|
}
|
|
217
213
|
if (zmAssert.def(field)) {
|
|
218
|
-
return parseField(
|
|
214
|
+
return parseField(
|
|
215
|
+
field._def.innerType,
|
|
216
|
+
required,
|
|
217
|
+
field._def.defaultValue()
|
|
218
|
+
);
|
|
219
219
|
}
|
|
220
220
|
if (zmAssert.optional(field)) {
|
|
221
221
|
return parseField(field._def.innerType, false, void 0);
|
|
@@ -230,7 +230,11 @@ function parseField(field, required = true, def, refinement) {
|
|
|
230
230
|
return parseMixed(required, def);
|
|
231
231
|
}
|
|
232
232
|
if (zmAssert.mapOrRecord(field)) {
|
|
233
|
-
return parseMap(
|
|
233
|
+
return parseMap(
|
|
234
|
+
required,
|
|
235
|
+
field.keySchema,
|
|
236
|
+
def
|
|
237
|
+
);
|
|
234
238
|
}
|
|
235
239
|
if (zmAssert.effect(field)) {
|
|
236
240
|
const effect = field._def.effect;
|
|
@@ -241,7 +245,6 @@ function parseField(field, required = true, def, refinement) {
|
|
|
241
245
|
}
|
|
242
246
|
return null;
|
|
243
247
|
}
|
|
244
|
-
__name(parseField, "parseField");
|
|
245
248
|
function parseNumber(field, required = true, def, unique = false, validate) {
|
|
246
249
|
const output = {
|
|
247
250
|
type: Number,
|
|
@@ -254,7 +257,6 @@ function parseNumber(field, required = true, def, unique = false, validate) {
|
|
|
254
257
|
if (validate) output.validate = validate;
|
|
255
258
|
return output;
|
|
256
259
|
}
|
|
257
|
-
__name(parseNumber, "parseNumber");
|
|
258
260
|
function parseString(field, required = true, def, unique = false, validate) {
|
|
259
261
|
const output = {
|
|
260
262
|
type: String,
|
|
@@ -267,7 +269,6 @@ function parseString(field, required = true, def, unique = false, validate) {
|
|
|
267
269
|
if (validate) output.validate = validate;
|
|
268
270
|
return output;
|
|
269
271
|
}
|
|
270
|
-
__name(parseString, "parseString");
|
|
271
272
|
function parseEnum(values, required = true, def) {
|
|
272
273
|
return {
|
|
273
274
|
type: String,
|
|
@@ -277,7 +278,6 @@ function parseEnum(values, required = true, def) {
|
|
|
277
278
|
required
|
|
278
279
|
};
|
|
279
280
|
}
|
|
280
|
-
__name(parseEnum, "parseEnum");
|
|
281
281
|
function parseBoolean(required = true, def) {
|
|
282
282
|
return {
|
|
283
283
|
type: Boolean,
|
|
@@ -285,7 +285,6 @@ function parseBoolean(required = true, def) {
|
|
|
285
285
|
required
|
|
286
286
|
};
|
|
287
287
|
}
|
|
288
|
-
__name(parseBoolean, "parseBoolean");
|
|
289
288
|
function parseDate(required = true, def, validate, unique = false) {
|
|
290
289
|
const output = {
|
|
291
290
|
type: Date,
|
|
@@ -296,7 +295,6 @@ function parseDate(required = true, def, validate, unique = false) {
|
|
|
296
295
|
if (validate) output.validate = validate;
|
|
297
296
|
return output;
|
|
298
297
|
}
|
|
299
|
-
__name(parseDate, "parseDate");
|
|
300
298
|
function parseObjectId(required = true, ref, unique = false) {
|
|
301
299
|
const output = {
|
|
302
300
|
type: SchemaTypes.ObjectId,
|
|
@@ -306,19 +304,15 @@ function parseObjectId(required = true, ref, unique = false) {
|
|
|
306
304
|
if (ref) output.ref = ref;
|
|
307
305
|
return output;
|
|
308
306
|
}
|
|
309
|
-
__name(parseObjectId, "parseObjectId");
|
|
310
307
|
function parseArray(required = true, element, def) {
|
|
311
308
|
const innerType = parseField(element);
|
|
312
309
|
if (!innerType) throw new Error("Unsupported array type");
|
|
313
310
|
return {
|
|
314
|
-
type: [
|
|
315
|
-
innerType
|
|
316
|
-
],
|
|
311
|
+
type: [innerType],
|
|
317
312
|
default: def,
|
|
318
313
|
required
|
|
319
314
|
};
|
|
320
315
|
}
|
|
321
|
-
__name(parseArray, "parseArray");
|
|
322
316
|
function parseMap(required = true, key, def) {
|
|
323
317
|
const pointer = typeConstructor(key);
|
|
324
318
|
return {
|
|
@@ -328,7 +322,6 @@ function parseMap(required = true, key, def) {
|
|
|
328
322
|
required
|
|
329
323
|
};
|
|
330
324
|
}
|
|
331
|
-
__name(parseMap, "parseMap");
|
|
332
325
|
function typeConstructor(t) {
|
|
333
326
|
switch (true) {
|
|
334
327
|
case zmAssert.string(t):
|
|
@@ -347,7 +340,6 @@ function typeConstructor(t) {
|
|
|
347
340
|
return void 0;
|
|
348
341
|
}
|
|
349
342
|
}
|
|
350
|
-
__name(typeConstructor, "typeConstructor");
|
|
351
343
|
function parseUUID(required = true, unique = false) {
|
|
352
344
|
return {
|
|
353
345
|
type: SchemaTypes.UUID,
|
|
@@ -355,7 +347,6 @@ function parseUUID(required = true, unique = false) {
|
|
|
355
347
|
unique
|
|
356
348
|
};
|
|
357
349
|
}
|
|
358
|
-
__name(parseUUID, "parseUUID");
|
|
359
350
|
function parseMixed(required = true, def) {
|
|
360
351
|
return {
|
|
361
352
|
type: SchemaTypes.Mixed,
|
|
@@ -363,7 +354,6 @@ function parseMixed(required = true, def) {
|
|
|
363
354
|
required
|
|
364
355
|
};
|
|
365
356
|
}
|
|
366
|
-
__name(parseMixed, "parseMixed");
|
|
367
357
|
var src_default = zodSchema;
|
|
368
358
|
export {
|
|
369
359
|
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":"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","names":["Schema","SchemaTypes","zmAssert","string","f","constructor","name","number","object","array","boolean","enumerable","date","objectId","__zm_type","uuid","def","optional","nullable","union","any","mapOrRecord","effect","Types","isValidObjectId","z","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","zmAssert","f","parseField","Error","constructor","required","def","refinement","objectId","ref","__zm_ref","unique","__zm_unique","parseObjectId","uuid","parseUUID","number","isUnique","parseNumber","string","parseString","enumerable","parseEnum","keys","Values","boolean","parseBoolean","date","parseDate","array","parseArray","element","_def","innerType","defaultValue","optional","undefined","nullable","union","any","parseMixed","mapOrRecord","parseMap","keySchema","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
|
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 (opts) {\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n }\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.3",
|
|
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,
|