unischema 1.0.1 → 1.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/README.md +634 -231
- package/dist/adapters/backend/index.d.mts +2 -1
- package/dist/adapters/backend/index.d.ts +2 -1
- package/dist/adapters/backend/index.js +17 -441
- package/dist/adapters/backend/index.mjs +9 -433
- package/dist/adapters/frontend/index.d.mts +2 -1
- package/dist/adapters/frontend/index.d.ts +2 -1
- package/dist/adapters/frontend/index.js +10 -421
- package/dist/adapters/frontend/index.mjs +8 -419
- package/dist/chunk-2JYFKT3R.js +103 -0
- package/dist/chunk-3FANCMEF.js +206 -0
- package/dist/chunk-3TS35CVJ.mjs +478 -0
- package/dist/chunk-ASKTY6EG.js +131 -0
- package/dist/chunk-BJLVOIAP.js +491 -0
- package/dist/chunk-BNIB23NQ.js +90 -0
- package/dist/chunk-BVRXGZLS.js +17 -0
- package/dist/chunk-CQYXR2LZ.js +353 -0
- package/dist/chunk-ELL7U7IC.mjs +237 -0
- package/dist/chunk-FKDWSZIV.mjs +39 -0
- package/dist/chunk-FRBZHN4K.mjs +335 -0
- package/dist/chunk-FZ7K2PC7.js +248 -0
- package/dist/chunk-KHHJD6QK.mjs +85 -0
- package/dist/chunk-NUW55QTO.js +48 -0
- package/dist/chunk-TTK77YBI.mjs +15 -0
- package/dist/chunk-VWP24NYS.mjs +194 -0
- package/dist/chunk-XC4DKEXP.mjs +97 -0
- package/dist/chunk-XGTUU27F.mjs +124 -0
- package/dist/index-BQR7OrY7.d.mts +80 -0
- package/dist/index-BQR7OrY7.d.ts +80 -0
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +527 -494
- package/dist/index.mjs +476 -482
- package/dist/{schema-D9DGC9E_.d.mts → schema-CpAjXgEF.d.ts} +182 -79
- package/dist/{schema-D9DGC9E_.d.ts → schema-DYU1zGVm.d.mts} +182 -79
- package/dist/validators/array.d.mts +15 -0
- package/dist/validators/array.d.ts +15 -0
- package/dist/validators/array.js +31 -0
- package/dist/validators/array.mjs +2 -0
- package/dist/validators/common.d.mts +13 -0
- package/dist/validators/common.d.ts +13 -0
- package/dist/validators/common.js +27 -0
- package/dist/validators/common.mjs +2 -0
- package/dist/validators/date.d.mts +23 -0
- package/dist/validators/date.d.ts +23 -0
- package/dist/validators/date.js +47 -0
- package/dist/validators/date.mjs +2 -0
- package/dist/validators/index.d.mts +46 -0
- package/dist/validators/index.d.ts +46 -0
- package/dist/validators/index.js +256 -0
- package/dist/validators/index.mjs +7 -0
- package/dist/validators/number.d.mts +25 -0
- package/dist/validators/number.d.ts +25 -0
- package/dist/validators/number.js +51 -0
- package/dist/validators/number.mjs +2 -0
- package/dist/validators/object.d.mts +11 -0
- package/dist/validators/object.d.ts +11 -0
- package/dist/validators/object.js +23 -0
- package/dist/validators/object.mjs +2 -0
- package/dist/validators/string.d.mts +37 -0
- package/dist/validators/string.d.ts +37 -0
- package/dist/validators/string.js +75 -0
- package/dist/validators/string.mjs +2 -0
- package/package.json +36 -1
- package/dist/adapters/backend/index.js.map +0 -1
- package/dist/adapters/backend/index.mjs.map +0 -1
- package/dist/adapters/frontend/index.js.map +0 -1
- package/dist/adapters/frontend/index.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/types/index.ts
|
|
4
|
+
function toEnterpriseResponse(result, data) {
|
|
5
|
+
return {
|
|
6
|
+
status: result.valid ? "success" : "validation_error",
|
|
7
|
+
data: result.valid ? data : void 0,
|
|
8
|
+
errors: [...result.hardErrors, ...result.softErrors],
|
|
9
|
+
msg: result.valid ? "Validation successful" : "Validation failed",
|
|
10
|
+
validation: {
|
|
11
|
+
hard_validations: result.hardErrors,
|
|
12
|
+
soft_validations: result.softErrors
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.toEnterpriseResponse = toEnterpriseResponse;
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkNUW55QTO_js = require('./chunk-NUW55QTO.js');
|
|
4
|
+
|
|
5
|
+
// src/validators/string/email.ts
|
|
6
|
+
var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
7
|
+
var emailValidator = (value, params, context) => {
|
|
8
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
9
|
+
const soft = params?.soft;
|
|
10
|
+
const message = params?.message;
|
|
11
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
12
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_EMAIL", "Email must be a string", soft);
|
|
13
|
+
}
|
|
14
|
+
if (!EMAIL_REGEX.test(value)) {
|
|
15
|
+
return chunkNUW55QTO_js.createError(
|
|
16
|
+
context,
|
|
17
|
+
"INVALID_EMAIL",
|
|
18
|
+
message || "Invalid email address",
|
|
19
|
+
soft
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// src/validators/string/url.ts
|
|
26
|
+
var urlValidator = (value, params, context) => {
|
|
27
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
28
|
+
const soft = params?.soft;
|
|
29
|
+
const message = params?.message;
|
|
30
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
31
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_URL", "URL must be a string", soft);
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
new URL(value);
|
|
35
|
+
return null;
|
|
36
|
+
} catch {
|
|
37
|
+
return chunkNUW55QTO_js.createError(
|
|
38
|
+
context,
|
|
39
|
+
"INVALID_URL",
|
|
40
|
+
message || "Invalid URL format",
|
|
41
|
+
soft
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// src/validators/string/ipAddress.ts
|
|
47
|
+
var IPV4_REGEX = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
48
|
+
var ipAddressValidator = (value, params, context) => {
|
|
49
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
50
|
+
const soft = params?.soft;
|
|
51
|
+
const message = params?.message;
|
|
52
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
53
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_IP", "IP address must be a string", soft);
|
|
54
|
+
}
|
|
55
|
+
if (!IPV4_REGEX.test(value)) {
|
|
56
|
+
return chunkNUW55QTO_js.createError(
|
|
57
|
+
context,
|
|
58
|
+
"INVALID_IP",
|
|
59
|
+
message || "Invalid IP address format",
|
|
60
|
+
soft
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// src/validators/string/ipv6.ts
|
|
67
|
+
var IPV6_REGEX = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|::)$/;
|
|
68
|
+
var ipv6Validator = (value, params, context) => {
|
|
69
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
70
|
+
const soft = params?.soft;
|
|
71
|
+
const message = params?.message;
|
|
72
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
73
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_IPV6", "IPv6 address must be a string", soft);
|
|
74
|
+
}
|
|
75
|
+
if (!IPV6_REGEX.test(value)) {
|
|
76
|
+
return chunkNUW55QTO_js.createError(
|
|
77
|
+
context,
|
|
78
|
+
"INVALID_IPV6",
|
|
79
|
+
message || "Invalid IPv6 address format",
|
|
80
|
+
soft
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// src/validators/string/alpha.ts
|
|
87
|
+
var ALPHA_REGEX = /^[a-zA-Z]+$/;
|
|
88
|
+
var alphaValidator = (value, params, context) => {
|
|
89
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
90
|
+
const soft = params?.soft;
|
|
91
|
+
const message = params?.message;
|
|
92
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
93
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_ALPHA", "Value must be a string", soft);
|
|
94
|
+
}
|
|
95
|
+
if (!ALPHA_REGEX.test(value)) {
|
|
96
|
+
return chunkNUW55QTO_js.createError(
|
|
97
|
+
context,
|
|
98
|
+
"INVALID_ALPHA",
|
|
99
|
+
message || "Must contain only letters",
|
|
100
|
+
soft
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// src/validators/string/alphanumeric.ts
|
|
107
|
+
var ALPHANUMERIC_REGEX = /^[a-zA-Z0-9]+$/;
|
|
108
|
+
var alphanumericValidator = (value, params, context) => {
|
|
109
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
110
|
+
const soft = params?.soft;
|
|
111
|
+
const message = params?.message;
|
|
112
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
113
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_ALPHANUMERIC", "Value must be a string", soft);
|
|
114
|
+
}
|
|
115
|
+
if (!ALPHANUMERIC_REGEX.test(value)) {
|
|
116
|
+
return chunkNUW55QTO_js.createError(
|
|
117
|
+
context,
|
|
118
|
+
"INVALID_ALPHANUMERIC",
|
|
119
|
+
message || "Must contain only letters and numbers",
|
|
120
|
+
soft
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// src/validators/string/numeric.ts
|
|
127
|
+
var NUMERIC_REGEX = /^[0-9]+$/;
|
|
128
|
+
var numericValidator = (value, params, context) => {
|
|
129
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
130
|
+
const soft = params?.soft;
|
|
131
|
+
const message = params?.message;
|
|
132
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
133
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_NUMERIC", "Value must be a string", soft);
|
|
134
|
+
}
|
|
135
|
+
if (!NUMERIC_REGEX.test(value)) {
|
|
136
|
+
return chunkNUW55QTO_js.createError(
|
|
137
|
+
context,
|
|
138
|
+
"INVALID_NUMERIC",
|
|
139
|
+
message || "Must contain only numbers",
|
|
140
|
+
soft
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// src/validators/string/lowercase.ts
|
|
147
|
+
var lowercaseValidator = (value, params, context) => {
|
|
148
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
149
|
+
const soft = params?.soft;
|
|
150
|
+
const message = params?.message;
|
|
151
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
152
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_LOWERCASE", "Value must be a string", soft);
|
|
153
|
+
}
|
|
154
|
+
if (value !== value.toLowerCase()) {
|
|
155
|
+
return chunkNUW55QTO_js.createError(
|
|
156
|
+
context,
|
|
157
|
+
"INVALID_LOWERCASE",
|
|
158
|
+
message || "Must be lowercase",
|
|
159
|
+
soft
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// src/validators/string/uppercase.ts
|
|
166
|
+
var uppercaseValidator = (value, params, context) => {
|
|
167
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
168
|
+
const soft = params?.soft;
|
|
169
|
+
const message = params?.message;
|
|
170
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
171
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_UPPERCASE", "Value must be a string", soft);
|
|
172
|
+
}
|
|
173
|
+
if (value !== value.toUpperCase()) {
|
|
174
|
+
return chunkNUW55QTO_js.createError(
|
|
175
|
+
context,
|
|
176
|
+
"INVALID_UPPERCASE",
|
|
177
|
+
message || "Must be uppercase",
|
|
178
|
+
soft
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// src/validators/string/slug.ts
|
|
185
|
+
var SLUG_REGEX = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
186
|
+
var slugValidator = (value, params, context) => {
|
|
187
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
188
|
+
const soft = params?.soft;
|
|
189
|
+
const message = params?.message;
|
|
190
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
191
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_SLUG", "Slug must be a string", soft);
|
|
192
|
+
}
|
|
193
|
+
if (!SLUG_REGEX.test(value)) {
|
|
194
|
+
return chunkNUW55QTO_js.createError(
|
|
195
|
+
context,
|
|
196
|
+
"INVALID_SLUG",
|
|
197
|
+
message || "Must be a valid URL slug (lowercase, numbers, hyphens)",
|
|
198
|
+
soft
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// src/validators/string/hex.ts
|
|
205
|
+
var HEX_REGEX = /^(0x)?[0-9a-fA-F]+$/;
|
|
206
|
+
var hexValidator = (value, params, context) => {
|
|
207
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
208
|
+
const soft = params?.soft;
|
|
209
|
+
const message = params?.message;
|
|
210
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
211
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_HEX", "Hex value must be a string", soft);
|
|
212
|
+
}
|
|
213
|
+
if (!HEX_REGEX.test(value)) {
|
|
214
|
+
return chunkNUW55QTO_js.createError(
|
|
215
|
+
context,
|
|
216
|
+
"INVALID_HEX",
|
|
217
|
+
message || "Must be a valid hexadecimal string",
|
|
218
|
+
soft
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
// src/validators/string/base64.ts
|
|
225
|
+
var BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
226
|
+
var base64Validator = (value, params, context) => {
|
|
227
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
228
|
+
const soft = params?.soft;
|
|
229
|
+
const message = params?.message;
|
|
230
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
231
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_BASE64", "Base64 value must be a string", soft);
|
|
232
|
+
}
|
|
233
|
+
if (!BASE64_REGEX.test(value)) {
|
|
234
|
+
return chunkNUW55QTO_js.createError(
|
|
235
|
+
context,
|
|
236
|
+
"INVALID_BASE64",
|
|
237
|
+
message || "Must be a valid base64 string",
|
|
238
|
+
soft
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
return null;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// src/validators/string/json.ts
|
|
245
|
+
var jsonValidator = (value, params, context) => {
|
|
246
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
247
|
+
const soft = params?.soft;
|
|
248
|
+
const message = params?.message;
|
|
249
|
+
if (!chunkNUW55QTO_js.isString(value)) {
|
|
250
|
+
return chunkNUW55QTO_js.createError(context, "INVALID_JSON", "JSON value must be a string", soft);
|
|
251
|
+
}
|
|
252
|
+
try {
|
|
253
|
+
JSON.parse(value);
|
|
254
|
+
return null;
|
|
255
|
+
} catch {
|
|
256
|
+
return chunkNUW55QTO_js.createError(
|
|
257
|
+
context,
|
|
258
|
+
"INVALID_JSON",
|
|
259
|
+
message || "Must be valid JSON",
|
|
260
|
+
soft
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
// src/validators/string/length.ts
|
|
266
|
+
var lengthValidator = (value, params, context) => {
|
|
267
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
268
|
+
const length = params?.length;
|
|
269
|
+
const soft = params?.soft;
|
|
270
|
+
const message = params?.message;
|
|
271
|
+
if (!chunkNUW55QTO_js.isString(value)) return null;
|
|
272
|
+
if (value.length !== length) {
|
|
273
|
+
return chunkNUW55QTO_js.createError(
|
|
274
|
+
context,
|
|
275
|
+
"INVALID_LENGTH",
|
|
276
|
+
message || `Must be exactly ${length} characters`,
|
|
277
|
+
soft
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
// src/validators/string/contains.ts
|
|
284
|
+
var containsValidator = (value, params, context) => {
|
|
285
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
286
|
+
const substring = params?.substring;
|
|
287
|
+
const soft = params?.soft;
|
|
288
|
+
const message = params?.message;
|
|
289
|
+
if (!chunkNUW55QTO_js.isString(value)) return null;
|
|
290
|
+
if (!value.includes(substring)) {
|
|
291
|
+
return chunkNUW55QTO_js.createError(
|
|
292
|
+
context,
|
|
293
|
+
"INVALID_CONTAINS",
|
|
294
|
+
message || `Must contain "${substring}"`,
|
|
295
|
+
soft
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
return null;
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
// src/validators/string/startsWith.ts
|
|
302
|
+
var startsWithValidator = (value, params, context) => {
|
|
303
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
304
|
+
const prefix = params?.prefix;
|
|
305
|
+
const soft = params?.soft;
|
|
306
|
+
const message = params?.message;
|
|
307
|
+
if (!chunkNUW55QTO_js.isString(value)) return null;
|
|
308
|
+
if (!value.startsWith(prefix)) {
|
|
309
|
+
return chunkNUW55QTO_js.createError(
|
|
310
|
+
context,
|
|
311
|
+
"INVALID_STARTS_WITH",
|
|
312
|
+
message || `Must start with "${prefix}"`,
|
|
313
|
+
soft
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
return null;
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
// src/validators/string/endsWith.ts
|
|
320
|
+
var endsWithValidator = (value, params, context) => {
|
|
321
|
+
if (chunkNUW55QTO_js.isEmpty(value)) return null;
|
|
322
|
+
const suffix = params?.suffix;
|
|
323
|
+
const soft = params?.soft;
|
|
324
|
+
const message = params?.message;
|
|
325
|
+
if (!chunkNUW55QTO_js.isString(value)) return null;
|
|
326
|
+
if (!value.endsWith(suffix)) {
|
|
327
|
+
return chunkNUW55QTO_js.createError(
|
|
328
|
+
context,
|
|
329
|
+
"INVALID_ENDS_WITH",
|
|
330
|
+
message || `Must end with "${suffix}"`,
|
|
331
|
+
soft
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
return null;
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
exports.alphaValidator = alphaValidator;
|
|
338
|
+
exports.alphanumericValidator = alphanumericValidator;
|
|
339
|
+
exports.base64Validator = base64Validator;
|
|
340
|
+
exports.containsValidator = containsValidator;
|
|
341
|
+
exports.emailValidator = emailValidator;
|
|
342
|
+
exports.endsWithValidator = endsWithValidator;
|
|
343
|
+
exports.hexValidator = hexValidator;
|
|
344
|
+
exports.ipAddressValidator = ipAddressValidator;
|
|
345
|
+
exports.ipv6Validator = ipv6Validator;
|
|
346
|
+
exports.jsonValidator = jsonValidator;
|
|
347
|
+
exports.lengthValidator = lengthValidator;
|
|
348
|
+
exports.lowercaseValidator = lowercaseValidator;
|
|
349
|
+
exports.numericValidator = numericValidator;
|
|
350
|
+
exports.slugValidator = slugValidator;
|
|
351
|
+
exports.startsWithValidator = startsWithValidator;
|
|
352
|
+
exports.uppercaseValidator = uppercaseValidator;
|
|
353
|
+
exports.urlValidator = urlValidator;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { isEmpty, parseDate, createError } from './chunk-FKDWSZIV.mjs';
|
|
2
|
+
|
|
3
|
+
// src/validators/date/today.ts
|
|
4
|
+
var todayValidator = (value, params, context) => {
|
|
5
|
+
if (isEmpty(value)) return null;
|
|
6
|
+
const soft = params?.soft;
|
|
7
|
+
const message = params?.message;
|
|
8
|
+
const date = parseDate(value);
|
|
9
|
+
if (!date) return null;
|
|
10
|
+
const today = /* @__PURE__ */ new Date();
|
|
11
|
+
today.setHours(0, 0, 0, 0);
|
|
12
|
+
date.setHours(0, 0, 0, 0);
|
|
13
|
+
if (date.getTime() !== today.getTime()) {
|
|
14
|
+
return createError(
|
|
15
|
+
context,
|
|
16
|
+
"INVALID_TODAY",
|
|
17
|
+
message || "Date must be today",
|
|
18
|
+
soft
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// src/validators/date/yesterday.ts
|
|
25
|
+
var yesterdayValidator = (value, params, context) => {
|
|
26
|
+
if (isEmpty(value)) return null;
|
|
27
|
+
const soft = params?.soft;
|
|
28
|
+
const message = params?.message;
|
|
29
|
+
const date = parseDate(value);
|
|
30
|
+
if (!date) return null;
|
|
31
|
+
const yesterday = /* @__PURE__ */ new Date();
|
|
32
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
33
|
+
yesterday.setHours(0, 0, 0, 0);
|
|
34
|
+
date.setHours(0, 0, 0, 0);
|
|
35
|
+
if (date.getTime() !== yesterday.getTime()) {
|
|
36
|
+
return createError(
|
|
37
|
+
context,
|
|
38
|
+
"INVALID_YESTERDAY",
|
|
39
|
+
message || "Date must be yesterday",
|
|
40
|
+
soft
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// src/validators/date/tomorrow.ts
|
|
47
|
+
var tomorrowValidator = (value, params, context) => {
|
|
48
|
+
if (isEmpty(value)) return null;
|
|
49
|
+
const soft = params?.soft;
|
|
50
|
+
const message = params?.message;
|
|
51
|
+
const date = parseDate(value);
|
|
52
|
+
if (!date) return null;
|
|
53
|
+
const tomorrow = /* @__PURE__ */ new Date();
|
|
54
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
55
|
+
tomorrow.setHours(0, 0, 0, 0);
|
|
56
|
+
date.setHours(0, 0, 0, 0);
|
|
57
|
+
if (date.getTime() !== tomorrow.getTime()) {
|
|
58
|
+
return createError(
|
|
59
|
+
context,
|
|
60
|
+
"INVALID_TOMORROW",
|
|
61
|
+
message || "Date must be tomorrow",
|
|
62
|
+
soft
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// src/validators/date/thisWeek.ts
|
|
69
|
+
var thisWeekValidator = (value, params, context) => {
|
|
70
|
+
if (isEmpty(value)) return null;
|
|
71
|
+
const soft = params?.soft;
|
|
72
|
+
const message = params?.message;
|
|
73
|
+
const date = parseDate(value);
|
|
74
|
+
if (!date) return null;
|
|
75
|
+
const now = /* @__PURE__ */ new Date();
|
|
76
|
+
const startOfWeek = new Date(now);
|
|
77
|
+
startOfWeek.setDate(now.getDate() - now.getDay());
|
|
78
|
+
startOfWeek.setHours(0, 0, 0, 0);
|
|
79
|
+
const endOfWeek = new Date(startOfWeek);
|
|
80
|
+
endOfWeek.setDate(startOfWeek.getDate() + 6);
|
|
81
|
+
endOfWeek.setHours(23, 59, 59, 999);
|
|
82
|
+
if (date < startOfWeek || date > endOfWeek) {
|
|
83
|
+
return createError(
|
|
84
|
+
context,
|
|
85
|
+
"INVALID_THIS_WEEK",
|
|
86
|
+
message || "Date must be within this week",
|
|
87
|
+
soft
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// src/validators/date/thisMonth.ts
|
|
94
|
+
var thisMonthValidator = (value, params, context) => {
|
|
95
|
+
if (isEmpty(value)) return null;
|
|
96
|
+
const soft = params?.soft;
|
|
97
|
+
const message = params?.message;
|
|
98
|
+
const date = parseDate(value);
|
|
99
|
+
if (!date) return null;
|
|
100
|
+
const now = /* @__PURE__ */ new Date();
|
|
101
|
+
const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
102
|
+
const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999);
|
|
103
|
+
if (date < startOfMonth || date > endOfMonth) {
|
|
104
|
+
return createError(
|
|
105
|
+
context,
|
|
106
|
+
"INVALID_THIS_MONTH",
|
|
107
|
+
message || "Date must be within this month",
|
|
108
|
+
soft
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// src/validators/date/thisYear.ts
|
|
115
|
+
var thisYearValidator = (value, params, context) => {
|
|
116
|
+
if (isEmpty(value)) return null;
|
|
117
|
+
const soft = params?.soft;
|
|
118
|
+
const message = params?.message;
|
|
119
|
+
const date = parseDate(value);
|
|
120
|
+
if (!date) return null;
|
|
121
|
+
const now = /* @__PURE__ */ new Date();
|
|
122
|
+
const startOfYear = new Date(now.getFullYear(), 0, 1);
|
|
123
|
+
const endOfYear = new Date(now.getFullYear(), 11, 31, 23, 59, 59, 999);
|
|
124
|
+
if (date < startOfYear || date > endOfYear) {
|
|
125
|
+
return createError(
|
|
126
|
+
context,
|
|
127
|
+
"INVALID_THIS_YEAR",
|
|
128
|
+
message || "Date must be within this year",
|
|
129
|
+
soft
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// src/validators/date/weekday.ts
|
|
136
|
+
var weekdayValidator = (value, params, context) => {
|
|
137
|
+
if (isEmpty(value)) return null;
|
|
138
|
+
const soft = params?.soft;
|
|
139
|
+
const message = params?.message;
|
|
140
|
+
const date = parseDate(value);
|
|
141
|
+
if (!date) return null;
|
|
142
|
+
const day = date.getDay();
|
|
143
|
+
if (day === 0 || day === 6) {
|
|
144
|
+
return createError(
|
|
145
|
+
context,
|
|
146
|
+
"INVALID_WEEKDAY",
|
|
147
|
+
message || "Date must be a weekday",
|
|
148
|
+
soft
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// src/validators/date/weekend.ts
|
|
155
|
+
var weekendValidator = (value, params, context) => {
|
|
156
|
+
if (isEmpty(value)) return null;
|
|
157
|
+
const soft = params?.soft;
|
|
158
|
+
const message = params?.message;
|
|
159
|
+
const date = parseDate(value);
|
|
160
|
+
if (!date) return null;
|
|
161
|
+
const day = date.getDay();
|
|
162
|
+
if (day !== 0 && day !== 6) {
|
|
163
|
+
return createError(
|
|
164
|
+
context,
|
|
165
|
+
"INVALID_WEEKEND",
|
|
166
|
+
message || "Date must be a weekend",
|
|
167
|
+
soft
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// src/validators/date/age.ts
|
|
174
|
+
var ageValidator = (value, params, context) => {
|
|
175
|
+
if (isEmpty(value)) return null;
|
|
176
|
+
const min = params?.min;
|
|
177
|
+
const max = params?.max;
|
|
178
|
+
const soft = params?.soft;
|
|
179
|
+
const message = params?.message;
|
|
180
|
+
const birthDate = parseDate(value);
|
|
181
|
+
if (!birthDate) return null;
|
|
182
|
+
const today = /* @__PURE__ */ new Date();
|
|
183
|
+
let age = today.getFullYear() - birthDate.getFullYear();
|
|
184
|
+
const monthDiff = today.getMonth() - birthDate.getMonth();
|
|
185
|
+
if (monthDiff < 0 || monthDiff === 0 && today.getDate() < birthDate.getDate()) {
|
|
186
|
+
age--;
|
|
187
|
+
}
|
|
188
|
+
if (min !== void 0 && age < min) {
|
|
189
|
+
return createError(
|
|
190
|
+
context,
|
|
191
|
+
"INVALID_AGE_MIN",
|
|
192
|
+
message || `Age must be at least ${min}`,
|
|
193
|
+
soft
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
if (max !== void 0 && age > max) {
|
|
197
|
+
return createError(
|
|
198
|
+
context,
|
|
199
|
+
"INVALID_AGE_MAX",
|
|
200
|
+
message || `Age must be at most ${max}`,
|
|
201
|
+
soft
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
// src/validators/date/between.ts
|
|
208
|
+
var betweenValidator = (value, params, context) => {
|
|
209
|
+
if (isEmpty(value)) return null;
|
|
210
|
+
const start = params?.start;
|
|
211
|
+
const end = params?.end;
|
|
212
|
+
const soft = params?.soft;
|
|
213
|
+
const message = params?.message;
|
|
214
|
+
const date = parseDate(value);
|
|
215
|
+
if (!date) return null;
|
|
216
|
+
const startDate = parseDate(start);
|
|
217
|
+
const endDate = parseDate(end);
|
|
218
|
+
if (startDate && date < startDate) {
|
|
219
|
+
return createError(
|
|
220
|
+
context,
|
|
221
|
+
"INVALID_DATE_BEFORE",
|
|
222
|
+
message || `Date must be after ${startDate.toLocaleDateString()}`,
|
|
223
|
+
soft
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
if (endDate && date > endDate) {
|
|
227
|
+
return createError(
|
|
228
|
+
context,
|
|
229
|
+
"INVALID_DATE_AFTER",
|
|
230
|
+
message || `Date must be before ${endDate.toLocaleDateString()}`,
|
|
231
|
+
soft
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
export { ageValidator, betweenValidator, thisMonthValidator, thisWeekValidator, thisYearValidator, todayValidator, tomorrowValidator, weekdayValidator, weekendValidator, yesterdayValidator };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/validators/utils.ts
|
|
2
|
+
function createError(context, code, message, soft = false) {
|
|
3
|
+
return {
|
|
4
|
+
field: context.path,
|
|
5
|
+
code,
|
|
6
|
+
message,
|
|
7
|
+
severity: soft ? "soft" : "hard"
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function isEmpty(value) {
|
|
11
|
+
return value === void 0 || value === null || value === "";
|
|
12
|
+
}
|
|
13
|
+
function isString(value) {
|
|
14
|
+
return typeof value === "string";
|
|
15
|
+
}
|
|
16
|
+
function isNumber(value) {
|
|
17
|
+
return typeof value === "number" && !isNaN(value);
|
|
18
|
+
}
|
|
19
|
+
function isDate(value) {
|
|
20
|
+
return value instanceof Date && !isNaN(value.getTime());
|
|
21
|
+
}
|
|
22
|
+
function parseDate(value) {
|
|
23
|
+
if (value instanceof Date) {
|
|
24
|
+
return isNaN(value.getTime()) ? null : value;
|
|
25
|
+
}
|
|
26
|
+
if (typeof value === "string") {
|
|
27
|
+
const parsed = new Date(value);
|
|
28
|
+
return isNaN(parsed.getTime()) ? null : parsed;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function isArray(value) {
|
|
33
|
+
return Array.isArray(value);
|
|
34
|
+
}
|
|
35
|
+
function isObject(value) {
|
|
36
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { createError, isArray, isDate, isEmpty, isNumber, isObject, isString, parseDate };
|