@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,181 @@
1
+ /**
2
+ * Event Emitter Implementation
3
+ *
4
+ * This module provides a type-safe event emitter,
5
+ * compatible with @oxog/emitter when available.
6
+ */
7
+ /**
8
+ * Create a type-safe event emitter
9
+ */
10
+ function createEmitter() {
11
+ const listeners = new Map();
12
+ const getListeners = (event) => {
13
+ if (!listeners.has(event)) {
14
+ listeners.set(event, []);
15
+ }
16
+ return listeners.get(event);
17
+ };
18
+ const sortListeners = (event) => {
19
+ const eventListeners = getListeners(event);
20
+ eventListeners.sort((a, b) => b.priority - a.priority);
21
+ };
22
+ const on = (event, handler, options = {}) => {
23
+ const entry = {
24
+ handler,
25
+ once: options.once ?? false,
26
+ priority: options.priority ?? 0
27
+ };
28
+ getListeners(event).push(entry);
29
+ sortListeners(event);
30
+ // Return unsubscribe function
31
+ return () => off(event, handler);
32
+ };
33
+ const once = (event, handler) => {
34
+ return on(event, handler, { once: true });
35
+ };
36
+ const off = (event, handler) => {
37
+ const eventListeners = listeners.get(event);
38
+ if (!eventListeners)
39
+ return;
40
+ const index = eventListeners.findIndex((entry) => entry.handler === handler);
41
+ if (index !== -1) {
42
+ eventListeners.splice(index, 1);
43
+ }
44
+ };
45
+ const emit = (event, payload) => {
46
+ const eventListeners = listeners.get(event);
47
+ if (!eventListeners || eventListeners.length === 0)
48
+ return;
49
+ // Create a copy to allow modifications during iteration
50
+ const listenersToCall = [...eventListeners];
51
+ for (const entry of listenersToCall) {
52
+ if (entry.once) {
53
+ off(event, entry.handler);
54
+ }
55
+ try {
56
+ entry.handler(payload);
57
+ }
58
+ catch (error) {
59
+ // Log error but don't stop other handlers
60
+ console.error(`Error in event handler for "${String(event)}":`, error);
61
+ }
62
+ }
63
+ };
64
+ const emitAsync = async (event, payload) => {
65
+ const eventListeners = listeners.get(event);
66
+ if (!eventListeners || eventListeners.length === 0)
67
+ return;
68
+ // Create a copy to allow modifications during iteration
69
+ const listenersToCall = [...eventListeners];
70
+ for (const entry of listenersToCall) {
71
+ if (entry.once) {
72
+ off(event, entry.handler);
73
+ }
74
+ try {
75
+ await entry.handler(payload);
76
+ }
77
+ catch (error) {
78
+ // Log error but don't stop other handlers
79
+ console.error(`Error in async event handler for "${String(event)}":`, error);
80
+ }
81
+ }
82
+ };
83
+ const removeAllListeners = (event) => {
84
+ if (event !== undefined) {
85
+ listeners.delete(event);
86
+ }
87
+ else {
88
+ listeners.clear();
89
+ }
90
+ };
91
+ const listenerCount = (event) => {
92
+ return listeners.get(event)?.length ?? 0;
93
+ };
94
+ const eventNames = () => {
95
+ return Array.from(listeners.keys()).filter((key) => {
96
+ const eventListeners = listeners.get(key);
97
+ return eventListeners !== undefined && eventListeners.length > 0;
98
+ });
99
+ };
100
+ return {
101
+ on,
102
+ once,
103
+ off,
104
+ emit,
105
+ emitAsync,
106
+ removeAllListeners,
107
+ listenerCount,
108
+ eventNames
109
+ };
110
+ }
111
+ /**
112
+ * Mixin to add event emitter capabilities to a class
113
+ */
114
+ function withEmitter() {
115
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
+ return function (Base) {
117
+ return class extends Base {
118
+ constructor() {
119
+ super(...arguments);
120
+ /** @internal */
121
+ this._emitter = createEmitter();
122
+ }
123
+ on(event, handler, options) {
124
+ return this._emitter.on(event, handler, options);
125
+ }
126
+ once(event, handler) {
127
+ return this._emitter.once(event, handler);
128
+ }
129
+ off(event, handler) {
130
+ this._emitter.off(event, handler);
131
+ }
132
+ emit(event, payload) {
133
+ this._emitter.emit(event, payload);
134
+ }
135
+ async emitAsync(event, payload) {
136
+ await this._emitter.emitAsync(event, payload);
137
+ }
138
+ };
139
+ };
140
+ }
141
+ /**
142
+ * Create an event bus for global event handling
143
+ */
144
+ function createEventBus() {
145
+ const emitter = createEmitter();
146
+ const createScope = () => {
147
+ const unsubscribers = [];
148
+ const scopedEmitter = {
149
+ on: (event, handler, options) => {
150
+ const unsubscribe = emitter.on(event, handler, options);
151
+ unsubscribers.push(unsubscribe);
152
+ return unsubscribe;
153
+ },
154
+ once: (event, handler) => {
155
+ const unsubscribe = emitter.once(event, handler);
156
+ unsubscribers.push(unsubscribe);
157
+ return unsubscribe;
158
+ },
159
+ off: emitter.off,
160
+ emit: emitter.emit,
161
+ emitAsync: emitter.emitAsync,
162
+ removeAllListeners: emitter.removeAllListeners,
163
+ listenerCount: emitter.listenerCount,
164
+ eventNames: emitter.eventNames,
165
+ dispose: () => {
166
+ for (const unsubscribe of unsubscribers) {
167
+ unsubscribe();
168
+ }
169
+ unsubscribers.length = 0;
170
+ }
171
+ };
172
+ return scopedEmitter;
173
+ };
174
+ return {
175
+ ...emitter,
176
+ createScope
177
+ };
178
+ }
179
+
180
+ export { createEmitter, createEventBus, withEmitter };
181
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sources":["../../src/compat/emitter.ts"],"sourcesContent":["/**\r\n * Event Emitter Implementation\r\n *\r\n * This module provides a type-safe event emitter,\r\n * compatible with @oxog/emitter when available.\r\n */\r\n\r\n/**\r\n * Event map type - maps event names to their payload types\r\n */\r\nexport type EventMap = Record<string, unknown>;\r\n\r\n/**\r\n * Event handler function type\r\n */\r\nexport type EventHandler<T = unknown> = (payload: T) => void | Promise<void>;\r\n\r\n/**\r\n * Listener options\r\n */\r\nexport interface ListenerOptions {\r\n /** Remove listener after first call */\r\n once?: boolean;\r\n /** Listener priority (higher = called first) */\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * Internal listener entry\r\n */\r\ninterface ListenerEntry<T = unknown> {\r\n handler: EventHandler<T>;\r\n once: boolean;\r\n priority: number;\r\n}\r\n\r\n/**\r\n * Emitter interface\r\n */\r\nexport interface Emitter<TEvents extends EventMap = EventMap> {\r\n /** Subscribe to an event */\r\n on<K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>,\r\n options?: ListenerOptions\r\n ): () => void;\r\n\r\n /** Subscribe to an event once */\r\n once<K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>\r\n ): () => void;\r\n\r\n /** Unsubscribe from an event */\r\n off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void;\r\n\r\n /** Emit an event */\r\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void;\r\n\r\n /** Emit an event and wait for all handlers */\r\n emitAsync<K extends keyof TEvents>(event: K, payload: TEvents[K]): Promise<void>;\r\n\r\n /** Remove all listeners for an event or all events */\r\n removeAllListeners<K extends keyof TEvents>(event?: K): void;\r\n\r\n /** Get listener count for an event */\r\n listenerCount<K extends keyof TEvents>(event: K): number;\r\n\r\n /** Get all event names with listeners */\r\n eventNames(): (keyof TEvents)[];\r\n}\r\n\r\n/**\r\n * Create a type-safe event emitter\r\n */\r\nexport function createEmitter<TEvents extends EventMap = EventMap>(): Emitter<TEvents> {\r\n const listeners = new Map<keyof TEvents, ListenerEntry<unknown>[]>();\r\n\r\n const getListeners = <K extends keyof TEvents>(event: K): ListenerEntry<TEvents[K]>[] => {\r\n if (!listeners.has(event)) {\r\n listeners.set(event, []);\r\n }\r\n return listeners.get(event) as ListenerEntry<TEvents[K]>[];\r\n };\r\n\r\n const sortListeners = <K extends keyof TEvents>(event: K): void => {\r\n const eventListeners = getListeners(event);\r\n eventListeners.sort((a, b) => b.priority - a.priority);\r\n };\r\n\r\n const on = <K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>,\r\n options: ListenerOptions = {}\r\n ): (() => void) => {\r\n const entry: ListenerEntry<TEvents[K]> = {\r\n handler,\r\n once: options.once ?? false,\r\n priority: options.priority ?? 0\r\n };\r\n\r\n getListeners(event).push(entry);\r\n sortListeners(event);\r\n\r\n // Return unsubscribe function\r\n return () => off(event, handler);\r\n };\r\n\r\n const once = <K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>\r\n ): (() => void) => {\r\n return on(event, handler, { once: true });\r\n };\r\n\r\n const off = <K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>\r\n ): void => {\r\n const eventListeners = listeners.get(event);\r\n if (!eventListeners) return;\r\n\r\n const index = eventListeners.findIndex((entry) => entry.handler === handler);\r\n if (index !== -1) {\r\n eventListeners.splice(index, 1);\r\n }\r\n };\r\n\r\n const emit = <K extends keyof TEvents>(event: K, payload: TEvents[K]): void => {\r\n const eventListeners = listeners.get(event);\r\n if (!eventListeners || eventListeners.length === 0) return;\r\n\r\n // Create a copy to allow modifications during iteration\r\n const listenersToCall = [...eventListeners];\r\n\r\n for (const entry of listenersToCall) {\r\n if (entry.once) {\r\n off(event, entry.handler as EventHandler<TEvents[K]>);\r\n }\r\n\r\n try {\r\n entry.handler(payload);\r\n } catch (error) {\r\n // Log error but don't stop other handlers\r\n console.error(`Error in event handler for \"${String(event)}\":`, error);\r\n }\r\n }\r\n };\r\n\r\n const emitAsync = async <K extends keyof TEvents>(\r\n event: K,\r\n payload: TEvents[K]\r\n ): Promise<void> => {\r\n const eventListeners = listeners.get(event);\r\n if (!eventListeners || eventListeners.length === 0) return;\r\n\r\n // Create a copy to allow modifications during iteration\r\n const listenersToCall = [...eventListeners];\r\n\r\n for (const entry of listenersToCall) {\r\n if (entry.once) {\r\n off(event, entry.handler as EventHandler<TEvents[K]>);\r\n }\r\n\r\n try {\r\n await entry.handler(payload);\r\n } catch (error) {\r\n // Log error but don't stop other handlers\r\n console.error(`Error in async event handler for \"${String(event)}\":`, error);\r\n }\r\n }\r\n };\r\n\r\n const removeAllListeners = <K extends keyof TEvents>(event?: K): void => {\r\n if (event !== undefined) {\r\n listeners.delete(event);\r\n } else {\r\n listeners.clear();\r\n }\r\n };\r\n\r\n const listenerCount = <K extends keyof TEvents>(event: K): number => {\r\n return listeners.get(event)?.length ?? 0;\r\n };\r\n\r\n const eventNames = (): (keyof TEvents)[] => {\r\n return Array.from(listeners.keys()).filter((key) => {\r\n const eventListeners = listeners.get(key);\r\n return eventListeners !== undefined && eventListeners.length > 0;\r\n });\r\n };\r\n\r\n return {\r\n on,\r\n once,\r\n off,\r\n emit,\r\n emitAsync,\r\n removeAllListeners,\r\n listenerCount,\r\n eventNames\r\n };\r\n}\r\n\r\n/**\r\n * Mixin to add event emitter capabilities to a class\r\n */\r\nexport function withEmitter<TEvents extends EventMap>() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return function <TBase extends new (...args: any[]) => object>(Base: TBase) {\r\n return class extends Base {\r\n /** @internal */\r\n _emitter = createEmitter<TEvents>();\r\n\r\n on<K extends keyof TEvents>(\r\n event: K,\r\n handler: EventHandler<TEvents[K]>,\r\n options?: ListenerOptions\r\n ): () => void {\r\n return this._emitter.on(event, handler, options);\r\n }\r\n\r\n once<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): () => void {\r\n return this._emitter.once(event, handler);\r\n }\r\n\r\n off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void {\r\n this._emitter.off(event, handler);\r\n }\r\n\r\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\r\n this._emitter.emit(event, payload);\r\n }\r\n\r\n async emitAsync<K extends keyof TEvents>(\r\n event: K,\r\n payload: TEvents[K]\r\n ): Promise<void> {\r\n await this._emitter.emitAsync(event, payload);\r\n }\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Create an event bus for global event handling\r\n */\r\nexport function createEventBus<TEvents extends EventMap>(): Emitter<TEvents> & {\r\n /** Create a scoped emitter that auto-cleans up */\r\n createScope(): Emitter<TEvents> & { dispose(): void };\r\n} {\r\n const emitter = createEmitter<TEvents>();\r\n\r\n const createScope = (): Emitter<TEvents> & { dispose(): void } => {\r\n const unsubscribers: (() => void)[] = [];\r\n\r\n const scopedEmitter: Emitter<TEvents> & { dispose(): void } = {\r\n on: (event, handler, options) => {\r\n const unsubscribe = emitter.on(event, handler, options);\r\n unsubscribers.push(unsubscribe);\r\n return unsubscribe;\r\n },\r\n once: (event, handler) => {\r\n const unsubscribe = emitter.once(event, handler);\r\n unsubscribers.push(unsubscribe);\r\n return unsubscribe;\r\n },\r\n off: emitter.off,\r\n emit: emitter.emit,\r\n emitAsync: emitter.emitAsync,\r\n removeAllListeners: emitter.removeAllListeners,\r\n listenerCount: emitter.listenerCount,\r\n eventNames: emitter.eventNames,\r\n dispose: () => {\r\n for (const unsubscribe of unsubscribers) {\r\n unsubscribe();\r\n }\r\n unsubscribers.length = 0;\r\n }\r\n };\r\n\r\n return scopedEmitter;\r\n };\r\n\r\n return {\r\n ...emitter,\r\n createScope\r\n };\r\n}\r\n\r\nexport type { EventHandler as VldEventHandler };\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * VLD Compatibility Layer
3
+ *
4
+ * This module provides internal implementations of @oxog ecosystem features
5
+ * that can be replaced with actual @oxog packages when available.
6
+ *
7
+ * Features:
8
+ * - Result pattern (@oxog/types compatibility)
9
+ * - Event emitter (@oxog/emitter compatibility)
10
+ */
11
+ export type { Result, VldResult } from './result';
12
+ export { Ok, Err, success, failure, isOk, isErr, isResult, unwrap, unwrapOr, map, mapErr, flatMap, match, tryCatch, tryCatchAsync, all, fromNullable, ResultUtils } from './result';
13
+ export type { EventMap, EventHandler, ListenerOptions, Emitter, VldEventHandler } from './emitter';
14
+ export { createEmitter, createEventBus, withEmitter } from './emitter';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,EACL,EAAE,EACF,GAAG,EACH,OAAO,EACP,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAa,EACb,GAAG,EACH,YAAY,EACZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,128 @@
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
+ import type { VldError } from '../errors';
8
+ /**
9
+ * Success result type
10
+ */
11
+ export interface Ok<T> {
12
+ readonly success: true;
13
+ readonly data: T;
14
+ readonly value: T;
15
+ readonly error?: never;
16
+ }
17
+ /**
18
+ * Error result type
19
+ */
20
+ export interface Err<E = Error> {
21
+ readonly success: false;
22
+ readonly error: E;
23
+ readonly data?: never;
24
+ readonly value?: never;
25
+ }
26
+ /**
27
+ * Result type - Either success with data or failure with error
28
+ */
29
+ export type Result<T, E = Error> = Ok<T> | Err<E>;
30
+ /**
31
+ * VLD-specific Result type with VldError
32
+ */
33
+ export type VldResult<T> = Result<T, VldError>;
34
+ /**
35
+ * Create a success result
36
+ */
37
+ export declare function Ok<T>(data: T): Ok<T>;
38
+ /**
39
+ * Create an error result
40
+ */
41
+ export declare function Err<E = Error>(error: E): Err<E>;
42
+ /**
43
+ * Create a success result (alias)
44
+ */
45
+ export declare const success: typeof Ok;
46
+ /**
47
+ * Create a failure result (alias)
48
+ */
49
+ export declare const failure: typeof Err;
50
+ /**
51
+ * Check if result is Ok
52
+ */
53
+ export declare function isOk<T, E>(result: Result<T, E>): result is Ok<T>;
54
+ /**
55
+ * Check if result is Err
56
+ */
57
+ export declare function isErr<T, E>(result: Result<T, E>): result is Err<E>;
58
+ /**
59
+ * Check if value is a Result
60
+ */
61
+ export declare function isResult<T, E>(value: unknown): value is Result<T, E>;
62
+ /**
63
+ * Unwrap a result, throwing the error if it's an Err
64
+ */
65
+ export declare function unwrap<T, E extends Error>(result: Result<T, E>): T;
66
+ /**
67
+ * Unwrap a result with a default value
68
+ */
69
+ export declare function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T;
70
+ /**
71
+ * Map over a successful result
72
+ */
73
+ export declare function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;
74
+ /**
75
+ * Map over an error result
76
+ */
77
+ export declare function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
78
+ /**
79
+ * Chain results (flatMap)
80
+ */
81
+ export declare function flatMap<T, U, E>(result: Result<T, E>, fn: (value: T) => Result<U, E>): Result<U, E>;
82
+ /**
83
+ * Pattern match on a result
84
+ */
85
+ export declare function match<T, E, U>(result: Result<T, E>, handlers: {
86
+ ok: (value: T) => U;
87
+ err: (error: E) => U;
88
+ }): U;
89
+ /**
90
+ * Try to execute a function and wrap the result
91
+ */
92
+ export declare function tryCatch<T>(fn: () => T): Result<T, Error>;
93
+ /**
94
+ * Try to execute an async function and wrap the result
95
+ */
96
+ export declare function tryCatchAsync<T>(fn: () => Promise<T>): Promise<Result<T, Error>>;
97
+ /**
98
+ * Combine multiple results into a single result
99
+ * Returns Ok with array of values if all succeed, Err with first error otherwise
100
+ */
101
+ export declare function all<T, E>(results: Result<T, E>[]): Result<T[], E>;
102
+ /**
103
+ * Convert a nullable value to a Result
104
+ */
105
+ export declare function fromNullable<T>(value: T | null | undefined, error?: Error): Result<T, Error>;
106
+ /**
107
+ * Result utilities namespace
108
+ */
109
+ export declare const ResultUtils: {
110
+ Ok: typeof Ok;
111
+ Err: typeof Err;
112
+ success: typeof Ok;
113
+ failure: typeof Err;
114
+ isOk: typeof isOk;
115
+ isErr: typeof isErr;
116
+ isResult: typeof isResult;
117
+ unwrap: typeof unwrap;
118
+ unwrapOr: typeof unwrapOr;
119
+ map: typeof map;
120
+ mapErr: typeof mapErr;
121
+ flatMap: typeof flatMap;
122
+ match: typeof match;
123
+ tryCatch: typeof tryCatch;
124
+ tryCatchAsync: typeof tryCatchAsync;
125
+ all: typeof all;
126
+ fromNullable: typeof fromNullable;
127
+ };
128
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/compat/result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
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
+ function Ok(data) {
11
+ return { success: true, data, value: data };
12
+ }
13
+ /**
14
+ * Create an error result
15
+ */
16
+ function Err(error) {
17
+ return { success: false, error };
18
+ }
19
+ /**
20
+ * Create a success result (alias)
21
+ */
22
+ const success = Ok;
23
+ /**
24
+ * Create a failure result (alias)
25
+ */
26
+ const failure = Err;
27
+ /**
28
+ * Check if result is Ok
29
+ */
30
+ function isOk(result) {
31
+ return result.success === true;
32
+ }
33
+ /**
34
+ * Check if result is Err
35
+ */
36
+ function isErr(result) {
37
+ return result.success === false;
38
+ }
39
+ /**
40
+ * Check if value is a Result
41
+ */
42
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+
170
+ export { Err, Ok, ResultUtils, all, failure, flatMap, fromNullable, isErr, isOk, isResult, map, mapErr, match, success, tryCatch, tryCatchAsync, unwrap, unwrapOr };
171
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sources":["../../src/compat/result.ts"],"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"],"names":[],"mappings":"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"}
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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"}