@oxog/vld 1.5.0 → 2.0.2

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 (293) hide show
  1. package/CHANGELOG.md +168 -0
  2. package/LICENSE +20 -20
  3. package/README.md +558 -517
  4. package/dist/chunks/bigint-DgsCr2dC.js +1709 -0
  5. package/dist/chunks/bigint-DgsCr2dC.js.map +1 -0
  6. package/dist/{coercion/string.js → chunks/date-ODue_rtq.js} +271 -5
  7. package/dist/chunks/date-ODue_rtq.js.map +1 -0
  8. package/dist/chunks/index-BZqWZvVe.js +426 -0
  9. package/dist/chunks/index-BZqWZvVe.js.map +1 -0
  10. package/dist/chunks/index-CETyGkrv.js +894 -0
  11. package/dist/chunks/index-CETyGkrv.js.map +1 -0
  12. package/dist/chunks/json-o20GFhTh.js +2021 -0
  13. package/dist/chunks/json-o20GFhTh.js.map +1 -0
  14. package/dist/{validators/unknown.js → chunks/unknown-SLIH1VCf.js} +6 -3
  15. package/dist/chunks/unknown-SLIH1VCf.js.map +1 -0
  16. package/dist/cjs/errors.cjs +387 -0
  17. package/dist/cjs/errors.cjs.map +1 -0
  18. package/dist/cjs/index.cjs +9983 -0
  19. package/dist/cjs/index.cjs.map +1 -0
  20. package/dist/cjs/locales/index.cjs +2877 -0
  21. package/dist/cjs/locales/index.cjs.map +1 -0
  22. package/dist/cjs/locales/lazy.cjs +3169 -0
  23. package/dist/cjs/locales/lazy.cjs.map +1 -0
  24. package/dist/cjs/mini.cjs +7329 -0
  25. package/dist/cjs/mini.cjs.map +1 -0
  26. package/dist/codecs/index.js +4 -275
  27. package/dist/codecs/index.js.map +1 -1
  28. package/dist/coercion/index.d.ts +11 -0
  29. package/dist/coercion/index.d.ts.map +1 -0
  30. package/dist/coercion/{bigint.js → index.js} +7 -4
  31. package/dist/coercion/index.js.map +1 -0
  32. package/dist/compat/emitter.js +6 -4
  33. package/dist/compat/emitter.js.map +1 -1
  34. package/dist/compat/result.js +21 -19
  35. package/dist/compat/result.js.map +1 -1
  36. package/dist/errors.js +13 -10
  37. package/dist/errors.js.map +1 -1
  38. package/dist/index.js +225 -126
  39. package/dist/index.js.map +1 -1
  40. package/dist/kernel.js +10 -7
  41. package/dist/kernel.js.map +1 -1
  42. package/dist/locales/af.js +4 -2
  43. package/dist/locales/af.js.map +1 -1
  44. package/dist/locales/ar.js +4 -2
  45. package/dist/locales/ar.js.map +1 -1
  46. package/dist/locales/bn.js +4 -2
  47. package/dist/locales/bn.js.map +1 -1
  48. package/dist/locales/da.js +4 -2
  49. package/dist/locales/da.js.map +1 -1
  50. package/dist/locales/de.js +4 -2
  51. package/dist/locales/de.js.map +1 -1
  52. package/dist/locales/en.js +4 -2
  53. package/dist/locales/en.js.map +1 -1
  54. package/dist/locales/es-MX.js +4 -2
  55. package/dist/locales/es-MX.js.map +1 -1
  56. package/dist/locales/es.js +4 -2
  57. package/dist/locales/es.js.map +1 -1
  58. package/dist/locales/fi.js +4 -2
  59. package/dist/locales/fi.js.map +1 -1
  60. package/dist/locales/fr.js +4 -2
  61. package/dist/locales/fr.js.map +1 -1
  62. package/dist/locales/hi.js +4 -2
  63. package/dist/locales/hi.js.map +1 -1
  64. package/dist/locales/id.js +4 -2
  65. package/dist/locales/id.js.map +1 -1
  66. package/dist/locales/index.js +3 -91
  67. package/dist/locales/index.js.map +1 -1
  68. package/dist/locales/it.js +4 -2
  69. package/dist/locales/it.js.map +1 -1
  70. package/dist/locales/ja.js +4 -2
  71. package/dist/locales/ja.js.map +1 -1
  72. package/dist/locales/ko.js +4 -2
  73. package/dist/locales/ko.js.map +1 -1
  74. package/dist/locales/lazy.d.ts +111 -0
  75. package/dist/locales/lazy.d.ts.map +1 -0
  76. package/dist/locales/lazy.js +220 -0
  77. package/dist/locales/lazy.js.map +1 -0
  78. package/dist/locales/nl.js +4 -2
  79. package/dist/locales/nl.js.map +1 -1
  80. package/dist/locales/no.js +4 -2
  81. package/dist/locales/no.js.map +1 -1
  82. package/dist/locales/pl.js +4 -2
  83. package/dist/locales/pl.js.map +1 -1
  84. package/dist/locales/pt-BR.js +4 -2
  85. package/dist/locales/pt-BR.js.map +1 -1
  86. package/dist/locales/pt.js +4 -2
  87. package/dist/locales/pt.js.map +1 -1
  88. package/dist/locales/ru.js +4 -2
  89. package/dist/locales/ru.js.map +1 -1
  90. package/dist/locales/sv.js +4 -2
  91. package/dist/locales/sv.js.map +1 -1
  92. package/dist/locales/sw.js +4 -2
  93. package/dist/locales/sw.js.map +1 -1
  94. package/dist/locales/th.js +4 -2
  95. package/dist/locales/th.js.map +1 -1
  96. package/dist/locales/tr.js +4 -2
  97. package/dist/locales/tr.js.map +1 -1
  98. package/dist/locales/vi.js +4 -2
  99. package/dist/locales/vi.js.map +1 -1
  100. package/dist/locales/zh.js +4 -2
  101. package/dist/locales/zh.js.map +1 -1
  102. package/dist/mini.d.ts +182 -0
  103. package/dist/mini.d.ts.map +1 -0
  104. package/dist/mini.js +132 -0
  105. package/dist/mini.js.map +1 -0
  106. package/dist/pigment.js +8 -7
  107. package/dist/pigment.js.map +1 -1
  108. package/dist/validators/array.d.ts +5 -0
  109. package/dist/validators/array.d.ts.map +1 -1
  110. package/dist/validators/discriminated-union.d.ts.map +1 -1
  111. package/dist/validators/enum.d.ts +5 -1
  112. package/dist/validators/enum.d.ts.map +1 -1
  113. package/dist/validators/index.js +5 -45
  114. package/dist/validators/index.js.map +1 -1
  115. package/dist/validators/lazy.d.ts +8 -1
  116. package/dist/validators/lazy.d.ts.map +1 -1
  117. package/dist/validators/literal.d.ts +5 -1
  118. package/dist/validators/literal.d.ts.map +1 -1
  119. package/dist/validators/object.d.ts +30 -3
  120. package/dist/validators/object.d.ts.map +1 -1
  121. package/dist/validators/string.d.ts +12 -1
  122. package/dist/validators/string.d.ts.map +1 -1
  123. package/package.json +69 -11
  124. package/dist/cli/benchmark.d.ts +0 -15
  125. package/dist/cli/benchmark.d.ts.map +0 -1
  126. package/dist/cli/benchmark.js +0 -248
  127. package/dist/cli/benchmark.js.map +0 -1
  128. package/dist/cli/bin.js +0 -35
  129. package/dist/cli/bin.js.map +0 -1
  130. package/dist/cli/commands/benchmark.js +0 -204
  131. package/dist/cli/commands/benchmark.js.map +0 -1
  132. package/dist/cli/commands/validate.js +0 -157
  133. package/dist/cli/commands/validate.js.map +0 -1
  134. package/dist/cli/generate.d.ts +0 -14
  135. package/dist/cli/generate.d.ts.map +0 -1
  136. package/dist/cli/generate.js +0 -233
  137. package/dist/cli/generate.js.map +0 -1
  138. package/dist/cli/index.js +0 -182
  139. package/dist/cli/index.js.map +0 -1
  140. package/dist/cli/validate.d.ts +0 -15
  141. package/dist/cli/validate.d.ts.map +0 -1
  142. package/dist/cli/validate.js +0 -162
  143. package/dist/cli/validate.js.map +0 -1
  144. package/dist/coercion/bigint.js.map +0 -1
  145. package/dist/coercion/boolean.js +0 -59
  146. package/dist/coercion/boolean.js.map +0 -1
  147. package/dist/coercion/date.js +0 -52
  148. package/dist/coercion/date.js.map +0 -1
  149. package/dist/coercion/number.js +0 -160
  150. package/dist/coercion/number.js.map +0 -1
  151. package/dist/coercion/string.js.map +0 -1
  152. package/dist/compat/index.js +0 -14
  153. package/dist/compat/index.js.map +0 -1
  154. package/dist/events.js +0 -8
  155. package/dist/events.js.map +0 -1
  156. package/dist/guards.d.ts +0 -143
  157. package/dist/guards.d.ts.map +0 -1
  158. package/dist/guards.js +0 -238
  159. package/dist/guards.js.map +0 -1
  160. package/dist/index-new.d.ts.map +0 -1
  161. package/dist/locales/backup-en.js +0 -105
  162. package/dist/locales/backup-en.js.map +0 -1
  163. package/dist/locales/types.js +0 -2
  164. package/dist/locales/types.js.map +0 -1
  165. package/dist/locales.d.ts +0 -54
  166. package/dist/locales.d.ts.map +0 -1
  167. package/dist/locales.js +0 -732
  168. package/dist/locales.js.map +0 -1
  169. package/dist/logger.js +0 -184
  170. package/dist/logger.js.map +0 -1
  171. package/dist/plugins/codecs.d.ts +0 -17
  172. package/dist/plugins/codecs.d.ts.map +0 -1
  173. package/dist/plugins/codecs.js +0 -29
  174. package/dist/plugins/codecs.js.map +0 -1
  175. package/dist/plugins/coercion.d.ts +0 -13
  176. package/dist/plugins/coercion.d.ts.map +0 -1
  177. package/dist/plugins/coercion.js +0 -34
  178. package/dist/plugins/coercion.js.map +0 -1
  179. package/dist/plugins/core-validators.d.ts +0 -13
  180. package/dist/plugins/core-validators.d.ts.map +0 -1
  181. package/dist/plugins/core-validators.js +0 -96
  182. package/dist/plugins/core-validators.js.map +0 -1
  183. package/dist/plugins/index.js +0 -8
  184. package/dist/plugins/index.js.map +0 -1
  185. package/dist/plugins/kernel.d.ts +0 -29
  186. package/dist/plugins/kernel.d.ts.map +0 -1
  187. package/dist/plugins/kernel.js +0 -486
  188. package/dist/plugins/kernel.js.map +0 -1
  189. package/dist/plugins/types.js +0 -8
  190. package/dist/plugins/types.js.map +0 -1
  191. package/dist/style.d.ts +0 -123
  192. package/dist/style.d.ts.map +0 -1
  193. package/dist/style.js +0 -369
  194. package/dist/style.js.map +0 -1
  195. package/dist/utils/codec-utils.js +0 -229
  196. package/dist/utils/codec-utils.js.map +0 -1
  197. package/dist/utils/deep-merge.js +0 -76
  198. package/dist/utils/deep-merge.js.map +0 -1
  199. package/dist/utils/ip-validation.js +0 -98
  200. package/dist/utils/ip-validation.js.map +0 -1
  201. package/dist/utils/security.js +0 -61
  202. package/dist/utils/security.js.map +0 -1
  203. package/dist/validators/any.js +0 -25
  204. package/dist/validators/any.js.map +0 -1
  205. package/dist/validators/array.js +0 -190
  206. package/dist/validators/array.js.map +0 -1
  207. package/dist/validators/base.js +0 -499
  208. package/dist/validators/base.js.map +0 -1
  209. package/dist/validators/base64.js +0 -65
  210. package/dist/validators/base64.js.map +0 -1
  211. package/dist/validators/bigint.js +0 -142
  212. package/dist/validators/bigint.js.map +0 -1
  213. package/dist/validators/boolean.js +0 -114
  214. package/dist/validators/boolean.js.map +0 -1
  215. package/dist/validators/codec.js +0 -182
  216. package/dist/validators/codec.js.map +0 -1
  217. package/dist/validators/custom.js +0 -50
  218. package/dist/validators/custom.js.map +0 -1
  219. package/dist/validators/date.js +0 -227
  220. package/dist/validators/date.js.map +0 -1
  221. package/dist/validators/discriminated-union.js +0 -98
  222. package/dist/validators/discriminated-union.js.map +0 -1
  223. package/dist/validators/enum.js +0 -82
  224. package/dist/validators/enum.js.map +0 -1
  225. package/dist/validators/file.js +0 -114
  226. package/dist/validators/file.js.map +0 -1
  227. package/dist/validators/function.js +0 -45
  228. package/dist/validators/function.js.map +0 -1
  229. package/dist/validators/hex.js +0 -62
  230. package/dist/validators/hex.js.map +0 -1
  231. package/dist/validators/intersection.js +0 -64
  232. package/dist/validators/intersection.js.map +0 -1
  233. package/dist/validators/json.js +0 -64
  234. package/dist/validators/json.js.map +0 -1
  235. package/dist/validators/lazy.js +0 -42
  236. package/dist/validators/lazy.js.map +0 -1
  237. package/dist/validators/literal.js +0 -45
  238. package/dist/validators/literal.js.map +0 -1
  239. package/dist/validators/map.js +0 -54
  240. package/dist/validators/map.js.map +0 -1
  241. package/dist/validators/nan.js +0 -32
  242. package/dist/validators/nan.js.map +0 -1
  243. package/dist/validators/never.js +0 -29
  244. package/dist/validators/never.js.map +0 -1
  245. package/dist/validators/null.js +0 -31
  246. package/dist/validators/null.js.map +0 -1
  247. package/dist/validators/number.js +0 -225
  248. package/dist/validators/number.js.map +0 -1
  249. package/dist/validators/object-optimized.d.ts +0 -23
  250. package/dist/validators/object-optimized.d.ts.map +0 -1
  251. package/dist/validators/object-optimized.js +0 -179
  252. package/dist/validators/object-optimized.js.map +0 -1
  253. package/dist/validators/object-ultra.d.ts +0 -34
  254. package/dist/validators/object-ultra.d.ts.map +0 -1
  255. package/dist/validators/object-ultra.js +0 -175
  256. package/dist/validators/object-ultra.js.map +0 -1
  257. package/dist/validators/object.js +0 -458
  258. package/dist/validators/object.js.map +0 -1
  259. package/dist/validators/record.js +0 -128
  260. package/dist/validators/record.js.map +0 -1
  261. package/dist/validators/set.js +0 -51
  262. package/dist/validators/set.js.map +0 -1
  263. package/dist/validators/string-bool.js +0 -127
  264. package/dist/validators/string-bool.js.map +0 -1
  265. package/dist/validators/string-formats.js +0 -120
  266. package/dist/validators/string-formats.js.map +0 -1
  267. package/dist/validators/string-ultra.d.ts +0 -49
  268. package/dist/validators/string-ultra.d.ts.map +0 -1
  269. package/dist/validators/string-ultra.js +0 -217
  270. package/dist/validators/string-ultra.js.map +0 -1
  271. package/dist/validators/string.js +0 -253
  272. package/dist/validators/string.js.map +0 -1
  273. package/dist/validators/symbol.js +0 -42
  274. package/dist/validators/symbol.js.map +0 -1
  275. package/dist/validators/template-literal.js +0 -102
  276. package/dist/validators/template-literal.js.map +0 -1
  277. package/dist/validators/tuple.js +0 -55
  278. package/dist/validators/tuple.js.map +0 -1
  279. package/dist/validators/uint8array.js +0 -98
  280. package/dist/validators/uint8array.js.map +0 -1
  281. package/dist/validators/undefined.js +0 -31
  282. package/dist/validators/undefined.js.map +0 -1
  283. package/dist/validators/union-optimized.d.ts +0 -15
  284. package/dist/validators/union-optimized.d.ts.map +0 -1
  285. package/dist/validators/union-optimized.js +0 -92
  286. package/dist/validators/union-optimized.js.map +0 -1
  287. package/dist/validators/union.js +0 -126
  288. package/dist/validators/union.js.map +0 -1
  289. package/dist/validators/unknown.js.map +0 -1
  290. package/dist/validators/void.js +0 -35
  291. package/dist/validators/void.js.map +0 -1
  292. package/dist/validators/xor.js +0 -64
  293. package/dist/validators/xor.js.map +0 -1
