@oxog/vld 1.4.0 → 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.
Files changed (187) hide show
  1. package/CHANGELOG.md +333 -333
  2. package/README.md +1130 -1130
  3. package/dist/cli/benchmark.d.ts +15 -0
  4. package/dist/cli/benchmark.d.ts.map +1 -0
  5. package/dist/cli/benchmark.js +248 -0
  6. package/dist/cli/benchmark.js.map +1 -0
  7. package/dist/cli/bin.d.ts +8 -0
  8. package/dist/cli/bin.d.ts.map +1 -0
  9. package/dist/cli/bin.js +35 -0
  10. package/dist/cli/bin.js.map +1 -0
  11. package/dist/cli/commands/benchmark.d.ts +11 -0
  12. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  13. package/dist/cli/commands/benchmark.js +204 -0
  14. package/dist/cli/commands/benchmark.js.map +1 -0
  15. package/dist/cli/commands/validate.d.ts +11 -0
  16. package/dist/cli/commands/validate.d.ts.map +1 -0
  17. package/dist/cli/commands/validate.js +157 -0
  18. package/dist/cli/commands/validate.js.map +1 -0
  19. package/dist/cli/generate.d.ts +14 -0
  20. package/dist/cli/generate.d.ts.map +1 -0
  21. package/dist/cli/generate.js +233 -0
  22. package/dist/cli/generate.js.map +1 -0
  23. package/dist/cli/index.d.ts +59 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +182 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/validate.d.ts +15 -0
  28. package/dist/cli/validate.d.ts.map +1 -0
  29. package/dist/cli/validate.js +162 -0
  30. package/dist/cli/validate.js.map +1 -0
  31. package/dist/codecs/index.d.ts.map +1 -1
  32. package/dist/codecs/index.js +29 -10
  33. package/dist/codecs/index.js.map +1 -1
  34. package/dist/coercion/boolean.d.ts.map +1 -1
  35. package/dist/coercion/boolean.js +23 -31
  36. package/dist/coercion/boolean.js.map +1 -1
  37. package/dist/coercion/date.js +1 -1
  38. package/dist/coercion/date.js.map +1 -1
  39. package/dist/compat/emitter.d.ts +73 -0
  40. package/dist/compat/emitter.d.ts.map +1 -0
  41. package/dist/compat/emitter.js +179 -0
  42. package/dist/compat/emitter.js.map +1 -0
  43. package/dist/compat/index.d.ts +15 -0
  44. package/dist/compat/index.d.ts.map +1 -0
  45. package/dist/compat/index.js +14 -0
  46. package/dist/compat/index.js.map +1 -0
  47. package/dist/compat/result.d.ts +128 -0
  48. package/dist/compat/result.d.ts.map +1 -0
  49. package/dist/compat/result.js +169 -0
  50. package/dist/compat/result.js.map +1 -0
  51. package/dist/errors.d.ts +58 -1
  52. package/dist/errors.d.ts.map +1 -1
  53. package/dist/errors.js +97 -9
  54. package/dist/errors.js.map +1 -1
  55. package/dist/events.d.ts +140 -0
  56. package/dist/events.d.ts.map +1 -0
  57. package/dist/events.js +8 -0
  58. package/dist/events.js.map +1 -0
  59. package/dist/guards.d.ts +143 -0
  60. package/dist/guards.d.ts.map +1 -0
  61. package/dist/guards.js +238 -0
  62. package/dist/guards.js.map +1 -0
  63. package/dist/index-new.d.ts.map +1 -0
  64. package/dist/index.d.ts +13 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +29 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/kernel.d.ts +29 -0
  69. package/dist/kernel.d.ts.map +1 -0
  70. package/dist/kernel.js +402 -0
  71. package/dist/kernel.js.map +1 -0
  72. package/dist/locales/af.js.map +1 -1
  73. package/dist/locales/ar.js.map +1 -1
  74. package/dist/locales/backup-en.js.map +1 -1
  75. package/dist/locales/bn.js.map +1 -1
  76. package/dist/locales/da.js.map +1 -1
  77. package/dist/locales/de.js.map +1 -1
  78. package/dist/locales/en.js.map +1 -1
  79. package/dist/locales/es-MX.js.map +1 -1
  80. package/dist/locales/es.js.map +1 -1
  81. package/dist/locales/fi.js.map +1 -1
  82. package/dist/locales/fr.js.map +1 -1
  83. package/dist/locales/hi.js.map +1 -1
  84. package/dist/locales/id.js.map +1 -1
  85. package/dist/locales/it.js.map +1 -1
  86. package/dist/locales/ja.js.map +1 -1
  87. package/dist/locales/ko.js.map +1 -1
  88. package/dist/locales/nl.js.map +1 -1
  89. package/dist/locales/no.js.map +1 -1
  90. package/dist/locales/pl.js.map +1 -1
  91. package/dist/locales/pt-BR.js.map +1 -1
  92. package/dist/locales/pt.js.map +1 -1
  93. package/dist/locales/ru.js.map +1 -1
  94. package/dist/locales/sv.js.map +1 -1
  95. package/dist/locales/sw.js.map +1 -1
  96. package/dist/locales/th.js.map +1 -1
  97. package/dist/locales/tr.js.map +1 -1
  98. package/dist/locales/types.js.map +1 -1
  99. package/dist/locales/vi.js.map +1 -1
  100. package/dist/locales/zh.js.map +1 -1
  101. package/dist/locales.d.ts +54 -0
  102. package/dist/locales.d.ts.map +1 -0
  103. package/dist/locales.js +732 -0
  104. package/dist/locales.js.map +1 -0
  105. package/dist/logger.d.ts +94 -0
  106. package/dist/logger.d.ts.map +1 -0
  107. package/dist/logger.js +184 -0
  108. package/dist/logger.js.map +1 -0
  109. package/dist/pigment.d.ts +124 -0
  110. package/dist/pigment.d.ts.map +1 -0
  111. package/dist/pigment.js +177 -0
  112. package/dist/pigment.js.map +1 -0
  113. package/dist/plugins/codecs.d.ts +17 -0
  114. package/dist/plugins/codecs.d.ts.map +1 -0
  115. package/dist/plugins/codecs.js +29 -0
  116. package/dist/plugins/codecs.js.map +1 -0
  117. package/dist/plugins/coercion.d.ts +13 -0
  118. package/dist/plugins/coercion.d.ts.map +1 -0
  119. package/dist/plugins/coercion.js +34 -0
  120. package/dist/plugins/coercion.js.map +1 -0
  121. package/dist/plugins/core-validators.d.ts +13 -0
  122. package/dist/plugins/core-validators.d.ts.map +1 -0
  123. package/dist/plugins/core-validators.js +96 -0
  124. package/dist/plugins/core-validators.js.map +1 -0
  125. package/dist/plugins/index.d.ts +8 -0
  126. package/dist/plugins/index.d.ts.map +1 -0
  127. package/dist/plugins/index.js +8 -0
  128. package/dist/plugins/index.js.map +1 -0
  129. package/dist/plugins/kernel.d.ts +29 -0
  130. package/dist/plugins/kernel.d.ts.map +1 -0
  131. package/dist/plugins/kernel.js +486 -0
  132. package/dist/plugins/kernel.js.map +1 -0
  133. package/dist/plugins/types.d.ts +186 -0
  134. package/dist/plugins/types.d.ts.map +1 -0
  135. package/dist/plugins/types.js +8 -0
  136. package/dist/plugins/types.js.map +1 -0
  137. package/dist/style.d.ts +123 -0
  138. package/dist/style.d.ts.map +1 -0
  139. package/dist/style.js +369 -0
  140. package/dist/style.js.map +1 -0
  141. package/dist/utils/codec-utils.d.ts.map +1 -1
  142. package/dist/utils/codec-utils.js +6 -0
  143. package/dist/utils/codec-utils.js.map +1 -1
  144. package/dist/utils/ip-validation.d.ts.map +1 -1
  145. package/dist/utils/ip-validation.js +34 -14
  146. package/dist/utils/ip-validation.js.map +1 -1
  147. package/dist/validators/base.d.ts +3 -0
  148. package/dist/validators/base.d.ts.map +1 -1
  149. package/dist/validators/base.js +8 -0
  150. package/dist/validators/base.js.map +1 -1
  151. package/dist/validators/bigint.js.map +1 -1
  152. package/dist/validators/custom.js.map +1 -1
  153. package/dist/validators/discriminated-union.js.map +1 -1
  154. package/dist/validators/file.js.map +1 -1
  155. package/dist/validators/function.js.map +1 -1
  156. package/dist/validators/index.js.map +1 -1
  157. package/dist/validators/json.js.map +1 -1
  158. package/dist/validators/lazy.js.map +1 -1
  159. package/dist/validators/nan.js.map +1 -1
  160. package/dist/validators/null.js.map +1 -1
  161. package/dist/validators/object-optimized.d.ts +23 -0
  162. package/dist/validators/object-optimized.d.ts.map +1 -0
  163. package/dist/validators/object-optimized.js +179 -0
  164. package/dist/validators/object-optimized.js.map +1 -0
  165. package/dist/validators/object-ultra.d.ts +34 -0
  166. package/dist/validators/object-ultra.d.ts.map +1 -0
  167. package/dist/validators/object-ultra.js +175 -0
  168. package/dist/validators/object-ultra.js.map +1 -0
  169. package/dist/validators/object.d.ts.map +1 -1
  170. package/dist/validators/object.js +1 -1
  171. package/dist/validators/object.js.map +1 -1
  172. package/dist/validators/string-bool.js.map +1 -1
  173. package/dist/validators/string-formats.js.map +1 -1
  174. package/dist/validators/string-ultra.d.ts +49 -0
  175. package/dist/validators/string-ultra.d.ts.map +1 -0
  176. package/dist/validators/string-ultra.js +217 -0
  177. package/dist/validators/string-ultra.js.map +1 -0
  178. package/dist/validators/template-literal.d.ts.map +1 -1
  179. package/dist/validators/template-literal.js +13 -12
  180. package/dist/validators/template-literal.js.map +1 -1
  181. package/dist/validators/undefined.js.map +1 -1
  182. package/dist/validators/union-optimized.d.ts +15 -0
  183. package/dist/validators/union-optimized.d.ts.map +1 -0
  184. package/dist/validators/union-optimized.js +92 -0
  185. package/dist/validators/union-optimized.js.map +1 -0
  186. package/dist/validators/xor.js.map +1 -1
  187. package/package.json +95 -79
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Result Pattern Implementation
3
+ *
4
+ * This module provides a Result type for functional error handling,
5
+ * compatible with @oxog/types when available.
6
+ */
7
+ /**
8
+ * Create a success result
9
+ */
10
+ export function Ok(data) {
11
+ return { success: true, data, value: data };
12
+ }
13
+ /**
14
+ * Create an error result
15
+ */
16
+ export function Err(error) {
17
+ return { success: false, error };
18
+ }
19
+ /**
20
+ * Create a success result (alias)
21
+ */
22
+ export const success = Ok;
23
+ /**
24
+ * Create a failure result (alias)
25
+ */
26
+ export const failure = Err;
27
+ /**
28
+ * Check if result is Ok
29
+ */
30
+ export function isOk(result) {
31
+ return result.success === true;
32
+ }
33
+ /**
34
+ * Check if result is Err
35
+ */
36
+ export function isErr(result) {
37
+ return result.success === false;
38
+ }
39
+ /**
40
+ * Check if value is a Result
41
+ */
42
+ export function isResult(value) {
43
+ return (typeof value === 'object' &&
44
+ value !== null &&
45
+ 'success' in value &&
46
+ typeof value.success === 'boolean');
47
+ }
48
+ /**
49
+ * Unwrap a result, throwing the error if it's an Err
50
+ */
51
+ export function unwrap(result) {
52
+ if (isOk(result)) {
53
+ return result.data;
54
+ }
55
+ throw result.error;
56
+ }
57
+ /**
58
+ * Unwrap a result with a default value
59
+ */
60
+ export function unwrapOr(result, defaultValue) {
61
+ if (isOk(result)) {
62
+ return result.data;
63
+ }
64
+ return defaultValue;
65
+ }
66
+ /**
67
+ * Map over a successful result
68
+ */
69
+ export function map(result, fn) {
70
+ if (isOk(result)) {
71
+ return Ok(fn(result.data));
72
+ }
73
+ return result;
74
+ }
75
+ /**
76
+ * Map over an error result
77
+ */
78
+ export function mapErr(result, fn) {
79
+ if (isErr(result)) {
80
+ return Err(fn(result.error));
81
+ }
82
+ return result;
83
+ }
84
+ /**
85
+ * Chain results (flatMap)
86
+ */
87
+ export function flatMap(result, fn) {
88
+ if (isOk(result)) {
89
+ return fn(result.data);
90
+ }
91
+ return result;
92
+ }
93
+ /**
94
+ * Pattern match on a result
95
+ */
96
+ export function match(result, handlers) {
97
+ if (isOk(result)) {
98
+ return handlers.ok(result.data);
99
+ }
100
+ return handlers.err(result.error);
101
+ }
102
+ /**
103
+ * Try to execute a function and wrap the result
104
+ */
105
+ export function tryCatch(fn) {
106
+ try {
107
+ return Ok(fn());
108
+ }
109
+ catch (error) {
110
+ return Err(error instanceof Error ? error : new Error(String(error)));
111
+ }
112
+ }
113
+ /**
114
+ * Try to execute an async function and wrap the result
115
+ */
116
+ export async function tryCatchAsync(fn) {
117
+ try {
118
+ return Ok(await fn());
119
+ }
120
+ catch (error) {
121
+ return Err(error instanceof Error ? error : new Error(String(error)));
122
+ }
123
+ }
124
+ /**
125
+ * Combine multiple results into a single result
126
+ * Returns Ok with array of values if all succeed, Err with first error otherwise
127
+ */
128
+ export function all(results) {
129
+ const values = [];
130
+ for (const result of results) {
131
+ if (isErr(result)) {
132
+ return result;
133
+ }
134
+ values.push(result.data);
135
+ }
136
+ return Ok(values);
137
+ }
138
+ /**
139
+ * Convert a nullable value to a Result
140
+ */
141
+ export function fromNullable(value, error = new Error('Value is null or undefined')) {
142
+ if (value === null || value === undefined) {
143
+ return Err(error);
144
+ }
145
+ return Ok(value);
146
+ }
147
+ /**
148
+ * Result utilities namespace
149
+ */
150
+ export const ResultUtils = {
151
+ Ok,
152
+ Err,
153
+ success,
154
+ failure,
155
+ isOk,
156
+ isErr,
157
+ isResult,
158
+ unwrap,
159
+ unwrapOr,
160
+ map,
161
+ mapErr,
162
+ flatMap,
163
+ match,
164
+ tryCatch,
165
+ tryCatchAsync,
166
+ all,
167
+ fromNullable
168
+ };
169
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/compat/result.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Result Pattern Implementation\r\n *\r\n * This module provides a Result type for functional error handling,\r\n * compatible with @oxog/types when available.\r\n */\r\n\r\nimport type { VldError } from '../errors';\r\n\r\n/**\r\n * Success result type\r\n */\r\nexport interface Ok<T> {\r\n readonly success: true;\r\n readonly data: T;\r\n readonly value: T; // Alias for @oxog/types compatibility\r\n readonly error?: never;\r\n}\r\n\r\n/**\r\n * Error result type\r\n */\r\nexport interface Err<E = Error> {\r\n readonly success: false;\r\n readonly error: E;\r\n readonly data?: never;\r\n readonly value?: never;\r\n}\r\n\r\n/**\r\n * Result type - Either success with data or failure with error\r\n */\r\nexport type Result<T, E = Error> = Ok<T> | Err<E>;\r\n\r\n/**\r\n * VLD-specific Result type with VldError\r\n */\r\nexport type VldResult<T> = Result<T, VldError>;\r\n\r\n/**\r\n * Create a success result\r\n */\r\nexport function Ok<T>(data: T): Ok<T> {\r\n return { success: true, data, value: data };\r\n}\r\n\r\n/**\r\n * Create an error result\r\n */\r\nexport function Err<E = Error>(error: E): Err<E> {\r\n return { success: false, error };\r\n}\r\n\r\n/**\r\n * Create a success result (alias)\r\n */\r\nexport const success = Ok;\r\n\r\n/**\r\n * Create a failure result (alias)\r\n */\r\nexport const failure = Err;\r\n\r\n/**\r\n * Check if result is Ok\r\n */\r\nexport function isOk<T, E>(result: Result<T, E>): result is Ok<T> {\r\n return result.success === true;\r\n}\r\n\r\n/**\r\n * Check if result is Err\r\n */\r\nexport function isErr<T, E>(result: Result<T, E>): result is Err<E> {\r\n return result.success === false;\r\n}\r\n\r\n/**\r\n * Check if value is a Result\r\n */\r\nexport function isResult<T, E>(value: unknown): value is Result<T, E> {\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n 'success' in value &&\r\n typeof (value as Result<T, E>).success === 'boolean'\r\n );\r\n}\r\n\r\n/**\r\n * Unwrap a result, throwing the error if it's an Err\r\n */\r\nexport function unwrap<T, E extends Error>(result: Result<T, E>): T {\r\n if (isOk(result)) {\r\n return result.data;\r\n }\r\n throw result.error;\r\n}\r\n\r\n/**\r\n * Unwrap a result with a default value\r\n */\r\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\r\n if (isOk(result)) {\r\n return result.data;\r\n }\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Map over a successful result\r\n */\r\nexport function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> {\r\n if (isOk(result)) {\r\n return Ok(fn(result.data));\r\n }\r\n return result as Err<E>;\r\n}\r\n\r\n/**\r\n * Map over an error result\r\n */\r\nexport function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F> {\r\n if (isErr(result)) {\r\n return Err(fn(result.error));\r\n }\r\n return result as Ok<T>;\r\n}\r\n\r\n/**\r\n * Chain results (flatMap)\r\n */\r\nexport function flatMap<T, U, E>(\r\n result: Result<T, E>,\r\n fn: (value: T) => Result<U, E>\r\n): Result<U, E> {\r\n if (isOk(result)) {\r\n return fn(result.data);\r\n }\r\n return result as Err<E>;\r\n}\r\n\r\n/**\r\n * Pattern match on a result\r\n */\r\nexport function match<T, E, U>(\r\n result: Result<T, E>,\r\n handlers: {\r\n ok: (value: T) => U;\r\n err: (error: E) => U;\r\n }\r\n): U {\r\n if (isOk(result)) {\r\n return handlers.ok(result.data);\r\n }\r\n return handlers.err(result.error);\r\n}\r\n\r\n/**\r\n * Try to execute a function and wrap the result\r\n */\r\nexport function tryCatch<T>(fn: () => T): Result<T, Error> {\r\n try {\r\n return Ok(fn());\r\n } catch (error) {\r\n return Err(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n}\r\n\r\n/**\r\n * Try to execute an async function and wrap the result\r\n */\r\nexport async function tryCatchAsync<T>(fn: () => Promise<T>): Promise<Result<T, Error>> {\r\n try {\r\n return Ok(await fn());\r\n } catch (error) {\r\n return Err(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n}\r\n\r\n/**\r\n * Combine multiple results into a single result\r\n * Returns Ok with array of values if all succeed, Err with first error otherwise\r\n */\r\nexport function all<T, E>(results: Result<T, E>[]): Result<T[], E> {\r\n const values: T[] = [];\r\n\r\n for (const result of results) {\r\n if (isErr(result)) {\r\n return result;\r\n }\r\n values.push(result.data);\r\n }\r\n\r\n return Ok(values);\r\n}\r\n\r\n/**\r\n * Convert a nullable value to a Result\r\n */\r\nexport function fromNullable<T>(\r\n value: T | null | undefined,\r\n error: Error = new Error('Value is null or undefined')\r\n): Result<T, Error> {\r\n if (value === null || value === undefined) {\r\n return Err(error);\r\n }\r\n return Ok(value);\r\n}\r\n\r\n/**\r\n * Result utilities namespace\r\n */\r\nexport const ResultUtils = {\r\n Ok,\r\n Err,\r\n success,\r\n failure,\r\n isOk,\r\n isErr,\r\n isResult,\r\n unwrap,\r\n unwrapOr,\r\n map,\r\n mapErr,\r\n flatMap,\r\n match,\r\n tryCatch,\r\n tryCatchAsync,\r\n all,\r\n fromNullable\r\n};\r\n"]}
package/dist/errors.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type Theme } from './pigment';
1
2
  export type VldErrorCode = 'invalid_type' | 'invalid_string' | 'string_too_small' | 'string_too_big' | 'invalid_email' | 'invalid_url' | 'invalid_uuid' | 'invalid_regex' | 'invalid_number' | 'too_small' | 'too_big' | 'not_integer' | 'not_finite' | 'not_safe' | 'invalid_boolean' | 'invalid_date' | 'invalid_array' | 'invalid_object' | 'unrecognized_keys' | 'invalid_union' | 'invalid_literal' | 'invalid_enum' | 'custom';
