@oxog/vld 1.3.1 → 1.5.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 +333 -284
- package/README.md +13 -12
- package/dist/cli/benchmark.d.ts +15 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +248 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +35 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +204 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +157 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/generate.d.ts +14 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +233 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +59 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/validate.d.ts +15 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +162 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/codecs/index.d.ts.map +1 -1
- package/dist/codecs/index.js +29 -10
- package/dist/codecs/index.js.map +1 -1
- package/dist/coercion/bigint.js +1 -1
- package/dist/coercion/boolean.d.ts.map +1 -1
- package/dist/coercion/boolean.js +24 -32
- package/dist/coercion/boolean.js.map +1 -1
- package/dist/coercion/date.js +2 -2
- package/dist/coercion/date.js.map +1 -1
- package/dist/coercion/number.d.ts.map +1 -1
- package/dist/coercion/number.js +20 -4
- package/dist/coercion/number.js.map +1 -1
- package/dist/coercion/string.d.ts.map +1 -1
- package/dist/coercion/string.js +9 -73
- package/dist/coercion/string.js.map +1 -1
- package/dist/compat/emitter.d.ts +73 -0
- package/dist/compat/emitter.d.ts.map +1 -0
- package/dist/compat/emitter.js +179 -0
- package/dist/compat/emitter.js.map +1 -0
- package/dist/compat/index.d.ts +15 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +14 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/result.d.ts +128 -0
- package/dist/compat/result.d.ts.map +1 -0
- package/dist/compat/result.js +169 -0
- package/dist/compat/result.js.map +1 -0
- package/dist/errors.d.ts +58 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +97 -9
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +140 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +8 -0
- package/dist/events.js.map +1 -0
- package/dist/guards.d.ts +143 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +238 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.d.ts +606 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +105 -6
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +29 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +402 -0
- package/dist/kernel.js.map +1 -0
- package/dist/locales/af.d.ts.map +1 -1
- package/dist/locales/af.js +18 -1
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.d.ts.map +1 -1
- package/dist/locales/ar.js +18 -1
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/backup-en.d.ts +3 -0
- package/dist/locales/backup-en.d.ts.map +1 -0
- package/dist/locales/backup-en.js +105 -0
- package/dist/locales/backup-en.js.map +1 -0
- package/dist/locales/bn.d.ts.map +1 -1
- package/dist/locales/bn.js +18 -1
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.d.ts.map +1 -1
- package/dist/locales/da.js +18 -1
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.d.ts.map +1 -1
- package/dist/locales/de.js +18 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/en.js +18 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.d.ts.map +1 -1
- package/dist/locales/es-MX.js +17 -1
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.d.ts.map +1 -1
- package/dist/locales/es.js +18 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.d.ts.map +1 -1
- package/dist/locales/fi.js +18 -1
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.d.ts.map +1 -1
- package/dist/locales/fr.js +18 -1
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.d.ts.map +1 -1
- package/dist/locales/hi.js +18 -1
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.d.ts.map +1 -1
- package/dist/locales/id.js +18 -1
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/it.d.ts.map +1 -1
- package/dist/locales/it.js +18 -1
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.d.ts.map +1 -1
- package/dist/locales/ja.js +18 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.d.ts.map +1 -1
- package/dist/locales/ko.js +18 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/nl.d.ts.map +1 -1
- package/dist/locales/nl.js +18 -1
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.d.ts.map +1 -1
- package/dist/locales/no.js +18 -1
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.d.ts.map +1 -1
- package/dist/locales/pl.js +18 -1
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/locales/pt-BR.js +18 -1
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.d.ts.map +1 -1
- package/dist/locales/pt.js +18 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.d.ts.map +1 -1
- package/dist/locales/ru.js +18 -1
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.d.ts.map +1 -1
- package/dist/locales/sv.js +18 -1
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.d.ts.map +1 -1
- package/dist/locales/sw.js +18 -1
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.d.ts.map +1 -1
- package/dist/locales/th.js +18 -1
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.d.ts.map +1 -1
- package/dist/locales/tr.js +18 -1
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/types.d.ts +13 -0
- package/dist/locales/types.d.ts.map +1 -1
- package/dist/locales/types.js.map +1 -1
- package/dist/locales/vi.d.ts.map +1 -1
- package/dist/locales/vi.js +18 -1
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.d.ts.map +1 -1
- package/dist/locales/zh.js +18 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/logger.d.ts +94 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +184 -0
- package/dist/logger.js.map +1 -0
- package/dist/pigment.d.ts +124 -0
- package/dist/pigment.d.ts.map +1 -0
- package/dist/pigment.js +177 -0
- package/dist/pigment.js.map +1 -0
- package/dist/plugins/codecs.d.ts +17 -0
- package/dist/plugins/codecs.d.ts.map +1 -0
- package/dist/plugins/codecs.js +29 -0
- package/dist/plugins/codecs.js.map +1 -0
- package/dist/plugins/coercion.d.ts +13 -0
- package/dist/plugins/coercion.d.ts.map +1 -0
- package/dist/plugins/coercion.js +34 -0
- package/dist/plugins/coercion.js.map +1 -0
- package/dist/plugins/core-validators.d.ts +13 -0
- package/dist/plugins/core-validators.d.ts.map +1 -0
- package/dist/plugins/core-validators.js +96 -0
- package/dist/plugins/core-validators.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +8 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/kernel.d.ts +29 -0
- package/dist/plugins/kernel.d.ts.map +1 -0
- package/dist/plugins/kernel.js +486 -0
- package/dist/plugins/kernel.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/style.d.ts +123 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +369 -0
- package/dist/style.js.map +1 -0
- package/dist/utils/codec-utils.d.ts +2 -0
- package/dist/utils/codec-utils.d.ts.map +1 -1
- package/dist/utils/codec-utils.js +28 -4
- package/dist/utils/codec-utils.js.map +1 -1
- package/dist/utils/deep-merge.d.ts +2 -0
- package/dist/utils/deep-merge.d.ts.map +1 -1
- package/dist/utils/deep-merge.js +22 -39
- package/dist/utils/deep-merge.js.map +1 -1
- package/dist/utils/ip-validation.d.ts +11 -0
- package/dist/utils/ip-validation.d.ts.map +1 -0
- package/dist/utils/ip-validation.js +98 -0
- package/dist/utils/ip-validation.js.map +1 -0
- package/dist/utils/security.d.ts +12 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +61 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/validators/array.d.ts +3 -1
- package/dist/validators/array.d.ts.map +1 -1
- package/dist/validators/array.js +41 -15
- package/dist/validators/array.js.map +1 -1
- package/dist/validators/base.d.ts +134 -0
- package/dist/validators/base.d.ts.map +1 -1
- package/dist/validators/base.js +255 -1
- package/dist/validators/base.js.map +1 -1
- package/dist/validators/base64.js +1 -1
- package/dist/validators/bigint.d.ts +20 -0
- package/dist/validators/bigint.d.ts.map +1 -1
- package/dist/validators/bigint.js +39 -1
- package/dist/validators/bigint.js.map +1 -1
- package/dist/validators/boolean.js +29 -1
- package/dist/validators/boolean.js.map +1 -1
- package/dist/validators/codec.js +1 -1
- package/dist/validators/custom.d.ts +47 -0
- package/dist/validators/custom.d.ts.map +1 -0
- package/dist/validators/custom.js +50 -0
- package/dist/validators/custom.js.map +1 -0
- package/dist/validators/date.d.ts +16 -0
- package/dist/validators/date.d.ts.map +1 -1
- package/dist/validators/date.js +62 -7
- package/dist/validators/date.js.map +1 -1
- package/dist/validators/discriminated-union.d.ts +29 -0
- package/dist/validators/discriminated-union.d.ts.map +1 -0
- package/dist/validators/discriminated-union.js +98 -0
- package/dist/validators/discriminated-union.js.map +1 -0
- package/dist/validators/enum.d.ts +10 -0
- package/dist/validators/enum.d.ts.map +1 -1
- package/dist/validators/enum.js +38 -1
- package/dist/validators/enum.js.map +1 -1
- package/dist/validators/file.d.ts +57 -0
- package/dist/validators/file.d.ts.map +1 -0
- package/dist/validators/file.js +114 -0
- package/dist/validators/file.js.map +1 -0
- package/dist/validators/function.d.ts +26 -0
- package/dist/validators/function.d.ts.map +1 -0
- package/dist/validators/function.js +45 -0
- package/dist/validators/function.js.map +1 -0
- package/dist/validators/hex.d.ts.map +1 -1
- package/dist/validators/hex.js +3 -2
- package/dist/validators/hex.js.map +1 -1
- package/dist/validators/index.d.ts +18 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +16 -1
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/intersection.d.ts.map +1 -1
- package/dist/validators/intersection.js +15 -8
- package/dist/validators/intersection.js.map +1 -1
- package/dist/validators/json.d.ts +26 -0
- package/dist/validators/json.d.ts.map +1 -0
- package/dist/validators/json.js +64 -0
- package/dist/validators/json.js.map +1 -0
- package/dist/validators/lazy.d.ts +28 -0
- package/dist/validators/lazy.d.ts.map +1 -0
- package/dist/validators/lazy.js +42 -0
- package/dist/validators/lazy.js.map +1 -0
- package/dist/validators/literal.js +1 -1
- package/dist/validators/map.js +1 -1
- package/dist/validators/nan.d.ts +17 -0
- package/dist/validators/nan.d.ts.map +1 -0
- package/dist/validators/nan.js +32 -0
- package/dist/validators/nan.js.map +1 -0
- package/dist/validators/never.js +1 -1
- package/dist/validators/null.d.ts +16 -0
- package/dist/validators/null.d.ts.map +1 -0
- package/dist/validators/null.js +31 -0
- package/dist/validators/null.js.map +1 -0
- package/dist/validators/number.d.ts +22 -0
- package/dist/validators/number.d.ts.map +1 -1
- package/dist/validators/number.js +47 -8
- package/dist/validators/number.js.map +1 -1
- package/dist/validators/object.d.ts +32 -0
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/object.js +125 -8
- package/dist/validators/object.js.map +1 -1
- package/dist/validators/record.d.ts +15 -2
- package/dist/validators/record.d.ts.map +1 -1
- package/dist/validators/record.js +74 -4
- package/dist/validators/record.js.map +1 -1
- package/dist/validators/set.js +1 -1
- package/dist/validators/string-bool.d.ts +61 -0
- package/dist/validators/string-bool.d.ts.map +1 -0
- package/dist/validators/string-bool.js +127 -0
- package/dist/validators/string-bool.js.map +1 -0
- package/dist/validators/string-formats.d.ts +97 -0
- package/dist/validators/string-formats.d.ts.map +1 -0
- package/dist/validators/string-formats.js +120 -0
- package/dist/validators/string-formats.js.map +1 -0
- package/dist/validators/string.d.ts.map +1 -1
- package/dist/validators/string.js +2 -73
- package/dist/validators/string.js.map +1 -1
- package/dist/validators/symbol.js +1 -1
- package/dist/validators/template-literal.d.ts +32 -0
- package/dist/validators/template-literal.d.ts.map +1 -0
- package/dist/validators/template-literal.js +102 -0
- package/dist/validators/template-literal.js.map +1 -0
- package/dist/validators/tuple.js +1 -1
- package/dist/validators/uint8array.d.ts +21 -4
- package/dist/validators/uint8array.d.ts.map +1 -1
- package/dist/validators/uint8array.js +34 -23
- package/dist/validators/uint8array.js.map +1 -1
- package/dist/validators/undefined.d.ts +16 -0
- package/dist/validators/undefined.d.ts.map +1 -0
- package/dist/validators/undefined.js +31 -0
- package/dist/validators/undefined.js.map +1 -0
- package/dist/validators/union.d.ts +2 -0
- package/dist/validators/union.d.ts.map +1 -1
- package/dist/validators/union.js +15 -21
- package/dist/validators/union.js.map +1 -1
- package/dist/validators/void.js +1 -1
- package/dist/validators/xor.d.ts +23 -0
- package/dist/validators/xor.d.ts.map +1 -0
- package/dist/validators/xor.js +64 -0
- package/dist/validators/xor.js.map +1 -0
- package/package.json +95 -79
package/dist/errors.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
// VLD Error System - Advanced error formatting and utilities
|
|
2
|
+
import { vldTheme } from './pigment.js';
|
|
2
3
|
export class VldError extends Error {
|
|
3
4
|
constructor(issues) {
|
|
4
|
-
const message = issues.length === 1
|
|
5
|
-
? issues[0].message
|
|
6
|
-
: `${issues.length} validation errors`;
|
|
5
|
+
const message = issues.length === 1 ? issues[0].message : `${issues.length} validation errors`;
|
|
7
6
|
super(message);
|
|
8
7
|
this.name = 'VldError';
|
|
9
8
|
this.issues = issues;
|
|
@@ -16,7 +15,54 @@ export class VldError extends Error {
|
|
|
16
15
|
return this.issues[0];
|
|
17
16
|
}
|
|
18
17
|
get formattedErrors() {
|
|
19
|
-
return this.issues.map(issue => issue.message);
|
|
18
|
+
return this.issues.map((issue) => issue.message);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Convert error to JSON representation
|
|
22
|
+
* Compatible with @oxog/types OxogError
|
|
23
|
+
*/
|
|
24
|
+
toJSON() {
|
|
25
|
+
return {
|
|
26
|
+
name: this.name,
|
|
27
|
+
message: this.message,
|
|
28
|
+
code: 'VLD_VALIDATION_ERROR',
|
|
29
|
+
issues: this.issues.map((issue) => ({
|
|
30
|
+
code: issue.code,
|
|
31
|
+
path: issue.path,
|
|
32
|
+
message: issue.message,
|
|
33
|
+
expected: issue.expected,
|
|
34
|
+
received: issue.received,
|
|
35
|
+
keys: issue.keys,
|
|
36
|
+
minimum: issue.minimum,
|
|
37
|
+
maximum: issue.maximum,
|
|
38
|
+
exact: issue.exact,
|
|
39
|
+
inclusive: issue.inclusive
|
|
40
|
+
}))
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create VldError from JSON representation
|
|
45
|
+
*/
|
|
46
|
+
static fromJSON(json) {
|
|
47
|
+
const issues = json.issues.map((issue) => ({
|
|
48
|
+
code: issue.code,
|
|
49
|
+
path: issue.path,
|
|
50
|
+
message: issue.message,
|
|
51
|
+
expected: issue.expected,
|
|
52
|
+
received: issue.received,
|
|
53
|
+
keys: issue.keys,
|
|
54
|
+
minimum: issue.minimum,
|
|
55
|
+
maximum: issue.maximum,
|
|
56
|
+
exact: issue.exact,
|
|
57
|
+
inclusive: issue.inclusive
|
|
58
|
+
}));
|
|
59
|
+
return new VldError(issues);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if a value is a VldError
|
|
63
|
+
*/
|
|
64
|
+
static isVldError(value) {
|
|
65
|
+
return value instanceof VldError;
|
|
20
66
|
}
|
|
21
67
|
}
|
|
22
68
|
/**
|
|
@@ -75,27 +121,69 @@ export function treeifyError(error) {
|
|
|
75
121
|
/**
|
|
76
122
|
* Convert VldError to human-readable string
|
|
77
123
|
*/
|
|
78
|
-
export function prettifyError(error) {
|
|
124
|
+
export function prettifyError(error, options = {}) {
|
|
125
|
+
const { colored = true, theme = vldTheme, includeCode = false, includeDetails = false } = options;
|
|
79
126
|
const lines = [];
|
|
80
127
|
for (const issue of error.issues) {
|
|
81
|
-
|
|
128
|
+
// Symbol and message
|
|
129
|
+
const symbol = colored ? theme.symbol('✖') : '✖';
|
|
130
|
+
const message = colored ? theme.error(issue.message) : issue.message;
|
|
131
|
+
let line = `${symbol} ${message}`;
|
|
132
|
+
// Error code
|
|
133
|
+
if (includeCode) {
|
|
134
|
+
const code = colored ? theme.muted(`[${issue.code}]`) : `[${issue.code}]`;
|
|
135
|
+
line += ` ${code}`;
|
|
136
|
+
}
|
|
137
|
+
// Path
|
|
82
138
|
if (issue.path.length > 0) {
|
|
83
139
|
const pathStr = issue.path
|
|
84
140
|
.map((segment, index) => {
|
|
85
141
|
if (typeof segment === 'string') {
|
|
86
|
-
|
|
142
|
+
const str = index === 0 ? segment : `.${segment}`;
|
|
143
|
+
return colored ? theme.path(str) : str;
|
|
87
144
|
}
|
|
88
145
|
else {
|
|
89
|
-
|
|
146
|
+
const str = `[${segment}]`;
|
|
147
|
+
return colored ? theme.path(str) : str;
|
|
90
148
|
}
|
|
91
149
|
})
|
|
92
150
|
.join('');
|
|
93
|
-
|
|
151
|
+
const arrow = colored ? theme.muted('→ at ') : '→ at ';
|
|
152
|
+
line += `\n ${arrow}${pathStr}`;
|
|
153
|
+
}
|
|
154
|
+
// Details
|
|
155
|
+
if (includeDetails) {
|
|
156
|
+
if (issue.expected) {
|
|
157
|
+
const expected = colored
|
|
158
|
+
? theme.muted('expected: ') + theme.success(issue.expected)
|
|
159
|
+
: `expected: ${issue.expected}`;
|
|
160
|
+
line += `\n ${expected}`;
|
|
161
|
+
}
|
|
162
|
+
if (issue.received) {
|
|
163
|
+
const received = colored
|
|
164
|
+
? theme.muted('received: ') + theme.warning(issue.received)
|
|
165
|
+
: `received: ${issue.received}`;
|
|
166
|
+
line += `\n ${received}`;
|
|
167
|
+
}
|
|
94
168
|
}
|
|
95
169
|
lines.push(line);
|
|
96
170
|
}
|
|
97
171
|
return lines.join('\n');
|
|
98
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Convert VldError to human-readable string with full colors
|
|
175
|
+
* Shorthand for prettifyError with colored: true
|
|
176
|
+
*/
|
|
177
|
+
export function prettifyErrorColored(error, options = {}) {
|
|
178
|
+
return prettifyError(error, { ...options, colored: true });
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Convert VldError to plain text string (no colors)
|
|
182
|
+
* Shorthand for prettifyError with colored: false
|
|
183
|
+
*/
|
|
184
|
+
export function prettifyErrorPlain(error, options = {}) {
|
|
185
|
+
return prettifyError(error, { ...options, colored: false });
|
|
186
|
+
}
|
|
99
187
|
/**
|
|
100
188
|
* Flatten VldError for simple form validation
|
|
101
189
|
*/
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["// VLD Error System - Advanced error formatting and utilities\n\nexport type VldErrorCode = \n | 'invalid_type'\n | 'invalid_string'\n | 'string_too_small'\n | 'string_too_big'\n | 'invalid_email'\n | 'invalid_url'\n | 'invalid_uuid'\n | 'invalid_regex'\n | 'invalid_number'\n | 'too_small'\n | 'too_big'\n | 'not_integer'\n | 'not_finite'\n | 'not_safe'\n | 'invalid_boolean'\n | 'invalid_date'\n | 'invalid_array'\n | 'invalid_object'\n | 'unrecognized_keys'\n | 'invalid_union'\n | 'invalid_literal'\n | 'invalid_enum'\n | 'custom';\n\nexport interface VldIssue {\n code: VldErrorCode;\n path: (string | number)[];\n message: string;\n expected?: string;\n received?: string;\n keys?: string[];\n minimum?: number;\n maximum?: number;\n exact?: number;\n inclusive?: boolean;\n}\n\nexport class VldError extends Error {\n public readonly issues: VldIssue[];\n\n constructor(issues: VldIssue[]) {\n const message = issues.length === 1 \n ? issues[0].message\n : `${issues.length} validation errors`;\n \n super(message);\n this.name = 'VldError';\n this.issues = issues;\n \n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, VldError);\n }\n }\n\n get firstError(): VldIssue | undefined {\n return this.issues[0];\n }\n\n get formattedErrors(): string[] {\n return this.issues.map(issue => issue.message);\n }\n}\n\n// Error tree structure for nested validation\nexport interface VldErrorTree {\n errors: string[];\n properties?: Record<string, VldErrorTree>;\n items?: (VldErrorTree | undefined)[];\n}\n\n// Flattened error structure for simple forms\nexport interface VldFlattenedError {\n formErrors: string[];\n fieldErrors: Record<string, string[]>;\n}\n\n/**\n * Convert VldError to a nested tree structure\n */\nexport function treeifyError(error: VldError): VldErrorTree {\n const tree: VldErrorTree = { errors: [] };\n\n for (const issue of error.issues) {\n let currentNode = tree;\n const path = issue.path;\n\n // Navigate to the correct position in the tree\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n const isLast = i === path.length - 1;\n\n if (typeof segment === 'string') {\n // Object property\n if (!currentNode.properties) {\n currentNode.properties = {};\n }\n \n if (!currentNode.properties[segment]) {\n currentNode.properties[segment] = { errors: [] };\n }\n \n if (isLast) {\n currentNode.properties[segment].errors.push(issue.message);\n } else {\n currentNode = currentNode.properties[segment];\n }\n } else if (typeof segment === 'number') {\n // Array index\n if (!currentNode.items) {\n currentNode.items = [];\n }\n \n while (currentNode.items.length <= segment) {\n currentNode.items.push(undefined);\n }\n \n if (!currentNode.items[segment]) {\n currentNode.items[segment] = { errors: [] };\n }\n \n if (isLast) {\n currentNode.items[segment]!.errors.push(issue.message);\n } else {\n currentNode = currentNode.items[segment]!;\n }\n }\n }\n\n // If path is empty, add to root errors\n if (path.length === 0) {\n tree.errors.push(issue.message);\n }\n }\n\n return tree;\n}\n\n/**\n * Convert VldError to human-readable string\n */\nexport function prettifyError(error: VldError): string {\n const lines: string[] = [];\n\n for (const issue of error.issues) {\n let line = `✖ ${issue.message}`;\n \n if (issue.path.length > 0) {\n const pathStr = issue.path\n .map((segment, index) => {\n if (typeof segment === 'string') {\n return index === 0 ? segment : `.${segment}`;\n } else {\n return `[${segment}]`;\n }\n })\n .join('');\n \n line += `\\n → at ${pathStr}`;\n }\n \n lines.push(line);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Flatten VldError for simple form validation\n */\nexport function flattenError(error: VldError): VldFlattenedError {\n const formErrors: string[] = [];\n const fieldErrors: Record<string, string[]> = {};\n\n for (const issue of error.issues) {\n if (issue.path.length === 0) {\n formErrors.push(issue.message);\n } else {\n const fieldName = issue.path[0].toString();\n if (!fieldErrors[fieldName]) {\n fieldErrors[fieldName] = [];\n }\n fieldErrors[fieldName].push(issue.message);\n }\n }\n\n return { formErrors, fieldErrors };\n}\n\n/**\n * Create a validation issue\n */\nexport function createIssue(\n code: VldErrorCode,\n path: (string | number)[],\n message: string,\n extra?: Partial<VldIssue>\n): VldIssue {\n return {\n code,\n path: [...path],\n message,\n ...extra\n };\n}\n\n/**\n * Helper to determine the type of a value for error messages\n */\nexport function getValueType(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Date) return 'date';\n return typeof value;\n}"]}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["// VLD Error System - Advanced error formatting and utilities\r\n\r\nimport { type Theme, vldTheme } from './pigment';\r\n\r\nexport type VldErrorCode =\r\n | 'invalid_type'\r\n | 'invalid_string'\r\n | 'string_too_small'\r\n | 'string_too_big'\r\n | 'invalid_email'\r\n | 'invalid_url'\r\n | 'invalid_uuid'\r\n | 'invalid_regex'\r\n | 'invalid_number'\r\n | 'too_small'\r\n | 'too_big'\r\n | 'not_integer'\r\n | 'not_finite'\r\n | 'not_safe'\r\n | 'invalid_boolean'\r\n | 'invalid_date'\r\n | 'invalid_array'\r\n | 'invalid_object'\r\n | 'unrecognized_keys'\r\n | 'invalid_union'\r\n | 'invalid_literal'\r\n | 'invalid_enum'\r\n | 'custom';\r\n\r\nexport interface VldIssue {\r\n code: VldErrorCode;\r\n path: (string | number)[];\r\n message: string;\r\n expected?: string;\r\n received?: string;\r\n keys?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n exact?: number;\r\n inclusive?: boolean;\r\n}\r\n\r\nexport class VldError extends Error {\r\n public readonly issues: VldIssue[];\r\n\r\n constructor(issues: VldIssue[]) {\r\n const message =\r\n issues.length === 1 ? issues[0].message : `${issues.length} validation errors`;\r\n\r\n super(message);\r\n this.name = 'VldError';\r\n this.issues = issues;\r\n\r\n // Maintain proper stack trace\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, VldError);\r\n }\r\n }\r\n\r\n get firstError(): VldIssue | undefined {\r\n return this.issues[0];\r\n }\r\n\r\n get formattedErrors(): string[] {\r\n return this.issues.map((issue) => issue.message);\r\n }\r\n\r\n /**\r\n * Convert error to JSON representation\r\n * Compatible with @oxog/types OxogError\r\n */\r\n toJSON(): VldErrorJSON {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n code: 'VLD_VALIDATION_ERROR',\r\n issues: this.issues.map((issue) => ({\r\n code: issue.code,\r\n path: issue.path,\r\n message: issue.message,\r\n expected: issue.expected,\r\n received: issue.received,\r\n keys: issue.keys,\r\n minimum: issue.minimum,\r\n maximum: issue.maximum,\r\n exact: issue.exact,\r\n inclusive: issue.inclusive\r\n }))\r\n };\r\n }\r\n\r\n /**\r\n * Create VldError from JSON representation\r\n */\r\n static fromJSON(json: VldErrorJSON): VldError {\r\n const issues: VldIssue[] = json.issues.map((issue) => ({\r\n code: issue.code as VldErrorCode,\r\n path: issue.path,\r\n message: issue.message,\r\n expected: issue.expected,\r\n received: issue.received,\r\n keys: issue.keys,\r\n minimum: issue.minimum,\r\n maximum: issue.maximum,\r\n exact: issue.exact,\r\n inclusive: issue.inclusive\r\n }));\r\n return new VldError(issues);\r\n }\r\n\r\n /**\r\n * Check if a value is a VldError\r\n */\r\n static isVldError(value: unknown): value is VldError {\r\n return value instanceof VldError;\r\n }\r\n}\r\n\r\n/**\r\n * JSON representation of VldError\r\n */\r\nexport interface VldErrorJSON {\r\n name: string;\r\n message: string;\r\n code: string;\r\n issues: Array<{\r\n code: string;\r\n path: (string | number)[];\r\n message: string;\r\n expected?: string;\r\n received?: string;\r\n keys?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n exact?: number;\r\n inclusive?: boolean;\r\n }>;\r\n}\r\n\r\n// Error tree structure for nested validation\r\nexport interface VldErrorTree {\r\n errors: string[];\r\n properties?: Record<string, VldErrorTree>;\r\n items?: (VldErrorTree | undefined)[];\r\n}\r\n\r\n// Flattened error structure for simple forms\r\nexport interface VldFlattenedError {\r\n formErrors: string[];\r\n fieldErrors: Record<string, string[]>;\r\n}\r\n\r\n/**\r\n * Convert VldError to a nested tree structure\r\n */\r\nexport function treeifyError(error: VldError): VldErrorTree {\r\n const tree: VldErrorTree = { errors: [] };\r\n\r\n for (const issue of error.issues) {\r\n let currentNode = tree;\r\n const path = issue.path;\r\n\r\n // Navigate to the correct position in the tree\r\n for (let i = 0; i < path.length; i++) {\r\n const segment = path[i];\r\n const isLast = i === path.length - 1;\r\n\r\n if (typeof segment === 'string') {\r\n // Object property\r\n if (!currentNode.properties) {\r\n currentNode.properties = {};\r\n }\r\n \r\n if (!currentNode.properties[segment]) {\r\n currentNode.properties[segment] = { errors: [] };\r\n }\r\n \r\n if (isLast) {\r\n currentNode.properties[segment].errors.push(issue.message);\r\n } else {\r\n currentNode = currentNode.properties[segment];\r\n }\r\n } else if (typeof segment === 'number') {\r\n // Array index\r\n if (!currentNode.items) {\r\n currentNode.items = [];\r\n }\r\n \r\n while (currentNode.items.length <= segment) {\r\n currentNode.items.push(undefined);\r\n }\r\n \r\n if (!currentNode.items[segment]) {\r\n currentNode.items[segment] = { errors: [] };\r\n }\r\n \r\n if (isLast) {\r\n currentNode.items[segment]!.errors.push(issue.message);\r\n } else {\r\n currentNode = currentNode.items[segment]!;\r\n }\r\n }\r\n }\r\n\r\n // If path is empty, add to root errors\r\n if (path.length === 0) {\r\n tree.errors.push(issue.message);\r\n }\r\n }\r\n\r\n return tree;\r\n}\r\n\r\n/**\r\n * Prettify error options\r\n */\r\nexport interface PrettifyOptions {\r\n /** Enable colored output */\r\n colored?: boolean;\r\n /** Custom theme for colors */\r\n theme?: Theme;\r\n /** Include error code in output */\r\n includeCode?: boolean;\r\n /** Include expected/received values */\r\n includeDetails?: boolean;\r\n}\r\n\r\n/**\r\n * Convert VldError to human-readable string\r\n */\r\nexport function prettifyError(error: VldError, options: PrettifyOptions = {}): string {\r\n const { colored = true, theme = vldTheme, includeCode = false, includeDetails = false } =\r\n options;\r\n\r\n const lines: string[] = [];\r\n\r\n for (const issue of error.issues) {\r\n // Symbol and message\r\n const symbol = colored ? theme.symbol('✖') : '✖';\r\n const message = colored ? theme.error(issue.message) : issue.message;\r\n let line = `${symbol} ${message}`;\r\n\r\n // Error code\r\n if (includeCode) {\r\n const code = colored ? theme.muted(`[${issue.code}]`) : `[${issue.code}]`;\r\n line += ` ${code}`;\r\n }\r\n\r\n // Path\r\n if (issue.path.length > 0) {\r\n const pathStr = issue.path\r\n .map((segment, index) => {\r\n if (typeof segment === 'string') {\r\n const str = index === 0 ? segment : `.${segment}`;\r\n return colored ? theme.path(str) : str;\r\n } else {\r\n const str = `[${segment}]`;\r\n return colored ? theme.path(str) : str;\r\n }\r\n })\r\n .join('');\r\n\r\n const arrow = colored ? theme.muted('→ at ') : '→ at ';\r\n line += `\\n ${arrow}${pathStr}`;\r\n }\r\n\r\n // Details\r\n if (includeDetails) {\r\n if (issue.expected) {\r\n const expected = colored\r\n ? theme.muted('expected: ') + theme.success(issue.expected)\r\n : `expected: ${issue.expected}`;\r\n line += `\\n ${expected}`;\r\n }\r\n if (issue.received) {\r\n const received = colored\r\n ? theme.muted('received: ') + theme.warning(issue.received)\r\n : `received: ${issue.received}`;\r\n line += `\\n ${received}`;\r\n }\r\n }\r\n\r\n lines.push(line);\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Convert VldError to human-readable string with full colors\r\n * Shorthand for prettifyError with colored: true\r\n */\r\nexport function prettifyErrorColored(error: VldError, options: Omit<PrettifyOptions, 'colored'> = {}): string {\r\n return prettifyError(error, { ...options, colored: true });\r\n}\r\n\r\n/**\r\n * Convert VldError to plain text string (no colors)\r\n * Shorthand for prettifyError with colored: false\r\n */\r\nexport function prettifyErrorPlain(error: VldError, options: Omit<PrettifyOptions, 'colored'> = {}): string {\r\n return prettifyError(error, { ...options, colored: false });\r\n}\r\n\r\n/**\r\n * Flatten VldError for simple form validation\r\n */\r\nexport function flattenError(error: VldError): VldFlattenedError {\r\n const formErrors: string[] = [];\r\n const fieldErrors: Record<string, string[]> = {};\r\n\r\n for (const issue of error.issues) {\r\n if (issue.path.length === 0) {\r\n formErrors.push(issue.message);\r\n } else {\r\n const fieldName = issue.path[0].toString();\r\n if (!fieldErrors[fieldName]) {\r\n fieldErrors[fieldName] = [];\r\n }\r\n fieldErrors[fieldName].push(issue.message);\r\n }\r\n }\r\n\r\n return { formErrors, fieldErrors };\r\n}\r\n\r\n/**\r\n * Create a validation issue\r\n */\r\nexport function createIssue(\r\n code: VldErrorCode,\r\n path: (string | number)[],\r\n message: string,\r\n extra?: Partial<VldIssue>\r\n): VldIssue {\r\n return {\r\n code,\r\n path: [...path],\r\n message,\r\n ...extra\r\n };\r\n}\r\n\r\n/**\r\n * Helper to determine the type of a value for error messages\r\n */\r\nexport function getValueType(value: unknown): string {\r\n if (value === null) return 'null';\r\n if (value === undefined) return 'undefined';\r\n if (Array.isArray(value)) return 'array';\r\n if (value instanceof Date) return 'date';\r\n return typeof value;\r\n}"]}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VLD Event System
|
|
3
|
+
*
|
|
4
|
+
* This module defines all VLD-specific events for validation lifecycle,
|
|
5
|
+
* plugin management, and debugging.
|
|
6
|
+
*/
|
|
7
|
+
import type { EventMap } from './compat/emitter';
|
|
8
|
+
import type { VldError } from './errors';
|
|
9
|
+
import type { VldBase } from './validators/base';
|
|
10
|
+
/**
|
|
11
|
+
* VLD Event definitions
|
|
12
|
+
*/
|
|
13
|
+
export interface VldEvents extends EventMap {
|
|
14
|
+
/** Emitted when parsing starts */
|
|
15
|
+
'vld:parse:start': {
|
|
16
|
+
value: unknown;
|
|
17
|
+
schema: VldBase<unknown, unknown>;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
};
|
|
20
|
+
/** Emitted when parsing succeeds */
|
|
21
|
+
'vld:parse:success': {
|
|
22
|
+
data: unknown;
|
|
23
|
+
schema: VldBase<unknown, unknown>;
|
|
24
|
+
duration: number;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
};
|
|
27
|
+
/** Emitted when parsing fails */
|
|
28
|
+
'vld:parse:error': {
|
|
29
|
+
error: VldError;
|
|
30
|
+
schema: VldBase<unknown, unknown>;
|
|
31
|
+
duration: number;
|
|
32
|
+
timestamp: number;
|
|
33
|
+
};
|
|
34
|
+
/** Emitted for each field validation in objects */
|
|
35
|
+
'vld:validate:field': {
|
|
36
|
+
key: string;
|
|
37
|
+
value: unknown;
|
|
38
|
+
valid: boolean;
|
|
39
|
+
path: (string | number)[];
|
|
40
|
+
timestamp: number;
|
|
41
|
+
};
|
|
42
|
+
/** Emitted when a transform is applied */
|
|
43
|
+
'vld:validate:transform': {
|
|
44
|
+
before: unknown;
|
|
45
|
+
after: unknown;
|
|
46
|
+
schemaName: string;
|
|
47
|
+
timestamp: number;
|
|
48
|
+
};
|
|
49
|
+
/** Emitted when a refinement is checked */
|
|
50
|
+
'vld:validate:refine': {
|
|
51
|
+
value: unknown;
|
|
52
|
+
passed: boolean;
|
|
53
|
+
message?: string;
|
|
54
|
+
timestamp: number;
|
|
55
|
+
};
|
|
56
|
+
/** Emitted when a plugin is registered */
|
|
57
|
+
'vld:plugin:registered': {
|
|
58
|
+
name: string;
|
|
59
|
+
version: string;
|
|
60
|
+
timestamp: number;
|
|
61
|
+
};
|
|
62
|
+
/** Emitted when a plugin encounters an error */
|
|
63
|
+
'vld:plugin:error': {
|
|
64
|
+
name: string;
|
|
65
|
+
error: Error;
|
|
66
|
+
timestamp: number;
|
|
67
|
+
};
|
|
68
|
+
/** Emitted when a custom validator is registered */
|
|
69
|
+
'vld:validator:registered': {
|
|
70
|
+
name: string;
|
|
71
|
+
timestamp: number;
|
|
72
|
+
};
|
|
73
|
+
/** Emitted when a custom codec is registered */
|
|
74
|
+
'vld:codec:registered': {
|
|
75
|
+
name: string;
|
|
76
|
+
timestamp: number;
|
|
77
|
+
};
|
|
78
|
+
/** Emitted when locale is changed */
|
|
79
|
+
'vld:locale:changed': {
|
|
80
|
+
from: string;
|
|
81
|
+
to: string;
|
|
82
|
+
timestamp: number;
|
|
83
|
+
};
|
|
84
|
+
/** Emitted for debug logging */
|
|
85
|
+
'vld:debug': {
|
|
86
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
87
|
+
message: string;
|
|
88
|
+
data?: unknown;
|
|
89
|
+
timestamp: number;
|
|
90
|
+
};
|
|
91
|
+
/** Emitted for performance metrics */
|
|
92
|
+
'vld:metrics': {
|
|
93
|
+
operation: string;
|
|
94
|
+
duration: number;
|
|
95
|
+
success: boolean;
|
|
96
|
+
metadata?: Record<string, unknown>;
|
|
97
|
+
timestamp: number;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Event payload types for type-safe event handling
|
|
102
|
+
*/
|
|
103
|
+
export type VldEventPayload<K extends keyof VldEvents> = VldEvents[K];
|
|
104
|
+
/**
|
|
105
|
+
* Parse start event payload
|
|
106
|
+
*/
|
|
107
|
+
export type ParseStartEvent = VldEvents['vld:parse:start'];
|
|
108
|
+
/**
|
|
109
|
+
* Parse success event payload
|
|
110
|
+
*/
|
|
111
|
+
export type ParseSuccessEvent = VldEvents['vld:parse:success'];
|
|
112
|
+
/**
|
|
113
|
+
* Parse error event payload
|
|
114
|
+
*/
|
|
115
|
+
export type ParseErrorEvent = VldEvents['vld:parse:error'];
|
|
116
|
+
/**
|
|
117
|
+
* Field validation event payload
|
|
118
|
+
*/
|
|
119
|
+
export type FieldValidationEvent = VldEvents['vld:validate:field'];
|
|
120
|
+
/**
|
|
121
|
+
* Transform event payload
|
|
122
|
+
*/
|
|
123
|
+
export type TransformEvent = VldEvents['vld:validate:transform'];
|
|
124
|
+
/**
|
|
125
|
+
* Plugin registered event payload
|
|
126
|
+
*/
|
|
127
|
+
export type PluginRegisteredEvent = VldEvents['vld:plugin:registered'];
|
|
128
|
+
/**
|
|
129
|
+
* Locale changed event payload
|
|
130
|
+
*/
|
|
131
|
+
export type LocaleChangedEvent = VldEvents['vld:locale:changed'];
|
|
132
|
+
/**
|
|
133
|
+
* Debug event payload
|
|
134
|
+
*/
|
|
135
|
+
export type DebugEvent = VldEvents['vld:debug'];
|
|
136
|
+
/**
|
|
137
|
+
* Metrics event payload
|
|
138
|
+
*/
|
|
139
|
+
export type MetricsEvent = VldEvents['vld:metrics'];
|
|
140
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\r\n * VLD Event System\r\n *\r\n * This module defines all VLD-specific events for validation lifecycle,\r\n * plugin management, and debugging.\r\n */\r\n\r\nimport type { EventMap } from './compat/emitter';\r\nimport type { VldError } from './errors';\r\nimport type { VldBase } from './validators/base';\r\n\r\n/**\r\n * VLD Event definitions\r\n */\r\nexport interface VldEvents extends EventMap {\r\n // ============================================\r\n // Parse Lifecycle Events\r\n // ============================================\r\n\r\n /** Emitted when parsing starts */\r\n 'vld:parse:start': {\r\n value: unknown;\r\n schema: VldBase<unknown, unknown>;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when parsing succeeds */\r\n 'vld:parse:success': {\r\n data: unknown;\r\n schema: VldBase<unknown, unknown>;\r\n duration: number;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when parsing fails */\r\n 'vld:parse:error': {\r\n error: VldError;\r\n schema: VldBase<unknown, unknown>;\r\n duration: number;\r\n timestamp: number;\r\n };\r\n\r\n // ============================================\r\n // Validation Detail Events\r\n // ============================================\r\n\r\n /** Emitted for each field validation in objects */\r\n 'vld:validate:field': {\r\n key: string;\r\n value: unknown;\r\n valid: boolean;\r\n path: (string | number)[];\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when a transform is applied */\r\n 'vld:validate:transform': {\r\n before: unknown;\r\n after: unknown;\r\n schemaName: string;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when a refinement is checked */\r\n 'vld:validate:refine': {\r\n value: unknown;\r\n passed: boolean;\r\n message?: string;\r\n timestamp: number;\r\n };\r\n\r\n // ============================================\r\n // Plugin Events\r\n // ============================================\r\n\r\n /** Emitted when a plugin is registered */\r\n 'vld:plugin:registered': {\r\n name: string;\r\n version: string;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when a plugin encounters an error */\r\n 'vld:plugin:error': {\r\n name: string;\r\n error: Error;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when a custom validator is registered */\r\n 'vld:validator:registered': {\r\n name: string;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted when a custom codec is registered */\r\n 'vld:codec:registered': {\r\n name: string;\r\n timestamp: number;\r\n };\r\n\r\n // ============================================\r\n // Locale Events\r\n // ============================================\r\n\r\n /** Emitted when locale is changed */\r\n 'vld:locale:changed': {\r\n from: string;\r\n to: string;\r\n timestamp: number;\r\n };\r\n\r\n // ============================================\r\n // Debug Events\r\n // ============================================\r\n\r\n /** Emitted for debug logging */\r\n 'vld:debug': {\r\n level: 'debug' | 'info' | 'warn' | 'error';\r\n message: string;\r\n data?: unknown;\r\n timestamp: number;\r\n };\r\n\r\n /** Emitted for performance metrics */\r\n 'vld:metrics': {\r\n operation: string;\r\n duration: number;\r\n success: boolean;\r\n metadata?: Record<string, unknown>;\r\n timestamp: number;\r\n };\r\n}\r\n\r\n/**\r\n * Event payload types for type-safe event handling\r\n */\r\nexport type VldEventPayload<K extends keyof VldEvents> = VldEvents[K];\r\n\r\n/**\r\n * Parse start event payload\r\n */\r\nexport type ParseStartEvent = VldEvents['vld:parse:start'];\r\n\r\n/**\r\n * Parse success event payload\r\n */\r\nexport type ParseSuccessEvent = VldEvents['vld:parse:success'];\r\n\r\n/**\r\n * Parse error event payload\r\n */\r\nexport type ParseErrorEvent = VldEvents['vld:parse:error'];\r\n\r\n/**\r\n * Field validation event payload\r\n */\r\nexport type FieldValidationEvent = VldEvents['vld:validate:field'];\r\n\r\n/**\r\n * Transform event payload\r\n */\r\nexport type TransformEvent = VldEvents['vld:validate:transform'];\r\n\r\n/**\r\n * Plugin registered event payload\r\n */\r\nexport type PluginRegisteredEvent = VldEvents['vld:plugin:registered'];\r\n\r\n/**\r\n * Locale changed event payload\r\n */\r\nexport type LocaleChangedEvent = VldEvents['vld:locale:changed'];\r\n\r\n/**\r\n * Debug event payload\r\n */\r\nexport type DebugEvent = VldEvents['vld:debug'];\r\n\r\n/**\r\n * Metrics event payload\r\n */\r\nexport type MetricsEvent = VldEvents['vld:metrics'];\r\n"]}
|
package/dist/guards.d.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VLD Type Guards
|
|
3
|
+
*
|
|
4
|
+
* Bu modül VLD için type guard fonksiyonlarını içerir.
|
|
5
|
+
* Result pattern ve VLD-specific type guard'ları burada tanımlanır.
|
|
6
|
+
*/
|
|
7
|
+
import { isOk, isErr, isResult, type Result, type Ok, type Err } from './compat/result.js';
|
|
8
|
+
import { VldError, type VldIssue } from './errors.js';
|
|
9
|
+
import { VldBase } from './validators/base.js';
|
|
10
|
+
export { isOk, isErr, isResult };
|
|
11
|
+
/**
|
|
12
|
+
* Değerin VldError olup olmadığını kontrol eder
|
|
13
|
+
*/
|
|
14
|
+
export declare function isVldError(value: unknown): value is VldError;
|
|
15
|
+
/**
|
|
16
|
+
* Değerin VldIssue olup olmadığını kontrol eder
|
|
17
|
+
*/
|
|
18
|
+
export declare function isVldIssue(value: unknown): value is VldIssue;
|
|
19
|
+
/**
|
|
20
|
+
* Değerin VldBase validator olup olmadığını kontrol eder
|
|
21
|
+
*/
|
|
22
|
+
export declare function isValidator<TInput = unknown, TOutput = unknown>(value: unknown): value is VldBase<TInput, TOutput>;
|
|
23
|
+
/**
|
|
24
|
+
* Parse sonucunun başarılı olup olmadığını kontrol eder
|
|
25
|
+
*/
|
|
26
|
+
export declare function isParseSuccess<T>(result: Result<T, VldError>): result is Ok<T>;
|
|
27
|
+
/**
|
|
28
|
+
* Parse sonucunun başarısız olup olmadığını kontrol eder
|
|
29
|
+
*/
|
|
30
|
+
export declare function isParseError<T>(result: Result<T, VldError>): result is Err<VldError>;
|
|
31
|
+
/**
|
|
32
|
+
* Değerin null olup olmadığını kontrol eder
|
|
33
|
+
*/
|
|
34
|
+
export declare function isNull(value: unknown): value is null;
|
|
35
|
+
/**
|
|
36
|
+
* Değerin undefined olup olmadığını kontrol eder
|
|
37
|
+
*/
|
|
38
|
+
export declare function isUndefined(value: unknown): value is undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Değerin nullish olup olmadığını kontrol eder (null | undefined)
|
|
41
|
+
*/
|
|
42
|
+
export declare function isNullish(value: unknown): value is null | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Değerin string olup olmadığını kontrol eder
|
|
45
|
+
*/
|
|
46
|
+
export declare function isString(value: unknown): value is string;
|
|
47
|
+
/**
|
|
48
|
+
* Değerin number olup olmadığını kontrol eder
|
|
49
|
+
*/
|
|
50
|
+
export declare function isNumber(value: unknown): value is number;
|
|
51
|
+
/**
|
|
52
|
+
* Değerin finite number olup olmadığını kontrol eder
|
|
53
|
+
*/
|
|
54
|
+
export declare function isFiniteNumber(value: unknown): value is number;
|
|
55
|
+
/**
|
|
56
|
+
* Değerin integer olup olmadığını kontrol eder
|
|
57
|
+
*/
|
|
58
|
+
export declare function isInteger(value: unknown): value is number;
|
|
59
|
+
/**
|
|
60
|
+
* Değerin safe integer olup olmadığını kontrol eder
|
|
61
|
+
*/
|
|
62
|
+
export declare function isSafeInteger(value: unknown): value is number;
|
|
63
|
+
/**
|
|
64
|
+
* Değerin boolean olup olmadığını kontrol eder
|
|
65
|
+
*/
|
|
66
|
+
export declare function isBoolean(value: unknown): value is boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Değerin bigint olup olmadığını kontrol eder
|
|
69
|
+
*/
|
|
70
|
+
export declare function isBigInt(value: unknown): value is bigint;
|
|
71
|
+
/**
|
|
72
|
+
* Değerin symbol olup olmadığını kontrol eder
|
|
73
|
+
*/
|
|
74
|
+
export declare function isSymbol(value: unknown): value is symbol;
|
|
75
|
+
/**
|
|
76
|
+
* Değerin function olup olmadığını kontrol eder
|
|
77
|
+
*/
|
|
78
|
+
export declare function isFunction(value: unknown): value is (...args: unknown[]) => unknown;
|
|
79
|
+
/**
|
|
80
|
+
* Değerin array olup olmadığını kontrol eder
|
|
81
|
+
*/
|
|
82
|
+
export declare function isArray(value: unknown): value is unknown[];
|
|
83
|
+
/**
|
|
84
|
+
* Değerin object olup olmadığını kontrol eder (null ve array hariç)
|
|
85
|
+
*/
|
|
86
|
+
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
87
|
+
/**
|
|
88
|
+
* Değerin plain object olup olmadığını kontrol eder
|
|
89
|
+
*/
|
|
90
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
91
|
+
/**
|
|
92
|
+
* Değerin Date olup olmadığını kontrol eder
|
|
93
|
+
*/
|
|
94
|
+
export declare function isDate(value: unknown): value is Date;
|
|
95
|
+
/**
|
|
96
|
+
* Değerin valid Date olup olmadığını kontrol eder
|
|
97
|
+
*/
|
|
98
|
+
export declare function isValidDate(value: unknown): value is Date;
|
|
99
|
+
/**
|
|
100
|
+
* Değerin Map olup olmadığını kontrol eder
|
|
101
|
+
*/
|
|
102
|
+
export declare function isMap(value: unknown): value is Map<unknown, unknown>;
|
|
103
|
+
/**
|
|
104
|
+
* Değerin Set olup olmadığını kontrol eder
|
|
105
|
+
*/
|
|
106
|
+
export declare function isSet(value: unknown): value is Set<unknown>;
|
|
107
|
+
/**
|
|
108
|
+
* Değerin Promise olup olmadığını kontrol eder
|
|
109
|
+
*/
|
|
110
|
+
export declare function isPromise(value: unknown): value is Promise<unknown>;
|
|
111
|
+
/**
|
|
112
|
+
* Değerin NaN olup olmadığını kontrol eder
|
|
113
|
+
*/
|
|
114
|
+
export declare function isNaN(value: unknown): value is number;
|
|
115
|
+
/**
|
|
116
|
+
* Değerin Uint8Array olup olmadığını kontrol eder
|
|
117
|
+
*/
|
|
118
|
+
export declare function isUint8Array(value: unknown): value is Uint8Array;
|
|
119
|
+
/**
|
|
120
|
+
* Değerin ArrayBuffer olup olmadığını kontrol eder
|
|
121
|
+
*/
|
|
122
|
+
export declare function isArrayBuffer(value: unknown): value is ArrayBuffer;
|
|
123
|
+
/**
|
|
124
|
+
* Değerin geçerli email formatında olup olmadığını kontrol eder
|
|
125
|
+
*/
|
|
126
|
+
export declare function isEmail(value: unknown): value is string;
|
|
127
|
+
/**
|
|
128
|
+
* Değerin geçerli UUID formatında olup olmadığını kontrol eder
|
|
129
|
+
*/
|
|
130
|
+
export declare function isUUID(value: unknown): value is string;
|
|
131
|
+
/**
|
|
132
|
+
* Değerin geçerli URL formatında olup olmadığını kontrol eder
|
|
133
|
+
*/
|
|
134
|
+
export declare function isURL(value: unknown): value is string;
|
|
135
|
+
/**
|
|
136
|
+
* Değerin non-empty string olup olmadığını kontrol eder
|
|
137
|
+
*/
|
|
138
|
+
export declare function isNonEmptyString(value: unknown): value is string;
|
|
139
|
+
/**
|
|
140
|
+
* Değerin empty string olup olmadığını kontrol eder
|
|
141
|
+
*/
|
|
142
|
+
export declare function isEmptyString(value: unknown): value is '';
|
|
143
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAMjC;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAU5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7D,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAC1B,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAEjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAC1B,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAEzB;AAMD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,SAAS,CAEnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAEnF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAE3D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAQnE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAUD;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAEzD"}
|