@oxog/vld 1.3.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/CHANGELOG.md +333 -284
  2. package/README.md +13 -12
  3. package/dist/cli/benchmark.d.ts +15 -0
  4. package/dist/cli/benchmark.d.ts.map +1 -0
  5. package/dist/cli/benchmark.js +248 -0
  6. package/dist/cli/benchmark.js.map +1 -0
  7. package/dist/cli/bin.d.ts +8 -0
  8. package/dist/cli/bin.d.ts.map +1 -0
  9. package/dist/cli/bin.js +35 -0
  10. package/dist/cli/bin.js.map +1 -0
  11. package/dist/cli/commands/benchmark.d.ts +11 -0
  12. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  13. package/dist/cli/commands/benchmark.js +204 -0
  14. package/dist/cli/commands/benchmark.js.map +1 -0
  15. package/dist/cli/commands/validate.d.ts +11 -0
  16. package/dist/cli/commands/validate.d.ts.map +1 -0
  17. package/dist/cli/commands/validate.js +157 -0
  18. package/dist/cli/commands/validate.js.map +1 -0
  19. package/dist/cli/generate.d.ts +14 -0
  20. package/dist/cli/generate.d.ts.map +1 -0
  21. package/dist/cli/generate.js +233 -0
  22. package/dist/cli/generate.js.map +1 -0
  23. package/dist/cli/index.d.ts +59 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +182 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/validate.d.ts +15 -0
  28. package/dist/cli/validate.d.ts.map +1 -0
  29. package/dist/cli/validate.js +162 -0
  30. package/dist/cli/validate.js.map +1 -0
  31. package/dist/codecs/index.d.ts.map +1 -1
  32. package/dist/codecs/index.js +29 -10
  33. package/dist/codecs/index.js.map +1 -1
  34. package/dist/coercion/bigint.js +1 -1
  35. package/dist/coercion/boolean.d.ts.map +1 -1
  36. package/dist/coercion/boolean.js +24 -32
  37. package/dist/coercion/boolean.js.map +1 -1
  38. package/dist/coercion/date.js +2 -2
  39. package/dist/coercion/date.js.map +1 -1
  40. package/dist/coercion/number.d.ts.map +1 -1
  41. package/dist/coercion/number.js +20 -4
  42. package/dist/coercion/number.js.map +1 -1
  43. package/dist/coercion/string.d.ts.map +1 -1
  44. package/dist/coercion/string.js +9 -73
  45. package/dist/coercion/string.js.map +1 -1
  46. package/dist/compat/emitter.d.ts +73 -0
  47. package/dist/compat/emitter.d.ts.map +1 -0
  48. package/dist/compat/emitter.js +179 -0
  49. package/dist/compat/emitter.js.map +1 -0
  50. package/dist/compat/index.d.ts +15 -0
  51. package/dist/compat/index.d.ts.map +1 -0
  52. package/dist/compat/index.js +14 -0
  53. package/dist/compat/index.js.map +1 -0
  54. package/dist/compat/result.d.ts +128 -0
  55. package/dist/compat/result.d.ts.map +1 -0
  56. package/dist/compat/result.js +169 -0
  57. package/dist/compat/result.js.map +1 -0
  58. package/dist/errors.d.ts +58 -1
  59. package/dist/errors.d.ts.map +1 -1
  60. package/dist/errors.js +97 -9
  61. package/dist/errors.js.map +1 -1
  62. package/dist/events.d.ts +140 -0
  63. package/dist/events.d.ts.map +1 -0
  64. package/dist/events.js +8 -0
  65. package/dist/events.js.map +1 -0
  66. package/dist/guards.d.ts +143 -0
  67. package/dist/guards.d.ts.map +1 -0
  68. package/dist/guards.js +238 -0
  69. package/dist/guards.js.map +1 -0
  70. package/dist/index.d.ts +606 -4
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +105 -6
  73. package/dist/index.js.map +1 -1
  74. package/dist/kernel.d.ts +29 -0
  75. package/dist/kernel.d.ts.map +1 -0
  76. package/dist/kernel.js +402 -0
  77. package/dist/kernel.js.map +1 -0
  78. package/dist/locales/af.d.ts.map +1 -1
  79. package/dist/locales/af.js +18 -1
  80. package/dist/locales/af.js.map +1 -1
  81. package/dist/locales/ar.d.ts.map +1 -1
  82. package/dist/locales/ar.js +18 -1
  83. package/dist/locales/ar.js.map +1 -1
  84. package/dist/locales/backup-en.d.ts +3 -0
  85. package/dist/locales/backup-en.d.ts.map +1 -0
  86. package/dist/locales/backup-en.js +105 -0
  87. package/dist/locales/backup-en.js.map +1 -0
  88. package/dist/locales/bn.d.ts.map +1 -1
  89. package/dist/locales/bn.js +18 -1
  90. package/dist/locales/bn.js.map +1 -1
  91. package/dist/locales/da.d.ts.map +1 -1
  92. package/dist/locales/da.js +18 -1
  93. package/dist/locales/da.js.map +1 -1
  94. package/dist/locales/de.d.ts.map +1 -1
  95. package/dist/locales/de.js +18 -1
  96. package/dist/locales/de.js.map +1 -1
  97. package/dist/locales/en.d.ts.map +1 -1
  98. package/dist/locales/en.js +18 -1
  99. package/dist/locales/en.js.map +1 -1
  100. package/dist/locales/es-MX.d.ts.map +1 -1
  101. package/dist/locales/es-MX.js +17 -1
  102. package/dist/locales/es-MX.js.map +1 -1
  103. package/dist/locales/es.d.ts.map +1 -1
  104. package/dist/locales/es.js +18 -1
  105. package/dist/locales/es.js.map +1 -1
  106. package/dist/locales/fi.d.ts.map +1 -1
  107. package/dist/locales/fi.js +18 -1
  108. package/dist/locales/fi.js.map +1 -1
  109. package/dist/locales/fr.d.ts.map +1 -1
  110. package/dist/locales/fr.js +18 -1
  111. package/dist/locales/fr.js.map +1 -1
  112. package/dist/locales/hi.d.ts.map +1 -1
  113. package/dist/locales/hi.js +18 -1
  114. package/dist/locales/hi.js.map +1 -1
  115. package/dist/locales/id.d.ts.map +1 -1
  116. package/dist/locales/id.js +18 -1
  117. package/dist/locales/id.js.map +1 -1
  118. package/dist/locales/it.d.ts.map +1 -1
  119. package/dist/locales/it.js +18 -1
  120. package/dist/locales/it.js.map +1 -1
  121. package/dist/locales/ja.d.ts.map +1 -1
  122. package/dist/locales/ja.js +18 -1
  123. package/dist/locales/ja.js.map +1 -1
  124. package/dist/locales/ko.d.ts.map +1 -1
  125. package/dist/locales/ko.js +18 -1
  126. package/dist/locales/ko.js.map +1 -1
  127. package/dist/locales/nl.d.ts.map +1 -1
  128. package/dist/locales/nl.js +18 -1
  129. package/dist/locales/nl.js.map +1 -1
  130. package/dist/locales/no.d.ts.map +1 -1
  131. package/dist/locales/no.js +18 -1
  132. package/dist/locales/no.js.map +1 -1
  133. package/dist/locales/pl.d.ts.map +1 -1
  134. package/dist/locales/pl.js +18 -1
  135. package/dist/locales/pl.js.map +1 -1
  136. package/dist/locales/pt-BR.d.ts.map +1 -1
  137. package/dist/locales/pt-BR.js +18 -1
  138. package/dist/locales/pt-BR.js.map +1 -1
  139. package/dist/locales/pt.d.ts.map +1 -1
  140. package/dist/locales/pt.js +18 -1
  141. package/dist/locales/pt.js.map +1 -1
  142. package/dist/locales/ru.d.ts.map +1 -1
  143. package/dist/locales/ru.js +18 -1
  144. package/dist/locales/ru.js.map +1 -1
  145. package/dist/locales/sv.d.ts.map +1 -1
  146. package/dist/locales/sv.js +18 -1
  147. package/dist/locales/sv.js.map +1 -1
  148. package/dist/locales/sw.d.ts.map +1 -1
  149. package/dist/locales/sw.js +18 -1
  150. package/dist/locales/sw.js.map +1 -1
  151. package/dist/locales/th.d.ts.map +1 -1
  152. package/dist/locales/th.js +18 -1
  153. package/dist/locales/th.js.map +1 -1
  154. package/dist/locales/tr.d.ts.map +1 -1
  155. package/dist/locales/tr.js +18 -1
  156. package/dist/locales/tr.js.map +1 -1
  157. package/dist/locales/types.d.ts +13 -0
  158. package/dist/locales/types.d.ts.map +1 -1
  159. package/dist/locales/types.js.map +1 -1
  160. package/dist/locales/vi.d.ts.map +1 -1
  161. package/dist/locales/vi.js +18 -1
  162. package/dist/locales/vi.js.map +1 -1
  163. package/dist/locales/zh.d.ts.map +1 -1
  164. package/dist/locales/zh.js +18 -1
  165. package/dist/locales/zh.js.map +1 -1
  166. package/dist/logger.d.ts +94 -0
  167. package/dist/logger.d.ts.map +1 -0
  168. package/dist/logger.js +184 -0
  169. package/dist/logger.js.map +1 -0
  170. package/dist/pigment.d.ts +124 -0
  171. package/dist/pigment.d.ts.map +1 -0
  172. package/dist/pigment.js +177 -0
  173. package/dist/pigment.js.map +1 -0
  174. package/dist/plugins/codecs.d.ts +17 -0
  175. package/dist/plugins/codecs.d.ts.map +1 -0
  176. package/dist/plugins/codecs.js +29 -0
  177. package/dist/plugins/codecs.js.map +1 -0
  178. package/dist/plugins/coercion.d.ts +13 -0
  179. package/dist/plugins/coercion.d.ts.map +1 -0
  180. package/dist/plugins/coercion.js +34 -0
  181. package/dist/plugins/coercion.js.map +1 -0
  182. package/dist/plugins/core-validators.d.ts +13 -0
  183. package/dist/plugins/core-validators.d.ts.map +1 -0
  184. package/dist/plugins/core-validators.js +96 -0
  185. package/dist/plugins/core-validators.js.map +1 -0
  186. package/dist/plugins/index.d.ts +8 -0
  187. package/dist/plugins/index.d.ts.map +1 -0
  188. package/dist/plugins/index.js +8 -0
  189. package/dist/plugins/index.js.map +1 -0
  190. package/dist/plugins/kernel.d.ts +29 -0
  191. package/dist/plugins/kernel.d.ts.map +1 -0
  192. package/dist/plugins/kernel.js +486 -0
  193. package/dist/plugins/kernel.js.map +1 -0
  194. package/dist/plugins/types.d.ts +186 -0
  195. package/dist/plugins/types.d.ts.map +1 -0
  196. package/dist/plugins/types.js +8 -0
  197. package/dist/plugins/types.js.map +1 -0
  198. package/dist/style.d.ts +123 -0
  199. package/dist/style.d.ts.map +1 -0
  200. package/dist/style.js +369 -0
  201. package/dist/style.js.map +1 -0
  202. package/dist/utils/codec-utils.d.ts +2 -0
  203. package/dist/utils/codec-utils.d.ts.map +1 -1
  204. package/dist/utils/codec-utils.js +28 -4
  205. package/dist/utils/codec-utils.js.map +1 -1
  206. package/dist/utils/deep-merge.d.ts +2 -0
  207. package/dist/utils/deep-merge.d.ts.map +1 -1
  208. package/dist/utils/deep-merge.js +22 -39
  209. package/dist/utils/deep-merge.js.map +1 -1
  210. package/dist/utils/ip-validation.d.ts +11 -0
  211. package/dist/utils/ip-validation.d.ts.map +1 -0
  212. package/dist/utils/ip-validation.js +98 -0
  213. package/dist/utils/ip-validation.js.map +1 -0
  214. package/dist/utils/security.d.ts +12 -0
  215. package/dist/utils/security.d.ts.map +1 -0
  216. package/dist/utils/security.js +61 -0
  217. package/dist/utils/security.js.map +1 -0
  218. package/dist/validators/array.d.ts +3 -1
  219. package/dist/validators/array.d.ts.map +1 -1
  220. package/dist/validators/array.js +41 -15
  221. package/dist/validators/array.js.map +1 -1
  222. package/dist/validators/base.d.ts +134 -0
  223. package/dist/validators/base.d.ts.map +1 -1
  224. package/dist/validators/base.js +255 -1
  225. package/dist/validators/base.js.map +1 -1
  226. package/dist/validators/base64.js +1 -1
  227. package/dist/validators/bigint.d.ts +20 -0
  228. package/dist/validators/bigint.d.ts.map +1 -1
  229. package/dist/validators/bigint.js +39 -1
  230. package/dist/validators/bigint.js.map +1 -1
  231. package/dist/validators/boolean.js +29 -1
  232. package/dist/validators/boolean.js.map +1 -1
  233. package/dist/validators/codec.js +1 -1
  234. package/dist/validators/custom.d.ts +47 -0
  235. package/dist/validators/custom.d.ts.map +1 -0
  236. package/dist/validators/custom.js +50 -0
  237. package/dist/validators/custom.js.map +1 -0
  238. package/dist/validators/date.d.ts +16 -0
  239. package/dist/validators/date.d.ts.map +1 -1
  240. package/dist/validators/date.js +62 -7
  241. package/dist/validators/date.js.map +1 -1
  242. package/dist/validators/discriminated-union.d.ts +29 -0
  243. package/dist/validators/discriminated-union.d.ts.map +1 -0
  244. package/dist/validators/discriminated-union.js +98 -0
  245. package/dist/validators/discriminated-union.js.map +1 -0
  246. package/dist/validators/enum.d.ts +10 -0
  247. package/dist/validators/enum.d.ts.map +1 -1
  248. package/dist/validators/enum.js +38 -1
  249. package/dist/validators/enum.js.map +1 -1
  250. package/dist/validators/file.d.ts +57 -0
  251. package/dist/validators/file.d.ts.map +1 -0
  252. package/dist/validators/file.js +114 -0
  253. package/dist/validators/file.js.map +1 -0
  254. package/dist/validators/function.d.ts +26 -0
  255. package/dist/validators/function.d.ts.map +1 -0
  256. package/dist/validators/function.js +45 -0
  257. package/dist/validators/function.js.map +1 -0
  258. package/dist/validators/hex.d.ts.map +1 -1
  259. package/dist/validators/hex.js +3 -2
  260. package/dist/validators/hex.js.map +1 -1
  261. package/dist/validators/index.d.ts +18 -1
  262. package/dist/validators/index.d.ts.map +1 -1
  263. package/dist/validators/index.js +16 -1
  264. package/dist/validators/index.js.map +1 -1
  265. package/dist/validators/intersection.d.ts.map +1 -1
  266. package/dist/validators/intersection.js +15 -8
  267. package/dist/validators/intersection.js.map +1 -1
  268. package/dist/validators/json.d.ts +26 -0
  269. package/dist/validators/json.d.ts.map +1 -0
  270. package/dist/validators/json.js +64 -0
  271. package/dist/validators/json.js.map +1 -0
  272. package/dist/validators/lazy.d.ts +28 -0
  273. package/dist/validators/lazy.d.ts.map +1 -0
  274. package/dist/validators/lazy.js +42 -0
  275. package/dist/validators/lazy.js.map +1 -0
  276. package/dist/validators/literal.js +1 -1
  277. package/dist/validators/map.js +1 -1
  278. package/dist/validators/nan.d.ts +17 -0
  279. package/dist/validators/nan.d.ts.map +1 -0
  280. package/dist/validators/nan.js +32 -0
  281. package/dist/validators/nan.js.map +1 -0
  282. package/dist/validators/never.js +1 -1
  283. package/dist/validators/null.d.ts +16 -0
  284. package/dist/validators/null.d.ts.map +1 -0
  285. package/dist/validators/null.js +31 -0
  286. package/dist/validators/null.js.map +1 -0
  287. package/dist/validators/number.d.ts +22 -0
  288. package/dist/validators/number.d.ts.map +1 -1
  289. package/dist/validators/number.js +47 -8
  290. package/dist/validators/number.js.map +1 -1
  291. package/dist/validators/object.d.ts +32 -0
  292. package/dist/validators/object.d.ts.map +1 -1
  293. package/dist/validators/object.js +125 -8
  294. package/dist/validators/object.js.map +1 -1
  295. package/dist/validators/record.d.ts +15 -2
  296. package/dist/validators/record.d.ts.map +1 -1
  297. package/dist/validators/record.js +74 -4
  298. package/dist/validators/record.js.map +1 -1
  299. package/dist/validators/set.js +1 -1
  300. package/dist/validators/string-bool.d.ts +61 -0
  301. package/dist/validators/string-bool.d.ts.map +1 -0
  302. package/dist/validators/string-bool.js +127 -0
  303. package/dist/validators/string-bool.js.map +1 -0
  304. package/dist/validators/string-formats.d.ts +97 -0
  305. package/dist/validators/string-formats.d.ts.map +1 -0
  306. package/dist/validators/string-formats.js +120 -0
  307. package/dist/validators/string-formats.js.map +1 -0
  308. package/dist/validators/string.d.ts.map +1 -1
  309. package/dist/validators/string.js +2 -73
  310. package/dist/validators/string.js.map +1 -1
  311. package/dist/validators/symbol.js +1 -1
  312. package/dist/validators/template-literal.d.ts +32 -0
  313. package/dist/validators/template-literal.d.ts.map +1 -0
  314. package/dist/validators/template-literal.js +102 -0
  315. package/dist/validators/template-literal.js.map +1 -0
  316. package/dist/validators/tuple.js +1 -1
  317. package/dist/validators/uint8array.d.ts +21 -4
  318. package/dist/validators/uint8array.d.ts.map +1 -1
  319. package/dist/validators/uint8array.js +34 -23
  320. package/dist/validators/uint8array.js.map +1 -1
  321. package/dist/validators/undefined.d.ts +16 -0
  322. package/dist/validators/undefined.d.ts.map +1 -0
  323. package/dist/validators/undefined.js +31 -0
  324. package/dist/validators/undefined.js.map +1 -0
  325. package/dist/validators/union.d.ts +2 -0
  326. package/dist/validators/union.d.ts.map +1 -1
  327. package/dist/validators/union.js +15 -21
  328. package/dist/validators/union.js.map +1 -1
  329. package/dist/validators/void.js +1 -1
  330. package/dist/validators/xor.d.ts +23 -0
  331. package/dist/validators/xor.d.ts.map +1 -0
  332. package/dist/validators/xor.js +64 -0
  333. package/dist/validators/xor.js.map +1 -0
  334. package/package.json +95 -79
