@oxog/vld 1.5.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +558 -517
  3. package/dist/chunks/bigint-ZKkWLdmi.js +1628 -0
  4. package/dist/chunks/bigint-ZKkWLdmi.js.map +1 -0
  5. package/dist/{coercion/string.js → chunks/date-7Iz2BGsL.js} +271 -5
  6. package/dist/chunks/date-7Iz2BGsL.js.map +1 -0
  7. package/dist/chunks/index-BoV-4S1F.js +894 -0
  8. package/dist/chunks/index-BoV-4S1F.js.map +1 -0
  9. package/dist/chunks/index-eWXdjyyy.js +426 -0
  10. package/dist/chunks/index-eWXdjyyy.js.map +1 -0
  11. package/dist/chunks/json-nIhyRPOU.js +1934 -0
  12. package/dist/chunks/json-nIhyRPOU.js.map +1 -0
  13. package/dist/{validators/unknown.js → chunks/unknown-CjSRcELI.js} +6 -3
  14. package/dist/chunks/unknown-CjSRcELI.js.map +1 -0
  15. package/dist/cjs/errors.cjs +387 -0
  16. package/dist/cjs/errors.cjs.map +1 -0
  17. package/dist/cjs/index.cjs +9815 -0
  18. package/dist/cjs/index.cjs.map +1 -0
  19. package/dist/cjs/locales/index.cjs +2877 -0
  20. package/dist/cjs/locales/index.cjs.map +1 -0
  21. package/dist/cjs/locales/lazy.cjs +3169 -0
  22. package/dist/cjs/locales/lazy.cjs.map +1 -0
  23. package/dist/cjs/mini.cjs +7161 -0
  24. package/dist/cjs/mini.cjs.map +1 -0
  25. package/dist/codecs/index.js +4 -275
  26. package/dist/codecs/index.js.map +1 -1
  27. package/dist/coercion/index.d.ts +11 -0
  28. package/dist/coercion/index.d.ts.map +1 -0
  29. package/dist/coercion/{bigint.js → index.js} +7 -4
  30. package/dist/coercion/index.js.map +1 -0
  31. package/dist/compat/emitter.js +6 -4
  32. package/dist/compat/emitter.js.map +1 -1
  33. package/dist/compat/result.js +21 -19
  34. package/dist/compat/result.js.map +1 -1
  35. package/dist/errors.js +13 -10
  36. package/dist/errors.js.map +1 -1
  37. package/dist/index.js +225 -126
  38. package/dist/index.js.map +1 -1
  39. package/dist/kernel.js +10 -7
  40. package/dist/kernel.js.map +1 -1
  41. package/dist/locales/af.js +4 -2
  42. package/dist/locales/af.js.map +1 -1
  43. package/dist/locales/ar.js +4 -2
  44. package/dist/locales/ar.js.map +1 -1
  45. package/dist/locales/bn.js +4 -2
  46. package/dist/locales/bn.js.map +1 -1
  47. package/dist/locales/da.js +4 -2
  48. package/dist/locales/da.js.map +1 -1
  49. package/dist/locales/de.js +4 -2
  50. package/dist/locales/de.js.map +1 -1
  51. package/dist/locales/en.js +4 -2
  52. package/dist/locales/en.js.map +1 -1
  53. package/dist/locales/es-MX.js +4 -2
  54. package/dist/locales/es-MX.js.map +1 -1
  55. package/dist/locales/es.js +4 -2
  56. package/dist/locales/es.js.map +1 -1
  57. package/dist/locales/fi.js +4 -2
  58. package/dist/locales/fi.js.map +1 -1
  59. package/dist/locales/fr.js +4 -2
  60. package/dist/locales/fr.js.map +1 -1
  61. package/dist/locales/hi.js +4 -2
  62. package/dist/locales/hi.js.map +1 -1
  63. package/dist/locales/id.js +4 -2
  64. package/dist/locales/id.js.map +1 -1
  65. package/dist/locales/index.js +3 -91
  66. package/dist/locales/index.js.map +1 -1
  67. package/dist/locales/it.js +4 -2
  68. package/dist/locales/it.js.map +1 -1
  69. package/dist/locales/ja.js +4 -2
  70. package/dist/locales/ja.js.map +1 -1
  71. package/dist/locales/ko.js +4 -2
  72. package/dist/locales/ko.js.map +1 -1
  73. package/dist/locales/lazy.d.ts +111 -0
  74. package/dist/locales/lazy.d.ts.map +1 -0
  75. package/dist/locales/lazy.js +220 -0
  76. package/dist/locales/lazy.js.map +1 -0
  77. package/dist/locales/nl.js +4 -2
  78. package/dist/locales/nl.js.map +1 -1
  79. package/dist/locales/no.js +4 -2
  80. package/dist/locales/no.js.map +1 -1
  81. package/dist/locales/pl.js +4 -2
  82. package/dist/locales/pl.js.map +1 -1
  83. package/dist/locales/pt-BR.js +4 -2
  84. package/dist/locales/pt-BR.js.map +1 -1
  85. package/dist/locales/pt.js +4 -2
  86. package/dist/locales/pt.js.map +1 -1
  87. package/dist/locales/ru.js +4 -2
  88. package/dist/locales/ru.js.map +1 -1
  89. package/dist/locales/sv.js +4 -2
  90. package/dist/locales/sv.js.map +1 -1
  91. package/dist/locales/sw.js +4 -2
  92. package/dist/locales/sw.js.map +1 -1
  93. package/dist/locales/th.js +4 -2
  94. package/dist/locales/th.js.map +1 -1
  95. package/dist/locales/tr.js +4 -2
  96. package/dist/locales/tr.js.map +1 -1
  97. package/dist/locales/vi.js +4 -2
  98. package/dist/locales/vi.js.map +1 -1
  99. package/dist/locales/zh.js +4 -2
  100. package/dist/locales/zh.js.map +1 -1
  101. package/dist/mini.d.ts +182 -0
  102. package/dist/mini.d.ts.map +1 -0
  103. package/dist/mini.js +132 -0
  104. package/dist/mini.js.map +1 -0
  105. package/dist/pigment.js +8 -7
  106. package/dist/pigment.js.map +1 -1
  107. package/dist/validators/index.js +5 -45
  108. package/dist/validators/index.js.map +1 -1
  109. package/package.json +69 -11
  110. package/dist/cli/benchmark.d.ts +0 -15
  111. package/dist/cli/benchmark.d.ts.map +0 -1
  112. package/dist/cli/benchmark.js +0 -248
  113. package/dist/cli/benchmark.js.map +0 -1
  114. package/dist/cli/bin.js +0 -35
  115. package/dist/cli/bin.js.map +0 -1
  116. package/dist/cli/commands/benchmark.js +0 -204
  117. package/dist/cli/commands/benchmark.js.map +0 -1
  118. package/dist/cli/commands/validate.js +0 -157
  119. package/dist/cli/commands/validate.js.map +0 -1
  120. package/dist/cli/generate.d.ts +0 -14
  121. package/dist/cli/generate.d.ts.map +0 -1
  122. package/dist/cli/generate.js +0 -233
  123. package/dist/cli/generate.js.map +0 -1
  124. package/dist/cli/index.js +0 -182
  125. package/dist/cli/index.js.map +0 -1
  126. package/dist/cli/validate.d.ts +0 -15
  127. package/dist/cli/validate.d.ts.map +0 -1
  128. package/dist/cli/validate.js +0 -162
  129. package/dist/cli/validate.js.map +0 -1
  130. package/dist/coercion/bigint.js.map +0 -1
  131. package/dist/coercion/boolean.js +0 -59
  132. package/dist/coercion/boolean.js.map +0 -1
  133. package/dist/coercion/date.js +0 -52
  134. package/dist/coercion/date.js.map +0 -1
  135. package/dist/coercion/number.js +0 -160
  136. package/dist/coercion/number.js.map +0 -1
  137. package/dist/coercion/string.js.map +0 -1
  138. package/dist/compat/index.js +0 -14
  139. package/dist/compat/index.js.map +0 -1
  140. package/dist/events.js +0 -8
  141. package/dist/events.js.map +0 -1
  142. package/dist/guards.d.ts +0 -143
  143. package/dist/guards.d.ts.map +0 -1
  144. package/dist/guards.js +0 -238
  145. package/dist/guards.js.map +0 -1
  146. package/dist/index-new.d.ts.map +0 -1
  147. package/dist/locales/backup-en.js +0 -105
  148. package/dist/locales/backup-en.js.map +0 -1
  149. package/dist/locales/types.js +0 -2
  150. package/dist/locales/types.js.map +0 -1
  151. package/dist/locales.d.ts +0 -54
  152. package/dist/locales.d.ts.map +0 -1
  153. package/dist/locales.js +0 -732
  154. package/dist/locales.js.map +0 -1
  155. package/dist/logger.js +0 -184
  156. package/dist/logger.js.map +0 -1
  157. package/dist/plugins/codecs.d.ts +0 -17
  158. package/dist/plugins/codecs.d.ts.map +0 -1
  159. package/dist/plugins/codecs.js +0 -29
  160. package/dist/plugins/codecs.js.map +0 -1
  161. package/dist/plugins/coercion.d.ts +0 -13
  162. package/dist/plugins/coercion.d.ts.map +0 -1
  163. package/dist/plugins/coercion.js +0 -34
  164. package/dist/plugins/coercion.js.map +0 -1
  165. package/dist/plugins/core-validators.d.ts +0 -13
  166. package/dist/plugins/core-validators.d.ts.map +0 -1
  167. package/dist/plugins/core-validators.js +0 -96
  168. package/dist/plugins/core-validators.js.map +0 -1
  169. package/dist/plugins/index.js +0 -8
  170. package/dist/plugins/index.js.map +0 -1
  171. package/dist/plugins/kernel.d.ts +0 -29
  172. package/dist/plugins/kernel.d.ts.map +0 -1
  173. package/dist/plugins/kernel.js +0 -486
  174. package/dist/plugins/kernel.js.map +0 -1
  175. package/dist/plugins/types.js +0 -8
  176. package/dist/plugins/types.js.map +0 -1
  177. package/dist/style.d.ts +0 -123
  178. package/dist/style.d.ts.map +0 -1
  179. package/dist/style.js +0 -369
  180. package/dist/style.js.map +0 -1
  181. package/dist/utils/codec-utils.js +0 -229
  182. package/dist/utils/codec-utils.js.map +0 -1
  183. package/dist/utils/deep-merge.js +0 -76
  184. package/dist/utils/deep-merge.js.map +0 -1
  185. package/dist/utils/ip-validation.js +0 -98
  186. package/dist/utils/ip-validation.js.map +0 -1
  187. package/dist/utils/security.js +0 -61
  188. package/dist/utils/security.js.map +0 -1
  189. package/dist/validators/any.js +0 -25
  190. package/dist/validators/any.js.map +0 -1
  191. package/dist/validators/array.js +0 -190
  192. package/dist/validators/array.js.map +0 -1
  193. package/dist/validators/base.js +0 -499
  194. package/dist/validators/base.js.map +0 -1
  195. package/dist/validators/base64.js +0 -65
  196. package/dist/validators/base64.js.map +0 -1
  197. package/dist/validators/bigint.js +0 -142
  198. package/dist/validators/bigint.js.map +0 -1
  199. package/dist/validators/boolean.js +0 -114
  200. package/dist/validators/boolean.js.map +0 -1
  201. package/dist/validators/codec.js +0 -182
  202. package/dist/validators/codec.js.map +0 -1
  203. package/dist/validators/custom.js +0 -50
  204. package/dist/validators/custom.js.map +0 -1
  205. package/dist/validators/date.js +0 -227
  206. package/dist/validators/date.js.map +0 -1
  207. package/dist/validators/discriminated-union.js +0 -98
  208. package/dist/validators/discriminated-union.js.map +0 -1
  209. package/dist/validators/enum.js +0 -82
  210. package/dist/validators/enum.js.map +0 -1
  211. package/dist/validators/file.js +0 -114
  212. package/dist/validators/file.js.map +0 -1
  213. package/dist/validators/function.js +0 -45
  214. package/dist/validators/function.js.map +0 -1
  215. package/dist/validators/hex.js +0 -62
  216. package/dist/validators/hex.js.map +0 -1
  217. package/dist/validators/intersection.js +0 -64
  218. package/dist/validators/intersection.js.map +0 -1
  219. package/dist/validators/json.js +0 -64
  220. package/dist/validators/json.js.map +0 -1
  221. package/dist/validators/lazy.js +0 -42
  222. package/dist/validators/lazy.js.map +0 -1
  223. package/dist/validators/literal.js +0 -45
  224. package/dist/validators/literal.js.map +0 -1
  225. package/dist/validators/map.js +0 -54
  226. package/dist/validators/map.js.map +0 -1
  227. package/dist/validators/nan.js +0 -32
  228. package/dist/validators/nan.js.map +0 -1
  229. package/dist/validators/never.js +0 -29
  230. package/dist/validators/never.js.map +0 -1
  231. package/dist/validators/null.js +0 -31
  232. package/dist/validators/null.js.map +0 -1
  233. package/dist/validators/number.js +0 -225
  234. package/dist/validators/number.js.map +0 -1
  235. package/dist/validators/object-optimized.d.ts +0 -23
  236. package/dist/validators/object-optimized.d.ts.map +0 -1
  237. package/dist/validators/object-optimized.js +0 -179
  238. package/dist/validators/object-optimized.js.map +0 -1
  239. package/dist/validators/object-ultra.d.ts +0 -34
  240. package/dist/validators/object-ultra.d.ts.map +0 -1
  241. package/dist/validators/object-ultra.js +0 -175
  242. package/dist/validators/object-ultra.js.map +0 -1
  243. package/dist/validators/object.js +0 -458
  244. package/dist/validators/object.js.map +0 -1
  245. package/dist/validators/record.js +0 -128
  246. package/dist/validators/record.js.map +0 -1
  247. package/dist/validators/set.js +0 -51
  248. package/dist/validators/set.js.map +0 -1
  249. package/dist/validators/string-bool.js +0 -127
  250. package/dist/validators/string-bool.js.map +0 -1
  251. package/dist/validators/string-formats.js +0 -120
  252. package/dist/validators/string-formats.js.map +0 -1
  253. package/dist/validators/string-ultra.d.ts +0 -49
  254. package/dist/validators/string-ultra.d.ts.map +0 -1
  255. package/dist/validators/string-ultra.js +0 -217
  256. package/dist/validators/string-ultra.js.map +0 -1
  257. package/dist/validators/string.js +0 -253
  258. package/dist/validators/string.js.map +0 -1
  259. package/dist/validators/symbol.js +0 -42
  260. package/dist/validators/symbol.js.map +0 -1
  261. package/dist/validators/template-literal.js +0 -102
  262. package/dist/validators/template-literal.js.map +0 -1
  263. package/dist/validators/tuple.js +0 -55
  264. package/dist/validators/tuple.js.map +0 -1
  265. package/dist/validators/uint8array.js +0 -98
  266. package/dist/validators/uint8array.js.map +0 -1
  267. package/dist/validators/undefined.js +0 -31
  268. package/dist/validators/undefined.js.map +0 -1
  269. package/dist/validators/union-optimized.d.ts +0 -15
  270. package/dist/validators/union-optimized.d.ts.map +0 -1
  271. package/dist/validators/union-optimized.js +0 -92
  272. package/dist/validators/union-optimized.js.map +0 -1
  273. package/dist/validators/union.js +0 -126
  274. package/dist/validators/union.js.map +0 -1
  275. package/dist/validators/unknown.js.map +0 -1
  276. package/dist/validators/void.js +0 -35
  277. package/dist/validators/void.js.map +0 -1
  278. package/dist/validators/xor.js +0 -64
  279. 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"]}