@oxog/vld 2.0.3 → 2.2.5

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 (452) hide show
  1. package/CHANGELOG.md +120 -1
  2. package/README.md +1296 -1171
  3. package/dist/chunks/errors-core-Cqi4-9ew.js +1 -0
  4. package/dist/chunks/index-CkbfQQ4n.js +1 -0
  5. package/dist/chunks/index-yjpbvFgw.js +1 -0
  6. package/dist/chunks/ip-validation-g5LWgy9t.js +1 -0
  7. package/dist/chunks/security-Dy24T8N7.js +1 -0
  8. package/dist/cjs/chunks/errors-core-DKPohm9I.cjs +1 -0
  9. package/dist/cjs/chunks/index-BEV9nG0N.cjs +1 -0
  10. package/dist/cjs/chunks/index-ZjHAxYdA.cjs +1 -0
  11. package/dist/cjs/chunks/ip-validation-BZqPamPC.cjs +1 -0
  12. package/dist/cjs/chunks/security-aXZVI7qW.cjs +1 -0
  13. package/dist/cjs/cli/bin.cjs +2 -0
  14. package/dist/cjs/cli/index.cjs +1 -0
  15. package/dist/cjs/codecs/index.cjs +1 -0
  16. package/dist/cjs/coercion/index.cjs +1 -0
  17. package/dist/cjs/compat/emitter.cjs +1 -0
  18. package/dist/cjs/compat/result.cjs +1 -0
  19. package/dist/cjs/errors.cjs +1 -387
  20. package/dist/cjs/index.cjs +1 -10759
  21. package/dist/cjs/kernel.cjs +1 -0
  22. package/dist/cjs/locales/af.cjs +1 -0
  23. package/dist/cjs/locales/ar.cjs +1 -0
  24. package/dist/cjs/locales/bn.cjs +1 -0
  25. package/dist/cjs/locales/da.cjs +1 -0
  26. package/dist/cjs/locales/de.cjs +1 -0
  27. package/dist/cjs/locales/en.cjs +1 -0
  28. package/dist/cjs/locales/es-MX.cjs +1 -0
  29. package/dist/cjs/locales/es.cjs +1 -0
  30. package/dist/cjs/locales/fi.cjs +1 -0
  31. package/dist/cjs/locales/fr.cjs +1 -0
  32. package/dist/cjs/locales/hi.cjs +1 -0
  33. package/dist/cjs/locales/id.cjs +1 -0
  34. package/dist/cjs/locales/index.cjs +1 -2877
  35. package/dist/cjs/locales/it.cjs +1 -0
  36. package/dist/cjs/locales/ja.cjs +1 -0
  37. package/dist/cjs/locales/ko.cjs +1 -0
  38. package/dist/cjs/locales/lazy.cjs +1 -3169
  39. package/dist/cjs/locales/nl.cjs +1 -0
  40. package/dist/cjs/locales/no.cjs +1 -0
  41. package/dist/cjs/locales/pl.cjs +1 -0
  42. package/dist/cjs/locales/pt-BR.cjs +1 -0
  43. package/dist/cjs/locales/pt.cjs +1 -0
  44. package/dist/cjs/locales/ru.cjs +1 -0
  45. package/dist/cjs/locales/runtime.cjs +1 -0
  46. package/dist/cjs/locales/sv.cjs +1 -0
  47. package/dist/cjs/locales/sw.cjs +1 -0
  48. package/dist/cjs/locales/th.cjs +1 -0
  49. package/dist/cjs/locales/tr.cjs +1 -0
  50. package/dist/cjs/locales/vi.cjs +1 -0
  51. package/dist/cjs/locales/zh.cjs +1 -0
  52. package/dist/cjs/mini.cjs +1 -7474
  53. package/dist/cjs/pigment.cjs +1 -0
  54. package/dist/cjs/plugins/index.cjs +1 -0
  55. package/dist/cjs/registry.cjs +1 -0
  56. package/dist/cjs/v3/index.cjs +1 -0
  57. package/dist/cjs/v4/core/index.cjs +1 -0
  58. package/dist/cjs/v4/index.cjs +1 -0
  59. package/dist/cjs/v4/locales/index.cjs +1 -0
  60. package/dist/cjs/v4/mini/index.cjs +1 -0
  61. package/dist/cjs/v4-mini/index.cjs +1 -0
  62. package/dist/cjs/validators/any.cjs +1 -0
  63. package/dist/cjs/validators/array.cjs +1 -0
  64. package/dist/cjs/validators/base.cjs +1 -0
  65. package/dist/cjs/validators/base64.cjs +1 -0
  66. package/dist/cjs/validators/bigint.cjs +1 -0
  67. package/dist/cjs/validators/boolean.cjs +1 -0
  68. package/dist/cjs/validators/codec.cjs +1 -0
  69. package/dist/cjs/validators/custom.cjs +1 -0
  70. package/dist/cjs/validators/date.cjs +1 -0
  71. package/dist/cjs/validators/discriminated-union.cjs +1 -0
  72. package/dist/cjs/validators/enum.cjs +1 -0
  73. package/dist/cjs/validators/file.cjs +1 -0
  74. package/dist/cjs/validators/function.cjs +1 -0
  75. package/dist/cjs/validators/hex.cjs +1 -0
  76. package/dist/cjs/validators/index.cjs +1 -0
  77. package/dist/cjs/validators/intersection.cjs +1 -0
  78. package/dist/cjs/validators/json.cjs +1 -0
  79. package/dist/cjs/validators/lazy.cjs +1 -0
  80. package/dist/cjs/validators/literal.cjs +1 -0
  81. package/dist/cjs/validators/map.cjs +1 -0
  82. package/dist/cjs/validators/nan.cjs +1 -0
  83. package/dist/cjs/validators/never.cjs +1 -0
  84. package/dist/cjs/validators/null.cjs +1 -0
  85. package/dist/cjs/validators/number.cjs +1 -0
  86. package/dist/cjs/validators/object.cjs +1 -0
  87. package/dist/cjs/validators/promise.cjs +1 -0
  88. package/dist/cjs/validators/record.cjs +1 -0
  89. package/dist/cjs/validators/set.cjs +1 -0
  90. package/dist/cjs/validators/string-bool.cjs +1 -0
  91. package/dist/cjs/validators/string-formats.cjs +1 -0
  92. package/dist/cjs/validators/string.cjs +1 -0
  93. package/dist/cjs/validators/symbol.cjs +1 -0
  94. package/dist/cjs/validators/template-literal.cjs +1 -0
  95. package/dist/cjs/validators/tuple.cjs +1 -0
  96. package/dist/cjs/validators/uint8array.cjs +1 -0
  97. package/dist/cjs/validators/undefined.cjs +1 -0
  98. package/dist/cjs/validators/union.cjs +1 -0
  99. package/dist/cjs/validators/unknown.cjs +1 -0
  100. package/dist/cjs/validators/void.cjs +1 -0
  101. package/dist/cjs/validators/xor.cjs +1 -0
  102. package/dist/cli/bin.d.ts +0 -1
  103. package/dist/cli/bin.js +2 -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 +1 -0
  108. package/dist/codecs/index.d.ts +21 -4
  109. package/dist/codecs/index.js +1 -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 +1 -111
  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 +1 -181
  119. package/dist/compat/index.d.ts +4 -5
  120. package/dist/compat/result.d.ts +1 -2
  121. package/dist/compat/result.js +1 -171
  122. package/dist/errors-core.d.ts +58 -0
  123. package/dist/errors.d.ts +4 -54
  124. package/dist/errors.js +1 -235
  125. package/dist/events.d.ts +3 -4
  126. package/dist/index.d.ts +1093 -851
  127. package/dist/index.js +1 -855
  128. package/dist/kernel.d.ts +2 -3
  129. package/dist/kernel.js +1 -405
  130. package/dist/locales/af.d.ts +1 -2
  131. package/dist/locales/af.js +1 -107
  132. package/dist/locales/ar.d.ts +1 -2
  133. package/dist/locales/ar.js +1 -107
  134. package/dist/locales/bn.d.ts +1 -2
  135. package/dist/locales/bn.js +1 -107
  136. package/dist/locales/da.d.ts +1 -2
  137. package/dist/locales/da.js +1 -107
  138. package/dist/locales/de.d.ts +1 -2
  139. package/dist/locales/de.js +1 -107
  140. package/dist/locales/en.d.ts +1 -2
  141. package/dist/locales/en.js +1 -107
  142. package/dist/locales/es-MX.d.ts +1 -2
  143. package/dist/locales/es-MX.js +1 -106
  144. package/dist/locales/es.d.ts +1 -2
  145. package/dist/locales/es.js +1 -95
  146. package/dist/locales/fi.d.ts +1 -2
  147. package/dist/locales/fi.js +1 -107
  148. package/dist/locales/fr.d.ts +1 -2
  149. package/dist/locales/fr.js +1 -95
  150. package/dist/locales/hi.d.ts +1 -2
  151. package/dist/locales/hi.js +1 -107
  152. package/dist/locales/id.d.ts +1 -2
  153. package/dist/locales/id.js +1 -107
  154. package/dist/locales/index.d.ts +10 -15
  155. package/dist/locales/index.js +1 -3
  156. package/dist/locales/it.d.ts +1 -2
  157. package/dist/locales/it.js +1 -107
  158. package/dist/locales/ja.d.ts +1 -2
  159. package/dist/locales/ja.js +1 -107
  160. package/dist/locales/ko.d.ts +1 -2
  161. package/dist/locales/ko.js +1 -107
  162. package/dist/locales/lazy.d.ts +4 -26
  163. package/dist/locales/lazy.js +1 -220
  164. package/dist/locales/nl.d.ts +1 -2
  165. package/dist/locales/nl.js +1 -107
  166. package/dist/locales/no.d.ts +1 -2
  167. package/dist/locales/no.js +1 -107
  168. package/dist/locales/pl.d.ts +1 -2
  169. package/dist/locales/pl.js +1 -107
  170. package/dist/locales/pt-BR.d.ts +1 -2
  171. package/dist/locales/pt-BR.js +1 -107
  172. package/dist/locales/pt.d.ts +1 -2
  173. package/dist/locales/pt.js +1 -107
  174. package/dist/locales/ru.d.ts +1 -2
  175. package/dist/locales/ru.js +1 -107
  176. package/dist/locales/runtime.d.ts +10 -0
  177. package/dist/locales/runtime.js +1 -0
  178. package/dist/locales/sv.d.ts +1 -2
  179. package/dist/locales/sv.js +1 -107
  180. package/dist/locales/sw.d.ts +1 -2
  181. package/dist/locales/sw.js +1 -107
  182. package/dist/locales/th.d.ts +1 -2
  183. package/dist/locales/th.js +1 -107
  184. package/dist/locales/tr.d.ts +1 -2
  185. package/dist/locales/tr.js +1 -107
  186. package/dist/locales/types.d.ts +0 -1
  187. package/dist/locales/vi.d.ts +1 -2
  188. package/dist/locales/vi.js +1 -107
  189. package/dist/locales/zh.d.ts +1 -2
  190. package/dist/locales/zh.js +1 -107
  191. package/dist/logger.d.ts +0 -1
  192. package/dist/mini.d.ts +67 -68
  193. package/dist/mini.js +1 -132
  194. package/dist/pigment.d.ts +0 -1
  195. package/dist/pigment.js +1 -178
  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 +1 -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 +26 -7
  205. package/dist/utils/security.d.ts +2 -6
  206. package/dist/v3/index.d.ts +2 -0
  207. package/dist/v3/index.js +1 -0
  208. package/dist/v4/core/index.d.ts +272 -0
  209. package/dist/v4/core/index.js +1 -0
  210. package/dist/v4/index.d.ts +4 -0
  211. package/dist/v4/index.js +1 -0
  212. package/dist/v4/locales/index.d.ts +57 -0
  213. package/dist/v4/locales/index.js +1 -0
  214. package/dist/v4/mini/index.d.ts +2 -0
  215. package/dist/v4/mini/index.js +1 -0
  216. package/dist/v4-mini/index.d.ts +22 -0
  217. package/dist/v4-mini/index.js +1 -0
  218. package/dist/validators/any.d.ts +7 -2
  219. package/dist/validators/any.js +1 -0
  220. package/dist/validators/array.d.ts +16 -2
  221. package/dist/validators/array.js +1 -0
  222. package/dist/validators/base.d.ts +213 -14
  223. package/dist/validators/base.js +1 -0
  224. package/dist/validators/base64.d.ts +1 -2
  225. package/dist/validators/base64.js +1 -0
  226. package/dist/validators/bigint.d.ts +21 -3
  227. package/dist/validators/bigint.js +1 -0
  228. package/dist/validators/boolean.d.ts +13 -4
  229. package/dist/validators/boolean.js +1 -0
  230. package/dist/validators/codec.d.ts +9 -2
  231. package/dist/validators/codec.js +1 -0
  232. package/dist/validators/custom.d.ts +15 -2
  233. package/dist/validators/custom.js +1 -0
  234. package/dist/validators/date.d.ts +19 -3
  235. package/dist/validators/date.js +1 -0
  236. package/dist/validators/discriminated-union.d.ts +6 -5
  237. package/dist/validators/discriminated-union.js +1 -0
  238. package/dist/validators/enum.d.ts +10 -7
  239. package/dist/validators/enum.js +1 -0
  240. package/dist/validators/file.d.ts +7 -2
  241. package/dist/validators/file.js +1 -0
  242. package/dist/validators/function.d.ts +11 -5
  243. package/dist/validators/function.js +1 -0
  244. package/dist/validators/hex.d.ts +1 -2
  245. package/dist/validators/hex.js +1 -0
  246. package/dist/validators/index.d.ts +38 -39
  247. package/dist/validators/index.js +1 -515
  248. package/dist/validators/intersection.d.ts +1 -2
  249. package/dist/validators/intersection.js +1 -0
  250. package/dist/validators/json.d.ts +1 -2
  251. package/dist/validators/json.js +1 -0
  252. package/dist/validators/lazy.d.ts +5 -9
  253. package/dist/validators/lazy.js +1 -0
  254. package/dist/validators/literal.d.ts +9 -5
  255. package/dist/validators/literal.js +1 -0
  256. package/dist/validators/map.d.ts +15 -2
  257. package/dist/validators/map.js +1 -0
  258. package/dist/validators/nan.d.ts +2 -3
  259. package/dist/validators/nan.js +1 -0
  260. package/dist/validators/never.d.ts +1 -2
  261. package/dist/validators/never.js +1 -0
  262. package/dist/validators/null.d.ts +3 -3
  263. package/dist/validators/null.js +1 -0
  264. package/dist/validators/number.d.ts +75 -27
  265. package/dist/validators/number.js +1 -0
  266. package/dist/validators/object.d.ts +42 -11
  267. package/dist/validators/object.js +1 -0
  268. package/dist/validators/promise.d.ts +15 -10
  269. package/dist/validators/promise.js +1 -0
  270. package/dist/validators/record.d.ts +21 -9
  271. package/dist/validators/record.js +1 -0
  272. package/dist/validators/set.d.ts +11 -2
  273. package/dist/validators/set.js +1 -0
  274. package/dist/validators/string-bool.d.ts +7 -10
  275. package/dist/validators/string-bool.js +1 -0
  276. package/dist/validators/string-formats.d.ts +64 -65
  277. package/dist/validators/string-formats.js +1 -0
  278. package/dist/validators/string.d.ts +84 -26
  279. package/dist/validators/string.js +1 -0
  280. package/dist/validators/symbol.d.ts +8 -3
  281. package/dist/validators/symbol.js +1 -0
  282. package/dist/validators/template-literal.d.ts +1 -2
  283. package/dist/validators/template-literal.js +1 -0
  284. package/dist/validators/tuple.d.ts +29 -12
  285. package/dist/validators/tuple.js +1 -0
  286. package/dist/validators/uint8array.d.ts +3 -4
  287. package/dist/validators/uint8array.js +1 -0
  288. package/dist/validators/undefined.d.ts +3 -3
  289. package/dist/validators/undefined.js +1 -0
  290. package/dist/validators/union.d.ts +7 -4
  291. package/dist/validators/union.js +1 -0
  292. package/dist/validators/unknown.d.ts +7 -2
  293. package/dist/validators/unknown.js +1 -0
  294. package/dist/validators/void.d.ts +3 -2
  295. package/dist/validators/void.js +1 -0
  296. package/dist/validators/xor.d.ts +4 -5
  297. package/dist/validators/xor.js +1 -0
  298. package/package.json +239 -154
  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 +0 -506
  302. package/dist/chunks/date-50JV_Mfj.js.map +0 -1
  303. package/dist/chunks/index-DO8CFMxD.js +0 -894
  304. package/dist/chunks/index-DO8CFMxD.js.map +0 -1
  305. package/dist/chunks/json-Cp4WO0M9.js +0 -2021
  306. package/dist/chunks/json-Cp4WO0M9.js.map +0 -1
  307. package/dist/chunks/unknown-Dhzri_T-.js +0 -28
  308. package/dist/chunks/unknown-Dhzri_T-.js.map +0 -1
  309. package/dist/cjs/errors.cjs.map +0 -1
  310. package/dist/cjs/index.cjs.map +0 -1
  311. package/dist/cjs/locales/index.cjs.map +0 -1
  312. package/dist/cjs/locales/lazy.cjs.map +0 -1
  313. package/dist/cjs/mini.cjs.map +0 -1
  314. package/dist/cli/bin.d.ts.map +0 -1
  315. package/dist/cli/commands/benchmark.d.ts.map +0 -1
  316. package/dist/cli/commands/validate.d.ts.map +0 -1
  317. package/dist/cli/index.d.ts.map +0 -1
  318. package/dist/codecs/index.d.ts.map +0 -1
  319. package/dist/codecs/index.js.map +0 -1
  320. package/dist/coercion/bigint.d.ts.map +0 -1
  321. package/dist/coercion/boolean.d.ts.map +0 -1
  322. package/dist/coercion/date.d.ts.map +0 -1
  323. package/dist/coercion/index.d.ts.map +0 -1
  324. package/dist/coercion/index.js.map +0 -1
  325. package/dist/coercion/number.d.ts.map +0 -1
  326. package/dist/coercion/string.d.ts.map +0 -1
  327. package/dist/compat/emitter.d.ts.map +0 -1
  328. package/dist/compat/emitter.js.map +0 -1
  329. package/dist/compat/index.d.ts.map +0 -1
  330. package/dist/compat/result.d.ts.map +0 -1
  331. package/dist/compat/result.js.map +0 -1
  332. package/dist/errors.d.ts.map +0 -1
  333. package/dist/errors.js.map +0 -1
  334. package/dist/events.d.ts.map +0 -1
  335. package/dist/index.d.ts.map +0 -1
  336. package/dist/index.js.map +0 -1
  337. package/dist/kernel.d.ts.map +0 -1
  338. package/dist/kernel.js.map +0 -1
  339. package/dist/locales/af.d.ts.map +0 -1
  340. package/dist/locales/af.js.map +0 -1
  341. package/dist/locales/ar.d.ts.map +0 -1
  342. package/dist/locales/ar.js.map +0 -1
  343. package/dist/locales/backup-en.d.ts +0 -3
  344. package/dist/locales/backup-en.d.ts.map +0 -1
  345. package/dist/locales/bn.d.ts.map +0 -1
  346. package/dist/locales/bn.js.map +0 -1
  347. package/dist/locales/da.d.ts.map +0 -1
  348. package/dist/locales/da.js.map +0 -1
  349. package/dist/locales/de.d.ts.map +0 -1
  350. package/dist/locales/de.js.map +0 -1
  351. package/dist/locales/en.d.ts.map +0 -1
  352. package/dist/locales/en.js.map +0 -1
  353. package/dist/locales/es-MX.d.ts.map +0 -1
  354. package/dist/locales/es-MX.js.map +0 -1
  355. package/dist/locales/es.d.ts.map +0 -1
  356. package/dist/locales/es.js.map +0 -1
  357. package/dist/locales/fi.d.ts.map +0 -1
  358. package/dist/locales/fi.js.map +0 -1
  359. package/dist/locales/fr.d.ts.map +0 -1
  360. package/dist/locales/fr.js.map +0 -1
  361. package/dist/locales/hi.d.ts.map +0 -1
  362. package/dist/locales/hi.js.map +0 -1
  363. package/dist/locales/id.d.ts.map +0 -1
  364. package/dist/locales/id.js.map +0 -1
  365. package/dist/locales/index.d.ts.map +0 -1
  366. package/dist/locales/index.js.map +0 -1
  367. package/dist/locales/it.d.ts.map +0 -1
  368. package/dist/locales/it.js.map +0 -1
  369. package/dist/locales/ja.d.ts.map +0 -1
  370. package/dist/locales/ja.js.map +0 -1
  371. package/dist/locales/ko.d.ts.map +0 -1
  372. package/dist/locales/ko.js.map +0 -1
  373. package/dist/locales/lazy.d.ts.map +0 -1
  374. package/dist/locales/lazy.js.map +0 -1
  375. package/dist/locales/nl.d.ts.map +0 -1
  376. package/dist/locales/nl.js.map +0 -1
  377. package/dist/locales/no.d.ts.map +0 -1
  378. package/dist/locales/no.js.map +0 -1
  379. package/dist/locales/pl.d.ts.map +0 -1
  380. package/dist/locales/pl.js.map +0 -1
  381. package/dist/locales/pt-BR.d.ts.map +0 -1
  382. package/dist/locales/pt-BR.js.map +0 -1
  383. package/dist/locales/pt.d.ts.map +0 -1
  384. package/dist/locales/pt.js.map +0 -1
  385. package/dist/locales/ru.d.ts.map +0 -1
  386. package/dist/locales/ru.js.map +0 -1
  387. package/dist/locales/sv.d.ts.map +0 -1
  388. package/dist/locales/sv.js.map +0 -1
  389. package/dist/locales/sw.d.ts.map +0 -1
  390. package/dist/locales/sw.js.map +0 -1
  391. package/dist/locales/th.d.ts.map +0 -1
  392. package/dist/locales/th.js.map +0 -1
  393. package/dist/locales/tr.d.ts.map +0 -1
  394. package/dist/locales/tr.js.map +0 -1
  395. package/dist/locales/types.d.ts.map +0 -1
  396. package/dist/locales/vi.d.ts.map +0 -1
  397. package/dist/locales/vi.js.map +0 -1
  398. package/dist/locales/zh.d.ts.map +0 -1
  399. package/dist/locales/zh.js.map +0 -1
  400. package/dist/logger.d.ts.map +0 -1
  401. package/dist/mini.d.ts.map +0 -1
  402. package/dist/mini.js.map +0 -1
  403. package/dist/pigment.d.ts.map +0 -1
  404. package/dist/pigment.js.map +0 -1
  405. package/dist/plugins/index.d.ts.map +0 -1
  406. package/dist/plugins/types.d.ts.map +0 -1
  407. package/dist/utils/codec-utils.d.ts.map +0 -1
  408. package/dist/utils/deep-merge.d.ts.map +0 -1
  409. package/dist/utils/ip-validation.d.ts.map +0 -1
  410. package/dist/utils/json-schema.d.ts.map +0 -1
  411. package/dist/utils/security.d.ts.map +0 -1
  412. package/dist/validators/any.d.ts.map +0 -1
  413. package/dist/validators/array.d.ts.map +0 -1
  414. package/dist/validators/base.d.ts.map +0 -1
  415. package/dist/validators/base64.d.ts.map +0 -1
  416. package/dist/validators/bigint.d.ts.map +0 -1
  417. package/dist/validators/boolean.d.ts.map +0 -1
  418. package/dist/validators/codec.d.ts.map +0 -1
  419. package/dist/validators/custom.d.ts.map +0 -1
  420. package/dist/validators/date.d.ts.map +0 -1
  421. package/dist/validators/discriminated-union.d.ts.map +0 -1
  422. package/dist/validators/enum.d.ts.map +0 -1
  423. package/dist/validators/file.d.ts.map +0 -1
  424. package/dist/validators/function.d.ts.map +0 -1
  425. package/dist/validators/hex.d.ts.map +0 -1
  426. package/dist/validators/index.d.ts.map +0 -1
  427. package/dist/validators/index.js.map +0 -1
  428. package/dist/validators/intersection.d.ts.map +0 -1
  429. package/dist/validators/json.d.ts.map +0 -1
  430. package/dist/validators/lazy.d.ts.map +0 -1
  431. package/dist/validators/literal.d.ts.map +0 -1
  432. package/dist/validators/map.d.ts.map +0 -1
  433. package/dist/validators/nan.d.ts.map +0 -1
  434. package/dist/validators/never.d.ts.map +0 -1
  435. package/dist/validators/null.d.ts.map +0 -1
  436. package/dist/validators/number.d.ts.map +0 -1
  437. package/dist/validators/object.d.ts.map +0 -1
  438. package/dist/validators/promise.d.ts.map +0 -1
  439. package/dist/validators/record.d.ts.map +0 -1
  440. package/dist/validators/set.d.ts.map +0 -1
  441. package/dist/validators/string-bool.d.ts.map +0 -1
  442. package/dist/validators/string-formats.d.ts.map +0 -1
  443. package/dist/validators/string.d.ts.map +0 -1
  444. package/dist/validators/symbol.d.ts.map +0 -1
  445. package/dist/validators/template-literal.d.ts.map +0 -1
  446. package/dist/validators/tuple.d.ts.map +0 -1
  447. package/dist/validators/uint8array.d.ts.map +0 -1
  448. package/dist/validators/undefined.d.ts.map +0 -1
  449. package/dist/validators/union.d.ts.map +0 -1
  450. package/dist/validators/unknown.d.ts.map +0 -1
  451. package/dist/validators/void.d.ts.map +0 -1
  452. package/dist/validators/xor.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{getMessages as t}from"../locales/runtime.js";import{V as i}from"../chunks/errors-core-Cqi4-9ew.js";class VldMap extends e{constructor(e,t,i){super(r.MAP),this.keyValidator=e,this.valueValidator=t,this.errorMessage=i,this._simpleKeyMode=this.getSimpleItemMode(e),this._simpleValueMode=this.getSimpleItemMode(t),this._simpleKeyValue="literal"===this._simpleKeyMode?e.literal:void 0,this._simpleValueValue="literal"===this._simpleValueMode?t.literal:void 0}get keySchema(){return this.keyValidator}get valueSchema(){return this.valueValidator}static create(e,r){return new VldMap(e,r)}getSimpleItemMode(e){if(!0===e.isSimple)switch(e.validatorType){case r.STRING:return"string";case r.NUMBER:return"number";case r.BOOLEAN:return"boolean";case r.BIGINT:return"bigint";case r.SYMBOL:return"symbol";case r.NULL:return"null";case r.UNDEFINED:case r.VOID:return"undefinedValue";case r.LITERAL:return"literal";case r.ANY:case r.UNKNOWN:return"passthrough";default:return}}getSimpleItemError(e,r,i){switch(e){case"string":return t().invalidString;case"number":return t().invalidNumber;case"boolean":return t().invalidBoolean;case"bigint":return t().invalidBigint;case"symbol":return t().invalidSymbol;case"null":return"Expected null, received "+typeof i;case"undefinedValue":return t().expectedUndefined;case"literal":return t().literalExpected(JSON.stringify(r),JSON.stringify(i));default:return t().invalidMap}}parseSimpleItem(e,r,t){switch(e){case"string":if("string"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"number":if("number"!=typeof t||isNaN(t))throw new Error(this.getSimpleItemError(e,r,t));return t;case"boolean":if("boolean"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"bigint":if("bigint"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"symbol":if("symbol"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"null":if(null!==t)throw new Error(this.getSimpleItemError(e,r,t));return null;case"undefinedValue":if(void 0!==t)throw new Error(this.getSimpleItemError(e,r,t));return;case"literal":if(t!==r)throw new Error(this.getSimpleItemError(e,r,t));return r;case"passthrough":return t}}parse(e){if(!(e instanceof Map))throw new Error(this.errorMessage||t().invalidMap);return this.parseKnownMap(e)}parseKnownMap(e){const r=new Map,t=this._simpleKeyMode,i=this._simpleValueMode;if("string"===t&&"number"===i){for(const[s,a]of e){if("string"!=typeof s)throw new Error(this.getSimpleItemError(t,this._simpleKeyValue,s));if("number"!=typeof a||isNaN(a))throw new Error(this.getSimpleItemError(i,this._simpleValueValue,a));r.set(s,a)}return r}if("string"===t&&"string"===i){for(const[s,a]of e){if("string"!=typeof s)throw new Error(this.getSimpleItemError(t,this._simpleKeyValue,s));if("string"!=typeof a)throw new Error(this.getSimpleItemError(i,this._simpleValueValue,a));r.set(s,a)}return r}if(void 0!==t&&void 0!==i){const s=t,a=i;for(const[t,i]of e){const e=this.parseSimpleItem(s,this._simpleKeyValue,t),o=this.parseSimpleItem(a,this._simpleValueValue,i);r.set(e,o)}return r}for(const[s,a]of e)try{const e=void 0===t?this.keyValidator.parse(s):this.parseSimpleItem(t,this._simpleKeyValue,s),o=void 0===i?this.valueValidator.parse(a):this.parseSimpleItem(i,this._simpleValueValue,a);r.set(e,o)}catch(e){throw new Error(e.message)}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new i([{code:"invalid_type",path:[],message:r}]))}}var r}}export{VldMap};
@@ -2,8 +2,8 @@
2
2
  * VldNan - Validates that a value is NaN (Not a Number)
3
3
  * Part of Zod 4 API parity implementation
4
4
  */
5
- import { VldBase } from './base';
6
- import type { ParseResult } from './base';
5
+ import { VldBase } from './base.js';
6
+ import type { ParseResult } from './base.js';
7
7
  /**
8
8
  * NaN validator - validates that a value is NaN
9
9
  * Note: Uses Number.isNaN() which is more strict than global isNaN()
@@ -14,4 +14,3 @@ export declare class VldNan extends VldBase<unknown, number> {
14
14
  parse(value: unknown): number;
15
15
  safeParse(value: unknown): ParseResult<number>;
16
16
  }
17
- //# sourceMappingURL=nan.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{V as s}from"../chunks/errors-core-Cqi4-9ew.js";class VldNan extends e{constructor(){super(r.NAN)}static create(){return new VldNan}parse(e){if("number"!=typeof e||!Number.isNaN(e))throw new Error("Expected NaN, received "+("number"==typeof e?"a valid number":typeof e));return e}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new s([{code:"invalid_number",path:[],message:r}]))}}var r}}export{VldNan};
@@ -1,4 +1,4 @@
1
- import { VldBase, ParseResult } from './base';
1
+ import { VldBase, ParseResult } from './base.js';
2
2
  /**
3
3
  * Validator that never succeeds
4
4
  */
@@ -16,4 +16,3 @@ export declare class VldNever extends VldBase<never, never> {
16
16
  */
17
17
  safeParse(_value: unknown): ParseResult<never>;
18
18
  }
19
- //# sourceMappingURL=never.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e}from"./base.js";import{getMessages as r}from"../locales/runtime.js";import{V as s}from"../chunks/errors-core-Cqi4-9ew.js";class VldNever extends e{static create(){return new VldNever}parse(e){throw new Error(r().neverType)}safeParse(e){return{success:!1,error:new s([{code:"invalid_type",path:[],message:r().neverType}])}}}export{VldNever};
@@ -2,15 +2,15 @@
2
2
  * VldNull - Validates that a value is exactly null
3
3
  * Part of Zod 4 API parity implementation
4
4
  */
5
- import { VldBase } from './base';
6
- import type { ParseResult } from './base';
5
+ import { VldBase } from './base.js';
6
+ import type { ParseResult } from './base.js';
7
7
  /**
8
8
  * Null validator - validates that a value is exactly null
9
9
  */
10
10
  export declare class VldNull extends VldBase<unknown, null> {
11
11
  private constructor();
12
12
  static create(): VldNull;
13
+ get isSimple(): boolean;
13
14
  parse(value: unknown): null;
14
15
  safeParse(value: unknown): ParseResult<null>;
15
16
  }
16
- //# sourceMappingURL=null.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{V as s}from"../chunks/errors-core-Cqi4-9ew.js";class VldNull extends e{constructor(){super(r.NULL)}static create(){return new VldNull}get isSimple(){return!0}parse(e){if(null!==e)throw new Error("Expected null, received "+typeof e);return null}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new s([{code:"invalid_type",path:[],message:r}]))}}var r}}export{VldNull};
@@ -1,32 +1,81 @@
1
- import { VldBase, ParseResult } from './base';
1
+ import { VldBase, ParseResult, ValidatorType, type ErrorParam } from './base.js';
2
2
  /**
3
3
  * Type for number validation check functions
4
4
  */
5
5
  type NumberCheck = (value: number) => boolean;
6
+ /**
7
+ * Metadata for a single number constraint, enabling Zod 4-compatible issues.
8
+ */
9
+ interface NumberCheckMeta {
10
+ readonly kind: 'min' | 'max' | 'int' | 'gt' | 'lt' | 'multiple_of' | 'finite' | 'safe' | 'other';
11
+ readonly value?: number;
12
+ readonly inclusive?: boolean;
13
+ readonly message: string | undefined;
14
+ }
15
+ interface NumberJSONSchemaHints {
16
+ type?: 'number' | 'integer';
17
+ minimum?: number;
18
+ maximum?: number;
19
+ exclusiveMinimum?: number;
20
+ exclusiveMaximum?: number;
21
+ multipleOf?: number;
22
+ }
6
23
  /**
7
24
  * Configuration for number validator
8
25
  */
9
26
  interface NumberValidatorConfig {
10
27
  readonly checks: ReadonlyArray<NumberCheck>;
11
- readonly errorMessage?: string;
28
+ readonly errorMessage: string | undefined;
29
+ readonly validatorType?: ValidatorType;
30
+ readonly jsonSchema: NumberJSONSchemaHints | undefined;
31
+ readonly checkMetas: ReadonlyArray<NumberCheckMeta> | undefined;
12
32
  }
13
33
  /**
14
34
  * Immutable number validator with chainable methods
15
35
  */
16
36
  export declare class VldNumber extends VldBase<number, number> {
17
37
  protected readonly config: NumberValidatorConfig;
38
+ private readonly _checks;
39
+ private readonly _isSimple;
40
+ private readonly _fastCheckMode;
41
+ private readonly _checkMetas;
18
42
  /**
19
43
  * Protected constructor to allow extension while maintaining immutability
20
44
  */
21
45
  protected constructor(config?: Partial<NumberValidatorConfig>);
46
+ private detectFastCheckMode;
47
+ /**
48
+ * Returns true if this validator has custom checks (min, max, positive, etc.)
49
+ * Used by VldObject for optimized fast-path dispatch
50
+ */
51
+ get hasCustomChecks(): boolean;
52
+ /**
53
+ * Returns true if this is a simple number validator with no custom checks
54
+ * Used by VldObject for optimized fast-path dispatch
55
+ */
56
+ get isSimple(): boolean;
22
57
  /**
23
58
  * Create a new number validator
24
59
  */
25
60
  static create(): VldNumber;
26
61
  /**
27
62
  * Parse and validate a number value
63
+ * Zod 4 behavior: Infinity and NaN are rejected by default (they are not valid numbers).
28
64
  */
29
65
  parse(value: unknown): number;
66
+ /**
67
+ * Build the Zod 4-compatible VldIssue for a failed number check.
68
+ */
69
+ private _createCheckIssue;
70
+ /**
71
+ * Run all checks against a known number and return the index of the first failing check, or -1.
72
+ */
73
+ private _findFailingCheck;
74
+ /**
75
+ * Parse a value that has already passed the number type guard.
76
+ * @internal Used by object validators to avoid duplicate hot-path checks.
77
+ */
78
+ parseKnownNumber(value: number): number;
30
79
  /**
31
80
  * Safely parse and validate a number value
32
81
  */
@@ -34,111 +83,110 @@ export declare class VldNumber extends VldBase<number, number> {
34
83
  /**
35
84
  * Create a new validator with minimum value constraint
36
85
  */
37
- min(value: number, message?: string): VldNumber;
86
+ min(value: number, message?: ErrorParam): VldNumber;
38
87
  /**
39
88
  * Create a new validator with maximum value constraint
40
89
  */
41
- max(value: number, message?: string): VldNumber;
90
+ max(value: number, message?: ErrorParam): VldNumber;
42
91
  /**
43
92
  * Create a new validator that checks for integer values
44
93
  */
45
- int(message?: string): VldNumber;
94
+ int(message?: ErrorParam): VldNumber;
46
95
  /**
47
96
  * Create a new validator that checks for positive values
48
97
  */
49
- positive(message?: string): VldNumber;
98
+ positive(message?: ErrorParam): VldNumber;
50
99
  /**
51
100
  * Create a new validator that checks for negative values
52
101
  */
53
- negative(message?: string): VldNumber;
102
+ negative(message?: ErrorParam): VldNumber;
54
103
  /**
55
104
  * Create a new validator that checks for non-negative values
56
105
  */
57
- nonnegative(message?: string): VldNumber;
106
+ nonnegative(message?: ErrorParam): VldNumber;
58
107
  /**
59
108
  * Create a new validator that checks for non-positive values
60
109
  */
61
- nonpositive(message?: string): VldNumber;
110
+ nonpositive(message?: ErrorParam): VldNumber;
62
111
  /**
63
112
  * Create a new validator that checks for finite values
64
113
  */
65
- finite(message?: string): VldNumber;
114
+ finite(message?: ErrorParam): VldNumber;
66
115
  /**
67
116
  * Create a new validator that checks for safe integer values
68
117
  */
69
- safe(message?: string): VldNumber;
118
+ safe(message?: ErrorParam): VldNumber;
70
119
  /**
71
120
  * Create a new validator that checks if value is multiple of another
72
121
  */
73
- multipleOf(value: number, message?: string): VldNumber;
122
+ multipleOf(value: number, message?: ErrorParam): VldNumber;
74
123
  /**
75
124
  * Alias for multipleOf
76
125
  */
77
- step(value: number, message?: string): VldNumber;
126
+ step(value: number, message?: ErrorParam): VldNumber;
78
127
  /**
79
128
  * Create a new validator with a range constraint
80
129
  */
81
- between(min: number, max: number, message?: string): VldNumber;
130
+ between(min: number, max: number, message?: ErrorParam): VldNumber;
82
131
  /**
83
132
  * Create a new validator that checks for even numbers
84
133
  * BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)
85
134
  */
86
- even(message?: string): VldNumber;
135
+ even(message?: ErrorParam): VldNumber;
87
136
  /**
88
137
  * Create a new validator that checks for odd numbers
89
138
  * BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)
90
139
  */
91
- odd(message?: string): VldNumber;
140
+ odd(message?: ErrorParam): VldNumber;
92
141
  /**
93
142
  * Create a new validator with strict greater than constraint
94
143
  * Zod 4 API parity - strictly greater than (not equal to)
95
144
  */
96
- gt(value: number, message?: string): VldNumber;
145
+ gt(value: number, message?: ErrorParam): VldNumber;
97
146
  /**
98
147
  * Create a new validator with strict less than constraint
99
148
  * Zod 4 API parity - strictly less than (not equal to)
100
149
  */
101
- lt(value: number, message?: string): VldNumber;
150
+ lt(value: number, message?: ErrorParam): VldNumber;
102
151
  /**
103
152
  * Create a new validator with greater than or equal constraint
104
153
  * Zod 4 API parity - alias for min()
105
154
  */
106
- gte(value: number, message?: string): VldNumber;
155
+ gte(value: number, message?: ErrorParam): VldNumber;
107
156
  /**
108
157
  * Create a new validator with less than or equal constraint
109
158
  * Zod 4 API parity - alias for max()
110
159
  */
111
- lte(value: number, message?: string): VldNumber;
160
+ lte(value: number, message?: ErrorParam): VldNumber;
112
161
  /**
113
162
  * Create a validator for unsigned 32-bit integers
114
163
  * Range: 0 to 4,294,967,295
115
164
  */
116
- uint32(message?: string): VldNumber;
165
+ uint32(message?: ErrorParam): VldNumber;
117
166
  /**
118
167
  * Create a validator for unsigned 64-bit integers
119
168
  * Range: 0 to 2^53-1 (safe integer limit)
120
169
  */
121
- uint64(message?: string): VldNumber;
170
+ uint64(message?: ErrorParam): VldNumber;
122
171
  /**
123
172
  * Create a validator for signed 32-bit integers
124
173
  * Range: -2,147,483,648 to 2,147,483,647
125
174
  */
126
- int32(message?: string): VldNumber;
175
+ int32(message?: ErrorParam): VldNumber;
127
176
  /**
128
177
  * Create a validator for signed 64-bit integers
129
178
  * Range: -(2^53-1) to 2^53-1 (safe integer limit)
130
179
  */
131
- int64(message?: string): VldNumber;
180
+ int64(message?: ErrorParam): VldNumber;
132
181
  /**
133
182
  * Create a validator for 32-bit floats (IEEE 754 single precision)
134
183
  * Range: -3.4e38 to 3.4e38, precision ~7 decimal digits
135
184
  */
136
- float32(message?: string): VldNumber;
185
+ float32(message?: ErrorParam): VldNumber;
137
186
  /**
138
187
  * Create a validator for 64-bit floats (IEEE 754 double precision)
139
188
  * Alias for standard number validation
140
189
  */
141
- float64(message?: string): VldNumber;
190
+ float64(message?: ErrorParam): VldNumber;
142
191
  }
143
192
  export {};
144
- //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as s,resolveErrorMessage as i}from"./base.js";import{getMessages as n}from"../locales/runtime.js";import{V as t,c,g as r}from"../chunks/errors-core-Cqi4-9ew.js";class VldNumber extends e{constructor(e){super(e?.validatorType||s.NUMBER),this.config={checks:e?.checks||[],errorMessage:e?.errorMessage,jsonSchema:e?.jsonSchema,checkMetas:e?.checkMetas},this._checks=this.config.checks,this._isSimple=0===this._checks.length,this._fastCheckMode=this.detectFastCheckMode(),this._checkMetas=this.config.checkMetas}detectFastCheckMode(){const e=this.config.jsonSchema;return 0===this._checks.length?"none":1===this._checks.length&&0===e?.exclusiveMinimum&&"integer"!==e.type?"positive":2===this._checks.length&&0===e?.exclusiveMinimum&&"integer"===e.type?"positive-int":void 0}get hasCustomChecks(){return!this._isSimple}get isSimple(){return this._isSimple}static create(){return new VldNumber}parse(e){if("number"!=typeof e||!Number.isFinite(e))throw new t([c("number",r(e),this.config.errorMessage)]);switch(this._fastCheckMode){case"none":return e;case"positive":if(e>0)return e;throw new t([this._createCheckIssue("gt",0,this.config.errorMessage)]);case"positive-int":if(e>0&&Number.isInteger(e))return e;throw new t([this._createCheckIssue("int",void 0,this.config.errorMessage)])}return this.parseKnownNumber(e)}_createCheckIssue(e,s,i){switch(e){case"min":return{code:"too_small",path:[],origin:"number",minimum:s,inclusive:!0,message:i||`Too small: expected number to be >=${s}`};case"max":return{code:"too_big",path:[],origin:"number",maximum:s,inclusive:!0,message:i||`Too big: expected number to be <=${s}`};case"gt":return{code:"too_small",path:[],origin:"number",minimum:s,inclusive:!1,message:i||`Too small: expected number to be >${s}`};case"lt":return{code:"too_big",path:[],origin:"number",maximum:s,inclusive:!1,message:i||`Too big: expected number to be <${s}`};case"int":return{code:"invalid_type",path:[],expected:"int",received:"number",message:i||"Invalid input: expected int, received number"};default:return{code:"custom",path:[],message:i||"Invalid number"}}}_findFailingCheck(e){const s=this._checks,i=this._checkMetas;for(let n=0;n<s.length;n++)if(!s[n](e))return i?.[n]??{kind:"other",message:this.config.errorMessage};return null}parseKnownNumber(e){switch(this._fastCheckMode){case"none":return e;case"positive":if(e>0)return e;throw new t([this._createCheckIssue("gt",0,this.config.errorMessage)]);case"positive-int":if(e>0&&Number.isInteger(e))return e;throw new t([this._createCheckIssue("int",void 0,this.config.errorMessage)])}const s=this._findFailingCheck(e);if(s)throw new t([this._createCheckIssue(s.kind,s.value,s.message)]);return e}safeParse(e){if("number"!=typeof e||!Number.isFinite(e))return{success:!1,error:new t([c("number",r(e),this.config.errorMessage)])};try{const s=this._findFailingCheck(e);if(s)return{success:!1,error:new t([this._createCheckIssue(s.kind,s.value,s.message)])}}catch(e){return e instanceof t?{success:!1,error:e}:{success:!1,error:new t([{code:"custom",path:[],message:e.message}])}}return{success:!0,data:e}}min(e,s){return new VldNumber({checks:[...this.config.checks,s=>s>=e],errorMessage:i(s,n().numberMin(e)),jsonSchema:{...this.config.jsonSchema,minimum:e},checkMetas:[...this.config.checkMetas??[],{kind:"min",value:e,inclusive:!0,message:i(s,n().numberMin(e))}]})}max(e,s){return new VldNumber({checks:[...this.config.checks,s=>s<=e],errorMessage:i(s,n().numberMax(e)),jsonSchema:{...this.config.jsonSchema,maximum:e},checkMetas:[...this.config.checkMetas??[],{kind:"max",value:e,inclusive:!0,message:i(s,n().numberMax(e))}]})}int(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isInteger(e)],errorMessage:i(e,n().numberInt),jsonSchema:{...this.config.jsonSchema,type:"integer"},checkMetas:[...this.config.checkMetas??[],{kind:"int",message:i(e,n().numberInt)}]})}positive(e){return new VldNumber({checks:[...this.config.checks,e=>e>0],errorMessage:i(e,n().numberPositive),jsonSchema:{...this.config.jsonSchema,exclusiveMinimum:0},checkMetas:[...this.config.checkMetas??[],{kind:"gt",value:0,inclusive:!1,message:i(e,n().numberPositive)}]})}negative(e){return new VldNumber({checks:[...this.config.checks,e=>e<0],errorMessage:i(e,n().numberNegative),jsonSchema:{...this.config.jsonSchema,exclusiveMaximum:0},checkMetas:[...this.config.checkMetas??[],{kind:"lt",value:0,inclusive:!1,message:i(e,n().numberNegative)}]})}nonnegative(e){return new VldNumber({checks:[...this.config.checks,e=>e>=0],errorMessage:i(e,n().numberNonnegative),jsonSchema:{...this.config.jsonSchema,minimum:0},checkMetas:[...this.config.checkMetas??[],{kind:"min",value:0,inclusive:!0,message:i(e,n().numberNonnegative)}]})}nonpositive(e){return new VldNumber({checks:[...this.config.checks,e=>e<=0],errorMessage:i(e,n().numberNonpositive),jsonSchema:{...this.config.jsonSchema,maximum:0},checkMetas:[...this.config.checkMetas??[],{kind:"max",value:0,inclusive:!0,message:i(e,n().numberNonpositive)}]})}finite(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isFinite(e)],errorMessage:i(e,n().numberFinite),jsonSchema:this.config.jsonSchema})}safe(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)],errorMessage:i(e,n().numberSafe),jsonSchema:{...this.config.jsonSchema,type:"integer"}})}multipleOf(e,s){return new VldNumber({checks:[...this.config.checks,s=>{const i=Math.abs(s%e);return i<Number.EPSILON||Math.abs(i-Math.abs(e))<Number.EPSILON}],errorMessage:i(s,n().numberMultipleOf(e)),jsonSchema:{...this.config.jsonSchema,multipleOf:e}})}step(e,s){return this.multipleOf(e,s)}between(e,s,n){return new VldNumber({checks:[...this.config.checks,i=>i>=e&&i<=s],errorMessage:i(n,`Number must be between ${e} and ${s}`),jsonSchema:{...this.config.jsonSchema,minimum:e,maximum:s}})}even(e){return new VldNumber({checks:[...this.config.checks,e=>!!Number.isInteger(e)&&e%2==0],errorMessage:i(e,"Number must be even"),jsonSchema:{...this.config.jsonSchema,type:"integer",multipleOf:2}})}odd(e){return new VldNumber({checks:[...this.config.checks,e=>!!Number.isInteger(e)&&e%2!=0],errorMessage:i(e,"Number must be odd"),jsonSchema:{...this.config.jsonSchema,type:"integer"}})}gt(e,s){return new VldNumber({checks:[...this.config.checks,s=>s>e],errorMessage:i(s,`Number must be greater than ${e}`),jsonSchema:{...this.config.jsonSchema,exclusiveMinimum:e},checkMetas:[...this.config.checkMetas??[],{kind:"gt",value:e,inclusive:!1,message:i(s,`Number must be greater than ${e}`)}]})}lt(e,s){return new VldNumber({checks:[...this.config.checks,s=>s<e],errorMessage:i(s,`Number must be less than ${e}`),jsonSchema:{...this.config.jsonSchema,exclusiveMaximum:e},checkMetas:[...this.config.checkMetas??[],{kind:"lt",value:e,inclusive:!1,message:i(s,`Number must be less than ${e}`)}]})}gte(e,s){return this.min(e,s)}lte(e,s){return this.max(e,s)}uint32(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)&&e>=0&&e<=4294967295],errorMessage:i(e,"Expected an unsigned 32-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer",minimum:0,maximum:4294967295}})}uint64(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)&&e>=0],errorMessage:i(e,"Expected an unsigned 64-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer",minimum:0}})}int32(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)&&e>=-2147483648&&e<=2147483647],errorMessage:i(e,"Expected a signed 32-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer",minimum:-2147483648,maximum:2147483647}})}int64(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)],errorMessage:i(e,"Expected a signed 64-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer"}})}float32(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isFinite(e)&&Math.abs(e)<=34e37],errorMessage:i(e,"Expected a 32-bit float"),jsonSchema:{...this.config.jsonSchema,minimum:-34e37,maximum:34e37}})}float64(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isFinite(e)],errorMessage:i(e,"Expected a 64-bit float"),jsonSchema:this.config.jsonSchema})}}export{VldNumber};
@@ -1,16 +1,16 @@
1
- import { VldBase, ParseResult } from './base';
2
- import { VldEnum } from './enum';
1
+ import { VldBase, ParseResult } from './base.js';
2
+ import { VldEnum } from './enum.js';
3
3
  /**
4
4
  * Configuration for object validator
5
5
  */
6
6
  interface ObjectValidatorConfig<T extends Record<string, any>> {
7
7
  readonly shape: {
8
- readonly [K in keyof T]: VldBase<unknown, T[K]>;
8
+ readonly [K in keyof T]: VldBase<any, T[K]>;
9
9
  };
10
10
  readonly strict?: boolean;
11
11
  readonly passthrough?: boolean;
12
12
  readonly catchall?: VldBase<unknown, any>;
13
- readonly errorMessage?: string;
13
+ readonly errorMessage?: string | undefined;
14
14
  }
15
15
  /**
16
16
  * Optimized immutable object validator with chainable methods
@@ -20,10 +20,25 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
20
20
  private readonly _config;
21
21
  private readonly _shapeKeys;
22
22
  private readonly _shapeKeysSet;
23
+ private readonly _validators;
24
+ private readonly _validatorTypes;
25
+ private readonly _simpleFieldModes;
26
+ private readonly _simpleFieldValues;
27
+ private readonly _canUseSimpleObjectFastPath;
28
+ private readonly _canUseSafeParseFastPath;
29
+ private createSafeParseError;
23
30
  /**
24
31
  * Private constructor to enforce immutability
25
32
  */
26
33
  private constructor();
34
+ private tryGetFieldValidator;
35
+ private resolveFieldValidator;
36
+ private getFieldValidator;
37
+ private getValidatorType;
38
+ private getSimpleFieldMode;
39
+ private getSimpleFieldError;
40
+ private parseCheckedField;
41
+ private parseSimpleObjectValue;
27
42
  /**
28
43
  * Get the validator configuration
29
44
  * @internal Used by discriminated union validator
@@ -42,23 +57,38 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
42
57
  * Create a new object validator
43
58
  */
44
59
  static create<T extends Record<string, any>>(shape: {
45
- [K in keyof T]: VldBase<unknown, T[K]>;
60
+ [K in keyof T]: VldBase<any, T[K]>;
46
61
  }): VldObject<T>;
47
62
  /**
48
63
  * Parse and validate an object value
49
64
  * Ultra-optimized with inline type checks and minimal overhead
50
65
  */
51
66
  parse(value: unknown): T;
67
+ /**
68
+ * Parse an object value that already passed the object type guard.
69
+ * @internal Used by discriminated unions after discriminator lookup.
70
+ */
71
+ parseKnownObject(value: Record<string, unknown>, trustedKey?: string): T;
72
+ /**
73
+ * Parse an object after an owning discriminated union has already matched
74
+ * the discriminator value to this exact object schema.
75
+ * @internal
76
+ */
77
+ parseTrustedKnownObject(value: Record<string, unknown>, trustedKey: string): T;
78
+ private parseObjectValue;
52
79
  /**
53
80
  * Safely parse and validate an object value
54
81
  * Optimized version using pre-computed keys
55
82
  */
56
83
  safeParse(value: unknown): ParseResult<T>;
57
- /**
58
- * Comprehensive prototype pollution protection
59
- * Checks for dangerous keys that could modify Object.prototype
60
- */
61
- private isDangerousKey;
84
+ encode(value: T): unknown;
85
+ safeEncode(value: T): ParseResult<unknown>;
86
+ encodeAsync(value: T): Promise<unknown>;
87
+ safeEncodeAsync(value: T): Promise<ParseResult<unknown>>;
88
+ private encodeObjectSync;
89
+ private encodeObjectAsync;
90
+ private getEncodedExtraKeys;
91
+ private encodeExtraKeysSync;
62
92
  /**
63
93
  * Create a new validator in strict mode (no extra keys allowed)
64
94
  */
@@ -67,6 +97,8 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
67
97
  * Create a new validator in passthrough mode (extra keys are preserved)
68
98
  */
69
99
  passthrough(): VldObject<T>;
100
+ loose(): VldObject<T>;
101
+ strip(): VldObject<T>;
70
102
  /**
71
103
  * Create a new validator with all fields optional
72
104
  */
@@ -134,4 +166,3 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
134
166
  }): VldObject<T & U>;
