@oxog/vld 1.4.0 → 2.0.1

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 (242) hide show
  1. package/CHANGELOG.md +449 -333
  2. package/README.md +1171 -1130
  3. package/dist/chunks/bigint-ZKkWLdmi.js +1628 -0
  4. package/dist/chunks/bigint-ZKkWLdmi.js.map +1 -0
  5. package/dist/{coercion/string.js → chunks/date-7Iz2BGsL.js} +271 -5
  6. package/dist/chunks/date-7Iz2BGsL.js.map +1 -0
  7. package/dist/chunks/index-BoV-4S1F.js +894 -0
  8. package/dist/chunks/index-BoV-4S1F.js.map +1 -0
  9. package/dist/chunks/index-eWXdjyyy.js +426 -0
  10. package/dist/chunks/index-eWXdjyyy.js.map +1 -0
  11. package/dist/chunks/json-nIhyRPOU.js +1934 -0
  12. package/dist/chunks/json-nIhyRPOU.js.map +1 -0
  13. package/dist/{validators/unknown.js → chunks/unknown-CjSRcELI.js} +6 -3
  14. package/dist/chunks/unknown-CjSRcELI.js.map +1 -0
  15. package/dist/cjs/errors.cjs +387 -0
  16. package/dist/cjs/errors.cjs.map +1 -0
  17. package/dist/cjs/index.cjs +9815 -0
  18. package/dist/cjs/index.cjs.map +1 -0
  19. package/dist/cjs/locales/index.cjs +2877 -0
  20. package/dist/cjs/locales/index.cjs.map +1 -0
  21. package/dist/cjs/locales/lazy.cjs +3169 -0
  22. package/dist/cjs/locales/lazy.cjs.map +1 -0
  23. package/dist/cjs/mini.cjs +7161 -0
  24. package/dist/cjs/mini.cjs.map +1 -0
  25. package/dist/cli/bin.d.ts +8 -0
  26. package/dist/cli/bin.d.ts.map +1 -0
  27. package/dist/cli/commands/benchmark.d.ts +11 -0
  28. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  29. package/dist/cli/commands/validate.d.ts +11 -0
  30. package/dist/cli/commands/validate.d.ts.map +1 -0
  31. package/dist/cli/index.d.ts +59 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/codecs/index.d.ts.map +1 -1
  34. package/dist/codecs/index.js +4 -256
  35. package/dist/codecs/index.js.map +1 -1
  36. package/dist/coercion/boolean.d.ts.map +1 -1
  37. package/dist/coercion/index.d.ts +11 -0
  38. package/dist/coercion/index.d.ts.map +1 -0
  39. package/dist/coercion/{bigint.js → index.js} +7 -4
  40. package/dist/coercion/index.js.map +1 -0
  41. package/dist/compat/emitter.d.ts +73 -0
  42. package/dist/compat/emitter.d.ts.map +1 -0
  43. package/dist/compat/emitter.js +181 -0
  44. package/dist/compat/emitter.js.map +1 -0
  45. package/dist/compat/index.d.ts +15 -0
  46. package/dist/compat/index.d.ts.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 +171 -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 +106 -15
  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/index.d.ts +13 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +230 -103
  60. package/dist/index.js.map +1 -1
  61. package/dist/kernel.d.ts +29 -0
  62. package/dist/kernel.d.ts.map +1 -0
  63. package/dist/kernel.js +405 -0
  64. package/dist/kernel.js.map +1 -0
  65. package/dist/locales/af.js +4 -2
  66. package/dist/locales/af.js.map +1 -1
  67. package/dist/locales/ar.js +4 -2
  68. package/dist/locales/ar.js.map +1 -1
  69. package/dist/locales/bn.js +4 -2
  70. package/dist/locales/bn.js.map +1 -1
  71. package/dist/locales/da.js +4 -2
  72. package/dist/locales/da.js.map +1 -1
  73. package/dist/locales/de.js +4 -2
  74. package/dist/locales/de.js.map +1 -1
  75. package/dist/locales/en.js +4 -2
  76. package/dist/locales/en.js.map +1 -1
  77. package/dist/locales/es-MX.js +4 -2
  78. package/dist/locales/es-MX.js.map +1 -1
  79. package/dist/locales/es.js +4 -2
  80. package/dist/locales/es.js.map +1 -1
  81. package/dist/locales/fi.js +4 -2
  82. package/dist/locales/fi.js.map +1 -1
  83. package/dist/locales/fr.js +4 -2
  84. package/dist/locales/fr.js.map +1 -1
  85. package/dist/locales/hi.js +4 -2
  86. package/dist/locales/hi.js.map +1 -1
  87. package/dist/locales/id.js +4 -2
  88. package/dist/locales/id.js.map +1 -1
  89. package/dist/locales/index.js +3 -91
  90. package/dist/locales/index.js.map +1 -1
  91. package/dist/locales/it.js +4 -2
  92. package/dist/locales/it.js.map +1 -1
  93. package/dist/locales/ja.js +4 -2
  94. package/dist/locales/ja.js.map +1 -1
  95. package/dist/locales/ko.js +4 -2
  96. package/dist/locales/ko.js.map +1 -1
  97. package/dist/locales/lazy.d.ts +111 -0
  98. package/dist/locales/lazy.d.ts.map +1 -0
  99. package/dist/locales/lazy.js +220 -0
  100. package/dist/locales/lazy.js.map +1 -0
  101. package/dist/locales/nl.js +4 -2
  102. package/dist/locales/nl.js.map +1 -1
  103. package/dist/locales/no.js +4 -2
  104. package/dist/locales/no.js.map +1 -1
  105. package/dist/locales/pl.js +4 -2
  106. package/dist/locales/pl.js.map +1 -1
  107. package/dist/locales/pt-BR.js +4 -2
  108. package/dist/locales/pt-BR.js.map +1 -1
  109. package/dist/locales/pt.js +4 -2
  110. package/dist/locales/pt.js.map +1 -1
  111. package/dist/locales/ru.js +4 -2
  112. package/dist/locales/ru.js.map +1 -1
  113. package/dist/locales/sv.js +4 -2
  114. package/dist/locales/sv.js.map +1 -1
  115. package/dist/locales/sw.js +4 -2
  116. package/dist/locales/sw.js.map +1 -1
  117. package/dist/locales/th.js +4 -2
  118. package/dist/locales/th.js.map +1 -1
  119. package/dist/locales/tr.js +4 -2
  120. package/dist/locales/tr.js.map +1 -1
  121. package/dist/locales/vi.js +4 -2
  122. package/dist/locales/vi.js.map +1 -1
  123. package/dist/locales/zh.js +4 -2
  124. package/dist/locales/zh.js.map +1 -1
  125. package/dist/logger.d.ts +94 -0
  126. package/dist/logger.d.ts.map +1 -0
  127. package/dist/mini.d.ts +182 -0
  128. package/dist/mini.d.ts.map +1 -0
  129. package/dist/mini.js +132 -0
  130. package/dist/mini.js.map +1 -0
  131. package/dist/pigment.d.ts +124 -0
  132. package/dist/pigment.d.ts.map +1 -0
  133. package/dist/pigment.js +178 -0
  134. package/dist/pigment.js.map +1 -0
  135. package/dist/plugins/index.d.ts +8 -0
  136. package/dist/plugins/index.d.ts.map +1 -0
  137. package/dist/plugins/types.d.ts +186 -0
  138. package/dist/plugins/types.d.ts.map +1 -0
  139. package/dist/utils/codec-utils.d.ts.map +1 -1
  140. package/dist/utils/ip-validation.d.ts.map +1 -1
  141. package/dist/validators/base.d.ts +3 -0
  142. package/dist/validators/base.d.ts.map +1 -1
  143. package/dist/validators/index.js +5 -45
  144. package/dist/validators/index.js.map +1 -1
  145. package/dist/validators/object.d.ts.map +1 -1
  146. package/dist/validators/template-literal.d.ts.map +1 -1
  147. package/package.json +153 -79
  148. package/dist/coercion/bigint.js.map +0 -1
  149. package/dist/coercion/boolean.js +0 -67
  150. package/dist/coercion/boolean.js.map +0 -1
  151. package/dist/coercion/date.js +0 -52
  152. package/dist/coercion/date.js.map +0 -1
  153. package/dist/coercion/number.js +0 -160
  154. package/dist/coercion/number.js.map +0 -1
  155. package/dist/coercion/string.js.map +0 -1
  156. package/dist/locales/backup-en.js +0 -105
  157. package/dist/locales/backup-en.js.map +0 -1
  158. package/dist/locales/types.js +0 -2
  159. package/dist/locales/types.js.map +0 -1
  160. package/dist/utils/codec-utils.js +0 -223
  161. package/dist/utils/codec-utils.js.map +0 -1
  162. package/dist/utils/deep-merge.js +0 -76
  163. package/dist/utils/deep-merge.js.map +0 -1
  164. package/dist/utils/ip-validation.js +0 -78
  165. package/dist/utils/ip-validation.js.map +0 -1
  166. package/dist/utils/security.js +0 -61
  167. package/dist/utils/security.js.map +0 -1
  168. package/dist/validators/any.js +0 -25
  169. package/dist/validators/any.js.map +0 -1
  170. package/dist/validators/array.js +0 -190
  171. package/dist/validators/array.js.map +0 -1
  172. package/dist/validators/base.js +0 -491
  173. package/dist/validators/base.js.map +0 -1
  174. package/dist/validators/base64.js +0 -65
  175. package/dist/validators/base64.js.map +0 -1
  176. package/dist/validators/bigint.js +0 -142
  177. package/dist/validators/bigint.js.map +0 -1
  178. package/dist/validators/boolean.js +0 -114
  179. package/dist/validators/boolean.js.map +0 -1
  180. package/dist/validators/codec.js +0 -182
  181. package/dist/validators/codec.js.map +0 -1
  182. package/dist/validators/custom.js +0 -50
  183. package/dist/validators/custom.js.map +0 -1
  184. package/dist/validators/date.js +0 -227
  185. package/dist/validators/date.js.map +0 -1
  186. package/dist/validators/discriminated-union.js +0 -98
  187. package/dist/validators/discriminated-union.js.map +0 -1
  188. package/dist/validators/enum.js +0 -82
  189. package/dist/validators/enum.js.map +0 -1
  190. package/dist/validators/file.js +0 -114
  191. package/dist/validators/file.js.map +0 -1
  192. package/dist/validators/function.js +0 -45
  193. package/dist/validators/function.js.map +0 -1
  194. package/dist/validators/hex.js +0 -62
  195. package/dist/validators/hex.js.map +0 -1
  196. package/dist/validators/intersection.js +0 -64
  197. package/dist/validators/intersection.js.map +0 -1
  198. package/dist/validators/json.js +0 -64
  199. package/dist/validators/json.js.map +0 -1
  200. package/dist/validators/lazy.js +0 -42
  201. package/dist/validators/lazy.js.map +0 -1
  202. package/dist/validators/literal.js +0 -45
  203. package/dist/validators/literal.js.map +0 -1
  204. package/dist/validators/map.js +0 -54
  205. package/dist/validators/map.js.map +0 -1
  206. package/dist/validators/nan.js +0 -32
  207. package/dist/validators/nan.js.map +0 -1
  208. package/dist/validators/never.js +0 -29
  209. package/dist/validators/never.js.map +0 -1
  210. package/dist/validators/null.js +0 -31
  211. package/dist/validators/null.js.map +0 -1
  212. package/dist/validators/number.js +0 -225
  213. package/dist/validators/number.js.map +0 -1
  214. package/dist/validators/object.js +0 -458
  215. package/dist/validators/object.js.map +0 -1
  216. package/dist/validators/record.js +0 -128
  217. package/dist/validators/record.js.map +0 -1
  218. package/dist/validators/set.js +0 -51
  219. package/dist/validators/set.js.map +0 -1
  220. package/dist/validators/string-bool.js +0 -127
  221. package/dist/validators/string-bool.js.map +0 -1
  222. package/dist/validators/string-formats.js +0 -120
  223. package/dist/validators/string-formats.js.map +0 -1
  224. package/dist/validators/string.js +0 -253
  225. package/dist/validators/string.js.map +0 -1
  226. package/dist/validators/symbol.js +0 -42
  227. package/dist/validators/symbol.js.map +0 -1
  228. package/dist/validators/template-literal.js +0 -101
  229. package/dist/validators/template-literal.js.map +0 -1
  230. package/dist/validators/tuple.js +0 -55
  231. package/dist/validators/tuple.js.map +0 -1
  232. package/dist/validators/uint8array.js +0 -98
  233. package/dist/validators/uint8array.js.map +0 -1
  234. package/dist/validators/undefined.js +0 -31
  235. package/dist/validators/undefined.js.map +0 -1
  236. package/dist/validators/union.js +0 -126
  237. package/dist/validators/union.js.map +0 -1
  238. package/dist/validators/unknown.js.map +0 -1
  239. package/dist/validators/void.js +0 -35
  240. package/dist/validators/void.js.map +0 -1
  241. package/dist/validators/xor.js +0 -64
  242. package/dist/validators/xor.js.map +0 -1
