@oxog/vld 1.5.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 (279) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +558 -517
  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/codecs/index.js +4 -275
  26. package/dist/codecs/index.js.map +1 -1
  27. package/dist/coercion/index.d.ts +11 -0
  28. package/dist/coercion/index.d.ts.map +1 -0
  29. package/dist/coercion/{bigint.js → index.js} +7 -4
  30. package/dist/coercion/index.js.map +1 -0
  31. package/dist/compat/emitter.js +6 -4
  32. package/dist/compat/emitter.js.map +1 -1
  33. package/dist/compat/result.js +21 -19
  34. package/dist/compat/result.js.map +1 -1
  35. package/dist/errors.js +13 -10
  36. package/dist/errors.js.map +1 -1
  37. package/dist/index.js +225 -126
  38. package/dist/index.js.map +1 -1
  39. package/dist/kernel.js +10 -7
  40. package/dist/kernel.js.map +1 -1
  41. package/dist/locales/af.js +4 -2
  42. package/dist/locales/af.js.map +1 -1
  43. package/dist/locales/ar.js +4 -2
  44. package/dist/locales/ar.js.map +1 -1
  45. package/dist/locales/bn.js +4 -2
  46. package/dist/locales/bn.js.map +1 -1
  47. package/dist/locales/da.js +4 -2
  48. package/dist/locales/da.js.map +1 -1
  49. package/dist/locales/de.js +4 -2
  50. package/dist/locales/de.js.map +1 -1
  51. package/dist/locales/en.js +4 -2
  52. package/dist/locales/en.js.map +1 -1
  53. package/dist/locales/es-MX.js +4 -2
  54. package/dist/locales/es-MX.js.map +1 -1
  55. package/dist/locales/es.js +4 -2
  56. package/dist/locales/es.js.map +1 -1
  57. package/dist/locales/fi.js +4 -2
  58. package/dist/locales/fi.js.map +1 -1
  59. package/dist/locales/fr.js +4 -2
  60. package/dist/locales/fr.js.map +1 -1
  61. package/dist/locales/hi.js +4 -2
  62. package/dist/locales/hi.js.map +1 -1
  63. package/dist/locales/id.js +4 -2
  64. package/dist/locales/id.js.map +1 -1
  65. package/dist/locales/index.js +3 -91
  66. package/dist/locales/index.js.map +1 -1
  67. package/dist/locales/it.js +4 -2
  68. package/dist/locales/it.js.map +1 -1
  69. package/dist/locales/ja.js +4 -2
  70. package/dist/locales/ja.js.map +1 -1
  71. package/dist/locales/ko.js +4 -2
  72. package/dist/locales/ko.js.map +1 -1
  73. package/dist/locales/lazy.d.ts +111 -0
  74. package/dist/locales/lazy.d.ts.map +1 -0
  75. package/dist/locales/lazy.js +220 -0
  76. package/dist/locales/lazy.js.map +1 -0
  77. package/dist/locales/nl.js +4 -2
  78. package/dist/locales/nl.js.map +1 -1
  79. package/dist/locales/no.js +4 -2
  80. package/dist/locales/no.js.map +1 -1
  81. package/dist/locales/pl.js +4 -2
  82. package/dist/locales/pl.js.map +1 -1
  83. package/dist/locales/pt-BR.js +4 -2
  84. package/dist/locales/pt-BR.js.map +1 -1
  85. package/dist/locales/pt.js +4 -2
  86. package/dist/locales/pt.js.map +1 -1
  87. package/dist/locales/ru.js +4 -2
  88. package/dist/locales/ru.js.map +1 -1
  89. package/dist/locales/sv.js +4 -2
  90. package/dist/locales/sv.js.map +1 -1
  91. package/dist/locales/sw.js +4 -2
  92. package/dist/locales/sw.js.map +1 -1
  93. package/dist/locales/th.js +4 -2
  94. package/dist/locales/th.js.map +1 -1
  95. package/dist/locales/tr.js +4 -2
  96. package/dist/locales/tr.js.map +1 -1
  97. package/dist/locales/vi.js +4 -2
  98. package/dist/locales/vi.js.map +1 -1
  99. package/dist/locales/zh.js +4 -2
  100. package/dist/locales/zh.js.map +1 -1
  101. package/dist/mini.d.ts +182 -0
  102. package/dist/mini.d.ts.map +1 -0
  103. package/dist/mini.js +132 -0
  104. package/dist/mini.js.map +1 -0
  105. package/dist/pigment.js +8 -7
  106. package/dist/pigment.js.map +1 -1
  107. package/dist/validators/index.js +5 -45
  108. package/dist/validators/index.js.map +1 -1
  109. package/package.json +69 -11
  110. package/dist/cli/benchmark.d.ts +0 -15
  111. package/dist/cli/benchmark.d.ts.map +0 -1
  112. package/dist/cli/benchmark.js +0 -248
  113. package/dist/cli/benchmark.js.map +0 -1
  114. package/dist/cli/bin.js +0 -35
  115. package/dist/cli/bin.js.map +0 -1
  116. package/dist/cli/commands/benchmark.js +0 -204
  117. package/dist/cli/commands/benchmark.js.map +0 -1
  118. package/dist/cli/commands/validate.js +0 -157
  119. package/dist/cli/commands/validate.js.map +0 -1
  120. package/dist/cli/generate.d.ts +0 -14
  121. package/dist/cli/generate.d.ts.map +0 -1
  122. package/dist/cli/generate.js +0 -233
  123. package/dist/cli/generate.js.map +0 -1
  124. package/dist/cli/index.js +0 -182
  125. package/dist/cli/index.js.map +0 -1
  126. package/dist/cli/validate.d.ts +0 -15
  127. package/dist/cli/validate.d.ts.map +0 -1
  128. package/dist/cli/validate.js +0 -162
  129. package/dist/cli/validate.js.map +0 -1
  130. package/dist/coercion/bigint.js.map +0 -1
  131. package/dist/coercion/boolean.js +0 -59
  132. package/dist/coercion/boolean.js.map +0 -1
  133. package/dist/coercion/date.js +0 -52
  134. package/dist/coercion/date.js.map +0 -1
  135. package/dist/coercion/number.js +0 -160
  136. package/dist/coercion/number.js.map +0 -1
  137. package/dist/coercion/string.js.map +0 -1
  138. package/dist/compat/index.js +0 -14
  139. package/dist/compat/index.js.map +0 -1
  140. package/dist/events.js +0 -8
  141. package/dist/events.js.map +0 -1
  142. package/dist/guards.d.ts +0 -143
  143. package/dist/guards.d.ts.map +0 -1
  144. package/dist/guards.js +0 -238
  145. package/dist/guards.js.map +0 -1
  146. package/dist/index-new.d.ts.map +0 -1
  147. package/dist/locales/backup-en.js +0 -105
  148. package/dist/locales/backup-en.js.map +0 -1
  149. package/dist/locales/types.js +0 -2
  150. package/dist/locales/types.js.map +0 -1
  151. package/dist/locales.d.ts +0 -54
  152. package/dist/locales.d.ts.map +0 -1
  153. package/dist/locales.js +0 -732
  154. package/dist/locales.js.map +0 -1
  155. package/dist/logger.js +0 -184
  156. package/dist/logger.js.map +0 -1
  157. package/dist/plugins/codecs.d.ts +0 -17
  158. package/dist/plugins/codecs.d.ts.map +0 -1
  159. package/dist/plugins/codecs.js +0 -29
  160. package/dist/plugins/codecs.js.map +0 -1
  161. package/dist/plugins/coercion.d.ts +0 -13
  162. package/dist/plugins/coercion.d.ts.map +0 -1
  163. package/dist/plugins/coercion.js +0 -34
  164. package/dist/plugins/coercion.js.map +0 -1
  165. package/dist/plugins/core-validators.d.ts +0 -13
  166. package/dist/plugins/core-validators.d.ts.map +0 -1
  167. package/dist/plugins/core-validators.js +0 -96
  168. package/dist/plugins/core-validators.js.map +0 -1
  169. package/dist/plugins/index.js +0 -8
  170. package/dist/plugins/index.js.map +0 -1
  171. package/dist/plugins/kernel.d.ts +0 -29
  172. package/dist/plugins/kernel.d.ts.map +0 -1
  173. package/dist/plugins/kernel.js +0 -486
  174. package/dist/plugins/kernel.js.map +0 -1
  175. package/dist/plugins/types.js +0 -8
  176. package/dist/plugins/types.js.map +0 -1
  177. package/dist/style.d.ts +0 -123
  178. package/dist/style.d.ts.map +0 -1
  179. package/dist/style.js +0 -369
  180. package/dist/style.js.map +0 -1
  181. package/dist/utils/codec-utils.js +0 -229
  182. package/dist/utils/codec-utils.js.map +0 -1
  183. package/dist/utils/deep-merge.js +0 -76
  184. package/dist/utils/deep-merge.js.map +0 -1
  185. package/dist/utils/ip-validation.js +0 -98
  186. package/dist/utils/ip-validation.js.map +0 -1
  187. package/dist/utils/security.js +0 -61
  188. package/dist/utils/security.js.map +0 -1
  189. package/dist/validators/any.js +0 -25
  190. package/dist/validators/any.js.map +0 -1
  191. package/dist/validators/array.js +0 -190
  192. package/dist/validators/array.js.map +0 -1
  193. package/dist/validators/base.js +0 -499
  194. package/dist/validators/base.js.map +0 -1
  195. package/dist/validators/base64.js +0 -65
  196. package/dist/validators/base64.js.map +0 -1
  197. package/dist/validators/bigint.js +0 -142
  198. package/dist/validators/bigint.js.map +0 -1
  199. package/dist/validators/boolean.js +0 -114
  200. package/dist/validators/boolean.js.map +0 -1
  201. package/dist/validators/codec.js +0 -182
  202. package/dist/validators/codec.js.map +0 -1
  203. package/dist/validators/custom.js +0 -50
  204. package/dist/validators/custom.js.map +0 -1
  205. package/dist/validators/date.js +0 -227
  206. package/dist/validators/date.js.map +0 -1
  207. package/dist/validators/discriminated-union.js +0 -98
  208. package/dist/validators/discriminated-union.js.map +0 -1
  209. package/dist/validators/enum.js +0 -82
  210. package/dist/validators/enum.js.map +0 -1
  211. package/dist/validators/file.js +0 -114
  212. package/dist/validators/file.js.map +0 -1
  213. package/dist/validators/function.js +0 -45
  214. package/dist/validators/function.js.map +0 -1
  215. package/dist/validators/hex.js +0 -62
  216. package/dist/validators/hex.js.map +0 -1
  217. package/dist/validators/intersection.js +0 -64
  218. package/dist/validators/intersection.js.map +0 -1
  219. package/dist/validators/json.js +0 -64
  220. package/dist/validators/json.js.map +0 -1
  221. package/dist/validators/lazy.js +0 -42
  222. package/dist/validators/lazy.js.map +0 -1
  223. package/dist/validators/literal.js +0 -45
  224. package/dist/validators/literal.js.map +0 -1
  225. package/dist/validators/map.js +0 -54
  226. package/dist/validators/map.js.map +0 -1
  227. package/dist/validators/nan.js +0 -32
  228. package/dist/validators/nan.js.map +0 -1
  229. package/dist/validators/never.js +0 -29
  230. package/dist/validators/never.js.map +0 -1
  231. package/dist/validators/null.js +0 -31
  232. package/dist/validators/null.js.map +0 -1
  233. package/dist/validators/number.js +0 -225
  234. package/dist/validators/number.js.map +0 -1
  235. package/dist/validators/object-optimized.d.ts +0 -23
  236. package/dist/validators/object-optimized.d.ts.map +0 -1
  237. package/dist/validators/object-optimized.js +0 -179
  238. package/dist/validators/object-optimized.js.map +0 -1
  239. package/dist/validators/object-ultra.d.ts +0 -34
  240. package/dist/validators/object-ultra.d.ts.map +0 -1
  241. package/dist/validators/object-ultra.js +0 -175
  242. package/dist/validators/object-ultra.js.map +0 -1
  243. package/dist/validators/object.js +0 -458
  244. package/dist/validators/object.js.map +0 -1
  245. package/dist/validators/record.js +0 -128
  246. package/dist/validators/record.js.map +0 -1
  247. package/dist/validators/set.js +0 -51
  248. package/dist/validators/set.js.map +0 -1
  249. package/dist/validators/string-bool.js +0 -127
  250. package/dist/validators/string-bool.js.map +0 -1
  251. package/dist/validators/string-formats.js +0 -120
  252. package/dist/validators/string-formats.js.map +0 -1
  253. package/dist/validators/string-ultra.d.ts +0 -49
  254. package/dist/validators/string-ultra.d.ts.map +0 -1
  255. package/dist/validators/string-ultra.js +0 -217
  256. package/dist/validators/string-ultra.js.map +0 -1
  257. package/dist/validators/string.js +0 -253
  258. package/dist/validators/string.js.map +0 -1
  259. package/dist/validators/symbol.js +0 -42
  260. package/dist/validators/symbol.js.map +0 -1
  261. package/dist/validators/template-literal.js +0 -102
  262. package/dist/validators/template-literal.js.map +0 -1
  263. package/dist/validators/tuple.js +0 -55
  264. package/dist/validators/tuple.js.map +0 -1
  265. package/dist/validators/uint8array.js +0 -98
  266. package/dist/validators/uint8array.js.map +0 -1
  267. package/dist/validators/undefined.js +0 -31
  268. package/dist/validators/undefined.js.map +0 -1
  269. package/dist/validators/union-optimized.d.ts +0 -15
  270. package/dist/validators/union-optimized.d.ts.map +0 -1
  271. package/dist/validators/union-optimized.js +0 -92
  272. package/dist/validators/union-optimized.js.map +0 -1
  273. package/dist/validators/union.js +0 -126
  274. package/dist/validators/union.js.map +0 -1
  275. package/dist/validators/unknown.js.map +0 -1
  276. package/dist/validators/void.js +0 -35
  277. package/dist/validators/void.js.map +0 -1
  278. package/dist/validators/xor.js +0 -64
  279. package/dist/validators/xor.js.map +0 -1