@@ -55,6 +55,26 @@ export declare class VldBigInt extends VldBase<bigint, bigint> {
55
55
  * Create a new validator that checks for non-positive values
56
56
  */
57
57
  nonpositive(message?: string): VldBigInt;
58
+ /**
59
+ * Create a new validator with strict greater than constraint
60
+ * Zod 4 API parity - strictly greater than (not equal to)
61
+ */
62
+ gt(value: bigint | number, message?: string): VldBigInt;
63
+ /**
64
+ * Create a new validator with strict less than constraint
65
+ * Zod 4 API parity - strictly less than (not equal to)
66
+ */
67
+ lt(value: bigint | number, message?: string): VldBigInt;
68
+ /**
69
+ * Create a new validator with greater than or equal constraint
70
+ * Zod 4 API parity - alias for min()
71
+ */
72
+ gte(value: bigint | number, message?: string): VldBigInt;
73
+ /**
74
+ * Create a new validator with less than or equal constraint
75
+ * Zod 4 API parity - alias for max()
76
+ */
77
+ lte(value: bigint | number, message?: string): VldBigInt;
58
78
  }
59
79
  export {};
60
80
  //# sourceMappingURL=bigint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9C;;GAEG;AACH,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEjD;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAe7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAQ9C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAMzC"}
