@zairakai/js-utils 1.0.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/LICENSE +21 -0
- package/README.md +270 -0
- package/dist/arrays.cjs +210 -0
- package/dist/arrays.d.cts +119 -0
- package/dist/arrays.d.ts +119 -0
- package/dist/arrays.js +32 -0
- package/dist/chunk-27YHP2CK.js +407 -0
- package/dist/chunk-3WNRYKPG.js +37 -0
- package/dist/chunk-42CHLXT7.js +214 -0
- package/dist/chunk-6F4PWJZI.js +0 -0
- package/dist/chunk-7SXRFZBB.js +173 -0
- package/dist/chunk-F6RSTW65.js +156 -0
- package/dist/chunk-G7ZJ23DW.js +253 -0
- package/dist/chunk-IPP7PA6H.js +136 -0
- package/dist/chunk-LDSWHSRX.js +96 -0
- package/dist/chunk-TY75OOIQ.js +700 -0
- package/dist/chunk-W6JEMFAF.js +54 -0
- package/dist/chunk-XEJLBAXE.js +164 -0
- package/dist/chunk-Z7G3SIQH.js +270 -0
- package/dist/chunk-ZJPKS2MQ.js +101 -0
- package/dist/collections.cjs +797 -0
- package/dist/collections.d.cts +353 -0
- package/dist/collections.d.ts +353 -0
- package/dist/collections.js +17 -0
- package/dist/datetime.cjs +80 -0
- package/dist/datetime.d.cts +75 -0
- package/dist/datetime.d.ts +75 -0
- package/dist/datetime.js +24 -0
- package/dist/equals.cjs +121 -0
- package/dist/equals.d.cts +24 -0
- package/dist/equals.d.ts +24 -0
- package/dist/equals.js +8 -0
- package/dist/formatters.cjs +201 -0
- package/dist/formatters.d.cts +180 -0
- package/dist/formatters.d.ts +180 -0
- package/dist/formatters.js +48 -0
- package/dist/index.cjs +2906 -0
- package/dist/index.d.cts +120 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +348 -0
- package/dist/number.cjs +279 -0
- package/dist/number.d.cts +177 -0
- package/dist/number.d.ts +177 -0
- package/dist/number.js +10 -0
- package/dist/obj.cjs +427 -0
- package/dist/obj.d.cts +177 -0
- package/dist/obj.d.ts +177 -0
- package/dist/obj.js +12 -0
- package/dist/php-arrays.cjs +954 -0
- package/dist/php-arrays.d.cts +256 -0
- package/dist/php-arrays.d.ts +256 -0
- package/dist/php-arrays.js +70 -0
- package/dist/runtime.cjs +134 -0
- package/dist/runtime.d.cts +90 -0
- package/dist/runtime.d.ts +90 -0
- package/dist/runtime.js +24 -0
- package/dist/schemas.cjs +86 -0
- package/dist/schemas.d.cts +108 -0
- package/dist/schemas.d.ts +108 -0
- package/dist/schemas.js +22 -0
- package/dist/str.cjs +499 -0
- package/dist/str.d.cts +282 -0
- package/dist/str.d.ts +282 -0
- package/dist/str.js +11 -0
- package/dist/types.cjs +18 -0
- package/dist/types.d.cts +13 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.js +1 -0
- package/dist/validator.cjs +251 -0
- package/dist/validator.d.cts +99 -0
- package/dist/validator.d.ts +99 -0
- package/dist/validator.js +11 -0
- package/dist/validators.cjs +217 -0
- package/dist/validators.d.cts +216 -0
- package/dist/validators.d.ts +216 -0
- package/dist/validators.js +64 -0
- package/package.json +180 -0
- package/src/arrays.ts +316 -0
- package/src/collections.ts +866 -0
- package/src/datetime.ts +103 -0
- package/src/equals.ts +134 -0
- package/src/formatters.ts +342 -0
- package/src/index.ts +36 -0
- package/src/number.ts +281 -0
- package/src/obj.ts +303 -0
- package/src/php-arrays.ts +445 -0
- package/src/pipe.ts +29 -0
- package/src/runtime.ts +194 -0
- package/src/schemas.ts +136 -0
- package/src/str.ts +438 -0
- package/src/types.ts +13 -0
- package/src/validator.ts +157 -0
- package/src/validators.ts +359 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/validator.ts
|
|
21
|
+
var validator_exports = {};
|
|
22
|
+
__export(validator_exports, {
|
|
23
|
+
ValidationInstance: () => ValidationInstance,
|
|
24
|
+
Validator: () => Validator,
|
|
25
|
+
validator: () => validator
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(validator_exports);
|
|
28
|
+
var import_zod = require("zod");
|
|
29
|
+
|
|
30
|
+
// src/equals.ts
|
|
31
|
+
var isEqual = (a, b) => {
|
|
32
|
+
if (a === b) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (a && b && "object" === typeof a && "object" === typeof b) {
|
|
36
|
+
if (a.constructor !== b.constructor) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (Array.isArray(a)) {
|
|
40
|
+
if (a.length !== b.length) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
for (let i = 0; i < a.length; i++) {
|
|
44
|
+
if (!isEqual(a[i], b[i])) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (a instanceof Map && b instanceof Map) {
|
|
51
|
+
if (a.size !== b.size) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
for (const [key, val] of a) {
|
|
55
|
+
if (!b.has(key) || !isEqual(val, b.get(key))) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
if (a instanceof Set && b instanceof Set) {
|
|
62
|
+
if (a.size !== b.size) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
for (const val of a) {
|
|
66
|
+
if (!b.has(val)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
if (a.constructor === RegExp) {
|
|
73
|
+
return a.source === b.source && a.flags === b.flags;
|
|
74
|
+
}
|
|
75
|
+
if (a.valueOf !== Object.prototype.valueOf) {
|
|
76
|
+
return a.valueOf() === b.valueOf();
|
|
77
|
+
}
|
|
78
|
+
if (a.toString !== Object.prototype.toString) {
|
|
79
|
+
return a.toString() === b.toString();
|
|
80
|
+
}
|
|
81
|
+
const keys = Object.keys(a);
|
|
82
|
+
if (keys.length !== Object.keys(b).length) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
const bObj = b;
|
|
86
|
+
const aObj = a;
|
|
87
|
+
for (const key of keys) {
|
|
88
|
+
if (!Object.prototype.hasOwnProperty.call(bObj, key)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if (!isEqual(aObj[key], bObj[key])) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
return a !== a && b !== b;
|
|
98
|
+
};
|
|
99
|
+
var diff = (original, current) => {
|
|
100
|
+
const result = {};
|
|
101
|
+
if (isEqual(original, current)) {
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
if (!original || !current || "object" !== typeof original || "object" !== typeof current) {
|
|
105
|
+
return current || {};
|
|
106
|
+
}
|
|
107
|
+
const originalObj = original;
|
|
108
|
+
const currentObj = current;
|
|
109
|
+
const keys = /* @__PURE__ */ new Set([...Object.keys(originalObj), ...Object.keys(currentObj)]);
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
if (!isEqual(originalObj[key], currentObj[key])) {
|
|
112
|
+
if (originalObj[key] && currentObj[key] && "object" === typeof originalObj[key] && "object" === typeof currentObj[key] && !Array.isArray(originalObj[key])) {
|
|
113
|
+
result[key] = diff(originalObj[key], currentObj[key]);
|
|
114
|
+
} else {
|
|
115
|
+
result[key] = currentObj[key];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
// src/validator.ts
|
|
123
|
+
var Validator = class {
|
|
124
|
+
/**
|
|
125
|
+
* Create a new validation instance
|
|
126
|
+
*
|
|
127
|
+
* @param {unknown} data The data to validate
|
|
128
|
+
* @param {T | z.ZodObject<T>} rules The validation rules (Zod shape or object)
|
|
129
|
+
* @returns {ValidationInstance<z.ZodObject<T>>} A new ValidationInstance
|
|
130
|
+
*/
|
|
131
|
+
static make(data, rules) {
|
|
132
|
+
const schema = rules instanceof import_zod.z.ZodObject ? rules : import_zod.z.object(rules);
|
|
133
|
+
return new ValidationInstance(data, schema);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Validate data against rules and throw if it fails
|
|
137
|
+
*
|
|
138
|
+
* @param {unknown} data The data to validate
|
|
139
|
+
* @param {T | z.ZodObject<T>} rules The validation rules (Zod shape or object)
|
|
140
|
+
* @returns {z.infer<z.ZodObject<T>>} The validated data
|
|
141
|
+
* @throws {z.ZodError} If validation fails
|
|
142
|
+
*/
|
|
143
|
+
static validate(data, rules) {
|
|
144
|
+
const schema = rules instanceof import_zod.z.ZodObject ? rules : import_zod.z.object(rules);
|
|
145
|
+
return schema.parse(data);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Compare two objects for equality
|
|
149
|
+
*
|
|
150
|
+
* @param {unknown} a First object
|
|
151
|
+
* @param {unknown} b Second object
|
|
152
|
+
* @returns {boolean} True if the objects are equal
|
|
153
|
+
*/
|
|
154
|
+
static isEqual(a, b) {
|
|
155
|
+
return isEqual(a, b);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get the differences between two objects
|
|
159
|
+
*
|
|
160
|
+
* @param {unknown} a First object
|
|
161
|
+
* @param {unknown} b Second object
|
|
162
|
+
* @returns {GenericRecord} An object containing the differences
|
|
163
|
+
*/
|
|
164
|
+
static diff(a, b) {
|
|
165
|
+
return diff(a, b);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
var ValidationInstance = class {
|
|
169
|
+
constructor(data, schema) {
|
|
170
|
+
this.data = data;
|
|
171
|
+
this.schema = schema;
|
|
172
|
+
this.result = this.schema.safeParse(this.data);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Check if validation failed
|
|
176
|
+
*
|
|
177
|
+
* @returns {boolean} True if validation failed
|
|
178
|
+
*/
|
|
179
|
+
fails() {
|
|
180
|
+
return !this.result.success;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Check if validation passed
|
|
184
|
+
*
|
|
185
|
+
* @returns {boolean} True if validation passed
|
|
186
|
+
*/
|
|
187
|
+
passes() {
|
|
188
|
+
return this.result.success;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get validation errors
|
|
192
|
+
*
|
|
193
|
+
* @returns {Record<string, string[]>} An object with field names as keys and arrays of error messages as values
|
|
194
|
+
*/
|
|
195
|
+
errors() {
|
|
196
|
+
if (this.result.success) {
|
|
197
|
+
return {};
|
|
198
|
+
}
|
|
199
|
+
const errors = {};
|
|
200
|
+
this.result.error.issues.forEach((err) => {
|
|
201
|
+
const path = err.path.join(".") || "root";
|
|
202
|
+
if (!errors[path]) {
|
|
203
|
+
errors[path] = [];
|
|
204
|
+
}
|
|
205
|
+
errors[path].push(err.message);
|
|
206
|
+
});
|
|
207
|
+
return errors;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get the first error message for a given field
|
|
211
|
+
*
|
|
212
|
+
* @param {string} field The field name
|
|
213
|
+
* @returns {string | undefined} The first error message or undefined
|
|
214
|
+
*/
|
|
215
|
+
firstError(field) {
|
|
216
|
+
const fieldErrors = this.errors()[field];
|
|
217
|
+
return fieldErrors ? fieldErrors[0] : void 0;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get the validated data
|
|
221
|
+
*
|
|
222
|
+
* @returns {z.infer<T>} The validated data
|
|
223
|
+
* @throws {Error} If validation failed
|
|
224
|
+
*/
|
|
225
|
+
validated() {
|
|
226
|
+
if (!this.result.success) {
|
|
227
|
+
throw new Error("Validation failed");
|
|
228
|
+
}
|
|
229
|
+
return this.result.data;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get all error messages as a flat array
|
|
233
|
+
*
|
|
234
|
+
* @returns {string[]} An array of all error messages
|
|
235
|
+
*/
|
|
236
|
+
allErrors() {
|
|
237
|
+
if (this.result.success) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
return this.result.error.issues.map((err) => `${err.path.join(".")}: ${err.message}`);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
var validator = (data, rules) => {
|
|
244
|
+
return Validator.make(data, rules);
|
|
245
|
+
};
|
|
246
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
247
|
+
0 && (module.exports = {
|
|
248
|
+
ValidationInstance,
|
|
249
|
+
Validator,
|
|
250
|
+
validator
|
|
251
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GenericRecord } from './types.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Validator class inspired by Laravel's Validator facade
|
|
6
|
+
* Uses Zod under the hood for robust runtime validation
|
|
7
|
+
*/
|
|
8
|
+
declare class Validator {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new validation instance
|
|
11
|
+
*
|
|
12
|
+
* @param {unknown} data The data to validate
|
|
13
|
+
* @param {T | z.ZodObject<T>} rules The validation rules (Zod shape or object)
|
|
14
|
+
* @returns {ValidationInstance<z.ZodObject<T>>} A new ValidationInstance
|
|
15
|
+
*/
|
|
16
|
+
static make<T extends z.ZodRawShape>(data: unknown, rules: T | z.ZodObject<T>): ValidationInstance<z.ZodObject<T, z.core.$strip>>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate data against rules and throw if it fails
|
|
19
|
+
*
|
|
20
|
+
* @param {unknown} data The data to validate
|
|
21
|
+
* @param {T | z.ZodObject<T>} rules The validation rules (Zod shape or object)
|
|
22
|
+
* @returns {z.infer<z.ZodObject<T>>} The validated data
|
|
23
|
+
* @throws {z.ZodError} If validation fails
|
|
24
|
+
*/
|
|
25
|
+
static validate<T extends z.ZodRawShape>(data: unknown, rules: T | z.ZodObject<T>): z.core.$InferObjectOutput<T, {}>;
|
|
26
|
+
/**
|
|
27
|
+
* Compare two objects for equality
|
|
28
|
+
*
|
|
29
|
+
* @param {unknown} a First object
|
|
30
|
+
* @param {unknown} b Second object
|
|
31
|
+
* @returns {boolean} True if the objects are equal
|
|
32
|
+
*/
|
|
33
|
+
static isEqual(a: unknown, b: unknown): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get the differences between two objects
|
|
36
|
+
*
|
|
37
|
+
* @param {unknown} a First object
|
|
38
|
+
* @param {unknown} b Second object
|
|
39
|
+
* @returns {GenericRecord} An object containing the differences
|
|
40
|
+
*/
|
|
41
|
+
static diff(a: unknown, b: unknown): GenericRecord;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Individual validation instance
|
|
45
|
+
*/
|
|
46
|
+
declare class ValidationInstance<T extends z.ZodTypeAny> {
|
|
47
|
+
private data;
|
|
48
|
+
private schema;
|
|
49
|
+
private result;
|
|
50
|
+
constructor(data: unknown, schema: T);
|
|
51
|
+
/**
|
|
52
|
+
* Check if validation failed
|
|
53
|
+
*
|
|
54
|
+
* @returns {boolean} True if validation failed
|
|
55
|
+
*/
|
|
56
|
+
fails(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Check if validation passed
|
|
59
|
+
*
|
|
60
|
+
* @returns {boolean} True if validation passed
|
|
61
|
+
*/
|
|
62
|
+
passes(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Get validation errors
|
|
65
|
+
*
|
|
66
|
+
* @returns {Record<string, string[]>} An object with field names as keys and arrays of error messages as values
|
|
67
|
+
*/
|
|
68
|
+
errors(): Record<string, string[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Get the first error message for a given field
|
|
71
|
+
*
|
|
72
|
+
* @param {string} field The field name
|
|
73
|
+
* @returns {string | undefined} The first error message or undefined
|
|
74
|
+
*/
|
|
75
|
+
firstError(field: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Get the validated data
|
|
78
|
+
*
|
|
79
|
+
* @returns {z.infer<T>} The validated data
|
|
80
|
+
* @throws {Error} If validation failed
|
|
81
|
+
*/
|
|
82
|
+
validated(): z.infer<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Get all error messages as a flat array
|
|
85
|
+
*
|
|
86
|
+
* @returns {string[]} An array of all error messages
|
|
87
|
+
*/
|
|
88
|
+
allErrors(): string[];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Helper function to create a validator
|
|
92
|
+
*
|
|
93
|
+
* @param {unknown} data The data to validate
|
|
94
|
+
* @param {T | z.ZodObject<T>} rules The validation rules
|
|
95
|
+
* @returns {ValidationInstance<z.ZodObject<T>>} A new ValidationInstance
|
|
96
|
+
*/
|
|
97
|
+
declare const validator: <T extends z.ZodRawShape>(data: unknown, rules: T | z.ZodObject<T>) => ValidationInstance<z.ZodObject<T, z.core.$strip>>;
|
|
98
|
+
|
|
99
|
+
export { ValidationInstance, Validator, validator };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GenericRecord } from './types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Validator class inspired by Laravel's Validator facade
|
|
6
|
+
* Uses Zod under the hood for robust runtime validation
|
|
7
|
+
*/
|
|
8
|
+
declare class Validator {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new validation instance
|
|
11
|
+
*
|
|
12
|
+
* @param {unknown} data The data to validate
|
|
13
|
+
* @param {T | z.ZodObject<T>} rules The validation rules (Zod shape or object)
|
|
14
|
+
* @returns {ValidationInstance<z.ZodObject<T>>} A new ValidationInstance
|
|
15
|
+
*/
|
|
16
|
+
static make<T extends z.ZodRawShape>(data: unknown, rules: T | z.ZodObject<T>): ValidationInstance<z.ZodObject<T, z.core.$strip>>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate data against rules and throw if it fails
|
|
19
|
+
*
|
|
20
|
+
* @param {unknown} data The data to validate
|
|
21
|
+
* @param {T | z.ZodObject<T>} rules The validation rules (Zod shape or object)
|
|
22
|
+
* @returns {z.infer<z.ZodObject<T>>} The validated data
|
|
23
|
+
* @throws {z.ZodError} If validation fails
|
|
24
|
+
*/
|
|
25
|
+
static validate<T extends z.ZodRawShape>(data: unknown, rules: T | z.ZodObject<T>): z.core.$InferObjectOutput<T, {}>;
|
|
26
|
+
/**
|
|
27
|
+
* Compare two objects for equality
|
|
28
|
+
*
|
|
29
|
+
* @param {unknown} a First object
|
|
30
|
+
* @param {unknown} b Second object
|
|
31
|
+
* @returns {boolean} True if the objects are equal
|
|
32
|
+
*/
|
|
33
|
+
static isEqual(a: unknown, b: unknown): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get the differences between two objects
|
|
36
|
+
*
|
|
37
|
+
* @param {unknown} a First object
|
|
38
|
+
* @param {unknown} b Second object
|
|
39
|
+
* @returns {GenericRecord} An object containing the differences
|
|
40
|
+
*/
|
|
41
|
+
static diff(a: unknown, b: unknown): GenericRecord;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Individual validation instance
|
|
45
|
+
*/
|
|
46
|
+
declare class ValidationInstance<T extends z.ZodTypeAny> {
|
|
47
|
+
private data;
|
|
48
|
+
private schema;
|
|
49
|
+
private result;
|
|
50
|
+
constructor(data: unknown, schema: T);
|
|
51
|
+
/**
|
|
52
|
+
* Check if validation failed
|
|
53
|
+
*
|
|
54
|
+
* @returns {boolean} True if validation failed
|
|
55
|
+
*/
|
|
56
|
+
fails(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Check if validation passed
|
|
59
|
+
*
|
|
60
|
+
* @returns {boolean} True if validation passed
|
|
61
|
+
*/
|
|
62
|
+
passes(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Get validation errors
|
|
65
|
+
*
|
|
66
|
+
* @returns {Record<string, string[]>} An object with field names as keys and arrays of error messages as values
|
|
67
|
+
*/
|
|
68
|
+
errors(): Record<string, string[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Get the first error message for a given field
|
|
71
|
+
*
|
|
72
|
+
* @param {string} field The field name
|
|
73
|
+
* @returns {string | undefined} The first error message or undefined
|
|
74
|
+
*/
|
|
75
|
+
firstError(field: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Get the validated data
|
|
78
|
+
*
|
|
79
|
+
* @returns {z.infer<T>} The validated data
|
|
80
|
+
* @throws {Error} If validation failed
|
|
81
|
+
*/
|
|
82
|
+
validated(): z.infer<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Get all error messages as a flat array
|
|
85
|
+
*
|
|
86
|
+
* @returns {string[]} An array of all error messages
|
|
87
|
+
*/
|
|
88
|
+
allErrors(): string[];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Helper function to create a validator
|
|
92
|
+
*
|
|
93
|
+
* @param {unknown} data The data to validate
|
|
94
|
+
* @param {T | z.ZodObject<T>} rules The validation rules
|
|
95
|
+
* @returns {ValidationInstance<z.ZodObject<T>>} A new ValidationInstance
|
|
96
|
+
*/
|
|
97
|
+
declare const validator: <T extends z.ZodRawShape>(data: unknown, rules: T | z.ZodObject<T>) => ValidationInstance<z.ZodObject<T, z.core.$strip>>;
|
|
98
|
+
|
|
99
|
+
export { ValidationInstance, Validator, validator };
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/validators.ts
|
|
21
|
+
var validators_exports = {};
|
|
22
|
+
__export(validators_exports, {
|
|
23
|
+
blank: () => blank,
|
|
24
|
+
filled: () => filled,
|
|
25
|
+
isArray: () => isArray,
|
|
26
|
+
isBase64: () => isBase64,
|
|
27
|
+
isBlank: () => isBlank,
|
|
28
|
+
isBoolean: () => isBoolean,
|
|
29
|
+
isDate: () => isDate,
|
|
30
|
+
isEmail: () => isEmail,
|
|
31
|
+
isEmpty: () => isEmpty,
|
|
32
|
+
isEven: () => isEven,
|
|
33
|
+
isFalse: () => isFalse,
|
|
34
|
+
isFloat: () => isFloat,
|
|
35
|
+
isFunction: () => isFunction,
|
|
36
|
+
isInteger: () => isInteger,
|
|
37
|
+
isIp: () => isIp,
|
|
38
|
+
isJson: () => isJson,
|
|
39
|
+
isMacAddress: () => isMacAddress,
|
|
40
|
+
isNotEmpty: () => isNotEmpty,
|
|
41
|
+
isNull: () => isNull,
|
|
42
|
+
isNumber: () => isNumber,
|
|
43
|
+
isNumeric: () => isNumeric,
|
|
44
|
+
isObject: () => isObject,
|
|
45
|
+
isOdd: () => isOdd,
|
|
46
|
+
isPresent: () => isPresent,
|
|
47
|
+
isSet: () => isSet,
|
|
48
|
+
isString: () => isString,
|
|
49
|
+
isTrue: () => isTrue,
|
|
50
|
+
isUndefined: () => isUndefined,
|
|
51
|
+
isUrl: () => isUrl,
|
|
52
|
+
isUuid: () => isUuid
|
|
53
|
+
});
|
|
54
|
+
module.exports = __toCommonJS(validators_exports);
|
|
55
|
+
var isTrue = (value) => true === value;
|
|
56
|
+
var isFalse = (value) => false === value;
|
|
57
|
+
var isNull = (value) => null === value;
|
|
58
|
+
var isUndefined = (value) => void 0 === value;
|
|
59
|
+
var isSet = (value) => void 0 !== value && null !== value;
|
|
60
|
+
var isArray = (value) => Array.isArray(value);
|
|
61
|
+
var isObject = (value) => "object" === typeof value && null !== value && !Array.isArray(value);
|
|
62
|
+
var isString = (value) => "string" === typeof value;
|
|
63
|
+
var isNumber = (value) => "number" === typeof value && !isNaN(value);
|
|
64
|
+
var isInteger = (value) => Number.isInteger(value);
|
|
65
|
+
var isFloat = (value) => "number" === typeof value && !isNaN(value) && !Number.isInteger(value);
|
|
66
|
+
var isBoolean = (value) => "boolean" === typeof value;
|
|
67
|
+
var isFunction = (value) => "function" === typeof value;
|
|
68
|
+
var isDate = (value) => value instanceof Date && !isNaN(value.getTime());
|
|
69
|
+
var isNumeric = (value) => {
|
|
70
|
+
if ("number" === typeof value) {
|
|
71
|
+
return !isNaN(value) && isFinite(value);
|
|
72
|
+
}
|
|
73
|
+
if ("string" === typeof value) {
|
|
74
|
+
const num = Number(value.trim());
|
|
75
|
+
return "" !== value.trim() && !isNaN(num) && isFinite(num);
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
};
|
|
79
|
+
var isEmail = (value) => {
|
|
80
|
+
if ("string" !== typeof value) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
84
|
+
return emailRegex.test(value);
|
|
85
|
+
};
|
|
86
|
+
var isUrl = (value) => {
|
|
87
|
+
if ("string" !== typeof value) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
new URL(value);
|
|
92
|
+
return true;
|
|
93
|
+
} catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
var isEmpty = (value) => {
|
|
98
|
+
if (isNull(value) || isUndefined(value)) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
if (isString(value)) {
|
|
102
|
+
return 0 === value.trim().length;
|
|
103
|
+
}
|
|
104
|
+
if (isArray(value)) {
|
|
105
|
+
return 0 === value.length;
|
|
106
|
+
}
|
|
107
|
+
if (isObject(value)) {
|
|
108
|
+
return 0 === Object.keys(value).length;
|
|
109
|
+
}
|
|
110
|
+
if (isNumber(value)) {
|
|
111
|
+
return 0 === value;
|
|
112
|
+
}
|
|
113
|
+
if (isBoolean(value)) {
|
|
114
|
+
return isFalse(value);
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
};
|
|
118
|
+
var isNotEmpty = (value) => !isEmpty(value);
|
|
119
|
+
var isBlank = (value) => {
|
|
120
|
+
if (value == null) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
if ("string" === typeof value) {
|
|
124
|
+
return "" === value.trim();
|
|
125
|
+
}
|
|
126
|
+
return isEmpty(value);
|
|
127
|
+
};
|
|
128
|
+
var isPresent = (value) => !isBlank(value);
|
|
129
|
+
var filled = (value) => isPresent(value);
|
|
130
|
+
var blank = (value) => isBlank(value);
|
|
131
|
+
var isEven = (value) => {
|
|
132
|
+
return isNumber(value) && 0 === value % 2;
|
|
133
|
+
};
|
|
134
|
+
var isOdd = (value) => {
|
|
135
|
+
return isNumber(value) && 0 !== value % 2;
|
|
136
|
+
};
|
|
137
|
+
var isJson = (value) => {
|
|
138
|
+
if ("string" !== typeof value) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
JSON.parse(value);
|
|
143
|
+
return true;
|
|
144
|
+
} catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
var isBase64 = (value) => {
|
|
149
|
+
if ("string" !== typeof value) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const base64Pattern = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
153
|
+
if (0 !== value.length % 4) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return base64Pattern.test(value);
|
|
157
|
+
};
|
|
158
|
+
var isMacAddress = (value) => {
|
|
159
|
+
if ("string" !== typeof value) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const macPattern = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;
|
|
163
|
+
return macPattern.test(value);
|
|
164
|
+
};
|
|
165
|
+
var isUuid = (value) => {
|
|
166
|
+
if ("string" !== typeof value) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
|
|
170
|
+
};
|
|
171
|
+
var isIp = (value) => {
|
|
172
|
+
if ("string" !== typeof value) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
const ipv4 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
|
|
176
|
+
if (ipv4.test(value)) {
|
|
177
|
+
return value.split(".").every((part) => {
|
|
178
|
+
const n = Number(part);
|
|
179
|
+
return n >= 0 && n <= 255 && String(n) === part;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|(([0-9a-fA-F]{1,4}:){0,7}:)|(:[0-9a-fA-F]{1,4}){1,7}|(([0-9a-fA-F]{1,4}:){1,7}:)|(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|::1)$/;
|
|
183
|
+
return ipv6.test(value);
|
|
184
|
+
};
|
|
185
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
186
|
+
0 && (module.exports = {
|
|
187
|
+
blank,
|
|
188
|
+
filled,
|
|
189
|
+
isArray,
|
|
190
|
+
isBase64,
|
|
191
|
+
isBlank,
|
|
192
|
+
isBoolean,
|
|
193
|
+
isDate,
|
|
194
|
+
isEmail,
|
|
195
|
+
isEmpty,
|
|
196
|
+
isEven,
|
|
197
|
+
isFalse,
|
|
198
|
+
isFloat,
|
|
199
|
+
isFunction,
|
|
200
|
+
isInteger,
|
|
201
|
+
isIp,
|
|
202
|
+
isJson,
|
|
203
|
+
isMacAddress,
|
|
204
|
+
isNotEmpty,
|
|
205
|
+
isNull,
|
|
206
|
+
isNumber,
|
|
207
|
+
isNumeric,
|
|
208
|
+
isObject,
|
|
209
|
+
isOdd,
|
|
210
|
+
isPresent,
|
|
211
|
+
isSet,
|
|
212
|
+
isString,
|
|
213
|
+
isTrue,
|
|
214
|
+
isUndefined,
|
|
215
|
+
isUrl,
|
|
216
|
+
isUuid
|
|
217
|
+
});
|