@@ -1,275 +1,4 @@
1
- import { VldCodec } from '../validators/codec.js';
2
- import { VldBase64 } from '../validators/base64.js';
3
- import { VldHex } from '../validators/hex.js';
4
- import { VldUint8Array } from '../validators/uint8array.js';
5
- import { VldString } from '../validators/string.js';
6
- import { VldNumber } from '../validators/number.js';
7
- import { VldBigInt } from '../validators/bigint.js';
8
- import { VldBoolean } from '../validators/boolean.js';
9
- import { VldDate } from '../validators/date.js';
10
- import { VldUnknown } from '../validators/unknown.js';
11
- import { base64ToUint8Array, uint8ArrayToBase64, uint8ArrayToBase64Url, hexToUint8Array, uint8ArrayToHex, stringToUint8Array, uint8ArrayToString } from '../utils/codec-utils.js';
12
- /**
13
- * Predefined codecs for common transformations (Zod-compatible)
14
- */
15
- // ===== STRING TO NUMBER CODECS =====
16
- /**
17
- * String to number codec
18
- */
19
- export const stringToNumber = VldCodec.create(VldString.create(), VldNumber.create(), {
20
- decode: (str) => {
21
- const num = Number(str);
22
- if (isNaN(num))
23
- throw new Error('Invalid number');
24
- return num;
25
- },
26
- encode: (num) => num.toString()
27
- });
28
- /**
29
- * String to integer codec
30
- */
31
- export const stringToInt = VldCodec.create(VldString.create(), VldNumber.create().int(), {
32
- decode: (str) => {
33
- const num = parseInt(str, 10);
34
- if (isNaN(num))
35
- throw new Error('Invalid integer');
36
- return num;
37
- },
38
- encode: (num) => Math.floor(num).toString()
39
- });
40
- /**
41
- * String to BigInt codec
42
- */
43
- export const stringToBigInt = VldCodec.create(VldString.create(), VldBigInt.create(), {
44
- decode: (str) => {
45
- try {
46
- return BigInt(str);
47
- }
48
- catch {
49
- throw new Error('Invalid BigInt');
50
- }
51
- },
52
- encode: (bigint) => bigint.toString()
53
- });
54
- /**
55
- * Number to BigInt codec
56
- */
57
- export const numberToBigInt = VldCodec.create(VldNumber.create().int(), VldBigInt.create(), {
58
- decode: (num) => BigInt(Math.floor(num)),
59
- encode: (bigint) => Number(bigint)
60
- });
61
- // ===== DATE CODECS =====
62
- /**
63
- * ISO datetime string to Date codec
64
- */
65
- export const isoDatetimeToDate = VldCodec.create(VldString.create().regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/, 'Invalid ISO datetime format'), VldDate.create(), {
66
- decode: (isoString) => {
67
- const date = new Date(isoString);
68
- if (isNaN(date.getTime()))
69
- throw new Error('Invalid date');
70
- return date;
71
- },
72
- encode: (date) => date.toISOString()
73
- });
74
- /**
75
- * Epoch seconds to Date codec
76
- */
77
- export const epochSecondsToDate = VldCodec.create(VldNumber.create(), VldDate.create(), {
78
- decode: (seconds) => new Date(seconds * 1000),
79
- encode: (date) => Math.floor(date.getTime() / 1000)
80
- });
81
- /**
82
- * Epoch milliseconds to Date codec
83
- */
84
- export const epochMillisToDate = VldCodec.create(VldNumber.create(), VldDate.create(), {
85
- decode: (millis) => new Date(millis),
86
- encode: (date) => date.getTime()
87
- });
88
- // ===== JSON CODEC =====
89
- /**
90
- * JSON string codec for any type
91
- */
92
- export const jsonCodec = (schema) => {
93
- const outputSchema = schema || VldUnknown.create();
94
- return VldCodec.create(VldString.create(), outputSchema, {
95
- decode: (jsonString) => {
96
- try {
97
- return JSON.parse(jsonString);
98
- }
99
- catch {
100
- throw new Error('Invalid JSON');
101
- }
102
- },
103
- encode: (data) => JSON.stringify(data)
104
- });
105
- };
106
- // ===== URL CODECS =====
107
- /**
108
- * String to URL codec
109
- */
110
- export const stringToURL = VldCodec.create(VldString.create().url(), VldUnknown.create(), // URL object
111
- {
112
- decode: (urlString) => {
113
- try {
114
- return new URL(urlString);
115
- }
116
- catch {
117
- throw new Error('Invalid URL');
118
- }
119
- },
120
- encode: (url) => url.toString()
121
- });
122
- /**
123
- * String to HTTP/HTTPS URL codec
124
- */
125
- export const stringToHttpURL = VldCodec.create(VldString.create().regex(/^https?:\/\//, 'Must be HTTP or HTTPS URL'), VldUnknown.create(), // URL object
126
- {
127
- decode: (urlString) => {
128
- try {
129
- const url = new URL(urlString);
130
- if (!['http:', 'https:'].includes(url.protocol)) {
131
- throw new Error('Must be HTTP or HTTPS');
132
- }
133
- return url;
134
- }
135
- catch {
136
- throw new Error('Invalid HTTP URL');
137
- }
138
- },
139
- encode: (url) => url.toString()
140
- });
141
- /**
142
- * URI component encode/decode codec
143
- */
144
- export const uriComponent = VldCodec.create(VldString.create(), VldString.create(), {
145
- decode: (encoded) => {
146
- try {
147
- return decodeURIComponent(encoded);
148
- }
149
- catch {
150
- throw new Error('Invalid URI component');
151
- }
152
- },
153
- encode: (decoded) => encodeURIComponent(decoded)
154
- });
155
- /**
156
- * String to boolean codec
157
- */
158
- export const stringToBoolean = VldCodec.create(VldString.create(), VldBoolean.create(), {
159
- decode: (str) => {
160
- const lower = str.toLowerCase();
161
- if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on')
162
- return true;
163
- if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off')
164
- return false;
165
- throw new Error('Invalid boolean string');
166
- },
167
- encode: (bool) => bool.toString()
168
- });
169
- // ===== EXISTING BYTE CODECS (updated) =====
170
- /**
171
- * Base64 to Uint8Array codec
172
- */
173
- export const base64ToBytes = VldCodec.create(VldBase64.create(), VldUint8Array.create(), {
174
- decode: base64ToUint8Array,
175
- encode: uint8ArrayToBase64
176
- });
177
- /**
178
- * URL-safe Base64 to Uint8Array codec
179
- */
180
- export const base64UrlToBytes = VldCodec.create(VldBase64.create().urlSafeMode(), VldUint8Array.create(), {
181
- decode: base64ToUint8Array,
182
- encode: uint8ArrayToBase64Url
183
- });
184
- /**
185
- * Hexadecimal to Uint8Array codec
186
- */
187
- export const hexToBytes = VldCodec.create(VldHex.create(), VldUint8Array.create(), {
188
- decode: hexToUint8Array,
189
- encode: uint8ArrayToHex
190
- });
191
- /**
192
- * Lowercase hexadecimal to Uint8Array codec
193
- */
194
- export const hexLowerToBytes = VldCodec.create(VldHex.create().lowercaseMode(), VldUint8Array.create(), {
195
- decode: hexToUint8Array,
196
- encode: (bytes) => uint8ArrayToHex(bytes).toLowerCase()
197
- });
198
- /**
199
- * UTF-8 string to Uint8Array codec
200
- */
201
- export const utf8ToBytes = VldCodec.create(VldString.create(), VldUint8Array.create(), {
202
- decode: stringToUint8Array,
203
- encode: uint8ArrayToString
204
- });
205
- /**
206
- * Uint8Array to UTF-8 string codec (reverse of utf8ToBytes)
207
- */
208
- export const bytesToUtf8 = VldCodec.create(VldUint8Array.create(), VldString.create(), {
209
- decode: uint8ArrayToString,
210
- encode: stringToUint8Array
211
- });
212
- /**
213
- * Base64URL to Uint8Array codec (updated)
214
- */
215
- export const base64urlToBytes = VldCodec.create(VldBase64.create().urlSafeMode(), VldUint8Array.create(), {
216
- decode: base64ToUint8Array,
217
- encode: uint8ArrayToBase64Url
218
- });
219
- /**
220
- * Base64 encoded JSON codec (updated)
221
- */
222
- export const base64Json = (schema) => {
223
- const outputSchema = schema || VldUnknown.create();
224
- return VldCodec.create(VldBase64.create(), outputSchema, {
225
- decode: (base64) => {
226
- // BUG-NPM-005 FIX: Add error handling for JSON parsing
227
- try {
228
- const jsonString = uint8ArrayToString(base64ToUint8Array(base64));
229
- return JSON.parse(jsonString);
230
- }
231
- catch (error) {
232
- throw new Error(`Failed to parse base64 JSON: ${error.message}`);
233
- }
234
- },
235
- encode: (data) => {
236
- const jsonString = JSON.stringify(data);
237
- return uint8ArrayToBase64(stringToUint8Array(jsonString));
238
- }
239
- });
240
- };
241
- /**
242
- * JWT payload decoder (base64url encoded JSON) - updated
243
- */
244
- export const jwtPayload = (schema) => {
245
- const outputSchema = schema || VldUnknown.create();
246
- return VldCodec.create(VldString.create().refine(s => s.split('.').length === 3, 'Invalid JWT format'), outputSchema, {
247
- decode: (jwt) => {
248
- // BUG-NPM-004 FIX: Add comprehensive error handling for JWT parsing
249
- try {
250
- const parts = jwt.split('.');
251
- if (parts.length !== 3) {
252
- throw new Error('JWT must have exactly 3 parts');
253
- }
254
- const payloadBase64 = parts[1];
255
- if (!payloadBase64) {
256
- throw new Error('JWT payload is empty');
257
- }
258
- // Convert base64url to base64
259
- const base64 = payloadBase64
260
- .replace(/-/g, '+')
261
- .replace(/_/g, '/')
262
- .padEnd(payloadBase64.length + (4 - payloadBase64.length % 4) % 4, '=');
263
- const jsonString = uint8ArrayToString(base64ToUint8Array(base64));
264
- return JSON.parse(jsonString);
265
- }
266
- catch (error) {
267
- throw new Error(`Failed to decode JWT payload: ${error.message}`);
268
- }
269
- },
270
- encode: () => {
271
- throw new Error('JWT encoding not supported - use a proper JWT library');
272
- }
273
- });
274
- };
275
- //# sourceMappingURL=index.js.map
1
+ export { D as base64Json, w as base64ToBytes, x as base64UrlToBytes, y as base64urlToBytes, C as bytesToUtf8, p as epochMillisToDate, o as epochSecondsToDate, A as hexLowerToBytes, z as hexToBytes, m as isoDatetimeToDate, q as jsonCodec, E as jwtPayload, n as numberToBigInt, k as stringToBigInt, l as stringToBoolean, t as stringToHttpURL, j as stringToInt, i as stringToNumber, r as stringToURL, v as uriComponent, B as utf8ToBytes } from '../chunks/index-BoV-4S1F.js';
2
+ import '../chunks/bigint-ZKkWLdmi.js';
3
+ import '../chunks/unknown-CjSRcELI.js';
4
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldCodec } from '../validators/codec';\r\nimport { VldBase64 } from '../validators/base64';\r\nimport { VldHex } from '../validators/hex';\r\nimport { VldUint8Array } from '../validators/uint8array';\r\nimport { VldString } from '../validators/string';\r\nimport { VldNumber } from '../validators/number';\r\nimport { VldBigInt } from '../validators/bigint';\r\nimport { VldBoolean } from '../validators/boolean';\r\nimport { VldDate } from '../validators/date';\r\nimport { VldUnknown } from '../validators/unknown';\r\nimport {\r\n base64ToUint8Array,\r\n uint8ArrayToBase64,\r\n uint8ArrayToBase64Url,\r\n hexToUint8Array,\r\n uint8ArrayToHex,\r\n stringToUint8Array,\r\n uint8ArrayToString\r\n} from '../utils/codec-utils';\r\n\r\n/**\r\n * Predefined codecs for common transformations (Zod-compatible)\r\n */\r\n\r\n// ===== STRING TO NUMBER CODECS =====\r\n\r\n/**\r\n * String to number codec\r\n */\r\nexport const stringToNumber = VldCodec.create(\r\n VldString.create(),\r\n VldNumber.create(),\r\n {\r\n decode: (str: string) => {\r\n const num = Number(str);\r\n if (isNaN(num)) throw new Error('Invalid number');\r\n return num;\r\n },\r\n encode: (num: number) => num.toString()\r\n }\r\n);\r\n\r\n/**\r\n * String to integer codec\r\n */\r\nexport const stringToInt = VldCodec.create(\r\n VldString.create(),\r\n VldNumber.create().int(),\r\n {\r\n decode: (str: string) => {\r\n const num = parseInt(str, 10);\r\n if (isNaN(num)) throw new Error('Invalid integer');\r\n return num;\r\n },\r\n encode: (num: number) => Math.floor(num).toString()\r\n }\r\n);\r\n\r\n/**\r\n * String to BigInt codec\r\n */\r\nexport const stringToBigInt = VldCodec.create(\r\n VldString.create(),\r\n VldBigInt.create(),\r\n {\r\n decode: (str: string) => {\r\n try {\r\n return BigInt(str);\r\n } catch {\r\n throw new Error('Invalid BigInt');\r\n }\r\n },\r\n encode: (bigint: bigint) => bigint.toString()\r\n }\r\n);\r\n\r\n/**\r\n * Number to BigInt codec\r\n */\r\nexport const numberToBigInt = VldCodec.create(\r\n VldNumber.create().int(),\r\n VldBigInt.create(),\r\n {\r\n decode: (num: number) => BigInt(Math.floor(num)),\r\n encode: (bigint: bigint) => Number(bigint)\r\n }\r\n);\r\n\r\n// ===== DATE CODECS =====\r\n\r\n/**\r\n * ISO datetime string to Date codec\r\n */\r\nexport const isoDatetimeToDate = VldCodec.create(\r\n VldString.create().regex(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/, 'Invalid ISO datetime format'),\r\n VldDate.create(),\r\n {\r\n decode: (isoString: string) => {\r\n const date = new Date(isoString);\r\n if (isNaN(date.getTime())) throw new Error('Invalid date');\r\n return date;\r\n },\r\n encode: (date: Date) => date.toISOString()\r\n }\r\n);\r\n\r\n/**\r\n * Epoch seconds to Date codec\r\n */\r\nexport const epochSecondsToDate = VldCodec.create(\r\n VldNumber.create(),\r\n VldDate.create(),\r\n {\r\n decode: (seconds: number) => new Date(seconds * 1000),\r\n encode: (date: Date) => Math.floor(date.getTime() / 1000)\r\n }\r\n);\r\n\r\n/**\r\n * Epoch milliseconds to Date codec\r\n */\r\nexport const epochMillisToDate = VldCodec.create(\r\n VldNumber.create(),\r\n VldDate.create(),\r\n {\r\n decode: (millis: number) => new Date(millis),\r\n encode: (date: Date) => date.getTime()\r\n }\r\n);\r\n\r\n// ===== JSON CODEC =====\r\n\r\n/**\r\n * JSON string codec for any type\r\n */\r\nexport const jsonCodec = <T = any>(schema?: any) => {\r\n const outputSchema = schema || VldUnknown.create();\r\n \r\n return VldCodec.create(\r\n VldString.create(),\r\n outputSchema,\r\n {\r\n decode: (jsonString: string) => {\r\n try {\r\n return JSON.parse(jsonString);\r\n } catch {\r\n throw new Error('Invalid JSON');\r\n }\r\n },\r\n encode: (data: T) => JSON.stringify(data)\r\n }\r\n );\r\n};\r\n\r\n// ===== URL CODECS =====\r\n\r\n/**\r\n * String to URL codec\r\n */\r\nexport const stringToURL = VldCodec.create(\r\n VldString.create().url(),\r\n VldUnknown.create() as any, // URL object\r\n {\r\n decode: (urlString: string) => {\r\n try {\r\n return new URL(urlString);\r\n } catch {\r\n throw new Error('Invalid URL');\r\n }\r\n },\r\n encode: (url: URL) => url.toString()\r\n }\r\n);\r\n\r\n/**\r\n * String to HTTP/HTTPS URL codec\r\n */\r\nexport const stringToHttpURL = VldCodec.create(\r\n VldString.create().regex(/^https?:\\/\\//, 'Must be HTTP or HTTPS URL'),\r\n VldUnknown.create() as any, // URL object\r\n {\r\n decode: (urlString: string) => {\r\n try {\r\n const url = new URL(urlString);\r\n if (!['http:', 'https:'].includes(url.protocol)) {\r\n throw new Error('Must be HTTP or HTTPS');\r\n }\r\n return url;\r\n } catch {\r\n throw new Error('Invalid HTTP URL');\r\n }\r\n },\r\n encode: (url: URL) => url.toString()\r\n }\r\n);\r\n\r\n/**\r\n * URI component encode/decode codec\r\n */\r\nexport const uriComponent = VldCodec.create(\r\n VldString.create(),\r\n VldString.create(),\r\n {\r\n decode: (encoded: string) => {\r\n try {\r\n return decodeURIComponent(encoded);\r\n } catch {\r\n throw new Error('Invalid URI component');\r\n }\r\n },\r\n encode: (decoded: string) => encodeURIComponent(decoded)\r\n }\r\n);\r\n\r\n/**\r\n * String to boolean codec\r\n */\r\nexport const stringToBoolean = VldCodec.create(\r\n VldString.create(),\r\n VldBoolean.create(),\r\n {\r\n decode: (str: string) => {\r\n const lower = str.toLowerCase();\r\n if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') return true;\r\n if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') return false;\r\n throw new Error('Invalid boolean string');\r\n },\r\n encode: (bool: boolean) => bool.toString()\r\n }\r\n);\r\n\r\n// ===== EXISTING BYTE CODECS (updated) =====\r\n\r\n/**\r\n * Base64 to Uint8Array codec\r\n */\r\nexport const base64ToBytes = VldCodec.create(\r\n VldBase64.create(),\r\n VldUint8Array.create(),\r\n {\r\n decode: base64ToUint8Array,\r\n encode: uint8ArrayToBase64\r\n }\r\n);\r\n\r\n/**\r\n * URL-safe Base64 to Uint8Array codec\r\n */\r\nexport const base64UrlToBytes = VldCodec.create(\r\n VldBase64.create().urlSafeMode(),\r\n VldUint8Array.create(),\r\n {\r\n decode: base64ToUint8Array,\r\n encode: uint8ArrayToBase64Url\r\n }\r\n);\r\n\r\n/**\r\n * Hexadecimal to Uint8Array codec\r\n */\r\nexport const hexToBytes = VldCodec.create(\r\n VldHex.create(),\r\n VldUint8Array.create(),\r\n {\r\n decode: hexToUint8Array,\r\n encode: uint8ArrayToHex\r\n }\r\n);\r\n\r\n/**\r\n * Lowercase hexadecimal to Uint8Array codec\r\n */\r\nexport const hexLowerToBytes = VldCodec.create(\r\n VldHex.create().lowercaseMode(),\r\n VldUint8Array.create(),\r\n {\r\n decode: hexToUint8Array,\r\n encode: (bytes) => uint8ArrayToHex(bytes).toLowerCase()\r\n }\r\n);\r\n\r\n/**\r\n * UTF-8 string to Uint8Array codec\r\n */\r\nexport const utf8ToBytes = VldCodec.create(\r\n VldString.create(),\r\n VldUint8Array.create(),\r\n {\r\n decode: stringToUint8Array,\r\n encode: uint8ArrayToString\r\n }\r\n);\r\n\r\n/**\r\n * Uint8Array to UTF-8 string codec (reverse of utf8ToBytes)\r\n */\r\nexport const bytesToUtf8 = VldCodec.create(\r\n VldUint8Array.create(),\r\n VldString.create(),\r\n {\r\n decode: uint8ArrayToString,\r\n encode: stringToUint8Array\r\n }\r\n);\r\n\r\n/**\r\n * Base64URL to Uint8Array codec (updated)\r\n */\r\nexport const base64urlToBytes = VldCodec.create(\r\n VldBase64.create().urlSafeMode(),\r\n VldUint8Array.create(),\r\n {\r\n decode: base64ToUint8Array,\r\n encode: uint8ArrayToBase64Url\r\n }\r\n);\r\n\r\n/**\r\n * Base64 encoded JSON codec (updated)\r\n */\r\nexport const base64Json = <T = any>(schema?: any) => {\r\n const outputSchema = schema || VldUnknown.create();\r\n \r\n return VldCodec.create(\r\n VldBase64.create(),\r\n outputSchema,\r\n {\r\n decode: (base64: string) => {\r\n // BUG-NPM-005 FIX: Add error handling for JSON parsing\r\n try {\r\n const jsonString = uint8ArrayToString(base64ToUint8Array(base64));\r\n return JSON.parse(jsonString);\r\n } catch (error) {\r\n throw new Error(`Failed to parse base64 JSON: ${(error as Error).message}`);\r\n }\r\n },\r\n encode: (data: T) => {\r\n const jsonString = JSON.stringify(data);\r\n return uint8ArrayToBase64(stringToUint8Array(jsonString));\r\n }\r\n }\r\n );\r\n};\r\n\r\n/**\r\n * JWT payload decoder (base64url encoded JSON) - updated\r\n */\r\nexport const jwtPayload = (schema?: any) => {\r\n const outputSchema = schema || VldUnknown.create();\r\n \r\n return VldCodec.create(\r\n VldString.create().refine(s => s.split('.').length === 3, 'Invalid JWT format'),\r\n outputSchema,\r\n {\r\n decode: (jwt: string) => {\r\n // BUG-NPM-004 FIX: Add comprehensive error handling for JWT parsing\r\n try {\r\n const parts = jwt.split('.');\r\n if (parts.length !== 3) {\r\n throw new Error('JWT must have exactly 3 parts');\r\n }\r\n\r\n const payloadBase64 = parts[1];\r\n if (!payloadBase64) {\r\n throw new Error('JWT payload is empty');\r\n }\r\n\r\n // Convert base64url to base64\r\n const base64 = payloadBase64\r\n .replace(/-/g, '+')\r\n .replace(/_/g, '/')\r\n .padEnd(payloadBase64.length + (4 - payloadBase64.length % 4) % 4, '=');\r\n\r\n const jsonString = uint8ArrayToString(base64ToUint8Array(base64));\r\n return JSON.parse(jsonString);\r\n } catch (error) {\r\n throw new Error(`Failed to decode JWT payload: ${(error as Error).message}`);\r\n }\r\n },\r\n encode: () => {\r\n throw new Error('JWT encoding not supported - use a proper JWT library');\r\n }\r\n }\r\n );\r\n};"]}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * VLD Coercion Validators
3
+ *
4
+ * Validators that coerce values to the target type before validation.
5
+ */
6
+ export { VldCoerceString } from './string';
7
+ export { VldCoerceNumber } from './number';
8
+ export { VldCoerceBoolean } from './boolean';
9
+ export { VldCoerceDate } from './date';
10
+ export { VldCoerceBigInt } from './bigint';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coercion/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -1,9 +1,10 @@
1
- import { VldBigInt } from '../validators/bigint.js';
2
- import { getMessages } from '../locales/index.js';
1
+ export { a as VldCoerceBoolean, V as VldCoerceDate, b as VldCoerceNumber, c as VldCoerceString } from '../chunks/date-7Iz2BGsL.js';
2
+ import { d as VldBigInt, t as getMessages } from '../chunks/bigint-ZKkWLdmi.js';
3
+
3
4
  /**
4
5
  * BigInt coercion validator that attempts to convert values to bigint
5
6
  */
