@zodyac/zod-mongoose 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 4.2.0 - 2025-08-31
11
+
12
+ ## 4.1.0 - 2025-05-30
13
+
10
14
  ## 4.0.0 - 2025-05-23
11
15
 
12
16
  ## 3.2.0 - 2025-01-12
package/README.md CHANGED
@@ -95,6 +95,7 @@ Full support list can be found in [SUPPORTED.md](./SUPPORTED.md):
95
95
  - ✅ ZodAny as SchemaTypes.Mixed
96
96
  - ✅ Validation using refinement for String, Number, Date
97
97
  - ✅ Unique for String, Number, Date, ObjectId and UUID
98
+ - ✅ Sparse for String, Number, Date, ObjectId and UUID
98
99
 
99
100
  - ⚠️ Record (Being converted to Map)
100
101
  - ⚠️ Unions (Not supported by mongoose, will pick first inner type)
@@ -202,6 +203,24 @@ const zUser = z.object({
202
203
  //
203
204
  ```
204
205
 
206
+ ## sparse fields
207
+
208
+ To make a String, Number or Date sparse, call `.sparse()`:
209
+
210
+ ```typescript
211
+ import { z } from "zod";
212
+ import { extendZod, zodSchema } from "@zodyac/zod-mongoose";
213
+
214
+ extendZod(z);
215
+
216
+ const zUser = z.object({
217
+ email: z.string().sparse(),
218
+ // with unique
219
+ // email: z.string()..unique().sparse(),
220
+ });
221
+
222
+ //
223
+ ```
205
224
  ## Warnings
206
225
 
207
226
  ### ZodUnion types
package/dist/index.cjs CHANGED
@@ -200,15 +200,18 @@ var import_mongoose = require("mongoose");
200
200
  var import_zod2 = require("zod");
201
201
  var zod_extended = false;
202
202
  function extendZod(z_0) {
203
- if (zod_extended) return;
203
+ if (zod_extended)
204
+ return;
204
205
  zod_extended = true;
205
206
  const _refine = z_0.ZodType.prototype.refine;
206
207
  z_0.ZodType.prototype.refine = function(check, opts) {
207
208
  const zEffect = _refine.bind(this)(check, opts);
208
209
  let message = void 0;
209
210
  if (opts) {
210
- if (typeof opts === "string") message = opts;
211
- else if ("message" in opts) message = opts.message;
211
+ if (typeof opts === "string")
212
+ message = opts;
213
+ else if ("message" in opts)
214
+ message = opts.message;
212
215
  }
213
216
  zEffect._def.effect.__zm_validation = {
214
217
  validator: check,
@@ -222,6 +225,10 @@ function extendZod(z_0) {
222
225
  this.__zm_unique = arg;
223
226
  return this;
224
227
  };
228
+ type.prototype.sparse = function(arg = true) {
229
+ this.__zm_sparse = arg;
230
+ return this;
231
+ };
225
232
  }
226
233
  const TypesMap = {
227
234
  String: z_0.ZodString,
@@ -263,6 +270,10 @@ var zId = (ref) => {
263
270
  this.__zm_unique = val;
264
271
  return this;
265
272
  };
273
+ output.sparse = function(val = true) {
274
+ this.__zm_sparse = val;
275
+ return this;
276
+ };
266
277
  return output;
267
278
  };
268
279
  var createUUID = () => {
@@ -284,6 +295,10 @@ var zUUID = (ref) => {
284
295
  this.__zm_unique = val;
285
296
  return this;
286
297
  };
298
+ output.sparse = function(val = true) {
299
+ this.__zm_sparse = val;
300
+ return this;
301
+ };
287
302
  return output;
288
303
  };
289
304
 
@@ -302,7 +317,8 @@ function parseObject(obj) {
302
317
  object[key] = parseObject(field);
303
318
  } else {
304
319
  const f = parseField(field);
305
- if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);
320
+ if (!f)
321
+ throw new Error(`Unsupported field type: ${field.constructor}`);
306
322
  object[key] = f;
307
323
  }
308
324
  }
@@ -313,35 +329,41 @@ function parseField(field, required = true, def, refinement) {
313
329
  const ref = field.__zm_ref;
314
330
  const refPath = field.__zm_refPath;
315
331
  const unique = field.__zm_unique;
316
- return parseObjectId(required, ref, unique, refPath);
332
+ const sparse = field.__zm_sparse;
333
+ return parseObjectId(required, ref, unique, refPath, sparse);
317
334
  }
318
335
  if (assertions_default.uuid(field)) {
319
336
  const ref = field.__zm_ref;
320
337
  const refPath = field.__zm_refPath;
321
338
  const unique = field.__zm_unique;
322
- return parseUUID(required, ref, unique, refPath);
339
+ const sparse = field.__zm_unique;
340
+ return parseUUID(required, ref, unique, refPath, sparse);
323
341
  }
324
342
  if (assertions_default.object(field)) {
325
343
  return parseObject(field);
326
344
  }
327
345
  if (assertions_default.number(field)) {
328
346
  const isUnique = field.__zm_unique ?? false;
347
+ const isSparse = field.__zm_sparse ?? false;
329
348
  return parseNumber(
330
349
  field,
331
350
  required,
332
351
  def,
333
352
  isUnique,
334
- refinement
353
+ refinement,
354
+ isSparse
335
355
  );
336
356
  }
337
357
  if (assertions_default.string(field)) {
338
358
  const isUnique = field.__zm_unique ?? false;
359
+ const isSparse = field.__zm_sparse ?? false;
339
360
  return parseString(
340
361
  field,
341
362
  required,
342
363
  def,
343
364
  isUnique,
344
- refinement
365
+ refinement,
366
+ isSparse
345
367
  );
346
368
  }
347
369
  if (assertions_default.enumerable(field)) {
@@ -352,11 +374,13 @@ function parseField(field, required = true, def, refinement) {
352
374
  }
353
375
  if (assertions_default.date(field)) {
354
376
  const isUnique = field.__zm_unique ?? false;
377
+ const isSparse = field.__zm_sparse ?? false;
355
378
  return parseDate(
356
379
  required,
357
380
  def,
358
381
  refinement,
359
- isUnique
382
+ isUnique,
383
+ isSparse
360
384
  );
361
385
  }
362
386
  if (assertions_default.array(field)) {
@@ -367,13 +391,17 @@ function parseField(field, required = true, def, refinement) {
367
391
  );
368
392
  }
369
393
  if (assertions_default.def(field)) {
370
- return parseField(field._def.innerType, required, field._def.defaultValue());
394
+ return parseField(field._def.innerType, required, field._def.defaultValue);
371
395
  }
372
396
  if (assertions_default.optional(field)) {
373
397
  return parseField(field._def.innerType, false, void 0);
374
398
  }
375
399
  if (assertions_default.nullable(field)) {
376
- return parseField(field._def.innerType, false, def || null);
400
+ return parseField(
401
+ field._def.innerType,
402
+ false,
403
+ typeof def !== "undefined" ? def : () => null
404
+ );
377
405
  }
378
406
  if (assertions_default.union(field)) {
379
407
  return parseField(field._def.options[0]);
@@ -394,37 +422,45 @@ function parseField(field, required = true, def, refinement) {
394
422
  const validation = effect.__zm_validation;
395
423
  return parseField(field._def.schema, required, def, validation);
396
424
  }
425
+ if (effect.type === "preprocess" || effect.type === "transform") {
426
+ return parseField(field._def.schema, required, def, refinement);
427
+ }
397
428
  }
398
429
  return null;
399
430
  }
400
- function parseNumber(field, required = true, def, unique = false, validate) {
431
+ function parseNumber(field, required = true, def, unique = false, validate, sparse = false) {
401
432
  const output = {
402
433
  type: Number,
403
434
  default: def,
404
435
  min: field.minValue ?? void 0,
405
436
  max: field.maxValue ?? void 0,
406
437
  required,
407
- unique
438
+ unique,
439
+ sparse
408
440
  };
409
- if (validate) output.validate = validate;
441
+ if (validate)
442
+ output.validate = validate;
410
443
  return output;
411
444
  }
412
- function parseString(field, required = true, def, unique = false, validate) {
445
+ function parseString(field, required = true, def, unique = false, validate, sparse = false) {
413
446
  const output = {
414
447
  type: String,
415
448
  default: def,
416
449
  required,
417
450
  minLength: field.minLength ?? void 0,
418
451
  maxLength: field.maxLength ?? void 0,
419
- unique
452
+ unique,
453
+ sparse
420
454
  };
421
- if (validate) output.validate = validate;
455
+ if (validate)
456
+ output.validate = validate;
422
457
  return output;
423
458
  }
424
459
  function parseEnum(values, required = true, def) {
425
460
  return {
426
461
  type: String,
427
462
  unique: false,
463
+ sparse: false,
428
464
  default: def,
429
465
  enum: values,
430
466
  required
@@ -437,29 +473,35 @@ function parseBoolean(required = true, def) {
437
473
  required
438
474
  };
439
475
  }
440
- function parseDate(required = true, def, validate, unique = false) {
476
+ function parseDate(required = true, def, validate, unique = false, sparse = false) {
441
477
  const output = {
442
478
  type: Date,
443
479
  default: def,
444
480
  required,
445
- unique
481
+ unique,
482
+ sparse
446
483
  };
447
- if (validate) output.validate = validate;
484
+ if (validate)
485
+ output.validate = validate;
448
486
  return output;
449
487
  }
450
- function parseObjectId(required = true, ref, unique = false, refPath) {
488
+ function parseObjectId(required = true, ref, unique = false, refPath, sparse = false) {
451
489
  const output = {
452
490
  type: import_mongoose2.SchemaTypes.ObjectId,
453
491
  required,
454
- unique
492
+ unique,
493
+ sparse
455
494
  };
456
- if (ref) output.ref = ref;
457
- if (refPath) output.refPath = refPath;
495
+ if (ref)
496
+ output.ref = ref;
497
+ if (refPath)
498
+ output.refPath = refPath;
458
499
  return output;
459
500
  }
460
501
  function parseArray(required = true, element, def) {
461
502
  const innerType = parseField(element);
462
- if (!innerType) throw new Error("Unsupported array type");
503
+ if (!innerType)
504
+ throw new Error("Unsupported array type");
463
505
  return {
464
506
  type: [innerType],
465
507
  default: def,
@@ -468,7 +510,8 @@ function parseArray(required = true, element, def) {
468
510
  }
469
511
  function parseMap(required = true, valueType, def) {
470
512
  const pointer = parseField(valueType);
471
- if (!pointer) throw new Error("Unsupported map value type");
513
+ if (!pointer)
514
+ throw new Error("Unsupported map value type");
472
515
  return {
473
516
  type: Map,
474
517
  of: pointer,
@@ -476,14 +519,17 @@ function parseMap(required = true, valueType, def) {
476
519
  required
477
520
  };
478
521
  }
479
- function parseUUID(required = true, ref, unique = false, refPath) {
522
+ function parseUUID(required = true, ref, unique = false, refPath, sparse = false) {
480
523
  const output = {
481
524
  type: import_mongoose2.SchemaTypes.UUID,
482
525
  required,
483
- unique
526
+ unique,
527
+ sparse
484
528
  };
485
- if (ref) output.ref = ref;
486
- if (refPath) output.refPath = refPath;
529
+ if (ref)
530
+ output.ref = ref;
531
+ if (refPath)
532
+ output.refPath = refPath;
487
533
  return output;
488
534
  }
489
535
  function parseMixed(required = true, def) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/assertions/constructor.ts","../src/assertions/custom.ts","../src/assertions/instanceOf.ts","../src/assertions/staticNames.ts","../src/assertions/assertions.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport type { ZodNumber, ZodObject, ZodRawShape, ZodString, ZodType, z } from \"zod\";\nimport zmAssert from \"./assertions/assertions.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 (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 refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique, refPath);\n }\n\n if (zmAssert.uuid(field)) {\n const ref = (<any>field).__zm_ref;\n const refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, ref, unique, refPath);\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.valueSchema,\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(\n required = true,\n ref?: string,\n unique = false,\n refPath?: string,\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 if (refPath) output.refPath = refPath;\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 valueType: ZodType<K>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = parseField(valueType);\n if (!pointer) throw new Error(\"Unsupported map value type\");\n\n return {\n type: Map,\n of: pointer as zm._Field<K>,\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(\n required = true,\n ref?: string,\n unique = false,\n refPath?: string,\n): zm.mUUID {\n const output: zm.mUUID = {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n if (ref) output.ref = ref;\n if (refPath) output.refPath = refPath;\n return output;\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Constructor assertions (CommonJS)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the constructor name of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n },\n};\n","import type { ZodType } from \"zod\";\n\nexport namespace zmAssertIds {\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","import {\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 type ZodType,\n ZodUnion,\n} from \"zod\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Instance assertions (ESM)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the instance of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f instanceof ZodString;\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f instanceof ZodNumber;\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f instanceof ZodObject;\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f instanceof ZodArray;\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f instanceof ZodBoolean;\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f instanceof ZodEnum;\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f instanceof ZodDate;\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f instanceof ZodDefault;\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f instanceof ZodOptional;\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f instanceof ZodNullable;\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f instanceof ZodUnion;\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f instanceof ZodAny;\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f instanceof ZodMap || f instanceof ZodRecord;\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f instanceof ZodEffects;\n },\n};\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Static names assertions (Bundlers)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the `__zm_type` property of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return \"__zm_type\" in f && f.__zm_type === \"String\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return \"__zm_type\" in f && f.__zm_type === \"Number\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Object\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Array\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return \"__zm_type\" in f && f.__zm_type === \"Boolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Enum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return \"__zm_type\" in f && f.__zm_type === \"Date\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Default\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Optional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Nullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Union\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return \"__zm_type\" in f && f.__zm_type === \"Any\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return \"__zm_type\" in f && (f.__zm_type === \"Map\" || f.__zm_type === \"Record\");\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Effects\";\n },\n};\n","import type { ZodType } from \"zod\";\nimport { zmAssert as aConstructor } from \"./constructor\";\nimport { zmAssertIds } from \"./custom\";\nimport { zmAssert as aInstance } from \"./instanceOf\";\nimport { zmAssert as aStaticName } from \"./staticNames\";\nimport type { IAsserts } from \"./types\";\n\nconst assertions = [aConstructor, aInstance, aStaticName];\nconst zmAssert = Object.keys(aConstructor)\n .map((key) => key as keyof IAsserts)\n .reduce((acc, key) => {\n (<any>acc[key]) = (f: ZodType<any>) => {\n return assertions.some((assertion) => assertion[key](f));\n };\n\n return acc;\n }, {} as IAsserts);\n\nexport default {\n ...zmAssert,\n ...zmAssertIds,\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;\n/**\n * Extends the Zod library with additional functionality.\n *\n * This function modifies the Zod library to add custom validation and uniqueness checks.\n * It ensures that the extension is only applied once.\n *\n * @param z_0 - The Zod library to extend.\n *\n * @remarks\n * - Overrides `refine` method to `ZodType` that includes additional metadata for validation.\n * - Overrides `unique` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as unique.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n * import { extendZod } from \"./extension\";\n *\n * extendZod(z);\n *\n * const schema = z.object({\n * name: z.string().unique();\n * });\n * ```\n */\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 // Refine support\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 // Unique support\n const UNIQUE_SUPPORT_LIST = [z_0.ZodString, z_0.ZodNumber, z_0.ZodDate] as const;\n\n for (const type of UNIQUE_SUPPORT_LIST) {\n (<any>type.prototype).unique = function (arg = true) {\n (<any>this).__zm_unique = arg;\n return this;\n };\n }\n\n // Assign static names to Zod types\n const TypesMap = {\n String: z_0.ZodString,\n Number: z_0.ZodNumber,\n Object: z_0.ZodObject,\n Array: z_0.ZodArray,\n Boolean: z_0.ZodBoolean,\n Enum: z_0.ZodEnum,\n Date: z_0.ZodDate,\n Default: z_0.ZodDefault,\n Optional: z_0.ZodOptional,\n Nullable: z_0.ZodNullable,\n Union: z_0.ZodUnion,\n Any: z_0.ZodAny,\n Map: z_0.ZodMap,\n Record: z_0.ZodRecord,\n Effects: z_0.ZodEffects,\n };\n\n for (const [key, value] of Object.entries(TypesMap)) {\n (<any>value.prototype).__zm_type = key;\n }\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n refPath: (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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 ref: (arg: string) => TzmUUID;\n refPath: (arg: string) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (ref?: string): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 TzmUUID;\n};\n"],"mappings":"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","names":["import_mongoose","zmAssertIds","zmAssert","zmAssert","zmAssert","import_zod","ref"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/assertions/constructor.ts","../src/assertions/custom.ts","../src/assertions/instanceOf.ts","../src/assertions/staticNames.ts","../src/assertions/assertions.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport type { ZodNumber, ZodObject, ZodRawShape, ZodString, ZodType, z } from \"zod\";\n\nimport zmAssert from \"./assertions/assertions.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 (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?: zm.mDefault<T>,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n if (zmAssert.objectId(field)) {\n const ref = (<any>field).__zm_ref;\n const refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n const sparse = (<any>field).__zm_sparse;\n return parseObjectId(required, ref, unique, refPath, sparse);\n }\n\n if (zmAssert.uuid(field)) {\n const ref = (<any>field).__zm_ref;\n const refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n const sparse = (<any>field).__zm_unique;\n return parseUUID(required, ref, unique, refPath, sparse);\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 const isSparse = field.__zm_sparse ?? false;\n return parseNumber(\n field,\n required,\n def as zm.mDefault<number>,\n isUnique,\n refinement as zm.EffectValidator<number>,\n isSparse,\n );\n }\n\n if (zmAssert.string(field)) {\n const isUnique = field.__zm_unique ?? false;\n const isSparse = field.__zm_sparse ?? false;\n return parseString(\n field,\n required,\n def as zm.mDefault<string>,\n isUnique,\n refinement as zm.EffectValidator<string>,\n isSparse,\n );\n }\n\n if (zmAssert.enumerable(field)) {\n return parseEnum(Object.keys(field.Values), required, def as zm.mDefault<string>);\n }\n\n if (zmAssert.boolean(field)) {\n return parseBoolean(required, def as zm.mDefault<boolean>);\n }\n\n if (zmAssert.date(field)) {\n const isUnique = field.__zm_unique ?? false;\n const isSparse = field.__zm_sparse ?? false;\n return parseDate(\n required,\n def as zm.mDefault<Date>,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n isSparse,\n );\n }\n\n if (zmAssert.array(field)) {\n return parseArray(\n required,\n field.element,\n def as zm.mDefault<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(\n field._def.innerType,\n false,\n (typeof def !== \"undefined\" ? def : () => null) as zm.mDefault<null>,\n );\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.valueSchema,\n def as zm.mDefault<\n Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >\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 if (effect.type === \"preprocess\" || effect.type === \"transform\") {\n return parseField(field._def.schema, required, def, refinement);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: zm.mDefault<number>,\n unique = false,\n validate?: zm.EffectValidator<number>,\n sparse = false,\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 sparse,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: zm.mDefault<string>,\n unique = false,\n validate?: zm.EffectValidator<string>,\n sparse = false,\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 sparse,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(\n values: string[],\n required = true,\n def?: zm.mDefault<string>,\n): zm.mString {\n return {\n type: String,\n unique: false,\n sparse: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: zm.mDefault<boolean>): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: zm.mDefault<Date>,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n sparse = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n sparse,\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 refPath?: string,\n sparse = false,\n): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n sparse,\n };\n\n if (ref) output.ref = ref;\n if (refPath) output.refPath = refPath;\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?: zm.mDefault<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 valueType: ZodType<K>,\n def?: zm.mDefault<Map<NoInfer<T>, K>>,\n): zm.mMap<T, K> {\n const pointer = parseField(valueType);\n if (!pointer) throw new Error(\"Unsupported map value type\");\n\n return {\n type: Map,\n of: pointer as zm._Field<K>,\n default: def,\n required,\n };\n}\n\nfunction parseUUID(\n required = true,\n ref?: string,\n unique = false,\n refPath?: string,\n sparse = false,\n): zm.mUUID {\n const output: zm.mUUID = {\n type: SchemaTypes.UUID,\n required,\n unique,\n sparse,\n };\n if (ref) output.ref = ref;\n if (refPath) output.refPath = refPath;\n return output;\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def as unknown as any,\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Constructor assertions (CommonJS)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the constructor name of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n },\n};\n","import type { ZodType } from \"zod\";\n\nexport namespace zmAssertIds {\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","import {\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 type ZodType,\n ZodUnion,\n} from \"zod\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Instance assertions (ESM)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the instance of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f instanceof ZodString;\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f instanceof ZodNumber;\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f instanceof ZodObject;\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f instanceof ZodArray;\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f instanceof ZodBoolean;\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f instanceof ZodEnum;\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f instanceof ZodDate;\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f instanceof ZodDefault;\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f instanceof ZodOptional;\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f instanceof ZodNullable;\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f instanceof ZodUnion;\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f instanceof ZodAny;\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f instanceof ZodMap || f instanceof ZodRecord;\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f instanceof ZodEffects;\n },\n};\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Static names assertions (Bundlers)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the `__zm_type` property of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return \"__zm_type\" in f && f.__zm_type === \"String\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return \"__zm_type\" in f && f.__zm_type === \"Number\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Object\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Array\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return \"__zm_type\" in f && f.__zm_type === \"Boolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Enum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return \"__zm_type\" in f && f.__zm_type === \"Date\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Default\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Optional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Nullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Union\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return \"__zm_type\" in f && f.__zm_type === \"Any\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return \"__zm_type\" in f && (f.__zm_type === \"Map\" || f.__zm_type === \"Record\");\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Effects\";\n },\n};\n","import type { ZodType } from \"zod\";\nimport { zmAssert as aConstructor } from \"./constructor\";\nimport { zmAssertIds } from \"./custom\";\nimport { zmAssert as aInstance } from \"./instanceOf\";\nimport { zmAssert as aStaticName } from \"./staticNames\";\nimport type { IAsserts } from \"./types\";\n\nconst assertions = [aConstructor, aInstance, aStaticName];\nconst zmAssert = Object.keys(aConstructor)\n .map((key) => key as keyof IAsserts)\n .reduce((acc, key) => {\n (<any>acc[key]) = (f: ZodType<any>) => {\n return assertions.some((assertion) => assertion[key](f));\n };\n\n return acc;\n }, {} as IAsserts);\n\nexport default {\n ...zmAssert,\n ...zmAssertIds,\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 sparse: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n __zm_sparse: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n sparse: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n __zm_sparse: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n sparse: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n __zm_sparse: 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;\n/**\n * Extends the Zod library with additional functionality.\n *\n * This function modifies the Zod library to add custom validation and uniqueness checks.\n * It ensures that the extension is only applied once.\n *\n * @param z_0 - The Zod library to extend.\n *\n * @remarks\n * - Overrides `refine` method to `ZodType` that includes additional metadata for validation.\n * - Overrides `unique` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as unique.\n * - Overrides `sparse` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as sparse.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n * import { extendZod } from \"./extension\";\n *\n * extendZod(z);\n *\n * const schema = z.object({\n * name: z.string().unique();\n * });\n * ```\n */\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 // Refine support\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 // Unique support\n const UNIQUE_SUPPORT_LIST = [z_0.ZodString, z_0.ZodNumber, z_0.ZodDate] as const;\n\n for (const type of UNIQUE_SUPPORT_LIST) {\n (<any>type.prototype).unique = function (arg = true) {\n (<any>this).__zm_unique = arg;\n return this;\n };\n\n (<any>type.prototype).sparse = function (arg = true) {\n (<any>this).__zm_sparse = arg;\n return this;\n };\n }\n\n // Assign static names to Zod types\n const TypesMap = {\n String: z_0.ZodString,\n Number: z_0.ZodNumber,\n Object: z_0.ZodObject,\n Array: z_0.ZodArray,\n Boolean: z_0.ZodBoolean,\n Enum: z_0.ZodEnum,\n Date: z_0.ZodDate,\n Default: z_0.ZodDefault,\n Optional: z_0.ZodOptional,\n Nullable: z_0.ZodNullable,\n Union: z_0.ZodUnion,\n Any: z_0.ZodAny,\n Map: z_0.ZodMap,\n Record: z_0.ZodRecord,\n Effects: z_0.ZodEffects,\n };\n\n for (const [key, value] of Object.entries(TypesMap)) {\n (<any>value.prototype).__zm_type = key;\n }\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n sparse: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n refPath: (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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 (<any>output).sparse = function (val = true) {\n (<any>this).__zm_sparse = 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 sparse: (arg?: boolean) => TzmUUID;\n ref: (arg: string) => TzmUUID;\n refPath: (arg: string) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (ref?: string): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 (<any>output).sparse = function (val = true) {\n (<any>this).__zm_sparse = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAAwD;;;AC2BjD,IAAM,WAAqB;AAAA,EAChC,OAAO,GAAiC;AACtC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,OAAO,GAAiC;AACtC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,OAAO,GAAsC;AAC3C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,QAAQ,GAAkC;AACxC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,WAAW,GAAoC;AAC7C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,KAAK,GAA+B;AAClC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,IAAI,GAAuC;AACzC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,IAAI,GAA8B;AAChC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,YAAY,GAAoD;AAC9D,WAAO,EAAE,YAAY,SAAS,YAAY,EAAE,YAAY,SAAS;AAAA,EACnE;AAAA,EAEA,OAAO,GAAuC;AAC5C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AACF;;;ACjFO,IAAU;AAAA,CAAV,CAAUC,iBAAV;AACE,WAAS,SAAS,GAAuC;AAC9D,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAFO,EAAAA,aAAS;AAIT,WAAS,KAAK,GAAuC;AAC1D,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAFO,EAAAA,aAAS;AAAA,GALD;;;ACFjB,iBAiBO;AAUA,IAAMC,YAAqB;AAAA,EAChC,OAAO,GAAiC;AACtC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,OAAO,GAAiC;AACtC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,OAAO,GAAsC;AAC3C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,QAAQ,GAAkC;AACxC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,WAAW,GAAoC;AAC7C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,KAAK,GAA+B;AAClC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,GAAuC;AACzC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,GAA8B;AAChC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,YAAY,GAAoD;AAC9D,WAAO,aAAa,qBAAU,aAAa;AAAA,EAC7C;AAAA,EAEA,OAAO,GAAuC;AAC5C,WAAO,aAAa;AAAA,EACtB;AACF;;;ACxDO,IAAMC,YAAqB;AAAA,EAChC,OAAO,GAAiC;AACtC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,OAAO,GAAiC;AACtC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,OAAO,GAAsC;AAC3C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,QAAQ,GAAkC;AACxC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,WAAW,GAAoC;AAC7C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,KAAK,GAA+B;AAClC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,IAAI,GAAuC;AACzC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,IAAI,GAA8B;AAChC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,YAAY,GAAoD;AAC9D,WAAO,eAAe,MAAM,EAAE,cAAc,SAAS,EAAE,cAAc;AAAA,EACvE;AAAA,EAEA,OAAO,GAAuC;AAC5C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AACF;;;AC5EA,IAAM,aAAa,CAAC,UAAcC,WAAWA,SAAW;AACxD,IAAMA,YAAW,OAAO,KAAK,QAAY,EACtC,IAAI,CAAC,QAAQ,GAAqB,EAClC,OAAO,CAAC,KAAK,QAAQ;AACpB,EAAM,IAAI,GAAG,IAAK,CAAC,MAAoB;AACrC,WAAO,WAAW,KAAK,CAAC,cAAc,UAAU,GAAG,EAAE,CAAC,CAAC;AAAA,EACzD;AAEA,SAAO;AACT,GAAG,CAAC,CAAa;AAEnB,IAAO,qBAAQ;AAAA,EACb,GAAGA;AAAA,EACH,GAAG;AACL;;;ACrBA,sBAAuC;AACvC,IAAAC,cAA0C;AAiC1C,IAAI,eAAe;AA0BZ,SAAS,UAAU,KAAe;AAEvC,MAAI;AAAc;AAClB,iBAAe;AAGf,QAAM,UAAU,IAAI,QAAQ,UAAU;AACtC,MAAI,QAAQ,UAAU,SAAS,SAC7B,OACA,MACA;AACA,UAAM,UAAU,QAAQ,KAAK,IAAI,EAAE,OAAO,IAAI;AAE9C,QAAI,UAA+D;AACnE,QAAI,MAAM;AACR,UAAI,OAAO,SAAS;AAAU,kBAAU;AAAA,eAC/B,aAAa;AAAM,kBAAU,KAAK;AAAA,IAC7C;AAEA,IAAM,QAAQ,KAAK,OAAQ,kBAAkB;AAAA,MAC3C,WAAW;AAAA,MACX;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,sBAAsB,CAAC,IAAI,WAAW,IAAI,WAAW,IAAI,OAAO;AAEtE,aAAW,QAAQ,qBAAqB;AACtC,IAAM,KAAK,UAAW,SAAS,SAAU,MAAM,MAAM;AACnD,MAAM,KAAM,cAAc;AAC1B,aAAO;AAAA,IACT;AAEA,IAAM,KAAK,UAAW,SAAS,SAAU,MAAM,MAAM;AACnD,MAAM,KAAM,cAAc;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AAGA,QAAM,WAAW;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,IACX,SAAS,IAAI;AAAA,IACb,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,SAAS,IAAI;AAAA,IACb,UAAU,IAAI;AAAA,IACd,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,KAAK,IAAI;AAAA,IACT,KAAK,IAAI;AAAA,IACT,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,EACf;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,IAAM,MAAM,UAAW,YAAY;AAAA,EACrC;AACF;AASA,IAAM,WAAW,MAAM;AACrB,SAAO,cACJ,OAAO,EACP,OAAO,CAAC,UAAM,iCAAgB,CAAC,GAAG,EAAE,SAAS,mBAAmB,CAAC,EACjE,GAAG,cAAE,WAAW,sBAAM,QAAQ,CAAC;AACpC;AAEO,IAAM,MAAM,CAAC,QAAwB;AAC1C,QAAM,SAAS,SAAS;AAExB,EAAM,OAAQ,YAAY;AAC1B,EAAM,OAAQ,WAAW;AAEzB,EAAM,OAAQ,MAAM,SAAUC,MAAa;AACzC,IAAM,KAAM,WAAWA;AACvB,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,UAAU,SAAUA,MAAa;AAC7C,IAAM,KAAM,eAAeA;AAC3B,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,SAAS,SAAU,MAAM,MAAM;AAC3C,IAAM,KAAM,cAAc;AAC1B,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,SAAS,SAAU,MAAM,MAAM;AAC3C,IAAM,KAAM,cAAc;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AASA,IAAM,aAAa,MAAM;AACvB,SAAO,cAAE,OAAO,EAAE,KAAK,EAAE,SAAS,eAAe,CAAC,EAAE,GAAG,cAAE,WAAW,sBAAM,IAAI,CAAC;AACjF;AAEO,IAAM,QAAQ,CAAC,QAA0B;AAC9C,QAAM,SAAS,WAAW;AAE1B,EAAM,OAAQ,YAAY;AAC1B,EAAM,OAAQ,WAAW;AAEzB,EAAM,OAAQ,MAAM,SAAUA,MAAa;AACzC,IAAM,KAAM,WAAWA;AACvB,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,UAAU,SAAUA,MAAa;AAC7C,IAAM,KAAM,eAAeA;AAC3B,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,SAAS,SAAU,MAAM,MAAM;AAC3C,IAAM,KAAM,cAAc;AAC1B,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,SAAS,SAAU,MAAM,MAAM;AAC3C,IAAM,KAAM,cAAc;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ANzKO,SAAS,UACd,QACA,SACgC;AAChC,QAAM,aAAa,YAAY,MAAM;AACrC,SAAO,IAAI,wBAA+B,YAAY,OAAO;AAC/D;AAkCO,SAAS,aAAoC,QAAqC;AACvF,SAAO,YAAY,MAAM;AAC3B;AAGA,SAAS,YAAmC,KAAkC;AAC5E,QAAM,SAAc,CAAC;AACrB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,KAAK,GAAG;AACpD,QAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,aAAO,GAAG,IAAI,YAAY,KAAK;AAAA,IACjC,OAAO;AACL,YAAM,IAAI,WAAW,KAAK;AAC1B,UAAI,CAAC;AAAG,cAAM,IAAI,MAAM,2BAA2B,MAAM,WAAW,EAAE;AAEtE,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,WACP,OACA,WAAW,MACX,KACA,YACkB;AAClB,MAAI,mBAAS,SAAS,KAAK,GAAG;AAC5B,UAAM,MAAY,MAAO;AACzB,UAAM,UAAgB,MAAO;AAC7B,UAAM,SAAe,MAAO;AAC5B,UAAM,SAAe,MAAO;AAC5B,WAAO,cAAc,UAAU,KAAK,QAAQ,SAAS,MAAM;AAAA,EAC7D;AAEA,MAAI,mBAAS,KAAK,KAAK,GAAG;AACxB,UAAM,MAAY,MAAO;AACzB,UAAM,UAAgB,MAAO;AAC7B,UAAM,SAAe,MAAO;AAC5B,UAAM,SAAe,MAAO;AAC5B,WAAO,UAAU,UAAU,KAAK,QAAQ,SAAS,MAAM;AAAA,EACzD;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,WAAO,YAAY,KAAK;AAAA,EAC1B;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,UAAM,WAAW,MAAM,eAAe;AACtC,UAAM,WAAW,MAAM,eAAe;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,UAAM,WAAW,MAAM,eAAe;AACtC,UAAM,WAAW,MAAM,eAAe;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,WAAW,KAAK,GAAG;AAC9B,WAAO,UAAU,OAAO,KAAK,MAAM,MAAM,GAAG,UAAU,GAA0B;AAAA,EAClF;AAEA,MAAI,mBAAS,QAAQ,KAAK,GAAG;AAC3B,WAAO,aAAa,UAAU,GAA2B;AAAA,EAC3D;AAEA,MAAI,mBAAS,KAAK,KAAK,GAAG;AACxB,UAAM,WAAW,MAAM,eAAe;AACtC,UAAM,WAAW,MAAM,eAAe;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,MAAM,KAAK,GAAG;AACzB,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,IAAI,KAAK,GAAG;AACvB,WAAO,WAAW,MAAM,KAAK,WAAW,UAAU,MAAM,KAAK,YAAY;AAAA,EAC3E;AAEA,MAAI,mBAAS,SAAS,KAAK,GAAG;AAC5B,WAAO,WAAW,MAAM,KAAK,WAAW,OAAO,MAAS;AAAA,EAC1D;AAEA,MAAI,mBAAS,SAAS,KAAK,GAAG;AAC5B,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX;AAAA,MACC,OAAO,QAAQ,cAAc,MAAM,MAAM;AAAA,IAC5C;AAAA,EACF;AAEA,MAAI,mBAAS,MAAM,KAAK,GAAG;AACzB,WAAO,WAAW,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,EACzC;AAEA,MAAI,mBAAS,IAAI,KAAK,GAAG;AACvB,WAAO,WAAW,UAAU,GAAG;AAAA,EACjC;AAEA,MAAI,mBAAS,YAAY,KAAK,GAAG;AAC/B,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IAMF;AAAA,EACF;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,UAAM,SAAS,MAAM,KAAK;AAE1B,QAAI,OAAO,SAAS,cAAc;AAChC,YAAM,aAAmB,OAAQ;AACjC,aAAO,WAAW,MAAM,KAAK,QAAQ,UAAU,KAAK,UAAU;AAAA,IAChE;AAEA,QAAI,OAAO,SAAS,gBAAgB,OAAO,SAAS,aAAa;AAC/D,aAAO,WAAW,MAAM,KAAK,QAAQ,UAAU,KAAK,UAAU;AAAA,IAChE;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,YACP,OACA,WAAW,MACX,KACA,SAAS,OACT,UACA,SAAS,OACG;AACZ,QAAM,SAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK,MAAM,YAAY;AAAA,IACvB,KAAK,MAAM,YAAY;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AAAU,WAAO,WAAW;AAChC,SAAO;AACT;AAEA,SAAS,YACP,OACA,WAAW,MACX,KACA,SAAS,OACT,UACA,SAAS,OACG;AACZ,QAAM,SAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,WAAW,MAAM,aAAa;AAAA,IAC9B,WAAW,MAAM,aAAa;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AAAU,WAAO,WAAW;AAChC,SAAO;AACT;AAEA,SAAS,UACP,QACA,WAAW,MACX,KACY;AACZ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,SAAS,aAAa,WAAW,MAAM,KAAyC;AAC9E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,UACP,WAAW,MACX,KACA,UACA,SAAS,OACT,SAAS,OACC;AACV,QAAM,SAAmB;AAAA,IACvB,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AAAU,WAAO,WAAW;AAChC,SAAO;AACT;AAEA,SAAS,cACP,WAAW,MACX,KACA,SAAS,OACT,SACA,SAAS,OACK;AACd,QAAM,SAAuB;AAAA,IAC3B,MAAM,6BAAY;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AAAK,WAAO,MAAM;AACtB,MAAI;AAAS,WAAO,UAAU;AAC9B,SAAO;AACT;AAEA,SAAS,WAEP,WAAW,MACX,SACA,KACc;AACd,QAAM,YAAY,WAAW,OAAO;AACpC,MAAI,CAAC;AAAW,UAAM,IAAI,MAAM,wBAAwB;AACxD,SAAO;AAAA,IACL,MAAM,CAAC,SAAyB;AAAA,IAChC,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,SAEP,WAAW,MACX,WACA,KACe;AACf,QAAM,UAAU,WAAW,SAAS;AACpC,MAAI,CAAC;AAAS,UAAM,IAAI,MAAM,4BAA4B;AAE1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,UACP,WAAW,MACX,KACA,SAAS,OACT,SACA,SAAS,OACC;AACV,QAAM,SAAmB;AAAA,IACvB,MAAM,6BAAY;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI;AAAK,WAAO,MAAM;AACtB,MAAI;AAAS,WAAO,UAAU;AAC9B,SAAO;AACT;AAEA,SAAS,WAAW,WAAW,MAAM,KAAmC;AACtE,SAAO;AAAA,IACL,MAAM,6BAAY;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAO,cAAQ;","names":["import_mongoose","zmAssertIds","zmAssert","zmAssert","zmAssert","import_zod","ref"]}
package/dist/index.d.cts CHANGED
@@ -11,6 +11,7 @@ declare namespace zm {
11
11
  __zm_refPath?: string;
12
12
  ref: (ref: string) => zID;
13
13
  unique: (val?: boolean) => zID;
14
+ sparse: (val?: boolean) => zID;
14
15
  refPath: (ref: string) => zID;
15
16
  }
16
17
  interface zUUID extends z.ZodUnion<[z.ZodString, z.ZodType<Types.UUID, z.ZodTypeDef, Types.UUID>]> {
@@ -18,12 +19,14 @@ declare namespace zm {
18
19
  __zm_ref?: string;
19
20
  __zm_refPath?: string;
20
21
  unique: (val?: boolean) => zUUID;
22
+ sparse: (val?: boolean) => zUUID;
21
23
  ref: (ref: string) => zUUID;
22
24
  refPath: (ref: string) => zUUID;
23
25
  }
26
+ type mDefault<T> = () => T;
24
27
  interface _Field<T> {
25
28
  required: boolean;
26
- default?: T;
29
+ default?: mDefault<T>;
27
30
  validate?: {
28
31
  validator: (v: T) => boolean;
29
32
  message?: string;
@@ -32,6 +35,7 @@ declare namespace zm {
32
35
  interface mString extends _Field<string> {
33
36
  type: StringConstructor;
34
37
  unique: boolean;
38
+ sparse: boolean;
35
39
  enum?: string[];
36
40
  match?: RegExp;
37
41
  minLength?: number;
@@ -40,6 +44,7 @@ declare namespace zm {
40
44
  interface mNumber extends _Field<number> {
41
45
  type: NumberConstructor;
42
46
  unique: boolean;
47
+ sparse: boolean;
43
48
  min?: number;
44
49
  max?: number;
45
50
  }
@@ -49,16 +54,19 @@ declare namespace zm {
49
54
  interface mDate extends _Field<Date> {
50
55
  type: DateConstructor;
51
56
  unique: boolean;
57
+ sparse: boolean;
52
58
  }
53
59
  interface mObjectId extends _Field<Types.ObjectId> {
54
60
  type: typeof SchemaTypes.ObjectId;
55
61
  unique?: boolean;
62
+ sparse?: boolean;
56
63
  ref?: string;
57
64
  refPath?: string;
58
65
  }
59
66
  interface mUUID extends _Field<Types.UUID> {
60
67
  type: typeof SchemaTypes.UUID;
61
68
  unique?: boolean;
69
+ sparse?: boolean;
62
70
  ref?: string;
63
71
  refPath?: string;
64
72
  }
@@ -87,15 +95,21 @@ declare namespace zm {
87
95
  declare module "zod" {
88
96
  interface ZodString {
89
97
  unique: (arg?: boolean) => ZodString;
98
+ sparse: (arg?: boolean) => ZodString;
90
99
  __zm_unique: boolean;
100
+ __zm_sparse: boolean;
91
101
  }
92
102
  interface ZodNumber {
93
103
  unique: (arg?: boolean) => ZodNumber;
104
+ sparse: (arg?: boolean) => ZodNumber;
94
105
  __zm_unique: boolean;
106
+ __zm_sparse: boolean;
95
107
  }
96
108
  interface ZodDate {
97
109
  unique: (arg?: boolean) => ZodDate;
110
+ sparse: (arg?: boolean) => ZodDate;
98
111
  __zm_unique: boolean;
112
+ __zm_sparse: boolean;
99
113
  }
100
114
  interface ZodType<Output = any, Def extends z.ZodTypeDef = z.ZodTypeDef, Input = Output> {
101
115
  }
@@ -111,6 +125,7 @@ declare module "zod" {
111
125
  * @remarks
112
126
  * - Overrides `refine` method to `ZodType` that includes additional metadata for validation.
113
127
  * - Overrides `unique` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as unique.
128
+ * - Overrides `sparse` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as sparse.
114
129
  *
115
130
  * @example
116
131
  * ```typescript
@@ -127,6 +142,7 @@ declare module "zod" {
127
142
  declare function extendZod(z_0: typeof z): void;
128
143
  type TzmId = ReturnType<typeof createId> & {
129
144
  unique: (arg?: boolean) => TzmId;
145
+ sparse: (arg?: boolean) => TzmId;
130
146
  ref: (arg: string) => TzmId;
131
147
  refPath: (arg: string) => TzmId;
132
148
  };
@@ -134,6 +150,7 @@ declare const createId: () => z.ZodUnion<[z.ZodEffects<z.ZodString, string, stri
134
150
  declare const zId: (ref?: string) => TzmId;
135
151
  type TzmUUID = ReturnType<typeof createUUID> & {
136
152
  unique: (arg?: boolean) => TzmUUID;
153
+ sparse: (arg?: boolean) => TzmUUID;
137
154
  ref: (arg: string) => TzmUUID;
138
155
  refPath: (arg: string) => TzmUUID;
139
156
  };
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ declare namespace zm {
11
11
  __zm_refPath?: string;
12
12
  ref: (ref: string) => zID;
13
13
  unique: (val?: boolean) => zID;
14
+ sparse: (val?: boolean) => zID;
14
15
  refPath: (ref: string) => zID;
15
16
  }
16
17
  interface zUUID extends z.ZodUnion<[z.ZodString, z.ZodType<Types.UUID, z.ZodTypeDef, Types.UUID>]> {
@@ -18,12 +19,14 @@ declare namespace zm {
18
19
  __zm_ref?: string;
19
20
  __zm_refPath?: string;
20
21
  unique: (val?: boolean) => zUUID;
22
+ sparse: (val?: boolean) => zUUID;
21
23
  ref: (ref: string) => zUUID;
22
24
  refPath: (ref: string) => zUUID;
23
25
  }
26
+ type mDefault<T> = () => T;
24
27
  interface _Field<T> {
25
28
  required: boolean;
26
- default?: T;
29
+ default?: mDefault<T>;
27
30
  validate?: {
28
31
  validator: (v: T) => boolean;
29
32
  message?: string;
@@ -32,6 +35,7 @@ declare namespace zm {
32
35
  interface mString extends _Field<string> {
33
36
  type: StringConstructor;
34
37
  unique: boolean;
38
+ sparse: boolean;
35
39
  enum?: string[];
36
40
  match?: RegExp;
37
41
  minLength?: number;
@@ -40,6 +44,7 @@ declare namespace zm {
40
44
  interface mNumber extends _Field<number> {
41
45
  type: NumberConstructor;
42
46
  unique: boolean;
47
+ sparse: boolean;
43
48
  min?: number;
44
49
  max?: number;
45
50
  }
@@ -49,16 +54,19 @@ declare namespace zm {
49
54
  interface mDate extends _Field<Date> {
50
55
  type: DateConstructor;
51
56
  unique: boolean;
57
+ sparse: boolean;
52
58
  }
53
59
  interface mObjectId extends _Field<Types.ObjectId> {
54
60
  type: typeof SchemaTypes.ObjectId;
55
61
  unique?: boolean;
62
+ sparse?: boolean;
56
63
  ref?: string;
57
64
  refPath?: string;
58
65
  }
59
66
  interface mUUID extends _Field<Types.UUID> {
60
67
  type: typeof SchemaTypes.UUID;
61
68
  unique?: boolean;
69
+ sparse?: boolean;
62
70
  ref?: string;
63
71
  refPath?: string;
64
72
  }
@@ -87,15 +95,21 @@ declare namespace zm {
87
95
  declare module "zod" {
88
96
  interface ZodString {
89
97
  unique: (arg?: boolean) => ZodString;
98
+ sparse: (arg?: boolean) => ZodString;
90
99
  __zm_unique: boolean;
100
+ __zm_sparse: boolean;
91
101
  }
92
102
  interface ZodNumber {
93
103
  unique: (arg?: boolean) => ZodNumber;
104
+ sparse: (arg?: boolean) => ZodNumber;
94
105
  __zm_unique: boolean;
106
+ __zm_sparse: boolean;
95
107
  }
96
108
  interface ZodDate {
97
109
  unique: (arg?: boolean) => ZodDate;
110
+ sparse: (arg?: boolean) => ZodDate;
98
111
  __zm_unique: boolean;
112
+ __zm_sparse: boolean;
99
113
  }
100
114
  interface ZodType<Output = any, Def extends z.ZodTypeDef = z.ZodTypeDef, Input = Output> {
101
115
  }
@@ -111,6 +125,7 @@ declare module "zod" {
111
125
  * @remarks
112
126
  * - Overrides `refine` method to `ZodType` that includes additional metadata for validation.
113
127
  * - Overrides `unique` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as unique.
128
+ * - Overrides `sparse` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as sparse.
114
129
  *
115
130
  * @example
116
131
  * ```typescript
@@ -127,6 +142,7 @@ declare module "zod" {
127
142
  declare function extendZod(z_0: typeof z): void;
128
143
  type TzmId = ReturnType<typeof createId> & {
129
144
  unique: (arg?: boolean) => TzmId;
145
+ sparse: (arg?: boolean) => TzmId;
130
146
  ref: (arg: string) => TzmId;
131
147
  refPath: (arg: string) => TzmId;
132
148
  };
@@ -134,6 +150,7 @@ declare const createId: () => z.ZodUnion<[z.ZodEffects<z.ZodString, string, stri
134
150
  declare const zId: (ref?: string) => TzmId;
135
151
  type TzmUUID = ReturnType<typeof createUUID> & {
136
152
  unique: (arg?: boolean) => TzmUUID;
153
+ sparse: (arg?: boolean) => TzmUUID;
137
154
  ref: (arg: string) => TzmUUID;
138
155
  refPath: (arg: string) => TzmUUID;
139
156
  };
package/dist/index.js CHANGED
@@ -187,15 +187,18 @@ import { Types, isValidObjectId } from "mongoose";
187
187
  import { z } from "zod";
188
188
  var zod_extended = false;
189
189
  function extendZod(z_0) {
190
- if (zod_extended) return;
190
+ if (zod_extended)
191
+ return;
191
192
  zod_extended = true;
192
193
  const _refine = z_0.ZodType.prototype.refine;
193
194
  z_0.ZodType.prototype.refine = function(check, opts) {
194
195
  const zEffect = _refine.bind(this)(check, opts);
195
196
  let message = void 0;
196
197
  if (opts) {
197
- if (typeof opts === "string") message = opts;
198
- else if ("message" in opts) message = opts.message;
198
+ if (typeof opts === "string")
199
+ message = opts;
200
+ else if ("message" in opts)
201
+ message = opts.message;
199
202
  }
200
203
  zEffect._def.effect.__zm_validation = {
201
204
  validator: check,
@@ -209,6 +212,10 @@ function extendZod(z_0) {
209
212
  this.__zm_unique = arg;
210
213
  return this;
211
214
  };
215
+ type.prototype.sparse = function(arg = true) {
216
+ this.__zm_sparse = arg;
217
+ return this;
218
+ };
212
219
  }
213
220
  const TypesMap = {
214
221
  String: z_0.ZodString,
@@ -250,6 +257,10 @@ var zId = (ref) => {
250
257
  this.__zm_unique = val;
251
258
  return this;
252
259
  };
260
+ output.sparse = function(val = true) {
261
+ this.__zm_sparse = val;
262
+ return this;
263
+ };
253
264
  return output;
254
265
  };
255
266
  var createUUID = () => {
@@ -271,6 +282,10 @@ var zUUID = (ref) => {
271
282
  this.__zm_unique = val;
272
283
  return this;
273
284
  };
285
+ output.sparse = function(val = true) {
286
+ this.__zm_sparse = val;
287
+ return this;
288
+ };
274
289
  return output;
275
290
  };
276
291
 
@@ -289,7 +304,8 @@ function parseObject(obj) {
289
304
  object[key] = parseObject(field);
290
305
  } else {
291
306
  const f = parseField(field);
292
- if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);
307
+ if (!f)
308
+ throw new Error(`Unsupported field type: ${field.constructor}`);
293
309
  object[key] = f;
294
310
  }
295
311
  }
@@ -300,35 +316,41 @@ function parseField(field, required = true, def, refinement) {
300
316
  const ref = field.__zm_ref;
301
317
  const refPath = field.__zm_refPath;
302
318
  const unique = field.__zm_unique;
303
- return parseObjectId(required, ref, unique, refPath);
319
+ const sparse = field.__zm_sparse;
320
+ return parseObjectId(required, ref, unique, refPath, sparse);
304
321
  }
305
322
  if (assertions_default.uuid(field)) {
306
323
  const ref = field.__zm_ref;
307
324
  const refPath = field.__zm_refPath;
308
325
  const unique = field.__zm_unique;
309
- return parseUUID(required, ref, unique, refPath);
326
+ const sparse = field.__zm_unique;
327
+ return parseUUID(required, ref, unique, refPath, sparse);
310
328
  }
311
329
  if (assertions_default.object(field)) {
312
330
  return parseObject(field);
313
331
  }
314
332
  if (assertions_default.number(field)) {
315
333
  const isUnique = field.__zm_unique ?? false;
334
+ const isSparse = field.__zm_sparse ?? false;
316
335
  return parseNumber(
317
336
  field,
318
337
  required,
319
338
  def,
320
339
  isUnique,
321
- refinement
340
+ refinement,
341
+ isSparse
322
342
  );
323
343
  }
324
344
  if (assertions_default.string(field)) {
325
345
  const isUnique = field.__zm_unique ?? false;
346
+ const isSparse = field.__zm_sparse ?? false;
326
347
  return parseString(
327
348
  field,
328
349
  required,
329
350
  def,
330
351
  isUnique,
331
- refinement
352
+ refinement,
353
+ isSparse
332
354
  );
333
355
  }
334
356
  if (assertions_default.enumerable(field)) {
@@ -339,11 +361,13 @@ function parseField(field, required = true, def, refinement) {
339
361
  }
340
362
  if (assertions_default.date(field)) {
341
363
  const isUnique = field.__zm_unique ?? false;
364
+ const isSparse = field.__zm_sparse ?? false;
342
365
  return parseDate(
343
366
  required,
344
367
  def,
345
368
  refinement,
346
- isUnique
369
+ isUnique,
370
+ isSparse
347
371
  );
348
372
  }
349
373
  if (assertions_default.array(field)) {
@@ -354,13 +378,17 @@ function parseField(field, required = true, def, refinement) {
354
378
  );
355
379
  }
356
380
  if (assertions_default.def(field)) {
357
- return parseField(field._def.innerType, required, field._def.defaultValue());
381
+ return parseField(field._def.innerType, required, field._def.defaultValue);
358
382
  }
359
383
  if (assertions_default.optional(field)) {
360
384
  return parseField(field._def.innerType, false, void 0);
361
385
  }
362
386
  if (assertions_default.nullable(field)) {
363
- return parseField(field._def.innerType, false, def || null);
387
+ return parseField(
388
+ field._def.innerType,
389
+ false,
390
+ typeof def !== "undefined" ? def : () => null
391
+ );
364
392
  }
365
393
  if (assertions_default.union(field)) {
366
394
  return parseField(field._def.options[0]);
@@ -381,37 +409,45 @@ function parseField(field, required = true, def, refinement) {
381
409
  const validation = effect.__zm_validation;
382
410
  return parseField(field._def.schema, required, def, validation);
383
411
  }
412
+ if (effect.type === "preprocess" || effect.type === "transform") {
413
+ return parseField(field._def.schema, required, def, refinement);
414
+ }
384
415
  }
385
416
  return null;
386
417
  }
387
- function parseNumber(field, required = true, def, unique = false, validate) {
418
+ function parseNumber(field, required = true, def, unique = false, validate, sparse = false) {
388
419
  const output = {
389
420
  type: Number,
390
421
  default: def,
391
422
  min: field.minValue ?? void 0,
392
423
  max: field.maxValue ?? void 0,
393
424
  required,
394
- unique
425
+ unique,
426
+ sparse
395
427
  };
396
- if (validate) output.validate = validate;
428
+ if (validate)
429
+ output.validate = validate;
397
430
  return output;
398
431
  }
399
- function parseString(field, required = true, def, unique = false, validate) {
432
+ function parseString(field, required = true, def, unique = false, validate, sparse = false) {
400
433
  const output = {
401
434
  type: String,
402
435
  default: def,
403
436
  required,
404
437
  minLength: field.minLength ?? void 0,
405
438
  maxLength: field.maxLength ?? void 0,
406
- unique
439
+ unique,
440
+ sparse
407
441
  };
408
- if (validate) output.validate = validate;
442
+ if (validate)
443
+ output.validate = validate;
409
444
  return output;
410
445
  }
411
446
  function parseEnum(values, required = true, def) {
412
447
  return {
413
448
  type: String,
414
449
  unique: false,
450
+ sparse: false,
415
451
  default: def,
416
452
  enum: values,
417
453
  required
@@ -424,29 +460,35 @@ function parseBoolean(required = true, def) {
424
460
  required
425
461
  };
426
462
  }
427
- function parseDate(required = true, def, validate, unique = false) {
463
+ function parseDate(required = true, def, validate, unique = false, sparse = false) {
428
464
  const output = {
429
465
  type: Date,
430
466
  default: def,
431
467
  required,
432
- unique
468
+ unique,
469
+ sparse
433
470
  };
434
- if (validate) output.validate = validate;
471
+ if (validate)
472
+ output.validate = validate;
435
473
  return output;
436
474
  }
437
- function parseObjectId(required = true, ref, unique = false, refPath) {
475
+ function parseObjectId(required = true, ref, unique = false, refPath, sparse = false) {
438
476
  const output = {
439
477
  type: SchemaTypes.ObjectId,
440
478
  required,
441
- unique
479
+ unique,
480
+ sparse
442
481
  };
443
- if (ref) output.ref = ref;
444
- if (refPath) output.refPath = refPath;
482
+ if (ref)
483
+ output.ref = ref;
484
+ if (refPath)
485
+ output.refPath = refPath;
445
486
  return output;
446
487
  }
447
488
  function parseArray(required = true, element, def) {
448
489
  const innerType = parseField(element);
449
- if (!innerType) throw new Error("Unsupported array type");
490
+ if (!innerType)
491
+ throw new Error("Unsupported array type");
450
492
  return {
451
493
  type: [innerType],
452
494
  default: def,
@@ -455,7 +497,8 @@ function parseArray(required = true, element, def) {
455
497
  }
456
498
  function parseMap(required = true, valueType, def) {
457
499
  const pointer = parseField(valueType);
458
- if (!pointer) throw new Error("Unsupported map value type");
500
+ if (!pointer)
501
+ throw new Error("Unsupported map value type");
459
502
  return {
460
503
  type: Map,
461
504
  of: pointer,
@@ -463,14 +506,17 @@ function parseMap(required = true, valueType, def) {
463
506
  required
464
507
  };
465
508
  }
466
- function parseUUID(required = true, ref, unique = false, refPath) {
509
+ function parseUUID(required = true, ref, unique = false, refPath, sparse = false) {
467
510
  const output = {
468
511
  type: SchemaTypes.UUID,
469
512
  required,
470
- unique
513
+ unique,
514
+ sparse
471
515
  };
472
- if (ref) output.ref = ref;
473
- if (refPath) output.refPath = refPath;
516
+ if (ref)
517
+ output.ref = ref;
518
+ if (refPath)
519
+ output.refPath = refPath;
474
520
  return output;
475
521
  }
476
522
  function parseMixed(required = true, def) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/assertions/constructor.ts","../src/assertions/custom.ts","../src/assertions/instanceOf.ts","../src/assertions/staticNames.ts","../src/assertions/assertions.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport type { ZodNumber, ZodObject, ZodRawShape, ZodString, ZodType, z } from \"zod\";\nimport zmAssert from \"./assertions/assertions.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 (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 refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique, refPath);\n }\n\n if (zmAssert.uuid(field)) {\n const ref = (<any>field).__zm_ref;\n const refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, ref, unique, refPath);\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.valueSchema,\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(\n required = true,\n ref?: string,\n unique = false,\n refPath?: string,\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 if (refPath) output.refPath = refPath;\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 valueType: ZodType<K>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = parseField(valueType);\n if (!pointer) throw new Error(\"Unsupported map value type\");\n\n return {\n type: Map,\n of: pointer as zm._Field<K>,\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(\n required = true,\n ref?: string,\n unique = false,\n refPath?: string,\n): zm.mUUID {\n const output: zm.mUUID = {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n if (ref) output.ref = ref;\n if (refPath) output.refPath = refPath;\n return output;\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Constructor assertions (CommonJS)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the constructor name of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n },\n};\n","import type { ZodType } from \"zod\";\n\nexport namespace zmAssertIds {\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","import {\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 type ZodType,\n ZodUnion,\n} from \"zod\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Instance assertions (ESM)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the instance of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f instanceof ZodString;\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f instanceof ZodNumber;\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f instanceof ZodObject;\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f instanceof ZodArray;\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f instanceof ZodBoolean;\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f instanceof ZodEnum;\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f instanceof ZodDate;\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f instanceof ZodDefault;\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f instanceof ZodOptional;\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f instanceof ZodNullable;\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f instanceof ZodUnion;\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f instanceof ZodAny;\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f instanceof ZodMap || f instanceof ZodRecord;\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f instanceof ZodEffects;\n },\n};\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Static names assertions (Bundlers)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the `__zm_type` property of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return \"__zm_type\" in f && f.__zm_type === \"String\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return \"__zm_type\" in f && f.__zm_type === \"Number\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Object\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Array\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return \"__zm_type\" in f && f.__zm_type === \"Boolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Enum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return \"__zm_type\" in f && f.__zm_type === \"Date\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Default\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Optional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Nullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Union\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return \"__zm_type\" in f && f.__zm_type === \"Any\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return \"__zm_type\" in f && (f.__zm_type === \"Map\" || f.__zm_type === \"Record\");\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Effects\";\n },\n};\n","import type { ZodType } from \"zod\";\nimport { zmAssert as aConstructor } from \"./constructor\";\nimport { zmAssertIds } from \"./custom\";\nimport { zmAssert as aInstance } from \"./instanceOf\";\nimport { zmAssert as aStaticName } from \"./staticNames\";\nimport type { IAsserts } from \"./types\";\n\nconst assertions = [aConstructor, aInstance, aStaticName];\nconst zmAssert = Object.keys(aConstructor)\n .map((key) => key as keyof IAsserts)\n .reduce((acc, key) => {\n (<any>acc[key]) = (f: ZodType<any>) => {\n return assertions.some((assertion) => assertion[key](f));\n };\n\n return acc;\n }, {} as IAsserts);\n\nexport default {\n ...zmAssert,\n ...zmAssertIds,\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;\n/**\n * Extends the Zod library with additional functionality.\n *\n * This function modifies the Zod library to add custom validation and uniqueness checks.\n * It ensures that the extension is only applied once.\n *\n * @param z_0 - The Zod library to extend.\n *\n * @remarks\n * - Overrides `refine` method to `ZodType` that includes additional metadata for validation.\n * - Overrides `unique` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as unique.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n * import { extendZod } from \"./extension\";\n *\n * extendZod(z);\n *\n * const schema = z.object({\n * name: z.string().unique();\n * });\n * ```\n */\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 // Refine support\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 // Unique support\n const UNIQUE_SUPPORT_LIST = [z_0.ZodString, z_0.ZodNumber, z_0.ZodDate] as const;\n\n for (const type of UNIQUE_SUPPORT_LIST) {\n (<any>type.prototype).unique = function (arg = true) {\n (<any>this).__zm_unique = arg;\n return this;\n };\n }\n\n // Assign static names to Zod types\n const TypesMap = {\n String: z_0.ZodString,\n Number: z_0.ZodNumber,\n Object: z_0.ZodObject,\n Array: z_0.ZodArray,\n Boolean: z_0.ZodBoolean,\n Enum: z_0.ZodEnum,\n Date: z_0.ZodDate,\n Default: z_0.ZodDefault,\n Optional: z_0.ZodOptional,\n Nullable: z_0.ZodNullable,\n Union: z_0.ZodUnion,\n Any: z_0.ZodAny,\n Map: z_0.ZodMap,\n Record: z_0.ZodRecord,\n Effects: z_0.ZodEffects,\n };\n\n for (const [key, value] of Object.entries(TypesMap)) {\n (<any>value.prototype).__zm_type = key;\n }\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n refPath: (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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 ref: (arg: string) => TzmUUID;\n refPath: (arg: string) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (ref?: string): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 TzmUUID;\n};\n"],"mappings":";AAAA,SAAS,QAA4B,mBAAmB;;;AC2BjD,IAAM,WAAqB;AAAA,EAChC,OAAO,GAAiC;AACtC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,OAAO,GAAiC;AACtC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,OAAO,GAAsC;AAC3C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,QAAQ,GAAkC;AACxC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,WAAW,GAAoC;AAC7C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,KAAK,GAA+B;AAClC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,IAAI,GAAuC;AACzC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,IAAI,GAA8B;AAChC,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EAEA,YAAY,GAAoD;AAC9D,WAAO,EAAE,YAAY,SAAS,YAAY,EAAE,YAAY,SAAS;AAAA,EACnE;AAAA,EAEA,OAAO,GAAuC;AAC5C,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AACF;;;ACjFO,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACE,WAAS,SAAS,GAAuC;AAC9D,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAFO,EAAAA,aAAS;AAIT,WAAS,KAAK,GAAuC;AAC1D,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAFO,EAAAA,aAAS;AAAA,GALD;;;ACFjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AAUA,IAAMC,YAAqB;AAAA,EAChC,OAAO,GAAiC;AACtC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,OAAO,GAAiC;AACtC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,OAAO,GAAsC;AAC3C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,QAAQ,GAAkC;AACxC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,WAAW,GAAoC;AAC7C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,KAAK,GAA+B;AAClC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,GAAuC;AACzC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,GAA8B;AAChC,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,YAAY,GAAoD;AAC9D,WAAO,aAAa,UAAU,aAAa;AAAA,EAC7C;AAAA,EAEA,OAAO,GAAuC;AAC5C,WAAO,aAAa;AAAA,EACtB;AACF;;;ACxDO,IAAMC,YAAqB;AAAA,EAChC,OAAO,GAAiC;AACtC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,OAAO,GAAiC;AACtC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,OAAO,GAAsC;AAC3C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,QAAQ,GAAkC;AACxC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,WAAW,GAAoC;AAC7C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,KAAK,GAA+B;AAClC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,IAAI,GAAuC;AACzC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,SAAS,GAAwC;AAC/C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,GAAqC;AACzC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,IAAI,GAA8B;AAChC,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AAAA,EAEA,YAAY,GAAoD;AAC9D,WAAO,eAAe,MAAM,EAAE,cAAc,SAAS,EAAE,cAAc;AAAA,EACvE;AAAA,EAEA,OAAO,GAAuC;AAC5C,WAAO,eAAe,KAAK,EAAE,cAAc;AAAA,EAC7C;AACF;;;AC5EA,IAAM,aAAa,CAAC,UAAcC,WAAWA,SAAW;AACxD,IAAMA,YAAW,OAAO,KAAK,QAAY,EACtC,IAAI,CAAC,QAAQ,GAAqB,EAClC,OAAO,CAAC,KAAK,QAAQ;AACpB,EAAM,IAAI,GAAG,IAAK,CAAC,MAAoB;AACrC,WAAO,WAAW,KAAK,CAAC,cAAc,UAAU,GAAG,EAAE,CAAC,CAAC;AAAA,EACzD;AAEA,SAAO;AACT,GAAG,CAAC,CAAa;AAEnB,IAAO,qBAAQ;AAAA,EACb,GAAGA;AAAA,EACH,GAAG;AACL;;;ACrBA,SAAS,OAAO,uBAAuB;AACvC,SAAiC,SAAS;AA2B1C,IAAI,eAAe;AAyBZ,SAAS,UAAU,KAAe;AAEvC,MAAI,aAAc;AAClB,iBAAe;AAGf,QAAM,UAAU,IAAI,QAAQ,UAAU;AACtC,MAAI,QAAQ,UAAU,SAAS,SAC7B,OACA,MACA;AACA,UAAM,UAAU,QAAQ,KAAK,IAAI,EAAE,OAAO,IAAI;AAE9C,QAAI,UAA+D;AACnE,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,SAAU,WAAU;AAAA,eAC/B,aAAa,KAAM,WAAU,KAAK;AAAA,IAC7C;AAEA,IAAM,QAAQ,KAAK,OAAQ,kBAAkB;AAAA,MAC3C,WAAW;AAAA,MACX;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,sBAAsB,CAAC,IAAI,WAAW,IAAI,WAAW,IAAI,OAAO;AAEtE,aAAW,QAAQ,qBAAqB;AACtC,IAAM,KAAK,UAAW,SAAS,SAAU,MAAM,MAAM;AACnD,MAAM,KAAM,cAAc;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AAGA,QAAM,WAAW;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,IACX,SAAS,IAAI;AAAA,IACb,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,SAAS,IAAI;AAAA,IACb,UAAU,IAAI;AAAA,IACd,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,KAAK,IAAI;AAAA,IACT,KAAK,IAAI;AAAA,IACT,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,EACf;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,IAAM,MAAM,UAAW,YAAY;AAAA,EACrC;AACF;AAQA,IAAM,WAAW,MAAM;AACrB,SAAO,EACJ,OAAO,EACP,OAAO,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,SAAS,mBAAmB,CAAC,EACjE,GAAG,EAAE,WAAW,MAAM,QAAQ,CAAC;AACpC;AAEO,IAAM,MAAM,CAAC,QAAwB;AAC1C,QAAM,SAAS,SAAS;AAExB,EAAM,OAAQ,YAAY;AAC1B,EAAM,OAAQ,WAAW;AAEzB,EAAM,OAAQ,MAAM,SAAUC,MAAa;AACzC,IAAM,KAAM,WAAWA;AACvB,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,UAAU,SAAUA,MAAa;AAC7C,IAAM,KAAM,eAAeA;AAC3B,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,SAAS,SAAU,MAAM,MAAM;AAC3C,IAAM,KAAM,cAAc;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAQA,IAAM,aAAa,MAAM;AACvB,SAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,MAAM,IAAI,CAAC;AACjF;AAEO,IAAM,QAAQ,CAAC,QAA0B;AAC9C,QAAM,SAAS,WAAW;AAE1B,EAAM,OAAQ,YAAY;AAC1B,EAAM,OAAQ,WAAW;AAEzB,EAAM,OAAQ,MAAM,SAAUA,MAAa;AACzC,IAAM,KAAM,WAAWA;AACvB,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,UAAU,SAAUA,MAAa;AAC7C,IAAM,KAAM,eAAeA;AAC3B,WAAO;AAAA,EACT;AAEA,EAAM,OAAQ,SAAS,SAAU,MAAM,MAAM;AAC3C,IAAM,KAAM,cAAc;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ANlJO,SAAS,UACd,QACA,SACgC;AAChC,QAAM,aAAa,YAAY,MAAM;AACrC,SAAO,IAAI,OAA+B,YAAY,OAAO;AAC/D;AAkCO,SAAS,aAAoC,QAAqC;AACvF,SAAO,YAAY,MAAM;AAC3B;AAGA,SAAS,YAAmC,KAAkC;AAC5E,QAAM,SAAc,CAAC;AACrB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,KAAK,GAAG;AACpD,QAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,aAAO,GAAG,IAAI,YAAY,KAAK;AAAA,IACjC,OAAO;AACL,YAAM,IAAI,WAAW,KAAK;AAC1B,UAAI,CAAC,EAAG,OAAM,IAAI,MAAM,2BAA2B,MAAM,WAAW,EAAE;AAEtE,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,WACP,OACA,WAAW,MACX,KACA,YACkB;AAClB,MAAI,mBAAS,SAAS,KAAK,GAAG;AAC5B,UAAM,MAAY,MAAO;AACzB,UAAM,UAAgB,MAAO;AAC7B,UAAM,SAAe,MAAO;AAC5B,WAAO,cAAc,UAAU,KAAK,QAAQ,OAAO;AAAA,EACrD;AAEA,MAAI,mBAAS,KAAK,KAAK,GAAG;AACxB,UAAM,MAAY,MAAO;AACzB,UAAM,UAAgB,MAAO;AAC7B,UAAM,SAAe,MAAO;AAC5B,WAAO,UAAU,UAAU,KAAK,QAAQ,OAAO;AAAA,EACjD;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,WAAO,YAAY,KAAK;AAAA,EAC1B;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,UAAM,WAAW,MAAM,eAAe;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,UAAM,WAAW,MAAM,eAAe;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,WAAW,KAAK,GAAG;AAC9B,WAAO,UAAU,OAAO,KAAK,MAAM,MAAM,GAAG,UAAU,GAAa;AAAA,EACrE;AAEA,MAAI,mBAAS,QAAQ,KAAK,GAAG;AAC3B,WAAO,aAAa,UAAU,GAAc;AAAA,EAC9C;AAEA,MAAI,mBAAS,KAAK,KAAK,GAAG;AACxB,UAAM,WAAW,MAAM,eAAe;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,MAAM,KAAK,GAAG;AACzB,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,MAAI,mBAAS,IAAI,KAAK,GAAG;AACvB,WAAO,WAAW,MAAM,KAAK,WAAW,UAAU,MAAM,KAAK,aAAa,CAAC;AAAA,EAC7E;AAEA,MAAI,mBAAS,SAAS,KAAK,GAAG;AAC5B,WAAO,WAAW,MAAM,KAAK,WAAW,OAAO,MAAS;AAAA,EAC1D;AAEA,MAAI,mBAAS,SAAS,KAAK,GAAG;AAC5B,WAAO,WAAW,MAAM,KAAK,WAAW,OAAO,OAAO,IAAI;AAAA,EAC5D;AAEA,MAAI,mBAAS,MAAM,KAAK,GAAG;AACzB,WAAO,WAAW,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,EACzC;AAEA,MAAI,mBAAS,IAAI,KAAK,GAAG;AACvB,WAAO,WAAW,UAAU,GAAG;AAAA,EACjC;AAEA,MAAI,mBAAS,YAAY,KAAK,GAAG;AAC/B,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IAIF;AAAA,EACF;AAEA,MAAI,mBAAS,OAAO,KAAK,GAAG;AAC1B,UAAM,SAAS,MAAM,KAAK;AAE1B,QAAI,OAAO,SAAS,cAAc;AAChC,YAAM,aAAmB,OAAQ;AACjC,aAAO,WAAW,MAAM,KAAK,QAAQ,UAAU,KAAK,UAAU;AAAA,IAChE;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,YACP,OACA,WAAW,MACX,KACA,SAAS,OACT,UACY;AACZ,QAAM,SAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK,MAAM,YAAY;AAAA,IACvB,KAAK,MAAM,YAAY;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAEA,MAAI,SAAU,QAAO,WAAW;AAChC,SAAO;AACT;AAEA,SAAS,YACP,OACA,WAAW,MACX,KACA,SAAS,OACT,UACY;AACZ,QAAM,SAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,WAAW,MAAM,aAAa;AAAA,IAC9B,WAAW,MAAM,aAAa;AAAA,IAC9B;AAAA,EACF;AAEA,MAAI,SAAU,QAAO,WAAW;AAChC,SAAO;AACT;AAEA,SAAS,UAAU,QAAkB,WAAW,MAAM,KAA0B;AAC9E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,SAAS,aAAa,WAAW,MAAM,KAA4B;AACjE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,UACP,WAAW,MACX,KACA,UACA,SAAS,OACC;AACV,QAAM,SAAmB;AAAA,IACvB,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF;AAEA,MAAI,SAAU,QAAO,WAAW;AAChC,SAAO;AACT;AAEA,SAAS,cACP,WAAW,MACX,KACA,SAAS,OACT,SACc;AACd,QAAM,SAAuB;AAAA,IAC3B,MAAM,YAAY;AAAA,IAClB;AAAA,IACA;AAAA,EACF;AAEA,MAAI,IAAK,QAAO,MAAM;AACtB,MAAI,QAAS,QAAO,UAAU;AAC9B,SAAO;AACT;AAEA,SAAS,WAEP,WAAW,MACX,SACA,KACc;AACd,QAAM,YAAY,WAAW,OAAO;AACpC,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,wBAAwB;AACxD,SAAO;AAAA,IACL,MAAM,CAAC,SAAyB;AAAA,IAChC,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,SAEP,WAAW,MACX,WACA,KACe;AACf,QAAM,UAAU,WAAW,SAAS;AACpC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,4BAA4B;AAE1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAqBA,SAAS,UACP,WAAW,MACX,KACA,SAAS,OACT,SACU;AACV,QAAM,SAAmB;AAAA,IACvB,MAAM,YAAY;AAAA,IAClB;AAAA,IACA;AAAA,EACF;AACA,MAAI,IAAK,QAAO,MAAM;AACtB,MAAI,QAAS,QAAO,UAAU;AAC9B,SAAO;AACT;AAEA,SAAS,WAAW,WAAW,MAAM,KAAmC;AACtE,SAAO;AAAA,IACL,MAAM,YAAY;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAO,cAAQ;","names":["zmAssertIds","zmAssert","zmAssert","zmAssert","ref"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/assertions/constructor.ts","../src/assertions/custom.ts","../src/assertions/instanceOf.ts","../src/assertions/staticNames.ts","../src/assertions/assertions.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport type { ZodNumber, ZodObject, ZodRawShape, ZodString, ZodType, z } from \"zod\";\n\nimport zmAssert from \"./assertions/assertions.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 (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?: zm.mDefault<T>,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n if (zmAssert.objectId(field)) {\n const ref = (<any>field).__zm_ref;\n const refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n const sparse = (<any>field).__zm_sparse;\n return parseObjectId(required, ref, unique, refPath, sparse);\n }\n\n if (zmAssert.uuid(field)) {\n const ref = (<any>field).__zm_ref;\n const refPath = (<any>field).__zm_refPath;\n const unique = (<any>field).__zm_unique;\n const sparse = (<any>field).__zm_unique;\n return parseUUID(required, ref, unique, refPath, sparse);\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 const isSparse = field.__zm_sparse ?? false;\n return parseNumber(\n field,\n required,\n def as zm.mDefault<number>,\n isUnique,\n refinement as zm.EffectValidator<number>,\n isSparse,\n );\n }\n\n if (zmAssert.string(field)) {\n const isUnique = field.__zm_unique ?? false;\n const isSparse = field.__zm_sparse ?? false;\n return parseString(\n field,\n required,\n def as zm.mDefault<string>,\n isUnique,\n refinement as zm.EffectValidator<string>,\n isSparse,\n );\n }\n\n if (zmAssert.enumerable(field)) {\n return parseEnum(Object.keys(field.Values), required, def as zm.mDefault<string>);\n }\n\n if (zmAssert.boolean(field)) {\n return parseBoolean(required, def as zm.mDefault<boolean>);\n }\n\n if (zmAssert.date(field)) {\n const isUnique = field.__zm_unique ?? false;\n const isSparse = field.__zm_sparse ?? false;\n return parseDate(\n required,\n def as zm.mDefault<Date>,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n isSparse,\n );\n }\n\n if (zmAssert.array(field)) {\n return parseArray(\n required,\n field.element,\n def as zm.mDefault<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(\n field._def.innerType,\n false,\n (typeof def !== \"undefined\" ? def : () => null) as zm.mDefault<null>,\n );\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.valueSchema,\n def as zm.mDefault<\n Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >\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 if (effect.type === \"preprocess\" || effect.type === \"transform\") {\n return parseField(field._def.schema, required, def, refinement);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: zm.mDefault<number>,\n unique = false,\n validate?: zm.EffectValidator<number>,\n sparse = false,\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 sparse,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: zm.mDefault<string>,\n unique = false,\n validate?: zm.EffectValidator<string>,\n sparse = false,\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 sparse,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(\n values: string[],\n required = true,\n def?: zm.mDefault<string>,\n): zm.mString {\n return {\n type: String,\n unique: false,\n sparse: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: zm.mDefault<boolean>): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: zm.mDefault<Date>,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n sparse = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n sparse,\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 refPath?: string,\n sparse = false,\n): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n sparse,\n };\n\n if (ref) output.ref = ref;\n if (refPath) output.refPath = refPath;\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?: zm.mDefault<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 valueType: ZodType<K>,\n def?: zm.mDefault<Map<NoInfer<T>, K>>,\n): zm.mMap<T, K> {\n const pointer = parseField(valueType);\n if (!pointer) throw new Error(\"Unsupported map value type\");\n\n return {\n type: Map,\n of: pointer as zm._Field<K>,\n default: def,\n required,\n };\n}\n\nfunction parseUUID(\n required = true,\n ref?: string,\n unique = false,\n refPath?: string,\n sparse = false,\n): zm.mUUID {\n const output: zm.mUUID = {\n type: SchemaTypes.UUID,\n required,\n unique,\n sparse,\n };\n if (ref) output.ref = ref;\n if (refPath) output.refPath = refPath;\n return output;\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def as unknown as any,\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Constructor assertions (CommonJS)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the constructor name of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f.constructor.name === \"ZodString\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f.constructor.name === \"ZodNumber\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f.constructor.name === \"ZodObject\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f.constructor.name === \"ZodArray\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f.constructor.name === \"ZodBoolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f.constructor.name === \"ZodEnum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f.constructor.name === \"ZodDate\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f.constructor.name === \"ZodDefault\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f.constructor.name === \"ZodOptional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f.constructor.name === \"ZodNullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f.constructor.name === \"ZodUnion\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f.constructor.name === \"ZodAny\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f.constructor.name === \"ZodMap\" || f.constructor.name === \"ZodRecord\";\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f.constructor.name === \"ZodEffects\";\n },\n};\n","import type { ZodType } from \"zod\";\n\nexport namespace zmAssertIds {\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","import {\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 type ZodType,\n ZodUnion,\n} from \"zod\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Instance assertions (ESM)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the instance of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return f instanceof ZodString;\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return f instanceof ZodNumber;\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return f instanceof ZodObject;\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return f instanceof ZodArray;\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return f instanceof ZodBoolean;\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return f instanceof ZodEnum;\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return f instanceof ZodDate;\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return f instanceof ZodDefault;\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return f instanceof ZodOptional;\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return f instanceof ZodNullable;\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return f instanceof ZodUnion;\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return f instanceof ZodAny;\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return f instanceof ZodMap || f instanceof ZodRecord;\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return f instanceof ZodEffects;\n },\n};\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\";\nimport type { IAsserts } from \"./types\";\n\n/**\n * Static names assertions (Bundlers)\n * @internal\n *\n * Asserts if a Zod type is a specific type\n * by checking the `__zm_type` property of it's prototype.\n */\nexport const zmAssert: IAsserts = {\n string(f: ZodType<any>): f is ZodString {\n return \"__zm_type\" in f && f.__zm_type === \"String\";\n },\n\n number(f: ZodType<any>): f is ZodNumber {\n return \"__zm_type\" in f && f.__zm_type === \"Number\";\n },\n\n object(f: ZodType<any>): f is ZodObject<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Object\";\n },\n\n array(f: ZodType<any>): f is ZodArray<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Array\";\n },\n\n boolean(f: ZodType<any>): f is ZodBoolean {\n return \"__zm_type\" in f && f.__zm_type === \"Boolean\";\n },\n\n enumerable(f: ZodType<any>): f is ZodEnum<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Enum\";\n },\n\n date(f: ZodType<any>): f is ZodDate {\n return \"__zm_type\" in f && f.__zm_type === \"Date\";\n },\n\n def(f: ZodType<any>): f is ZodDefault<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Default\";\n },\n\n optional(f: ZodType<any>): f is ZodOptional<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Optional\";\n },\n\n nullable(f: ZodType<any>): f is ZodNullable<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Nullable\";\n },\n\n union(f: ZodType<any>): f is ZodUnion<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Union\";\n },\n\n any(f: ZodType<any>): f is ZodAny {\n return \"__zm_type\" in f && f.__zm_type === \"Any\";\n },\n\n mapOrRecord(f: ZodType<any>): f is ZodMap<any> | ZodRecord<any> {\n return \"__zm_type\" in f && (f.__zm_type === \"Map\" || f.__zm_type === \"Record\");\n },\n\n effect(f: ZodType<any>): f is ZodEffects<any> {\n return \"__zm_type\" in f && f.__zm_type === \"Effects\";\n },\n};\n","import type { ZodType } from \"zod\";\nimport { zmAssert as aConstructor } from \"./constructor\";\nimport { zmAssertIds } from \"./custom\";\nimport { zmAssert as aInstance } from \"./instanceOf\";\nimport { zmAssert as aStaticName } from \"./staticNames\";\nimport type { IAsserts } from \"./types\";\n\nconst assertions = [aConstructor, aInstance, aStaticName];\nconst zmAssert = Object.keys(aConstructor)\n .map((key) => key as keyof IAsserts)\n .reduce((acc, key) => {\n (<any>acc[key]) = (f: ZodType<any>) => {\n return assertions.some((assertion) => assertion[key](f));\n };\n\n return acc;\n }, {} as IAsserts);\n\nexport default {\n ...zmAssert,\n ...zmAssertIds,\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 sparse: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n __zm_sparse: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n sparse: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n __zm_sparse: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n sparse: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n __zm_sparse: 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;\n/**\n * Extends the Zod library with additional functionality.\n *\n * This function modifies the Zod library to add custom validation and uniqueness checks.\n * It ensures that the extension is only applied once.\n *\n * @param z_0 - The Zod library to extend.\n *\n * @remarks\n * - Overrides `refine` method to `ZodType` that includes additional metadata for validation.\n * - Overrides `unique` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as unique.\n * - Overrides `sparse` method to `ZodString`, `ZodNumber`, and `ZodDate` to mark them as sparse.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n * import { extendZod } from \"./extension\";\n *\n * extendZod(z);\n *\n * const schema = z.object({\n * name: z.string().unique();\n * });\n * ```\n */\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 // Refine support\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 // Unique support\n const UNIQUE_SUPPORT_LIST = [z_0.ZodString, z_0.ZodNumber, z_0.ZodDate] as const;\n\n for (const type of UNIQUE_SUPPORT_LIST) {\n (<any>type.prototype).unique = function (arg = true) {\n (<any>this).__zm_unique = arg;\n return this;\n };\n\n (<any>type.prototype).sparse = function (arg = true) {\n (<any>this).__zm_sparse = arg;\n return this;\n };\n }\n\n // Assign static names to Zod types\n const TypesMap = {\n String: z_0.ZodString,\n Number: z_0.ZodNumber,\n Object: z_0.ZodObject,\n Array: z_0.ZodArray,\n Boolean: z_0.ZodBoolean,\n Enum: z_0.ZodEnum,\n Date: z_0.ZodDate,\n Default: z_0.ZodDefault,\n Optional: z_0.ZodOptional,\n Nullable: z_0.ZodNullable,\n Union: z_0.ZodUnion,\n Any: z_0.ZodAny,\n Map: z_0.ZodMap,\n Record: z_0.ZodRecord,\n Effects: z_0.ZodEffects,\n };\n\n for (const [key, value] of Object.entries(TypesMap)) {\n (<any>value.prototype).__zm_type = key;\n }\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n sparse: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n refPath: (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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 (<any>output).sparse = function (val = true) {\n (<any>this).__zm_sparse = 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 sparse: (arg?: boolean) => TzmUUID;\n ref: (arg: string) => TzmUUID;\n refPath: (arg: string) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (ref?: string): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\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).refPath = function (ref: string) {\n (<any>this).__zm_refPath = 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 (<any>output).sparse = function (val = true) {\n (<any>this).__zm_sparse = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["zmAssertIds","zmAssert","zmAssert","zmAssert","ref"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zodyac/zod-mongoose",
3
- "version": "4.0.0",
3
+ "version": "4.2.0",
4
4
  "description": "A library that allows you to generate mongoose schemas from zod objects.",
5
5
  "scripts": {
6
6
  "test": "jest",