135
167
  }
136
168
  export {};
137
- //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as t,VldOptional as s}from"./base.js";import{getMessages as r}from"../locales/runtime.js";import{VldEnum as i}from"./enum.js";import{i as n}from"../chunks/security-Dy24T8N7.js";import{V as o}from"../chunks/errors-core-Cqi4-9ew.js";class VldObject extends e{createSafeParseError(e){return new o([{code:"invalid_object",path:[],message:e}])}constructor(s){super(t.OBJECT),this._config=s,this._shapeKeys=Object.keys(s.shape),this._shapeKeysSet=new Set(this._shapeKeys),this._validators=this._shapeKeys.map(e=>this.tryGetFieldValidator(e)),this._validatorTypes=this._shapeKeys.map((e,t)=>this._validators[t]?.validatorType||this.getValidatorType(e)),this._simpleFieldModes=this._validators.map((e,t)=>this.getSimpleFieldMode(e,this._validatorTypes[t])),this._simpleFieldValues=this._validators.map((e,t)=>"literal"===this._simpleFieldModes[t]?e.literal:void 0),this._canUseSimpleObjectFastPath=!s.strict&&!s.passthrough&&!s.catchall&&this._shapeKeys.length>0&&this._simpleFieldModes.every(e=>void 0!==e),this._canUseSafeParseFastPath=this._validators.every(t=>t instanceof e)&&(void 0===s.catchall||s.catchall instanceof e)}tryGetFieldValidator(e){try{const t=Object.getOwnPropertyDescriptor(this._config.shape,e);if(t?.get)return;return this.resolveFieldValidator(e)}catch{return}}resolveFieldValidator(e){try{const t=this._config.shape[e];if(!t||"function"!=typeof t.safeParse)return;return t}catch{return}}getFieldValidator(e,t){const s=(void 0===t?void 0:this._validators[t])||this.resolveFieldValidator(e);if(!s)throw new Error(`Invalid validator for field "${e}"`);return s}getValidatorType(e){try{const s=this._config.shape[e];return s?.validatorType||t.UNKNOWN}catch{return t.UNKNOWN}}getSimpleFieldMode(e,s){if(e&&!0===e.isSimple)switch(s){case t.STRING:return"string";case t.NUMBER:return"number";case t.BOOLEAN:return"boolean";case t.BIGINT:return"bigint";case t.SYMBOL:return"symbol";case t.NULL:return"null";case t.UNDEFINED:case t.VOID:return"undefinedValue";case t.LITERAL:return"literal";case t.ANY:case t.UNKNOWN:return"passthrough";default:return}}getSimpleFieldError(e,t,s){switch(e){case"string":return r().invalidString;case"number":return r().invalidNumber;case"boolean":return r().invalidBoolean;case"bigint":return r().invalidBigint;case"symbol":return r().invalidSymbol;case"null":return"Expected null, received "+typeof s;case"undefinedValue":return r().expectedUndefined;case"literal":return r().literalExpected(JSON.stringify(t),JSON.stringify(s));default:return r().invalidObject}}parseCheckedField(e,s,r){if(s===t.STRING&&"string"==typeof r){const t=e.parseKnownString;if("function"==typeof t)return t.call(e,r)}if(s===t.NUMBER&&"number"==typeof r&&!isNaN(r)){const t=e.parseKnownNumber;if("function"==typeof t)return t.call(e,r)}if(s===t.BOOLEAN&&"boolean"==typeof r){const t=e.parseKnownBoolean;if("function"==typeof t)return t.call(e,r)}if(s===t.BIGINT&&"bigint"==typeof r){const t=e.parseKnownBigInt;if("function"==typeof t)return t.call(e,r)}if(s===t.SYMBOL&&"symbol"==typeof r){const t=e.parseKnownSymbol;if("function"==typeof t)return t.call(e,r)}if(s===t.FUNCTION&&"function"==typeof r){const t=e.parseKnownFunction;if("function"==typeof t)return t.call(e,r)}if(s===t.FILE&&"object"==typeof r&&null!==r&&("size"in r&&"type"in r||"undefined"!=typeof File&&r instanceof File)){const t=e.parseKnownFile;if("function"==typeof t)return t.call(e,r)}if(s===t.DATE&&r instanceof Date){const t=e.parseKnownDate;if("function"==typeof t)return t.call(e,r)}if(s===t.OBJECT&&"object"==typeof r&&null!==r&&!Array.isArray(r)){const t=e.parseKnownObject;if("function"==typeof t)return t.call(e,r)}if(s===t.ARRAY&&Array.isArray(r)){const t=e.parseKnownArray;if("function"==typeof t)return t.call(e,r)}if(s===t.TUPLE&&Array.isArray(r)){const t=e.parseKnownTuple;if("function"==typeof t)return t.call(e,r)}if(s===t.RECORD&&"object"==typeof r&&null!==r&&!Array.isArray(r)){const t=e.parseKnownRecord;if("function"==typeof t)return t.call(e,r)}if(s===t.SET&&r instanceof Set){const t=e.parseKnownSet;if("function"==typeof t)return t.call(e,r)}if(s===t.MAP&&r instanceof Map){const t=e.parseKnownMap;if("function"==typeof t)return t.call(e,r)}return e.parse(r)}parseSimpleObjectValue(e,t,s=!1){if(2===this._shapeKeys.length&&"string"===this._simpleFieldModes[0]&&"number"===this._simpleFieldModes[1]){const t=this._shapeKeys[0],s=e[t];if("string"!=typeof s)throw new Error(r().objectField(t,r().invalidString));const i=this._shapeKeys[1],n=e[i];if("number"!=typeof n||isNaN(n))throw new Error(r().objectField(i,r().invalidNumber));const o={};return o[t]=s,o[i]=n,o}if(3===this._shapeKeys.length&&"literal"===this._simpleFieldModes[0]&&"string"===this._simpleFieldModes[1]&&"number"===this._simpleFieldModes[2]){const i=this._shapeKeys[0],n=e[i],o=this._simpleFieldValues[0];if((!s||i!==t)&&n!==o)throw new Error(r().objectField(i,this.getSimpleFieldError("literal",o,n)));const a=this._shapeKeys[1],c=e[a];if("string"!=typeof c)throw new Error(r().objectField(a,r().invalidString));const l=this._shapeKeys[2],h=e[l];if("number"!=typeof h||isNaN(h))throw new Error(r().objectField(l,r().invalidNumber));const f={};return f[i]=o,f[a]=c,f[l]=h,f}const i={};for(let n=0;n<this._shapeKeys.length;n++){const o=this._shapeKeys[n],a=e[o],c=this._simpleFieldModes[n];switch(c){case"string":if("string"!=typeof a)throw new Error(r().objectField(o,r().invalidString));i[o]=a;break;case"number":if("number"!=typeof a||isNaN(a))throw new Error(r().objectField(o,r().invalidNumber));i[o]=a;break;case"boolean":if("boolean"!=typeof a)throw new Error(r().objectField(o,r().invalidBoolean));i[o]=a;break;case"bigint":if("bigint"!=typeof a)throw new Error(r().objectField(o,r().invalidBigint));i[o]=a;break;case"symbol":if("symbol"!=typeof a)throw new Error(r().objectField(o,r().invalidSymbol));i[o]=a;break;case"null":if(null!==a)throw new Error(r().objectField(o,this.getSimpleFieldError(c,void 0,a)));i[o]=null;break;case"undefinedValue":if(void 0!==a)throw new Error(r().objectField(o,r().expectedUndefined));i[o]=void 0;break;case"literal":if(s&&o===t){i[o]=this._simpleFieldValues[n];break}if(a!==this._simpleFieldValues[n])throw new Error(r().objectField(o,this.getSimpleFieldError(c,this._simpleFieldValues[n],a)));i[o]=this._simpleFieldValues[n];break;case"passthrough":i[o]=a;break;default:throw new Error(r().objectField(o,r().invalidObject))}}return i}get config(){return this._config}get shapeKeys(){return this._shapeKeys}get shapeKeysSet(){return this._shapeKeysSet}static create(e){return new VldObject({shape:e})}parse(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this._config.errorMessage||r().invalidObject);return this.parseObjectValue(e)}parseKnownObject(e,t){return this.parseObjectValue(e,t)}parseTrustedKnownObject(e,t){return this.parseObjectValue(e,t,!0)}parseObjectValue(e,t,s=!1){if(this._canUseSimpleObjectFastPath)return this.parseSimpleObjectValue(e,t,s);const i={};let o="";try{for(let n=0;n<this._shapeKeys.length;n++){if(o=this._shapeKeys[n],s&&o===t&&"literal"===this._simpleFieldModes[n]){i[o]=this._simpleFieldValues[n];continue}const a=this._simpleFieldModes[n];if(void 0!==a){const t=e[o];switch(a){case"string":if("string"!=typeof t)throw new Error(r().invalidString);i[o]=t;continue;case"number":if("number"!=typeof t||isNaN(t))throw new Error(r().invalidNumber);i[o]=t;continue;case"boolean":if("boolean"!=typeof t)throw new Error(r().invalidBoolean);i[o]=t;continue;case"bigint":if("bigint"!=typeof t)throw new Error(r().invalidBigint);i[o]=t;continue;case"symbol":if("symbol"!=typeof t)throw new Error(r().invalidSymbol);i[o]=t;continue;case"null":if(null!==t)throw new Error(this.getSimpleFieldError(a,void 0,t));i[o]=null;continue;case"undefinedValue":if(void 0!==t)throw new Error(r().expectedUndefined);i[o]=void 0;continue;case"literal":if(t!==this._simpleFieldValues[n])throw new Error(this.getSimpleFieldError(a,this._simpleFieldValues[n],t));i[o]=this._simpleFieldValues[n];continue;case"passthrough":i[o]=t;continue}continue}const c=this.getFieldValidator(o,n);i[o]=this.parseCheckedField(c,this._validatorTypes[n],e[o])}}catch(e){throw new Error(r().objectField(o,e.message))}if(this._config.strict||this._config.passthrough||this._config.catchall){const t=Object.keys(e);if(this._config.strict){const e=[];for(let s=0;s<t.length;s++){const r=t[s];this._shapeKeysSet.has(r)||e.push(r)}if(e.length>0)throw new Error(r().unexpectedKeys(e))}if(this._config.passthrough)for(let s=0;s<t.length;s++){const r=t[s];this._shapeKeysSet.has(r)||n(r)||(i[r]=e[r])}if(this._config.catchall)for(let s=0;s<t.length;s++){const o=t[s];if(!this._shapeKeysSet.has(o)&&!n(o))try{i[o]=this._config.catchall.parse(e[o])}catch(e){throw new Error(r().objectField(o,e.message))}}}return i}safeParse(t){if("object"!=typeof t||null===t||Array.isArray(t))return{success:!1,error:this.createSafeParseError(this._config.errorMessage||r().invalidObject)};const s=t;if(this._canUseSimpleObjectFastPath)try{return{success:!0,data:this.parseSimpleObjectValue(s)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}if(this._canUseSafeParseFastPath)try{return{success:!0,data:this.parseObjectValue(s)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}const i={};for(let t=0;t<this._shapeKeys.length;t++){const n=this._shapeKeys[t],o=s[n],a=this._simpleFieldModes[t];if(void 0!==a){if("string"===a&&"string"==typeof o||"number"===a&&"number"==typeof o&&!isNaN(o)||"boolean"===a&&"boolean"==typeof o||"bigint"===a&&"bigint"==typeof o||"symbol"===a&&"symbol"==typeof o||"null"===a&&null===o||"undefinedValue"===a&&void 0===o||"literal"===a&&o===this._simpleFieldValues[t]||"passthrough"===a){i[n]="literal"===a?this._simpleFieldValues[t]:"null"===a?null:o;continue}return{success:!1,error:this.createSafeParseError(r().objectField(n,this.getSimpleFieldError(a,this._simpleFieldValues[t],o)))}}let c;try{c=this.getFieldValidator(n,t)}catch(e){const t=e instanceof Error?e.message:String(e);return{success:!1,error:this.createSafeParseError(r().objectField(n,t))}}try{if(c instanceof e)i[n]=this.parseCheckedField(c,this._validatorTypes[t],o);else{const e=c.safeParse(o);if(!e.success)return{success:!1,error:this.createSafeParseError(r().objectField(n,e.error.message))};i[n]=e.data}}catch(e){const t=e instanceof Error?e.message:String(e);return{success:!1,error:this.createSafeParseError(r().objectField(n,t))}}}if(this._config.strict||this._config.passthrough||this._config.catchall){const t=Object.keys(s);if(this._config.strict){const e=[];for(let s=0;s<t.length;s++){const r=t[s];this._shapeKeysSet.has(r)||e.push(r)}if(e.length>0)return{success:!1,error:this.createSafeParseError(r().unexpectedKeys(e))}}if(this._config.passthrough)for(let e=0;e<t.length;e++){const r=t[e];this._shapeKeysSet.has(r)||n(r)||(i[r]=s[r])}if(this._config.catchall){const o=this._config.catchall;for(let a=0;a<t.length;a++){const c=t[a];if(!this._shapeKeysSet.has(c)&&!n(c))try{if(o instanceof e)i[c]=o.parse(s[c]);else{const e=o.safeParse(s[c]);if(!e.success)return{success:!1,error:this.createSafeParseError(r().objectField(c,e.error.message))};i[c]=e.data}}catch(e){const t=e instanceof Error?e.message:String(e);return{success:!1,error:this.createSafeParseError(r().objectField(c,t))}}}}}return{success:!0,data:i}}encode(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this._config.errorMessage||r().invalidObject);return this.encodeObjectSync(e)}safeEncode(e){try{return{success:!0,data:this.encode(e)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}}async encodeAsync(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this._config.errorMessage||r().invalidObject);return this.encodeObjectAsync(e)}async safeEncodeAsync(e){try{return{success:!0,data:await this.encodeAsync(e)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}}encodeObjectSync(e){const t={};for(let s=0;s<this._shapeKeys.length;s++){const r=this._shapeKeys[s],i=this.getFieldValidator(r,s).encode(e[r]);(void 0!==i||Object.prototype.hasOwnProperty.call(e,r))&&(t[r]=i)}return this.encodeExtraKeysSync(e,t),t}async encodeObjectAsync(e){const t={};for(let s=0;s<this._shapeKeys.length;s++){const r=this._shapeKeys[s],i=await this.getFieldValidator(r,s).encodeAsync(e[r]);(void 0!==i||Object.prototype.hasOwnProperty.call(e,r))&&(t[r]=i)}const s=this.getEncodedExtraKeys(e);for(const r of s)n(r)||(this._config.catchall?t[r]=await this._config.catchall.encodeAsync(e[r]):this._config.passthrough&&(t[r]=e[r]));return t}getEncodedExtraKeys(e){const t=Object.keys(e).filter(e=>!this._shapeKeysSet.has(e));if(this._config.strict&&t.length>0)throw new Error(r().unexpectedKeys(t));return t}encodeExtraKeysSync(e,t){for(const s of this.getEncodedExtraKeys(e))n(s)||(this._config.catchall?t[s]=this._config.catchall.encode(e[s]):this._config.passthrough&&(t[s]=e[s]))}strict(e){return new VldObject({...this._config,strict:!0,passthrough:!1,errorMessage:e})}passthrough(){return new VldObject({...this._config,strict:!1,passthrough:!0})}loose(){return this.passthrough()}strip(){const e={...this._config,strict:!1,passthrough:!1};return delete e.catchall,new VldObject(e)}partial(){const e={};for(const t in this._config.shape)e[t]=new s(this._config.shape[t]);return new VldObject({...this._config,shape:e})}deepPartial(){const e={};for(const t in this._config.shape){const r=this._config.shape[t];e[t]=new s(r instanceof VldObject?r.deepPartial():r)}return new VldObject({...this._config,shape:e})}pick(...e){const t={};for(const s of e)s in this._config.shape&&(t[s]=this._config.shape[s]);return new VldObject({...this._config,shape:t})}omit(...e){const t={},s=new Set(e);for(const e in this._config.shape)s.has(e)||(t[e]=this._config.shape[e]);return new VldObject({...this._config,shape:t})}extend(e){return new VldObject({...this._config,shape:{...this._config.shape,...e}})}merge(e){return new VldObject({...this._config,shape:{...this._config.shape,...e.config.shape}})}required(){const e={};for(const t in this._config.shape){const r=this._config.shape[t];if(r instanceof s){const s=r.baseValidator;if(!s||"function"!=typeof s.parse)throw new Error(`Invalid VldOptional structure for field "${t}": missing or invalid baseValidator`);e[t]=s}else e[t]=r}return new VldObject({...this._config,shape:e})}catchall(e){return new VldObject({...this._config,catchall:e,passthrough:!1})}get shape(){return this._config.shape}keyof(){const e=Object.keys(this._config.shape);if(0===e.length)throw new Error("Cannot create keyof enum from empty object");return i.create(e)}safeExtend(e){const t=new Set(Object.keys(this._config.shape)),s=Object.keys(e),i=[];for(const e of s)t.has(e)&&i.push(e);if(i.length>0)throw new Error(`safeExtend: ${r().safeExtendOverlap(i)}`);return new VldObject({...this._config,shape:{...this._config.shape,...e}})}}export{VldObject};
@@ -2,7 +2,13 @@
2
2
  * Promise validator - validates Promise values