1
+ {"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9C;;GAEG;AACH,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEjD;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAe7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAQ9C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC;;;OAGG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQvD;;;OAGG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQvD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAKxD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAIzD"}
@@ -1,5 +1,5 @@
1
1
  import { VldBase } from './base.js';
2
- import { getMessages } from '../locales.js';
2
+ import { getMessages } from '../locales/index.js';
3
3
  /**
4
4
  * Immutable bigint validator
5
5
  */
@@ -100,5 +100,43 @@ export class VldBigInt extends VldBase {
100
100
  errorMessage: message || 'BigInt must be non-positive'
101
101
  });
102
102
  }
103
+ /**
104
+ * Create a new validator with strict greater than constraint
105
+ * Zod 4 API parity - strictly greater than (not equal to)
106
+ */
107
+ gt(value, message) {
108
+ const compareValue = typeof value === 'bigint' ? value : BigInt(value);
109
+ return new VldBigInt({
110
+ checks: [...this.config.checks, (v) => v > compareValue],
111
+ errorMessage: message || `BigInt must be greater than ${compareValue}`
112
+ });
113
+ }
114
+ /**
115
+ * Create a new validator with strict less than constraint
116
+ * Zod 4 API parity - strictly less than (not equal to)
117
+ */
118
+ lt(value, message) {
119
+ const compareValue = typeof value === 'bigint' ? value : BigInt(value);
120
+ return new VldBigInt({
121
+ checks: [...this.config.checks, (v) => v < compareValue],
122
+ errorMessage: message || `BigInt must be less than ${compareValue}`
123
+ });
124
+ }
125
+ /**
126
+ * Create a new validator with greater than or equal constraint
127
+ * Zod 4 API parity - alias for min()
128
+ */
129
+ gte(value, message) {
130
+ const compareValue = typeof value === 'bigint' ? value : BigInt(value);
131
+ return this.min(compareValue, message);
132
+ }
133
+ /**
134
+ * Create a new validator with less than or equal constraint
135
+ * Zod 4 API parity - alias for max()
136
+ */
137
+ lte(value, message) {
138
+ const compareValue = typeof value === 'bigint' ? value : BigInt(value);
139
+ return this.max(compareValue, message);
140
+ }
103
141
  }
