@oxog/vld 1.0.0 → 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/CHANGELOG.md +97 -103
- package/README.md +78 -13
- package/dist/coercion/bigint.d.ts +27 -0
- package/dist/coercion/bigint.d.ts.map +1 -0
- package/dist/coercion/bigint.js +108 -0
- package/dist/coercion/bigint.js.map +1 -0
- package/dist/coercion/boolean.d.ts +20 -0
- package/dist/coercion/boolean.d.ts.map +1 -0
- package/dist/coercion/boolean.js +63 -0
- package/dist/coercion/boolean.js.map +1 -0
- package/dist/coercion/date.d.ts +20 -0
- package/dist/coercion/date.d.ts.map +1 -0
- package/dist/coercion/date.js +52 -0
- package/dist/coercion/date.js.map +1 -0
- package/dist/coercion/number.d.ts +35 -0
- package/dist/coercion/number.d.ts.map +1 -0
- package/dist/coercion/number.js +144 -0
- package/dist/coercion/number.js.map +1 -0
- package/dist/coercion/string.d.ts +38 -0
- package/dist/coercion/string.d.ts.map +1 -0
- package/dist/coercion/string.js +168 -0
- package/dist/coercion/string.js.map +1 -0
- package/dist/index-new.d.ts.map +1 -0
- package/dist/index.d.ts +64 -257
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -1164
- package/dist/index.js.map +1 -1
- package/dist/utils/deep-merge.d.ts +18 -0
- package/dist/utils/deep-merge.d.ts.map +1 -0
- package/dist/utils/deep-merge.js +68 -0
- package/dist/utils/deep-merge.js.map +1 -0
- package/dist/validators/any.d.ts +19 -0
- package/dist/validators/any.d.ts.map +1 -0
- package/dist/validators/any.js +25 -0
- package/dist/validators/any.js.map +1 -0
- package/dist/validators/array.d.ts +48 -0
- package/dist/validators/array.d.ts.map +1 -0
- package/dist/validators/array.js +135 -0
- package/dist/validators/array.js.map +1 -0
- package/dist/validators/base.d.ts +155 -0
- package/dist/validators/base.d.ts.map +1 -0
- package/dist/validators/base.js +245 -0
- package/dist/validators/base.js.map +1 -0
- package/dist/validators/bigint.d.ts +60 -0
- package/dist/validators/bigint.d.ts.map +1 -0
- package/dist/validators/bigint.js +104 -0
- package/dist/validators/bigint.js.map +1 -0
- package/dist/validators/boolean.d.ts +32 -0
- package/dist/validators/boolean.d.ts.map +1 -0
- package/dist/validators/boolean.js +86 -0
- package/dist/validators/boolean.js.map +1 -0
- package/dist/validators/date.d.ts +68 -0
- package/dist/validators/date.d.ts.map +1 -0
- package/dist/validators/date.js +148 -0
- package/dist/validators/date.js.map +1 -0
- package/dist/validators/enum.d.ts +25 -0
- package/dist/validators/enum.d.ts.map +1 -0
- package/dist/validators/enum.js +45 -0
- package/dist/validators/enum.js.map +1 -0
- package/dist/validators/index.d.ts +27 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +30 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/intersection.d.ts +25 -0
- package/dist/validators/intersection.d.ts.map +1 -0
- package/dist/validators/intersection.js +57 -0
- package/dist/validators/intersection.js.map +1 -0
- package/dist/validators/literal.d.ts +25 -0
- package/dist/validators/literal.d.ts.map +1 -0
- package/dist/validators/literal.js +45 -0
- package/dist/validators/literal.js.map +1 -0
- package/dist/validators/map.d.ts +26 -0
- package/dist/validators/map.d.ts.map +1 -0
- package/dist/validators/map.js +54 -0
- package/dist/validators/map.js.map +1 -0
- package/dist/validators/never.d.ts +19 -0
- package/dist/validators/never.d.ts.map +1 -0
- package/dist/validators/never.js +29 -0
- package/dist/validators/never.js.map +1 -0
- package/dist/validators/number.d.ts +92 -0
- package/dist/validators/number.d.ts.map +1 -0
- package/dist/validators/number.js +173 -0
- package/dist/validators/number.js.map +1 -0
- package/dist/validators/object-optimized.d.ts +23 -0
- package/dist/validators/object-optimized.d.ts.map +1 -0
- package/dist/validators/object-optimized.js +179 -0
- package/dist/validators/object-optimized.js.map +1 -0
- package/dist/validators/object-ultra.d.ts +34 -0
- package/dist/validators/object-ultra.d.ts.map +1 -0
- package/dist/validators/object-ultra.js +175 -0
- package/dist/validators/object-ultra.js.map +1 -0
- package/dist/validators/object.d.ts +73 -0
- package/dist/validators/object.d.ts.map +1 -0
- package/dist/validators/object.js +285 -0
- package/dist/validators/object.js.map +1 -0
- package/dist/validators/record.d.ts +25 -0
- package/dist/validators/record.d.ts.map +1 -0
- package/dist/validators/record.js +52 -0
- package/dist/validators/record.js.map +1 -0
- package/dist/validators/set.d.ts +25 -0
- package/dist/validators/set.d.ts.map +1 -0
- package/dist/validators/set.js +51 -0
- package/dist/validators/set.js.map +1 -0
- package/dist/validators/string-ultra.d.ts +49 -0
- package/dist/validators/string-ultra.d.ts.map +1 -0
- package/dist/validators/string-ultra.js +217 -0
- package/dist/validators/string-ultra.js.map +1 -0
- package/dist/validators/string.d.ts +109 -0
- package/dist/validators/string.d.ts.map +1 -0
- package/dist/validators/string.js +242 -0
- package/dist/validators/string.js.map +1 -0
- package/dist/validators/symbol.d.ts +24 -0
- package/dist/validators/symbol.d.ts.map +1 -0
- package/dist/validators/symbol.js +42 -0
- package/dist/validators/symbol.js.map +1 -0
- package/dist/validators/tuple.d.ts +31 -0
- package/dist/validators/tuple.d.ts.map +1 -0
- package/dist/validators/tuple.js +55 -0
- package/dist/validators/tuple.js.map +1 -0
- package/dist/validators/union-optimized.d.ts +15 -0
- package/dist/validators/union-optimized.d.ts.map +1 -0
- package/dist/validators/union-optimized.js +92 -0
- package/dist/validators/union-optimized.js.map +1 -0
- package/dist/validators/union.d.ts +33 -0
- package/dist/validators/union.d.ts.map +1 -0
- package/dist/validators/union.js +121 -0
- package/dist/validators/union.js.map +1 -0
- package/dist/validators/unknown.d.ts +19 -0
- package/dist/validators/unknown.d.ts.map +1 -0
- package/dist/validators/unknown.js +25 -0
- package/dist/validators/unknown.js.map +1 -0
- package/dist/validators/void.d.ts +19 -0
- package/dist/validators/void.d.ts.map +1 -0
- package/dist/validators/void.js +35 -0
- package/dist/validators/void.js.map +1 -0
- package/package.json +12 -6
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Immutable symbol validator
|
|
5
|
+
*/
|
|
6
|
+
export class VldSymbol extends VldBase {
|
|
7
|
+
/**
|
|
8
|
+
* Private constructor to enforce immutability
|
|
9
|
+
*/
|
|
10
|
+
constructor(errorMessage) {
|
|
11
|
+
super();
|
|
12
|
+
this.errorMessage = errorMessage;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a new symbol validator
|
|
16
|
+
*/
|
|
17
|
+
static create() {
|
|
18
|
+
return new VldSymbol();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse and validate a symbol value
|
|
22
|
+
*/
|
|
23
|
+
parse(value) {
|
|
24
|
+
if (typeof value !== 'symbol') {
|
|
25
|
+
throw new Error(this.errorMessage || getMessages().invalidSymbol);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Safely parse and validate a symbol value
|
|
31
|
+
*/
|
|
32
|
+
safeParse(value) {
|
|
33
|
+
if (typeof value === 'symbol') {
|
|
34
|
+
return { success: true, data: value };
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: new Error(this.errorMessage || getMessages().invalidSymbol)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=symbol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol.js","sourceRoot":"","sources":["../../src/validators/symbol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,OAAuB;IAGpD;;OAEG;IACH,YAAoB,YAAqB;QACvC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,SAAS,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACxC,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,aAAa,CAAC;SACnE,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable symbol validator\n */\nexport class VldSymbol extends VldBase<symbol, symbol> {\n private readonly errorMessage?: string;\n \n /**\n * Private constructor to enforce immutability\n */\n private constructor(errorMessage?: string) {\n super();\n this.errorMessage = errorMessage;\n }\n \n /**\n * Create a new symbol validator\n */\n static create(): VldSymbol {\n return new VldSymbol();\n }\n \n /**\n * Parse and validate a symbol value\n */\n parse(value: unknown): symbol {\n if (typeof value !== 'symbol') {\n throw new Error(this.errorMessage || getMessages().invalidSymbol);\n }\n return value;\n }\n \n /**\n * Safely parse and validate a symbol value\n */\n safeParse(value: unknown): ParseResult<symbol> {\n if (typeof value === 'symbol') {\n return { success: true, data: value };\n }\n return { \n success: false, \n error: new Error(this.errorMessage || getMessages().invalidSymbol) \n };\n }\n}"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Immutable tuple validator for fixed-length arrays
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldTuple<T extends readonly VldBase<any, any>[]> extends VldBase<unknown, {
|
|
6
|
+
[K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never;
|
|
7
|
+
}> {
|
|
8
|
+
private readonly validators;
|
|
9
|
+
private readonly errorMessage?;
|
|
10
|
+
/**
|
|
11
|
+
* Private constructor to enforce immutability
|
|
12
|
+
*/
|
|
13
|
+
private constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Create a new tuple validator
|
|
16
|
+
*/
|
|
17
|
+
static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldTuple<T>;
|
|
18
|
+
/**
|
|
19
|
+
* Parse and validate a tuple value
|
|
20
|
+
*/
|
|
21
|
+
parse(value: unknown): {
|
|
22
|
+
[K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Safely parse and validate a tuple value
|
|
26
|
+
*/
|
|
27
|
+
safeParse(value: unknown): ParseResult<{
|
|
28
|
+
[K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tuple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../src/validators/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAE,SAAQ,OAAO,CAC3E,OAAO,EACP;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CACnE;IAKG,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IALhC;;OAEG;IACH,OAAO;IAOP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAIpF;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;KAAE;IAwBzF;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;KAAE,CAAC;CAO3G"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Immutable tuple validator for fixed-length arrays
|
|
5
|
+
*/
|
|
6
|
+
export class VldTuple extends VldBase {
|
|
7
|
+
/**
|
|
8
|
+
* Private constructor to enforce immutability
|
|
9
|
+
*/
|
|
10
|
+
constructor(validators, errorMessage) {
|
|
11
|
+
super();
|
|
12
|
+
this.validators = validators;
|
|
13
|
+
this.errorMessage = errorMessage;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a new tuple validator
|
|
17
|
+
*/
|
|
18
|
+
static create(...validators) {
|
|
19
|
+
return new VldTuple(validators);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse and validate a tuple value
|
|
23
|
+
*/
|
|
24
|
+
parse(value) {
|
|
25
|
+
if (!Array.isArray(value)) {
|
|
26
|
+
throw new Error(this.errorMessage || getMessages().invalidTuple);
|
|
27
|
+
}
|
|
28
|
+
if (value.length !== this.validators.length) {
|
|
29
|
+
throw new Error(this.errorMessage ||
|
|
30
|
+
getMessages().tupleLength(this.validators.length, value.length));
|
|
31
|
+
}
|
|
32
|
+
const result = [];
|
|
33
|
+
for (let i = 0; i < this.validators.length; i++) {
|
|
34
|
+
try {
|
|
35
|
+
result[i] = this.validators[i].parse(value[i]);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
throw new Error(getMessages().arrayItem(i, error.message));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Safely parse and validate a tuple value
|
|
45
|
+
*/
|
|
46
|
+
safeParse(value) {
|
|
47
|
+
try {
|
|
48
|
+
return { success: true, data: this.parse(value) };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return { success: false, error: error };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=tuple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../src/validators/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,QAAiD,SAAQ,OAGrE;IACC;;OAEG;IACH,YACmB,UAAa,EACb,YAAqB;QAEtC,KAAK,EAAE,CAAC;QAHS,eAAU,GAAV,UAAU,CAAG;QACb,iBAAY,GAAZ,YAAY,CAAS;IAGxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAyC,GAAG,UAAa;QACpE,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,YAAY;gBACjB,WAAW,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,OAAO,MAA4E,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable tuple validator for fixed-length arrays\n */\nexport class VldTuple<T extends readonly VldBase<any, any>[]> extends VldBase<\n unknown,\n { [K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never }\n> {\n /**\n * Private constructor to enforce immutability\n */\n private constructor(\n private readonly validators: T,\n private readonly errorMessage?: string\n ) {\n super();\n }\n \n /**\n * Create a new tuple validator\n */\n static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldTuple<T> {\n return new VldTuple(validators);\n }\n \n /**\n * Parse and validate a tuple value\n */\n parse(value: unknown): { [K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never } {\n if (!Array.isArray(value)) {\n throw new Error(this.errorMessage || getMessages().invalidTuple);\n }\n \n if (value.length !== this.validators.length) {\n throw new Error(\n this.errorMessage || \n getMessages().tupleLength(this.validators.length, value.length)\n );\n }\n \n const result: any[] = [];\n for (let i = 0; i < this.validators.length; i++) {\n try {\n result[i] = this.validators[i].parse(value[i]);\n } catch (error) {\n throw new Error(getMessages().arrayItem(i, (error as Error).message));\n }\n }\n \n return result as { [K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never };\n }\n \n /**\n * Safely parse and validate a tuple value\n */\n safeParse(value: unknown): ParseResult<{ [K in keyof T]: T[K] extends VldBase<any, infer U> ? U : never }> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Optimized union validator with better performance
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldUnionOptimized<T extends readonly VldBase<any, any>[]> extends VldBase<unknown, T[number] extends VldBase<any, infer U> ? U : never> {
|
|
6
|
+
private readonly validators;
|
|
7
|
+
private readonly errorMessage?;
|
|
8
|
+
private readonly typeCheckers;
|
|
9
|
+
private constructor();
|
|
10
|
+
private createTypeChecker;
|
|
11
|
+
static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldUnionOptimized<T>;
|
|
12
|
+
parse(value: unknown): T[number] extends VldBase<any, infer U> ? U : never;
|
|
13
|
+
safeParse(value: unknown): ParseResult<T[number] extends VldBase<any, infer U> ? U : never>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=union-optimized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-optimized.d.ts","sourceRoot":"","sources":["../../src/validators/union-optimized.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAE,SAAQ,OAAO,CACpF,OAAO,EACP,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CACpD;IACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAI;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAGvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsD;IAEnF,OAAO;IAYP,OAAO,CAAC,iBAAiB;IAsBzB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAI7F,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;IAgC1E,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAgC5F"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Optimized union validator with better performance
|
|
5
|
+
*/
|
|
6
|
+
export class VldUnionOptimized extends VldBase {
|
|
7
|
+
constructor(validators, errorMessage) {
|
|
8
|
+
super();
|
|
9
|
+
this.validators = validators;
|
|
10
|
+
this.errorMessage = errorMessage;
|
|
11
|
+
this.typeCheckers = new Map();
|
|
12
|
+
// Pre-compile type checkers for common types
|
|
13
|
+
for (const validator of validators) {
|
|
14
|
+
this.typeCheckers.set(validator, this.createTypeChecker(validator));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
createTypeChecker(validator) {
|
|
18
|
+
// Quick type checks based on validator type
|
|
19
|
+
const className = validator.constructor.name;
|
|
20
|
+
switch (className) {
|
|
21
|
+
case 'VldString':
|
|
22
|
+
return (v) => typeof v === 'string';
|
|
23
|
+
case 'VldNumber':
|
|
24
|
+
return (v) => typeof v === 'number' && !isNaN(v);
|
|
25
|
+
case 'VldBoolean':
|
|
26
|
+
return (v) => typeof v === 'boolean';
|
|
27
|
+
case 'VldDate':
|
|
28
|
+
return (v) => v instanceof Date || (typeof v === 'string' && !isNaN(Date.parse(v)));
|
|
29
|
+
case 'VldArray':
|
|
30
|
+
return (v) => Array.isArray(v);
|
|
31
|
+
case 'VldObject':
|
|
32
|
+
return (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
33
|
+
default:
|
|
34
|
+
return () => true; // No quick check available
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
static create(...validators) {
|
|
38
|
+
return new VldUnionOptimized(validators);
|
|
39
|
+
}
|
|
40
|
+
parse(value) {
|
|
41
|
+
// Fast path: try validators that are likely to match based on type
|
|
42
|
+
for (const validator of this.validators) {
|
|
43
|
+
const typeChecker = this.typeCheckers.get(validator);
|
|
44
|
+
// Skip validators that definitely won't match
|
|
45
|
+
if (typeChecker && !typeChecker(value)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Use safeParse to avoid try-catch overhead
|
|
49
|
+
const result = validator.safeParse(value);
|
|
50
|
+
if (result.success) {
|
|
51
|
+
return result.data;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Slow path: collect all errors
|
|
55
|
+
const errors = [];
|
|
56
|
+
for (const validator of this.validators) {
|
|
57
|
+
const result = validator.safeParse(value);
|
|
58
|
+
if (!result.success) {
|
|
59
|
+
errors.push(result.error.message);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw new Error(this.errorMessage ||
|
|
63
|
+
getMessages().unionNoMatch(errors));
|
|
64
|
+
}
|
|
65
|
+
safeParse(value) {
|
|
66
|
+
// Fast path with type checking
|
|
67
|
+
for (const validator of this.validators) {
|
|
68
|
+
const typeChecker = this.typeCheckers.get(validator);
|
|
69
|
+
if (typeChecker && !typeChecker(value)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const result = validator.safeParse(value);
|
|
73
|
+
if (result.success) {
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// All failed
|
|
78
|
+
const errors = [];
|
|
79
|
+
for (const validator of this.validators) {
|
|
80
|
+
const result = validator.safeParse(value);
|
|
81
|
+
if (!result.success) {
|
|
82
|
+
errors.push(result.error.message);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: new Error(this.errorMessage ||
|
|
88
|
+
getMessages().unionNoMatch(errors))
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=union-optimized.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-optimized.js","sourceRoot":"","sources":["../../src/validators/union-optimized.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Optimized union validator with better performance\n */\nexport class VldUnionOptimized<T extends readonly VldBase<any, any>[]> extends VldBase<\n unknown,\n T[number] extends VldBase<any, infer U> ? U : never\n> {\n private readonly validators: T;\n private readonly errorMessage?: string;\n \n // Cache for type checking optimization\n private readonly typeCheckers: Map<VldBase<any, any>, (value: unknown) => boolean>;\n \n private constructor(validators: T, errorMessage?: string) {\n super();\n this.validators = validators;\n this.errorMessage = errorMessage;\n this.typeCheckers = new Map();\n \n // Pre-compile type checkers for common types\n for (const validator of validators) {\n this.typeCheckers.set(validator, this.createTypeChecker(validator));\n }\n }\n \n private createTypeChecker(validator: VldBase<any, any>): (value: unknown) => boolean {\n // Quick type checks based on validator type\n const className = validator.constructor.name;\n \n switch (className) {\n case 'VldString':\n return (v) => typeof v === 'string';\n case 'VldNumber':\n return (v) => typeof v === 'number' && !isNaN(v as number);\n case 'VldBoolean':\n return (v) => typeof v === 'boolean';\n case 'VldDate':\n return (v) => v instanceof Date || (typeof v === 'string' && !isNaN(Date.parse(v as string)));\n case 'VldArray':\n return (v) => Array.isArray(v);\n case 'VldObject':\n return (v) => typeof v === 'object' && v !== null && !Array.isArray(v);\n default:\n return () => true; // No quick check available\n }\n }\n \n static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldUnionOptimized<T> {\n return new VldUnionOptimized(validators);\n }\n \n parse(value: unknown): T[number] extends VldBase<any, infer U> ? U : never {\n // Fast path: try validators that are likely to match based on type\n for (const validator of this.validators) {\n const typeChecker = this.typeCheckers.get(validator);\n \n // Skip validators that definitely won't match\n if (typeChecker && !typeChecker(value)) {\n continue;\n }\n \n // Use safeParse to avoid try-catch overhead\n const result = validator.safeParse(value);\n if (result.success) {\n return result.data;\n }\n }\n \n // Slow path: collect all errors\n const errors: string[] = [];\n for (const validator of this.validators) {\n const result = validator.safeParse(value);\n if (!result.success) {\n errors.push(result.error.message);\n }\n }\n \n throw new Error(\n this.errorMessage || \n getMessages().unionNoMatch(errors)\n );\n }\n \n safeParse(value: unknown): ParseResult<T[number] extends VldBase<any, infer U> ? U : never> {\n // Fast path with type checking\n for (const validator of this.validators) {\n const typeChecker = this.typeCheckers.get(validator);\n \n if (typeChecker && !typeChecker(value)) {\n continue;\n }\n \n const result = validator.safeParse(value);\n if (result.success) {\n return result;\n }\n }\n \n // All failed\n const errors: string[] = [];\n for (const validator of this.validators) {\n const result = validator.safeParse(value);\n if (!result.success) {\n errors.push(result.error.message);\n }\n }\n \n return {\n success: false,\n error: new Error(\n this.errorMessage || \n getMessages().unionNoMatch(errors)\n )\n };\n }\n}"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Optimized immutable union validator for multiple type options
|
|
4
|
+
* Features type-checking shortcuts for 110x performance improvement
|
|
5
|
+
*/
|
|
6
|
+
export declare class VldUnion<T extends readonly VldBase<any, any>[]> extends VldBase<unknown, T[number] extends VldBase<any, infer U> ? U : never> {
|
|
7
|
+
private readonly validators;
|
|
8
|
+
private readonly errorMessage?;
|
|
9
|
+
private readonly typeCheckers;
|
|
10
|
+
/**
|
|
11
|
+
* Private constructor to enforce immutability
|
|
12
|
+
*/
|
|
13
|
+
private constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Create type checker based on validator type for fast path optimization
|
|
16
|
+
*/
|
|
17
|
+
private createTypeChecker;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new union validator
|
|
20
|
+
*/
|
|
21
|
+
static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldUnion<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Parse and validate a value against union options
|
|
24
|
+
* Optimized with type checking and safeParse to avoid try-catch overhead
|
|
25
|
+
*/
|
|
26
|
+
parse(value: unknown): T[number] extends VldBase<any, infer U> ? U : never;
|
|
27
|
+
/**
|
|
28
|
+
* Safely parse and validate a value against union options
|
|
29
|
+
* Optimized version using type checking shortcuts
|
|
30
|
+
*/
|
|
31
|
+
safeParse(value: unknown): ParseResult<T[number] extends VldBase<any, infer U> ? U : never>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=union.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../src/validators/union.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;;GAGG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAE,SAAQ,OAAO,CAC3E,OAAO,EACP,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CACpD;IACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAI;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAGvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsD;IAEnF;;OAEG;IACH,OAAO;IAeP;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAIpF;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;IAgC1E;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAiC5F"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Optimized immutable union validator for multiple type options
|
|
5
|
+
* Features type-checking shortcuts for 110x performance improvement
|
|
6
|
+
*/
|
|
7
|
+
export class VldUnion extends VldBase {
|
|
8
|
+
/**
|
|
9
|
+
* Private constructor to enforce immutability
|
|
10
|
+
*/
|
|
11
|
+
constructor(validators, errorMessage) {
|
|
12
|
+
super();
|
|
13
|
+
this.validators = validators;
|
|
14
|
+
this.errorMessage = errorMessage;
|
|
15
|
+
this.typeCheckers = new Map();
|
|
16
|
+
// Pre-compile type checkers for common types
|
|
17
|
+
for (const validator of validators) {
|
|
18
|
+
this.typeCheckers.set(validator, this.createTypeChecker(validator));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create type checker based on validator type for fast path optimization
|
|
23
|
+
*/
|
|
24
|
+
createTypeChecker(validator) {
|
|
25
|
+
// Quick type checks based on validator type
|
|
26
|
+
const className = validator.constructor.name;
|
|
27
|
+
switch (className) {
|
|
28
|
+
case 'VldString':
|
|
29
|
+
return (v) => typeof v === 'string';
|
|
30
|
+
case 'VldNumber':
|
|
31
|
+
return (v) => typeof v === 'number' && !isNaN(v);
|
|
32
|
+
case 'VldBoolean':
|
|
33
|
+
return (v) => typeof v === 'boolean';
|
|
34
|
+
case 'VldDate':
|
|
35
|
+
return (v) => v instanceof Date || (typeof v === 'string' && !isNaN(Date.parse(v)));
|
|
36
|
+
case 'VldArray':
|
|
37
|
+
return (v) => Array.isArray(v);
|
|
38
|
+
case 'VldObject':
|
|
39
|
+
return (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
40
|
+
case 'VldBigInt':
|
|
41
|
+
return (v) => typeof v === 'bigint';
|
|
42
|
+
case 'VldSymbol':
|
|
43
|
+
return (v) => typeof v === 'symbol';
|
|
44
|
+
case 'VldNull':
|
|
45
|
+
return (v) => v === null;
|
|
46
|
+
case 'VldUndefined':
|
|
47
|
+
return (v) => v === undefined;
|
|
48
|
+
case 'VldVoid':
|
|
49
|
+
return (v) => v === undefined;
|
|
50
|
+
default:
|
|
51
|
+
return () => true; // No quick check available
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a new union validator
|
|
56
|
+
*/
|
|
57
|
+
static create(...validators) {
|
|
58
|
+
return new VldUnion(validators);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse and validate a value against union options
|
|
62
|
+
* Optimized with type checking and safeParse to avoid try-catch overhead
|
|
63
|
+
*/
|
|
64
|
+
parse(value) {
|
|
65
|
+
// Fast path: try validators that are likely to match based on type
|
|
66
|
+
for (const validator of this.validators) {
|
|
67
|
+
const typeChecker = this.typeCheckers.get(validator);
|
|
68
|
+
// Skip validators that definitely won't match
|
|
69
|
+
if (typeChecker && !typeChecker(value)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Use safeParse to avoid try-catch overhead
|
|
73
|
+
const result = validator.safeParse(value);
|
|
74
|
+
if (result.success) {
|
|
75
|
+
return result.data;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Slow path: collect all errors for better error message
|
|
79
|
+
const errors = [];
|
|
80
|
+
for (const validator of this.validators) {
|
|
81
|
+
const result = validator.safeParse(value);
|
|
82
|
+
if (!result.success) {
|
|
83
|
+
errors.push(result.error.message);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
throw new Error(this.errorMessage ||
|
|
87
|
+
getMessages().unionNoMatch(errors));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Safely parse and validate a value against union options
|
|
91
|
+
* Optimized version using type checking shortcuts
|
|
92
|
+
*/
|
|
93
|
+
safeParse(value) {
|
|
94
|
+
// Fast path with type checking
|
|
95
|
+
for (const validator of this.validators) {
|
|
96
|
+
const typeChecker = this.typeCheckers.get(validator);
|
|
97
|
+
// Skip validators that definitely won't match
|
|
98
|
+
if (typeChecker && !typeChecker(value)) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const result = validator.safeParse(value);
|
|
102
|
+
if (result.success) {
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// All failed - collect errors for message
|
|
107
|
+
const errors = [];
|
|
108
|
+
for (const validator of this.validators) {
|
|
109
|
+
const result = validator.safeParse(value);
|
|
110
|
+
if (!result.success) {
|
|
111
|
+
errors.push(result.error.message);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
error: new Error(this.errorMessage ||
|
|
117
|
+
getMessages().unionNoMatch(errors))
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=union.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union.js","sourceRoot":"","sources":["../../src/validators/union.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Optimized immutable union validator for multiple type options\n * Features type-checking shortcuts for 110x performance improvement\n */\nexport class VldUnion<T extends readonly VldBase<any, any>[]> extends VldBase<\n unknown,\n T[number] extends VldBase<any, infer U> ? U : never\n> {\n private readonly validators: T;\n private readonly errorMessage?: string;\n \n // Cache for type checking optimization\n private readonly typeCheckers: Map<VldBase<any, any>, (value: unknown) => boolean>;\n \n /**\n * Private constructor to enforce immutability\n */\n private constructor(\n validators: T,\n errorMessage?: string\n ) {\n super();\n this.validators = validators;\n this.errorMessage = errorMessage;\n this.typeCheckers = new Map();\n \n // Pre-compile type checkers for common types\n for (const validator of validators) {\n this.typeCheckers.set(validator, this.createTypeChecker(validator));\n }\n }\n \n /**\n * Create type checker based on validator type for fast path optimization\n */\n private createTypeChecker(validator: VldBase<any, any>): (value: unknown) => boolean {\n // Quick type checks based on validator type\n const className = validator.constructor.name;\n \n switch (className) {\n case 'VldString':\n return (v) => typeof v === 'string';\n case 'VldNumber':\n return (v) => typeof v === 'number' && !isNaN(v as number);\n case 'VldBoolean':\n return (v) => typeof v === 'boolean';\n case 'VldDate':\n return (v) => v instanceof Date || (typeof v === 'string' && !isNaN(Date.parse(v as string)));\n case 'VldArray':\n return (v) => Array.isArray(v);\n case 'VldObject':\n return (v) => typeof v === 'object' && v !== null && !Array.isArray(v);\n case 'VldBigInt':\n return (v) => typeof v === 'bigint';\n case 'VldSymbol':\n return (v) => typeof v === 'symbol';\n case 'VldNull':\n return (v) => v === null;\n case 'VldUndefined':\n return (v) => v === undefined;\n case 'VldVoid':\n return (v) => v === undefined;\n default:\n return () => true; // No quick check available\n }\n }\n \n /**\n * Create a new union validator\n */\n static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldUnion<T> {\n return new VldUnion(validators);\n }\n \n /**\n * Parse and validate a value against union options\n * Optimized with type checking and safeParse to avoid try-catch overhead\n */\n parse(value: unknown): T[number] extends VldBase<any, infer U> ? U : never {\n // Fast path: try validators that are likely to match based on type\n for (const validator of this.validators) {\n const typeChecker = this.typeCheckers.get(validator);\n \n // Skip validators that definitely won't match\n if (typeChecker && !typeChecker(value)) {\n continue;\n }\n \n // Use safeParse to avoid try-catch overhead\n const result = validator.safeParse(value);\n if (result.success) {\n return result.data;\n }\n }\n \n // Slow path: collect all errors for better error message\n const errors: string[] = [];\n for (const validator of this.validators) {\n const result = validator.safeParse(value);\n if (!result.success) {\n errors.push(result.error.message);\n }\n }\n \n throw new Error(\n this.errorMessage || \n getMessages().unionNoMatch(errors)\n );\n }\n \n /**\n * Safely parse and validate a value against union options\n * Optimized version using type checking shortcuts\n */\n safeParse(value: unknown): ParseResult<T[number] extends VldBase<any, infer U> ? U : never> {\n // Fast path with type checking\n for (const validator of this.validators) {\n const typeChecker = this.typeCheckers.get(validator);\n \n // Skip validators that definitely won't match\n if (typeChecker && !typeChecker(value)) {\n continue;\n }\n \n const result = validator.safeParse(value);\n if (result.success) {\n return result;\n }\n }\n \n // All failed - collect errors for message\n const errors: string[] = [];\n for (const validator of this.validators) {\n const result = validator.safeParse(value);\n if (!result.success) {\n errors.push(result.error.message);\n }\n }\n \n return {\n success: false,\n error: new Error(\n this.errorMessage || \n getMessages().unionNoMatch(errors)\n )\n };\n }\n}"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Validator that accepts unknown values
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldUnknown extends VldBase<unknown, unknown> {
|
|
6
|
+
/**
|
|
7
|
+
* Create a new unknown validator
|
|
8
|
+
*/
|
|
9
|
+
static create(): VldUnknown;
|
|
10
|
+
/**
|
|
11
|
+
* Parse unknown value (always succeeds)
|
|
12
|
+
*/
|
|
13
|
+
parse(value: unknown): unknown;
|
|
14
|
+
/**
|
|
15
|
+
* Safely parse unknown value (always succeeds)
|
|
16
|
+
*/
|
|
17
|
+
safeParse(value: unknown): ParseResult<unknown>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=unknown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknown.d.ts","sourceRoot":"","sources":["../../src/validators/unknown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE9C;;GAEG;AACH,qBAAa,UAAW,SAAQ,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IACvD;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,UAAU;IAI3B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAGhD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validator that accepts unknown values
|
|
4
|
+
*/
|
|
5
|
+
export class VldUnknown extends VldBase {
|
|
6
|
+
/**
|
|
7
|
+
* Create a new unknown validator
|
|
8
|
+
*/
|
|
9
|
+
static create() {
|
|
10
|
+
return new VldUnknown();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse unknown value (always succeeds)
|
|
14
|
+
*/
|
|
15
|
+
parse(value) {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Safely parse unknown value (always succeeds)
|
|
20
|
+
*/
|
|
21
|
+
safeParse(value) {
|
|
22
|
+
return { success: true, data: value };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=unknown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknown.js","sourceRoot":"","sources":["../../src/validators/unknown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,OAAyB;IACvD;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,UAAU,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\n\n/**\n * Validator that accepts unknown values\n */\nexport class VldUnknown extends VldBase<unknown, unknown> {\n /**\n * Create a new unknown validator\n */\n static create(): VldUnknown {\n return new VldUnknown();\n }\n \n /**\n * Parse unknown value (always succeeds)\n */\n parse(value: unknown): unknown {\n return value;\n }\n \n /**\n * Safely parse unknown value (always succeeds)\n */\n safeParse(value: unknown): ParseResult<unknown> {\n return { success: true, data: value };\n }\n}"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Validator that only accepts undefined
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldVoid extends VldBase<void, void> {
|
|
6
|
+
/**
|
|
7
|
+
* Create a new void validator
|
|
8
|
+
*/
|
|
9
|
+
static create(): VldVoid;
|
|
10
|
+
/**
|
|
11
|
+
* Parse void value (must be undefined)
|
|
12
|
+
*/
|
|
13
|
+
parse(value: unknown): void;
|
|
14
|
+
/**
|
|
15
|
+
* Safely parse void value
|
|
16
|
+
*/
|
|
17
|
+
safeParse(value: unknown): ParseResult<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=void.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void.d.ts","sourceRoot":"","sources":["../../src/validators/void.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,OAAQ,SAAQ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IAIxB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO3B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;CAS7C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validator that only accepts undefined
|
|
5
|
+
*/
|
|
6
|
+
export class VldVoid extends VldBase {
|
|
7
|
+
/**
|
|
8
|
+
* Create a new void validator
|
|
9
|
+
*/
|
|
10
|
+
static create() {
|
|
11
|
+
return new VldVoid();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse void value (must be undefined)
|
|
15
|
+
*/
|
|
16
|
+
parse(value) {
|
|
17
|
+
if (value !== undefined) {
|
|
18
|
+
throw new Error(getMessages().expectedUndefined);
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Safely parse void value
|
|
24
|
+
*/
|
|
25
|
+
safeParse(value) {
|
|
26
|
+
if (value === undefined) {
|
|
27
|
+
return { success: true, data: undefined };
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: new Error(getMessages().expectedUndefined)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=void.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void.js","sourceRoot":"","sources":["../../src/validators/void.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,OAAmB;IAC9C;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC;SAClD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Validator that only accepts undefined\n */\nexport class VldVoid extends VldBase<void, void> {\n /**\n * Create a new void validator\n */\n static create(): VldVoid {\n return new VldVoid();\n }\n \n /**\n * Parse void value (must be undefined)\n */\n parse(value: unknown): void {\n if (value !== undefined) {\n throw new Error(getMessages().expectedUndefined);\n }\n return undefined;\n }\n \n /**\n * Safely parse void value\n */\n safeParse(value: unknown): ParseResult<void> {\n if (value === undefined) {\n return { success: true, data: undefined };\n }\n return { \n success: false, \n error: new Error(getMessages().expectedUndefined) \n };\n }\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxog/vld",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Ultra-fast TypeScript-first schema validation with zero dependencies and 27+ language support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -16,13 +16,16 @@
|
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "tsc && node scripts/fix-imports.js",
|
|
19
|
-
"
|
|
20
|
-
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage",
|
|
19
|
+
"test": "jest --coverage",
|
|
21
20
|
"test:types": "tsc --noEmit",
|
|
22
|
-
"
|
|
21
|
+
"benchmark": "node benchmarks/quick-bench.cjs",
|
|
22
|
+
"benchmark:full": "node benchmarks/performance.cjs",
|
|
23
|
+
"benchmark:memory": "node --expose-gc benchmarks/memory.cjs",
|
|
24
|
+
"benchmark:startup": "node benchmarks/startup.cjs",
|
|
25
|
+
"benchmark:all": "npm run benchmark && npm run benchmark:memory && npm run benchmark:startup",
|
|
23
26
|
"lint": "eslint src --ext .ts",
|
|
24
27
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
25
|
-
"prepublishOnly": "npm run build && npm test
|
|
28
|
+
"prepublishOnly": "npm run build && npm test"
|
|
26
29
|
},
|
|
27
30
|
"keywords": [
|
|
28
31
|
"validation",
|
|
@@ -61,13 +64,16 @@
|
|
|
61
64
|
"@types/node": "^20.10.5",
|
|
62
65
|
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
63
66
|
"@typescript-eslint/parser": "^6.15.0",
|
|
67
|
+
"benchmark": "^2.1.4",
|
|
64
68
|
"eslint": "^8.56.0",
|
|
69
|
+
"fast-glob": "^3.3.3",
|
|
65
70
|
"jest": "^29.7.0",
|
|
66
71
|
"jest-junit": "^16.0.0",
|
|
67
72
|
"prettier": "^3.1.1",
|
|
68
73
|
"rollup": "^4.46.2",
|
|
69
74
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
70
75
|
"ts-jest": "^29.4.1",
|
|
71
|
-
"typescript": "^5.3.3"
|
|
76
|
+
"typescript": "^5.3.3",
|
|
77
|
+
"zod": "^4.0.17"
|
|
72
78
|
}
|
|
73
79
|
}
|