6
- export class VldCoerceBigInt extends VldBigInt {
7
+ class VldCoerceBigInt extends VldBigInt {
7
8
  constructor(config) {
8
9
  super(config);
9
10
  }
@@ -105,4 +106,6 @@ export class VldCoerceBigInt extends VldBigInt {
105
106
  }
106
107
  }
107
108
  }
108
- //# sourceMappingURL=bigint.js.map
109
+
110
+ export { VldCoerceBigInt };
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/coercion/bigint.ts"],"sourcesContent":["import { VldBigInt } from '../validators/bigint';\nimport { ParseResult } from '../validators/base';\nimport { getMessages } from '../locales';\n\n/**\n * BigInt coercion validator that attempts to convert values to bigint\n */\nexport class VldCoerceBigInt extends VldBigInt {\n protected constructor(config?: any) {\n super(config);\n }\n \n /**\n * Create a new coerce bigint validator\n */\n static create(): VldCoerceBigInt {\n return new VldCoerceBigInt();\n }\n \n // Override all chain methods to return VldCoerceBigInt instances\n min(value: bigint, message?: string): VldCoerceBigInt {\n return new VldCoerceBigInt({\n checks: [...this.config.checks, (v: bigint) => v >= value],\n errorMessage: message || `BigInt must be at least ${value}`\n });\n }\n \n max(value: bigint, message?: string): VldCoerceBigInt {\n return new VldCoerceBigInt({\n checks: [...this.config.checks, (v: bigint) => v <= value],\n errorMessage: message || `BigInt must be at most ${value}`\n });\n }\n \n positive(message?: string): VldCoerceBigInt {\n return new VldCoerceBigInt({\n checks: [...this.config.checks, (v: bigint) => v > 0n],\n errorMessage: message || 'BigInt must be positive'\n });\n }\n \n negative(message?: string): VldCoerceBigInt {\n return new VldCoerceBigInt({\n checks: [...this.config.checks, (v: bigint) => v < 0n],\n errorMessage: message || 'BigInt must be negative'\n });\n }\n \n nonnegative(message?: string): VldCoerceBigInt {\n return new VldCoerceBigInt({\n checks: [...this.config.checks, (v: bigint) => v >= 0n],\n errorMessage: message || 'BigInt must be non-negative'\n });\n }\n \n nonpositive(message?: string): VldCoerceBigInt {\n return new VldCoerceBigInt({\n checks: [...this.config.checks, (v: bigint) => v <= 0n],\n errorMessage: message || 'BigInt must be non-positive'\n });\n }\n \n /**\n * Parse and coerce a value to bigint\n */\n parse(value: unknown): bigint {\n // If it's already a bigint, use parent validation directly\n if (typeof value === 'bigint') {\n return super.parse(value);\n }\n \n // Handle string values\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed === '') {\n throw new Error(getMessages().coercionFailed('bigint', value));\n }\n try {\n const coerced = BigInt(trimmed);\n return super.parse(coerced);\n } catch {\n throw new Error(getMessages().coercionFailed('bigint', value));\n }\n }\n \n // Handle number values (must be integer)\n if (typeof value === 'number') {\n if (!Number.isInteger(value)) {\n throw new Error(getMessages().coercionFailed('bigint', value));\n }\n const coerced = BigInt(value);\n return super.parse(coerced);\n }\n \n // Handle null and undefined\n if (value === null || value === undefined) {\n throw new Error(getMessages().coercionFailed('bigint', value));\n }\n \n // Try to coerce other values\n try {\n const coerced = BigInt(value as any);\n return super.parse(coerced);\n } catch {\n throw new Error(getMessages().coercionFailed('bigint', value));\n }\n }\n \n /**\n * Safely parse and coerce a value to bigint\n */\n safeParse(value: unknown): ParseResult<bigint> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  /**
8
8
  * Create a type-safe event emitter
9
9
  */
10
- export function createEmitter() {
10
+ function createEmitter() {
11
11
  const listeners = new Map();
12
12
  const getListeners = (event) => {
13
13
  if (!listeners.has(event)) {
@@ -111,7 +111,7 @@ export function createEmitter() {
111
111
  /**
112
112
  * Mixin to add event emitter capabilities to a class
113
113
  */
114
- export function withEmitter() {
114
+ function withEmitter() {
115
115
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
116
  return function (Base) {
117
117
  return class extends Base {
@@ -141,7 +141,7 @@ export function withEmitter() {
141
141
  /**
142
142
  * Create an event bus for global event handling
143
143
  */
144
- export function createEventBus() {
144
+ function createEventBus() {
145
145
  const emitter = createEmitter();
146
146
  const createScope = () => {
147
147
  const unsubscribers = [];
@@ -176,4 +176,6 @@ export function createEventBus() {
176
176
  createScope
177
177
  };
178
178
  }
179
- //# sourceMappingURL=emitter.js.map
179
+
180
+ export { createEmitter, createEventBus, withEmitter };
181
+ //# sourceMappingURL=emitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/compat/emitter.ts"],"names":[],"mappings":"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","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"]}
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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"}
@@ -7,39 +7,39 @@
7
7
  /**
8
8
  * Create a success result
9
9
  */
10
- export function Ok(data) {
10
+ function Ok(data) {
11
11
  return { success: true, data, value: data };
12
12
  }
13
13
  /**
14
14
  * Create an error result
15
15
  */
16
- export function Err(error) {
16
+ function Err(error) {
17
17
  return { success: false, error };
18
18
  }
19
19
  /**
20
20
  * Create a success result (alias)
21
21
  */
22
- export const success = Ok;
22
+ const success = Ok;
23
23
  /**
24
24
  * Create a failure result (alias)
25
25
  */
26
- export const failure = Err;
26
+ const failure = Err;
27
27
  /**
28
28
  * Check if result is Ok
29
29
  */
30
- export function isOk(result) {
30
+ function isOk(result) {
31
31
  return result.success === true;
32
32
  }
33
33
  /**
34
34
  * Check if result is Err
35
35
  */
36
- export function isErr(result) {
36
+ function isErr(result) {
37
37
  return result.success === false;
38
38
  }
39
39
  /**
40
40
  * Check if value is a Result
41
41
  */
42
- export function isResult(value) {
42
+ function isResult(value) {
43
43
  return (typeof value === 'object' &&
44
44
  value !== null &&
45
45
  'success' in value &&
@@ -48,7 +48,7 @@ export function isResult(value) {
48
48
  /**
49
49
  * Unwrap a result, throwing the error if it's an Err
50
50
  */
51
- export function unwrap(result) {
51
+ function unwrap(result) {
52
52
  if (isOk(result)) {
53
53
  return result.data;
54
54
  }
@@ -57,7 +57,7 @@ export function unwrap(result) {
57
57
  /**
58
58
  * Unwrap a result with a default value
59
59
  */
60
- export function unwrapOr(result, defaultValue) {
60
+ function unwrapOr(result, defaultValue) {
61
61
  if (isOk(result)) {
62
62
  return result.data;
63
63
  }
@@ -66,7 +66,7 @@ export function unwrapOr(result, defaultValue) {
66
66
  /**
67
67
  * Map over a successful result
68
68
  */
69
- export function map(result, fn) {
69
+ function map(result, fn) {
70
70
  if (isOk(result)) {
71
71
  return Ok(fn(result.data));
72
72
  }
@@ -75,7 +75,7 @@ export function map(result, fn) {
75
75
  /**
76
76
  * Map over an error result
77
77
  */
78
- export function mapErr(result, fn) {
78
+ function mapErr(result, fn) {
79
79
  if (isErr(result)) {
80
80
  return Err(fn(result.error));
81
81
  }
@@ -84,7 +84,7 @@ export function mapErr(result, fn) {
84
84
  /**
85
85
  * Chain results (flatMap)
86
86
  */
87
- export function flatMap(result, fn) {
87
+ function flatMap(result, fn) {
88
88
  if (isOk(result)) {
89
89
  return fn(result.data);
90
90
  }
@@ -93,7 +93,7 @@ export function flatMap(result, fn) {
93
93
  /**
94
94
  * Pattern match on a result
95
95
  */
96
- export function match(result, handlers) {
96
+ function match(result, handlers) {
97
97
  if (isOk(result)) {
98
98
  return handlers.ok(result.data);
99
99
  }
@@ -102,7 +102,7 @@ export function match(result, handlers) {
102
102
  /**
103
103
  * Try to execute a function and wrap the result
104
104
  */
105
- export function tryCatch(fn) {
105
+ function tryCatch(fn) {
106
106
  try {
107
107
  return Ok(fn());
108
108
  }
@@ -113,7 +113,7 @@ export function tryCatch(fn) {
113
113
  /**
114
114
  * Try to execute an async function and wrap the result
115
115
  */
116
- export async function tryCatchAsync(fn) {
116
+ async function tryCatchAsync(fn) {
117
117
  try {
118
118
  return Ok(await fn());
119
119
  }
@@ -125,7 +125,7 @@ export async function tryCatchAsync(fn) {
125
125
  * Combine multiple results into a single result
126
126
  * Returns Ok with array of values if all succeed, Err with first error otherwise
127
127
  */
128
- export function all(results) {
128
+ function all(results) {
129
129
  const values = [];
130
130
  for (const result of results) {
131
131
  if (isErr(result)) {
@@ -138,7 +138,7 @@ export function all(results) {
138
138
  /**
139
139
  * Convert a nullable value to a Result
140
140
  */
141
- export function fromNullable(value, error = new Error('Value is null or undefined')) {
141
+ function fromNullable(value, error = new Error('Value is null or undefined')) {
142
142
  if (value === null || value === undefined) {
143
143
  return Err(error);
144
144
  }
@@ -147,7 +147,7 @@ export function fromNullable(value, error = new Error('Value is null or undefine
147
147
  /**
148
148
  * Result utilities namespace
149
149
  */
150
- export const ResultUtils = {
150
+ const ResultUtils = {
151
151
  Ok,
152
152
  Err,
153
153
  success,
@@ -166,4 +166,6 @@ export const ResultUtils = {
166
166
  all,
167
167
  fromNullable
168
168
  };
169
- //# sourceMappingURL=result.js.map
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