104
142
  //# sourceMappingURL=bigint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Type for bigint validation check functions\n */\ntype BigIntCheck = (value: bigint) => boolean;\n\n/**\n * Configuration for bigint validator\n */\ninterface BigIntValidatorConfig {\n readonly checks: ReadonlyArray<BigIntCheck>;\n readonly errorMessage?: string;\n}\n\n/**\n * Immutable bigint validator\n */\nexport class VldBigInt extends VldBase<bigint, bigint> {\n protected readonly config: BigIntValidatorConfig;\n \n /**\n * Protected constructor to allow extension while maintaining immutability\n */\n protected constructor(config?: Partial<BigIntValidatorConfig>) {\n super();\n this.config = {\n checks: config?.checks || [],\n errorMessage: config?.errorMessage\n };\n }\n \n /**\n * Create a new bigint validator\n */\n static create(): VldBigInt {\n return new VldBigInt();\n }\n \n /**\n * Parse and validate a bigint value\n */\n parse(value: unknown): bigint {\n if (typeof value !== 'bigint') {\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\n }\n \n // Apply all checks\n for (const check of this.config.checks) {\n if (!check(value)) {\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\n }\n }\n \n return value;\n }\n \n /**\n * Safely parse and validate a bigint value\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 \n /**\n * Create a new validator with minimum value constraint\n */\n min(value: bigint, message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v >= value],\n errorMessage: message || `BigInt must be at least ${value}`\n });\n }\n \n /**\n * Create a new validator with maximum value constraint\n */\n max(value: bigint, message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v <= value],\n errorMessage: message || `BigInt must be at most ${value}`\n });\n }\n \n /**\n * Create a new validator that checks for positive values\n */\n positive(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v > 0n],\n errorMessage: message || 'BigInt must be positive'\n });\n }\n \n /**\n * Create a new validator that checks for negative values\n */\n negative(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v < 0n],\n errorMessage: message || 'BigInt must be negative'\n });\n }\n \n /**\n * Create a new validator that checks for non-negative values\n */\n nonnegative(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v >= 0n],\n errorMessage: message || 'BigInt must be non-negative'\n });\n }\n \n /**\n * Create a new validator that checks for non-positive values\n */\n nonpositive(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v <= 0n],\n errorMessage: message || 'BigInt must be non-positive'\n });\n }\n}"]}
