@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
@@ -1,62 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { VldError, createIssue } from '../errors.js';
3
- import { getMessages } from '../locales/index.js';
4
- /**
5
- * Hexadecimal string validator
6
- */
7
- export class VldHex extends VldBase {
8
- constructor(lowercase = false) {
9
- super();
10
- this.lowercase = lowercase;
11
- }
12
- parse(value) {
13
- const result = this.safeParse(value);
14
- if (!result.success) {
15
- throw result.error;
16
- }
17
- return result.data;
18
- }
19
- safeParse(value) {
20
- if (typeof value !== 'string') {
21
- return {
22
- success: false,
23
- error: new VldError([
24
- createIssue('invalid_type', [], getMessages().expectedString)
25
- ])
26
- };
27
- }
28
- // Check if it's a valid hex string
29
- if (!VldHex.HEX_REGEX.test(value)) {
30
- return {
31
- success: false,
32
- error: new VldError([
33
- createIssue('custom', [], getMessages().invalidHex)
34
- ])
35
- };
36
- }
37
- // Check if even length (full bytes)
38
- if (value.length % 2 !== 0) {
39
- return {
40
- success: false,
41
- error: new VldError([
42
- createIssue('custom', [], getMessages().invalidHex)
43
- ])
44
- };
45
- }
46
- // Normalize case if required
47
- const normalizedValue = this.lowercase ? value.toLowerCase() : value;
48
- return { success: true, data: normalizedValue };
49
- }
50
- /**
51
- * Require lowercase hex characters
52
- */
53
- lowercaseMode() {
54
- return new VldHex(true);
55
- }
56
- static create(lowercase = false) {
57
- return new VldHex(lowercase);
58
- }
59
- }
60
- // BUG-008 FIX: Use * instead of + to allow empty hex strings (consistent with base64 validator)
61
- VldHex.HEX_REGEX = /^[0-9a-fA-F]*$/;
62
- //# sourceMappingURL=hex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../src/validators/hex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,OAAuB;IAMjD,YAAY,SAAS,GAAG,KAAK;QAC3B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC;iBAC9D,CAAC;aACH,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC;iBACpD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC;iBACpD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAErE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK;QAC7B,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;;AA/DD,gGAAgG;AACxE,gBAAS,GAAG,gBAAgB,CAAC","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { VldError, createIssue } from '../errors';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Hexadecimal string validator\r\n */\r\nexport class VldHex extends VldBase<string, string> {\r\n // BUG-008 FIX: Use * instead of + to allow empty hex strings (consistent with base64 validator)\r\n private static readonly HEX_REGEX = /^[0-9a-fA-F]*$/;\r\n \r\n private readonly lowercase: boolean;\r\n \r\n constructor(lowercase = false) {\r\n super();\r\n this.lowercase = lowercase;\r\n }\r\n \r\n parse(value: unknown): string {\r\n const result = this.safeParse(value);\r\n if (!result.success) {\r\n throw result.error;\r\n }\r\n return result.data;\r\n }\r\n \r\n safeParse(value: unknown): ParseResult<string> {\r\n if (typeof value !== 'string') {\r\n return {\r\n success: false,\r\n error: new VldError([\r\n createIssue('invalid_type', [], getMessages().expectedString)\r\n ])\r\n };\r\n }\r\n \r\n // Check if it's a valid hex string\r\n if (!VldHex.HEX_REGEX.test(value)) {\r\n return {\r\n success: false,\r\n error: new VldError([\r\n createIssue('custom', [], getMessages().invalidHex)\r\n ])\r\n };\r\n }\r\n \r\n // Check if even length (full bytes)\r\n if (value.length % 2 !== 0) {\r\n return {\r\n success: false,\r\n error: new VldError([\r\n createIssue('custom', [], getMessages().invalidHex)\r\n ])\r\n };\r\n }\r\n \r\n // Normalize case if required\r\n const normalizedValue = this.lowercase ? value.toLowerCase() : value;\r\n \r\n return { success: true, data: normalizedValue };\r\n }\r\n \r\n /**\r\n * Require lowercase hex characters\r\n */\r\n lowercaseMode(): VldHex {\r\n return new VldHex(true);\r\n }\r\n \r\n static create(lowercase = false): VldHex {\r\n return new VldHex(lowercase);\r\n }\r\n}"]}
@@ -1,64 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { deepMerge, isPlainObject } from '../utils/deep-merge.js';
3
- import { getMessages } from '../locales/index.js';
4
- /**
5
- * Immutable intersection validator for combining validators
6
- */
7
- export class VldIntersection extends VldBase {
8
- /**
9
- * Private constructor to enforce immutability
10
- */
11
- constructor(validatorA, validatorB) {
12
- super();
13
- this.validatorA = validatorA;
14
- this.validatorB = validatorB;
15
- }
16
- /**
17
- * Create a new intersection validator
18
- */
19
- static create(validatorA, validatorB) {
20
- return new VldIntersection(validatorA, validatorB);
21
- }
22
- /**
23
- * Parse and validate a value against both validators
24
- */
25
- parse(value) {
26
- try {
27
- // Both validators must pass
28
- const resultA = this.validatorA.parse(value);
29
- const resultB = this.validatorB.parse(value);
30
- // BUG-NEW-015 FIX: Check type consistency before merging
31
- const aIsObject = isPlainObject(resultA);
32
- const bIsObject = isPlainObject(resultB);
33
- // Both are objects - safe to merge
34
- if (aIsObject && bIsObject) {
35
- return deepMerge(resultA, resultB);
36
- }
37
- // Neither are objects - must be identical primitives
38
- if (!aIsObject && !bIsObject) {
39
- if (resultA === resultB) {
40
- return resultA;
41
- }
42
- throw new Error('Values must be identical for intersection of primitive types');
43
- }
44
- // One is object, one is primitive - invalid intersection
45
- throw new Error('Cannot create intersection of object and primitive types. ' +
46
- 'Both validators must produce the same type category.');
47
- }
48
- catch (error) {
49
- throw new Error(getMessages().intersectionError(error.message));
50
- }
51
- }
52
- /**
53
- * Safely parse and validate a value against both validators
54
- */
55
- safeParse(value) {
56
- try {
57
- return { success: true, data: this.parse(value) };
58
- }
59
- catch (error) {
60
- return { success: false, error: error };
61
- }
62
- }
63
- }
64
- //# sourceMappingURL=intersection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intersection.js","sourceRoot":"","sources":["../../src/validators/intersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,eAAsB,SAAQ,OAAuB;IAChE;;OAEG;IACH,YACmB,UAA+B,EAC/B,UAA+B;QAEhD,KAAK,EAAE,CAAC;QAHS,eAAU,GAAV,UAAU,CAAqB;QAC/B,eAAU,GAAV,UAAU,CAAqB;IAGlD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,UAA+B,EAC/B,UAA+B;QAE/B,OAAO,IAAI,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE7C,yDAAyD;YACzD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAEzC,mCAAmC;YACnC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAC,OAAc,EAAE,OAAc,CAAU,CAAC;YAC5D,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7B,IAAK,OAAe,KAAM,OAAe,EAAE,CAAC;oBAC1C,OAAO,OAAgB,CAAC;gBAC1B,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAClF,CAAC;YAED,yDAAyD;YACzD,MAAM,IAAI,KAAK,CACb,4DAA4D;gBAC5D,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { deepMerge, isPlainObject } from '../utils/deep-merge';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Immutable intersection validator for combining validators\r\n */\r\nexport class VldIntersection<A, B> extends VldBase<unknown, A & B> {\r\n /**\r\n * Private constructor to enforce immutability\r\n */\r\n private constructor(\r\n private readonly validatorA: VldBase<unknown, A>,\r\n private readonly validatorB: VldBase<unknown, B>\r\n ) {\r\n super();\r\n }\r\n \r\n /**\r\n * Create a new intersection validator\r\n */\r\n static create<A, B>(\r\n validatorA: VldBase<unknown, A>,\r\n validatorB: VldBase<unknown, B>\r\n ): VldIntersection<A, B> {\r\n return new VldIntersection(validatorA, validatorB);\r\n }\r\n \r\n /**\r\n * Parse and validate a value against both validators\r\n */\r\n parse(value: unknown): A & B {\r\n try {\r\n // Both validators must pass\r\n const resultA = this.validatorA.parse(value);\r\n const resultB = this.validatorB.parse(value);\r\n\r\n // BUG-NEW-015 FIX: Check type consistency before merging\r\n const aIsObject = isPlainObject(resultA);\r\n const bIsObject = isPlainObject(resultB);\r\n\r\n // Both are objects - safe to merge\r\n if (aIsObject && bIsObject) {\r\n return deepMerge(resultA as any, resultB as any) as A & B;\r\n }\r\n\r\n // Neither are objects - must be identical primitives\r\n if (!aIsObject && !bIsObject) {\r\n if ((resultA as any) === (resultB as any)) {\r\n return resultA as A & B;\r\n }\r\n throw new Error('Values must be identical for intersection of primitive types');\r\n }\r\n\r\n // One is object, one is primitive - invalid intersection\r\n throw new Error(\r\n 'Cannot create intersection of object and primitive types. ' +\r\n 'Both validators must produce the same type category.'\r\n );\r\n } catch (error) {\r\n throw new Error(getMessages().intersectionError((error as Error).message));\r\n }\r\n }\r\n \r\n /**\r\n * Safely parse and validate a value against both validators\r\n */\r\n safeParse(value: unknown): ParseResult<A & B> {\r\n try {\r\n return { success: true, data: this.parse(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n }\r\n}"]}
@@ -1,64 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { getMessages } from '../locales/index.js';
3
- /**
4
- * Immutable JSON validator that validates and parses JSON strings
5
- * Accepts both strings (which are parsed) and already-parsed objects
6
- */
7
- export class VldJson extends VldBase {
8
- constructor(schema) {
9
- super();
10
- this.schema = schema;
11
- }
12
- /**
13
- * Create a new JSON validator
14
- */
15
- static create(schema) {
16
- return new VldJson(schema);
17
- }
18
- /**
19
- * Parse and validate a JSON value
20
- */
21
- parse(value) {
22
- let parsed;
23
- // If it's a string, try to parse it as JSON first
24
- if (typeof value === 'string') {
25
- try {
26
- parsed = JSON.parse(value);
27
- }
28
- catch (e) {
29
- throw new Error(getMessages().invalidJson);
30
- }
31
- }
32
- else {
33
- // Not a string - assume it's already parsed
34
- parsed = value;
35
- }
36
- // If we have a schema, validate against it
37
- if (this.schema) {
38
- return this.schema.parse(parsed);
39
- }
40
- // No schema - just return the parsed value
41
- return parsed;
42
- }
43
- /**
44
- * Safely parse and validate a JSON value
45
- */
46
- safeParse(value) {
47
- try {
48
- return { success: true, data: this.parse(value) };
49
- }
50
- catch (error) {
51
- return {
52
- success: false,
53
- error: error
54
- };
55
- }
56
- }
57
- /**
58
- * Create a new JSON validator with a schema for validation
59
- */
60
- withSchema(schema) {
61
- return new VldJson(schema);
62
- }
63
- }
64
- //# sourceMappingURL=json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/validators/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,MAAM,OAAO,OAAqB,SAAQ,OAAmB;IAC3D,YACmB,MAA4B;QAE7C,KAAK,EAAE,CAAC;QAFS,WAAM,GAAN,MAAM,CAAsB;IAG/C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAc,MAA4B;QACrD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,MAAe,CAAC;QAEpB,kDAAkD;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,2CAA2C;QAC3C,OAAO,MAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAc;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAI,MAA2B;QACvC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable JSON validator that validates and parses JSON strings\n * Accepts both strings (which are parsed) and already-parsed objects\n */\nexport class VldJson<T = unknown> extends VldBase<unknown, T> {\n private constructor(\n private readonly schema?: VldBase<unknown, T>\n ) {\n super();\n }\n\n /**\n * Create a new JSON validator\n */\n static create<T = unknown>(schema?: VldBase<unknown, T>): VldJson<T> {\n return new VldJson(schema);\n }\n\n /**\n * Parse and validate a JSON value\n */\n parse(value: unknown): T {\n let parsed: unknown;\n\n // If it's a string, try to parse it as JSON first\n if (typeof value === 'string') {\n try {\n parsed = JSON.parse(value);\n } catch (e) {\n throw new Error(getMessages().invalidJson);\n }\n } else {\n // Not a string - assume it's already parsed\n parsed = value;\n }\n\n // If we have a schema, validate against it\n if (this.schema) {\n return this.schema.parse(parsed);\n }\n\n // No schema - just return the parsed value\n return parsed as T;\n }\n\n /**\n * Safely parse and validate a JSON value\n */\n safeParse(value: unknown): ParseResult<T> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return {\n success: false,\n error: error as Error\n };\n }\n }\n\n /**\n * Create a new JSON validator with a schema for validation\n */\n withSchema<U>(schema: VldBase<unknown, U>): VldJson<U> {\n return new VldJson(schema);\n }\n}\n"]}
@@ -1,42 +0,0 @@
1
- /**
2
- * VldLazy - Lazy evaluation for recursive schemas
3
- * Part of Zod 4 API parity implementation
4
- * Allows schemas that reference themselves (e.g., tree structures, nested categories)
5
- */
6
- import { VldBase } from './base.js';
7
- /**
8
- * Lazy validator - defers schema evaluation until runtime
9
- * Essential for recursive and self-referencing types
10
- */
11
- export class VldLazy extends VldBase {
12
- constructor(_schemaGetter) {
13
- super();
14
- this._schemaGetter = _schemaGetter;
15
- this._cachedSchema = null;
16
- }
17
- static create(schemaGetter) {
18
- return new VldLazy(schemaGetter);
19
- }
20
- /**
21
- * Get the actual schema, caching it after first retrieval
22
- */
23
- _getSchema() {
24
- if (!this._cachedSchema) {
25
- this._cachedSchema = this._schemaGetter();
26
- }
27
- return this._cachedSchema;
28
- }
29
- /**
30
- * Get the inner schema (unwrap)
31
- */
32
- unwrap() {
33
- return this._getSchema();
34
- }
35
- parse(value) {
36
- return this._getSchema().parse(value);
37
- }
38
- safeParse(value) {
39
- return this._getSchema().safeParse(value);
40
- }
41
- }
42
- //# sourceMappingURL=lazy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../src/validators/lazy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;;GAGG;AACH,MAAM,OAAO,OAAyB,SAAQ,OAAwB;IAGpE,YACmB,aAA6C;QAE9D,KAAK,EAAE,CAAC;QAFS,kBAAa,GAAb,aAAa,CAAgC;QAHxD,kBAAa,GAAoC,IAAI,CAAC;IAM9D,CAAC;IAED,MAAM,CAAC,MAAM,CACX,YAA4C;QAE5C,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF","sourcesContent":["/**\n * VldLazy - Lazy evaluation for recursive schemas\n * Part of Zod 4 API parity implementation\n * Allows schemas that reference themselves (e.g., tree structures, nested categories)\n */\n\nimport { VldBase } from './base';\nimport type { ParseResult } from './base';\n\n/**\n * Lazy validator - defers schema evaluation until runtime\n * Essential for recursive and self-referencing types\n */\nexport class VldLazy<TInput, TOutput> extends VldBase<TInput, TOutput> {\n private _cachedSchema: VldBase<TInput, TOutput> | null = null;\n\n private constructor(\n private readonly _schemaGetter: () => VldBase<TInput, TOutput>\n ) {\n super();\n }\n\n static create<TInput, TOutput>(\n schemaGetter: () => VldBase<TInput, TOutput>\n ): VldLazy<TInput, TOutput> {\n return new VldLazy(schemaGetter);\n }\n\n /**\n * Get the actual schema, caching it after first retrieval\n */\n private _getSchema(): VldBase<TInput, TOutput> {\n if (!this._cachedSchema) {\n this._cachedSchema = this._schemaGetter();\n }\n return this._cachedSchema;\n }\n\n /**\n * Get the inner schema (unwrap)\n */\n unwrap(): VldBase<TInput, TOutput> {\n return this._getSchema();\n }\n\n parse(value: unknown): TOutput {\n return this._getSchema().parse(value);\n }\n\n safeParse(value: unknown): ParseResult<TOutput> {\n return this._getSchema().safeParse(value);\n }\n}\n"]}
@@ -1,45 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { getMessages } from '../locales/index.js';
3
- /**
4
- * Immutable literal validator for exact value matching
5
- */
6
- export class VldLiteral extends VldBase {
7
- /**
8
- * Private constructor to enforce immutability
9
- */
10
- constructor(literal, errorMessage) {
11
- super();
12
- this.literal = literal;
13
- this.errorMessage = errorMessage;
14
- }
15
- /**
16
- * Create a new literal validator
17
- */
18
- static create(literal) {
19
- return new VldLiteral(literal);
20
- }
21
- /**
22
- * Parse and validate a literal value
23
- */
24
- parse(value) {
25
- if (value !== this.literal) {
26
- throw new Error(this.errorMessage ||
27
- getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value)));
28
- }
29
- return this.literal;
30
- }
31
- /**
32
- * Safely parse and validate a literal value
33
- */
34
- safeParse(value) {
35
- if (value === this.literal) {
36
- return { success: true, data: this.literal };
37
- }
38
- return {
39
- success: false,
40
- error: new Error(this.errorMessage ||
41
- getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value)))
42
- };
43
- }
44
- }
45
- //# sourceMappingURL=literal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/validators/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,UAAmE,SAAQ,OAAa;IACnG;;OAEG;IACH,YACmB,OAAU,EACV,YAAqB;QAEtC,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAAG;QACV,iBAAY,GAAZ,YAAY,CAAS;IAGxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAyD,OAAU;QAC9E,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,YAAY;gBACjB,WAAW,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CACd,IAAI,CAAC,YAAY;gBACjB,WAAW,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACnF;SACF,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable literal validator for exact value matching\n */\nexport class VldLiteral<T extends string | number | boolean | null | undefined> extends VldBase<T, T> {\n /**\n * Private constructor to enforce immutability\n */\n private constructor(\n private readonly literal: T,\n private readonly errorMessage?: string\n ) {\n super();\n }\n \n /**\n * Create a new literal validator\n */\n static create<T extends string | number | boolean | null | undefined>(literal: T): VldLiteral<T> {\n return new VldLiteral(literal);\n }\n \n /**\n * Parse and validate a literal value\n */\n parse(value: unknown): T {\n if (value !== this.literal) {\n throw new Error(\n this.errorMessage || \n getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value))\n );\n }\n return this.literal;\n }\n \n /**\n * Safely parse and validate a literal value\n */\n safeParse(value: unknown): ParseResult<T> {\n if (value === this.literal) {\n return { success: true, data: this.literal };\n }\n return { \n success: false, \n error: new Error(\n this.errorMessage || \n getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value))\n )\n };\n }\n}"]}
@@ -1,54 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { getMessages } from '../locales/index.js';
3
- /**
4
- * Immutable Map validator
5
- */
6
- export class VldMap extends VldBase {
7
- /**
8
- * Private constructor to enforce immutability
9
- */
10
- constructor(keyValidator, valueValidator, errorMessage) {
11
- super();
12
- this.keyValidator = keyValidator;
13
- this.valueValidator = valueValidator;
14
- this.errorMessage = errorMessage;
15
- }
16
- /**
17
- * Create a new Map validator
18
- */
19
- static create(keyValidator, valueValidator) {
20
- return new VldMap(keyValidator, valueValidator);
21
- }
22
- /**
23
- * Parse and validate a Map value
24
- */
25
- parse(value) {
26
- if (!(value instanceof Map)) {
27
- throw new Error(this.errorMessage || getMessages().invalidMap);
28
- }
29
- const result = new Map();
30
- for (const [key, val] of value) {
31
- try {
32
- const validKey = this.keyValidator.parse(key);
33
- const validValue = this.valueValidator.parse(val);
34
- result.set(validKey, validValue);
35
- }
36
- catch (error) {
37
- throw new Error(error.message);
38
- }
39
- }
40
- return result;
41
- }
42
- /**
43
- * Safely parse and validate a Map value
44
- */
45
- safeParse(value) {
46
- try {
47
- return { success: true, data: this.parse(value) };
48
- }
49
- catch (error) {
50
- return { success: false, error: error };
51
- }
52
- }
53
- }
54
- //# sourceMappingURL=map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/validators/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,MAAa,SAAQ,OAA2B;IAC3D;;OAEG;IACH,YACmB,YAAiC,EACjC,cAAmC,EACnC,YAAqB;QAEtC,KAAK,EAAE,CAAC;QAJS,iBAAY,GAAZ,YAAY,CAAqB;QACjC,mBAAc,GAAd,cAAc,CAAqB;QACnC,iBAAY,GAAZ,YAAY,CAAS;IAGxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,YAAiC,EACjC,cAAmC;QAEnC,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAQ,CAAC;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable Map validator\n */\nexport class VldMap<K, V> extends VldBase<unknown, Map<K, V>> {\n /**\n * Private constructor to enforce immutability\n */\n private constructor(\n private readonly keyValidator: VldBase<unknown, K>,\n private readonly valueValidator: VldBase<unknown, V>,\n private readonly errorMessage?: string\n ) {\n super();\n }\n \n /**\n * Create a new Map validator\n */\n static create<K, V>(\n keyValidator: VldBase<unknown, K>,\n valueValidator: VldBase<unknown, V>\n ): VldMap<K, V> {\n return new VldMap(keyValidator, valueValidator);\n }\n \n /**\n * Parse and validate a Map value\n */\n parse(value: unknown): Map<K, V> {\n if (!(value instanceof Map)) {\n throw new Error(this.errorMessage || getMessages().invalidMap);\n }\n \n const result = new Map<K, V>();\n for (const [key, val] of value) {\n try {\n const validKey = this.keyValidator.parse(key);\n const validValue = this.valueValidator.parse(val);\n result.set(validKey, validValue);\n } catch (error) {\n throw new Error((error as Error).message);\n }\n }\n \n return result;\n }\n \n /**\n * Safely parse and validate a Map value\n */\n safeParse(value: unknown): ParseResult<Map<K, V>> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}"]}
@@ -1,32 +0,0 @@
1
- /**
2
- * VldNan - Validates that a value is NaN (Not a Number)
3
- * Part of Zod 4 API parity implementation
4
- */
5
- import { VldBase } from './base.js';
6
- /**
7
- * NaN validator - validates that a value is NaN
8
- * Note: Uses Number.isNaN() which is more strict than global isNaN()
9
- */
10
- export class VldNan extends VldBase {
11
- constructor() {
12
- super();
13
- }
14
- static create() {
15
- return new VldNan();
16
- }
17
- parse(value) {
18
- if (typeof value !== 'number' || !Number.isNaN(value)) {
19
- throw new Error(`Expected NaN, received ${typeof value === 'number' ? 'a valid number' : typeof value}`);
20
- }
21
- return value;
22
- }
23
- safeParse(value) {
24
- try {
25
- return { success: true, data: this.parse(value) };
26
- }
27
- catch (error) {
28
- return { success: false, error: error };
29
- }
30
- }
31
- }
32
- //# sourceMappingURL=nan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nan.js","sourceRoot":"","sources":["../../src/validators/nan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;;GAGG;AACH,MAAM,OAAO,MAAO,SAAQ,OAAwB;IAClD;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\n * VldNan - Validates that a value is NaN (Not a Number)\n * Part of Zod 4 API parity implementation\n */\n\nimport { VldBase } from './base';\nimport type { ParseResult } from './base';\n\n/**\n * NaN validator - validates that a value is NaN\n * Note: Uses Number.isNaN() which is more strict than global isNaN()\n */\nexport class VldNan extends VldBase<unknown, number> {\n private constructor() {\n super();\n }\n\n static create(): VldNan {\n return new VldNan();\n }\n\n parse(value: unknown): number {\n if (typeof value !== 'number' || !Number.isNaN(value)) {\n throw new Error(`Expected NaN, received ${typeof value === 'number' ? 'a valid number' : typeof value}`);\n }\n return value;\n }\n\n safeParse(value: unknown): ParseResult<number> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}\n"]}
@@ -1,29 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { getMessages } from '../locales/index.js';
3
- /**
4
- * Validator that never succeeds
5
- */
6
- export class VldNever extends VldBase {
7
- /**
8
- * Create a new never validator
9
- */
10
- static create() {
11
- return new VldNever();
12
- }
13
- /**
14
- * Parse never value (always fails)
15
- */
16
- parse(_value) {
17
- throw new Error(getMessages().neverType);
18
- }
19
- /**
20
- * Safely parse never value (always fails)
21
- */
22
- safeParse(_value) {
23
- return {
24
- success: false,
25
- error: new Error(getMessages().neverType)
26
- };
27
- }
28
- }
29
- //# sourceMappingURL=never.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"never.js","sourceRoot":"","sources":["../../src/validators/never.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAqB;IACjD;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAe;QACnB,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAe;QACvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;SAC1C,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Validator that never succeeds\n */\nexport class VldNever extends VldBase<never, never> {\n /**\n * Create a new never validator\n */\n static create(): VldNever {\n return new VldNever();\n }\n \n /**\n * Parse never value (always fails)\n */\n parse(_value: unknown): never {\n throw new Error(getMessages().neverType);\n }\n \n /**\n * Safely parse never value (always fails)\n */\n safeParse(_value: unknown): ParseResult<never> {\n return { \n success: false, \n error: new Error(getMessages().neverType) \n };\n }\n}"]}
@@ -1,31 +0,0 @@
1
- /**
2
- * VldNull - Validates that a value is exactly null
3
- * Part of Zod 4 API parity implementation
4
- */
5
- import { VldBase } from './base.js';
6
- /**
7
- * Null validator - validates that a value is exactly null
8
- */
9
- export class VldNull extends VldBase {
10
- constructor() {
11
- super();
12
- }
13
- static create() {
14
- return new VldNull();
15
- }
16
- parse(value) {
17
- if (value !== null) {
18
- throw new Error(`Expected null, received ${typeof value}`);
19
- }
20
- return null;
21
- }
22
- safeParse(value) {
23
- try {
24
- return { success: true, data: this.parse(value) };
25
- }
26
- catch (error) {
27
- return { success: false, error: error };
28
- }
29
- }
30
- }
31
- //# sourceMappingURL=null.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"null.js","sourceRoot":"","sources":["../../src/validators/null.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,OAAsB;IACjD;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\n * VldNull - Validates that a value is exactly null\n * Part of Zod 4 API parity implementation\n */\n\nimport { VldBase } from './base';\nimport type { ParseResult } from './base';\n\n/**\n * Null validator - validates that a value is exactly null\n */\nexport class VldNull extends VldBase<unknown, null> {\n private constructor() {\n super();\n }\n\n static create(): VldNull {\n return new VldNull();\n }\n\n parse(value: unknown): null {\n if (value !== null) {\n throw new Error(`Expected null, received ${typeof value}`);\n }\n return null;\n }\n\n safeParse(value: unknown): ParseResult<null> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}\n"]}