@oxog/vld 2.0.3 → 2.1.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 (449) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +101 -37
  3. package/dist/chunks/errors-core-BeiFUtZM.js +81 -0
  4. package/dist/chunks/{index-DO8CFMxD.js → index-0R2ntSud.js} +16 -402
  5. package/dist/chunks/index-BvH403Yy.js +88 -0
  6. package/dist/chunks/security-B0Pd_vSY.js +35 -0
  7. package/dist/chunks/string-BJRQod3t.js +530 -0
  8. package/dist/cjs/chunks/errors-core-DWxLFs2f.cjs +83 -0
  9. package/dist/cjs/chunks/index-BkI37108.cjs +538 -0
  10. package/dist/cjs/chunks/index-Cc3bjUMX.cjs +91 -0
  11. package/dist/cjs/chunks/security-Dc3Jh13T.cjs +37 -0
  12. package/dist/cjs/chunks/string-BKZrc4hs.cjs +533 -0
  13. package/dist/cjs/cli/bin.cjs +506 -0
  14. package/dist/cjs/cli/index.cjs +209 -0
  15. package/dist/cjs/codecs/index.cjs +45 -0
  16. package/dist/{chunks/date-50JV_Mfj.js → cjs/coercion/index.cjs} +185 -103
  17. package/dist/cjs/compat/emitter.cjs +184 -0
  18. package/dist/cjs/compat/result.cjs +189 -0
  19. package/dist/cjs/errors.cjs +6 -213
  20. package/dist/cjs/index.cjs +1471 -10336
  21. package/dist/cjs/kernel.cjs +415 -0
  22. package/dist/cjs/locales/af.cjs +108 -0
  23. package/dist/cjs/locales/ar.cjs +108 -0
  24. package/dist/cjs/locales/bn.cjs +108 -0
  25. package/dist/cjs/locales/da.cjs +108 -0
  26. package/dist/cjs/locales/de.cjs +108 -0
  27. package/dist/cjs/locales/en.cjs +108 -0
  28. package/dist/cjs/locales/es-MX.cjs +107 -0
  29. package/dist/cjs/locales/es.cjs +96 -0
  30. package/dist/cjs/locales/fi.cjs +108 -0
  31. package/dist/cjs/locales/fr.cjs +96 -0
  32. package/dist/cjs/locales/hi.cjs +108 -0
  33. package/dist/cjs/locales/id.cjs +108 -0
  34. package/dist/cjs/locales/index.cjs +41 -2875
  35. package/dist/cjs/locales/it.cjs +108 -0
  36. package/dist/cjs/locales/ja.cjs +108 -0
  37. package/dist/cjs/locales/ko.cjs +108 -0
  38. package/dist/cjs/locales/lazy.cjs +42 -3023
  39. package/dist/cjs/locales/nl.cjs +108 -0
  40. package/dist/cjs/locales/no.cjs +108 -0
  41. package/dist/cjs/locales/pl.cjs +108 -0
  42. package/dist/cjs/locales/pt-BR.cjs +108 -0
  43. package/dist/cjs/locales/pt.cjs +108 -0
  44. package/dist/cjs/locales/ru.cjs +108 -0
  45. package/dist/cjs/locales/runtime.cjs +51 -0
  46. package/dist/cjs/locales/sv.cjs +108 -0
  47. package/dist/cjs/locales/sw.cjs +108 -0
  48. package/dist/cjs/locales/th.cjs +108 -0
  49. package/dist/cjs/locales/tr.cjs +108 -0
  50. package/dist/cjs/locales/vi.cjs +108 -0
  51. package/dist/cjs/locales/zh.cjs +108 -0
  52. package/dist/cjs/mini.cjs +121 -7353
  53. package/dist/cjs/pigment.cjs +207 -0
  54. package/dist/cjs/plugins/index.cjs +12 -0
  55. package/dist/cjs/registry.cjs +37 -0
  56. package/dist/cjs/v3/index.cjs +425 -0
  57. package/dist/cjs/v4/core/index.cjs +894 -0
  58. package/dist/cjs/v4/index.cjs +425 -0
  59. package/dist/cjs/v4/locales/index.cjs +130 -0
  60. package/dist/cjs/v4/mini/index.cjs +509 -0
  61. package/dist/cjs/v4-mini/index.cjs +532 -0
  62. package/dist/cjs/validators/any.cjs +40 -0
  63. package/dist/cjs/validators/array.cjs +283 -0
  64. package/dist/cjs/validators/base.cjs +887 -0
  65. package/dist/cjs/validators/base64.cjs +73 -0
  66. package/dist/cjs/validators/bigint.cjs +232 -0
  67. package/dist/cjs/validators/boolean.cjs +146 -0
  68. package/dist/cjs/validators/codec.cjs +205 -0
  69. package/dist/cjs/validators/custom.cjs +71 -0
  70. package/dist/cjs/validators/date.cjs +278 -0
  71. package/dist/cjs/validators/discriminated-union.cjs +130 -0
  72. package/dist/cjs/validators/enum.cjs +154 -0
  73. package/dist/cjs/validators/file.cjs +130 -0
  74. package/dist/cjs/validators/function.cjs +63 -0
  75. package/dist/cjs/validators/hex.cjs +70 -0
  76. package/dist/cjs/validators/index.cjs +123 -0
  77. package/dist/cjs/validators/intersection.cjs +120 -0
  78. package/dist/cjs/validators/json.cjs +70 -0
  79. package/dist/cjs/validators/lazy.cjs +53 -0
  80. package/dist/cjs/validators/literal.cjs +64 -0
  81. package/dist/cjs/validators/map.cjs +218 -0
  82. package/dist/cjs/validators/nan.cjs +41 -0
  83. package/dist/cjs/validators/never.cjs +36 -0
  84. package/dist/cjs/validators/null.cjs +43 -0
  85. package/dist/cjs/validators/number.cjs +427 -0
  86. package/dist/cjs/validators/object.cjs +868 -0
  87. package/dist/cjs/validators/promise.cjs +115 -0
  88. package/dist/cjs/validators/record.cjs +262 -0
  89. package/dist/cjs/validators/set.cjs +203 -0
  90. package/dist/cjs/validators/string-bool.cjs +124 -0
  91. package/dist/cjs/validators/string-formats.cjs +168 -0
  92. package/dist/cjs/validators/string.cjs +12 -0
  93. package/dist/cjs/validators/symbol.cjs +62 -0
  94. package/dist/cjs/validators/template-literal.cjs +108 -0
  95. package/dist/cjs/validators/tuple.cjs +187 -0
  96. package/dist/cjs/validators/uint8array.cjs +106 -0
  97. package/dist/cjs/validators/undefined.cjs +43 -0
  98. package/dist/cjs/validators/union.cjs +191 -0
  99. package/dist/cjs/validators/unknown.cjs +40 -0
  100. package/dist/cjs/validators/void.cjs +48 -0
  101. package/dist/cjs/validators/xor.cjs +69 -0
  102. package/dist/cli/bin.d.ts +0 -1
  103. package/dist/cli/bin.js +407 -0
  104. package/dist/cli/commands/benchmark.d.ts +1 -2
  105. package/dist/cli/commands/validate.d.ts +1 -2
  106. package/dist/cli/index.d.ts +0 -1
  107. package/dist/cli/index.js +205 -0
  108. package/dist/codecs/index.d.ts +21 -4
  109. package/dist/codecs/index.js +11 -4
  110. package/dist/coercion/bigint.d.ts +2 -3
  111. package/dist/coercion/boolean.d.ts +3 -3
  112. package/dist/coercion/date.d.ts +3 -3
  113. package/dist/coercion/index.d.ts +5 -6
  114. package/dist/coercion/index.js +473 -5
  115. package/dist/coercion/number.d.ts +2 -3
  116. package/dist/coercion/string.d.ts +2 -3
  117. package/dist/compat/emitter.d.ts +0 -1
  118. package/dist/compat/emitter.js +0 -1
  119. package/dist/compat/index.d.ts +4 -5
  120. package/dist/compat/result.d.ts +1 -2
  121. package/dist/compat/result.js +0 -1
  122. package/dist/errors-core.d.ts +39 -0
  123. package/dist/errors.d.ts +4 -54
  124. package/dist/errors.js +4 -68
  125. package/dist/events.d.ts +3 -4
  126. package/dist/index.d.ts +1186 -835
  127. package/dist/index.js +1046 -367
  128. package/dist/kernel.d.ts +2 -3
  129. package/dist/kernel.js +10 -6
  130. package/dist/locales/af.d.ts +1 -2
  131. package/dist/locales/af.js +0 -1
  132. package/dist/locales/ar.d.ts +1 -2
  133. package/dist/locales/ar.js +0 -1
  134. package/dist/locales/bn.d.ts +1 -2
  135. package/dist/locales/bn.js +0 -1
  136. package/dist/locales/da.d.ts +1 -2
  137. package/dist/locales/da.js +0 -1
  138. package/dist/locales/de.d.ts +1 -2
  139. package/dist/locales/de.js +0 -1
  140. package/dist/locales/en.d.ts +1 -2
  141. package/dist/locales/en.js +0 -1
  142. package/dist/locales/es-MX.d.ts +1 -2
  143. package/dist/locales/es-MX.js +0 -1
  144. package/dist/locales/es.d.ts +1 -2
  145. package/dist/locales/es.js +0 -1
  146. package/dist/locales/fi.d.ts +1 -2
  147. package/dist/locales/fi.js +0 -1
  148. package/dist/locales/fr.d.ts +1 -2
  149. package/dist/locales/fr.js +0 -1
  150. package/dist/locales/hi.d.ts +1 -2
  151. package/dist/locales/hi.js +0 -1
  152. package/dist/locales/id.d.ts +1 -2
  153. package/dist/locales/id.js +0 -1
  154. package/dist/locales/index.d.ts +10 -15
  155. package/dist/locales/index.js +28 -2
  156. package/dist/locales/it.d.ts +1 -2
  157. package/dist/locales/it.js +0 -1
  158. package/dist/locales/ja.d.ts +1 -2
  159. package/dist/locales/ja.js +0 -1
  160. package/dist/locales/ko.d.ts +1 -2
  161. package/dist/locales/ko.js +0 -1
  162. package/dist/locales/lazy.d.ts +4 -26
  163. package/dist/locales/lazy.js +12 -55
  164. package/dist/locales/nl.d.ts +1 -2
  165. package/dist/locales/nl.js +0 -1
  166. package/dist/locales/no.d.ts +1 -2
  167. package/dist/locales/no.js +0 -1
  168. package/dist/locales/pl.d.ts +1 -2
  169. package/dist/locales/pl.js +0 -1
  170. package/dist/locales/pt-BR.d.ts +1 -2
  171. package/dist/locales/pt-BR.js +0 -1
  172. package/dist/locales/pt.d.ts +1 -2
  173. package/dist/locales/pt.js +0 -1
  174. package/dist/locales/ru.d.ts +1 -2
  175. package/dist/locales/ru.js +0 -1
  176. package/dist/locales/runtime.d.ts +10 -0
  177. package/dist/locales/runtime.js +41 -0
  178. package/dist/locales/sv.d.ts +1 -2
  179. package/dist/locales/sv.js +0 -1
  180. package/dist/locales/sw.d.ts +1 -2
  181. package/dist/locales/sw.js +0 -1
  182. package/dist/locales/th.d.ts +1 -2
  183. package/dist/locales/th.js +0 -1
  184. package/dist/locales/tr.d.ts +1 -2
  185. package/dist/locales/tr.js +0 -1
  186. package/dist/locales/types.d.ts +0 -1
  187. package/dist/locales/vi.d.ts +1 -2
  188. package/dist/locales/vi.js +0 -1
  189. package/dist/locales/zh.d.ts +1 -2
  190. package/dist/locales/zh.js +0 -1
  191. package/dist/logger.d.ts +0 -1
  192. package/dist/mini.d.ts +64 -65
  193. package/dist/mini.js +31 -7
  194. package/dist/pigment.d.ts +0 -1
  195. package/dist/pigment.js +6 -4
  196. package/dist/plugins/index.d.ts +2 -3
  197. package/dist/plugins/index.js +1 -0
  198. package/dist/plugins/types.d.ts +4 -5
  199. package/dist/registry.d.ts +23 -0
  200. package/dist/registry.js +34 -0
  201. package/dist/utils/codec-utils.d.ts +0 -1
  202. package/dist/utils/deep-merge.d.ts +0 -1
  203. package/dist/utils/ip-validation.d.ts +0 -1
  204. package/dist/utils/json-schema.d.ts +16 -6
  205. package/dist/utils/security.d.ts +2 -6
  206. package/dist/v3/index.d.ts +2 -0
  207. package/dist/v3/index.js +46 -0
  208. package/dist/v4/core/index.d.ts +260 -0
  209. package/dist/v4/core/index.js +277 -0
  210. package/dist/v4/index.d.ts +4 -0
  211. package/dist/v4/index.js +50 -0
  212. package/dist/v4/locales/index.d.ts +53 -0
  213. package/dist/v4/locales/index.js +77 -0
  214. package/dist/v4/mini/index.d.ts +2 -0
  215. package/dist/v4/mini/index.js +47 -0
  216. package/dist/v4-mini/index.d.ts +22 -0
  217. package/dist/v4-mini/index.js +75 -0
  218. package/dist/validators/any.d.ts +7 -2
  219. package/dist/validators/any.js +37 -0
  220. package/dist/validators/array.d.ts +9 -2
  221. package/dist/validators/array.js +279 -0
  222. package/dist/validators/base.d.ts +150 -6
  223. package/dist/validators/base.js +868 -0
  224. package/dist/validators/base64.d.ts +1 -2
  225. package/dist/validators/base64.js +68 -0
  226. package/dist/validators/bigint.d.ts +21 -3
  227. package/dist/validators/bigint.js +228 -0
  228. package/dist/validators/boolean.d.ts +13 -4
  229. package/dist/validators/boolean.js +142 -0
  230. package/dist/validators/codec.d.ts +9 -2
  231. package/dist/validators/codec.js +200 -0
  232. package/dist/validators/custom.d.ts +15 -2
  233. package/dist/validators/custom.js +67 -0
  234. package/dist/validators/date.d.ts +19 -3
  235. package/dist/validators/date.js +274 -0
  236. package/dist/validators/discriminated-union.d.ts +4 -3
  237. package/dist/validators/discriminated-union.js +123 -0
  238. package/dist/validators/enum.d.ts +10 -7
  239. package/dist/validators/enum.js +150 -0
  240. package/dist/validators/file.d.ts +7 -2
  241. package/dist/validators/file.js +125 -0
  242. package/dist/validators/function.d.ts +11 -5
  243. package/dist/validators/function.js +58 -0
  244. package/dist/validators/hex.d.ts +1 -2
  245. package/dist/validators/hex.js +65 -0
  246. package/dist/validators/index.d.ts +38 -39
  247. package/dist/validators/index.js +35 -515
  248. package/dist/validators/intersection.d.ts +1 -2
  249. package/dist/validators/intersection.js +116 -0
  250. package/dist/validators/json.d.ts +1 -2
  251. package/dist/validators/json.js +66 -0
  252. package/dist/validators/lazy.d.ts +5 -9
  253. package/dist/validators/lazy.js +50 -0
  254. package/dist/validators/literal.d.ts +2 -2
  255. package/dist/validators/literal.js +60 -0
  256. package/dist/validators/map.d.ts +15 -2
  257. package/dist/validators/map.js +214 -0
  258. package/dist/validators/nan.d.ts +2 -3
  259. package/dist/validators/nan.js +38 -0
  260. package/dist/validators/never.d.ts +1 -2
  261. package/dist/validators/never.js +32 -0
  262. package/dist/validators/null.d.ts +3 -3
  263. package/dist/validators/null.js +40 -0
  264. package/dist/validators/number.d.ts +56 -27
  265. package/dist/validators/number.js +423 -0
  266. package/dist/validators/object.d.ts +30 -9
  267. package/dist/validators/object.js +864 -0
  268. package/dist/validators/promise.d.ts +15 -10
  269. package/dist/validators/promise.js +111 -0
  270. package/dist/validators/record.d.ts +11 -2
  271. package/dist/validators/record.js +258 -0
  272. package/dist/validators/set.d.ts +11 -2
  273. package/dist/validators/set.js +199 -0
  274. package/dist/validators/string-bool.d.ts +7 -10
  275. package/dist/validators/string-bool.js +120 -0
  276. package/dist/validators/string-formats.d.ts +7 -4
  277. package/dist/validators/string-formats.js +135 -0
  278. package/dist/validators/string.d.ts +39 -18
  279. package/dist/validators/string.js +4 -0
  280. package/dist/validators/symbol.d.ts +8 -3
  281. package/dist/validators/symbol.js +58 -0
  282. package/dist/validators/template-literal.d.ts +1 -2
  283. package/dist/validators/template-literal.js +103 -0
  284. package/dist/validators/tuple.d.ts +15 -2
  285. package/dist/validators/tuple.js +183 -0
  286. package/dist/validators/uint8array.d.ts +3 -4
  287. package/dist/validators/uint8array.js +101 -0
  288. package/dist/validators/undefined.d.ts +3 -3
  289. package/dist/validators/undefined.js +40 -0
  290. package/dist/validators/union.d.ts +7 -4
  291. package/dist/validators/union.js +187 -0
  292. package/dist/validators/unknown.d.ts +7 -2
  293. package/dist/{chunks/unknown-Dhzri_T-.js → validators/unknown.js} +12 -3
  294. package/dist/validators/void.d.ts +3 -2
  295. package/dist/validators/void.js +44 -0
  296. package/dist/validators/xor.d.ts +2 -3
  297. package/dist/validators/xor.js +66 -0
  298. package/package.json +114 -30
  299. package/dist/chunks/bigint-CRS0QVsy.js +0 -1854
  300. package/dist/chunks/bigint-CRS0QVsy.js.map +0 -1
  301. package/dist/chunks/date-50JV_Mfj.js.map +0 -1
  302. package/dist/chunks/index-DO8CFMxD.js.map +0 -1
  303. package/dist/chunks/json-Cp4WO0M9.js +0 -2021
  304. package/dist/chunks/json-Cp4WO0M9.js.map +0 -1
  305. package/dist/chunks/unknown-Dhzri_T-.js.map +0 -1
  306. package/dist/cjs/errors.cjs.map +0 -1
  307. package/dist/cjs/index.cjs.map +0 -1
  308. package/dist/cjs/locales/index.cjs.map +0 -1
  309. package/dist/cjs/locales/lazy.cjs.map +0 -1
  310. package/dist/cjs/mini.cjs.map +0 -1
  311. package/dist/cli/bin.d.ts.map +0 -1
  312. package/dist/cli/commands/benchmark.d.ts.map +0 -1
  313. package/dist/cli/commands/validate.d.ts.map +0 -1
  314. package/dist/cli/index.d.ts.map +0 -1
  315. package/dist/codecs/index.d.ts.map +0 -1
  316. package/dist/codecs/index.js.map +0 -1
  317. package/dist/coercion/bigint.d.ts.map +0 -1
  318. package/dist/coercion/boolean.d.ts.map +0 -1
  319. package/dist/coercion/date.d.ts.map +0 -1
  320. package/dist/coercion/index.d.ts.map +0 -1
  321. package/dist/coercion/index.js.map +0 -1
  322. package/dist/coercion/number.d.ts.map +0 -1
  323. package/dist/coercion/string.d.ts.map +0 -1
  324. package/dist/compat/emitter.d.ts.map +0 -1
  325. package/dist/compat/emitter.js.map +0 -1
  326. package/dist/compat/index.d.ts.map +0 -1
  327. package/dist/compat/result.d.ts.map +0 -1
  328. package/dist/compat/result.js.map +0 -1
  329. package/dist/errors.d.ts.map +0 -1
  330. package/dist/errors.js.map +0 -1
  331. package/dist/events.d.ts.map +0 -1
  332. package/dist/index.d.ts.map +0 -1
  333. package/dist/index.js.map +0 -1
  334. package/dist/kernel.d.ts.map +0 -1
  335. package/dist/kernel.js.map +0 -1
  336. package/dist/locales/af.d.ts.map +0 -1
  337. package/dist/locales/af.js.map +0 -1
  338. package/dist/locales/ar.d.ts.map +0 -1
  339. package/dist/locales/ar.js.map +0 -1
  340. package/dist/locales/backup-en.d.ts +0 -3
  341. package/dist/locales/backup-en.d.ts.map +0 -1
  342. package/dist/locales/bn.d.ts.map +0 -1
  343. package/dist/locales/bn.js.map +0 -1
  344. package/dist/locales/da.d.ts.map +0 -1
  345. package/dist/locales/da.js.map +0 -1
  346. package/dist/locales/de.d.ts.map +0 -1
  347. package/dist/locales/de.js.map +0 -1
  348. package/dist/locales/en.d.ts.map +0 -1
  349. package/dist/locales/en.js.map +0 -1
  350. package/dist/locales/es-MX.d.ts.map +0 -1
  351. package/dist/locales/es-MX.js.map +0 -1
  352. package/dist/locales/es.d.ts.map +0 -1
  353. package/dist/locales/es.js.map +0 -1
  354. package/dist/locales/fi.d.ts.map +0 -1
  355. package/dist/locales/fi.js.map +0 -1
  356. package/dist/locales/fr.d.ts.map +0 -1
  357. package/dist/locales/fr.js.map +0 -1
  358. package/dist/locales/hi.d.ts.map +0 -1
  359. package/dist/locales/hi.js.map +0 -1
  360. package/dist/locales/id.d.ts.map +0 -1
  361. package/dist/locales/id.js.map +0 -1
  362. package/dist/locales/index.d.ts.map +0 -1
  363. package/dist/locales/index.js.map +0 -1
  364. package/dist/locales/it.d.ts.map +0 -1
  365. package/dist/locales/it.js.map +0 -1
  366. package/dist/locales/ja.d.ts.map +0 -1
  367. package/dist/locales/ja.js.map +0 -1
  368. package/dist/locales/ko.d.ts.map +0 -1
  369. package/dist/locales/ko.js.map +0 -1
  370. package/dist/locales/lazy.d.ts.map +0 -1
  371. package/dist/locales/lazy.js.map +0 -1
  372. package/dist/locales/nl.d.ts.map +0 -1
  373. package/dist/locales/nl.js.map +0 -1
  374. package/dist/locales/no.d.ts.map +0 -1
  375. package/dist/locales/no.js.map +0 -1
  376. package/dist/locales/pl.d.ts.map +0 -1
  377. package/dist/locales/pl.js.map +0 -1
  378. package/dist/locales/pt-BR.d.ts.map +0 -1
  379. package/dist/locales/pt-BR.js.map +0 -1
  380. package/dist/locales/pt.d.ts.map +0 -1
  381. package/dist/locales/pt.js.map +0 -1
  382. package/dist/locales/ru.d.ts.map +0 -1
  383. package/dist/locales/ru.js.map +0 -1
  384. package/dist/locales/sv.d.ts.map +0 -1
  385. package/dist/locales/sv.js.map +0 -1
  386. package/dist/locales/sw.d.ts.map +0 -1
  387. package/dist/locales/sw.js.map +0 -1
  388. package/dist/locales/th.d.ts.map +0 -1
  389. package/dist/locales/th.js.map +0 -1
  390. package/dist/locales/tr.d.ts.map +0 -1
  391. package/dist/locales/tr.js.map +0 -1
  392. package/dist/locales/types.d.ts.map +0 -1
  393. package/dist/locales/vi.d.ts.map +0 -1
  394. package/dist/locales/vi.js.map +0 -1
  395. package/dist/locales/zh.d.ts.map +0 -1
  396. package/dist/locales/zh.js.map +0 -1
  397. package/dist/logger.d.ts.map +0 -1
  398. package/dist/mini.d.ts.map +0 -1
  399. package/dist/mini.js.map +0 -1
  400. package/dist/pigment.d.ts.map +0 -1
  401. package/dist/pigment.js.map +0 -1
  402. package/dist/plugins/index.d.ts.map +0 -1
  403. package/dist/plugins/types.d.ts.map +0 -1
  404. package/dist/utils/codec-utils.d.ts.map +0 -1
  405. package/dist/utils/deep-merge.d.ts.map +0 -1
  406. package/dist/utils/ip-validation.d.ts.map +0 -1
  407. package/dist/utils/json-schema.d.ts.map +0 -1
  408. package/dist/utils/security.d.ts.map +0 -1
  409. package/dist/validators/any.d.ts.map +0 -1
  410. package/dist/validators/array.d.ts.map +0 -1
  411. package/dist/validators/base.d.ts.map +0 -1
  412. package/dist/validators/base64.d.ts.map +0 -1
  413. package/dist/validators/bigint.d.ts.map +0 -1
  414. package/dist/validators/boolean.d.ts.map +0 -1
  415. package/dist/validators/codec.d.ts.map +0 -1
  416. package/dist/validators/custom.d.ts.map +0 -1
  417. package/dist/validators/date.d.ts.map +0 -1
  418. package/dist/validators/discriminated-union.d.ts.map +0 -1
  419. package/dist/validators/enum.d.ts.map +0 -1
  420. package/dist/validators/file.d.ts.map +0 -1
  421. package/dist/validators/function.d.ts.map +0 -1
  422. package/dist/validators/hex.d.ts.map +0 -1
  423. package/dist/validators/index.d.ts.map +0 -1
  424. package/dist/validators/index.js.map +0 -1
  425. package/dist/validators/intersection.d.ts.map +0 -1
  426. package/dist/validators/json.d.ts.map +0 -1
  427. package/dist/validators/lazy.d.ts.map +0 -1
  428. package/dist/validators/literal.d.ts.map +0 -1
  429. package/dist/validators/map.d.ts.map +0 -1
  430. package/dist/validators/nan.d.ts.map +0 -1
  431. package/dist/validators/never.d.ts.map +0 -1
  432. package/dist/validators/null.d.ts.map +0 -1
  433. package/dist/validators/number.d.ts.map +0 -1
  434. package/dist/validators/object.d.ts.map +0 -1
  435. package/dist/validators/promise.d.ts.map +0 -1
  436. package/dist/validators/record.d.ts.map +0 -1
  437. package/dist/validators/set.d.ts.map +0 -1
  438. package/dist/validators/string-bool.d.ts.map +0 -1
  439. package/dist/validators/string-formats.d.ts.map +0 -1
  440. package/dist/validators/string.d.ts.map +0 -1
  441. package/dist/validators/symbol.d.ts.map +0 -1
  442. package/dist/validators/template-literal.d.ts.map +0 -1
  443. package/dist/validators/tuple.d.ts.map +0 -1
  444. package/dist/validators/uint8array.d.ts.map +0 -1
  445. package/dist/validators/undefined.d.ts.map +0 -1
  446. package/dist/validators/union.d.ts.map +0 -1
  447. package/dist/validators/unknown.d.ts.map +0 -1
  448. package/dist/validators/void.d.ts.map +0 -1
  449. package/dist/validators/xor.d.ts.map +0 -1