3
3
  * Validates that the resolved value matches the inner schema
4
4
  */
5
- import { type ParseResult } from './base';
5
+ import { type ParseResult, type StandardSchemaV1Props } from './base.js';
6
+ type PromiseInner<T> = {
7
+ parse(value: unknown): T;
8
+ safeParse(value: unknown): ParseResult<T>;
9
+ parseAsync?(value: unknown): Promise<T>;
10
+ safeParseAsync?(value: unknown): Promise<ParseResult<T>>;
11
+ };
6
12
  /**
7
13
  * Promise validator - validates Promise<T> where T matches inner schema
8
14
  * Zod 4 API parity - allows async validation with proper type inference
@@ -14,15 +20,15 @@ import { type ParseResult } from './base';
14
20
  */
15
21
  export declare class VldPromise<T> {
16
22
  private readonly inner;
17
- constructor(inner: {
18
- parse(value: unknown): T;
19
- safeParse(value: unknown): ParseResult<T>;
20
- });
23
+ readonly validatorType: "promise";
24
+ constructor(inner: PromiseInner<T>);
25
+ get '~standard'(): StandardSchemaV1Props<unknown, T>;
21
26
  /**
22
27
  * Check if value is thenable (Promise-like)
23
28
  * Must be called BEFORE wrapping in Promise.resolve
24
29
  */
25
30
  private _isThenable;
31
+ unwrap(): PromiseInner<T>;
26
32
  /**
27
33
  * Parse and validate a Promise value asynchronously
28
34
  * @param value The Promise to validate
@@ -30,12 +36,14 @@ export declare class VldPromise<T> {
30
36
  * @throws {Error} If validation fails when Promise resolves
31
37
  */
32
38
  parse(value: unknown): Promise<T>;
39
+ parseAsync(value: unknown): Promise<T>;
33
40
  /**
34
41
  * Safely parse and validate a Promise value asynchronously
35
42
  * @param value The Promise to validate
36
43
  * @returns A Promise resolving to ParseResult containing the validated value
37
44
  */
38
45
  safeParse(value: unknown): Promise<ParseResult<T>>;
46
+ safeParseAsync(value: unknown): Promise<ParseResult<T>>;
39
47
  }