1
+ {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Type for bigint validation check functions\r\n */\r\ntype BigIntCheck = (value: bigint) => boolean;\r\n\r\n/**\r\n * Configuration for bigint validator\r\n */\r\ninterface BigIntValidatorConfig {\r\n readonly checks: ReadonlyArray<BigIntCheck>;\r\n readonly errorMessage?: string;\r\n}\r\n\r\n/**\r\n * Immutable bigint validator\r\n */\r\nexport class VldBigInt extends VldBase<bigint, bigint> {\r\n protected readonly config: BigIntValidatorConfig;\r\n \r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(config?: Partial<BigIntValidatorConfig>) {\r\n super();\r\n this.config = {\r\n checks: config?.checks || [],\r\n errorMessage: config?.errorMessage\r\n };\r\n }\r\n \r\n /**\r\n * Create a new bigint validator\r\n */\r\n static create(): VldBigInt {\r\n return new VldBigInt();\r\n }\r\n \r\n /**\r\n * Parse and validate a bigint value\r\n */\r\n parse(value: unknown): bigint {\r\n if (typeof value !== 'bigint') {\r\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\r\n }\r\n \r\n // Apply all checks\r\n for (const check of this.config.checks) {\r\n if (!check(value)) {\r\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\r\n }\r\n }\r\n \r\n return value;\r\n }\r\n \r\n /**\r\n * Safely parse and validate a bigint value\r\n */\r\n safeParse(value: unknown): ParseResult<bigint> {\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 \r\n /**\r\n * Create a new validator with minimum value constraint\r\n */\r\n min(value: bigint, message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v >= value],\r\n errorMessage: message || `BigInt must be at least ${value}`\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator with maximum value constraint\r\n */\r\n max(value: bigint, message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v <= value],\r\n errorMessage: message || `BigInt must be at most ${value}`\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for positive values\r\n */\r\n positive(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v > 0n],\r\n errorMessage: message || 'BigInt must be positive'\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for negative values\r\n */\r\n negative(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v < 0n],\r\n errorMessage: message || 'BigInt must be negative'\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for non-negative values\r\n */\r\n nonnegative(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v >= 0n],\r\n errorMessage: message || 'BigInt must be non-negative'\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for non-positive values\r\n */\r\n nonpositive(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v <= 0n],\r\n errorMessage: message || 'BigInt must be non-positive'\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict greater than constraint\r\n * Zod 4 API parity - strictly greater than (not equal to)\r\n */\r\n gt(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v > compareValue],\r\n errorMessage: message || `BigInt must be greater than ${compareValue}`\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict less than constraint\r\n * Zod 4 API parity - strictly less than (not equal to)\r\n */\r\n lt(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v < compareValue],\r\n errorMessage: message || `BigInt must be less than ${compareValue}`\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with greater than or equal constraint\r\n * Zod 4 API parity - alias for min()\r\n */\r\n gte(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return this.min(compareValue, message);\r\n }\r\n\r\n /**\r\n * Create a new validator with less than or equal constraint\r\n * Zod 4 API parity - alias for max()\r\n */\r\n lte(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return this.max(compareValue, message);\r\n }\r\n}"]}
@@ -1,5 +1,5 @@
1
1
  import { VldBase } from './base.js';
2
- import { getMessages } from '../locales.js';
2
+ import { getMessages } from '../locales/index.js';
3
3
  /**
4
4
  * Immutable boolean validator
5
5
  */
@@ -66,6 +66,20 @@ class VldTrue extends VldBoolean {
66
66
  }
67
67
  return result;
68
68
  }
69
+ // BUG-003 FIX: Override safeParse to ensure true validation
70
+ safeParse(value) {
71
+ const result = super.safeParse(value);
72
+ if (!result.success) {
73
+ return result;
74
+ }
75
+ if (result.data !== true) {
76
+ return {
77
+ success: false,
78
+ error: new Error(this.message)
79
+ };
80
+ }
81
+ return result;
82
+ }
69
83
  }
70
84
  /**
71
85
  * Validator that only accepts false
@@ -82,5 +96,19 @@ class VldFalse extends VldBoolean {
82
96
  }
83
97
  return result;
84
98
  }
99
+ // BUG-003 FIX: Override safeParse to ensure false validation
100
+ safeParse(value) {
101
+ const result = super.safeParse(value);
102
+ if (!result.success) {
103
+ return result;
104
+ }
105
+ if (result.data !== false) {
106
+ return {
107
+ success: false,
108
+ error: new Error(this.message)
109
+ };
110
+ }
111
+ return result;
112
+ }
85
113
  }
86
114
  //# sourceMappingURL=boolean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/validators/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,OAAyB;IAGvD;;OAEG;IACH,YAAsB,YAAqB;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,UAAU,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,cAAc,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACxC,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,cAAc,CAAC;SACpE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAgB;QACnB,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAgB;QACpB,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC;IACxD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAQ,SAAQ,UAAU;IAC9B,YAA6B,OAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QADY,YAAO,GAAP,OAAO,CAAQ;IAE5C,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,QAAS,SAAQ,UAAU;IAC/B,YAA6B,OAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QADY,YAAO,GAAP,OAAO,CAAQ;IAE5C,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable boolean validator\n */\nexport class VldBoolean extends VldBase<boolean, boolean> {\n private readonly errorMessage?: string;\n \n /**\n * Protected constructor to allow extension while maintaining immutability\n */\n protected constructor(errorMessage?: string) {\n super();\n this.errorMessage = errorMessage;\n }\n \n /**\n * Create a new boolean validator\n */\n static create(): VldBoolean {\n return new VldBoolean();\n }\n \n /**\n * Parse and validate a boolean value\n */\n parse(value: unknown): boolean {\n if (typeof value !== 'boolean') {\n throw new Error(this.errorMessage || getMessages().invalidBoolean);\n }\n return value;\n }\n \n /**\n * Safely parse and validate a boolean value\n */\n safeParse(value: unknown): ParseResult<boolean> {\n if (typeof value === 'boolean') {\n return { success: true, data: value };\n }\n return { \n success: false, \n error: new Error(this.errorMessage || getMessages().invalidBoolean) \n };\n }\n \n /**\n * Create a new validator that only accepts true\n */\n true(message?: string): VldBoolean {\n return new VldTrue(message || 'Value must be true');\n }\n \n /**\n * Create a new validator that only accepts false\n */\n false(message?: string): VldBoolean {\n return new VldFalse(message || 'Value must be false');\n }\n}\n\n/**\n * Validator that only accepts true\n */\nclass VldTrue extends VldBoolean {\n constructor(private readonly message: string) {\n super(message);\n }\n \n parse(value: unknown): boolean {\n const result = super.parse(value);\n if (result !== true) {\n throw new Error(this.message);\n }\n return result;\n }\n}\n\n/**\n * Validator that only accepts false\n */\nclass VldFalse extends VldBoolean {\n constructor(private readonly message: string) {\n super(message);\n }\n \n parse(value: unknown): boolean {\n const result = super.parse(value);\n if (result !== false) {\n throw new Error(this.message);\n }\n return result;\n }\n}"]}
1
+ {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/validators/boolean.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Immutable boolean validator\r\n */\r\nexport class VldBoolean extends VldBase<boolean, boolean> {\r\n private readonly errorMessage?: string;\r\n \r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(errorMessage?: string) {\r\n super();\r\n this.errorMessage = errorMessage;\r\n }\r\n \r\n /**\r\n * Create a new boolean validator\r\n */\r\n static create(): VldBoolean {\r\n return new VldBoolean();\r\n }\r\n \r\n /**\r\n * Parse and validate a boolean value\r\n */\r\n parse(value: unknown): boolean {\r\n if (typeof value !== 'boolean') {\r\n throw new Error(this.errorMessage || getMessages().invalidBoolean);\r\n }\r\n return value;\r\n }\r\n \r\n /**\r\n * Safely parse and validate a boolean value\r\n */\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n if (typeof value === 'boolean') {\r\n return { success: true, data: value };\r\n }\r\n return { \r\n success: false, \r\n error: new Error(this.errorMessage || getMessages().invalidBoolean) \r\n };\r\n }\r\n \r\n /**\r\n * Create a new validator that only accepts true\r\n */\r\n true(message?: string): VldBoolean {\r\n return new VldTrue(message || 'Value must be true');\r\n }\r\n \r\n /**\r\n * Create a new validator that only accepts false\r\n */\r\n false(message?: string): VldBoolean {\r\n return new VldFalse(message || 'Value must be false');\r\n }\r\n}\r\n\r\n/**\r\n * Validator that only accepts true\r\n */\r\nclass VldTrue extends VldBoolean {\r\n constructor(private readonly message: string) {\r\n super(message);\r\n }\r\n\r\n parse(value: unknown): boolean {\r\n const result = super.parse(value);\r\n if (result !== true) {\r\n throw new Error(this.message);\r\n }\r\n return result;\r\n }\r\n\r\n // BUG-003 FIX: Override safeParse to ensure true validation\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n const result = super.safeParse(value);\r\n if (!result.success) {\r\n return result;\r\n }\r\n if (result.data !== true) {\r\n return {\r\n success: false,\r\n error: new Error(this.message)\r\n };\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * Validator that only accepts false\r\n */\r\nclass VldFalse extends VldBoolean {\r\n constructor(private readonly message: string) {\r\n super(message);\r\n }\r\n\r\n parse(value: unknown): boolean {\r\n const result = super.parse(value);\r\n if (result !== false) {\r\n throw new Error(this.message);\r\n }\r\n return result;\r\n }\r\n\r\n // BUG-003 FIX: Override safeParse to ensure false validation\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n const result = super.safeParse(value);\r\n if (!result.success) {\r\n return result;\r\n }\r\n if (result.data !== false) {\r\n return {\r\n success: false,\r\n error: new Error(this.message)\r\n };\r\n }\r\n return result;\r\n }\r\n}"]}
@@ -1,6 +1,6 @@
1
1
  import { VldBase } from './base.js';
2
2
  import { VldError, createIssue } from '../errors.js';
3
- import { getMessages } from '../locales.js';
3
+ import { getMessages } from '../locales/index.js';
4
4
  /**
5
5
  * Codec validator for bidirectional transformations
6
6
  * Enables converting between different data representations
@@ -0,0 +1,47 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Type-safe custom validator options
4
+ */
5
+ export interface CustomValidatorOptions<TOutput> {
6
+ /**
7
+ * Parse function that validates and transforms input
8
+ */
9
+ parse: (value: unknown) => TOutput;
10
+ /**
11
+ * Optional safeParse implementation
12
+ * If not provided, will use try-catch around parse()
13
+ */
14
+ safeParse?: (value: unknown) => ParseResult<TOutput>;
15
+ }
16
+ /**
17
+ * Immutable custom validator for user-defined validation logic
18
+ * Provides type safety while allowing complete control over validation
19
+ */
20
+ export declare class VldCustom<TOutput = unknown> extends VldBase<unknown, TOutput> {
21
+ private readonly _parseFn;
22
+ private readonly _safeParseFn;
23
+ private constructor();
24
+ /**
25
+ * Create a new custom validator
26
+ */
27
+ static create<TOutput>(options: CustomValidatorOptions<TOutput>): VldCustom<TOutput>;
28
+ /**
29
+ * Parse and validate using the custom parse function
30
+ */
31
+ parse(value: unknown): TOutput;
32
+ /**
33
+ * Safely parse using the custom safeParse function or default implementation
34
+ */
35
+ safeParse(value: unknown): ParseResult<TOutput>;
36
+ }
37
+ /**
38
+ * Helper function to create custom validators
39
+ * Usage: v.custom<number>({
40
+ * parse: (value) => {
41
+ * if (typeof value !== 'string') throw new Error('Expected string');
42
+ * return parseInt(value, 10);
43
+ * }
44
+ * })
45
+ */
46
+ export declare function custom<TOutput = unknown>(options: CustomValidatorOptions<TOutput>): VldCustom<TOutput>;
47
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/validators/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,OAAO;IAC7C;;OAEG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAEnC;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,qBAAa,SAAS,CAAC,OAAO,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;IAExE,OAAO;IAYP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EACnB,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACvC,SAAS,CAAC,OAAO,CAAC;IAIrB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAGhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAG,OAAO,EACtC,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACvC,SAAS,CAAC,OAAO,CAAC,CAEpB"}
@@ -0,0 +1,50 @@
1
+ import { VldBase } from './base.js';
2
+ /**
3
+ * Immutable custom validator for user-defined validation logic
4
+ * Provides type safety while allowing complete control over validation
5
+ */
6
+ export class VldCustom extends VldBase {
7
+ constructor(options) {
8
+ super();
9
+ this._parseFn = options.parse;
10
+ this._safeParseFn = options.safeParse || ((value) => {
11
+ try {
12
+ return { success: true, data: this._parseFn(value) };
13
+ }
14
+ catch (error) {
15
+ return { success: false, error: error };
16
+ }
17
+ });
18
+ }
19
+ /**
20
+ * Create a new custom validator
21
+ */
22
+ static create(options) {
23
+ return new VldCustom(options);
24
+ }
25
+ /**
26
+ * Parse and validate using the custom parse function
27
+ */
28
+ parse(value) {
29
+ return this._parseFn(value);
30
+ }
31
+ /**
32
+ * Safely parse using the custom safeParse function or default implementation
33
+ */
34
+ safeParse(value) {
35
+ return this._safeParseFn(value);
36
+ }
37
+ }
38
+ /**
39
+ * Helper function to create custom validators
40
+ * Usage: v.custom<number>({
41
+ * parse: (value) => {
42
+ * if (typeof value !== 'string') throw new Error('Expected string');
43
+ * return parseInt(value, 10);
44
+ * }
45
+ * })
46
+ */
47
+ export function custom(options) {
48
+ return VldCustom.create(options);
49
+ }
50
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/validators/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAkB9C;;;GAGG;AACH,MAAM,OAAO,SAA6B,SAAQ,OAAyB;IAIzE,YAAoB,OAAwC;QAC1D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,KAAc,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,OAAwC;QAExC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CACpB,OAAwC;IAExC,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { VldBase, ParseResult } from './base';\r\n\r\n/**\r\n * Type-safe custom validator options\r\n */\r\nexport interface CustomValidatorOptions<TOutput> {\r\n /**\r\n * Parse function that validates and transforms input\r\n */\r\n parse: (value: unknown) => TOutput;\r\n\r\n /**\r\n * Optional safeParse implementation\r\n * If not provided, will use try-catch around parse()\r\n */\r\n safeParse?: (value: unknown) => ParseResult<TOutput>;\r\n}\r\n\r\n/**\r\n * Immutable custom validator for user-defined validation logic\r\n * Provides type safety while allowing complete control over validation\r\n */\r\nexport class VldCustom<TOutput = unknown> extends VldBase<unknown, TOutput> {\r\n private readonly _parseFn: (value: unknown) => TOutput;\r\n private readonly _safeParseFn: (value: unknown) => ParseResult<TOutput>;\r\n\r\n private constructor(options: CustomValidatorOptions<TOutput>) {\r\n super();\r\n this._parseFn = options.parse;\r\n this._safeParseFn = options.safeParse || ((value: unknown) => {\r\n try {\r\n return { success: true, data: this._parseFn(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Create a new custom validator\r\n */\r\n static create<TOutput>(\r\n options: CustomValidatorOptions<TOutput>\r\n ): VldCustom<TOutput> {\r\n return new VldCustom(options);\r\n }\r\n\r\n /**\r\n * Parse and validate using the custom parse function\r\n */\r\n parse(value: unknown): TOutput {\r\n return this._parseFn(value);\r\n }\r\n\r\n /**\r\n * Safely parse using the custom safeParse function or default implementation\r\n */\r\n safeParse(value: unknown): ParseResult<TOutput> {\r\n return this._safeParseFn(value);\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create custom validators\r\n * Usage: v.custom<number>({\r\n * parse: (value) => {\r\n * if (typeof value !== 'string') throw new Error('Expected string');\r\n * return parseInt(value, 10);\r\n * }\r\n * })\r\n */\r\nexport function custom<TOutput = unknown>(\r\n options: CustomValidatorOptions<TOutput>\r\n): VldCustom<TOutput> {\r\n return VldCustom.create(options);\r\n}\r\n"]}
@@ -37,26 +37,32 @@ export declare class VldDate extends VldBase<Date, Date> {
37
37
  safeParse(value: unknown): ParseResult<Date>;
38
38
  /**
39
39
  * Create a new validator with minimum date constraint
40
+ * BUG-NEW-009 FIX: Validate that min date is valid before creating validator
40
41
  */
41
42
  min(date: Date | string | number, message?: string): VldDate;
42
43
  /**
43
44
  * Create a new validator with maximum date constraint
45
+ * BUG-NEW-009 FIX: Validate that max date is valid before creating validator
44
46
  */
45
47
  max(date: Date | string | number, message?: string): VldDate;
46
48
  /**
47
49
  * Create a new validator with a range constraint
50
+ * BUG-NEW-019 FIX: Validate that min/max dates are valid before creating validator
48
51
  */
49
52
  between(min: Date | string | number, max: Date | string | number, message?: string): VldDate;
50
53
  /**
51
54
  * Create a new validator that checks if date is in the past
55
+ * BUG-NEW-006 FIX: Capture reference date at validator creation time for deterministic behavior
52
56
  */
53
57
  past(message?: string): VldDate;
54
58
  /**
55
59
  * Create a new validator that checks if date is in the future
60
+ * BUG-NEW-006 FIX: Capture reference date at validator creation time for deterministic behavior
56
61
  */
57
62
  future(message?: string): VldDate;
58
63
  /**
59
64
  * Create a new validator that checks if date is today
65
+ * BUG-NEW-008 FIX: Capture reference date at validator creation time for deterministic behavior
60
66
  */
61
67
  today(message?: string): VldDate;
62
68
  /**
@@ -67,6 +73,16 @@ export declare class VldDate extends VldBase<Date, Date> {
67
73
  * Create a new validator that checks if date is a weekend
68
74
  */
69
75
  weekend(message?: string): VldDate;
76
+ /**
77
+ * Create a new validator with strict greater than constraint
78
+ * Zod 4 API parity - strictly greater than (not equal to)
79
+ */
80
+ gt(value: Date | number, message?: string): VldDate;
81
+ /**
82
+ * Create a new validator with strict less than constraint
83
+ * Zod 4 API parity - strictly less than (not equal to)
84
+ */
85
+ lt(value: Date | number, message?: string): VldDate;
70
86
  }
71
87
  export {};
72
88
  //# sourceMappingURL=date.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;AAE5C,UAAU,SAAS;IACjB,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAQ3D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IAIxB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IA0B3B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;IAQ5C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAW5D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAW5D;;OAEG;IACH,OAAO,CACL,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAC3B,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO;IAYV;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAU/B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAUjC;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAehC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAalC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;CAYnC"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;AAE5C,UAAU,SAAS;IACjB,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAQ3D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IAIxB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IA0B3B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;IAQ5C;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAiB5D;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAiB5D;;;OAGG;IACH,OAAO,CACL,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAC3B,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO;IAqBV;;;OAGG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAW/B;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAWjC;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAoBhC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAalC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAalC;;;OAGG;IACH,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAWnD;;;OAGG;IACH,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;CAUpD"}
@@ -1,5 +1,5 @@
1
1
  import { VldBase } from './base.js';
2
- import { getMessages } from '../locales.js';
2
+ import { getMessages } from '../locales/index.js';
3
3
  /**
4
4
  * Immutable date validator with chainable methods
5
5
  */
@@ -59,9 +59,14 @@ export class VldDate extends VldBase {
59
59
  }
60
60
  /**
61
61
  * Create a new validator with minimum date constraint
62
+ * BUG-NEW-009 FIX: Validate that min date is valid before creating validator
62
63
  */
63
64
  min(date, message) {
64
65
  const minDate = date instanceof Date ? date : new Date(date);
66
+ // Validate that minDate is valid
67
+ if (isNaN(minDate.getTime())) {
68
+ throw new Error(`Invalid date provided to min(): ${date}`);
69
+ }
65
70
  return new VldDate({
66
71
  ...this.config,
67
72
  checks: [...this.config.checks, {
@@ -72,9 +77,14 @@ export class VldDate extends VldBase {
72
77
  }
73
78
  /**
74
79
  * Create a new validator with maximum date constraint
80
+ * BUG-NEW-009 FIX: Validate that max date is valid before creating validator
75
81
  */
76
82
  max(date, message) {
77
83
  const maxDate = date instanceof Date ? date : new Date(date);
84
+ // Validate that maxDate is valid
85
+ if (isNaN(maxDate.getTime())) {
86
+ throw new Error(`Invalid date provided to max(): ${date}`);
87
+ }
78
88
  return new VldDate({
79
89
  ...this.config,
80
90
  checks: [...this.config.checks, {
@@ -85,10 +95,18 @@ export class VldDate extends VldBase {
85
95
  }
86
96
  /**
87
97
  * Create a new validator with a range constraint
98
+ * BUG-NEW-019 FIX: Validate that min/max dates are valid before creating validator
88
99
  */
89
100
  between(min, max, message) {
90
101
  const minDate = min instanceof Date ? min : new Date(min);
91
102
  const maxDate = max instanceof Date ? max : new Date(max);
103
+ // Validate that both dates are valid
104
+ if (isNaN(minDate.getTime())) {
105
+ throw new Error(`Invalid min date provided to between(): ${min}`);
106
+ }
107
+ if (isNaN(maxDate.getTime())) {
108
+ throw new Error(`Invalid max date provided to between(): ${max}`);
109
+ }
92
110
  return new VldDate({
93
111
  ...this.config,
94
112
  checks: [...this.config.checks, {
@@ -99,40 +117,49 @@ export class VldDate extends VldBase {
99
117
  }
100
118
  /**
101
119
  * Create a new validator that checks if date is in the past
120
+ * BUG-NEW-006 FIX: Capture reference date at validator creation time for deterministic behavior
102
121
  */
103
122
  past(message) {
123
+ const referenceDate = new Date(); // Capture NOW at validator creation time
104
124
  return new VldDate({
105
125
  ...this.config,
106
126
  checks: [...this.config.checks, {
107
- fn: (v) => v < new Date(),
127
+ fn: (v) => v < referenceDate,
108
128
  message: message || 'Date must be in the past'
109
129
  }]
110
130
  });
111
131
  }
112
132
  /**
113
133
  * Create a new validator that checks if date is in the future
134
+ * BUG-NEW-006 FIX: Capture reference date at validator creation time for deterministic behavior
114
135
  */
115
136
  future(message) {
137
+ const referenceDate = new Date(); // Capture NOW at validator creation time
116
138
  return new VldDate({
117
139
  ...this.config,
118
140
  checks: [...this.config.checks, {
119
- fn: (v) => v > new Date(),
141
+ fn: (v) => v > referenceDate,
120
142
  message: message || 'Date must be in the future'
121
143
  }]
122
144
  });
123
145
  }
124
146
  /**
125
147
  * Create a new validator that checks if date is today
148
+ * BUG-NEW-008 FIX: Capture reference date at validator creation time for deterministic behavior
126
149
  */
127
150
  today(message) {
151
+ // Capture the reference date (today) at validator creation time
152
+ const referenceDate = new Date();
153
+ const refYear = referenceDate.getFullYear();
154
+ const refMonth = referenceDate.getMonth();
155
+ const refDate = referenceDate.getDate();
128
156
  return new VldDate({
129
157
  ...this.config,
130
158
  checks: [...this.config.checks, {
131
159
  fn: (v) => {
132
- const today = new Date();
133
- return v.getFullYear() === today.getFullYear() &&
134
- v.getMonth() === today.getMonth() &&
135
- v.getDate() === today.getDate();
160
+ return v.getFullYear() === refYear &&
161
+ v.getMonth() === refMonth &&
162
+ v.getDate() === refDate;
136
163
  },
137
164
  message: message || 'Date must be today'
138
165
  }]
@@ -168,5 +195,33 @@ export class VldDate extends VldBase {
168
195
  }]
169
196
  });
170
197
  }
198
+ /**
199
+ * Create a new validator with strict greater than constraint
200
+ * Zod 4 API parity - strictly greater than (not equal to)
201
+ */
202
+ gt(value, message) {
203
+ const compareDate = value instanceof Date ? value : new Date(value);
204
+ return new VldDate({
205
+ ...this.config,
206
+ checks: [...this.config.checks, {
207
+ fn: (v) => v.getTime() > compareDate.getTime(),
208
+ message: message || `Date must be greater than ${compareDate.toISOString()}`
209
+ }]
210
+ });
211
+ }
212
+ /**
213
+ * Create a new validator with strict less than constraint
214
+ * Zod 4 API parity - strictly less than (not equal to)
215
+ */
216
+ lt(value, message) {
217
+ const compareDate = value instanceof Date ? value : new Date(value);
218
+ return new VldDate({
219
+ ...this.config,
220
+ checks: [...this.config.checks, {
221
+ fn: (v) => v.getTime() < compareDate.getTime(),
222
+ message: message || `Date must be less than ${compareDate.toISOString()}`
223
+ }]
224
+ });
225
+ }
171
226
  }
172
227
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Type for date validation check functions\r\n */\r\ntype DateCheckFn = (value: Date) => boolean;\r\n\r\ninterface DateCheck {\r\n fn: DateCheckFn;\r\n message: string;\r\n}\r\n\r\n/**\r\n * Configuration for date validator\r\n */\r\ninterface DateValidatorConfig {\r\n readonly checks: ReadonlyArray<DateCheck>;\r\n readonly errorMessage?: string;\r\n}\r\n\r\n/**\r\n * Immutable date validator with chainable methods\r\n */\r\nexport class VldDate extends VldBase<Date, Date> {\r\n private readonly config: DateValidatorConfig;\r\n\r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(config?: Partial<DateValidatorConfig>) {\r\n super();\r\n this.config = {\r\n checks: config?.checks || [],\r\n errorMessage: config?.errorMessage\r\n };\r\n }\r\n\r\n /**\r\n * Create a new date validator\r\n */\r\n static create(): VldDate {\r\n return new VldDate();\r\n }\r\n\r\n /**\r\n * Parse and validate a date value\r\n */\r\n parse(value: unknown): Date {\r\n let date: Date;\r\n\r\n if (value instanceof Date) {\r\n date = value;\r\n } else if (typeof value === 'string' || typeof value === 'number') {\r\n date = new Date(value);\r\n } else {\r\n throw new Error(this.config.errorMessage || getMessages().invalidDate);\r\n }\r\n\r\n // Check if the date is valid\r\n if (isNaN(date.getTime())) {\r\n throw new Error(this.config.errorMessage || getMessages().invalidDate);\r\n }\r\n\r\n // Apply all checks\r\n for (const check of this.config.checks) {\r\n if (!check.fn(date)) {\r\n throw new Error(check.message);\r\n }\r\n }\r\n\r\n return date;\r\n }\r\n\r\n /**\r\n * Safely parse and validate a date value\r\n */\r\n safeParse(value: unknown): ParseResult<Date> {\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\r\n /**\r\n * Create a new validator with minimum date constraint\r\n */\r\n min(date: Date | string | number, message?: string): VldDate {\r\n const minDate = date instanceof Date ? date : new Date(date);\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v >= minDate,\r\n message: message || getMessages().dateMin(minDate)\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with maximum date constraint\r\n */\r\n max(date: Date | string | number, message?: string): VldDate {\r\n const maxDate = date instanceof Date ? date : new Date(date);\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v <= maxDate,\r\n message: message || getMessages().dateMax(maxDate)\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with a range constraint\r\n */\r\n between(\r\n min: Date | string | number,\r\n max: Date | string | number,\r\n message?: string\r\n ): VldDate {\r\n const minDate = min instanceof Date ? min : new Date(min);\r\n const maxDate = max instanceof Date ? max : new Date(max);\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v >= minDate && v <= maxDate,\r\n message: message || `Date must be between ${minDate.toISOString()} and ${maxDate.toISOString()}`\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is in the past\r\n */\r\n past(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v < new Date(),\r\n message: message || 'Date must be in the past'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is in the future\r\n */\r\n future(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v > new Date(),\r\n message: message || 'Date must be in the future'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is today\r\n */\r\n today(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => {\r\n const today = new Date();\r\n return v.getFullYear() === today.getFullYear() &&\r\n v.getMonth() === today.getMonth() &&\r\n v.getDate() === today.getDate();\r\n },\r\n message: message || 'Date must be today'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is a weekday\r\n */\r\n weekday(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => {\r\n const day = v.getDay();\r\n return day >= 1 && day <= 5;\r\n },\r\n message: message || 'Date must be a weekday'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is a weekend\r\n */\r\n weekend(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => {\r\n const day = v.getDay();\r\n return day === 0 || day === 6;\r\n },\r\n message: message || 'Date must be a weekend'\r\n }]\r\n });\r\n }\r\n}"]}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Type for date validation check functions\r\n */\r\ntype DateCheckFn = (value: Date) => boolean;\r\n\r\ninterface DateCheck {\r\n fn: DateCheckFn;\r\n message: string;\r\n}\r\n\r\n/**\r\n * Configuration for date validator\r\n */\r\ninterface DateValidatorConfig {\r\n readonly checks: ReadonlyArray<DateCheck>;\r\n readonly errorMessage?: string;\r\n}\r\n\r\n/**\r\n * Immutable date validator with chainable methods\r\n */\r\nexport class VldDate extends VldBase<Date, Date> {\r\n private readonly config: DateValidatorConfig;\r\n\r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(config?: Partial<DateValidatorConfig>) {\r\n super();\r\n this.config = {\r\n checks: config?.checks || [],\r\n errorMessage: config?.errorMessage\r\n };\r\n }\r\n\r\n /**\r\n * Create a new date validator\r\n */\r\n static create(): VldDate {\r\n return new VldDate();\r\n }\r\n\r\n /**\r\n * Parse and validate a date value\r\n */\r\n parse(value: unknown): Date {\r\n let date: Date;\r\n\r\n if (value instanceof Date) {\r\n date = value;\r\n } else if (typeof value === 'string' || typeof value === 'number') {\r\n date = new Date(value);\r\n } else {\r\n throw new Error(this.config.errorMessage || getMessages().invalidDate);\r\n }\r\n\r\n // Check if the date is valid\r\n if (isNaN(date.getTime())) {\r\n throw new Error(this.config.errorMessage || getMessages().invalidDate);\r\n }\r\n\r\n // Apply all checks\r\n for (const check of this.config.checks) {\r\n if (!check.fn(date)) {\r\n throw new Error(check.message);\r\n }\r\n }\r\n\r\n return date;\r\n }\r\n\r\n /**\r\n * Safely parse and validate a date value\r\n */\r\n safeParse(value: unknown): ParseResult<Date> {\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\r\n /**\r\n * Create a new validator with minimum date constraint\r\n * BUG-NEW-009 FIX: Validate that min date is valid before creating validator\r\n */\r\n min(date: Date | string | number, message?: string): VldDate {\r\n const minDate = date instanceof Date ? date : new Date(date);\r\n\r\n // Validate that minDate is valid\r\n if (isNaN(minDate.getTime())) {\r\n throw new Error(`Invalid date provided to min(): ${date}`);\r\n }\r\n\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v >= minDate,\r\n message: message || getMessages().dateMin(minDate)\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with maximum date constraint\r\n * BUG-NEW-009 FIX: Validate that max date is valid before creating validator\r\n */\r\n max(date: Date | string | number, message?: string): VldDate {\r\n const maxDate = date instanceof Date ? date : new Date(date);\r\n\r\n // Validate that maxDate is valid\r\n if (isNaN(maxDate.getTime())) {\r\n throw new Error(`Invalid date provided to max(): ${date}`);\r\n }\r\n\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v <= maxDate,\r\n message: message || getMessages().dateMax(maxDate)\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with a range constraint\r\n * BUG-NEW-019 FIX: Validate that min/max dates are valid before creating validator\r\n */\r\n between(\r\n min: Date | string | number,\r\n max: Date | string | number,\r\n message?: string\r\n ): VldDate {\r\n const minDate = min instanceof Date ? min : new Date(min);\r\n const maxDate = max instanceof Date ? max : new Date(max);\r\n\r\n // Validate that both dates are valid\r\n if (isNaN(minDate.getTime())) {\r\n throw new Error(`Invalid min date provided to between(): ${min}`);\r\n }\r\n if (isNaN(maxDate.getTime())) {\r\n throw new Error(`Invalid max date provided to between(): ${max}`);\r\n }\r\n\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v >= minDate && v <= maxDate,\r\n message: message || `Date must be between ${minDate.toISOString()} and ${maxDate.toISOString()}`\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is in the past\r\n * BUG-NEW-006 FIX: Capture reference date at validator creation time for deterministic behavior\r\n */\r\n past(message?: string): VldDate {\r\n const referenceDate = new Date(); // Capture NOW at validator creation time\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v < referenceDate,\r\n message: message || 'Date must be in the past'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is in the future\r\n * BUG-NEW-006 FIX: Capture reference date at validator creation time for deterministic behavior\r\n */\r\n future(message?: string): VldDate {\r\n const referenceDate = new Date(); // Capture NOW at validator creation time\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v > referenceDate,\r\n message: message || 'Date must be in the future'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is today\r\n * BUG-NEW-008 FIX: Capture reference date at validator creation time for deterministic behavior\r\n */\r\n today(message?: string): VldDate {\r\n // Capture the reference date (today) at validator creation time\r\n const referenceDate = new Date();\r\n const refYear = referenceDate.getFullYear();\r\n const refMonth = referenceDate.getMonth();\r\n const refDate = referenceDate.getDate();\r\n\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => {\r\n return v.getFullYear() === refYear &&\r\n v.getMonth() === refMonth &&\r\n v.getDate() === refDate;\r\n },\r\n message: message || 'Date must be today'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is a weekday\r\n */\r\n weekday(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => {\r\n const day = v.getDay();\r\n return day >= 1 && day <= 5;\r\n },\r\n message: message || 'Date must be a weekday'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator that checks if date is a weekend\r\n */\r\n weekend(message?: string): VldDate {\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => {\r\n const day = v.getDay();\r\n return day === 0 || day === 6;\r\n },\r\n message: message || 'Date must be a weekend'\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict greater than constraint\r\n * Zod 4 API parity - strictly greater than (not equal to)\r\n */\r\n gt(value: Date | number, message?: string): VldDate {\r\n const compareDate = value instanceof Date ? value : new Date(value);\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v.getTime() > compareDate.getTime(),\r\n message: message || `Date must be greater than ${compareDate.toISOString()}`\r\n }]\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict less than constraint\r\n * Zod 4 API parity - strictly less than (not equal to)\r\n */\r\n lt(value: Date | number, message?: string): VldDate {\r\n const compareDate = value instanceof Date ? value : new Date(value);\r\n return new VldDate({\r\n ...this.config,\r\n checks: [...this.config.checks, {\r\n fn: (v: Date) => v.getTime() < compareDate.getTime(),\r\n message: message || `Date must be less than ${compareDate.toISOString()}`\r\n }]\r\n });\r\n }\r\n}"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * VldDiscriminatedUnion - Fast union validation using discriminator field
3
+ * Part of Zod 4 API parity implementation
4
+ * Provides O(1) lookup performance by using a discriminator key
5
+ */
6
+ import { VldBase } from './base';
7
+ import type { ParseResult } from './base';
8
+ /**
9
+ * Discriminated union validator - validates union based on discriminator key
10
+ * Much faster than regular union when you have a discriminator field
11
+ */
12
+ export declare class VldDiscriminatedUnion<K extends string, Options extends VldBase<any, any>[]> extends VldBase<unknown, Options[number] extends VldBase<any, infer T> ? T : never> {
13
+ private readonly _discriminator;
14
+ private readonly _options;
15
+ private readonly _discriminatorMap;
16
+ constructor(_discriminator: K, _options: Options);
17
+ static create<K extends string, Options extends VldBase<any, any>[]>(discriminator: K, options: Options): VldDiscriminatedUnion<K, Options>;
18
+ parse(value: unknown): Options[number] extends VldBase<any, infer T> ? T : never;
19
+ safeParse(value: unknown): ParseResult<Options[number] extends VldBase<any, infer T> ? T : never>;
20
+ /**
21
+ * Get the discriminator key
22
+ */
23
+ getDiscriminator(): K;
24
+ /**
25
+ * Get all options
26
+ */
27
+ getOptions(): Options;
28
+ }
29
+ //# sourceMappingURL=discriminated-union.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../src/validators/discriminated-union.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAgB1C;;;GAGG;AACH,qBAAa,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CACtF,SAAQ,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAKjF,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;gBAGjD,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,OAAO;IA4BpC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACjE,aAAa,EAAE,CAAC,EAChB,OAAO,EAAE,OAAO,GACf,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC;IAIpC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;IAQhF,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAiCjG;;OAEG;IACH,gBAAgB,IAAI,CAAC;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;CAGtB"}