@zodyac/zod-mongoose 2.0.1 → 2.1.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 +2 -0
- package/README.md +10 -10
- package/dist/index.cjs +37 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -5
- package/dist/index.d.ts +12 -5
- package/dist/index.js +35 -27
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -21,10 +21,10 @@ bun add @zodyac/zod-mongoose
|
|
|
21
21
|
|
|
22
22
|
## Breaking changes
|
|
23
23
|
> [!WARNING]
|
|
24
|
-
> If you were using
|
|
24
|
+
> If you were using `zId`, `zUUID`, `z.objectId()`, `z.mongoUUID()` before, please replace those with ```zId()``` and ```zUUID()```.
|
|
25
25
|
|
|
26
|
-
- ```zId``` is now ```
|
|
27
|
-
- ```zUUID``` is now ```
|
|
26
|
+
- ```zId``` is now ```zId(ref?)```
|
|
27
|
+
- ```zUUID``` is now ```zUUID()```
|
|
28
28
|
|
|
29
29
|
## Usage
|
|
30
30
|
|
|
@@ -41,8 +41,8 @@ const zUser = z.object({
|
|
|
41
41
|
age: z.number().min(18).max(100),
|
|
42
42
|
active: z.boolean().default(false),
|
|
43
43
|
access: z.enum(["admin", "user"]).default("user"),
|
|
44
|
-
companyId:
|
|
45
|
-
wearable:
|
|
44
|
+
companyId: zId("Company"),
|
|
45
|
+
wearable: zUUID(),
|
|
46
46
|
address: z.object({
|
|
47
47
|
street: z.string(),
|
|
48
48
|
city: z.string(),
|
|
@@ -126,7 +126,7 @@ const model = model("User", new Schema(schema, {
|
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
## ObjectID and UUID
|
|
129
|
-
You can use ```
|
|
129
|
+
You can use ```zId(ref?: string)``` and ```zUUID()``` to describe fields as ObjectID and UUID and add reference to another collection:
|
|
130
130
|
|
|
131
131
|
```typescript
|
|
132
132
|
import { extendZod } from "@zodyac/zod-mongoose";
|
|
@@ -135,10 +135,10 @@ import { z } from "zod"
|
|
|
135
135
|
extendZod(z);
|
|
136
136
|
|
|
137
137
|
const zUser = z.object({
|
|
138
|
-
someId:
|
|
139
|
-
companyId:
|
|
140
|
-
facilityId:
|
|
141
|
-
wearable:
|
|
138
|
+
someId: zId(),
|
|
139
|
+
companyId: zId("Company"),
|
|
140
|
+
facilityId: zId().ref("Facility"),
|
|
141
|
+
wearable: zUUID(),
|
|
142
142
|
});
|
|
143
143
|
```
|
|
144
144
|
|
package/dist/index.cjs
CHANGED
|
@@ -23,6 +23,8 @@ var src_exports = {};
|
|
|
23
23
|
__export(src_exports, {
|
|
24
24
|
default: () => src_default,
|
|
25
25
|
extendZod: () => extendZod,
|
|
26
|
+
zId: () => zId,
|
|
27
|
+
zUUID: () => zUUID,
|
|
26
28
|
zodSchema: () => zodSchema,
|
|
27
29
|
zodSchemaRaw: () => zodSchemaRaw
|
|
28
30
|
});
|
|
@@ -61,35 +63,41 @@ function extendZod(z_0) {
|
|
|
61
63
|
this.__zm_unique = arg;
|
|
62
64
|
return this;
|
|
63
65
|
};
|
|
64
|
-
z_0.objectId = (ref) => {
|
|
65
|
-
const output = import_zod.z.string().refine((v) => (0, import_mongoose.isValidObjectId)(v), {
|
|
66
|
-
message: "Invalid ObjectId"
|
|
67
|
-
}).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
68
|
-
output.__zm_type = "ObjectId";
|
|
69
|
-
output.__zm_ref = ref;
|
|
70
|
-
output.ref = function(ref2) {
|
|
71
|
-
this.__zm_ref = ref2;
|
|
72
|
-
return this;
|
|
73
|
-
};
|
|
74
|
-
output.unique = function(val = true) {
|
|
75
|
-
this.__zm_unique = val;
|
|
76
|
-
return this;
|
|
77
|
-
};
|
|
78
|
-
return output;
|
|
79
|
-
};
|
|
80
|
-
z_0.mongoUUID = () => {
|
|
81
|
-
const output = import_zod.z.string().uuid({
|
|
82
|
-
message: "Invalid UUID"
|
|
83
|
-
}).or(import_zod.z.instanceof(import_mongoose.Types.UUID).describe("UUID"));
|
|
84
|
-
output.__zm_type = "UUID";
|
|
85
|
-
output.unique = function(val = true) {
|
|
86
|
-
this.__zm_unique = val;
|
|
87
|
-
return this;
|
|
88
|
-
};
|
|
89
|
-
return output;
|
|
90
|
-
};
|
|
91
66
|
}
|
|
92
67
|
__name(extendZod, "extendZod");
|
|
68
|
+
var createId = /* @__PURE__ */ __name(() => {
|
|
69
|
+
return import_zod.z.string().refine((v) => (0, import_mongoose.isValidObjectId)(v), {
|
|
70
|
+
message: "Invalid ObjectId"
|
|
71
|
+
}).or(import_zod.z.instanceof(import_mongoose.Types.ObjectId));
|
|
72
|
+
}, "createId");
|
|
73
|
+
var zId = /* @__PURE__ */ __name((ref) => {
|
|
74
|
+
const output = createId();
|
|
75
|
+
output.__zm_type = "ObjectId";
|
|
76
|
+
output.__zm_ref = ref;
|
|
77
|
+
output.ref = function(ref2) {
|
|
78
|
+
this.__zm_ref = ref2;
|
|
79
|
+
return this;
|
|
80
|
+
};
|
|
81
|
+
output.unique = function(val = true) {
|
|
82
|
+
this.__zm_unique = val;
|
|
83
|
+
return this;
|
|
84
|
+
};
|
|
85
|
+
return output;
|
|
86
|
+
}, "zId");
|
|
87
|
+
var createUUID = /* @__PURE__ */ __name(() => {
|
|
88
|
+
return import_zod.z.string().uuid({
|
|
89
|
+
message: "Invalid UUID"
|
|
90
|
+
}).or(import_zod.z.instanceof(import_mongoose.Types.UUID));
|
|
91
|
+
}, "createUUID");
|
|
92
|
+
var zUUID = /* @__PURE__ */ __name(() => {
|
|
93
|
+
const output = createUUID();
|
|
94
|
+
output.__zm_type = "UUID";
|
|
95
|
+
output.unique = function(val = true) {
|
|
96
|
+
this.__zm_unique = val;
|
|
97
|
+
return this;
|
|
98
|
+
};
|
|
99
|
+
return output;
|
|
100
|
+
}, "zUUID");
|
|
93
101
|
|
|
94
102
|
// src/index.ts
|
|
95
103
|
function zodSchema(schema, options) {
|
|
@@ -300,6 +308,8 @@ var src_default = zodSchema;
|
|
|
300
308
|
// Annotate the CommonJS export names for ESM import in node:
|
|
301
309
|
0 && (module.exports = {
|
|
302
310
|
extendZod,
|
|
311
|
+
zId,
|
|
312
|
+
zUUID,
|
|
303
313
|
zodSchema,
|
|
304
314
|
zodSchemaRaw
|
|
305
315
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport {\n ZodArray,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n type ZodRawShape,\n ZodRecord,\n ZodString,\n type ZodType,\n ZodUnion,\n type z,\n} from \"zod\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: z.objectId('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: z.objectId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n const field_type = field.constructor.name;\n\n if (\"__zm_type\" in field && field.__zm_type === \"ObjectId\") {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (\"__zm_type\" in field && field.__zm_type === \"UUID\") {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (field instanceof ZodObject) {\n return parseObject(field);\n }\n\n if (field instanceof ZodNumber) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>,\n );\n }\n\n if (field instanceof ZodString) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>,\n );\n }\n\n if (field instanceof ZodEnum) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (field_type === \"ZodBoolean\") {\n return parseBoolean(required, def as boolean);\n }\n\n if (field instanceof ZodDate) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n );\n }\n\n if (field instanceof ZodArray) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never,\n );\n }\n\n if (field instanceof ZodDefault) {\n return parseField(field._def.innerType, required, field._def.defaultValue());\n }\n\n if (field instanceof ZodOptional) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (field instanceof ZodNullable) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (field instanceof ZodUnion) {\n return parseField(field._def.options[0]);\n }\n\n if (field_type === \"ZodAny\") {\n return parseMixed(required, def);\n }\n\n if (field instanceof ZodMap || field instanceof ZodRecord) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >,\n );\n }\n\n if (field instanceof ZodEffects) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>,\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>,\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case t instanceof ZodString:\n return String;\n case t instanceof ZodEnum:\n return String;\n case t instanceof ZodNumber:\n return Number;\n case t instanceof ZodDate:\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import { Types, isValidObjectId } from \"mongoose\";\nimport type { zm } from \"mongoose.types\";\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 namespace z {\n function objectId(ref?: string): zm.zID;\n function mongoUUID(): zm.zUUID;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n (<any>z_0).objectId = (ref?: string) => {\n const output = z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output;\n };\n\n (<any>z_0).mongoUUID = () => {\n const output = z\n .string()\n .uuid({ message: \"Invalid UUID\" })\n .or(z.instanceof(Types.UUID).describe(\"UUID\"));\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output;\n };\n}\n"],"mappings":"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","names":["import_mongoose","import_zod","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","objectId","ref","output","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","__zm_type","__zm_ref","val","mongoUUID","uuid","UUID","describe","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","ZodObject","f","parseField","Error","constructor","required","def","refinement","field_type","name","__zm_type","ref","__zm_ref","unique","__zm_unique","parseObjectId","parseUUID","ZodNumber","isUnique","parseNumber","ZodString","parseString","ZodEnum","parseEnum","keys","Values","parseBoolean","ZodDate","parseDate","ZodArray","parseArray","element","ZodDefault","_def","innerType","defaultValue","ZodOptional","undefined","ZodNullable","ZodUnion","parseMixed","ZodMap","ZodRecord","parseMap","keySchema","ZodEffects","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport {\n ZodArray,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n type ZodRawShape,\n ZodRecord,\n ZodString,\n type ZodType,\n ZodUnion,\n type z,\n} from \"zod\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const schema = zodSchema(zDoc);\n * const userModel = model('User', schema);\n */\nexport function zodSchema<T extends ZodRawShape>(\n schema: ZodObject<T>,\n options?: SchemaOptions<any>, // TODO: Fix any\n): Schema<z.infer<typeof schema>> {\n const definition = parseObject(schema);\n return new Schema<z.infer<typeof schema>>(definition, options);\n}\n\n/**\n * Converts a Zod schema to a raw Mongoose schema object\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';\n * import { model, Schema } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n const field_type = field.constructor.name;\n\n if (\"__zm_type\" in field && field.__zm_type === \"ObjectId\") {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (\"__zm_type\" in field && field.__zm_type === \"UUID\") {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (field instanceof ZodObject) {\n return parseObject(field);\n }\n\n if (field instanceof ZodNumber) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>,\n );\n }\n\n if (field instanceof ZodString) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>,\n );\n }\n\n if (field instanceof ZodEnum) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (field_type === \"ZodBoolean\") {\n return parseBoolean(required, def as boolean);\n }\n\n if (field instanceof ZodDate) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n );\n }\n\n if (field instanceof ZodArray) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never,\n );\n }\n\n if (field instanceof ZodDefault) {\n return parseField(field._def.innerType, required, field._def.defaultValue());\n }\n\n if (field instanceof ZodOptional) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (field instanceof ZodNullable) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (field instanceof ZodUnion) {\n return parseField(field._def.options[0]);\n }\n\n if (field_type === \"ZodAny\") {\n return parseMixed(required, def);\n }\n\n if (field instanceof ZodMap || field instanceof ZodRecord) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >,\n );\n }\n\n if (field instanceof ZodEffects) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>,\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>,\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case t instanceof ZodString:\n return String;\n case t instanceof ZodEnum:\n return String;\n case t instanceof ZodNumber:\n return Number;\n case t instanceof ZodDate:\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;IAAAA,mBAAwD;AACxD,IAAAC,cAiBO;;;AClBP,sBAAuC;AACvC,iBAA0C;AA2B1C,IAAIC,eAAe;AACZ,SAASC,UAAUC,KAAa;AAErC,MAAIF,aAAc;AAClBA,iBAAe;AAEf,QAAMG,UAAUD,IAAIE,QAAQC,UAAUC;AACtCJ,MAAIE,QAAQC,UAAUC,SAAS,SAC7BC,OACAC,MAAkE;AAElE,UAAMC,UAAUN,QAAQO,KAAK,IAAI,EAAEH,OAAOC,IAAAA;AAE1C,QAAIG,UAA+DC;AACnE,QAAI,OAAOJ,SAAS,SAAUG,WAAUH;aAC/B,aAAaA,KAAMG,WAAUH,KAAKG;AAErCF,YAAQI,KAAKC,OAAQC,kBAAkB;MAC3CC,WAAWT;MACXI;IACF;AAEA,WAAOF;EACT;AAEAP,MAAIe,UAAUZ,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACnD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEAjB,MAAImB,UAAUhB,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACnD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEAjB,MAAIoB,QAAQjB,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACjD,SAAKC,cAAcD;AACnB,WAAO;EACT;AACF;AAtCgBlB;AA6ChB,IAAMsB,WAAW,6BAAA;AACf,SAAOC,aACJC,OAAM,EACNnB,OAAO,CAACoB,UAAMC,iCAAgBD,CAAAA,GAAI;IAAEf,SAAS;EAAmB,CAAA,EAChEiB,GAAGJ,aAAEK,WAAWC,sBAAMC,QAAQ,CAAA;AACnC,GALiB;AAOV,IAAMC,MAAM,wBAACC,QAAAA;AAClB,QAAMC,SAASX,SAAAA;AAETW,SAAQC,YAAY;AACpBD,SAAQE,WAAWH;AAEnBC,SAAQD,MAAM,SAAUA,MAAW;AACjC,SAAMG,WAAWH;AACvB,WAAO;EACT;AAEMC,SAAQhB,SAAS,SAAUmB,MAAM,MAAI;AACnC,SAAMjB,cAAciB;AAC1B,WAAO;EACT;AAEA,SAAOH;AACT,GAjBmB;AAuBnB,IAAMI,aAAa,6BAAA;AACjB,SAAOd,aAAEC,OAAM,EAAGc,KAAK;IAAE5B,SAAS;EAAe,CAAA,EAAGiB,GAAGJ,aAAEK,WAAWC,sBAAMU,IAAI,CAAA;AAChF,GAFmB;AAIZ,IAAMC,QAAQ,6BAAA;AACnB,QAAMP,SAASI,WAAAA;AAETJ,SAAQC,YAAY;AAEpBD,SAAQhB,SAAS,SAAUmB,MAAM,MAAI;AACnC,SAAMjB,cAAciB;AAC1B,WAAO;EACT;AAEA,SAAOH;AACT,GAXqB;;;ADvDd,SAASQ,UACdC,QACAC,SAA4B;AAE5B,QAAMC,aAAaC,YAAYH,MAAAA;AAC/B,SAAO,IAAII,wBAA+BF,YAAYD,OAAAA;AACxD;AANgBF;AAwCT,SAASM,aAAoCL,QAAoB;AACtE,SAAOG,YAAYH,MAAAA;AACrB;AAFgBK;AAKhB,SAASF,YAAmCG,KAAiB;AAC3D,QAAMC,SAAc,CAAC;AACrB,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQL,IAAIM,KAAK,GAAG;AACpD,QAAIH,iBAAiBI,uBAAW;AAC9BN,aAAOC,GAAAA,IAAOL,YAAYM,KAAAA;IAC5B,OAAO;AACL,YAAMK,IAAIC,WAAWN,KAAAA;AACrB,UAAI,CAACK,EAAG,OAAM,IAAIE,MAAM,2BAA2BP,MAAMQ,WAAW,EAAE;AAEtEV,aAAOC,GAAAA,IAAOM;IAChB;EACF;AAEA,SAAOP;AACT;AAdSJ;AAgBT,SAASY,WACPN,OACAS,WAAW,MACXC,KACAC,YAAkC;AAElC,QAAMC,aAAaZ,MAAMQ,YAAYK;AAErC,MAAI,eAAeb,SAASA,MAAMc,cAAc,YAAY;AAC1D,UAAMC,MAAYf,MAAOgB;AACzB,UAAMC,SAAejB,MAAOkB;AAC5B,WAAOC,cAAcV,UAAUM,KAAKE,MAAAA;EACtC;AAEA,MAAI,eAAejB,SAASA,MAAMc,cAAc,QAAQ;AACtD,UAAMG,SAAejB,MAAOkB;AAC5B,WAAOE,UAAUX,UAAUQ,MAAAA;EAC7B;AAEA,MAAIjB,iBAAiBI,uBAAW;AAC9B,WAAOV,YAAYM,KAAAA;EACrB;AAEA,MAAIA,iBAAiBqB,uBAAW;AAC9B,UAAMC,WAAWtB,MAAMkB,eAAe;AACtC,WAAOK,YACLvB,OACAS,UACAC,KACAY,UACAX,UAAAA;EAEJ;AAEA,MAAIX,iBAAiBwB,uBAAW;AAC9B,UAAMF,WAAWtB,MAAMkB,eAAe;AACtC,WAAOO,YACLzB,OACAS,UACAC,KACAY,UACAX,UAAAA;EAEJ;AAEA,MAAIX,iBAAiB0B,qBAAS;AAC5B,WAAOC,UAAU1B,OAAO2B,KAAK5B,MAAM6B,MAAM,GAAGpB,UAAUC,GAAAA;EACxD;AAEA,MAAIE,eAAe,cAAc;AAC/B,WAAOkB,aAAarB,UAAUC,GAAAA;EAChC;AAEA,MAAIV,iBAAiB+B,qBAAS;AAC5B,UAAMT,WAAWtB,MAAMkB,eAAe;AACtC,WAAOc,UACLvB,UACAC,KACAC,YACAW,QAAAA;EAEJ;AAEA,MAAItB,iBAAiBiC,sBAAU;AAC7B,WAAOC,WACLzB,UACAT,MAAMmC,SACNzB,GAAAA;EAEJ;AAEA,MAAIV,iBAAiBoC,wBAAY;AAC/B,WAAO9B,WAAWN,MAAMqC,KAAKC,WAAW7B,UAAUT,MAAMqC,KAAKE,aAAY,CAAA;EAC3E;AAEA,MAAIvC,iBAAiBwC,yBAAa;AAChC,WAAOlC,WAAWN,MAAMqC,KAAKC,WAAW,OAAOG,MAAAA;EACjD;AAEA,MAAIzC,iBAAiB0C,yBAAa;AAChC,WAAOpC,WAAWN,MAAMqC,KAAKC,WAAW,OAAO5B,OAAO,IAAA;EACxD;AAEA,MAAIV,iBAAiB2C,sBAAU;AAC7B,WAAOrC,WAAWN,MAAMqC,KAAK7C,QAAQ,CAAA,CAAE;EACzC;AAEA,MAAIoB,eAAe,UAAU;AAC3B,WAAOgC,WAAWnC,UAAUC,GAAAA;EAC9B;AAEA,MAAIV,iBAAiB6C,sBAAU7C,iBAAiB8C,uBAAW;AACzD,WAAOC,SACLtC,UACAT,MAAMgD,WACNtC,GAAAA;EAKJ;AAEA,MAAIV,iBAAiBiD,wBAAY;AAC/B,UAAMC,SAASlD,MAAMqC,KAAKa;AAE1B,QAAIA,OAAOC,SAAS,cAAc;AAChC,YAAMC,aAAmBF,OAAQG;AACjC,aAAO/C,WAAWN,MAAMqC,KAAK9C,QAAQkB,UAAUC,KAAK0C,UAAAA;IACtD;EACF;AAEA,SAAO;AACT;AAhHS9C;AAkHT,SAASiB,YACPvB,OACAS,WAAW,MACXC,KACAO,SAAS,OACTqC,UAAqC;AAErC,QAAMC,SAAqB;IACzBJ,MAAMK;IACNC,SAAS/C;IACTgD,KAAK1D,MAAM2D,YAAYlB;IACvBmB,KAAK5D,MAAM6D,YAAYpB;IACvBhC;IACAQ;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAlBShC;AAoBT,SAASE,YACPzB,OACAS,WAAW,MACXC,KACAO,SAAS,OACTqC,UAAqC;AAErC,QAAMC,SAAqB;IACzBJ,MAAMW;IACNL,SAAS/C;IACTD;IACAsD,WAAW/D,MAAM+D,aAAatB;IAC9BuB,WAAWhE,MAAMgE,aAAavB;IAC9BxB;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAlBS9B;AAoBT,SAASE,UAAUsC,QAAkBxD,WAAW,MAAMC,KAAY;AAChE,SAAO;IACLyC,MAAMW;IACN7C,QAAQ;IACRwC,SAAS/C;IACTwD,MAAMD;IACNxD;EACF;AACF;AARSkB;AAUT,SAASG,aAAarB,WAAW,MAAMC,KAAa;AAClD,SAAO;IACLyC,MAAMgB;IACNV,SAAS/C;IACTD;EACF;AACF;AANSqB;AAQT,SAASE,UACPvB,WAAW,MACXC,KACA4C,UACArC,SAAS,OAAK;AAEd,QAAMsC,SAAmB;IACvBJ,MAAMiB;IACNX,SAAS/C;IACTD;IACAQ;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAfSvB;AAiBT,SAASb,cAAcV,WAAW,MAAMM,KAAcE,SAAS,OAAK;AAClE,QAAMsC,SAAuB;IAC3BJ,MAAMkB,6BAAYC;IAClB7D;IACAQ;EACF;AAEA,MAAIF,IAAKwC,QAAOxC,MAAMA;AACtB,SAAOwC;AACT;AATSpC;AAYT,SAASe,WAAczB,WAAW,MAAM0B,SAAqBzB,KAAS;AACpE,QAAM4B,YAAYhC,WAAW6B,OAAAA;AAC7B,MAAI,CAACG,UAAW,OAAM,IAAI/B,MAAM,wBAAA;AAChC,SAAO;IACL4C,MAAM;MAACb;;IACPmB,SAAS/C;IACTD;EACF;AACF;AARSyB;AAUT,SAASa,SAEPtC,WAAW,MACXV,KACAW,KAAwB;AAExB,QAAM6D,UAAUC,gBAAgBzE,GAAAA;AAChC,SAAO;IACLoD,MAAMsB;IACNC,IAAIH;IACJd,SAAS/C;IACTD;EACF;AACF;AAbSsC;AAeT,SAASyB,gBAAmBG,GAAa;AACvC,UAAQ,MAAA;IACN,KAAKA,aAAanD;AAChB,aAAOsC;IACT,KAAKa,aAAajD;AAChB,aAAOoC;IACT,KAAKa,aAAatD;AAChB,aAAOmC;IACT,KAAKmB,aAAa5C;AAChB,aAAOqC;IACT;AACE,aAAO3B;EACX;AACF;AAbS+B;AAeT,SAASpD,UAAUX,WAAW,MAAMQ,SAAS,OAAK;AAChD,SAAO;IACLkC,MAAMkB,6BAAYO;IAClBnE;IACAQ;EACF;AACF;AANSG;AAQT,SAASwB,WAAWnC,WAAW,MAAMC,KAAa;AAChD,SAAO;IACLyC,MAAMkB,6BAAYQ;IAClBpB,SAAS/C;IACTD;EACF;AACF;AANSmC;AAQT,IAAA,cAAetD;","names":["import_mongoose","import_zod","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","ZodObject","f","parseField","Error","constructor","required","def","refinement","field_type","name","__zm_type","ref","__zm_ref","unique","__zm_unique","parseObjectId","parseUUID","ZodNumber","isUnique","parseNumber","ZodString","parseString","ZodEnum","parseEnum","keys","Values","parseBoolean","ZodDate","parseDate","ZodArray","parseArray","element","ZodDefault","_def","innerType","defaultValue","ZodOptional","undefined","ZodNullable","ZodUnion","parseMixed","ZodMap","ZodRecord","parseMap","keySchema","ZodEffects","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -89,16 +89,23 @@ declare module "zod" {
|
|
|
89
89
|
unique: (arg?: boolean) => ZodDate;
|
|
90
90
|
__zm_unique: boolean;
|
|
91
91
|
}
|
|
92
|
-
namespace z {
|
|
93
|
-
function objectId(ref?: string): zm.zID;
|
|
94
|
-
function mongoUUID(): zm.zUUID;
|
|
95
|
-
}
|
|
96
92
|
interface ZodType<Output = any, Def extends z.ZodTypeDef = z.ZodTypeDef, Input = Output> {
|
|
97
93
|
}
|
|
98
94
|
}
|
|
99
95
|
declare function extendZod(z_0: typeof z): void;
|
|
96
|
+
type TzmId = ReturnType<typeof createId> & {
|
|
97
|
+
unique: (arg?: boolean) => TzmId;
|
|
98
|
+
ref: (arg: string) => TzmId;
|
|
99
|
+
};
|
|
100
|
+
declare const createId: () => z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodType<Types.ObjectId, z.ZodTypeDef, Types.ObjectId>]>;
|
|
101
|
+
declare const zId: (ref?: string) => TzmId;
|
|
102
|
+
type TzmUUID = ReturnType<typeof createUUID> & {
|
|
103
|
+
unique: (arg?: boolean) => TzmUUID;
|
|
104
|
+
};
|
|
105
|
+
declare const createUUID: () => z.ZodUnion<[z.ZodString, z.ZodType<Types.UUID, z.ZodTypeDef, Types.UUID>]>;
|
|
106
|
+
declare const zUUID: () => TzmUUID;
|
|
100
107
|
|
|
101
108
|
declare function zodSchema<T extends ZodRawShape>(schema: ZodObject<T>, options?: SchemaOptions<any>): Schema<z.infer<typeof schema>>;
|
|
102
109
|
declare function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T>;
|
|
103
110
|
|
|
104
|
-
export { zodSchema as default, extendZod, zodSchema, zodSchemaRaw };
|
|
111
|
+
export { type TzmId, type TzmUUID, zodSchema as default, extendZod, zId, zUUID, zodSchema, zodSchemaRaw };
|
package/dist/index.d.ts
CHANGED
|
@@ -89,16 +89,23 @@ declare module "zod" {
|
|
|
89
89
|
unique: (arg?: boolean) => ZodDate;
|
|
90
90
|
__zm_unique: boolean;
|
|
91
91
|
}
|
|
92
|
-
namespace z {
|
|
93
|
-
function objectId(ref?: string): zm.zID;
|
|
94
|
-
function mongoUUID(): zm.zUUID;
|
|
95
|
-
}
|
|
96
92
|
interface ZodType<Output = any, Def extends z.ZodTypeDef = z.ZodTypeDef, Input = Output> {
|
|
97
93
|
}
|
|
98
94
|
}
|
|
99
95
|
declare function extendZod(z_0: typeof z): void;
|
|
96
|
+
type TzmId = ReturnType<typeof createId> & {
|
|
97
|
+
unique: (arg?: boolean) => TzmId;
|
|
98
|
+
ref: (arg: string) => TzmId;
|
|
99
|
+
};
|
|
100
|
+
declare const createId: () => z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodType<Types.ObjectId, z.ZodTypeDef, Types.ObjectId>]>;
|
|
101
|
+
declare const zId: (ref?: string) => TzmId;
|
|
102
|
+
type TzmUUID = ReturnType<typeof createUUID> & {
|
|
103
|
+
unique: (arg?: boolean) => TzmUUID;
|
|
104
|
+
};
|
|
105
|
+
declare const createUUID: () => z.ZodUnion<[z.ZodString, z.ZodType<Types.UUID, z.ZodTypeDef, Types.UUID>]>;
|
|
106
|
+
declare const zUUID: () => TzmUUID;
|
|
100
107
|
|
|
101
108
|
declare function zodSchema<T extends ZodRawShape>(schema: ZodObject<T>, options?: SchemaOptions<any>): Schema<z.infer<typeof schema>>;
|
|
102
109
|
declare function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T>;
|
|
103
110
|
|
|
104
|
-
export { zodSchema as default, extendZod, zodSchema, zodSchemaRaw };
|
|
111
|
+
export { type TzmId, type TzmUUID, zodSchema as default, extendZod, zId, zUUID, zodSchema, zodSchemaRaw };
|
package/dist/index.js
CHANGED
|
@@ -36,35 +36,41 @@ function extendZod(z_0) {
|
|
|
36
36
|
this.__zm_unique = arg;
|
|
37
37
|
return this;
|
|
38
38
|
};
|
|
39
|
-
z_0.objectId = (ref) => {
|
|
40
|
-
const output = z.string().refine((v) => isValidObjectId(v), {
|
|
41
|
-
message: "Invalid ObjectId"
|
|
42
|
-
}).or(z.instanceof(Types.ObjectId));
|
|
43
|
-
output.__zm_type = "ObjectId";
|
|
44
|
-
output.__zm_ref = ref;
|
|
45
|
-
output.ref = function(ref2) {
|
|
46
|
-
this.__zm_ref = ref2;
|
|
47
|
-
return this;
|
|
48
|
-
};
|
|
49
|
-
output.unique = function(val = true) {
|
|
50
|
-
this.__zm_unique = val;
|
|
51
|
-
return this;
|
|
52
|
-
};
|
|
53
|
-
return output;
|
|
54
|
-
};
|
|
55
|
-
z_0.mongoUUID = () => {
|
|
56
|
-
const output = z.string().uuid({
|
|
57
|
-
message: "Invalid UUID"
|
|
58
|
-
}).or(z.instanceof(Types.UUID).describe("UUID"));
|
|
59
|
-
output.__zm_type = "UUID";
|
|
60
|
-
output.unique = function(val = true) {
|
|
61
|
-
this.__zm_unique = val;
|
|
62
|
-
return this;
|
|
63
|
-
};
|
|
64
|
-
return output;
|
|
65
|
-
};
|
|
66
39
|
}
|
|
67
40
|
__name(extendZod, "extendZod");
|
|
41
|
+
var createId = /* @__PURE__ */ __name(() => {
|
|
42
|
+
return z.string().refine((v) => isValidObjectId(v), {
|
|
43
|
+
message: "Invalid ObjectId"
|
|
44
|
+
}).or(z.instanceof(Types.ObjectId));
|
|
45
|
+
}, "createId");
|
|
46
|
+
var zId = /* @__PURE__ */ __name((ref) => {
|
|
47
|
+
const output = createId();
|
|
48
|
+
output.__zm_type = "ObjectId";
|
|
49
|
+
output.__zm_ref = ref;
|
|
50
|
+
output.ref = function(ref2) {
|
|
51
|
+
this.__zm_ref = ref2;
|
|
52
|
+
return this;
|
|
53
|
+
};
|
|
54
|
+
output.unique = function(val = true) {
|
|
55
|
+
this.__zm_unique = val;
|
|
56
|
+
return this;
|
|
57
|
+
};
|
|
58
|
+
return output;
|
|
59
|
+
}, "zId");
|
|
60
|
+
var createUUID = /* @__PURE__ */ __name(() => {
|
|
61
|
+
return z.string().uuid({
|
|
62
|
+
message: "Invalid UUID"
|
|
63
|
+
}).or(z.instanceof(Types.UUID));
|
|
64
|
+
}, "createUUID");
|
|
65
|
+
var zUUID = /* @__PURE__ */ __name(() => {
|
|
66
|
+
const output = createUUID();
|
|
67
|
+
output.__zm_type = "UUID";
|
|
68
|
+
output.unique = function(val = true) {
|
|
69
|
+
this.__zm_unique = val;
|
|
70
|
+
return this;
|
|
71
|
+
};
|
|
72
|
+
return output;
|
|
73
|
+
}, "zUUID");
|
|
68
74
|
|
|
69
75
|
// src/index.ts
|
|
70
76
|
function zodSchema(schema, options) {
|
|
@@ -275,6 +281,8 @@ var src_default = zodSchema;
|
|
|
275
281
|
export {
|
|
276
282
|
src_default as default,
|
|
277
283
|
extendZod,
|
|
284
|
+
zId,
|
|
285
|
+
zUUID,
|
|
278
286
|
zodSchema,
|
|
279
287
|
zodSchemaRaw
|
|
280
288
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport {\n ZodArray,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n type ZodRawShape,\n ZodRecord,\n ZodString,\n type ZodType,\n ZodUnion,\n type z,\n} from \"zod\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: z.objectId('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: z.objectId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n const field_type = field.constructor.name;\n\n if (\"__zm_type\" in field && field.__zm_type === \"ObjectId\") {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (\"__zm_type\" in field && field.__zm_type === \"UUID\") {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (field instanceof ZodObject) {\n return parseObject(field);\n }\n\n if (field instanceof ZodNumber) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>,\n );\n }\n\n if (field instanceof ZodString) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>,\n );\n }\n\n if (field instanceof ZodEnum) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (field_type === \"ZodBoolean\") {\n return parseBoolean(required, def as boolean);\n }\n\n if (field instanceof ZodDate) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n );\n }\n\n if (field instanceof ZodArray) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never,\n );\n }\n\n if (field instanceof ZodDefault) {\n return parseField(field._def.innerType, required, field._def.defaultValue());\n }\n\n if (field instanceof ZodOptional) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (field instanceof ZodNullable) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (field instanceof ZodUnion) {\n return parseField(field._def.options[0]);\n }\n\n if (field_type === \"ZodAny\") {\n return parseMixed(required, def);\n }\n\n if (field instanceof ZodMap || field instanceof ZodRecord) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >,\n );\n }\n\n if (field instanceof ZodEffects) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>,\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>,\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case t instanceof ZodString:\n return String;\n case t instanceof ZodEnum:\n return String;\n case t instanceof ZodNumber:\n return Number;\n case t instanceof ZodDate:\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import { Types, isValidObjectId } from \"mongoose\";\nimport type { zm } from \"mongoose.types\";\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 namespace z {\n function objectId(ref?: string): zm.zID;\n function mongoUUID(): zm.zUUID;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n (<any>z_0).objectId = (ref?: string) => {\n const output = z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output;\n };\n\n (<any>z_0).mongoUUID = () => {\n const output = z\n .string()\n .uuid({ message: \"Invalid UUID\" })\n .or(z.instanceof(Types.UUID).describe(\"UUID\"));\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output;\n };\n}\n"],"mappings":";;;;AAAA,SAASA,QAA4BC,mBAAmB;AACxD,SACEC,UACAC,SACAC,YACAC,YACAC,SACAC,QACAC,aACAC,WACAC,WACAC,aAEAC,WACAC,WAEAC,gBAEK;;;AClBP,SAASC,OAAOC,uBAAuB;AAEvC,SAAiCC,SAAS;AAgC1C,IAAIC,eAAe;AACZ,SAASC,UAAUC,KAAa;AAErC,MAAIF,aAAc;AAClBA,iBAAe;AAEf,QAAMG,UAAUD,IAAIE,QAAQC,UAAUC;AACtCJ,MAAIE,QAAQC,UAAUC,SAAS,SAC7BC,OACAC,MAAkE;AAElE,UAAMC,UAAUN,QAAQO,KAAK,IAAI,EAAEH,OAAOC,IAAAA;AAE1C,QAAIG,UAA+DC;AACnE,QAAI,OAAOJ,SAAS,SAAUG,WAAUH;aAC/B,aAAaA,KAAMG,WAAUH,KAAKG;AAErCF,YAAQI,KAAKC,OAAQC,kBAAkB;MAC3CC,WAAWT;MACXI;IACF;AAEA,WAAOF;EACT;AAEAP,MAAIe,UAAUZ,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACnD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEAjB,MAAImB,UAAUhB,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACnD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEAjB,MAAIoB,QAAQjB,UAAUa,SAAS,SAAUC,MAAM,MAAI;AACjD,SAAKC,cAAcD;AACnB,WAAO;EACT;AAEMjB,MAAKqB,WAAW,CAACC,QAAAA;AACrB,UAAMC,SAASC,EACZC,OAAM,EACNrB,OAAO,CAACsB,MAAMC,gBAAgBD,CAAAA,GAAI;MAAEjB,SAAS;IAAmB,CAAA,EAChEmB,GAAGJ,EAAEK,WAAWC,MAAMC,QAAQ,CAAA;AAE3BR,WAAQS,YAAY;AACpBT,WAAQU,WAAWX;AAEnBC,WAAQD,MAAM,SAAUA,MAAW;AACjC,WAAMW,WAAWX;AACvB,aAAO;IACT;AAEMC,WAAQP,SAAS,SAAUkB,MAAM,MAAI;AACnC,WAAMhB,cAAcgB;AAC1B,aAAO;IACT;AAEA,WAAOX;EACT;AAEMvB,MAAKmC,YAAY,MAAA;AACrB,UAAMZ,SAASC,EACZC,OAAM,EACNW,KAAK;MAAE3B,SAAS;IAAe,CAAA,EAC/BmB,GAAGJ,EAAEK,WAAWC,MAAMO,IAAI,EAAEC,SAAS,MAAA,CAAA;AAClCf,WAAQS,YAAY;AAEpBT,WAAQP,SAAS,SAAUkB,MAAM,MAAI;AACnC,WAAMhB,cAAcgB;AAC1B,aAAO;IACT;AAEA,WAAOX;EACT;AACF;AA3EgBxB;;;ADkBT,SAASwC,UACdC,QACAC,SAA4B;AAE5B,QAAMC,aAAaC,YAAYH,MAAAA;AAC/B,SAAO,IAAII,OAA+BF,YAAYD,OAAAA;AACxD;AANgBF;AAwCT,SAASM,aAAoCL,QAAoB;AACtE,SAAOG,YAAYH,MAAAA;AACrB;AAFgBK;AAKhB,SAASF,YAAmCG,KAAiB;AAC3D,QAAMC,SAAc,CAAC;AACrB,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQL,IAAIM,KAAK,GAAG;AACpD,QAAIH,iBAAiBI,WAAW;AAC9BN,aAAOC,GAAAA,IAAOL,YAAYM,KAAAA;IAC5B,OAAO;AACL,YAAMK,IAAIC,WAAWN,KAAAA;AACrB,UAAI,CAACK,EAAG,OAAM,IAAIE,MAAM,2BAA2BP,MAAMQ,WAAW,EAAE;AAEtEV,aAAOC,GAAAA,IAAOM;IAChB;EACF;AAEA,SAAOP;AACT;AAdSJ;AAgBT,SAASY,WACPN,OACAS,WAAW,MACXC,KACAC,YAAkC;AAElC,QAAMC,aAAaZ,MAAMQ,YAAYK;AAErC,MAAI,eAAeb,SAASA,MAAMc,cAAc,YAAY;AAC1D,UAAMC,MAAYf,MAAOgB;AACzB,UAAMC,SAAejB,MAAOkB;AAC5B,WAAOC,cAAcV,UAAUM,KAAKE,MAAAA;EACtC;AAEA,MAAI,eAAejB,SAASA,MAAMc,cAAc,QAAQ;AACtD,UAAMG,SAAejB,MAAOkB;AAC5B,WAAOE,UAAUX,UAAUQ,MAAAA;EAC7B;AAEA,MAAIjB,iBAAiBI,WAAW;AAC9B,WAAOV,YAAYM,KAAAA;EACrB;AAEA,MAAIA,iBAAiBqB,WAAW;AAC9B,UAAMC,WAAWtB,MAAMkB,eAAe;AACtC,WAAOK,YACLvB,OACAS,UACAC,KACAY,UACAX,UAAAA;EAEJ;AAEA,MAAIX,iBAAiBwB,WAAW;AAC9B,UAAMF,WAAWtB,MAAMkB,eAAe;AACtC,WAAOO,YACLzB,OACAS,UACAC,KACAY,UACAX,UAAAA;EAEJ;AAEA,MAAIX,iBAAiB0B,SAAS;AAC5B,WAAOC,UAAU1B,OAAO2B,KAAK5B,MAAM6B,MAAM,GAAGpB,UAAUC,GAAAA;EACxD;AAEA,MAAIE,eAAe,cAAc;AAC/B,WAAOkB,aAAarB,UAAUC,GAAAA;EAChC;AAEA,MAAIV,iBAAiB+B,SAAS;AAC5B,UAAMT,WAAWtB,MAAMkB,eAAe;AACtC,WAAOc,UACLvB,UACAC,KACAC,YACAW,QAAAA;EAEJ;AAEA,MAAItB,iBAAiBiC,UAAU;AAC7B,WAAOC,WACLzB,UACAT,MAAMmC,SACNzB,GAAAA;EAEJ;AAEA,MAAIV,iBAAiBoC,YAAY;AAC/B,WAAO9B,WAAWN,MAAMqC,KAAKC,WAAW7B,UAAUT,MAAMqC,KAAKE,aAAY,CAAA;EAC3E;AAEA,MAAIvC,iBAAiBwC,aAAa;AAChC,WAAOlC,WAAWN,MAAMqC,KAAKC,WAAW,OAAOG,MAAAA;EACjD;AAEA,MAAIzC,iBAAiB0C,aAAa;AAChC,WAAOpC,WAAWN,MAAMqC,KAAKC,WAAW,OAAO5B,OAAO,IAAA;EACxD;AAEA,MAAIV,iBAAiB2C,UAAU;AAC7B,WAAOrC,WAAWN,MAAMqC,KAAK7C,QAAQ,CAAA,CAAE;EACzC;AAEA,MAAIoB,eAAe,UAAU;AAC3B,WAAOgC,WAAWnC,UAAUC,GAAAA;EAC9B;AAEA,MAAIV,iBAAiB6C,UAAU7C,iBAAiB8C,WAAW;AACzD,WAAOC,SACLtC,UACAT,MAAMgD,WACNtC,GAAAA;EAKJ;AAEA,MAAIV,iBAAiBiD,YAAY;AAC/B,UAAMC,SAASlD,MAAMqC,KAAKa;AAE1B,QAAIA,OAAOC,SAAS,cAAc;AAChC,YAAMC,aAAmBF,OAAQG;AACjC,aAAO/C,WAAWN,MAAMqC,KAAK9C,QAAQkB,UAAUC,KAAK0C,UAAAA;IACtD;EACF;AAEA,SAAO;AACT;AAhHS9C;AAkHT,SAASiB,YACPvB,OACAS,WAAW,MACXC,KACAO,SAAS,OACTqC,UAAqC;AAErC,QAAMC,SAAqB;IACzBJ,MAAMK;IACNC,SAAS/C;IACTgD,KAAK1D,MAAM2D,YAAYlB;IACvBmB,KAAK5D,MAAM6D,YAAYpB;IACvBhC;IACAQ;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAlBShC;AAoBT,SAASE,YACPzB,OACAS,WAAW,MACXC,KACAO,SAAS,OACTqC,UAAqC;AAErC,QAAMC,SAAqB;IACzBJ,MAAMW;IACNL,SAAS/C;IACTD;IACAsD,WAAW/D,MAAM+D,aAAatB;IAC9BuB,WAAWhE,MAAMgE,aAAavB;IAC9BxB;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAlBS9B;AAoBT,SAASE,UAAUsC,QAAkBxD,WAAW,MAAMC,KAAY;AAChE,SAAO;IACLyC,MAAMW;IACN7C,QAAQ;IACRwC,SAAS/C;IACTwD,MAAMD;IACNxD;EACF;AACF;AARSkB;AAUT,SAASG,aAAarB,WAAW,MAAMC,KAAa;AAClD,SAAO;IACLyC,MAAMgB;IACNV,SAAS/C;IACTD;EACF;AACF;AANSqB;AAQT,SAASE,UACPvB,WAAW,MACXC,KACA4C,UACArC,SAAS,OAAK;AAEd,QAAMsC,SAAmB;IACvBJ,MAAMiB;IACNX,SAAS/C;IACTD;IACAQ;EACF;AAEA,MAAIqC,SAAUC,QAAOD,WAAWA;AAChC,SAAOC;AACT;AAfSvB;AAiBT,SAASb,cAAcV,WAAW,MAAMM,KAAcE,SAAS,OAAK;AAClE,QAAMsC,SAAuB;IAC3BJ,MAAMkB,YAAYC;IAClB7D;IACAQ;EACF;AAEA,MAAIF,IAAKwC,QAAOxC,MAAMA;AACtB,SAAOwC;AACT;AATSpC;AAYT,SAASe,WAAczB,WAAW,MAAM0B,SAAqBzB,KAAS;AACpE,QAAM4B,YAAYhC,WAAW6B,OAAAA;AAC7B,MAAI,CAACG,UAAW,OAAM,IAAI/B,MAAM,wBAAA;AAChC,SAAO;IACL4C,MAAM;MAACb;;IACPmB,SAAS/C;IACTD;EACF;AACF;AARSyB;AAUT,SAASa,SAEPtC,WAAW,MACXV,KACAW,KAAwB;AAExB,QAAM6D,UAAUC,gBAAgBzE,GAAAA;AAChC,SAAO;IACLoD,MAAMsB;IACNC,IAAIH;IACJd,SAAS/C;IACTD;EACF;AACF;AAbSsC;AAeT,SAASyB,gBAAmBG,GAAa;AACvC,UAAQ,MAAA;IACN,KAAKA,aAAanD;AAChB,aAAOsC;IACT,KAAKa,aAAajD;AAChB,aAAOoC;IACT,KAAKa,aAAatD;AAChB,aAAOmC;IACT,KAAKmB,aAAa5C;AAChB,aAAOqC;IACT;AACE,aAAO3B;EACX;AACF;AAbS+B;AAeT,SAASpD,UAAUX,WAAW,MAAMQ,SAAS,OAAK;AAChD,SAAO;IACLkC,MAAMkB,YAAYO;IAClBnE;IACAQ;EACF;AACF;AANSG;AAQT,SAASwB,WAAWnC,WAAW,MAAMC,KAAa;AAChD,SAAO;IACLyC,MAAMkB,YAAYQ;IAClBpB,SAAS/C;IACTD;EACF;AACF;AANSmC;AAQT,IAAA,cAAetD;","names":["Schema","SchemaTypes","ZodArray","ZodDate","ZodDefault","ZodEffects","ZodEnum","ZodMap","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodRecord","ZodString","ZodUnion","Types","isValidObjectId","z","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","objectId","ref","output","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","__zm_type","__zm_ref","val","mongoUUID","uuid","UUID","describe","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","ZodObject","f","parseField","Error","constructor","required","def","refinement","field_type","name","__zm_type","ref","__zm_ref","unique","__zm_unique","parseObjectId","parseUUID","ZodNumber","isUnique","parseNumber","ZodString","parseString","ZodEnum","parseEnum","keys","Values","parseBoolean","ZodDate","parseDate","ZodArray","parseArray","element","ZodDefault","_def","innerType","defaultValue","ZodOptional","undefined","ZodNullable","ZodUnion","parseMixed","ZodMap","ZodRecord","parseMap","keySchema","ZodEffects","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/extension.ts"],"sourcesContent":["import { Schema, type SchemaOptions, SchemaTypes } from \"mongoose\";\nimport {\n ZodArray,\n ZodDate,\n ZodDefault,\n ZodEffects,\n ZodEnum,\n ZodMap,\n ZodNullable,\n ZodNumber,\n ZodObject,\n ZodOptional,\n type ZodRawShape,\n ZodRecord,\n ZodString,\n type ZodType,\n ZodUnion,\n type z,\n} from \"zod\";\nimport type { zm } from \"./mongoose.types.js\";\nexport * from \"./extension.js\";\n\n/**\n * Converts a Zod schema to a Mongoose schema\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchema } from '@zodyac/zod-mongoose';\n * import { model } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const schema = zodSchema(zDoc);\n * const userModel = model('User', schema);\n */\nexport function zodSchema<T extends ZodRawShape>(\n schema: ZodObject<T>,\n options?: SchemaOptions<any>, // TODO: Fix any\n): Schema<z.infer<typeof schema>> {\n const definition = parseObject(schema);\n return new Schema<z.infer<typeof schema>>(definition, options);\n}\n\n/**\n * Converts a Zod schema to a raw Mongoose schema object\n * @param schema zod schema to parse\n * @returns mongoose schema\n *\n * @example\n * import { extendZod, zodSchemaRaw } from '@zodyac/zod-mongoose';\n * import { model, Schema } from 'mongoose';\n * import { z } from 'zod';\n *\n * extendZod(z);\n *\n * const zUser = z.object({\n * name: z.string().min(3).max(255),\n * age: z.number().min(18).max(100),\n * active: z.boolean().default(false),\n * access: z.enum(['admin', 'user']).default('user'),\n * companyId: zId('Company'),\n * address: z.object({\n * street: z.string(),\n * city: z.string(),\n * state: z.enum(['CA', 'NY', 'TX']),\n * }),\n * tags: z.array(z.string()),\n * createdAt: z.date(),\n * updatedAt: z.date(),\n * });\n *\n * const rawSchema = zodSchemaRaw(zDoc);\n * const schema = new Schema(rawSchema);\n * const userModel = model('User', schema);\n */\nexport function zodSchemaRaw<T extends ZodRawShape>(schema: ZodObject<T>): zm._Schema<T> {\n return parseObject(schema);\n}\n\n// Helpers\nfunction parseObject<T extends ZodRawShape>(obj: ZodObject<T>): zm._Schema<T> {\n const object: any = {};\n for (const [key, field] of Object.entries(obj.shape)) {\n if (field instanceof ZodObject) {\n object[key] = parseObject(field);\n } else {\n const f = parseField(field);\n if (!f) throw new Error(`Unsupported field type: ${field.constructor}`);\n\n object[key] = f;\n }\n }\n\n return object;\n}\n\nfunction parseField<T>(\n field: ZodType<T>,\n required = true,\n def?: T,\n refinement?: zm.EffectValidator<T>,\n): zm.mField | null {\n const field_type = field.constructor.name;\n\n if (\"__zm_type\" in field && field.__zm_type === \"ObjectId\") {\n const ref = (<any>field).__zm_ref;\n const unique = (<any>field).__zm_unique;\n return parseObjectId(required, ref, unique);\n }\n\n if (\"__zm_type\" in field && field.__zm_type === \"UUID\") {\n const unique = (<any>field).__zm_unique;\n return parseUUID(required, unique);\n }\n\n if (field instanceof ZodObject) {\n return parseObject(field);\n }\n\n if (field instanceof ZodNumber) {\n const isUnique = field.__zm_unique ?? false;\n return parseNumber(\n field,\n required,\n def as number,\n isUnique,\n refinement as zm.EffectValidator<number>,\n );\n }\n\n if (field instanceof ZodString) {\n const isUnique = field.__zm_unique ?? false;\n return parseString(\n field,\n required,\n def as string,\n isUnique,\n refinement as zm.EffectValidator<string>,\n );\n }\n\n if (field instanceof ZodEnum) {\n return parseEnum(Object.keys(field.Values), required, def as string);\n }\n\n if (field_type === \"ZodBoolean\") {\n return parseBoolean(required, def as boolean);\n }\n\n if (field instanceof ZodDate) {\n const isUnique = field.__zm_unique ?? false;\n return parseDate(\n required,\n def as Date,\n refinement as zm.EffectValidator<Date>,\n isUnique,\n );\n }\n\n if (field instanceof ZodArray) {\n return parseArray(\n required,\n field.element,\n def as T extends Array<infer K> ? K[] : never,\n );\n }\n\n if (field instanceof ZodDefault) {\n return parseField(field._def.innerType, required, field._def.defaultValue());\n }\n\n if (field instanceof ZodOptional) {\n return parseField(field._def.innerType, false, undefined);\n }\n\n if (field instanceof ZodNullable) {\n return parseField(field._def.innerType, false, def || null);\n }\n\n if (field instanceof ZodUnion) {\n return parseField(field._def.options[0]);\n }\n\n if (field_type === \"ZodAny\") {\n return parseMixed(required, def);\n }\n\n if (field instanceof ZodMap || field instanceof ZodRecord) {\n return parseMap(\n required,\n field.keySchema,\n def as Map<\n zm.UnwrapZodType<typeof field.keySchema>,\n zm.UnwrapZodType<typeof field.valueSchema>\n >,\n );\n }\n\n if (field instanceof ZodEffects) {\n const effect = field._def.effect;\n\n if (effect.type === \"refinement\") {\n const validation = (<any>effect).__zm_validation as zm.EffectValidator<T>;\n return parseField(field._def.schema, required, def, validation);\n }\n }\n\n return null;\n}\n\nfunction parseNumber(\n field: ZodNumber,\n required = true,\n def?: number,\n unique = false,\n validate?: zm.EffectValidator<number>,\n): zm.mNumber {\n const output: zm.mNumber = {\n type: Number,\n default: def,\n min: field.minValue ?? undefined,\n max: field.maxValue ?? undefined,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseString(\n field: ZodString,\n required = true,\n def?: string,\n unique = false,\n validate?: zm.EffectValidator<string>,\n): zm.mString {\n const output: zm.mString = {\n type: String,\n default: def,\n required,\n minLength: field.minLength ?? undefined,\n maxLength: field.maxLength ?? undefined,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseEnum(values: string[], required = true, def?: string): zm.mString {\n return {\n type: String,\n unique: false,\n default: def,\n enum: values,\n required,\n };\n}\n\nfunction parseBoolean(required = true, def?: boolean): zm.mBoolean {\n return {\n type: Boolean,\n default: def,\n required,\n };\n}\n\nfunction parseDate(\n required = true,\n def?: Date,\n validate?: zm.EffectValidator<Date>,\n unique = false,\n): zm.mDate {\n const output: zm.mDate = {\n type: Date,\n default: def,\n required,\n unique,\n };\n\n if (validate) output.validate = validate;\n return output;\n}\n\nfunction parseObjectId(required = true, ref?: string, unique = false): zm.mObjectId {\n const output: zm.mObjectId = {\n type: SchemaTypes.ObjectId,\n required,\n unique,\n };\n\n if (ref) output.ref = ref;\n return output;\n}\n\n// biome-ignore lint/style/useDefaultParameterLast: Should be consistent with other functions\nfunction parseArray<T>(required = true, element: ZodType<T>, def?: T[]): zm.mArray<T> {\n const innerType = parseField(element);\n if (!innerType) throw new Error(\"Unsupported array type\");\n return {\n type: [innerType as zm._Field<T>],\n default: def,\n required,\n };\n}\n\nfunction parseMap<T, K>(\n // biome-ignore lint/style/useDefaultParameterLast: Consistency\n required = true,\n key: ZodType<T>,\n def?: Map<NoInfer<T>, K>,\n): zm.mMap<T, K> {\n const pointer = typeConstructor(key);\n return {\n type: Map,\n of: pointer,\n default: def,\n required,\n };\n}\n\nfunction typeConstructor<T>(t: ZodType<T>) {\n switch (true) {\n case t instanceof ZodString:\n return String;\n case t instanceof ZodEnum:\n return String;\n case t instanceof ZodNumber:\n return Number;\n case t instanceof ZodDate:\n return Date;\n default:\n return undefined;\n }\n}\n\nfunction parseUUID(required = true, unique = false): zm.mUUID {\n return {\n type: SchemaTypes.UUID,\n required,\n unique,\n };\n}\n\nfunction parseMixed(required = true, def?: unknown): zm.mMixed<unknown> {\n return {\n type: SchemaTypes.Mixed,\n default: def,\n required,\n };\n}\n\nexport default zodSchema;\n","import { Types, isValidObjectId } from \"mongoose\";\nimport { type CustomErrorParams, z } from \"zod\";\n\ndeclare module \"zod\" {\n interface ZodString {\n unique: (arg?: boolean) => ZodString;\n __zm_unique: boolean;\n }\n\n interface ZodNumber {\n unique: (arg?: boolean) => ZodNumber;\n __zm_unique: boolean;\n }\n\n interface ZodDate {\n unique: (arg?: boolean) => ZodDate;\n __zm_unique: boolean;\n }\n\n interface ZodType<\n Output = any,\n Def extends z.ZodTypeDef = z.ZodTypeDef,\n Input = Output,\n > {\n // For future use\n }\n}\n\nlet zod_extended = false;\nexport function extendZod(z_0: typeof z) {\n // Prevent zod from being extended multiple times\n if (zod_extended) return;\n zod_extended = true;\n\n const _refine = z_0.ZodType.prototype.refine;\n z_0.ZodType.prototype.refine = function <T>(\n check: (arg0: T) => boolean,\n opts: string | CustomErrorParams | ((arg: T) => CustomErrorParams),\n ) {\n const zEffect = _refine.bind(this)(check, opts);\n\n let message: string | undefined | ((v: T) => string | undefined) = undefined;\n if (typeof opts === \"string\") message = opts;\n else if (\"message\" in opts) message = opts.message;\n\n (<any>zEffect._def.effect).__zm_validation = {\n validator: check,\n message: message,\n };\n\n return zEffect;\n };\n\n z_0.ZodString.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodNumber.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n\n z_0.ZodDate.prototype.unique = function (arg = true) {\n this.__zm_unique = arg;\n return this;\n };\n}\n\nexport type TzmId = ReturnType<typeof createId> & {\n unique: (arg?: boolean) => TzmId;\n ref: (arg: string) => TzmId;\n};\n\nconst createId = () => {\n return z\n .string()\n .refine((v) => isValidObjectId(v), { message: \"Invalid ObjectId\" })\n .or(z.instanceof(Types.ObjectId));\n};\n\nexport const zId = (ref?: string): TzmId => {\n const output = createId();\n\n (<any>output).__zm_type = \"ObjectId\";\n (<any>output).__zm_ref = ref;\n\n (<any>output).ref = function (ref: string) {\n (<any>this).__zm_ref = ref;\n return this;\n };\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmId;\n};\n\nexport type TzmUUID = ReturnType<typeof createUUID> & {\n unique: (arg?: boolean) => TzmUUID;\n};\n\nconst createUUID = () => {\n return z.string().uuid({ message: \"Invalid UUID\" }).or(z.instanceof(Types.UUID));\n};\n\nexport const zUUID = (): TzmUUID => {\n const output = createUUID();\n\n (<any>output).__zm_type = \"UUID\";\n\n (<any>output).unique = function (val = true) {\n (<any>this).__zm_unique = val;\n return this;\n };\n\n return output as TzmUUID;\n};\n"],"mappings":"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","names":["Schema","SchemaTypes","ZodArray","ZodDate","ZodDefault","ZodEffects","ZodEnum","ZodMap","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodRecord","ZodString","ZodUnion","Types","isValidObjectId","z","zod_extended","extendZod","z_0","_refine","ZodType","prototype","refine","check","opts","zEffect","bind","message","undefined","_def","effect","__zm_validation","validator","ZodString","unique","arg","__zm_unique","ZodNumber","ZodDate","createId","z","string","v","isValidObjectId","or","instanceof","Types","ObjectId","zId","ref","output","__zm_type","__zm_ref","val","createUUID","uuid","UUID","zUUID","zodSchema","schema","options","definition","parseObject","Schema","zodSchemaRaw","obj","object","key","field","Object","entries","shape","ZodObject","f","parseField","Error","constructor","required","def","refinement","field_type","name","__zm_type","ref","__zm_ref","unique","__zm_unique","parseObjectId","parseUUID","ZodNumber","isUnique","parseNumber","ZodString","parseString","ZodEnum","parseEnum","keys","Values","parseBoolean","ZodDate","parseDate","ZodArray","parseArray","element","ZodDefault","_def","innerType","defaultValue","ZodOptional","undefined","ZodNullable","ZodUnion","parseMixed","ZodMap","ZodRecord","parseMap","keySchema","ZodEffects","effect","type","validation","__zm_validation","validate","output","Number","default","min","minValue","max","maxValue","String","minLength","maxLength","values","enum","Boolean","Date","SchemaTypes","ObjectId","pointer","typeConstructor","Map","of","t","UUID","Mixed"]}
|