@@ -0,0 +1,868 @@
1
+ import { globalRegistry } from '../registry.js';
2
+
3
+ /**
4
+ * Validator type constants for O(1) dispatch
5
+ * Used by VldObject to replace instanceof chains with Map lookups
6
+ */
7
+ const VLD_VALIDATOR_TYPES = {
8
+ // Primitives
9
+ STRING: 'string',
10
+ STRING_FORMAT: 'stringFormat',
11
+ STRING_BOOL: 'stringBool',
12
+ NUMBER: 'number',
13
+ BOOLEAN: 'boolean',
14
+ DATE: 'date',
15
+ BIGINT: 'bigint',
16
+ UNDEFINED: 'undefined',
17
+ NULL: 'null',
18
+ UNKNOWN: 'unknown',
19
+ ANY: 'any',
20
+ VOID: 'void',
21
+ NEVER: 'never',
22
+ SYMBOL: 'symbol',
23
+ NAN: 'nan',
24
+ HEX: 'hex',
25
+ BASE64: 'base64',
26
+ UINT8_ARRAY: 'uint8Array',
27
+ // Coercion
28
+ COERCE_STRING: 'coerceString',
29
+ COERCE_NUMBER: 'coerceNumber',
30
+ COERCE_BOOLEAN: 'coerceBoolean',
31
+ COERCE_DATE: 'coerceDate',
32
+ COERCE_BIGINT: 'coerceBigint',
33
+ // Composite
34
+ OBJECT: 'object',
35
+ ARRAY: 'array',
36
+ TUPLE: 'tuple',
37
+ SET: 'set',
38
+ MAP: 'map',
39
+ RECORD: 'record',
40
+ // Union types
41
+ UNION: 'union',
42
+ DISCRIMINATED_UNION: 'discriminatedUnion',
43
+ INTERSECTION: 'intersection',
44
+ XOR: 'xor',
45
+ // Values
46
+ ENUM: 'enum',
47
+ LITERAL: 'literal',
48
+ // Special validators
49
+ LAZY: 'lazy',
50
+ CUSTOM: 'custom',
51
+ FUNCTION: 'function',
52
+ FILE: 'file',
53
+ JSON: 'json',
54
+ TEMPLATE_LITERAL: 'templateLiteral',
55
+ PROMISE: 'promise',
56
+ // Wrapper/Modifier validators
57
+ OPTIONAL: 'optional',
58
+ NULLABLE: 'nullable',
59
+ NULLISH: 'nullish',
60
+ EXACT_OPTIONAL: 'exactOptional',
61
+ DEFAULT: 'default',
62
+ CATCH: 'catch',
63
+ REFINE: 'refine',
64
+ TRANSFORM: 'transform',
65
+ PIPE: 'pipe',
66
+ PREPROCESS: 'preprocess',
67
+ SUPER_REFINE: 'superRefine',
68
+ BRAND: 'brand',
69
+ READONLY: 'readonly',
70
+ META: 'meta',
71
+ PREFAULT: 'prefault',
72
+ PREFault: 'prefault',
73
+ // Codec
74
+ CODEC: 'codec',
75
+ };
76
+ function resolveErrorMessage(error, fallback) {
77
+ if (typeof error === 'string') {
78
+ return error;
79
+ }
80
+ if (typeof error?.error === 'string') {
81
+ return error.error;
82
+ }
83
+ if (typeof error?.error === 'function') {
84
+ return error.error({}) || fallback;
85
+ }
86
+ if (typeof error?.message === 'string') {
87
+ return error.message;
88
+ }
89
+ return fallback;
90
+ }
91
+ function isPromiseLike(value) {
92
+ return value !== null &&
93
+ (typeof value === 'object' || typeof value === 'function') &&
94
+ typeof value.then === 'function';
95
+ }
96
+ function getSimpleWrappedMode(baseValidator) {
97
+ if (baseValidator.isSimple !== true) {
98
+ return undefined;
99
+ }
100
+ switch (baseValidator.validatorType) {
101
+ case VLD_VALIDATOR_TYPES.STRING:
102
+ return 'string';
103
+ case VLD_VALIDATOR_TYPES.NUMBER:
104
+ return 'number';
105
+ case VLD_VALIDATOR_TYPES.BOOLEAN:
106
+ return 'boolean';
107
+ case VLD_VALIDATOR_TYPES.BIGINT:
108
+ return 'bigint';
109
+ case VLD_VALIDATOR_TYPES.SYMBOL:
110
+ return 'symbol';
111
+ default:
112
+ return undefined;
113
+ }
114
+ }
115
+ function parseSimpleWrappedValue(mode, value) {
116
+ switch (mode) {
117
+ case 'string':
118
+ return typeof value === 'string' ? value : undefined;
119
+ case 'number':
120
+ return typeof value === 'number' && !isNaN(value) ? value : undefined;
121
+ case 'boolean':
122
+ return typeof value === 'boolean' ? value : undefined;
123
+ case 'bigint':
124
+ return typeof value === 'bigint' ? value : undefined;
125
+ case 'symbol':
126
+ return typeof value === 'symbol' ? value : undefined;
127
+ default:
128
+ return undefined;
129
+ }
130
+ }
131
+ /**
132
+ * Abstract base class for all validators
133
+ * Implements immutable pattern to prevent memory leaks and race conditions
134
+ */
135
+ class VldBase {
136
+ /**
137
+ * Constructor with runtime type identifier
138
+ * @param validatorType The runtime type identifier
139
+ */
140
+ constructor(validatorType = 'unknown') {
141
+ this.validatorType = validatorType;
142
+ }
143
+ get '~standard'() {
144
+ return {
145
+ version: 1,
146
+ vendor: 'vld',
147
+ validate: (value) => {
148
+ const result = this.safeParse(value);
149
+ if (result.success) {
150
+ return { value: result.data };
151
+ }
152
+ return { issues: [{ message: result.error.message }] };
153
+ },
154
+ types: undefined
155
+ };
156
+ }
157
+ async parseAsync(value) {
158
+ return this.parse(value);
159
+ }
160
+ async safeParseAsync(value) {
161
+ try {
162
+ return { success: true, data: await this.parseAsync(value) };
163
+ }
164
+ catch (error) {
165
+ return { success: false, error: error };
166
+ }
167
+ }
168
+ /**
169
+ * Check if a value is valid according to this validator
170
+ * @param value The value to check
171
+ * @returns True if valid, false otherwise
172
+ */
173
+ isValid(value) {
174
+ return this.safeParse(value).success;
175
+ }
176
+ /**
177
+ * Parse a value or return a default if validation fails
178
+ * BUG-NEW-017 FIX: Validate default value to ensure type safety
179
+ * @param value The value to validate
180
+ * @param defaultValue The default value to return on failure
181
+ * @returns The validated value or default
182
+ */
183
+ parseOrDefault(value, defaultValue) {
184
+ const result = this.safeParse(value);
185
+ if (result.success) {
186
+ return result.data;
187
+ }
188
+ // Validate the default value to ensure it's actually valid
189
+ const defaultResult = this.safeParse(defaultValue);
190
+ if (!defaultResult.success) {
191
+ throw new Error(`Invalid default value provided: ${defaultResult.error.message}`);
192
+ }
193
+ return defaultResult.data;
194
+ }
195
+ refine(predicate, message) {
196
+ return new VldRefine(this, predicate, message);
197
+ }
198
+ /**
199
+ * Advanced refinement with context for adding multiple issues
200
+ * @param refinement The refinement function with context
201
+ * @returns A new super refined validator
202
+ */
203
+ superRefine(refinement) {
204
+ return new VldSuperRefine(this, refinement);
205
+ }
206
+ /**
207
+ * Create a new validator that transforms the output
208
+ * @param transformer The transformation function
209
+ * @returns A new transformed validator
210
+ */
211
+ transform(transformer) {
212
+ return new VldTransform(this, transformer);
213
+ }
214
+ /**
215
+ * Create a new validator with a default value for undefined inputs
216
+ * @param defaultValue The default value
217
+ * @returns A new validator with default
218
+ */
219
+ default(defaultValue) {
220
+ return new VldDefault(this, defaultValue);
221
+ }
222
+ /**
223
+ * Create a new validator that catches errors and returns a fallback
224
+ * @param fallbackValue The fallback value
225
+ * @returns A new validator with catch
226
+ */
227
+ catch(fallbackValue) {
228
+ return new VldCatch(this, fallbackValue);
229
+ }
230
+ /**
231
+ * Make this validator optional (allows undefined)
232
+ * @returns A new optional validator
233
+ */
234
+ optional() {
235
+ return new VldOptional(this);
236
+ }
237
+ /**
238
+ * Make this validator nullable (allows null)
239
+ * @returns A new nullable validator
240
+ */
241
+ nullable() {
242
+ return new VldNullable(this);
243
+ }
244
+ /**
245
+ * Make this validator nullish (allows null or undefined)
246
+ * @returns A new nullish validator
247
+ */
248
+ nullish() {
249
+ return new VldNullish(this);
250
+ }
251
+ /**
252
+ * Make this validator exactly optional - allows undefined but not missing
253
+ * Unlike .optional() which treats missing as undefined, exactOptional()
254
+ * requires the key to be present but allows undefined as a value
255
+ * Zod 4 API parity
256
+ * @returns A new exact optional validator
257
+ */
258
+ exactOptional() {
259
+ return new VldExactOptional(this);
260
+ }
261
+ /**
262
+ * Pipe the output of this validator into another validator
263
+ * @param next The next validator to pipe into
264
+ * @returns A new piped validator
265
+ */
266
+ pipe(next) {
267
+ return new VldPipe(this, next);
268
+ }
269
+ /**
270
+ * Create a new validator that returns readonly output
271
+ * Zod 4 API parity - marks output as readonly for TypeScript
272
+ * @returns A new readonly validator
273
+ */
274
+ readonly() {
275
+ return new VldReadonly(this);
276
+ }
277
+ /**
278
+ * Brand the output type with a unique brand for nominal typing
279
+ * Zod 4 API parity - prevents accidental assignment of similarly typed values
280
+ * @returns A new branded validator
281
+ * @example
282
+ * const userIdSchema = v.string().brand<'UserId'>();
283
+ * const productIdSchema = v.string().brand<'ProductId'>();
284
+ *
285
+ * let userId: UserId = userIdSchema.parse('abc');
286
+ * let productId: ProductId = productIdSchema.parse('xyz');
287
+ *
288
+ * userId = productId; // TypeScript error: types are incompatible
289
+ */
290
+ brand() {
291
+ return new VldBrand(this);
292
+ }
293
+ /**
294
+ * Apply an external function to transform this validator
295
+ * Zod 4 API parity - allows external function chaining
296
+ * @param fn External function that takes this validator and returns a new validator
297
+ * @returns The result of applying the function to this validator
298
+ * @example
299
+ * const withLength = (schema: VldBase<unknown, string>) => schema.transform(s => s.length);
300
+ * const lengthSchema = v.string().apply(withLength); // validates string, returns number
301
+ */
302
+ apply(fn) {
303
+ return fn(this);
304
+ }
305
+ check(predicate, message) {
306
+ return new VldRefine(this, predicate, message);
307
+ }
308
+ /**
309
+ * Get or set metadata for this schema
310
+ */
311
+ meta(data) {
312
+ if (data === undefined) {
313
+ return globalRegistry.get(this);
314
+ }
315
+ const schema = new VldMeta(this, data);
316
+ globalRegistry.add(schema, data);
317
+ return schema;
318
+ }
319
+ /**
320
+ * Register this schema in a metadata registry and return the same instance.
321
+ * This mirrors Zod 4's registry convenience API without changing validator
322
+ * immutability.
323
+ */
324
+ register(targetRegistry, metadata) {
325
+ targetRegistry.add(this, metadata);
326
+ return this;
327
+ }
328
+ /**
329
+ * Add a description to this schema
330
+ * Zod 4 API parity - convenience method for .meta({ description: ... })
331
+ * @param description The description to add
332
+ * @returns A new validator with the description
333
+ */
334
+ describe(description) {
335
+ return this.meta({ description });
336
+ }
337
+ }
338
+ /**
339
+ * Metadata validator - wraps a schema with metadata
340
+ */
341
+ class VldMeta extends VldBase {
342
+ constructor(baseValidator, metadata) {
343
+ super(VLD_VALIDATOR_TYPES.META);
344
+ this.baseValidator = baseValidator;
345
+ this.metadata = metadata;
346
+ }
347
+ parse(value) {
348
+ return this.baseValidator.parse(value);
349
+ }
350
+ safeParse(value) {
351
+ return this.baseValidator.safeParse(value);
352
+ }
353
+ /**
354
+ * Get the metadata
355
+ */
356
+ getMeta() {
357
+ return { ...this.metadata };
358
+ }
359
+ meta(data) {
360
+ if (data === undefined) {
361
+ return { ...this.metadata, ...globalRegistry.get(this) };
362
+ }
363
+ const schema = new VldMeta(this.baseValidator, { ...this.metadata, ...data });
364
+ globalRegistry.add(schema, schema.getMeta());
365
+ return schema;
366
+ }
367
+ describe(description) {
368
+ return this.meta({ description });
369
+ }
370
+ }
371
+ /**
372
+ * Readonly validator - marks output as readonly
373
+ */
374
+ class VldReadonly extends VldBase {
375
+ constructor(baseValidator) {
376
+ super(VLD_VALIDATOR_TYPES.READONLY);
377
+ this.baseValidator = baseValidator;
378
+ }
379
+ parse(value) {
380
+ return this.baseValidator.parse(value);
381
+ }
382
+ safeParse(value) {
383
+ const result = this.baseValidator.safeParse(value);
384
+ if (result.success) {
385
+ return { success: true, data: result.data };
386
+ }
387
+ return { success: false, error: result.error };
388
+ }
389
+ }
390
+ /**
391
+ * Brand validator - adds a unique brand to the output type for nominal typing
392
+ * Uses TypeScript's branded types pattern to prevent accidental assignment
393
+ */
394
+ class VldBrand extends VldBase {
395
+ constructor(baseValidator) {
396
+ super(VLD_VALIDATOR_TYPES.BRAND);
397
+ this.baseValidator = baseValidator;
398
+ }
399
+ parse(value) {
400
+ return this.baseValidator.parse(value);
401
+ }
402
+ safeParse(value) {
403
+ const result = this.baseValidator.safeParse(value);
404
+ if (result.success) {
405
+ return {
406
+ success: true,
407
+ data: result.data
408
+ };
409
+ }
410
+ return { success: false, error: result.error };
411
+ }
412
+ }
413
+ /**
414
+ * Refine validator - adds custom validation
415
+ */
416
+ class VldRefine extends VldBase {
417
+ constructor(baseValidator, predicate, customMessage) {
418
+ super(VLD_VALIDATOR_TYPES.REFINE);
419
+ this.baseValidator = baseValidator;
420
+ this.predicate = predicate;
421
+ this.customMessage = customMessage;
422
+ }
423
+ parse(value) {
424
+ const baseResult = this.baseValidator.parse(value);
425
+ const passed = this.predicate(baseResult);
426
+ if (isPromiseLike(passed)) {
427
+ throw new Error('Use parseAsync for async refinements');
428
+ }
429
+ if (!passed) {
430
+ throw new Error(this.customMessage || 'Refinement check failed');
431
+ }
432
+ return baseResult;
433
+ }
434
+ safeParse(value) {
435
+ try {
436
+ return { success: true, data: this.parse(value) };
437
+ }
438
+ catch (error) {
439
+ return { success: false, error: error };
440
+ }
441
+ }
442
+ async parseAsync(value) {
443
+ const baseResult = await this.baseValidator.parseAsync(value);
444
+ if (!await this.predicate(baseResult)) {
445
+ throw new Error(this.customMessage || 'Refinement check failed');
446
+ }
447
+ return baseResult;
448
+ }
449
+ }
450
+ /**
451
+ * Transform validator - transforms data after validation
452
+ */
453
+ class VldTransform extends VldBase {
454
+ constructor(baseValidator, transformer) {
455
+ super(VLD_VALIDATOR_TYPES.TRANSFORM);
456
+ this.baseValidator = baseValidator;
457
+ this.transformer = transformer;
458
+ }
459
+ parse(value) {
460
+ const baseResult = this.baseValidator.parse(value);
461
+ try {
462
+ const transformed = this.transformer(baseResult);
463
+ if (isPromiseLike(transformed)) {
464
+ throw new Error('Use parseAsync for async transforms');
465
+ }
466
+ return transformed;
467
+ }
468
+ catch (error) {
469
+ throw new Error(`Transform failed: ${error.message}`);
470
+ }
471
+ }
472
+ safeParse(value) {
473
+ try {
474
+ return { success: true, data: this.parse(value) };
475
+ }
476
+ catch (error) {
477
+ return { success: false, error: error };
478
+ }
479
+ }
480
+ async parseAsync(value) {
481
+ const baseResult = await this.baseValidator.parseAsync(value);
482
+ try {
483
+ return await this.transformer(baseResult);
484
+ }
485
+ catch (error) {
486
+ throw new Error(`Transform failed: ${error.message}`);
487
+ }
488
+ }
489
+ }
490
+ /**
491
+ * Default validator - provides default value for undefined
492
+ * Note: Does not validate the default value at construction time.
493
+ * Use .prefault() to validate the default value at parse time.
494
+ */
495
+ class VldDefault extends VldBase {
496
+ constructor(baseValidator, defaultValue) {
497
+ super(VLD_VALIDATOR_TYPES.DEFAULT);
498
+ this.baseValidator = baseValidator;
499
+ this.defaultValue = defaultValue;
500
+ }
501
+ parse(value) {
502
+ if (value === undefined) {
503
+ return this.defaultValue;
504
+ }
505
+ return this.baseValidator.parse(value);
506
+ }
507
+ safeParse(value) {
508
+ if (value === undefined) {
509
+ return { success: true, data: this.defaultValue };
510
+ }
511
+ return this.baseValidator.safeParse(value);
512
+ }
513
+ /**
514
+ * Pre-parse default - validates the default value instead of returning it directly
515
+ * This is useful when the default value needs to be validated against the schema
516
+ */
517
+ prefault() {
518
+ // Return a new validator that validates the default value when parse(undefined) is called
519
+ return new VldPrefault(this.baseValidator, this.defaultValue);
520
+ }
521
+ }
522
+ /**
523
+ * Prefault validator - validates the default value instead of returning it directly
524
+ */
525
+ class VldPrefault extends VldBase {
526
+ constructor(baseValidator, defaultValue) {
527
+ super(VLD_VALIDATOR_TYPES.PREFAULT);
528
+ this.baseValidator = baseValidator;
529
+ this.defaultValue = defaultValue;
530
+ }
531
+ parse(value) {
532
+ if (value === undefined) {
533
+ // Validate the default value through the base validator
534
+ return this.baseValidator.parse(this.defaultValue);
535
+ }
536
+ return this.baseValidator.parse(value);
537
+ }
538
+ safeParse(value) {
539
+ if (value === undefined) {
540
+ return this.baseValidator.safeParse(this.defaultValue);
541
+ }
542
+ return this.baseValidator.safeParse(value);
543
+ }
544
+ /**
545
+ * Calling prefault multiple times should be safe - return self
546
+ */
547
+ prefault() {
548
+ return this;
549
+ }
550
+ }
551
+ /**
552
+ * Catch validator - provides fallback value on validation error
553
+ * BUG-NPM-003 FIX: Validate fallback value at construction time
554
+ */
555
+ class VldCatch extends VldBase {
556
+ constructor(baseValidator, fallbackValue) {
557
+ super(VLD_VALIDATOR_TYPES.CATCH);
558
+ this.baseValidator = baseValidator;
559
+ this.fallbackValue = fallbackValue;
560
+ this.simpleMode = getSimpleWrappedMode(baseValidator);
561
+ // BUG-NPM-003 FIX: Validate the fallback value to ensure type safety
562
+ const validation = baseValidator.safeParse(fallbackValue);
563
+ if (!validation.success) {
564
+ throw new Error(`Invalid fallback value: ${validation.error.message}`);
565
+ }
566
+ }
567
+ parse(value) {
568
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
569
+ if (simpleValue !== undefined) {
570
+ return simpleValue;
571
+ }
572
+ if (this.simpleMode !== undefined) {
573
+ return this.fallbackValue;
574
+ }
575
+ try {
576
+ return this.baseValidator.parse(value);
577
+ }
578
+ catch {
579
+ return this.fallbackValue;
580
+ }
581
+ }
582
+ safeParse(value) {
583
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
584
+ if (simpleValue !== undefined) {
585
+ return { success: true, data: simpleValue };
586
+ }
587
+ if (this.simpleMode !== undefined) {
588
+ return { success: true, data: this.fallbackValue };
589
+ }
590
+ const result = this.baseValidator.safeParse(value);
591
+ if (result.success) {
592
+ return result;
593
+ }
594
+ return { success: true, data: this.fallbackValue };
595
+ }
596
+ }
597
+ /**
598
+ * Optional validator - allows undefined
599
+ */
600
+ class VldOptional extends VldBase {
601
+ constructor(baseValidator) {
602
+ super(VLD_VALIDATOR_TYPES.OPTIONAL);
603
+ this.baseValidator = baseValidator;
604
+ this.simpleMode = getSimpleWrappedMode(baseValidator);
605
+ }
606
+ parseSimpleValue(value) {
607
+ return parseSimpleWrappedValue(this.simpleMode, value);
608
+ }
609
+ static create(baseValidator) {
610
+ return new VldOptional(baseValidator);
611
+ }
612
+ parse(value) {
613
+ if (value === undefined) {
614
+ return undefined;
615
+ }
616
+ const simpleValue = this.parseSimpleValue(value);
617
+ if (simpleValue !== undefined) {
618
+ return simpleValue;
619
+ }
620
+ return this.baseValidator.parse(value);
621
+ }
622
+ safeParse(value) {
623
+ if (value === undefined) {
624
+ return { success: true, data: undefined };
625
+ }
626
+ const simpleValue = this.parseSimpleValue(value);
627
+ if (simpleValue !== undefined) {
628
+ return { success: true, data: simpleValue };
629
+ }
630
+ return this.baseValidator.safeParse(value);
631
+ }
632
+ unwrap() {
633
+ return this.baseValidator;
634
+ }
635
+ }
636
+ /**
637
+ * Exact optional validator - allows undefined but requires key presence
638
+ * Unlike Optional which treats missing as undefined, ExactOptional
639
+ * requires the key to be present (not missing from object) but allows undefined
640
+ * Zod 4 API parity
641
+ */
642
+ class VldExactOptional extends VldBase {
643
+ constructor(baseValidator) {
644
+ super(VLD_VALIDATOR_TYPES.EXACT_OPTIONAL);
645
+ this.baseValidator = baseValidator;
646
+ this.simpleMode = getSimpleWrappedMode(baseValidator);
647
+ }
648
+ static create(baseValidator) {
649
+ return new VldExactOptional(baseValidator);
650
+ }
651
+ parse(value) {
652
+ if (value === undefined) {
653
+ return undefined;
654
+ }
655
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
656
+ if (simpleValue !== undefined) {
657
+ return simpleValue;
658
+ }
659
+ return this.baseValidator.parse(value);
660
+ }
661
+ safeParse(value) {
662
+ // Unlike regular optional, undefined is explicitly valid
663
+ // but we still validate through the base validator
664
+ if (value === undefined) {
665
+ return { success: true, data: undefined };
666
+ }
667
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
668
+ if (simpleValue !== undefined) {
669
+ return { success: true, data: simpleValue };
670
+ }
671
+ return this.baseValidator.safeParse(value);
672
+ }
673
+ unwrap() {
674
+ return this.baseValidator;
675
+ }
676
+ }
677
+ /**
678
+ * Nullable validator - allows null
679
+ */
680
+ class VldNullable extends VldBase {
681
+ constructor(baseValidator) {
682
+ super(VLD_VALIDATOR_TYPES.NULLABLE);
683
+ this.baseValidator = baseValidator;
684
+ this.simpleMode = getSimpleWrappedMode(baseValidator);
685
+ }
686
+ static create(baseValidator) {
687
+ return new VldNullable(baseValidator);
688
+ }
689
+ parse(value) {
690
+ if (value === null) {
691
+ return null;
692
+ }
693
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
694
+ if (simpleValue !== undefined) {
695
+ return simpleValue;
696
+ }
697
+ return this.baseValidator.parse(value);
698
+ }
699
+ safeParse(value) {
700
+ if (value === null) {
701
+ return { success: true, data: null };
702
+ }
703
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
704
+ if (simpleValue !== undefined) {
705
+ return { success: true, data: simpleValue };
706
+ }
707
+ return this.baseValidator.safeParse(value);
708
+ }
709
+ unwrap() {
710
+ return this.baseValidator;
711
+ }
712
+ }
713
+ /**
714
+ * Nullish validator - allows null or undefined
715
+ */
716
+ class VldNullish extends VldBase {
717
+ constructor(baseValidator) {
718
+ super(VLD_VALIDATOR_TYPES.NULLISH);
719
+ this.baseValidator = baseValidator;
720
+ this.simpleMode = getSimpleWrappedMode(baseValidator);
721
+ }
722
+ static create(baseValidator) {
723
+ return new VldNullish(baseValidator);
724
+ }
725
+ parse(value) {
726
+ if (value === null || value === undefined) {
727
+ return value;
728
+ }
729
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
730
+ if (simpleValue !== undefined) {
731
+ return simpleValue;
732
+ }
733
+ return this.baseValidator.parse(value);
734
+ }
735
+ safeParse(value) {
736
+ if (value === null || value === undefined) {
737
+ return { success: true, data: value };
738
+ }
739
+ const simpleValue = parseSimpleWrappedValue(this.simpleMode, value);
740
+ if (simpleValue !== undefined) {
741
+ return { success: true, data: simpleValue };
742
+ }
743
+ return this.baseValidator.safeParse(value);
744
+ }
745
+ unwrap() {
746
+ return this.baseValidator;
747
+ }
748
+ }
749
+ /**
750
+ * Pipe validator - chains validators, passing output of one to the next
751
+ */
752
+ class VldPipe extends VldBase {
753
+ constructor(first, second) {
754
+ super(VLD_VALIDATOR_TYPES.PIPE);
755
+ this.first = first;
756
+ this.second = second;
757
+ }
758
+ parse(value) {
759
+ const intermediateResult = this.first.parse(value);
760
+ return this.second.parse(intermediateResult);
761
+ }
762
+ safeParse(value) {
763
+ const firstResult = this.first.safeParse(value);
764
+ if (!firstResult.success) {
765
+ return { success: false, error: firstResult.error };
766
+ }
767
+ return this.second.safeParse(firstResult.data);
768
+ }
769
+ }
770
+ /**
771
+ * SuperRefine validator - advanced refinement with context
772
+ */
773
+ class VldSuperRefine extends VldBase {
774
+ constructor(_inner, _refinement) {
775
+ super(VLD_VALIDATOR_TYPES.SUPER_REFINE);
776
+ this._inner = _inner;
777
+ this._refinement = _refinement;
778
+ }
779
+ parse(value) {
780
+ const result = this._inner.parse(value);
781
+ const issues = [];
782
+ const ctx = {
783
+ addIssue: (issue) => issues.push(issue),
784
+ path: []
785
+ };
786
+ const maybePromise = this._refinement(result, ctx);
787
+ if (maybePromise instanceof Promise) {
788
+ throw new Error('Use parseAsync for async refinements');
789
+ }
790
+ if (issues.length > 0) {
791
+ throw new Error(issues.map(i => i.message).join('; '));
792
+ }
793
+ return result;
794
+ }
795
+ safeParse(value) {
796
+ const result = this._inner.safeParse(value);
797
+ if (!result.success)
798
+ return { success: false, error: result.error };
799
+ const issues = [];
800
+ const ctx = {
801
+ addIssue: (issue) => issues.push(issue),
802
+ path: []
803
+ };
804
+ const maybePromise = this._refinement(result.data, ctx);
805
+ if (maybePromise instanceof Promise) {
806
+ throw new Error('Use safeParseAsync for async refinements');
807
+ }
808
+ if (issues.length > 0) {
809
+ return {
810
+ success: false,
811
+ error: new Error(issues.map(i => i.message).join('; '))
812
+ };
813
+ }
814
+ return result;
815
+ }
816
+ async parseAsync(value) {
817
+ const result = await this._inner.parseAsync(value);
818
+ const issues = [];
819
+ const ctx = {
820
+ addIssue: (issue) => issues.push(issue),
821
+ path: []
822
+ };
823
+ await this._refinement(result, ctx);
824
+ if (issues.length > 0) {
825
+ throw new Error(issues.map(i => i.message).join('; '));
826
+ }
827
+ return result;
828
+ }
829
+ async safeParseAsync(value) {
830
+ try {
831
+ return { success: true, data: await this.parseAsync(value) };
832
+ }
833
+ catch (error) {
834
+ return { success: false, error: error };
835
+ }
836
+ }
837
+ }
838
+ /**
839
+ * Preprocess validator - transforms input before validation
840
+ */
841
+ class VldPreprocess extends VldBase {
842
+ constructor(_preprocessor, _schema) {
843
+ super(VLD_VALIDATOR_TYPES.PREPROCESS);
844
+ this._preprocessor = _preprocessor;
845
+ this._schema = _schema;
846
+ }
847
+ static create(preprocessor, schema) {
848
+ return new VldPreprocess(preprocessor, schema);
849
+ }
850
+ parse(value) {
851
+ const preprocessed = this._preprocessor(value);
852
+ return this._schema.parse(preprocessed);
853
+ }
854
+ safeParse(value) {
855
+ try {
856
+ const preprocessed = this._preprocessor(value);
857
+ return this._schema.safeParse(preprocessed);
858
+ }
859
+ catch (error) {
860
+ return {
861
+ success: false,
862
+ error: error
863
+ };
864
+ }
865
+ }
866
+ }
867
+
868
+ export { VLD_VALIDATOR_TYPES, VldBase, VldBrand, VldCatch, VldDefault, VldExactOptional, VldMeta, VldNullable, VldNullish, VldOptional, VldPipe, VldPrefault, VldPreprocess, VldReadonly, VldRefine, VldSuperRefine, VldTransform, resolveErrorMessage };