@@ -1,142 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { getMessages } from '../locales/index.js';
3
- /**
4
- * Immutable bigint validator
5
- */
6
- export class VldBigInt extends VldBase {
7
- /**
8
- * Protected constructor to allow extension while maintaining immutability
9
- */
10
- constructor(config) {
11
- super();
12
- this.config = {
13
- checks: config?.checks || [],
14
- errorMessage: config?.errorMessage
15
- };
16
- }
17
- /**
18
- * Create a new bigint validator
19
- */
20
- static create() {
21
- return new VldBigInt();
22
- }
23
- /**
24
- * Parse and validate a bigint value
25
- */
26
- parse(value) {
27
- if (typeof value !== 'bigint') {
28
- throw new Error(this.config.errorMessage || getMessages().invalidBigint);
29
- }
30
- // Apply all checks
31
- for (const check of this.config.checks) {
32
- if (!check(value)) {
33
- throw new Error(this.config.errorMessage || getMessages().invalidBigint);
34
- }
35
- }
36
- return value;
37
- }
38
- /**
39
- * Safely parse and validate a bigint value
40
- */
41
- safeParse(value) {
42
- try {
43
- return { success: true, data: this.parse(value) };
44
- }
45
- catch (error) {
46
- return { success: false, error: error };
47
- }
48
- }
49
- /**
50
- * Create a new validator with minimum value constraint
51
- */
52
- min(value, message) {
53
- return new VldBigInt({
54
- checks: [...this.config.checks, (v) => v >= value],
55
- errorMessage: message || `BigInt must be at least ${value}`
56
- });
57
- }
58
- /**
59
- * Create a new validator with maximum value constraint
60
- */
61
- max(value, message) {
62
- return new VldBigInt({
63
- checks: [...this.config.checks, (v) => v <= value],
64
- errorMessage: message || `BigInt must be at most ${value}`
65
- });
66
- }
67
- /**
68
- * Create a new validator that checks for positive values
69
- */
70
- positive(message) {
71
- return new VldBigInt({
72
- checks: [...this.config.checks, (v) => v > 0n],
73
- errorMessage: message || 'BigInt must be positive'
74
- });
75
- }
76
- /**
77
- * Create a new validator that checks for negative values
78
- */
79
- negative(message) {
80
- return new VldBigInt({
81
- checks: [...this.config.checks, (v) => v < 0n],
82
- errorMessage: message || 'BigInt must be negative'
83
- });
84
- }
85
- /**
86
- * Create a new validator that checks for non-negative values
87
- */
88
- nonnegative(message) {
89
- return new VldBigInt({
90
- checks: [...this.config.checks, (v) => v >= 0n],
91
- errorMessage: message || 'BigInt must be non-negative'
92
- });
93
- }
94
- /**
95
- * Create a new validator that checks for non-positive values
96
- */
97
- nonpositive(message) {
98
- return new VldBigInt({
99
- checks: [...this.config.checks, (v) => v <= 0n],
100
- errorMessage: message || 'BigInt must be non-positive'
101
- });
102
- }
103
- /**
104
- * Create a new validator with strict greater than constraint
105
- * Zod 4 API parity - strictly greater than (not equal to)
106
- */
107
- gt(value, message) {
108
- const compareValue = typeof value === 'bigint' ? value : BigInt(value);
109
- return new VldBigInt({
110
- checks: [...this.config.checks, (v) => v > compareValue],
111
- errorMessage: message || `BigInt must be greater than ${compareValue}`
112
- });
113
- }
114
- /**
115
- * Create a new validator with strict less than constraint
116
- * Zod 4 API parity - strictly less than (not equal to)
117
- */
118
- lt(value, message) {
119
- const compareValue = typeof value === 'bigint' ? value : BigInt(value);
120
- return new VldBigInt({
121
- checks: [...this.config.checks, (v) => v < compareValue],
122
- errorMessage: message || `BigInt must be less than ${compareValue}`
123
- });
124
- }
125
- /**
126
- * Create a new validator with greater than or equal constraint
127
- * Zod 4 API parity - alias for min()
128
- */
129
- gte(value, message) {
130
- const compareValue = typeof value === 'bigint' ? value : BigInt(value);
131
- return this.min(compareValue, message);
132
- }
133
- /**
134
- * Create a new validator with less than or equal constraint
135
- * Zod 4 API parity - alias for max()
136
- */
137
- lte(value, message) {
138
- const compareValue = typeof value === 'bigint' ? value : BigInt(value);
139
- return this.max(compareValue, message);
140
- }
141
- }
142
- //# sourceMappingURL=bigint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Type for bigint validation check functions\r\n */\r\ntype BigIntCheck = (value: bigint) => boolean;\r\n\r\n/**\r\n * Configuration for bigint validator\r\n */\r\ninterface BigIntValidatorConfig {\r\n readonly checks: ReadonlyArray<BigIntCheck>;\r\n readonly errorMessage?: string;\r\n}\r\n\r\n/**\r\n * Immutable bigint validator\r\n */\r\nexport class VldBigInt extends VldBase<bigint, bigint> {\r\n protected readonly config: BigIntValidatorConfig;\r\n \r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(config?: Partial<BigIntValidatorConfig>) {\r\n super();\r\n this.config = {\r\n checks: config?.checks || [],\r\n errorMessage: config?.errorMessage\r\n };\r\n }\r\n \r\n /**\r\n * Create a new bigint validator\r\n */\r\n static create(): VldBigInt {\r\n return new VldBigInt();\r\n }\r\n \r\n /**\r\n * Parse and validate a bigint value\r\n */\r\n parse(value: unknown): bigint {\r\n if (typeof value !== 'bigint') {\r\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\r\n }\r\n \r\n // Apply all checks\r\n for (const check of this.config.checks) {\r\n if (!check(value)) {\r\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\r\n }\r\n }\r\n \r\n return value;\r\n }\r\n \r\n /**\r\n * Safely parse and validate a bigint value\r\n */\r\n safeParse(value: unknown): ParseResult<bigint> {\r\n try {\r\n return { success: true, data: this.parse(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n }\r\n \r\n /**\r\n * Create a new validator with minimum value constraint\r\n */\r\n min(value: bigint, message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v >= value],\r\n errorMessage: message || `BigInt must be at least ${value}`\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator with maximum value constraint\r\n */\r\n max(value: bigint, message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v <= value],\r\n errorMessage: message || `BigInt must be at most ${value}`\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for positive values\r\n */\r\n positive(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v > 0n],\r\n errorMessage: message || 'BigInt must be positive'\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for negative values\r\n */\r\n negative(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v < 0n],\r\n errorMessage: message || 'BigInt must be negative'\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for non-negative values\r\n */\r\n nonnegative(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v >= 0n],\r\n errorMessage: message || 'BigInt must be non-negative'\r\n });\r\n }\r\n \r\n /**\r\n * Create a new validator that checks for non-positive values\r\n */\r\n nonpositive(message?: string): VldBigInt {\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v <= 0n],\r\n errorMessage: message || 'BigInt must be non-positive'\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict greater than constraint\r\n * Zod 4 API parity - strictly greater than (not equal to)\r\n */\r\n gt(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v > compareValue],\r\n errorMessage: message || `BigInt must be greater than ${compareValue}`\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with strict less than constraint\r\n * Zod 4 API parity - strictly less than (not equal to)\r\n */\r\n lt(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return new VldBigInt({\r\n checks: [...this.config.checks, (v: bigint) => v < compareValue],\r\n errorMessage: message || `BigInt must be less than ${compareValue}`\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with greater than or equal constraint\r\n * Zod 4 API parity - alias for min()\r\n */\r\n gte(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return this.min(compareValue, message);\r\n }\r\n\r\n /**\r\n * Create a new validator with less than or equal constraint\r\n * Zod 4 API parity - alias for max()\r\n */\r\n lte(value: bigint | number, message?: string): VldBigInt {\r\n const compareValue = typeof value === 'bigint' ? value : BigInt(value);\r\n return this.max(compareValue, message);\r\n }\r\n}"]}
@@ -1,114 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { getMessages } from '../locales/index.js';
3
- /**
4
- * Immutable boolean validator
5
- */
6
- export class VldBoolean extends VldBase {
7
- /**
8
- * Protected constructor to allow extension while maintaining immutability
9
- */
10
- constructor(errorMessage) {
11
- super();
12
- this.errorMessage = errorMessage;
13
- }
14
- /**
15
- * Create a new boolean validator
16
- */
17
- static create() {
18
- return new VldBoolean();
19
- }
20
- /**
21
- * Parse and validate a boolean value
22
- */
23
- parse(value) {
24
- if (typeof value !== 'boolean') {
25
- throw new Error(this.errorMessage || getMessages().invalidBoolean);
26
- }
27
- return value;
28
- }
29
- /**
30
- * Safely parse and validate a boolean value
31
- */
32
- safeParse(value) {
33
- if (typeof value === 'boolean') {
34
- return { success: true, data: value };
35
- }
36
- return {
37
- success: false,
38
- error: new Error(this.errorMessage || getMessages().invalidBoolean)
39
- };
40
- }
41
- /**
42
- * Create a new validator that only accepts true
43
- */
44
- true(message) {
45
- return new VldTrue(message || 'Value must be true');
46
- }
47
- /**
48
- * Create a new validator that only accepts false
49
- */
50
- false(message) {
51
- return new VldFalse(message || 'Value must be false');
52
- }
53
- }
54
- /**
55
- * Validator that only accepts true
56
- */
57
- class VldTrue extends VldBoolean {
58
- constructor(message) {
59
- super(message);
60
- this.message = message;
61
- }
62
- parse(value) {
63
- const result = super.parse(value);
64
- if (result !== true) {
65
- throw new Error(this.message);
66
- }
67
- return result;
68
- }
69
- // BUG-003 FIX: Override safeParse to ensure true validation
70
- safeParse(value) {
71
- const result = super.safeParse(value);
72
- if (!result.success) {
73
- return result;
74
- }
75
- if (result.data !== true) {
76
- return {
77
- success: false,
78
- error: new Error(this.message)
79
- };
80
- }
81
- return result;
82
- }
83
- }
84
- /**
85
- * Validator that only accepts false
86
- */
87
- class VldFalse extends VldBoolean {
88
- constructor(message) {
89
- super(message);
90
- this.message = message;
91
- }
92
- parse(value) {
93
- const result = super.parse(value);
94
- if (result !== false) {
95
- throw new Error(this.message);
96
- }
97
- return result;
98
- }
99
- // BUG-003 FIX: Override safeParse to ensure false validation
100
- safeParse(value) {
101
- const result = super.safeParse(value);
102
- if (!result.success) {
103
- return result;
104
- }
105
- if (result.data !== false) {
106
- return {
107
- success: false,
108
- error: new Error(this.message)
109
- };
110
- }
111
- return result;
112
- }
113
- }
114
- //# sourceMappingURL=boolean.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/validators/boolean.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Immutable boolean validator\r\n */\r\nexport class VldBoolean extends VldBase<boolean, boolean> {\r\n private readonly errorMessage?: string;\r\n \r\n /**\r\n * Protected constructor to allow extension while maintaining immutability\r\n */\r\n protected constructor(errorMessage?: string) {\r\n super();\r\n this.errorMessage = errorMessage;\r\n }\r\n \r\n /**\r\n * Create a new boolean validator\r\n */\r\n static create(): VldBoolean {\r\n return new VldBoolean();\r\n }\r\n \r\n /**\r\n * Parse and validate a boolean value\r\n */\r\n parse(value: unknown): boolean {\r\n if (typeof value !== 'boolean') {\r\n throw new Error(this.errorMessage || getMessages().invalidBoolean);\r\n }\r\n return value;\r\n }\r\n \r\n /**\r\n * Safely parse and validate a boolean value\r\n */\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n if (typeof value === 'boolean') {\r\n return { success: true, data: value };\r\n }\r\n return { \r\n success: false, \r\n error: new Error(this.errorMessage || getMessages().invalidBoolean) \r\n };\r\n }\r\n \r\n /**\r\n * Create a new validator that only accepts true\r\n */\r\n true(message?: string): VldBoolean {\r\n return new VldTrue(message || 'Value must be true');\r\n }\r\n \r\n /**\r\n * Create a new validator that only accepts false\r\n */\r\n false(message?: string): VldBoolean {\r\n return new VldFalse(message || 'Value must be false');\r\n }\r\n}\r\n\r\n/**\r\n * Validator that only accepts true\r\n */\r\nclass VldTrue extends VldBoolean {\r\n constructor(private readonly message: string) {\r\n super(message);\r\n }\r\n\r\n parse(value: unknown): boolean {\r\n const result = super.parse(value);\r\n if (result !== true) {\r\n throw new Error(this.message);\r\n }\r\n return result;\r\n }\r\n\r\n // BUG-003 FIX: Override safeParse to ensure true validation\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n const result = super.safeParse(value);\r\n if (!result.success) {\r\n return result;\r\n }\r\n if (result.data !== true) {\r\n return {\r\n success: false,\r\n error: new Error(this.message)\r\n };\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * Validator that only accepts false\r\n */\r\nclass VldFalse extends VldBoolean {\r\n constructor(private readonly message: string) {\r\n super(message);\r\n }\r\n\r\n parse(value: unknown): boolean {\r\n const result = super.parse(value);\r\n if (result !== false) {\r\n throw new Error(this.message);\r\n }\r\n return result;\r\n }\r\n\r\n // BUG-003 FIX: Override safeParse to ensure false validation\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n const result = super.safeParse(value);\r\n if (!result.success) {\r\n return result;\r\n }\r\n if (result.data !== false) {\r\n return {\r\n success: false,\r\n error: new Error(this.message)\r\n };\r\n }\r\n return result;\r\n }\r\n}"]}
@@ -1,182 +0,0 @@
1
- import { VldBase } from './base.js';
2
- import { VldError, createIssue } from '../errors.js';
3
- import { getMessages } from '../locales/index.js';
4
- /**
5
- * Codec validator for bidirectional transformations
6
- * Enables converting between different data representations
7
- */
8
- export class VldCodec extends VldBase {
9
- constructor(inputValidator, outputValidator, codecTransform) {
10
- super();
11
- this.inputValidator = inputValidator;
12
- this.outputValidator = outputValidator;
13
- this.codecTransform = codecTransform;
14
- }
15
- /**
16
- * Parse (decode) a value from input to output format
17
- */
18
- parse(value) {
19
- const result = this.safeParse(value);
20
- if (!result.success) {
21
- throw result.error;
22
- }
23
- return result.data;
24
- }
25
- /**
26
- * Safely parse (decode) a value from input to output format
27
- */
28
- safeParse(value) {
29
- // First validate the input
30
- const inputResult = this.inputValidator.safeParse(value);
31
- if (!inputResult.success) {
32
- return inputResult;
33
- }
34
- try {
35
- // Then decode to output
36
- const decoded = this.codecTransform.decode(inputResult.data);
37
- // Handle async decode
38
- if (decoded instanceof Promise) {
39
- throw new VldError([
40
- createIssue('custom', [], getMessages().codecAsyncNotSupported)
41
- ]);
42
- }
43
- // Validate the decoded output
44
- return this.outputValidator.safeParse(decoded);
45
- }
46
- catch (error) {
47
- if (error instanceof VldError) {
48
- return { success: false, error };
49
- }
50
- return {
51
- success: false,
52
- error: new VldError([
53
- createIssue('custom', [], getMessages().codecDecodeFailed)
54
- ])
55
- };
56
- }
57
- }
58
- /**
59
- * Encode a value from output back to input format
60
- */
61
- encode(value) {
62
- const result = this.safeEncode(value);
63
- if (!result.success) {
64
- throw result.error;
65
- }
66
- return result.data;
67
- }
68
- /**
69
- * Safely encode a value from output back to input format
70
- */
71
- safeEncode(value) {
72
- // First validate the output
73
- const outputResult = this.outputValidator.safeParse(value);
74
- if (!outputResult.success) {
75
- return outputResult;
76
- }
77
- try {
78
- // Then encode to input
79
- const encoded = this.codecTransform.encode(outputResult.data);
80
- // Handle async encode
81
- if (encoded instanceof Promise) {
82
- throw new VldError([
83
- createIssue('custom', [], getMessages().codecAsyncNotSupported)
84
- ]);
85
- }
86
- // Validate the encoded input
87
- return this.inputValidator.safeParse(encoded);
88
- }
89
- catch (error) {
90
- if (error instanceof VldError) {
91
- return { success: false, error };
92
- }
93
- return {
94
- success: false,
95
- error: new VldError([
96
- createIssue('custom', [], getMessages().codecEncodeFailed)
97
- ])
98
- };
99
- }
100
- }
101
- /**
102
- * Async version of parse (decode)
103
- */
104
- async parseAsync(value) {
105
- const result = await this.safeParseAsync(value);
106
- if (!result.success) {
107
- throw result.error;
108
- }
109
- return result.data;
110
- }
111
- /**
112
- * Async version of safeParse (decode)
113
- */
114
- async safeParseAsync(value) {
115
- // First validate the input
116
- const inputResult = this.inputValidator.safeParse(value);
117
- if (!inputResult.success) {
118
- return inputResult;
119
- }
120
- try {
121
- // Then decode to output (supports async)
122
- const decoded = await this.codecTransform.decode(inputResult.data);
123
- // Validate the decoded output
124
- return this.outputValidator.safeParse(decoded);
125
- }
126
- catch (error) {
127
- if (error instanceof VldError) {
128
- return { success: false, error };
129
- }
130
- return {
131
- success: false,
132
- error: new VldError([
133
- createIssue('custom', [], getMessages().codecDecodeFailed)
134
- ])
135
- };
136
- }
137
- }
138
- /**
139
- * Async version of encode
140
- */
141
- async encodeAsync(value) {
142
- const result = await this.safeEncodeAsync(value);
143
- if (!result.success) {
144
- throw result.error;
145
- }
146
- return result.data;
147
- }
148
- /**
149
- * Async version of safeEncode
150
- */
151
- async safeEncodeAsync(value) {
152
- // First validate the output
153
- const outputResult = this.outputValidator.safeParse(value);
154
- if (!outputResult.success) {
155
- return outputResult;
156
- }
157
- try {
158
- // Then encode to input (supports async)
159
- const encoded = await this.codecTransform.encode(outputResult.data);
160
- // Validate the encoded input
161
- return this.inputValidator.safeParse(encoded);
162
- }
163
- catch (error) {
164
- if (error instanceof VldError) {
165
- return { success: false, error };
166
- }
167
- return {
168
- success: false,
169
- error: new VldError([
170
- createIssue('custom', [], getMessages().codecEncodeFailed)
171
- ])
172
- };
173
- }
174
- }
175
- /**
176
- * Create a codec validator
177
- */
178
- static create(inputValidator, outputValidator, codecTransform) {
179
- return new VldCodec(inputValidator, outputValidator, codecTransform);
180
- }
181
- }
182
- //# sourceMappingURL=codec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/validators/codec.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { VldError, createIssue } from '../errors';\nimport { getMessages } from '../locales';\n\n/**\n * Codec transform functions for bidirectional transformations\n */\nexport interface CodecTransform<TInput, TOutput> {\n decode: (value: TInput) => TOutput | Promise<TOutput>;\n encode: (value: TOutput) => TInput | Promise<TInput>;\n}\n\n/**\n * Codec validator for bidirectional transformations\n * Enables converting between different data representations\n */\nexport class VldCodec<TInput, TOutput> extends VldBase<TInput, TOutput> {\n private readonly inputValidator: VldBase<unknown, TInput>;\n private readonly outputValidator: VldBase<unknown, TOutput>;\n private readonly codecTransform: CodecTransform<TInput, TOutput>;\n \n constructor(\n inputValidator: VldBase<unknown, TInput>,\n outputValidator: VldBase<unknown, TOutput>,\n codecTransform: CodecTransform<TInput, TOutput>\n ) {\n super();\n this.inputValidator = inputValidator;\n this.outputValidator = outputValidator;\n this.codecTransform = codecTransform;\n }\n \n /**\n * Parse (decode) a value from input to output format\n */\n parse(value: unknown): TOutput {\n const result = this.safeParse(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Safely parse (decode) a value from input to output format\n */\n safeParse(value: unknown): ParseResult<TOutput> {\n // First validate the input\n const inputResult = this.inputValidator.safeParse(value);\n if (!inputResult.success) {\n return inputResult as ParseResult<TOutput>;\n }\n \n try {\n // Then decode to output\n const decoded = this.codecTransform.decode(inputResult.data);\n \n // Handle async decode\n if (decoded instanceof Promise) {\n throw new VldError([\n createIssue('custom', [], getMessages().codecAsyncNotSupported)\n ]);\n }\n \n // Validate the decoded output\n return this.outputValidator.safeParse(decoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecDecodeFailed)\n ])\n };\n }\n }\n \n /**\n * Encode a value from output back to input format\n */\n encode(value: unknown): TInput {\n const result = this.safeEncode(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Safely encode a value from output back to input format\n */\n safeEncode(value: unknown): ParseResult<TInput> {\n // First validate the output\n const outputResult = this.outputValidator.safeParse(value);\n if (!outputResult.success) {\n return outputResult as ParseResult<TInput>;\n }\n \n try {\n // Then encode to input\n const encoded = this.codecTransform.encode(outputResult.data);\n \n // Handle async encode\n if (encoded instanceof Promise) {\n throw new VldError([\n createIssue('custom', [], getMessages().codecAsyncNotSupported)\n ]);\n }\n \n // Validate the encoded input\n return this.inputValidator.safeParse(encoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecEncodeFailed)\n ])\n };\n }\n }\n \n /**\n * Async version of parse (decode)\n */\n async parseAsync(value: unknown): Promise<TOutput> {\n const result = await this.safeParseAsync(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Async version of safeParse (decode)\n */\n async safeParseAsync(value: unknown): Promise<ParseResult<TOutput>> {\n // First validate the input\n const inputResult = this.inputValidator.safeParse(value);\n if (!inputResult.success) {\n return inputResult as ParseResult<TOutput>;\n }\n \n try {\n // Then decode to output (supports async)\n const decoded = await this.codecTransform.decode(inputResult.data);\n \n // Validate the decoded output\n return this.outputValidator.safeParse(decoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecDecodeFailed)\n ])\n };\n }\n }\n \n /**\n * Async version of encode\n */\n async encodeAsync(value: unknown): Promise<TInput> {\n const result = await this.safeEncodeAsync(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Async version of safeEncode\n */\n async safeEncodeAsync(value: unknown): Promise<ParseResult<TInput>> {\n // First validate the output\n const outputResult = this.outputValidator.safeParse(value);\n if (!outputResult.success) {\n return outputResult as ParseResult<TInput>;\n }\n \n try {\n // Then encode to input (supports async)\n const encoded = await this.codecTransform.encode(outputResult.data);\n \n // Validate the encoded input\n return this.inputValidator.safeParse(encoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecEncodeFailed)\n ])\n };\n }\n }\n \n /**\n * Create a codec validator\n */\n static create<TInput, TOutput>(\n inputValidator: VldBase<unknown, TInput>,\n outputValidator: VldBase<unknown, TOutput>,\n codecTransform: CodecTransform<TInput, TOutput>\n ): VldCodec<TInput, TOutput> {\n return new VldCodec(inputValidator, outputValidator, codecTransform);\n }\n}"]}
@@ -1,50 +0,0 @@
1
- import { VldBase } from './base.js';
2
- /**
3
- * Immutable custom validator for user-defined validation logic
4
- * Provides type safety while allowing complete control over validation
5
- */
6
- export class VldCustom extends VldBase {
7
- constructor(options) {
8
- super();
9
- this._parseFn = options.parse;
10
- this._safeParseFn = options.safeParse || ((value) => {
11
- try {
12
- return { success: true, data: this._parseFn(value) };
13
- }
14
- catch (error) {
15
- return { success: false, error: error };
16
- }
17
- });
18
- }
19
- /**
20
- * Create a new custom validator
21
- */
22
- static create(options) {
23
- return new VldCustom(options);
24
- }
25
- /**
26
- * Parse and validate using the custom parse function
27
- */
28
- parse(value) {
29
- return this._parseFn(value);
30
- }
31
- /**
32
- * Safely parse using the custom safeParse function or default implementation
33
- */
34
- safeParse(value) {
35
- return this._safeParseFn(value);
36
- }
37
- }
38
- /**
39
- * Helper function to create custom validators
40
- * Usage: v.custom<number>({
41
- * parse: (value) => {
42
- * if (typeof value !== 'string') throw new Error('Expected string');
43
- * return parseInt(value, 10);
44
- * }
45
- * })
46
- */
47
- export function custom(options) {
48
- return VldCustom.create(options);
49
- }
50
- //# sourceMappingURL=custom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/validators/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAkB9C;;;GAGG;AACH,MAAM,OAAO,SAA6B,SAAQ,OAAyB;IAIzE,YAAoB,OAAwC;QAC1D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,KAAc,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,OAAwC;QAExC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CACpB,OAAwC;IAExC,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { VldBase, ParseResult } from './base';\r\n\r\n/**\r\n * Type-safe custom validator options\r\n */\r\nexport interface CustomValidatorOptions<TOutput> {\r\n /**\r\n * Parse function that validates and transforms input\r\n */\r\n parse: (value: unknown) => TOutput;\r\n\r\n /**\r\n * Optional safeParse implementation\r\n * If not provided, will use try-catch around parse()\r\n */\r\n safeParse?: (value: unknown) => ParseResult<TOutput>;\r\n}\r\n\r\n/**\r\n * Immutable custom validator for user-defined validation logic\r\n * Provides type safety while allowing complete control over validation\r\n */\r\nexport class VldCustom<TOutput = unknown> extends VldBase<unknown, TOutput> {\r\n private readonly _parseFn: (value: unknown) => TOutput;\r\n private readonly _safeParseFn: (value: unknown) => ParseResult<TOutput>;\r\n\r\n private constructor(options: CustomValidatorOptions<TOutput>) {\r\n super();\r\n this._parseFn = options.parse;\r\n this._safeParseFn = options.safeParse || ((value: unknown) => {\r\n try {\r\n return { success: true, data: this._parseFn(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Create a new custom validator\r\n */\r\n static create<TOutput>(\r\n options: CustomValidatorOptions<TOutput>\r\n ): VldCustom<TOutput> {\r\n return new VldCustom(options);\r\n }\r\n\r\n /**\r\n * Parse and validate using the custom parse function\r\n */\r\n parse(value: unknown): TOutput {\r\n return this._parseFn(value);\r\n }\r\n\r\n /**\r\n * Safely parse using the custom safeParse function or default implementation\r\n */\r\n safeParse(value: unknown): ParseResult<TOutput> {\r\n return this._safeParseFn(value);\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create custom validators\r\n * Usage: v.custom<number>({\r\n * parse: (value) => {\r\n * if (typeof value !== 'string') throw new Error('Expected string');\r\n * return parseInt(value, 10);\r\n * }\r\n * })\r\n */\r\nexport function custom<TOutput = unknown>(\r\n options: CustomValidatorOptions<TOutput>\r\n): VldCustom<TOutput> {\r\n return VldCustom.create(options);\r\n}\r\n"]}