@lyxa.ai/types 1.0.137
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/README.md +30 -0
- package/index.d.ts +8 -0
- package/index.js +8 -0
- package/package.json +28 -0
- package/utilities/enum.d.ts +581 -0
- package/utilities/enum.js +674 -0
- package/utilities/enum.js.map +1 -0
- package/utilities/validation/common-validation.d.ts +773 -0
- package/utilities/validation/common-validation.js +156 -0
- package/utilities/validation/common-validation.js.map +1 -0
- package/utilities/validation/global-validation.d.ts +169 -0
- package/utilities/validation/global-validation.js +239 -0
- package/utilities/validation/global-validation.js.map +1 -0
- package/utilities/validation/index.d.ts +2 -0
- package/utilities/validation/index.js +19 -0
- package/utilities/validation/index.js.map +1 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ShareableLinkResponseSchema = exports.GetOneQuerySchema = exports.GetByIdInputSchema = exports.IdSchema = exports.DeleteSchema = exports.UpdateSortingOrderSchema = exports.TokenSchema = exports.createResponseSchema = exports.createPaginatedSchema = exports.LoginSchema = exports.WorkHourSettingSchema = exports.HolidayHourSchema = exports.NormalHourSchema = exports.DurationSchema = exports.CourierAddressSchema = exports.UserAddressSchema = exports.AddressSchema = exports.StringSchema = exports.FilterSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const global_validation_1 = require("./global-validation");
|
|
6
|
+
const enum_1 = require("../enum");
|
|
7
|
+
const MongoQuerySchema = zod_1.z.lazy(() => zod_1.z.record(zod_1.z.union([zod_1.z.any(), MongoOperatorsSchema])));
|
|
8
|
+
const MongoOperatorsSchema = zod_1.z.object({
|
|
9
|
+
$eq: zod_1.z.any().optional(),
|
|
10
|
+
$ne: zod_1.z.any().optional(),
|
|
11
|
+
$gt: zod_1.z.any().optional(),
|
|
12
|
+
$gte: zod_1.z.any().optional(),
|
|
13
|
+
$lt: zod_1.z.any().optional(),
|
|
14
|
+
$lte: zod_1.z.any().optional(),
|
|
15
|
+
$in: zod_1.z.array(zod_1.z.any()).optional(),
|
|
16
|
+
$nin: zod_1.z.array(zod_1.z.any()).optional(),
|
|
17
|
+
$exists: zod_1.z.boolean().optional(),
|
|
18
|
+
$regex: zod_1.z.string().optional(),
|
|
19
|
+
$and: zod_1.z.array(MongoQuerySchema).optional(),
|
|
20
|
+
$or: zod_1.z.array(MongoQuerySchema).optional(),
|
|
21
|
+
$not: MongoQuerySchema.optional(),
|
|
22
|
+
$nor: zod_1.z.array(MongoQuerySchema).optional(),
|
|
23
|
+
});
|
|
24
|
+
const sortSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(-1)]));
|
|
25
|
+
const populateSchema = zod_1.z.lazy(() => zod_1.z.object({
|
|
26
|
+
path: zod_1.z.string(),
|
|
27
|
+
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
|
|
28
|
+
match: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
|
|
29
|
+
options: zod_1.z
|
|
30
|
+
.object({
|
|
31
|
+
sort: sortSchema.optional(),
|
|
32
|
+
limit: zod_1.z.number().optional(),
|
|
33
|
+
skip: zod_1.z.number().optional(),
|
|
34
|
+
})
|
|
35
|
+
.optional(),
|
|
36
|
+
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
|
|
37
|
+
}));
|
|
38
|
+
exports.FilterSchema = zod_1.z
|
|
39
|
+
.object({
|
|
40
|
+
size: zod_1.z
|
|
41
|
+
.number()
|
|
42
|
+
.min(1, { message: 'Size must be greater than 0.' })
|
|
43
|
+
.max(100, { message: 'Size cannot exceed 100.' })
|
|
44
|
+
.optional()
|
|
45
|
+
.default(10),
|
|
46
|
+
page: zod_1.z.number().min(1, { message: 'Page number must be at least 1.' }).optional().default(1),
|
|
47
|
+
sort: sortSchema.optional(),
|
|
48
|
+
query: MongoQuerySchema.optional(),
|
|
49
|
+
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
|
|
50
|
+
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
|
|
51
|
+
search: zod_1.z.object({ searchKey: zod_1.z.string(), searchFields: zod_1.z.array(zod_1.z.string()).optional() }).optional(),
|
|
52
|
+
})
|
|
53
|
+
.optional();
|
|
54
|
+
exports.StringSchema = zod_1.z.string().min(1, 'String cannot be empty').max(255, 'String is too long');
|
|
55
|
+
exports.AddressSchema = zod_1.z.object({
|
|
56
|
+
address: global_validation_1.ZodValidation.string('Address'),
|
|
57
|
+
description: global_validation_1.ZodValidation.string('Description').optional(),
|
|
58
|
+
city: global_validation_1.ZodValidation.string('City'),
|
|
59
|
+
state: global_validation_1.ZodValidation.string('State'),
|
|
60
|
+
country: global_validation_1.ZodValidation.string('Country'),
|
|
61
|
+
location: zod_1.z.object({
|
|
62
|
+
type: global_validation_1.ZodValidation.enumType(enum_1.GeoLocationType, 'GeoLocationType').default(enum_1.GeoLocationType.POINT),
|
|
63
|
+
coordinates: zod_1.z.tuple([
|
|
64
|
+
global_validation_1.ZodValidation.number('Longitude', { min: -180, max: 180 }),
|
|
65
|
+
global_validation_1.ZodValidation.number('Latitude', { min: -90, max: 90 }),
|
|
66
|
+
]),
|
|
67
|
+
}),
|
|
68
|
+
latitude: global_validation_1.ZodValidation.number('Latitude', { min: -90, max: 90 }),
|
|
69
|
+
longitude: global_validation_1.ZodValidation.number('Longitude', { min: -180, max: 180 }),
|
|
70
|
+
zone: global_validation_1.ZodValidation.objectId('Zone').optional(),
|
|
71
|
+
});
|
|
72
|
+
exports.UserAddressSchema = exports.AddressSchema.extend({
|
|
73
|
+
addressLabel: global_validation_1.ZodValidation.string('Address Label'),
|
|
74
|
+
apartment: global_validation_1.ZodValidation.string('Apartment'),
|
|
75
|
+
buildingName: global_validation_1.ZodValidation.string('Building Name'),
|
|
76
|
+
deliveryOption: global_validation_1.ZodValidation.string('Delivery Option').optional(),
|
|
77
|
+
instructions: global_validation_1.ZodValidation.string('Instructions').optional(),
|
|
78
|
+
});
|
|
79
|
+
exports.CourierAddressSchema = exports.UserAddressSchema.extend({
|
|
80
|
+
name: global_validation_1.ZodValidation.string('Name'),
|
|
81
|
+
phoneNumber: global_validation_1.ZodValidation.string('Phone Number'),
|
|
82
|
+
});
|
|
83
|
+
exports.DurationSchema = zod_1.z.object({
|
|
84
|
+
start: global_validation_1.ZodValidation.date('Start'),
|
|
85
|
+
end: global_validation_1.ZodValidation.date('End').optional(),
|
|
86
|
+
});
|
|
87
|
+
const StartEndTimeSchema = zod_1.z.object({
|
|
88
|
+
start: global_validation_1.ZodValidation.string('Start'),
|
|
89
|
+
end: global_validation_1.ZodValidation.string('End'),
|
|
90
|
+
});
|
|
91
|
+
exports.NormalHourSchema = zod_1.z.object({
|
|
92
|
+
day: global_validation_1.ZodValidation.enumType(enum_1.WeekDay, 'Day'),
|
|
93
|
+
status: global_validation_1.ZodValidation.enumType(enum_1.WorkStatus, 'Status'),
|
|
94
|
+
openingHours: global_validation_1.ZodValidation.array(StartEndTimeSchema).default([]),
|
|
95
|
+
});
|
|
96
|
+
exports.HolidayHourSchema = zod_1.z.object({
|
|
97
|
+
date: global_validation_1.ZodValidation.date('Date'),
|
|
98
|
+
status: global_validation_1.ZodValidation.enumType(enum_1.HolidayWorkStatus, 'Status'),
|
|
99
|
+
closingHour: StartEndTimeSchema,
|
|
100
|
+
});
|
|
101
|
+
exports.WorkHourSettingSchema = zod_1.z.object({
|
|
102
|
+
normalHours: global_validation_1.ZodValidation.array(exports.NormalHourSchema).default([]),
|
|
103
|
+
holidayHours: global_validation_1.ZodValidation.array(exports.HolidayHourSchema).default([]),
|
|
104
|
+
});
|
|
105
|
+
exports.LoginSchema = zod_1.z.object({
|
|
106
|
+
email: global_validation_1.ZodValidation.email('Email', {
|
|
107
|
+
requiredMessage: 'Please enter a valid email address.',
|
|
108
|
+
invalidMessage: 'Please enter a valid email address.',
|
|
109
|
+
}),
|
|
110
|
+
password: global_validation_1.ZodValidation.string('Password', { requiredMessage: 'Please enter password' }),
|
|
111
|
+
});
|
|
112
|
+
const metadataSchema = zod_1.z.object({
|
|
113
|
+
page: global_validation_1.ZodValidation.number(),
|
|
114
|
+
size: global_validation_1.ZodValidation.number(),
|
|
115
|
+
totalElements: global_validation_1.ZodValidation.number(),
|
|
116
|
+
totalPages: global_validation_1.ZodValidation.number(),
|
|
117
|
+
});
|
|
118
|
+
const createPaginatedSchema = (documentSchema) => zod_1.z.object({
|
|
119
|
+
metadata: metadataSchema.optional(),
|
|
120
|
+
documents: global_validation_1.ZodValidation.array(documentSchema),
|
|
121
|
+
});
|
|
122
|
+
exports.createPaginatedSchema = createPaginatedSchema;
|
|
123
|
+
const createResponseSchema = (schema) => zod_1.z.object({
|
|
124
|
+
success: global_validation_1.ZodValidation.boolean(),
|
|
125
|
+
message: global_validation_1.ZodValidation.string(),
|
|
126
|
+
data: zod_1.z.union([(0, exports.createPaginatedSchema)(schema), schema]).optional(),
|
|
127
|
+
});
|
|
128
|
+
exports.createResponseSchema = createResponseSchema;
|
|
129
|
+
exports.TokenSchema = zod_1.z.object({
|
|
130
|
+
accessToken: global_validation_1.ZodValidation.string('AccessToken'),
|
|
131
|
+
refreshToken: global_validation_1.ZodValidation.string('RefreshToken'),
|
|
132
|
+
});
|
|
133
|
+
exports.UpdateSortingOrderSchema = zod_1.z.object({
|
|
134
|
+
_id: global_validation_1.ZodValidation.objectId('_id'),
|
|
135
|
+
newPosition: global_validation_1.ZodValidation.number('newPosition'),
|
|
136
|
+
});
|
|
137
|
+
exports.DeleteSchema = zod_1.z.object({
|
|
138
|
+
_id: global_validation_1.ZodValidation.objectId('_id'),
|
|
139
|
+
softDelete: global_validation_1.ZodValidation.boolean('Soft Delete').default(true),
|
|
140
|
+
});
|
|
141
|
+
exports.IdSchema = global_validation_1.ZodValidation.objectId();
|
|
142
|
+
exports.GetByIdInputSchema = zod_1.z.object({
|
|
143
|
+
_id: global_validation_1.ZodValidation.objectId('_id'),
|
|
144
|
+
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
|
|
145
|
+
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
|
|
146
|
+
});
|
|
147
|
+
exports.GetOneQuerySchema = zod_1.z.object({
|
|
148
|
+
query: MongoQuerySchema.optional(),
|
|
149
|
+
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
|
|
150
|
+
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
|
|
151
|
+
});
|
|
152
|
+
const ShareableLinkSchema = zod_1.z.object({
|
|
153
|
+
link: global_validation_1.ZodValidation.url(),
|
|
154
|
+
});
|
|
155
|
+
exports.ShareableLinkResponseSchema = (0, exports.createResponseSchema)(ShareableLinkSchema);
|
|
156
|
+
//# sourceMappingURL=common-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common-validation.js","sourceRoot":"/","sources":["utilities/validation/common-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { DTO, ZodValidation } from './global-validation';\nimport { GeoLocationType, HolidayWorkStatus, WeekDay, WorkStatus } from '../enum';\n\n/**\n * Define MongoDB query schema (fields + operators) using lazy evaluation to avoid circular dependency\n */\nconst MongoQuerySchema: z.ZodType<Record<string, any>> = z.lazy(() =>\n\tz.record(z.union([z.any(), MongoOperatorsSchema]))\n);\n\n/**\n * Define allowed MongoDB query operators\n */\nconst MongoOperatorsSchema = z.object({\n\t$eq: z.any().optional(),\n\t$ne: z.any().optional(),\n\t$gt: z.any().optional(),\n\t$gte: z.any().optional(),\n\t$lt: z.any().optional(),\n\t$lte: z.any().optional(),\n\t$in: z.array(z.any()).optional(),\n\t$nin: z.array(z.any()).optional(),\n\t$exists: z.boolean().optional(),\n\t$regex: z.string().optional(),\n\t$and: z.array(MongoQuerySchema).optional(),\n\t$or: z.array(MongoQuerySchema).optional(),\n\t$not: MongoQuerySchema.optional(),\n\t$nor: z.array(MongoQuerySchema).optional(),\n});\n\nconst sortSchema = z.record(z.string(), z.union([z.literal(1), z.literal(-1)]));\n\nconst populateSchema: z.ZodType<any> = z.lazy(() =>\n\tz.object({\n\t\tpath: z.string(), // required\n\t\tselect: z.record(z.string(), z.union([z.literal(0), z.literal(1)])).optional(),\n\t\tmatch: z.record(z.string(), z.any()).optional(),\n\t\toptions: z\n\t\t\t.object({\n\t\t\t\tsort: sortSchema.optional(),\n\t\t\t\tlimit: z.number().optional(),\n\t\t\t\tskip: z.number().optional(),\n\t\t\t})\n\t\t\t.optional(),\n\t\tpopulate: z.union([populateSchema, z.array(populateSchema)]).optional(),\n\t})\n);\n\n/**\n * Define the filter schema using MongoQuerySchema\n */\nexport const FilterSchema = z\n\t.object({\n\t\tsize: z\n\t\t\t.number()\n\t\t\t.min(1, { message: 'Size must be greater than 0.' })\n\t\t\t.max(100, { message: 'Size cannot exceed 100.' })\n\t\t\t.optional()\n\t\t\t.default(10),\n\t\tpage: z.number().min(1, { message: 'Page number must be at least 1.' }).optional().default(1),\n\t\tsort: sortSchema.optional(),\n\t\tquery: MongoQuerySchema.optional(),\n\t\tselect: z.record(z.string(), z.union([z.literal(0), z.literal(1)])).optional(),\n\t\tpopulate: z.union([populateSchema, z.array(populateSchema)]).optional(),\n\t\tsearch: z.object({ searchKey: z.string(), searchFields: z.array(z.string()).optional() }).optional(),\n\t})\n\t.optional();\n\n/**\n * Infer TypeScript type from Zod schema\n */\nexport type FilterDTO = z.infer<typeof FilterSchema>;\n\n/**\n * Define String schema\n */\nexport const StringSchema = z.string().min(1, 'String cannot be empty').max(255, 'String is too long');\n\n/**\n * Common address validation schema that can be reused across models.\n * Provides validation for address-related fields.\n *\n * @example\n * ```typescript\n * const userSchema = z.object({\n * name: z.string(),\n * address: AddressSchema\n * });\n * ```\n */\nexport const AddressSchema = z.object({\n\taddress: ZodValidation.string('Address'),\n\tdescription: ZodValidation.string('Description').optional(),\n\tcity: ZodValidation.string('City'),\n\tstate: ZodValidation.string('State'),\n\tcountry: ZodValidation.string('Country'),\n\tlocation: z.object({\n\t\ttype: ZodValidation.enumType(GeoLocationType, 'GeoLocationType').default(GeoLocationType.POINT),\n\t\tcoordinates: z.tuple([\n\t\t\tZodValidation.number('Longitude', { min: -180, max: 180 }),\n\t\t\tZodValidation.number('Latitude', { min: -90, max: 90 }),\n\t\t]),\n\t}),\n\tlatitude: ZodValidation.number('Latitude', { min: -90, max: 90 }),\n\tlongitude: ZodValidation.number('Longitude', { min: -180, max: 180 }),\n\tzone: ZodValidation.objectId('Zone').optional(),\n});\nexport type AddressDTO = DTO<typeof AddressSchema>;\n\n/**\n * Common user address validation schema that can be reused across models.\n * Provides validation for address-related fields.\n *\n * @example\n * ```typescript\n * const userSchema = z.object({\n * name: z.string(),\n * address: UserAddressSchema\n * });\n * ```\n */\nexport const UserAddressSchema = AddressSchema.extend({\n\taddressLabel: ZodValidation.string('Address Label'),\n\tapartment: ZodValidation.string('Apartment'),\n\tbuildingName: ZodValidation.string('Building Name'),\n\tdeliveryOption: ZodValidation.string('Delivery Option').optional(),\n\tinstructions: ZodValidation.string('Instructions').optional(),\n});\nexport type UserAddressDTO = DTO<typeof UserAddressSchema>;\n\n/**\n * Common courier address validation schema that can be reused across models.\n * Provides validation for address-related fields.\n *\n * @example\n * ```typescript\n * const courierAddressSchema = z.object({\n * name: z.string(),\n * address: courierAddressSchema\n * });\n * ```\n */\nexport const CourierAddressSchema = UserAddressSchema.extend({\n\tname: ZodValidation.string('Name'),\n\tphoneNumber: ZodValidation.string('Phone Number'),\n});\nexport type CourierAddressDTO = DTO<typeof CourierAddressSchema>;\n\n/**\n * Common duration validation schema that can be reused across models.\n * Provides validation for duration fields.\n *\n * @example\n * ```typescript\n * const subscriptionSchema = z.object({\n * fee: z.number(),\n * duration: DurationSchema\n * });\n * ```\n */\nexport const DurationSchema = z.object({\n\tstart: ZodValidation.date('Start'),\n\tend: ZodValidation.date('End').optional(),\n});\n\n/**\n * Common Work Hour validation schema that can be reused across models.\n * Provides validation for workHourSetting fields.\n *\n * @example\n * ```typescript\n * const settingSchema = z.object({\n * vat: z.number(),\n * workHourSetting: WorkHourSettingSchema\n * });\n * ```\n */\nconst StartEndTimeSchema = z.object({\n\tstart: ZodValidation.string('Start'),\n\tend: ZodValidation.string('End'),\n});\n\nexport const NormalHourSchema = z.object({\n\tday: ZodValidation.enumType(WeekDay, 'Day'),\n\tstatus: ZodValidation.enumType(WorkStatus, 'Status'),\n\topeningHours: ZodValidation.array(StartEndTimeSchema).default([]),\n});\n\nexport const HolidayHourSchema = z.object({\n\tdate: ZodValidation.date('Date'),\n\tstatus: ZodValidation.enumType(HolidayWorkStatus, 'Status'),\n\tclosingHour: StartEndTimeSchema,\n});\n\nexport const WorkHourSettingSchema = z.object({\n\tnormalHours: ZodValidation.array(NormalHourSchema).default([]),\n\tholidayHours: ZodValidation.array(HolidayHourSchema).default([]),\n});\n\n/**\n * Schema for validating user login credentials.\n * This schema ensures that the provided email and password meet the required validation rules.\n *\n * @example\n * ```typescript\n * const credentials = {\n * email: 'user@example.com',\n * password: 'securePassword123',\n * };\n * ```\n */\nexport const LoginSchema = z.object({\n\temail: ZodValidation.email('Email', {\n\t\trequiredMessage: 'Please enter a valid email address.',\n\t\tinvalidMessage: 'Please enter a valid email address.',\n\t}),\n\tpassword: ZodValidation.string('Password', { requiredMessage: 'Please enter password' }),\n});\nexport type LoginDTO = DTO<typeof LoginSchema>;\n\nconst metadataSchema = z.object({\n\tpage: ZodValidation.number(),\n\tsize: ZodValidation.number(),\n\ttotalElements: ZodValidation.number(),\n\ttotalPages: ZodValidation.number(),\n});\nexport const createPaginatedSchema = <T>(documentSchema: z.ZodSchema<T>) =>\n\tz.object({\n\t\tmetadata: metadataSchema.optional(),\n\t\tdocuments: ZodValidation.array(documentSchema),\n\t});\n\nexport const createResponseSchema = <T>(schema: z.ZodSchema<T>) =>\n\tz.object({\n\t\tsuccess: ZodValidation.boolean(),\n\t\tmessage: ZodValidation.string(),\n\t\tdata: z.union([createPaginatedSchema(schema), schema]).optional(),\n\t});\n\n/**\n * Schema for validating token data, typically used for authentication.\n * This schema ensures that the provided access token and refresh token are valid strings.\n *\n * @example\n * ```typescript\n * const tokens = {\n * accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',\n * refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',\n * };\n * ```\n */\nexport const TokenSchema = z.object({\n\taccessToken: ZodValidation.string('AccessToken'),\n\trefreshToken: ZodValidation.string('RefreshToken'),\n});\n\n/**\n * Schema validation for sorting order\n */\nexport const UpdateSortingOrderSchema = z.object({\n\t_id: ZodValidation.objectId('_id'),\n\tnewPosition: ZodValidation.number('newPosition'),\n});\nexport type UpdateSortingOrderDTO = DTO<typeof UpdateSortingOrderSchema>;\n\n/**\n * Schema validation for delete\n */\nexport const DeleteSchema = z.object({\n\t_id: ZodValidation.objectId('_id'),\n\tsoftDelete: ZodValidation.boolean('Soft Delete').default(true),\n});\nexport type DeleteDTO = DTO<typeof DeleteSchema>;\n\n/**\n * Schema validation for Id\n */\nexport const IdSchema = ZodValidation.objectId();\n\n/**\n * Schema validation get by id\n */\nexport const GetByIdInputSchema = z.object({\n\t_id: ZodValidation.objectId('_id'),\n\tselect: z.record(z.string(), z.union([z.literal(0), z.literal(1)])).optional(),\n\tpopulate: z.union([populateSchema, z.array(populateSchema)]).optional(),\n});\nexport type GetByIdInputDTO = DTO<typeof GetByIdInputSchema>;\n\nexport const GetOneQuerySchema = z.object({\n\tquery: MongoQuerySchema.optional(),\n\tselect: z.record(z.string(), z.union([z.literal(0), z.literal(1)])).optional(),\n\tpopulate: z.union([populateSchema, z.array(populateSchema)]).optional(),\n})\n\nexport type GetOneQueryDTO = DTO<typeof GetOneQuerySchema>;\n\nconst ShareableLinkSchema = z.object({\n\tlink: ZodValidation.url(),\n});\n\nexport const ShareableLinkResponseSchema = createResponseSchema(ShareableLinkSchema);\nexport type ShareableLinkDTO = DTO<typeof ShareableLinkSchema>;\n"]}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { mongoose } from '@typegoose/typegoose';
|
|
3
|
+
export declare class ZodValidation {
|
|
4
|
+
static objectId(field?: string): z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
5
|
+
static enumType<T extends z.EnumLike>(enumObj: T, field?: string): z.ZodNativeEnum<T>;
|
|
6
|
+
static number(field?: string, options?: {
|
|
7
|
+
min?: number;
|
|
8
|
+
max?: number;
|
|
9
|
+
isInt?: boolean;
|
|
10
|
+
isPositive?: boolean;
|
|
11
|
+
isNonpositive?: boolean;
|
|
12
|
+
isNegative?: boolean;
|
|
13
|
+
isNonnegative?: boolean;
|
|
14
|
+
}): z.ZodNumber;
|
|
15
|
+
static string(field?: string, options?: {
|
|
16
|
+
minLength?: number;
|
|
17
|
+
maxLength?: number;
|
|
18
|
+
minMessage?: string;
|
|
19
|
+
maxMessage?: string;
|
|
20
|
+
requiredMessage?: string;
|
|
21
|
+
regex?: {
|
|
22
|
+
pattern: RegExp;
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
isTrimmed?: boolean;
|
|
26
|
+
}): z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
27
|
+
static email(field?: string, options?: {
|
|
28
|
+
requiredMessage?: string;
|
|
29
|
+
invalidMessage?: string;
|
|
30
|
+
}): z.ZodString;
|
|
31
|
+
static url(field?: string): z.ZodString;
|
|
32
|
+
static phoneNumber(field?: string): z.ZodEffects<z.ZodString, string, string>;
|
|
33
|
+
static date(field?: string, minDate?: Date, maxDate?: Date): z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>;
|
|
34
|
+
static boolean(field?: string): z.ZodBoolean;
|
|
35
|
+
static array<T extends z.ZodTypeAny>(schema: T, field?: string, minItems?: number, maxItems?: number): z.ZodArray<T, "many">;
|
|
36
|
+
static timestamps(): {
|
|
37
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
|
|
38
|
+
updatedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
|
|
39
|
+
deletedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
|
|
40
|
+
};
|
|
41
|
+
static trackingFields(): {
|
|
42
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
|
|
43
|
+
updatedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
|
|
44
|
+
deletedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
|
|
45
|
+
createdBy: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>>;
|
|
46
|
+
updatedBy: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>>;
|
|
47
|
+
deletedBy: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>>;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export type ExcludeFromUpdate = {
|
|
51
|
+
createdAt?: true;
|
|
52
|
+
updatedAt?: true;
|
|
53
|
+
deletedAt?: true;
|
|
54
|
+
createdBy?: true;
|
|
55
|
+
_id?: true;
|
|
56
|
+
} & Record<string, true>;
|
|
57
|
+
export declare class SchemaBuilder<T extends z.ZodRawShape> {
|
|
58
|
+
private includeTimestamps;
|
|
59
|
+
private includeTracking;
|
|
60
|
+
private baseSchema;
|
|
61
|
+
constructor(baseFields: T, includeTimestamps?: boolean, includeTracking?: boolean);
|
|
62
|
+
private createBaseSchema;
|
|
63
|
+
getBaseSchema(): z.ZodObject<T, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<T>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<T>, any>[k]; } : never, z.baseObjectInputType<T> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<T>[k_1]; } : never>;
|
|
64
|
+
getEntitySchema(): z.ZodObject<z.objectUtil.extendShape<T, {
|
|
65
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
66
|
+
}> extends infer T_1 extends z.ZodRawShape ? { [k in keyof T_1]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
67
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
68
|
+
}>[k]>; } : never, "passthrough", z.ZodTypeAny, z.objectOutputType<z.objectUtil.extendShape<T, {
|
|
69
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
70
|
+
}> extends infer T_2 extends z.ZodRawShape ? { [k in keyof T_2]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
71
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
72
|
+
}>[k]>; } : never, z.ZodTypeAny, "passthrough">, z.objectInputType<z.objectUtil.extendShape<T, {
|
|
73
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
74
|
+
}> extends infer T_3 extends z.ZodRawShape ? { [k in keyof T_3]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
75
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
76
|
+
}>[k]>; } : never, z.ZodTypeAny, "passthrough">>;
|
|
77
|
+
getIdSchema(): z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
78
|
+
getUpdateSchema(excludeFields?: ExcludeFromUpdate): z.ZodObject<z.objectUtil.extendShape<T, {
|
|
79
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
80
|
+
}> extends infer T_1 extends z.ZodRawShape ? { [k in keyof T_1]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
81
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
82
|
+
}>[k]>; } : never, "passthrough", z.ZodTypeAny, z.objectOutputType<z.objectUtil.extendShape<T, {
|
|
83
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
84
|
+
}> extends infer T_2 extends z.ZodRawShape ? { [k in keyof T_2]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
85
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
86
|
+
}>[k]>; } : never, z.ZodTypeAny, "passthrough">, z.objectInputType<z.objectUtil.extendShape<T, {
|
|
87
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
88
|
+
}> extends infer T_3 extends z.ZodRawShape ? { [k in keyof T_3]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
89
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
90
|
+
}>[k]>; } : never, z.ZodTypeAny, "passthrough">> | z.ZodObject<{
|
|
91
|
+
[x: string]: z.ZodOptional<z.ZodTypeAny>;
|
|
92
|
+
}, "strict", z.ZodTypeAny, {
|
|
93
|
+
[x: string]: any;
|
|
94
|
+
}, {
|
|
95
|
+
[x: string]: any;
|
|
96
|
+
}>;
|
|
97
|
+
getDeleteSchema(): z.ZodObject<{
|
|
98
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
99
|
+
softDelete: z.ZodDefault<z.ZodBoolean>;
|
|
100
|
+
}, "strip", z.ZodTypeAny, {
|
|
101
|
+
_id: mongoose.Types.ObjectId;
|
|
102
|
+
softDelete: boolean;
|
|
103
|
+
}, {
|
|
104
|
+
_id: string | mongoose.Types.ObjectId;
|
|
105
|
+
softDelete?: boolean | undefined;
|
|
106
|
+
}>;
|
|
107
|
+
updateBaseSchema(extendFields?: z.ZodRawShape, omitFields?: string[]): z.ZodObject<any, z.UnknownKeysParam, z.ZodTypeAny, {
|
|
108
|
+
[x: string]: any;
|
|
109
|
+
}, {
|
|
110
|
+
[x: string]: any;
|
|
111
|
+
}>;
|
|
112
|
+
getAllSchemas(excludeFromUpdate?: ExcludeFromUpdate): {
|
|
113
|
+
BaseSchema: z.ZodObject<T, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<T>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<T>, any>[k]; } : never, z.baseObjectInputType<T> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<T>[k_1]; } : never>;
|
|
114
|
+
EntitySchema: z.ZodObject<z.objectUtil.extendShape<T, {
|
|
115
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
116
|
+
}> extends infer T_3 extends z.ZodRawShape ? { [k_2 in keyof T_3]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
117
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
118
|
+
}>[k_2]>; } : never, "passthrough", z.ZodTypeAny, z.objectOutputType<z.objectUtil.extendShape<T, {
|
|
119
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
120
|
+
}> extends infer T_4 extends z.ZodRawShape ? { [k_2 in keyof T_4]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
121
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
122
|
+
}>[k_2]>; } : never, z.ZodTypeAny, "passthrough">, z.objectInputType<z.objectUtil.extendShape<T, {
|
|
123
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
124
|
+
}> extends infer T_5 extends z.ZodRawShape ? { [k_2 in keyof T_5]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
125
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
126
|
+
}>[k_2]>; } : never, z.ZodTypeAny, "passthrough">>;
|
|
127
|
+
IdSchema: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
128
|
+
UpdateSchema: z.ZodObject<z.objectUtil.extendShape<T, {
|
|
129
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
130
|
+
}> extends infer T_6 extends z.ZodRawShape ? { [k_2 in keyof T_6]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
131
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
132
|
+
}>[k_2]>; } : never, "passthrough", z.ZodTypeAny, z.objectOutputType<z.objectUtil.extendShape<T, {
|
|
133
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
134
|
+
}> extends infer T_7 extends z.ZodRawShape ? { [k_2 in keyof T_7]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
135
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
136
|
+
}>[k_2]>; } : never, z.ZodTypeAny, "passthrough">, z.objectInputType<z.objectUtil.extendShape<T, {
|
|
137
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
138
|
+
}> extends infer T_8 extends z.ZodRawShape ? { [k_2 in keyof T_8]: z.ZodOptional<z.objectUtil.extendShape<T, {
|
|
139
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
140
|
+
}>[k_2]>; } : never, z.ZodTypeAny, "passthrough">> | z.ZodObject<{
|
|
141
|
+
[x: string]: z.ZodOptional<z.ZodTypeAny>;
|
|
142
|
+
}, "strict", z.ZodTypeAny, {
|
|
143
|
+
[x: string]: any;
|
|
144
|
+
}, {
|
|
145
|
+
[x: string]: any;
|
|
146
|
+
}>;
|
|
147
|
+
DeleteSchema: z.ZodObject<{
|
|
148
|
+
_id: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, mongoose.Types.ObjectId, string>, z.ZodType<mongoose.Types.ObjectId, z.ZodTypeDef, mongoose.Types.ObjectId>]>;
|
|
149
|
+
softDelete: z.ZodDefault<z.ZodBoolean>;
|
|
150
|
+
}, "strip", z.ZodTypeAny, {
|
|
151
|
+
_id: mongoose.Types.ObjectId;
|
|
152
|
+
softDelete: boolean;
|
|
153
|
+
}, {
|
|
154
|
+
_id: string | mongoose.Types.ObjectId;
|
|
155
|
+
softDelete?: boolean | undefined;
|
|
156
|
+
}>;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export type DTO<T extends z.ZodType> = z.infer<T>;
|
|
160
|
+
export type PaginatedResponse<T> = {
|
|
161
|
+
metadata: {
|
|
162
|
+
page: number;
|
|
163
|
+
size: number;
|
|
164
|
+
totalElements: number;
|
|
165
|
+
totalPages: number;
|
|
166
|
+
};
|
|
167
|
+
documents: T[];
|
|
168
|
+
};
|
|
169
|
+
export declare function createSchemaBuilder<T extends z.ZodRawShape>(baseFields: T, includeTimestamps?: boolean, includeTracking?: boolean): SchemaBuilder<T>;
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchemaBuilder = exports.ZodValidation = void 0;
|
|
4
|
+
exports.createSchemaBuilder = createSchemaBuilder;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const typegoose_1 = require("@typegoose/typegoose");
|
|
7
|
+
const libphonenumber_js_1 = require("libphonenumber-js");
|
|
8
|
+
class ZodValidation {
|
|
9
|
+
static objectId(field = 'Field') {
|
|
10
|
+
return zod_1.z.union([
|
|
11
|
+
zod_1.z
|
|
12
|
+
.string({ required_error: `${field} is required` })
|
|
13
|
+
.refine(val => typegoose_1.mongoose.Types.ObjectId.isValid(val), {
|
|
14
|
+
message: `${field} must be a valid ObjectID`,
|
|
15
|
+
})
|
|
16
|
+
.transform(val => new typegoose_1.mongoose.Types.ObjectId(val)),
|
|
17
|
+
zod_1.z.instanceof(typegoose_1.mongoose.Types.ObjectId, {
|
|
18
|
+
message: `${field} must be a valid ObjectID`,
|
|
19
|
+
}),
|
|
20
|
+
], { message: `${field} is required` });
|
|
21
|
+
}
|
|
22
|
+
static enumType(enumObj, field = 'Field') {
|
|
23
|
+
return zod_1.z.nativeEnum(enumObj, {
|
|
24
|
+
message: `${field} must be one of: ${Object.values(enumObj).join(', ')}`,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
static number(field = 'Field', options) {
|
|
28
|
+
let schema = zod_1.z.number({
|
|
29
|
+
required_error: `${field} is required`,
|
|
30
|
+
invalid_type_error: `${field} must be a number`,
|
|
31
|
+
});
|
|
32
|
+
if (options?.min !== undefined) {
|
|
33
|
+
schema = schema.gte(options?.min, {
|
|
34
|
+
message: `${field} must be at least ${options?.min}`,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (options?.max !== undefined) {
|
|
38
|
+
schema = schema.lte(options?.max, {
|
|
39
|
+
message: `${field} must be at most ${options?.max}`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (options?.isInt) {
|
|
43
|
+
schema = schema.int({ message: `${field} must be an integer` });
|
|
44
|
+
}
|
|
45
|
+
if (options?.isPositive) {
|
|
46
|
+
schema = schema.positive({ message: `${field} must be positive` });
|
|
47
|
+
}
|
|
48
|
+
if (options?.isNonpositive) {
|
|
49
|
+
schema = schema.nonpositive({ message: `${field} must be non-positive` });
|
|
50
|
+
}
|
|
51
|
+
if (options?.isNegative) {
|
|
52
|
+
schema = schema.negative({ message: `${field} must be negative` });
|
|
53
|
+
}
|
|
54
|
+
if (options?.isNonnegative) {
|
|
55
|
+
schema = schema.nonnegative({ message: `${field} must be non-negative` });
|
|
56
|
+
}
|
|
57
|
+
return schema;
|
|
58
|
+
}
|
|
59
|
+
static string(field = 'Field', options) {
|
|
60
|
+
let schema = zod_1.z.string({
|
|
61
|
+
required_error: options?.requiredMessage || `${field} is required`,
|
|
62
|
+
});
|
|
63
|
+
if (options?.minLength) {
|
|
64
|
+
schema = schema.min(options.minLength, options.minMessage || `${field} must be at least ${options.minLength} characters`);
|
|
65
|
+
}
|
|
66
|
+
if (options?.maxLength) {
|
|
67
|
+
schema = schema.max(options.maxLength, options.maxMessage || `${field} shouldn’t exceed ${options.maxLength} characters`);
|
|
68
|
+
}
|
|
69
|
+
if (options?.regex) {
|
|
70
|
+
schema = schema.regex(options.regex.pattern, options.regex.message);
|
|
71
|
+
}
|
|
72
|
+
if (options?.isTrimmed) {
|
|
73
|
+
return schema
|
|
74
|
+
.transform(val => val?.trim())
|
|
75
|
+
.refine(val => val?.length && val?.length > 0, {
|
|
76
|
+
message: options?.requiredMessage || `${field} is required`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return schema;
|
|
80
|
+
}
|
|
81
|
+
static email(field = 'Email', options) {
|
|
82
|
+
const schema = zod_1.z
|
|
83
|
+
.string({
|
|
84
|
+
required_error: options?.requiredMessage || `${field} is required`,
|
|
85
|
+
})
|
|
86
|
+
.email(options?.invalidMessage || `${field} must be a valid email address`);
|
|
87
|
+
return schema;
|
|
88
|
+
}
|
|
89
|
+
static url(field = 'Field') {
|
|
90
|
+
return zod_1.z.string({ required_error: `${field} is required` }).url(`${field} must be a valid URL`);
|
|
91
|
+
}
|
|
92
|
+
static phoneNumber(field = 'Field') {
|
|
93
|
+
return zod_1.z.string({ required_error: `${field} is required` }).refine(value => {
|
|
94
|
+
try {
|
|
95
|
+
const phone = (0, libphonenumber_js_1.parsePhoneNumberFromString)(value);
|
|
96
|
+
return phone?.isValid();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}, {
|
|
102
|
+
message: `Please input a valid phone number`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
static date(field = 'Field', minDate, maxDate) {
|
|
106
|
+
return zod_1.z
|
|
107
|
+
.union([
|
|
108
|
+
zod_1.z
|
|
109
|
+
.string({ required_error: `${field} is required` })
|
|
110
|
+
.refine(val => {
|
|
111
|
+
const date = new Date(val);
|
|
112
|
+
return !isNaN(date.getTime());
|
|
113
|
+
}, `${field} must be a valid date`)
|
|
114
|
+
.transform(val => new Date(val)),
|
|
115
|
+
zod_1.z.date({
|
|
116
|
+
required_error: `${field} is required`,
|
|
117
|
+
invalid_type_error: `${field} must be a valid date`,
|
|
118
|
+
}),
|
|
119
|
+
], { message: `${field} is required` })
|
|
120
|
+
.refine(val => minDate === undefined || val >= minDate, `${field} must be on or after ${minDate?.toISOString()}`)
|
|
121
|
+
.refine(val => maxDate === undefined || val <= maxDate, `${field} must be on or before ${maxDate?.toISOString()}`);
|
|
122
|
+
}
|
|
123
|
+
static boolean(field = 'Field') {
|
|
124
|
+
return zod_1.z.boolean({
|
|
125
|
+
required_error: `${field} is required`,
|
|
126
|
+
invalid_type_error: `${field} must be a boolean`,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
static array(schema, field = 'Array', minItems, maxItems) {
|
|
130
|
+
let arraySchema = zod_1.z.array(schema, {
|
|
131
|
+
required_error: `${field} is required`,
|
|
132
|
+
});
|
|
133
|
+
if (minItems === 1) {
|
|
134
|
+
arraySchema = arraySchema.min(1, `${field} cannot be empty`);
|
|
135
|
+
}
|
|
136
|
+
if (minItems !== undefined && minItems !== 1) {
|
|
137
|
+
arraySchema = arraySchema.min(minItems, `${field} must have at least ${minItems} items`);
|
|
138
|
+
}
|
|
139
|
+
if (maxItems !== undefined) {
|
|
140
|
+
arraySchema = arraySchema.max(maxItems, `${field} must have at most ${maxItems} items`);
|
|
141
|
+
}
|
|
142
|
+
return arraySchema;
|
|
143
|
+
}
|
|
144
|
+
static timestamps() {
|
|
145
|
+
return {
|
|
146
|
+
createdAt: zod_1.z.date().nullable().optional(),
|
|
147
|
+
updatedAt: zod_1.z.date().nullable().optional(),
|
|
148
|
+
deletedAt: zod_1.z.date().nullable().optional(),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
static trackingFields() {
|
|
152
|
+
return {
|
|
153
|
+
createdBy: ZodValidation.objectId().optional(),
|
|
154
|
+
updatedBy: ZodValidation.objectId().optional(),
|
|
155
|
+
deletedBy: ZodValidation.objectId().optional(),
|
|
156
|
+
...ZodValidation.timestamps(),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.ZodValidation = ZodValidation;
|
|
161
|
+
class SchemaBuilder {
|
|
162
|
+
includeTimestamps;
|
|
163
|
+
includeTracking;
|
|
164
|
+
baseSchema;
|
|
165
|
+
constructor(baseFields, includeTimestamps = true, includeTracking = false) {
|
|
166
|
+
this.includeTimestamps = includeTimestamps;
|
|
167
|
+
this.includeTracking = includeTracking;
|
|
168
|
+
this.baseSchema = this.createBaseSchema(baseFields);
|
|
169
|
+
}
|
|
170
|
+
createBaseSchema(baseFields) {
|
|
171
|
+
const additionalFields = this.includeTracking
|
|
172
|
+
? ZodValidation.trackingFields()
|
|
173
|
+
: this.includeTimestamps
|
|
174
|
+
? ZodValidation.timestamps()
|
|
175
|
+
: {};
|
|
176
|
+
return zod_1.z.object({
|
|
177
|
+
...baseFields,
|
|
178
|
+
...additionalFields,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
getBaseSchema() {
|
|
182
|
+
return this.baseSchema.strict();
|
|
183
|
+
}
|
|
184
|
+
getEntitySchema() {
|
|
185
|
+
return this.baseSchema
|
|
186
|
+
.extend({
|
|
187
|
+
_id: ZodValidation.objectId(),
|
|
188
|
+
})
|
|
189
|
+
.partial()
|
|
190
|
+
.passthrough();
|
|
191
|
+
}
|
|
192
|
+
getIdSchema() {
|
|
193
|
+
return ZodValidation.objectId();
|
|
194
|
+
}
|
|
195
|
+
getUpdateSchema(excludeFields = { createdAt: true, updatedAt: true }) {
|
|
196
|
+
const entitySchema = this.getEntitySchema();
|
|
197
|
+
if (Object.keys(excludeFields).length === 0) {
|
|
198
|
+
return entitySchema;
|
|
199
|
+
}
|
|
200
|
+
const shape = entitySchema._def.shape();
|
|
201
|
+
const filteredShape = {};
|
|
202
|
+
for (const key in shape) {
|
|
203
|
+
if (!excludeFields[key]) {
|
|
204
|
+
filteredShape[key] = shape[key];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return zod_1.z.object(filteredShape).partial().strict();
|
|
208
|
+
}
|
|
209
|
+
getDeleteSchema() {
|
|
210
|
+
return zod_1.z.object({
|
|
211
|
+
_id: ZodValidation.objectId('_id'),
|
|
212
|
+
softDelete: ZodValidation.boolean('Soft Delete').default(true),
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
updateBaseSchema(extendFields, omitFields) {
|
|
216
|
+
let schema = this.baseSchema;
|
|
217
|
+
if (omitFields && omitFields.length > 0) {
|
|
218
|
+
schema = schema.omit(omitFields.reduce((acc, key) => ({ ...acc, [key]: true }), {}));
|
|
219
|
+
}
|
|
220
|
+
if (extendFields) {
|
|
221
|
+
schema = schema.extend({ _id: ZodValidation.objectId().optional(), ...extendFields });
|
|
222
|
+
}
|
|
223
|
+
return schema;
|
|
224
|
+
}
|
|
225
|
+
getAllSchemas(excludeFromUpdate) {
|
|
226
|
+
return {
|
|
227
|
+
BaseSchema: this.getBaseSchema(),
|
|
228
|
+
EntitySchema: this.getEntitySchema(),
|
|
229
|
+
IdSchema: this.getIdSchema(),
|
|
230
|
+
UpdateSchema: this.getUpdateSchema(excludeFromUpdate),
|
|
231
|
+
DeleteSchema: this.getDeleteSchema(),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.SchemaBuilder = SchemaBuilder;
|
|
236
|
+
function createSchemaBuilder(baseFields, includeTimestamps = true, includeTracking = false) {
|
|
237
|
+
return new SchemaBuilder(baseFields, includeTimestamps, includeTracking);
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=global-validation.js.map
|