@@ -0,0 +1,387 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * VLD Pigment - Colored Console Output
5
+ *
6
+ * This module provides ANSI color utilities for terminal output,
7
+ * compatible with @oxog/pigment when available.
8
+ */
9
+ /* eslint-enable @typescript-eslint/no-explicit-any */
10
+ /**
11
+ * Check if colors are supported in the current environment
12
+ */
13
+ function supportsColor() {
14
+ // Check for NO_COLOR environment variable
15
+ if (typeof process !== 'undefined' && process.env?.NO_COLOR) {
16
+ return false;
17
+ }
18
+ // Check for FORCE_COLOR environment variable
19
+ if (typeof process !== 'undefined' && process.env?.FORCE_COLOR) {
20
+ return true;
21
+ }
22
+ // Check for TTY
23
+ if (typeof process !== 'undefined' && process.stdout?.isTTY) {
24
+ return true;
25
+ }
26
+ // Browser environment - no ANSI colors
27
+ if (typeof window !== 'undefined') {
28
+ return false;
29
+ }
30
+ return false;
31
+ }
32
+ /**
33
+ * ANSI escape codes
34
+ */
35
+ const ANSI = {
36
+ // Reset
37
+ reset: '\x1b[0m',
38
+ // Styles
39
+ bold: '\x1b[1m',
40
+ dim: '\x1b[2m',
41
+ italic: '\x1b[3m',
42
+ underline: '\x1b[4m',
43
+ inverse: '\x1b[7m',
44
+ hidden: '\x1b[8m',
45
+ strikethrough: '\x1b[9m',
46
+ // Foreground colors
47
+ black: '\x1b[30m',
48
+ red: '\x1b[31m',
49
+ green: '\x1b[32m',
50
+ yellow: '\x1b[33m',
51
+ blue: '\x1b[34m',
52
+ magenta: '\x1b[35m',
53
+ cyan: '\x1b[36m',
54
+ white: '\x1b[37m',
55
+ gray: '\x1b[90m',
56
+ grey: '\x1b[90m',
57
+ // Bright foreground colors
58
+ brightRed: '\x1b[91m',
59
+ brightGreen: '\x1b[92m',
60
+ brightYellow: '\x1b[93m',
61
+ brightBlue: '\x1b[94m',
62
+ brightMagenta: '\x1b[95m',
63
+ brightCyan: '\x1b[96m',
64
+ brightWhite: '\x1b[97m',
65
+ // Background colors
66
+ bgBlack: '\x1b[40m',
67
+ bgRed: '\x1b[41m',
68
+ bgGreen: '\x1b[42m',
69
+ bgYellow: '\x1b[43m',
70
+ bgBlue: '\x1b[44m',
71
+ bgMagenta: '\x1b[45m',
72
+ bgCyan: '\x1b[46m',
73
+ bgWhite: '\x1b[47m'};
74
+ /**
75
+ * Create a color function
76
+ */
77
+ function createColorFn(code) {
78
+ const enabled = supportsColor();
79
+ return (text) => {
80
+ if (!enabled || text === '')
81
+ return text;
82
+ return `${code}${text}${ANSI.reset}`;
83
+ };
84
+ }
85
+ /**
86
+ * Pigment - Color utilities for terminal output
87
+ */
88
+ const pigment = {
89
+ // Styles
90
+ bold: createColorFn(ANSI.bold),
91
+ dim: createColorFn(ANSI.dim),
92
+ italic: createColorFn(ANSI.italic),
93
+ underline: createColorFn(ANSI.underline),
94
+ inverse: createColorFn(ANSI.inverse),
95
+ hidden: createColorFn(ANSI.hidden),
96
+ strikethrough: createColorFn(ANSI.strikethrough),
97
+ // Foreground colors
98
+ black: createColorFn(ANSI.black),
99
+ red: createColorFn(ANSI.red),
100
+ green: createColorFn(ANSI.green),
101
+ yellow: createColorFn(ANSI.yellow),
102
+ blue: createColorFn(ANSI.blue),
103
+ magenta: createColorFn(ANSI.magenta),
104
+ cyan: createColorFn(ANSI.cyan),
105
+ white: createColorFn(ANSI.white),
106
+ gray: createColorFn(ANSI.gray),
107
+ grey: createColorFn(ANSI.grey),
108
+ // Bright colors
109
+ brightRed: createColorFn(ANSI.brightRed),
110
+ brightGreen: createColorFn(ANSI.brightGreen),
111
+ brightYellow: createColorFn(ANSI.brightYellow),
112
+ brightBlue: createColorFn(ANSI.brightBlue),
113
+ brightMagenta: createColorFn(ANSI.brightMagenta),
114
+ brightCyan: createColorFn(ANSI.brightCyan),
115
+ brightWhite: createColorFn(ANSI.brightWhite),
116
+ // Background colors
117
+ bgBlack: createColorFn(ANSI.bgBlack),
118
+ bgRed: createColorFn(ANSI.bgRed),
119
+ bgGreen: createColorFn(ANSI.bgGreen),
120
+ bgYellow: createColorFn(ANSI.bgYellow),
121
+ bgBlue: createColorFn(ANSI.bgBlue),
122
+ bgMagenta: createColorFn(ANSI.bgMagenta),
123
+ bgCyan: createColorFn(ANSI.bgCyan),
124
+ bgWhite: createColorFn(ANSI.bgWhite),
125
+ // Semantic colors
126
+ success: createColorFn(ANSI.green),
127
+ error: createColorFn(ANSI.red),
128
+ warning: createColorFn(ANSI.yellow),
129
+ info: createColorFn(ANSI.blue),
130
+ muted: createColorFn(ANSI.gray)};
131
+ // Aliases for convenience
132
+ const { bold, dim, red, green, yellow, blue, cyan} = pigment;
133
+ /**
134
+ * Default VLD theme for error formatting
135
+ */
136
+ const vldTheme = {
137
+ error: red,
138
+ success: green,
139
+ warning: yellow,
140
+ info: blue,
141
+ muted: dim,
142
+ path: cyan,
143
+ value: yellow,
144
+ key: bold,
145
+ symbol: red
146
+ };
147
+
148
+ // VLD Error System - Advanced error formatting and utilities
149
+ class VldError extends Error {
150
+ constructor(issues) {
151
+ const message = issues.length === 1 ? issues[0].message : `${issues.length} validation errors`;
152
+ super(message);
153
+ this.name = 'VldError';
154
+ this.issues = issues;
155
+ // Maintain proper stack trace
156
+ if (Error.captureStackTrace) {
157
+ Error.captureStackTrace(this, VldError);
158
+ }
159
+ }
160
+ get firstError() {
161
+ return this.issues[0];
162
+ }
163
+ get formattedErrors() {
164
+ return this.issues.map((issue) => issue.message);
165
+ }
166
+ /**
167
+ * Convert error to JSON representation
168
+ * Compatible with @oxog/types OxogError
169
+ */
170
+ toJSON() {
171
+ return {
172
+ name: this.name,
173
+ message: this.message,
174
+ code: 'VLD_VALIDATION_ERROR',
175
+ issues: this.issues.map((issue) => ({
176
+ code: issue.code,
177
+ path: issue.path,
178
+ message: issue.message,
179
+ expected: issue.expected,
180
+ received: issue.received,
181
+ keys: issue.keys,
182
+ minimum: issue.minimum,
183
+ maximum: issue.maximum,
184
+ exact: issue.exact,
185
+ inclusive: issue.inclusive
186
+ }))
187
+ };
188
+ }
189
+ /**
190
+ * Create VldError from JSON representation
191
+ */
192
+ static fromJSON(json) {
193
+ const issues = json.issues.map((issue) => ({
194
+ code: issue.code,
195
+ path: issue.path,
196
+ message: issue.message,
197
+ expected: issue.expected,
198
+ received: issue.received,
199
+ keys: issue.keys,
200
+ minimum: issue.minimum,
201
+ maximum: issue.maximum,
202
+ exact: issue.exact,
203
+ inclusive: issue.inclusive
204
+ }));
205
+ return new VldError(issues);
206
+ }
207
+ /**
208
+ * Check if a value is a VldError
209
+ */
210
+ static isVldError(value) {
211
+ return value instanceof VldError;
212
+ }
213
+ }
214
+ /**
215
+ * Convert VldError to a nested tree structure
216
+ */
217
+ function treeifyError(error) {
218
+ const tree = { errors: [] };
219
+ for (const issue of error.issues) {
220
+ let currentNode = tree;
221
+ const path = issue.path;
222
+ // Navigate to the correct position in the tree
223
+ for (let i = 0; i < path.length; i++) {
224
+ const segment = path[i];
225
+ const isLast = i === path.length - 1;
226
+ if (typeof segment === 'string') {
227
+ // Object property
228
+ if (!currentNode.properties) {
229
+ currentNode.properties = {};
230
+ }
231
+ if (!currentNode.properties[segment]) {
232
+ currentNode.properties[segment] = { errors: [] };
233
+ }
234
+ if (isLast) {
235
+ currentNode.properties[segment].errors.push(issue.message);
236
+ }
237
+ else {
238
+ currentNode = currentNode.properties[segment];
239
+ }
240
+ }
241
+ else if (typeof segment === 'number') {
242
+ // Array index
243
+ if (!currentNode.items) {
244
+ currentNode.items = [];
245
+ }
246
+ while (currentNode.items.length <= segment) {
247
+ currentNode.items.push(undefined);
248
+ }
249
+ if (!currentNode.items[segment]) {
250
+ currentNode.items[segment] = { errors: [] };
251
+ }
252
+ if (isLast) {
253
+ currentNode.items[segment].errors.push(issue.message);
254
+ }
255
+ else {
256
+ currentNode = currentNode.items[segment];
257
+ }
258
+ }
259
+ }
260
+ // If path is empty, add to root errors
261
+ if (path.length === 0) {
262
+ tree.errors.push(issue.message);
263
+ }
264
+ }
265
+ return tree;
266
+ }
267
+ /**
268
+ * Convert VldError to human-readable string
269
+ */
270
+ function prettifyError(error, options = {}) {
271
+ const { colored = true, theme = vldTheme, includeCode = false, includeDetails = false } = options;
272
+ const lines = [];
273
+ for (const issue of error.issues) {
274
+ // Symbol and message
275
+ const symbol = colored ? theme.symbol('✖') : '✖';
276
+ const message = colored ? theme.error(issue.message) : issue.message;
277
+ let line = `${symbol} ${message}`;
278
+ // Error code
279
+ if (includeCode) {
280
+ const code = colored ? theme.muted(`[${issue.code}]`) : `[${issue.code}]`;
281
+ line += ` ${code}`;
282
+ }
283
+ // Path
284
+ if (issue.path.length > 0) {
285
+ const pathStr = issue.path
286
+ .map((segment, index) => {
287
+ if (typeof segment === 'string') {
288
+ const str = index === 0 ? segment : `.${segment}`;
289
+ return colored ? theme.path(str) : str;
290
+ }
291
+ else {
292
+ const str = `[${segment}]`;
293
+ return colored ? theme.path(str) : str;
294
+ }
295
+ })
296
+ .join('');
297
+ const arrow = colored ? theme.muted('→ at ') : '→ at ';
298
+ line += `\n ${arrow}${pathStr}`;
299
+ }
300
+ // Details
301
+ if (includeDetails) {
302
+ if (issue.expected) {
303
+ const expected = colored
304
+ ? theme.muted('expected: ') + theme.success(issue.expected)
305
+ : `expected: ${issue.expected}`;
306
+ line += `\n ${expected}`;
307
+ }
308
+ if (issue.received) {
309
+ const received = colored
310
+ ? theme.muted('received: ') + theme.warning(issue.received)
311
+ : `received: ${issue.received}`;
312
+ line += `\n ${received}`;
313
+ }
314
+ }
315
+ lines.push(line);
316
+ }
317
+ return lines.join('\n');
318
+ }
319
+ /**
320
+ * Convert VldError to human-readable string with full colors
321
+ * Shorthand for prettifyError with colored: true
322
+ */
323
+ function prettifyErrorColored(error, options = {}) {
324
+ return prettifyError(error, { ...options, colored: true });
325
+ }
326
+ /**
327
+ * Convert VldError to plain text string (no colors)
328
+ * Shorthand for prettifyError with colored: false
329
+ */
330
+ function prettifyErrorPlain(error, options = {}) {
331
+ return prettifyError(error, { ...options, colored: false });
332
+ }
333
+ /**
334
+ * Flatten VldError for simple form validation
335
+ */
336
+ function flattenError(error) {
337
+ const formErrors = [];
338
+ const fieldErrors = {};
339
+ for (const issue of error.issues) {
340
+ if (issue.path.length === 0) {
341
+ formErrors.push(issue.message);
342
+ }
343
+ else {
344
+ const fieldName = issue.path[0].toString();
345
+ if (!fieldErrors[fieldName]) {
346
+ fieldErrors[fieldName] = [];
347
+ }
348
+ fieldErrors[fieldName].push(issue.message);
349
+ }
350
+ }
351
+ return { formErrors, fieldErrors };
352
+ }
353
+ /**
354
+ * Create a validation issue
355
+ */
356
+ function createIssue(code, path, message, extra) {
357
+ return {
358
+ code,
359
+ path: [...path],
360
+ message,
361
+ ...extra
362
+ };
363
+ }
364
+ /**
365
+ * Helper to determine the type of a value for error messages
366
+ */
367
+ function getValueType(value) {
368
+ if (value === null)
369
+ return 'null';
370
+ if (value === undefined)
371
+ return 'undefined';
372
+ if (Array.isArray(value))
373
+ return 'array';
374
+ if (value instanceof Date)
375
+ return 'date';
376
+ return typeof value;
377
+ }
378
+
379
+ exports.VldError = VldError;
380
+ exports.createIssue = createIssue;
381
+ exports.flattenError = flattenError;
382
+ exports.getValueType = getValueType;
383
+ exports.prettifyError = prettifyError;
384
+ exports.prettifyErrorColored = prettifyErrorColored;
385
+ exports.prettifyErrorPlain = prettifyErrorPlain;
386
+ exports.treeifyError = treeifyError;
387
+ //# sourceMappingURL=errors.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.cjs","sources":["../../src/pigment.ts","../../src/errors.ts"],"sourcesContent":["/**\r\n * VLD Pigment - Colored Console Output\r\n *\r\n * This module provides ANSI color utilities for terminal output,\r\n * compatible with @oxog/pigment when available.\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\ndeclare const window: any;\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n/**\r\n * Check if colors are supported in the current environment\r\n */\r\nexport function supportsColor(): boolean {\r\n // Check for NO_COLOR environment variable\r\n if (typeof process !== 'undefined' && process.env?.NO_COLOR) {\r\n return false;\r\n }\r\n\r\n // Check for FORCE_COLOR environment variable\r\n if (typeof process !== 'undefined' && process.env?.FORCE_COLOR) {\r\n return true;\r\n }\r\n\r\n // Check for TTY\r\n if (typeof process !== 'undefined' && process.stdout?.isTTY) {\r\n return true;\r\n }\r\n\r\n // Browser environment - no ANSI colors\r\n if (typeof window !== 'undefined') {\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * ANSI escape codes\r\n */\r\nconst ANSI = {\r\n // Reset\r\n reset: '\\x1b[0m',\r\n\r\n // Styles\r\n bold: '\\x1b[1m',\r\n dim: '\\x1b[2m',\r\n italic: '\\x1b[3m',\r\n underline: '\\x1b[4m',\r\n blink: '\\x1b[5m',\r\n inverse: '\\x1b[7m',\r\n hidden: '\\x1b[8m',\r\n strikethrough: '\\x1b[9m',\r\n\r\n // Foreground colors\r\n black: '\\x1b[30m',\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n magenta: '\\x1b[35m',\r\n cyan: '\\x1b[36m',\r\n white: '\\x1b[37m',\r\n gray: '\\x1b[90m',\r\n grey: '\\x1b[90m',\r\n\r\n // Bright foreground colors\r\n brightRed: '\\x1b[91m',\r\n brightGreen: '\\x1b[92m',\r\n brightYellow: '\\x1b[93m',\r\n brightBlue: '\\x1b[94m',\r\n brightMagenta: '\\x1b[95m',\r\n brightCyan: '\\x1b[96m',\r\n brightWhite: '\\x1b[97m',\r\n\r\n // Background colors\r\n bgBlack: '\\x1b[40m',\r\n bgRed: '\\x1b[41m',\r\n bgGreen: '\\x1b[42m',\r\n bgYellow: '\\x1b[43m',\r\n bgBlue: '\\x1b[44m',\r\n bgMagenta: '\\x1b[45m',\r\n bgCyan: '\\x1b[46m',\r\n bgWhite: '\\x1b[47m',\r\n\r\n // Bright background colors\r\n bgBrightRed: '\\x1b[101m',\r\n bgBrightGreen: '\\x1b[102m',\r\n bgBrightYellow: '\\x1b[103m',\r\n bgBrightBlue: '\\x1b[104m',\r\n bgBrightMagenta: '\\x1b[105m',\r\n bgBrightCyan: '\\x1b[106m',\r\n bgBrightWhite: '\\x1b[107m'\r\n} as const;\r\n\r\n/**\r\n * Create a color function\r\n */\r\nfunction createColorFn(code: string): (text: string) => string {\r\n const enabled = supportsColor();\r\n return (text: string): string => {\r\n if (!enabled || text === '') return text;\r\n return `${code}${text}${ANSI.reset}`;\r\n };\r\n}\r\n\r\n/**\r\n * Pigment - Color utilities for terminal output\r\n */\r\nexport const pigment = {\r\n // Check support\r\n supportsColor,\r\n\r\n // Reset\r\n reset: (text: string): string => text,\r\n\r\n // Styles\r\n bold: createColorFn(ANSI.bold),\r\n dim: createColorFn(ANSI.dim),\r\n italic: createColorFn(ANSI.italic),\r\n underline: createColorFn(ANSI.underline),\r\n inverse: createColorFn(ANSI.inverse),\r\n hidden: createColorFn(ANSI.hidden),\r\n strikethrough: createColorFn(ANSI.strikethrough),\r\n\r\n // Foreground colors\r\n black: createColorFn(ANSI.black),\r\n red: createColorFn(ANSI.red),\r\n green: createColorFn(ANSI.green),\r\n yellow: createColorFn(ANSI.yellow),\r\n blue: createColorFn(ANSI.blue),\r\n magenta: createColorFn(ANSI.magenta),\r\n cyan: createColorFn(ANSI.cyan),\r\n white: createColorFn(ANSI.white),\r\n gray: createColorFn(ANSI.gray),\r\n grey: createColorFn(ANSI.grey),\r\n\r\n // Bright colors\r\n brightRed: createColorFn(ANSI.brightRed),\r\n brightGreen: createColorFn(ANSI.brightGreen),\r\n brightYellow: createColorFn(ANSI.brightYellow),\r\n brightBlue: createColorFn(ANSI.brightBlue),\r\n brightMagenta: createColorFn(ANSI.brightMagenta),\r\n brightCyan: createColorFn(ANSI.brightCyan),\r\n brightWhite: createColorFn(ANSI.brightWhite),\r\n\r\n // Background colors\r\n bgBlack: createColorFn(ANSI.bgBlack),\r\n bgRed: createColorFn(ANSI.bgRed),\r\n bgGreen: createColorFn(ANSI.bgGreen),\r\n bgYellow: createColorFn(ANSI.bgYellow),\r\n bgBlue: createColorFn(ANSI.bgBlue),\r\n bgMagenta: createColorFn(ANSI.bgMagenta),\r\n bgCyan: createColorFn(ANSI.bgCyan),\r\n bgWhite: createColorFn(ANSI.bgWhite),\r\n\r\n // Semantic colors\r\n success: createColorFn(ANSI.green),\r\n error: createColorFn(ANSI.red),\r\n warning: createColorFn(ANSI.yellow),\r\n info: createColorFn(ANSI.blue),\r\n muted: createColorFn(ANSI.gray),\r\n\r\n // Combine multiple styles\r\n combine: (...codes: string[]) =>\r\n (text: string): string => {\r\n if (!supportsColor()) return text;\r\n return `${codes.join('')}${text}${ANSI.reset}`;\r\n },\r\n\r\n // Strip ANSI codes from string\r\n strip: (text: string): string =>\r\n text.replace(\r\n /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,\r\n ''\r\n ),\r\n\r\n // Get raw ANSI codes\r\n codes: ANSI\r\n};\r\n\r\n// Aliases for convenience\r\nexport const {\r\n bold,\r\n dim,\r\n italic,\r\n underline,\r\n red,\r\n green,\r\n yellow,\r\n blue,\r\n magenta,\r\n cyan,\r\n white,\r\n gray,\r\n grey,\r\n success,\r\n error,\r\n warning,\r\n info,\r\n muted,\r\n strip\r\n} = pigment;\r\n\r\n/**\r\n * Create a custom theme\r\n */\r\nexport interface Theme {\r\n error: (text: string) => string;\r\n success: (text: string) => string;\r\n warning: (text: string) => string;\r\n info: (text: string) => string;\r\n muted: (text: string) => string;\r\n path: (text: string) => string;\r\n value: (text: string) => string;\r\n key: (text: string) => string;\r\n symbol: (text: string) => string;\r\n}\r\n\r\n/**\r\n * Default VLD theme for error formatting\r\n */\r\nexport const vldTheme: Theme = {\r\n error: red,\r\n success: green,\r\n warning: yellow,\r\n info: blue,\r\n muted: dim,\r\n path: cyan,\r\n value: yellow,\r\n key: bold,\r\n symbol: red\r\n};\r\n\r\n/**\r\n * Create a custom theme\r\n */\r\nexport function createTheme(overrides: Partial<Theme> = {}): Theme {\r\n return { ...vldTheme, ...overrides };\r\n}\r\n\r\nexport default pigment;\r\n","// 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}"],"names":[],"mappings":"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"}