@oxog/vld 1.5.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +168 -0
- package/LICENSE +20 -20
- package/README.md +558 -517
- package/dist/chunks/bigint-DgsCr2dC.js +1709 -0
- package/dist/chunks/bigint-DgsCr2dC.js.map +1 -0
- package/dist/{coercion/string.js → chunks/date-ODue_rtq.js} +271 -5
- package/dist/chunks/date-ODue_rtq.js.map +1 -0
- package/dist/chunks/index-BZqWZvVe.js +426 -0
- package/dist/chunks/index-BZqWZvVe.js.map +1 -0
- package/dist/chunks/index-CETyGkrv.js +894 -0
- package/dist/chunks/index-CETyGkrv.js.map +1 -0
- package/dist/chunks/json-o20GFhTh.js +2021 -0
- package/dist/chunks/json-o20GFhTh.js.map +1 -0
- package/dist/{validators/unknown.js → chunks/unknown-SLIH1VCf.js} +6 -3
- package/dist/chunks/unknown-SLIH1VCf.js.map +1 -0
- package/dist/cjs/errors.cjs +387 -0
- package/dist/cjs/errors.cjs.map +1 -0
- package/dist/cjs/index.cjs +9983 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/locales/index.cjs +2877 -0
- package/dist/cjs/locales/index.cjs.map +1 -0
- package/dist/cjs/locales/lazy.cjs +3169 -0
- package/dist/cjs/locales/lazy.cjs.map +1 -0
- package/dist/cjs/mini.cjs +7329 -0
- package/dist/cjs/mini.cjs.map +1 -0
- package/dist/codecs/index.js +4 -275
- package/dist/codecs/index.js.map +1 -1
- package/dist/coercion/index.d.ts +11 -0
- package/dist/coercion/index.d.ts.map +1 -0
- package/dist/coercion/{bigint.js → index.js} +7 -4
- package/dist/coercion/index.js.map +1 -0
- package/dist/compat/emitter.js +6 -4
- package/dist/compat/emitter.js.map +1 -1
- package/dist/compat/result.js +21 -19
- package/dist/compat/result.js.map +1 -1
- package/dist/errors.js +13 -10
- package/dist/errors.js.map +1 -1
- package/dist/index.js +225 -126
- package/dist/index.js.map +1 -1
- package/dist/kernel.js +10 -7
- package/dist/kernel.js.map +1 -1
- package/dist/locales/af.js +4 -2
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.js +4 -2
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/bn.js +4 -2
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.js +4 -2
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.js +4 -2
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.js +4 -2
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.js +4 -2
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.js +4 -2
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.js +4 -2
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.js +4 -2
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.js +4 -2
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.js +4 -2
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/index.js +3 -91
- package/dist/locales/index.js.map +1 -1
- package/dist/locales/it.js +4 -2
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.js +4 -2
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js +4 -2
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/lazy.d.ts +111 -0
- package/dist/locales/lazy.d.ts.map +1 -0
- package/dist/locales/lazy.js +220 -0
- package/dist/locales/lazy.js.map +1 -0
- package/dist/locales/nl.js +4 -2
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.js +4 -2
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.js +4 -2
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.js +4 -2
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.js +4 -2
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.js +4 -2
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.js +4 -2
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.js +4 -2
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.js +4 -2
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.js +4 -2
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/vi.js +4 -2
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.js +4 -2
- package/dist/locales/zh.js.map +1 -1
- package/dist/mini.d.ts +182 -0
- package/dist/mini.d.ts.map +1 -0
- package/dist/mini.js +132 -0
- package/dist/mini.js.map +1 -0
- package/dist/pigment.js +8 -7
- package/dist/pigment.js.map +1 -1
- package/dist/validators/array.d.ts +5 -0
- package/dist/validators/array.d.ts.map +1 -1
- package/dist/validators/discriminated-union.d.ts.map +1 -1
- package/dist/validators/enum.d.ts +5 -1
- package/dist/validators/enum.d.ts.map +1 -1
- package/dist/validators/index.js +5 -45
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/lazy.d.ts +8 -1
- package/dist/validators/lazy.d.ts.map +1 -1
- package/dist/validators/literal.d.ts +5 -1
- package/dist/validators/literal.d.ts.map +1 -1
- package/dist/validators/object.d.ts +30 -3
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/string.d.ts +12 -1
- package/dist/validators/string.d.ts.map +1 -1
- package/package.json +69 -11
- package/dist/cli/benchmark.d.ts +0 -15
- package/dist/cli/benchmark.d.ts.map +0 -1
- package/dist/cli/benchmark.js +0 -248
- package/dist/cli/benchmark.js.map +0 -1
- package/dist/cli/bin.js +0 -35
- package/dist/cli/bin.js.map +0 -1
- package/dist/cli/commands/benchmark.js +0 -204
- package/dist/cli/commands/benchmark.js.map +0 -1
- package/dist/cli/commands/validate.js +0 -157
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/generate.d.ts +0 -14
- package/dist/cli/generate.d.ts.map +0 -1
- package/dist/cli/generate.js +0 -233
- package/dist/cli/generate.js.map +0 -1
- package/dist/cli/index.js +0 -182
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/validate.d.ts +0 -15
- package/dist/cli/validate.d.ts.map +0 -1
- package/dist/cli/validate.js +0 -162
- package/dist/cli/validate.js.map +0 -1
- package/dist/coercion/bigint.js.map +0 -1
- package/dist/coercion/boolean.js +0 -59
- package/dist/coercion/boolean.js.map +0 -1
- package/dist/coercion/date.js +0 -52
- package/dist/coercion/date.js.map +0 -1
- package/dist/coercion/number.js +0 -160
- package/dist/coercion/number.js.map +0 -1
- package/dist/coercion/string.js.map +0 -1
- package/dist/compat/index.js +0 -14
- package/dist/compat/index.js.map +0 -1
- package/dist/events.js +0 -8
- package/dist/events.js.map +0 -1
- package/dist/guards.d.ts +0 -143
- package/dist/guards.d.ts.map +0 -1
- package/dist/guards.js +0 -238
- package/dist/guards.js.map +0 -1
- package/dist/index-new.d.ts.map +0 -1
- package/dist/locales/backup-en.js +0 -105
- package/dist/locales/backup-en.js.map +0 -1
- package/dist/locales/types.js +0 -2
- package/dist/locales/types.js.map +0 -1
- package/dist/locales.d.ts +0 -54
- package/dist/locales.d.ts.map +0 -1
- package/dist/locales.js +0 -732
- package/dist/locales.js.map +0 -1
- package/dist/logger.js +0 -184
- package/dist/logger.js.map +0 -1
- package/dist/plugins/codecs.d.ts +0 -17
- package/dist/plugins/codecs.d.ts.map +0 -1
- package/dist/plugins/codecs.js +0 -29
- package/dist/plugins/codecs.js.map +0 -1
- package/dist/plugins/coercion.d.ts +0 -13
- package/dist/plugins/coercion.d.ts.map +0 -1
- package/dist/plugins/coercion.js +0 -34
- package/dist/plugins/coercion.js.map +0 -1
- package/dist/plugins/core-validators.d.ts +0 -13
- package/dist/plugins/core-validators.d.ts.map +0 -1
- package/dist/plugins/core-validators.js +0 -96
- package/dist/plugins/core-validators.js.map +0 -1
- package/dist/plugins/index.js +0 -8
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/kernel.d.ts +0 -29
- package/dist/plugins/kernel.d.ts.map +0 -1
- package/dist/plugins/kernel.js +0 -486
- package/dist/plugins/kernel.js.map +0 -1
- package/dist/plugins/types.js +0 -8
- package/dist/plugins/types.js.map +0 -1
- package/dist/style.d.ts +0 -123
- package/dist/style.d.ts.map +0 -1
- package/dist/style.js +0 -369
- package/dist/style.js.map +0 -1
- package/dist/utils/codec-utils.js +0 -229
- package/dist/utils/codec-utils.js.map +0 -1
- package/dist/utils/deep-merge.js +0 -76
- package/dist/utils/deep-merge.js.map +0 -1
- package/dist/utils/ip-validation.js +0 -98
- package/dist/utils/ip-validation.js.map +0 -1
- package/dist/utils/security.js +0 -61
- package/dist/utils/security.js.map +0 -1
- package/dist/validators/any.js +0 -25
- package/dist/validators/any.js.map +0 -1
- package/dist/validators/array.js +0 -190
- package/dist/validators/array.js.map +0 -1
- package/dist/validators/base.js +0 -499
- package/dist/validators/base.js.map +0 -1
- package/dist/validators/base64.js +0 -65
- package/dist/validators/base64.js.map +0 -1
- package/dist/validators/bigint.js +0 -142
- package/dist/validators/bigint.js.map +0 -1
- package/dist/validators/boolean.js +0 -114
- package/dist/validators/boolean.js.map +0 -1
- package/dist/validators/codec.js +0 -182
- package/dist/validators/codec.js.map +0 -1
- package/dist/validators/custom.js +0 -50
- package/dist/validators/custom.js.map +0 -1
- package/dist/validators/date.js +0 -227
- package/dist/validators/date.js.map +0 -1
- package/dist/validators/discriminated-union.js +0 -98
- package/dist/validators/discriminated-union.js.map +0 -1
- package/dist/validators/enum.js +0 -82
- package/dist/validators/enum.js.map +0 -1
- package/dist/validators/file.js +0 -114
- package/dist/validators/file.js.map +0 -1
- package/dist/validators/function.js +0 -45
- package/dist/validators/function.js.map +0 -1
- package/dist/validators/hex.js +0 -62
- package/dist/validators/hex.js.map +0 -1
- package/dist/validators/intersection.js +0 -64
- package/dist/validators/intersection.js.map +0 -1
- package/dist/validators/json.js +0 -64
- package/dist/validators/json.js.map +0 -1
- package/dist/validators/lazy.js +0 -42
- package/dist/validators/lazy.js.map +0 -1
- package/dist/validators/literal.js +0 -45
- package/dist/validators/literal.js.map +0 -1
- package/dist/validators/map.js +0 -54
- package/dist/validators/map.js.map +0 -1
- package/dist/validators/nan.js +0 -32
- package/dist/validators/nan.js.map +0 -1
- package/dist/validators/never.js +0 -29
- package/dist/validators/never.js.map +0 -1
- package/dist/validators/null.js +0 -31
- package/dist/validators/null.js.map +0 -1
- package/dist/validators/number.js +0 -225
- package/dist/validators/number.js.map +0 -1
- package/dist/validators/object-optimized.d.ts +0 -23
- package/dist/validators/object-optimized.d.ts.map +0 -1
- package/dist/validators/object-optimized.js +0 -179
- package/dist/validators/object-optimized.js.map +0 -1
- package/dist/validators/object-ultra.d.ts +0 -34
- package/dist/validators/object-ultra.d.ts.map +0 -1
- package/dist/validators/object-ultra.js +0 -175
- package/dist/validators/object-ultra.js.map +0 -1
- package/dist/validators/object.js +0 -458
- package/dist/validators/object.js.map +0 -1
- package/dist/validators/record.js +0 -128
- package/dist/validators/record.js.map +0 -1
- package/dist/validators/set.js +0 -51
- package/dist/validators/set.js.map +0 -1
- package/dist/validators/string-bool.js +0 -127
- package/dist/validators/string-bool.js.map +0 -1
- package/dist/validators/string-formats.js +0 -120
- package/dist/validators/string-formats.js.map +0 -1
- package/dist/validators/string-ultra.d.ts +0 -49
- package/dist/validators/string-ultra.d.ts.map +0 -1
- package/dist/validators/string-ultra.js +0 -217
- package/dist/validators/string-ultra.js.map +0 -1
- package/dist/validators/string.js +0 -253
- package/dist/validators/string.js.map +0 -1
- package/dist/validators/symbol.js +0 -42
- package/dist/validators/symbol.js.map +0 -1
- package/dist/validators/template-literal.js +0 -102
- package/dist/validators/template-literal.js.map +0 -1
- package/dist/validators/tuple.js +0 -55
- package/dist/validators/tuple.js.map +0 -1
- package/dist/validators/uint8array.js +0 -98
- package/dist/validators/uint8array.js.map +0 -1
- package/dist/validators/undefined.js +0 -31
- package/dist/validators/undefined.js.map +0 -1
- package/dist/validators/union-optimized.d.ts +0 -15
- package/dist/validators/union-optimized.d.ts.map +0 -1
- package/dist/validators/union-optimized.js +0 -92
- package/dist/validators/union-optimized.js.map +0 -1
- package/dist/validators/union.js +0 -126
- package/dist/validators/union.js.map +0 -1
- package/dist/validators/unknown.js.map +0 -1
- package/dist/validators/void.js +0 -35
- package/dist/validators/void.js.map +0 -1
- package/dist/validators/xor.js +0 -64
- package/dist/validators/xor.js.map +0 -1
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { VldBase } from './base.js';
|
|
2
|
-
import { getMessages } from '../locales/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* Immutable number validator with chainable methods
|
|
5
|
-
*/
|
|
6
|
-
export class VldNumber extends VldBase {
|
|
7
|
-
/**
|
|
8
|
-
* Protected constructor to allow extension while maintaining immutability
|
|
9
|
-
*/
|
|
10
|
-
constructor(config) {
|
|
11
|
-
super();
|
|
12
|
-
this.config = {
|
|
13
|
-
checks: config?.checks || [],
|
|
14
|
-
errorMessage: config?.errorMessage
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Create a new number validator
|
|
19
|
-
*/
|
|
20
|
-
static create() {
|
|
21
|
-
return new VldNumber();
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Parse and validate a number value
|
|
25
|
-
*/
|
|
26
|
-
parse(value) {
|
|
27
|
-
if (typeof value !== 'number' || isNaN(value)) {
|
|
28
|
-
throw new Error(this.config.errorMessage || getMessages().invalidNumber);
|
|
29
|
-
}
|
|
30
|
-
// Apply all checks
|
|
31
|
-
for (const check of this.config.checks) {
|
|
32
|
-
if (!check(value)) {
|
|
33
|
-
throw new Error(this.config.errorMessage || getMessages().invalidNumber);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return value;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Safely parse and validate a number value
|
|
40
|
-
*/
|
|
41
|
-
safeParse(value) {
|
|
42
|
-
try {
|
|
43
|
-
return { success: true, data: this.parse(value) };
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
return { success: false, error: error };
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Create a new validator with minimum value constraint
|
|
51
|
-
*/
|
|
52
|
-
min(value, message) {
|
|
53
|
-
return new VldNumber({
|
|
54
|
-
checks: [...this.config.checks, (v) => v >= value],
|
|
55
|
-
errorMessage: message || getMessages().numberMin(value)
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Create a new validator with maximum value constraint
|
|
60
|
-
*/
|
|
61
|
-
max(value, message) {
|
|
62
|
-
return new VldNumber({
|
|
63
|
-
checks: [...this.config.checks, (v) => v <= value],
|
|
64
|
-
errorMessage: message || getMessages().numberMax(value)
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Create a new validator that checks for integer values
|
|
69
|
-
*/
|
|
70
|
-
int(message) {
|
|
71
|
-
return new VldNumber({
|
|
72
|
-
checks: [...this.config.checks, (v) => Number.isInteger(v)],
|
|
73
|
-
errorMessage: message || getMessages().numberInt
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Create a new validator that checks for positive values
|
|
78
|
-
*/
|
|
79
|
-
positive(message) {
|
|
80
|
-
return new VldNumber({
|
|
81
|
-
checks: [...this.config.checks, (v) => v > 0],
|
|
82
|
-
errorMessage: message || getMessages().numberPositive
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Create a new validator that checks for negative values
|
|
87
|
-
*/
|
|
88
|
-
negative(message) {
|
|
89
|
-
return new VldNumber({
|
|
90
|
-
checks: [...this.config.checks, (v) => v < 0],
|
|
91
|
-
errorMessage: message || getMessages().numberNegative
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Create a new validator that checks for non-negative values
|
|
96
|
-
*/
|
|
97
|
-
nonnegative(message) {
|
|
98
|
-
return new VldNumber({
|
|
99
|
-
checks: [...this.config.checks, (v) => v >= 0],
|
|
100
|
-
errorMessage: message || getMessages().numberNonnegative
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Create a new validator that checks for non-positive values
|
|
105
|
-
*/
|
|
106
|
-
nonpositive(message) {
|
|
107
|
-
return new VldNumber({
|
|
108
|
-
checks: [...this.config.checks, (v) => v <= 0],
|
|
109
|
-
errorMessage: message || getMessages().numberNonpositive
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Create a new validator that checks for finite values
|
|
114
|
-
*/
|
|
115
|
-
finite(message) {
|
|
116
|
-
return new VldNumber({
|
|
117
|
-
checks: [...this.config.checks, (v) => Number.isFinite(v)],
|
|
118
|
-
errorMessage: message || getMessages().numberFinite
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Create a new validator that checks for safe integer values
|
|
123
|
-
*/
|
|
124
|
-
safe(message) {
|
|
125
|
-
return new VldNumber({
|
|
126
|
-
checks: [...this.config.checks, (v) => Number.isSafeInteger(v)],
|
|
127
|
-
errorMessage: message || getMessages().numberSafe
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Create a new validator that checks if value is multiple of another
|
|
132
|
-
*/
|
|
133
|
-
multipleOf(value, message) {
|
|
134
|
-
return new VldNumber({
|
|
135
|
-
checks: [...this.config.checks, (v) => {
|
|
136
|
-
// Use epsilon comparison for floating point precision
|
|
137
|
-
const remainder = Math.abs(v % value);
|
|
138
|
-
return remainder < Number.EPSILON || Math.abs(remainder - Math.abs(value)) < Number.EPSILON;
|
|
139
|
-
}],
|
|
140
|
-
errorMessage: message || getMessages().numberMultipleOf(value)
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Alias for multipleOf
|
|
145
|
-
*/
|
|
146
|
-
step(value, message) {
|
|
147
|
-
return this.multipleOf(value, message);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Create a new validator with a range constraint
|
|
151
|
-
*/
|
|
152
|
-
between(min, max, message) {
|
|
153
|
-
return new VldNumber({
|
|
154
|
-
checks: [...this.config.checks, (v) => v >= min && v <= max],
|
|
155
|
-
errorMessage: message || `Number must be between ${min} and ${max}`
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Create a new validator that checks for even numbers
|
|
160
|
-
* BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)
|
|
161
|
-
*/
|
|
162
|
-
even(message) {
|
|
163
|
-
return new VldNumber({
|
|
164
|
-
checks: [...this.config.checks, (v) => {
|
|
165
|
-
// Even/odd only makes sense for integers
|
|
166
|
-
if (!Number.isInteger(v)) {
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
return v % 2 === 0;
|
|
170
|
-
}],
|
|
171
|
-
errorMessage: message || 'Number must be even'
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Create a new validator that checks for odd numbers
|
|
176
|
-
* BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)
|
|
177
|
-
*/
|
|
178
|
-
odd(message) {
|
|
179
|
-
return new VldNumber({
|
|
180
|
-
checks: [...this.config.checks, (v) => {
|
|
181
|
-
// Even/odd only makes sense for integers
|
|
182
|
-
if (!Number.isInteger(v)) {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
return v % 2 !== 0;
|
|
186
|
-
}],
|
|
187
|
-
errorMessage: message || 'Number must be odd'
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Create a new validator with strict greater than constraint
|
|
192
|
-
* Zod 4 API parity - strictly greater than (not equal to)
|
|
193
|
-
*/
|
|
194
|
-
gt(value, message) {
|
|
195
|
-
return new VldNumber({
|
|
196
|
-
checks: [...this.config.checks, (v) => v > value],
|
|
197
|
-
errorMessage: message || `Number must be greater than ${value}`
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Create a new validator with strict less than constraint
|
|
202
|
-
* Zod 4 API parity - strictly less than (not equal to)
|
|
203
|
-
*/
|
|
204
|
-
lt(value, message) {
|
|
205
|
-
return new VldNumber({
|
|
206
|
-
checks: [...this.config.checks, (v) => v < value],
|
|
207
|
-
errorMessage: message || `Number must be less than ${value}`
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Create a new validator with greater than or equal constraint
|
|
212
|
-
* Zod 4 API parity - alias for min()
|
|
213
|
-
*/
|
|
214
|
-
gte(value, message) {
|
|
215
|
-
return this.min(value, message);
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Create a new validator with less than or equal constraint
|
|
219
|
-
* Zod 4 API parity - alias for max()
|
|
220
|
-
*/
|
|
221
|
-
lte(value, message) {
|
|
222
|
-
return this.max(value, message);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
//# sourceMappingURL=number.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/validators/number.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Type for number validation check functions\r\n */\r\ntype NumberCheck = (value: number) => boolean;\r\n\r\n/**\r\n * Configuration for number validator\r\n */\r\ninterface NumberValidatorConfig {\r\n readonly checks: ReadonlyArray<NumberCheck>;\r\n readonly errorMessage?: string;\r\n}\r\n\r\n/**\r\n * Immutable number validator with chainable methods\r\n */\r\nexport class VldNumber extends VldBase<number, number> {\r\n protected readonly config: NumberValidatorConfig;\r\n \r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(config?: Partial<NumberValidatorConfig>) {\r\n super();\r\n this.config = {\r\n checks: config?.checks || [],\r\n errorMessage: config?.errorMessage\r\n };\r\n }\r\n \r\n /**\r\n * Create a new number validator\r\n */\r\n static create(): VldNumber {\r\n return new VldNumber();\r\n }\r\n \r\n /**\r\n * Parse and validate a number value\r\n */\r\n parse(value: unknown): number {\r\n if (typeof value !== 'number' || isNaN(value)) {\r\n throw new Error(this.config.errorMessage || getMessages().invalidNumber);\r\n }\r\n \r\n // Apply all checks\r\n for (const check of this.config.checks) {\r\n if (!check(value)) {\r\n throw new Error(this.config.errorMessage || getMessages().invalidNumber);\r\n }\r\n }\r\n \r\n return value;\r\n }\r\n \r\n /**\r\n * Safely parse and validate a number value\r\n */\r\n safeParse(value: unknown): ParseResult<number> {\r\n try {\r\n return { success: true, data: this.parse(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n }\r\n \r\n /**\r\n * Create a new validator with minimum value constraint\r\n */\r\n min(value: number, message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v >= value],\r\n errorMessage: message || getMessages().numberMin(value)\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator with maximum value constraint\r\n */\r\n max(value: number, message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v <= value],\r\n errorMessage: message || getMessages().numberMax(value)\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for integer values\r\n */\r\n int(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => Number.isInteger(v)],\r\n errorMessage: message || getMessages().numberInt\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for positive values\r\n */\r\n positive(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v > 0],\r\n errorMessage: message || getMessages().numberPositive\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for negative values\r\n */\r\n negative(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v < 0],\r\n errorMessage: message || getMessages().numberNegative\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for non-negative values\r\n */\r\n nonnegative(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v >= 0],\r\n errorMessage: message || getMessages().numberNonnegative\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for non-positive values\r\n */\r\n nonpositive(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v <= 0],\r\n errorMessage: message || getMessages().numberNonpositive\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for finite values\r\n */\r\n finite(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => Number.isFinite(v)],\r\n errorMessage: message || getMessages().numberFinite\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for safe integer values\r\n */\r\n safe(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => Number.isSafeInteger(v)],\r\n errorMessage: message || getMessages().numberSafe\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks if value is multiple of another\r\n */\r\n multipleOf(value: number, message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => {\r\n // Use epsilon comparison for floating point precision\r\n const remainder = Math.abs(v % value);\r\n return remainder < Number.EPSILON || Math.abs(remainder - Math.abs(value)) < Number.EPSILON;\r\n }],\r\n errorMessage: message || getMessages().numberMultipleOf(value)\r\n });\r\n }\r\n \r\n /**\r\n * Alias for multipleOf\r\n */\r\n step(value: number, message?: string): VldNumber {\r\n return this.multipleOf(value, message);\r\n }\r\n \r\n /**\r\n * Create a new validator with a range constraint\r\n */\r\n between(min: number, max: number, message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v >= min && v <= max],\r\n errorMessage: message || `Number must be between ${min} and ${max}`\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for even numbers\r\n * BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)\r\n */\r\n even(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => {\r\n // Even/odd only makes sense for integers\r\n if (!Number.isInteger(v)) {\r\n return false;\r\n }\r\n return v % 2 === 0;\r\n }],\r\n errorMessage: message || 'Number must be even'\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks for odd numbers\r\n * BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)\r\n */\r\n odd(message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => {\r\n // Even/odd only makes sense for integers\r\n if (!Number.isInteger(v)) {\r\n return false;\r\n }\r\n return v % 2 !== 0;\r\n }],\r\n errorMessage: message || 'Number must be odd'\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict greater than constraint\r\n * Zod 4 API parity - strictly greater than (not equal to)\r\n */\r\n gt(value: number, message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v > value],\r\n errorMessage: message || `Number must be greater than ${value}`\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict less than constraint\r\n * Zod 4 API parity - strictly less than (not equal to)\r\n */\r\n lt(value: number, message?: string): VldNumber {\r\n return new VldNumber({\r\n checks: [...this.config.checks, (v: number) => v < value],\r\n errorMessage: message || `Number must be less than ${value}`\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with greater than or equal constraint\r\n * Zod 4 API parity - alias for min()\r\n */\r\n gte(value: number, message?: string): VldNumber {\r\n return this.min(value, message);\r\n }\r\n\r\n /**\r\n * Create a new validator with less than or equal constraint\r\n * Zod 4 API parity - alias for max()\r\n */\r\n lte(value: number, message?: string): VldNumber {\r\n return this.max(value, message);\r\n }\r\n}"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
2
|
-
export declare class VldObjectOptimized<T extends Record<string, any>> extends VldBase<unknown, T> {
|
|
3
|
-
private readonly config;
|
|
4
|
-
private readonly shapeKeys;
|
|
5
|
-
private readonly shapeKeysSet;
|
|
6
|
-
private constructor();
|
|
7
|
-
static create<T extends Record<string, any>>(shape: {
|
|
8
|
-
[K in keyof T]: VldBase<unknown, T[K]>;
|
|
9
|
-
}): VldObjectOptimized<T>;
|
|
10
|
-
parse(value: unknown): T;
|
|
11
|
-
safeParse(value: unknown): ParseResult<T>;
|
|
12
|
-
strict(message?: string): VldObjectOptimized<T>;
|
|
13
|
-
passthrough(): VldObjectOptimized<T>;
|
|
14
|
-
partial(): VldObjectOptimized<{
|
|
15
|
-
[K in keyof T]?: T[K];
|
|
16
|
-
}>;
|
|
17
|
-
pick<K extends keyof T>(...keys: K[]): VldObjectOptimized<Pick<T, K>>;
|
|
18
|
-
omit<K extends keyof T>(...keys: K[]): VldObjectOptimized<Omit<T, K>>;
|
|
19
|
-
extend<U extends Record<string, any>>(extension: {
|
|
20
|
-
[K in keyof U]: VldBase<unknown, U[K]>;
|
|
21
|
-
}): VldObjectOptimized<T & U>;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=object-optimized.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-optimized.d.ts","sourceRoot":"","sources":["../../src/validators/object-optimized.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAe,MAAM,QAAQ,CAAC;AAa3D,qBAAa,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAE3C,OAAO;IAQP,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GAChD,kBAAkB,CAAC,CAAC,CAAC;IAIxB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAgExB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAgEzC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAS/C,WAAW,IAAI,kBAAkB,CAAC,CAAC,CAAC;IAQpC,OAAO,IAAI,kBAAkB,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAWxD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAarE,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAcrE,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,SAAS,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GACpD,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC;CAM7B"}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { VldBase, VldOptional } from './base.js';
|
|
2
|
-
import { getMessages } from '../locales.js';
|
|
3
|
-
export class VldObjectOptimized extends VldBase {
|
|
4
|
-
constructor(config) {
|
|
5
|
-
super();
|
|
6
|
-
this.config = config;
|
|
7
|
-
// Pre-compute shape keys for faster access
|
|
8
|
-
this.shapeKeys = Object.keys(config.shape);
|
|
9
|
-
this.shapeKeysSet = new Set(this.shapeKeys);
|
|
10
|
-
}
|
|
11
|
-
static create(shape) {
|
|
12
|
-
return new VldObjectOptimized({ shape });
|
|
13
|
-
}
|
|
14
|
-
parse(value) {
|
|
15
|
-
// Fast type check
|
|
16
|
-
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
17
|
-
throw new Error(this.config.errorMessage || getMessages().invalidObject);
|
|
18
|
-
}
|
|
19
|
-
const obj = value;
|
|
20
|
-
const result = {};
|
|
21
|
-
// Optimized field validation without try-catch for each field
|
|
22
|
-
const errors = [];
|
|
23
|
-
// Use for loop instead of Object.entries for better performance
|
|
24
|
-
for (let i = 0; i < this.shapeKeys.length; i++) {
|
|
25
|
-
const key = this.shapeKeys[i];
|
|
26
|
-
const validator = this.config.shape[key];
|
|
27
|
-
const fieldValue = obj[key];
|
|
28
|
-
// Use safeParse to avoid try-catch overhead
|
|
29
|
-
const parseResult = validator.safeParse(fieldValue);
|
|
30
|
-
if (parseResult.success) {
|
|
31
|
-
result[key] = parseResult.data;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
errors.push([key, parseResult.error.message]);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// If there were any errors, throw the first one
|
|
38
|
-
if (errors.length > 0) {
|
|
39
|
-
const [key, message] = errors[0];
|
|
40
|
-
throw new Error(getMessages().objectField(key, message));
|
|
41
|
-
}
|
|
42
|
-
// Handle strict mode - optimized with Set
|
|
43
|
-
if (this.config.strict) {
|
|
44
|
-
const objKeys = Object.keys(obj);
|
|
45
|
-
const extraKeys = [];
|
|
46
|
-
for (let i = 0; i < objKeys.length; i++) {
|
|
47
|
-
if (!this.shapeKeysSet.has(objKeys[i])) {
|
|
48
|
-
extraKeys.push(objKeys[i]);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
if (extraKeys.length > 0) {
|
|
52
|
-
throw new Error(getMessages().unexpectedKeys(extraKeys));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Handle passthrough mode - optimized
|
|
56
|
-
if (this.config.passthrough) {
|
|
57
|
-
const objKeys = Object.keys(obj);
|
|
58
|
-
for (let i = 0; i < objKeys.length; i++) {
|
|
59
|
-
const key = objKeys[i];
|
|
60
|
-
if (!this.shapeKeysSet.has(key)) {
|
|
61
|
-
result[key] = obj[key];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return result;
|
|
66
|
-
}
|
|
67
|
-
safeParse(value) {
|
|
68
|
-
// Fast type check
|
|
69
|
-
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
70
|
-
return {
|
|
71
|
-
success: false,
|
|
72
|
-
error: new Error(this.config.errorMessage || getMessages().invalidObject)
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
const obj = value;
|
|
76
|
-
const result = {};
|
|
77
|
-
// Validate all fields
|
|
78
|
-
for (let i = 0; i < this.shapeKeys.length; i++) {
|
|
79
|
-
const key = this.shapeKeys[i];
|
|
80
|
-
const validator = this.config.shape[key];
|
|
81
|
-
const fieldValue = obj[key];
|
|
82
|
-
const parseResult = validator.safeParse(fieldValue);
|
|
83
|
-
if (parseResult.success) {
|
|
84
|
-
result[key] = parseResult.data;
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
return {
|
|
88
|
-
success: false,
|
|
89
|
-
error: new Error(getMessages().objectField(key, parseResult.error.message))
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Handle strict mode
|
|
94
|
-
if (this.config.strict) {
|
|
95
|
-
const objKeys = Object.keys(obj);
|
|
96
|
-
const extraKeys = [];
|
|
97
|
-
for (let i = 0; i < objKeys.length; i++) {
|
|
98
|
-
if (!this.shapeKeysSet.has(objKeys[i])) {
|
|
99
|
-
extraKeys.push(objKeys[i]);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (extraKeys.length > 0) {
|
|
103
|
-
return {
|
|
104
|
-
success: false,
|
|
105
|
-
error: new Error(getMessages().unexpectedKeys(extraKeys))
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// Handle passthrough mode
|
|
110
|
-
if (this.config.passthrough) {
|
|
111
|
-
const objKeys = Object.keys(obj);
|
|
112
|
-
for (let i = 0; i < objKeys.length; i++) {
|
|
113
|
-
const key = objKeys[i];
|
|
114
|
-
if (!this.shapeKeysSet.has(key)) {
|
|
115
|
-
result[key] = obj[key];
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return { success: true, data: result };
|
|
120
|
-
}
|
|
121
|
-
// All the chain methods remain the same
|
|
122
|
-
strict(message) {
|
|
123
|
-
return new VldObjectOptimized({
|
|
124
|
-
...this.config,
|
|
125
|
-
strict: true,
|
|
126
|
-
passthrough: false,
|
|
127
|
-
errorMessage: message
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
passthrough() {
|
|
131
|
-
return new VldObjectOptimized({
|
|
132
|
-
...this.config,
|
|
133
|
-
strict: false,
|
|
134
|
-
passthrough: true
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
partial() {
|
|
138
|
-
const partialShape = {};
|
|
139
|
-
for (const key in this.config.shape) {
|
|
140
|
-
partialShape[key] = new VldOptional(this.config.shape[key]);
|
|
141
|
-
}
|
|
142
|
-
return new VldObjectOptimized({
|
|
143
|
-
...this.config,
|
|
144
|
-
shape: partialShape
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
pick(...keys) {
|
|
148
|
-
const pickedShape = {};
|
|
149
|
-
for (const key of keys) {
|
|
150
|
-
if (key in this.config.shape) {
|
|
151
|
-
pickedShape[key] = this.config.shape[key];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return new VldObjectOptimized({
|
|
155
|
-
...this.config,
|
|
156
|
-
shape: pickedShape
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
omit(...keys) {
|
|
160
|
-
const omittedShape = {};
|
|
161
|
-
const keysToOmit = new Set(keys);
|
|
162
|
-
for (const key in this.config.shape) {
|
|
163
|
-
if (!keysToOmit.has(key)) {
|
|
164
|
-
omittedShape[key] = this.config.shape[key];
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return new VldObjectOptimized({
|
|
168
|
-
...this.config,
|
|
169
|
-
shape: omittedShape
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
extend(extension) {
|
|
173
|
-
return new VldObjectOptimized({
|
|
174
|
-
...this.config,
|
|
175
|
-
shape: { ...this.config.shape, ...extension }
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
//# sourceMappingURL=object-optimized.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-optimized.js","sourceRoot":"","sources":["../../src/validators/object-optimized.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult, VldOptional } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Optimized object validator with better performance\n */\ninterface ObjectValidatorConfig<T extends Record<string, any>> {\n readonly shape: { readonly [K in keyof T]: VldBase<unknown, T[K]> };\n readonly strict?: boolean;\n readonly passthrough?: boolean;\n readonly errorMessage?: string;\n}\n\nexport class VldObjectOptimized<T extends Record<string, any>> extends VldBase<unknown, T> {\n private readonly config: ObjectValidatorConfig<T>;\n private readonly shapeKeys: string[];\n private readonly shapeKeysSet: Set<string>;\n \n private constructor(config: ObjectValidatorConfig<T>) {\n super();\n this.config = config;\n // Pre-compute shape keys for faster access\n this.shapeKeys = Object.keys(config.shape);\n this.shapeKeysSet = new Set(this.shapeKeys);\n }\n \n static create<T extends Record<string, any>>(\n shape: { [K in keyof T]: VldBase<unknown, T[K]> }\n ): VldObjectOptimized<T> {\n return new VldObjectOptimized({ shape });\n }\n \n parse(value: unknown): T {\n // Fast type check\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(this.config.errorMessage || getMessages().invalidObject);\n }\n \n const obj = value as Record<string, unknown>;\n const result: any = {};\n \n // Optimized field validation without try-catch for each field\n const errors: Array<[string, string]> = [];\n \n // Use for loop instead of Object.entries for better performance\n for (let i = 0; i < this.shapeKeys.length; i++) {\n const key = this.shapeKeys[i];\n const validator = this.config.shape[key];\n const fieldValue = obj[key];\n \n // Use safeParse to avoid try-catch overhead\n const parseResult = validator.safeParse(fieldValue);\n \n if (parseResult.success) {\n result[key] = parseResult.data;\n } else {\n errors.push([key, parseResult.error.message]);\n }\n }\n \n // If there were any errors, throw the first one\n if (errors.length > 0) {\n const [key, message] = errors[0];\n throw new Error(getMessages().objectField(key, message));\n }\n \n // Handle strict mode - optimized with Set\n if (this.config.strict) {\n const objKeys = Object.keys(obj);\n const extraKeys: string[] = [];\n \n for (let i = 0; i < objKeys.length; i++) {\n if (!this.shapeKeysSet.has(objKeys[i])) {\n extraKeys.push(objKeys[i]);\n }\n }\n \n if (extraKeys.length > 0) {\n throw new Error(getMessages().unexpectedKeys(extraKeys));\n }\n }\n \n // Handle passthrough mode - optimized\n if (this.config.passthrough) {\n const objKeys = Object.keys(obj);\n for (let i = 0; i < objKeys.length; i++) {\n const key = objKeys[i];\n if (!this.shapeKeysSet.has(key)) {\n result[key] = obj[key];\n }\n }\n }\n \n return result as T;\n }\n \n safeParse(value: unknown): ParseResult<T> {\n // Fast type check\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return {\n success: false,\n error: new Error(this.config.errorMessage || getMessages().invalidObject)\n };\n }\n \n const obj = value as Record<string, unknown>;\n const result: any = {};\n \n // Validate all fields\n for (let i = 0; i < this.shapeKeys.length; i++) {\n const key = this.shapeKeys[i];\n const validator = this.config.shape[key];\n const fieldValue = obj[key];\n \n const parseResult = validator.safeParse(fieldValue);\n \n if (parseResult.success) {\n result[key] = parseResult.data;\n } else {\n return {\n success: false,\n error: new Error(getMessages().objectField(key, parseResult.error.message))\n };\n }\n }\n \n // Handle strict mode\n if (this.config.strict) {\n const objKeys = Object.keys(obj);\n const extraKeys: string[] = [];\n \n for (let i = 0; i < objKeys.length; i++) {\n if (!this.shapeKeysSet.has(objKeys[i])) {\n extraKeys.push(objKeys[i]);\n }\n }\n \n if (extraKeys.length > 0) {\n return {\n success: false,\n error: new Error(getMessages().unexpectedKeys(extraKeys))\n };\n }\n }\n \n // Handle passthrough mode\n if (this.config.passthrough) {\n const objKeys = Object.keys(obj);\n for (let i = 0; i < objKeys.length; i++) {\n const key = objKeys[i];\n if (!this.shapeKeysSet.has(key)) {\n result[key] = obj[key];\n }\n }\n }\n \n return { success: true, data: result as T };\n }\n \n // All the chain methods remain the same\n strict(message?: string): VldObjectOptimized<T> {\n return new VldObjectOptimized({\n ...this.config,\n strict: true,\n passthrough: false,\n errorMessage: message\n });\n }\n \n passthrough(): VldObjectOptimized<T> {\n return new VldObjectOptimized({\n ...this.config,\n strict: false,\n passthrough: true\n });\n }\n \n partial(): VldObjectOptimized<{ [K in keyof T]?: T[K] }> {\n const partialShape: any = {};\n for (const key in this.config.shape) {\n partialShape[key] = new VldOptional(this.config.shape[key]);\n }\n return new VldObjectOptimized({ \n ...this.config, \n shape: partialShape \n }) as any;\n }\n \n pick<K extends keyof T>(...keys: K[]): VldObjectOptimized<Pick<T, K>> {\n const pickedShape: any = {};\n for (const key of keys) {\n if (key in this.config.shape) {\n pickedShape[key] = this.config.shape[key];\n }\n }\n return new VldObjectOptimized({ \n ...this.config, \n shape: pickedShape \n });\n }\n \n omit<K extends keyof T>(...keys: K[]): VldObjectOptimized<Omit<T, K>> {\n const omittedShape: any = {};\n const keysToOmit = new Set(keys);\n for (const key in this.config.shape) {\n if (!keysToOmit.has(key as any)) {\n omittedShape[key] = this.config.shape[key];\n }\n }\n return new VldObjectOptimized({ \n ...this.config, \n shape: omittedShape \n });\n }\n \n extend<U extends Record<string, any>>(\n extension: { [K in keyof U]: VldBase<unknown, U[K]> }\n ): VldObjectOptimized<T & U> {\n return new VldObjectOptimized({\n ...this.config,\n shape: { ...this.config.shape, ...extension } as any\n });\n }\n}"]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
2
|
-
/**
|
|
3
|
-
* Ultra-optimized object validator for maximum performance
|
|
4
|
-
* Features aggressive optimizations for speed over flexibility
|
|
5
|
-
*/
|
|
6
|
-
export declare class VldObjectUltra<T extends Record<string, any>> extends VldBase<unknown, T> {
|
|
7
|
-
private readonly config;
|
|
8
|
-
private readonly shapeKeys;
|
|
9
|
-
private readonly validators;
|
|
10
|
-
private readonly keysLength;
|
|
11
|
-
private readonly fastValidate;
|
|
12
|
-
private constructor();
|
|
13
|
-
/**
|
|
14
|
-
* Create ultra-fast validator using direct property access
|
|
15
|
-
*/
|
|
16
|
-
private createFastValidator;
|
|
17
|
-
static create<T extends Record<string, any>>(shape: {
|
|
18
|
-
[K in keyof T]: VldBase<unknown, T[K]>;
|
|
19
|
-
}): VldObjectUltra<T>;
|
|
20
|
-
parse(value: unknown): T;
|
|
21
|
-
safeParse(value: unknown): ParseResult<T>;
|
|
22
|
-
strict(message?: string): VldObjectUltra<T>;
|
|
23
|
-
passthrough(): VldObjectUltra<T>;
|
|
24
|
-
partial(): VldObjectUltra<{
|
|
25
|
-
[K in keyof T]?: T[K];
|
|
26
|
-
}>;
|
|
27
|
-
pick<K extends keyof T>(...keys: K[]): VldObjectUltra<Pick<T, K>>;
|
|
28
|
-
omit<K extends keyof T>(...keys: K[]): VldObjectUltra<Omit<T, K>>;
|
|
29
|
-
extend<U extends Record<string, any>>(extension: {
|
|
30
|
-
[K in keyof U]: VldBase<unknown, U[K]>;
|
|
31
|
-
}): VldObjectUltra<T & U>;
|
|
32
|
-
merge<U extends Record<string, any>>(other: VldObjectUltra<U>): VldObjectUltra<T & U>;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=object-ultra.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"object-ultra.d.ts","sourceRoot":"","sources":["../../src/validators/object-ultra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAe,MAAM,QAAQ,CAAC;AAa3D;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAGpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IAEnE,OAAO;IAWP;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkE3B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GAChD,cAAc,CAAC,CAAC,CAAC;IAIpB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IASxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAkBzC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAS3C,WAAW,IAAI,cAAc,CAAC,CAAC,CAAC;IAQhC,OAAO,IAAI,cAAc,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAWpD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAajE,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAcjE,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,SAAS,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GACpD,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;IAOxB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GACvB,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;CAMzB"}
|