40
48
  /**
41
49
  * Create a Promise validator
@@ -46,8 +54,5 @@ export declare class VldPromise<T> {
46
54
  * const result = await promiseSchema.parse(Promise.resolve("hello"));
47
55
  * // result is string
48
56
  */
49
- export declare function promise<T>(inner: {
50
- parse(value: unknown): T;
51
- safeParse(value: unknown): ParseResult<T>;
52
- }): VldPromise<T>;
53
- //# sourceMappingURL=promise.d.ts.map
57
+ export declare function promise<T>(inner: PromiseInner<T>): VldPromise<T>;
58
+ export {};
@@ -0,0 +1 @@
1
+ import{VLD_VALIDATOR_TYPES as e}from"./base.js";class VldPromise{constructor(s){this.inner=s,this.validatorType=e.PROMISE}get"~standard"(){return{version:1,vendor:"vld",validate:async e=>{const s=await this.safeParseAsync(e);return s.success?{value:s.data}:{issues:[{message:s.error.message}]}},types:void 0}}_isThenable(e){return null!==e&&"function"==typeof e.then}unwrap(){return this.inner}async parse(e){if(!this._isThenable(e))throw new Error("Expected a Promise value");const s=await Promise.resolve(e);return this.inner.parseAsync?this.inner.parseAsync(s):this.inner.parse(s)}parseAsync(e){return this.parse(e)}async safeParse(e){if(!this._isThenable(e))return{success:!1,error:new Error("Expected a Promise value")};try{const s=await Promise.resolve(e);if(this.inner.safeParseAsync)return await this.inner.safeParseAsync(s);const r=this.inner.safeParse(s);return r.success?{success:!0,data:r.data}:r}catch(e){return{success:!1,error:e instanceof Error?e:new Error(String(e))}}}safeParseAsync(e){return this.safeParse(e)}}function s(e){return new VldPromise(e)}export{VldPromise,s as promise};
@@ -1,38 +1,50 @@
1
- import { VldBase, ParseResult } from './base';
1
+ import { VldBase, ParseResult } from './base.js';
2
2
  /**
3
3
  * Immutable record validator for key-value pairs
4
4
  * BUG-NEW-018 FIX: Uses comprehensive dangerous key protection
5
5
  */