2
3
  export interface VldIssue {
3
4
  code: VldErrorCode;
@@ -16,6 +17,39 @@ export declare class VldError extends Error {
16
17
  constructor(issues: VldIssue[]);
17
18
  get firstError(): VldIssue | undefined;
18
19
  get formattedErrors(): string[];
20
+ /**
21
+ * Convert error to JSON representation
22
+ * Compatible with @oxog/types OxogError
23
+ */
24
+ toJSON(): VldErrorJSON;
25
+ /**
26
+ * Create VldError from JSON representation
27
+ */
28
+ static fromJSON(json: VldErrorJSON): VldError;
29
+ /**
30
+ * Check if a value is a VldError
31
+ */
32
+ static isVldError(value: unknown): value is VldError;
33
+ }
34
+ /**
35
+ * JSON representation of VldError
36
+ */
37
+ export interface VldErrorJSON {
38
+ name: string;
39
+ message: string;
40
+ code: string;
41
+ issues: Array<{
42
+ code: string;
43
+ path: (string | number)[];
44
+ message: string;
45
+ expected?: string;
46
+ received?: string;
47
+ keys?: string[];
48
+ minimum?: number;
49
+ maximum?: number;
50
+ exact?: number;
51
+ inclusive?: boolean;
52
+ }>;
19
53
  }
20
54
  export interface VldErrorTree {
21
55
  errors: string[];
@@ -30,10 +64,33 @@ export interface VldFlattenedError {
30
64
  * Convert VldError to a nested tree structure
31
65
  */
32
66
  export declare function treeifyError(error: VldError): VldErrorTree;
67
+ /**
68
+ * Prettify error options
69
+ */
70
+ export interface PrettifyOptions {
71
+ /** Enable colored output */
72
+ colored?: boolean;
73
+ /** Custom theme for colors */
74
+ theme?: Theme;
75
+ /** Include error code in output */
76
+ includeCode?: boolean;
77
+ /** Include expected/received values */
78
+ includeDetails?: boolean;
79
+ }
33
80
  /**
34
81
  * Convert VldError to human-readable string
35
82
  */
36
- export declare function prettifyError(error: VldError): string;
83
+ export declare function prettifyError(error: VldError, options?: PrettifyOptions): string;
84
+ /**
85
+ * Convert VldError to human-readable string with full colors
86
+ * Shorthand for prettifyError with colored: true
87
+ */
88
+ export declare function prettifyErrorColored(error: VldError, options?: Omit<PrettifyOptions, 'colored'>): string;
89
+ /**
90
+ * Convert VldError to plain text string (no colors)
91
+ * Shorthand for prettifyError with colored: false
92
+ */
93
+ export declare function prettifyErrorPlain(error: VldError, options?: Omit<PrettifyOptions, 'colored'>): string;
37
94
  /**
38
95
  * Flatten VldError for simple form validation
39
96
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,aAAa,GACb,YAAY,GACZ,UAAU,GACV,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAEvB,MAAM,EAAE,QAAQ,EAAE;IAe9B,IAAI,UAAU,IAAI,QAAQ,GAAG,SAAS,CAErC;IAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;CACF;AAGD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;CACtC;AAGD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAwD1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAwBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAiB/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GACxB,QAAQ,CAOV;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMnD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
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
- let line = `✖ ${issue.message}`;
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
- return index === 0 ? segment : `.${segment}`;
142
+ const str = index === 0 ? segment : `.${segment}`;
143
+ return colored ? theme.path(str) : str;
87
144
  }
88
145
  else {
89
- return `[${segment}]`;
146
+ const str = `[${segment}]`;
147
+ return colored ? theme.path(str) : str;
90
148
  }
91
149
  })
92
150
  .join('');
93
- line += `\n → at ${pathStr}`;
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
  */
@@ -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}"]}
@@ -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,8 @@
1
+ /**
2
+ * VLD Event System
3
+ *
4
+ * This module defines all VLD-specific events for validation lifecycle,
5
+ * plugin management, and debugging.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=events.js.map
@@ -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"]}