6
- export declare class VldRecord<T> extends VldBase<unknown, Record<string, T>> {
6
+ export declare class VldRecord<T, K extends PropertyKey = string> extends VldBase<unknown, Record<K, T>> {
7
7
  protected readonly valueValidator: VldBase<unknown, T>;
8
+ private readonly keyValidator?;
8
9
  private readonly errorMessage?;
9
10
  /**
10
11
  * Private constructor to enforce immutability
11
12
  */
12
- protected constructor(valueValidator: VldBase<unknown, T>, errorMessage?: string | undefined);
13
+ protected constructor(valueValidator: VldBase<unknown, T>, keyValidator?: VldBase<unknown, K> | undefined, errorMessage?: string | undefined);
14
+ private readonly _simpleValueMode;
15
+ private readonly _simpleValue;
16
+ get valueSchema(): VldBase<unknown, T>;
17
+ get keySchema(): VldBase<unknown, K> | undefined;
13
18
  /**
14
19
  * Create a new record validator
15
20
  */
16
- static create<T>(valueValidator: VldBase<unknown, T>): VldRecord<T>;
21
+ static create<T, K extends PropertyKey = string>(valueValidator: VldBase<unknown, T>, keyValidator?: VldBase<unknown, K>): VldRecord<T, K>;
22
+ private getSimpleValueMode;
23
+ private getSimpleValueError;
17
24
  /**
18
25
  * Parse and validate a record value
19
26
  * BUG-NEW-018 FIX: Use comprehensive dangerous key protection
20
27
  */
21
- parse(value: unknown): Record<string, T>;
28
+ parse(value: unknown): Record<K, T>;
29
+ /**
30
+ * Parse a value that has already passed the record object type guard.
31
+ * @internal Used by object validators to avoid duplicate hot-path checks.
32
+ */
33
+ parseKnownRecord(obj: Record<string, unknown>): Record<K, T>;
34
+ private parseKeyedRecord;
22
35
  /**
23
36
  * Safely parse and validate a record value
24
37
  */
25
- safeParse(value: unknown): ParseResult<Record<string, T>>;
38
+ safeParse(value: unknown): ParseResult<Record<K, T>>;
26
39
  /**
27
40
  * Create a partial record variant (all keys optional)
28
41
  * Similar to v.object().partial() but for records
29
42
  */
30
- partial(): VldRecord<T | undefined>;
43
+ partial(): VldRecord<T | undefined, K>;
31
44
  /**
32
45
  * Create a loose record variant (allows extra keys)
33
46
  * Similar to v.object().passthrough() but for records
34
47
  * Note: Records already allow any keys, so this mainly affects error handling
35
48
  */
36
- loose(): VldBase<unknown, Record<string, T>>;
49
+ loose(): VldBase<unknown, Record<K, T>>;
37
50
  }
38
- //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{getMessages as t}from"../locales/runtime.js";import{i}from"../chunks/security-Dy24T8N7.js";import{V as o}from"../chunks/errors-core-Cqi4-9ew.js";function s(e){return new o([{code:"invalid_object",path:[],message:e}])}class VldRecord extends e{constructor(e,t,i){super(r.RECORD),this.valueValidator=e,this.keyValidator=t,this.errorMessage=i,this._simpleValueMode=this.getSimpleValueMode(e),this._simpleValue="literal"===this._simpleValueMode?e.literal:void 0}get valueSchema(){return this.valueValidator}get keySchema(){return this.keyValidator}static create(e,r){return new VldRecord(e,r)}getSimpleValueMode(e){if(!0===e.isSimple)switch(e.validatorType){case r.STRING:return"string";case r.NUMBER:return"number";case r.BOOLEAN:return"boolean";case r.BIGINT:return"bigint";case r.SYMBOL:return"symbol";case r.NULL:return"null";case r.UNDEFINED:case r.VOID:return"undefinedValue";case r.LITERAL:return"literal";case r.ANY:case r.UNKNOWN:return"passthrough";default:return}}getSimpleValueError(e){switch(this._simpleValueMode){case"string":return t().invalidString;case"number":return t().invalidNumber;case"boolean":return t().invalidBoolean;case"bigint":return t().invalidBigint;case"symbol":return t().invalidSymbol;case"null":return"Expected null, received "+typeof e;case"undefinedValue":return t().expectedUndefined;case"literal":return t().literalExpected(JSON.stringify(this._simpleValue),JSON.stringify(e));default:return t().invalidRecord}}parse(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this.errorMessage||t().invalidRecord);return this.parseKnownRecord(e)}parseKnownRecord(e){if(void 0!==this.keyValidator)return this.parseKeyedRecord(e);const r={},o=Object.keys(e),s=this._simpleValueMode;for(let a=0;a<o.length;a++){const n=o[a];if(i(n))continue;const l=e[n];if(void 0!==s)switch(s){case"string":if("string"!=typeof l)throw new Error(t().objectField(n,t().invalidString));r[n]=l;continue;case"number":if("number"!=typeof l||isNaN(l))throw new Error(t().objectField(n,t().invalidNumber));r[n]=l;continue;case"boolean":if("boolean"!=typeof l)throw new Error(t().objectField(n,t().invalidBoolean));r[n]=l;continue;case"bigint":if("bigint"!=typeof l)throw new Error(t().objectField(n,t().invalidBigint));r[n]=l;continue;case"symbol":if("symbol"!=typeof l)throw new Error(t().objectField(n,t().invalidSymbol));r[n]=l;continue;case"null":if(null!==l)throw new Error(t().objectField(n,this.getSimpleValueError(l)));r[n]=null;continue;case"undefinedValue":if(void 0!==l)throw new Error(t().objectField(n,t().expectedUndefined));r[n]=void 0;continue;case"literal":if(l!==this._simpleValue)throw new Error(t().objectField(n,this.getSimpleValueError(l)));r[n]=this._simpleValue;continue;case"passthrough":r[n]=l;continue}try{r[n]=this.valueValidator.parse(l)}catch(e){throw new Error(t().objectField(n,e.message))}}return r}parseKeyedRecord(e){const r={},s=Reflect.ownKeys(e);for(const a of s){if(!Object.prototype.propertyIsEnumerable.call(e,a))continue;if("string"==typeof a&&i(a))continue;const s=this.keyValidator.safeParse(a);if(!s.success)throw new o([{code:"invalid_key",path:[String(a)],message:s.error.message}]);if("string"!=typeof s.data&&"number"!=typeof s.data&&"symbol"!=typeof s.data)throw new o([{code:"invalid_key",path:[String(a)],message:"Record key transform must return a property key"}]);if("string"!=typeof s.data||!i(s.data))try{r[s.data]=this.valueValidator.parse(e[a])}catch(e){throw new Error(t().objectField(String(a),e.message))}}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return e instanceof o?{success:!1,error:e}:{success:!1,error:s(e.message)}}}partial(){const e=this.valueValidator.optional();return new VldRecord(e,this.keyValidator)}loose(){return new VldLooseRecord(this.valueValidator,this.keyValidator)}}class VldLooseRecord extends e{constructor(e,t){super(r.RECORD),this.valueValidator=e,this.keyValidator=t}get valueSchema(){return this.valueValidator}parse(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(t().invalidRecord);const r={},o=e;for(const e of Reflect.ownKeys(o)){if(!Object.prototype.propertyIsEnumerable.call(o,e))continue;if("string"==typeof e&&i(e))continue;const t=this.keyValidator?.safeParse(e);if(t&&!t.success)continue;const s=t?.data??e;if("string"!=typeof s&&"number"!=typeof s&&"symbol"!=typeof s)continue;if("string"==typeof s&&i(s))continue;const a=this.valueValidator.safeParse(o[e]);a.success&&(r[s]=a.data)}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:s(e.message)}}}partial(){const e=this.valueValidator.optional();return new VldLooseRecord(e,this.keyValidator)}loose(){return this}}export{VldRecord};
@@ -1,4 +1,4 @@
1
- import { VldBase, ParseResult } from './base';
1
+ import { VldBase, ParseResult } from './base.js';
2
2
  /**
3
3
  * Immutable Set validator
4
4
  */
@@ -9,17 +9,26 @@ export declare class VldSet<T> extends VldBase<unknown, Set<T>> {
9
9
  * Private constructor to enforce immutability
10
10
  */
11
11
  private constructor();
12
+ private readonly _simpleItemMode;
13
+ private readonly _simpleItemValue;
14
+ get itemSchema(): VldBase<unknown, T>;
12
15
  /**
13
16
  * Create a new Set validator
14
17
  */
15
18
  static create<T>(itemValidator: VldBase<unknown, T>): VldSet<T>;
19
+ private getSimpleItemMode;
20
+ private getSimpleItemError;
16
21
  /**
17
22
  * Parse and validate a Set value
18
23
  */
19
24
  parse(value: unknown): Set<T>;
25
+ /**
26
+ * Parse a value that has already passed the Set instance guard.
27
+ * @internal Used by object validators to avoid duplicate hot-path checks.
28
+ */
29
+ parseKnownSet(value: Set<unknown>): Set<T>;
20
30
  /**
21
31
  * Safely parse and validate a Set value
22
32
  */
23
33
  safeParse(value: unknown): ParseResult<Set<T>>;
24
34
  }
25
- //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{getMessages as t}from"../locales/runtime.js";import{V as i}from"../chunks/errors-core-Cqi4-9ew.js";class VldSet extends e{constructor(e,t){super(r.SET),this.itemValidator=e,this.errorMessage=t,this._simpleItemMode=this.getSimpleItemMode(e),this._simpleItemValue="literal"===this._simpleItemMode?e.literal:void 0}get itemSchema(){return this.itemValidator}static create(e){return new VldSet(e)}getSimpleItemMode(e){if(!0===e.isSimple)switch(e.validatorType){case r.STRING:return"string";case r.NUMBER:return"number";case r.BOOLEAN:return"boolean";case r.BIGINT:return"bigint";case r.SYMBOL:return"symbol";case r.NULL:return"null";case r.UNDEFINED:case r.VOID:return"undefinedValue";case r.LITERAL:return"literal";case r.ANY:case r.UNKNOWN:return"passthrough";default:return}}getSimpleItemError(e){switch(this._simpleItemMode){case"string":return t().invalidString;case"number":return t().invalidNumber;case"boolean":return t().invalidBoolean;case"bigint":return t().invalidBigint;case"symbol":return t().invalidSymbol;case"null":return"Expected null, received "+typeof e;case"undefinedValue":return t().expectedUndefined;case"literal":return t().literalExpected(JSON.stringify(this._simpleItemValue),JSON.stringify(e));default:return t().invalidSet}}parse(e){if(!(e instanceof Set))throw new Error(this.errorMessage||t().invalidSet);return this.parseKnownSet(e)}parseKnownSet(e){const r=new Set,t=this._simpleItemMode;if("string"===t){for(const t of e){if("string"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("number"===t){for(const t of e){if("number"!=typeof t||isNaN(t))throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("boolean"===t){for(const t of e){if("boolean"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("bigint"===t){for(const t of e){if("bigint"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("symbol"===t){for(const t of e){if("symbol"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("null"===t){for(const t of e){if(null!==t)throw new Error(this.getSimpleItemError(t));r.add(null)}return r}if("undefinedValue"===t){for(const t of e){if(void 0!==t)throw new Error(this.getSimpleItemError(t));r.add(void 0)}return r}if("literal"===t){for(const t of e){if(t!==this._simpleItemValue)throw new Error(this.getSimpleItemError(t));r.add(this._simpleItemValue)}return r}if("passthrough"===t){for(const t of e)r.add(t);return r}for(const t of e)try{r.add(this.itemValidator.parse(t))}catch(e){throw new Error(e.message)}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new i([{code:"invalid_type",path:[],message:r}]))}}var r}}export{VldSet};