@oxog/vld 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +97 -103
  2. package/README.md +78 -13
  3. package/dist/coercion/bigint.d.ts +27 -0
  4. package/dist/coercion/bigint.d.ts.map +1 -0
  5. package/dist/coercion/bigint.js +108 -0
  6. package/dist/coercion/bigint.js.map +1 -0
  7. package/dist/coercion/boolean.d.ts +20 -0
  8. package/dist/coercion/boolean.d.ts.map +1 -0
  9. package/dist/coercion/boolean.js +63 -0
  10. package/dist/coercion/boolean.js.map +1 -0
  11. package/dist/coercion/date.d.ts +20 -0
  12. package/dist/coercion/date.d.ts.map +1 -0
  13. package/dist/coercion/date.js +52 -0
  14. package/dist/coercion/date.js.map +1 -0
  15. package/dist/coercion/number.d.ts +35 -0
  16. package/dist/coercion/number.d.ts.map +1 -0
  17. package/dist/coercion/number.js +144 -0
  18. package/dist/coercion/number.js.map +1 -0
  19. package/dist/coercion/string.d.ts +38 -0
  20. package/dist/coercion/string.d.ts.map +1 -0
  21. package/dist/coercion/string.js +168 -0
  22. package/dist/coercion/string.js.map +1 -0
  23. package/dist/index-new.d.ts.map +1 -0
  24. package/dist/index.d.ts +64 -257
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +86 -1164
  27. package/dist/index.js.map +1 -1
  28. package/dist/utils/deep-merge.d.ts +18 -0
  29. package/dist/utils/deep-merge.d.ts.map +1 -0
  30. package/dist/utils/deep-merge.js +68 -0
  31. package/dist/utils/deep-merge.js.map +1 -0
  32. package/dist/validators/any.d.ts +19 -0
  33. package/dist/validators/any.d.ts.map +1 -0
  34. package/dist/validators/any.js +25 -0
  35. package/dist/validators/any.js.map +1 -0
  36. package/dist/validators/array.d.ts +48 -0
  37. package/dist/validators/array.d.ts.map +1 -0
  38. package/dist/validators/array.js +135 -0
  39. package/dist/validators/array.js.map +1 -0
  40. package/dist/validators/base.d.ts +155 -0
  41. package/dist/validators/base.d.ts.map +1 -0
  42. package/dist/validators/base.js +245 -0
  43. package/dist/validators/base.js.map +1 -0
  44. package/dist/validators/bigint.d.ts +60 -0
  45. package/dist/validators/bigint.d.ts.map +1 -0
  46. package/dist/validators/bigint.js +104 -0
  47. package/dist/validators/bigint.js.map +1 -0
  48. package/dist/validators/boolean.d.ts +32 -0
  49. package/dist/validators/boolean.d.ts.map +1 -0
  50. package/dist/validators/boolean.js +86 -0
  51. package/dist/validators/boolean.js.map +1 -0
  52. package/dist/validators/date.d.ts +68 -0
  53. package/dist/validators/date.d.ts.map +1 -0
  54. package/dist/validators/date.js +148 -0
  55. package/dist/validators/date.js.map +1 -0
  56. package/dist/validators/enum.d.ts +25 -0
  57. package/dist/validators/enum.d.ts.map +1 -0
  58. package/dist/validators/enum.js +45 -0
  59. package/dist/validators/enum.js.map +1 -0
  60. package/dist/validators/index.d.ts +27 -0
  61. package/dist/validators/index.d.ts.map +1 -0
  62. package/dist/validators/index.js +30 -0
  63. package/dist/validators/index.js.map +1 -0
  64. package/dist/validators/intersection.d.ts +25 -0
  65. package/dist/validators/intersection.d.ts.map +1 -0
  66. package/dist/validators/intersection.js +57 -0
  67. package/dist/validators/intersection.js.map +1 -0
  68. package/dist/validators/literal.d.ts +25 -0
  69. package/dist/validators/literal.d.ts.map +1 -0
  70. package/dist/validators/literal.js +45 -0
  71. package/dist/validators/literal.js.map +1 -0
  72. package/dist/validators/map.d.ts +26 -0
  73. package/dist/validators/map.d.ts.map +1 -0
  74. package/dist/validators/map.js +54 -0
  75. package/dist/validators/map.js.map +1 -0
  76. package/dist/validators/never.d.ts +19 -0
  77. package/dist/validators/never.d.ts.map +1 -0
  78. package/dist/validators/never.js +29 -0
  79. package/dist/validators/never.js.map +1 -0
  80. package/dist/validators/number.d.ts +92 -0
  81. package/dist/validators/number.d.ts.map +1 -0
  82. package/dist/validators/number.js +173 -0
  83. package/dist/validators/number.js.map +1 -0
  84. package/dist/validators/object-optimized.d.ts +23 -0
  85. package/dist/validators/object-optimized.d.ts.map +1 -0
  86. package/dist/validators/object-optimized.js +179 -0
  87. package/dist/validators/object-optimized.js.map +1 -0
  88. package/dist/validators/object-ultra.d.ts +34 -0
  89. package/dist/validators/object-ultra.d.ts.map +1 -0
  90. package/dist/validators/object-ultra.js +175 -0
  91. package/dist/validators/object-ultra.js.map +1 -0
  92. package/dist/validators/object.d.ts +73 -0
  93. package/dist/validators/object.d.ts.map +1 -0
  94. package/dist/validators/object.js +285 -0
  95. package/dist/validators/object.js.map +1 -0
  96. package/dist/validators/record.d.ts +25 -0
  97. package/dist/validators/record.d.ts.map +1 -0
  98. package/dist/validators/record.js +52 -0
  99. package/dist/validators/record.js.map +1 -0
  100. package/dist/validators/set.d.ts +25 -0
  101. package/dist/validators/set.d.ts.map +1 -0
  102. package/dist/validators/set.js +51 -0
  103. package/dist/validators/set.js.map +1 -0
  104. package/dist/validators/string-ultra.d.ts +49 -0
  105. package/dist/validators/string-ultra.d.ts.map +1 -0
  106. package/dist/validators/string-ultra.js +217 -0
  107. package/dist/validators/string-ultra.js.map +1 -0
  108. package/dist/validators/string.d.ts +109 -0
  109. package/dist/validators/string.d.ts.map +1 -0
  110. package/dist/validators/string.js +242 -0
  111. package/dist/validators/string.js.map +1 -0
  112. package/dist/validators/symbol.d.ts +24 -0
  113. package/dist/validators/symbol.d.ts.map +1 -0
  114. package/dist/validators/symbol.js +42 -0
  115. package/dist/validators/symbol.js.map +1 -0
  116. package/dist/validators/tuple.d.ts +31 -0
  117. package/dist/validators/tuple.d.ts.map +1 -0
  118. package/dist/validators/tuple.js +55 -0
  119. package/dist/validators/tuple.js.map +1 -0
  120. package/dist/validators/union-optimized.d.ts +15 -0
  121. package/dist/validators/union-optimized.d.ts.map +1 -0
  122. package/dist/validators/union-optimized.js +92 -0
  123. package/dist/validators/union-optimized.js.map +1 -0
  124. package/dist/validators/union.d.ts +33 -0
  125. package/dist/validators/union.d.ts.map +1 -0
  126. package/dist/validators/union.js +121 -0
  127. package/dist/validators/union.js.map +1 -0
  128. package/dist/validators/unknown.d.ts +19 -0
  129. package/dist/validators/unknown.d.ts.map +1 -0
  130. package/dist/validators/unknown.js +25 -0
  131. package/dist/validators/unknown.js.map +1 -0
  132. package/dist/validators/void.d.ts +19 -0
  133. package/dist/validators/void.d.ts.map +1 -0
  134. package/dist/validators/void.js +35 -0
  135. package/dist/validators/void.js.map +1 -0
  136. package/package.json +12 -6
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Base result type for validation
3
+ */
4
+ export type ParseResult<T> = {
5
+ readonly success: true;
6
+ readonly data: T;
7
+ } | {
8
+ readonly success: false;
9
+ readonly error: Error;
10
+ };
11
+ /**
12
+ * Abstract base class for all validators
13
+ * Implements immutable pattern to prevent memory leaks and race conditions
14
+ */
15
+ export declare abstract class VldBase<TInput, TOutput = TInput> {
16
+ /**
17
+ * Parse and validate a value, throwing an error if invalid
18
+ * @param value The value to validate
19
+ * @returns The validated value
20
+ * @throws {Error} If validation fails
21
+ */
22
+ abstract parse(value: unknown): TOutput;
23
+ /**
24
+ * Safely parse and validate a value, returning a result object
25
+ * @param value The value to validate
26
+ * @returns A result object with either success and data, or failure and error
27
+ */
28
+ abstract safeParse(value: unknown): ParseResult<TOutput>;
29
+ /**
30
+ * Check if a value is valid according to this validator
31
+ * @param value The value to check
32
+ * @returns True if valid, false otherwise
33
+ */
34
+ isValid(value: unknown): boolean;
35
+ /**
36
+ * Parse a value or return a default if validation fails
37
+ * @param value The value to validate
38
+ * @param defaultValue The default value to return on failure
39
+ * @returns The validated value or default
40
+ */
41
+ parseOrDefault(value: unknown, defaultValue: TOutput): TOutput;
42
+ /**
43
+ * Create a new validator that refines this one with a custom predicate
44
+ * @param predicate The refinement predicate
45
+ * @param message Optional custom error message
46
+ * @returns A new refined validator
47
+ */
48
+ refine<TRefined extends TOutput>(predicate: (value: TOutput) => value is TRefined, message?: string): VldRefine<TInput, TOutput, TRefined>;
49
+ refine(predicate: (value: TOutput) => boolean, message?: string): VldRefine<TInput, TOutput, TOutput>;
50
+ /**
51
+ * Create a new validator that transforms the output
52
+ * @param transformer The transformation function
53
+ * @returns A new transformed validator
54
+ */
55
+ transform<TTransformed>(transformer: (value: TOutput) => TTransformed): VldTransform<TInput, TOutput, TTransformed>;
56
+ /**
57
+ * Create a new validator with a default value for undefined inputs
58
+ * @param defaultValue The default value
59
+ * @returns A new validator with default
60
+ */
61
+ default(defaultValue: TOutput): VldDefault<TInput, TOutput>;
62
+ /**
63
+ * Create a new validator that catches errors and returns a fallback
64
+ * @param fallbackValue The fallback value
65
+ * @returns A new validator with catch
66
+ */
67
+ catch(fallbackValue: TOutput): VldCatch<TInput, TOutput>;
68
+ /**
69
+ * Make this validator optional (allows undefined)
70
+ * @returns A new optional validator
71
+ */
72
+ optional(): VldOptional<TInput, TOutput>;
73
+ /**
74
+ * Make this validator nullable (allows null)
75
+ * @returns A new nullable validator
76
+ */
77
+ nullable(): VldNullable<TInput, TOutput>;
78
+ /**
79
+ * Make this validator nullish (allows null or undefined)
80
+ * @returns A new nullish validator
81
+ */
82
+ nullish(): VldNullish<TInput, TOutput>;
83
+ }
84
+ /**
85
+ * Refine validator - adds custom validation
86
+ */
87
+ export declare class VldRefine<TInput, TBase, TOutput extends TBase = TBase> extends VldBase<TInput, TOutput> {
88
+ private readonly baseValidator;
89
+ private readonly predicate;
90
+ private readonly customMessage?;
91
+ constructor(baseValidator: VldBase<TInput, TBase>, predicate: (value: TBase) => boolean, customMessage?: string | undefined);
92
+ parse(value: unknown): TOutput;
93
+ safeParse(value: unknown): ParseResult<TOutput>;
94
+ }
95
+ /**
96
+ * Transform validator - transforms data after validation
97
+ */
98
+ export declare class VldTransform<TInput, TBase, TOutput> extends VldBase<TInput, TOutput> {
99
+ private readonly baseValidator;
100
+ private readonly transformer;
101
+ constructor(baseValidator: VldBase<TInput, TBase>, transformer: (value: TBase) => TOutput);
102
+ parse(value: unknown): TOutput;
103
+ safeParse(value: unknown): ParseResult<TOutput>;
104
+ }
105
+ /**
106
+ * Default validator - provides default value for undefined
107
+ */
108
+ export declare class VldDefault<TInput, TOutput> extends VldBase<TInput | undefined, TOutput> {
109
+ private readonly baseValidator;
110
+ private readonly defaultValue;
111
+ constructor(baseValidator: VldBase<TInput, TOutput>, defaultValue: TOutput);
112
+ parse(value: unknown): TOutput;
113
+ safeParse(value: unknown): ParseResult<TOutput>;
114
+ }
115
+ /**
116
+ * Catch validator - provides fallback value on validation error
117
+ */
118
+ export declare class VldCatch<TInput, TOutput> extends VldBase<TInput, TOutput> {
119
+ private readonly baseValidator;
120
+ private readonly fallbackValue;
121
+ constructor(baseValidator: VldBase<TInput, TOutput>, fallbackValue: TOutput);
122
+ parse(value: unknown): TOutput;
123
+ safeParse(value: unknown): ParseResult<TOutput>;
124
+ }
125
+ /**
126
+ * Optional validator - allows undefined
127
+ */
128
+ export declare class VldOptional<TInput, TOutput> extends VldBase<TInput | undefined, TOutput | undefined> {
129
+ private readonly baseValidator;
130
+ constructor(baseValidator: VldBase<TInput, TOutput>);
131
+ static create<TInput, TOutput>(baseValidator: VldBase<TInput, TOutput>): VldOptional<TInput, TOutput>;
132
+ parse(value: unknown): TOutput | undefined;
133
+ safeParse(value: unknown): ParseResult<TOutput | undefined>;
134
+ }
135
+ /**
136
+ * Nullable validator - allows null
137
+ */
138
+ export declare class VldNullable<TInput, TOutput> extends VldBase<TInput | null, TOutput | null> {
139
+ private readonly baseValidator;
140
+ constructor(baseValidator: VldBase<TInput, TOutput>);
141
+ static create<TInput, TOutput>(baseValidator: VldBase<TInput, TOutput>): VldNullable<TInput, TOutput>;
142
+ parse(value: unknown): TOutput | null;
143
+ safeParse(value: unknown): ParseResult<TOutput | null>;
144
+ }
145
+ /**
146
+ * Nullish validator - allows null or undefined
147
+ */
148
+ export declare class VldNullish<TInput, TOutput> extends VldBase<TInput | null | undefined, TOutput | null | undefined> {
149
+ private readonly baseValidator;
150
+ constructor(baseValidator: VldBase<TInput, TOutput>);
151
+ static create<TInput, TOutput>(baseValidator: VldBase<TInput, TOutput>): VldNullish<TInput, TOutput>;
152
+ parse(value: unknown): TOutput | null | undefined;
153
+ safeParse(value: unknown): ParseResult<TOutput | null | undefined>;
154
+ }
155
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/validators/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Abstract base class for all validators
3
+ * Implements immutable pattern to prevent memory leaks and race conditions
4
+ */
5
+ export class VldBase {
6
+ /**
7
+ * Check if a value is valid according to this validator
8
+ * @param value The value to check
9
+ * @returns True if valid, false otherwise
10
+ */
11
+ isValid(value) {
12
+ return this.safeParse(value).success;
13
+ }
14
+ /**
15
+ * Parse a value or return a default if validation fails
16
+ * @param value The value to validate
17
+ * @param defaultValue The default value to return on failure
18
+ * @returns The validated value or default
19
+ */
20
+ parseOrDefault(value, defaultValue) {
21
+ const result = this.safeParse(value);
22
+ return result.success ? result.data : defaultValue;
23
+ }
24
+ refine(predicate, message) {
25
+ return new VldRefine(this, predicate, message);
26
+ }
27
+ /**
28
+ * Create a new validator that transforms the output
29
+ * @param transformer The transformation function
30
+ * @returns A new transformed validator
31
+ */
32
+ transform(transformer) {
33
+ return new VldTransform(this, transformer);
34
+ }
35
+ /**
36
+ * Create a new validator with a default value for undefined inputs
37
+ * @param defaultValue The default value
38
+ * @returns A new validator with default
39
+ */
40
+ default(defaultValue) {
41
+ return new VldDefault(this, defaultValue);
42
+ }
43
+ /**
44
+ * Create a new validator that catches errors and returns a fallback
45
+ * @param fallbackValue The fallback value
46
+ * @returns A new validator with catch
47
+ */
48
+ catch(fallbackValue) {
49
+ return new VldCatch(this, fallbackValue);
50
+ }
51
+ /**
52
+ * Make this validator optional (allows undefined)
53
+ * @returns A new optional validator
54
+ */
55
+ optional() {
56
+ return new VldOptional(this);
57
+ }
58
+ /**
59
+ * Make this validator nullable (allows null)
60
+ * @returns A new nullable validator
61
+ */
62
+ nullable() {
63
+ return new VldNullable(this);
64
+ }
65
+ /**
66
+ * Make this validator nullish (allows null or undefined)
67
+ * @returns A new nullish validator
68
+ */
69
+ nullish() {
70
+ return new VldNullish(this);
71
+ }
72
+ }
73
+ /**
74
+ * Refine validator - adds custom validation
75
+ */
76
+ export class VldRefine extends VldBase {
77
+ constructor(baseValidator, predicate, customMessage) {
78
+ super();
79
+ this.baseValidator = baseValidator;
80
+ this.predicate = predicate;
81
+ this.customMessage = customMessage;
82
+ }
83
+ parse(value) {
84
+ const baseResult = this.baseValidator.parse(value);
85
+ if (!this.predicate(baseResult)) {
86
+ throw new Error(this.customMessage || 'Refinement check failed');
87
+ }
88
+ return baseResult;
89
+ }
90
+ safeParse(value) {
91
+ try {
92
+ return { success: true, data: this.parse(value) };
93
+ }
94
+ catch (error) {
95
+ return { success: false, error: error };
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Transform validator - transforms data after validation
101
+ */
102
+ export class VldTransform extends VldBase {
103
+ constructor(baseValidator, transformer) {
104
+ super();
105
+ this.baseValidator = baseValidator;
106
+ this.transformer = transformer;
107
+ }
108
+ parse(value) {
109
+ const baseResult = this.baseValidator.parse(value);
110
+ try {
111
+ return this.transformer(baseResult);
112
+ }
113
+ catch (error) {
114
+ throw new Error(`Transform failed: ${error.message}`);
115
+ }
116
+ }
117
+ safeParse(value) {
118
+ try {
119
+ return { success: true, data: this.parse(value) };
120
+ }
121
+ catch (error) {
122
+ return { success: false, error: error };
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Default validator - provides default value for undefined
128
+ */
129
+ export class VldDefault extends VldBase {
130
+ constructor(baseValidator, defaultValue) {
131
+ super();
132
+ this.baseValidator = baseValidator;
133
+ this.defaultValue = defaultValue;
134
+ }
135
+ parse(value) {
136
+ if (value === undefined) {
137
+ return this.defaultValue;
138
+ }
139
+ return this.baseValidator.parse(value);
140
+ }
141
+ safeParse(value) {
142
+ if (value === undefined) {
143
+ return { success: true, data: this.defaultValue };
144
+ }
145
+ return this.baseValidator.safeParse(value);
146
+ }
147
+ }
148
+ /**
149
+ * Catch validator - provides fallback value on validation error
150
+ */
151
+ export class VldCatch extends VldBase {
152
+ constructor(baseValidator, fallbackValue) {
153
+ super();
154
+ this.baseValidator = baseValidator;
155
+ this.fallbackValue = fallbackValue;
156
+ }
157
+ parse(value) {
158
+ try {
159
+ return this.baseValidator.parse(value);
160
+ }
161
+ catch {
162
+ return this.fallbackValue;
163
+ }
164
+ }
165
+ safeParse(value) {
166
+ const result = this.baseValidator.safeParse(value);
167
+ if (result.success) {
168
+ return result;
169
+ }
170
+ return { success: true, data: this.fallbackValue };
171
+ }
172
+ }
173
+ /**
174
+ * Optional validator - allows undefined
175
+ */
176
+ export class VldOptional extends VldBase {
177
+ constructor(baseValidator) {
178
+ super();
179
+ this.baseValidator = baseValidator;
180
+ }
181
+ static create(baseValidator) {
182
+ return new VldOptional(baseValidator);
183
+ }
184
+ parse(value) {
185
+ if (value === undefined) {
186
+ return undefined;
187
+ }
188
+ return this.baseValidator.parse(value);
189
+ }
190
+ safeParse(value) {
191
+ if (value === undefined) {
192
+ return { success: true, data: undefined };
193
+ }
194
+ return this.baseValidator.safeParse(value);
195
+ }
196
+ }
197
+ /**
198
+ * Nullable validator - allows null
199
+ */
200
+ export class VldNullable extends VldBase {
201
+ constructor(baseValidator) {
202
+ super();
203
+ this.baseValidator = baseValidator;
204
+ }
205
+ static create(baseValidator) {
206
+ return new VldNullable(baseValidator);
207
+ }
208
+ parse(value) {
209
+ if (value === null) {
210
+ return null;
211
+ }
212
+ return this.baseValidator.parse(value);
213
+ }
214
+ safeParse(value) {
215
+ if (value === null) {
216
+ return { success: true, data: null };
217
+ }
218
+ return this.baseValidator.safeParse(value);
219
+ }
220
+ }
221
+ /**
222
+ * Nullish validator - allows null or undefined
223
+ */
224
+ export class VldNullish extends VldBase {
225
+ constructor(baseValidator) {
226
+ super();
227
+ this.baseValidator = baseValidator;
228
+ }
229
+ static create(baseValidator) {
230
+ return new VldNullish(baseValidator);
231
+ }
232
+ parse(value) {
233
+ if (value === null || value === undefined) {
234
+ return value;
235
+ }
236
+ return this.baseValidator.parse(value);
237
+ }
238
+ safeParse(value) {
239
+ if (value === null || value === undefined) {
240
+ return { success: true, data: value };
241
+ }
242
+ return this.baseValidator.safeParse(value);
243
+ }
244
+ }
245
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/validators/base.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Base result type for validation\n */\nexport type ParseResult<T> = \n | { readonly success: true; readonly data: T }\n | { readonly success: false; readonly error: Error };\n\n/**\n * Abstract base class for all validators\n * Implements immutable pattern to prevent memory leaks and race conditions\n */\nexport abstract class VldBase<TInput, TOutput = TInput> {\n /**\n * Parse and validate a value, throwing an error if invalid\n * @param value The value to validate\n * @returns The validated value\n * @throws {Error} If validation fails\n */\n abstract parse(value: unknown): TOutput;\n \n /**\n * Safely parse and validate a value, returning a result object\n * @param value The value to validate\n * @returns A result object with either success and data, or failure and error\n */\n abstract safeParse(value: unknown): ParseResult<TOutput>;\n \n /**\n * Check if a value is valid according to this validator\n * @param value The value to check\n * @returns True if valid, false otherwise\n */\n isValid(value: unknown): boolean {\n return this.safeParse(value).success;\n }\n \n /**\n * Parse a value or return a default if validation fails\n * @param value The value to validate\n * @param defaultValue The default value to return on failure\n * @returns The validated value or default\n */\n parseOrDefault(value: unknown, defaultValue: TOutput): TOutput {\n const result = this.safeParse(value);\n return result.success ? result.data : defaultValue;\n }\n \n /**\n * Create a new validator that refines this one with a custom predicate\n * @param predicate The refinement predicate\n * @param message Optional custom error message\n * @returns A new refined validator\n */\n refine<TRefined extends TOutput>(\n predicate: (value: TOutput) => value is TRefined,\n message?: string\n ): VldRefine<TInput, TOutput, TRefined>;\n refine(\n predicate: (value: TOutput) => boolean,\n message?: string\n ): VldRefine<TInput, TOutput, TOutput>;\n refine(\n predicate: (value: TOutput) => boolean,\n message?: string\n ): VldRefine<TInput, TOutput, TOutput> {\n return new VldRefine(this, predicate, message);\n }\n \n /**\n * Create a new validator that transforms the output\n * @param transformer The transformation function\n * @returns A new transformed validator\n */\n transform<TTransformed>(\n transformer: (value: TOutput) => TTransformed\n ): VldTransform<TInput, TOutput, TTransformed> {\n return new VldTransform(this, transformer);\n }\n \n /**\n * Create a new validator with a default value for undefined inputs\n * @param defaultValue The default value\n * @returns A new validator with default\n */\n default(defaultValue: TOutput): VldDefault<TInput, TOutput> {\n return new VldDefault(this, defaultValue);\n }\n \n /**\n * Create a new validator that catches errors and returns a fallback\n * @param fallbackValue The fallback value\n * @returns A new validator with catch\n */\n catch(fallbackValue: TOutput): VldCatch<TInput, TOutput> {\n return new VldCatch(this, fallbackValue);\n }\n \n /**\n * Make this validator optional (allows undefined)\n * @returns A new optional validator\n */\n optional(): VldOptional<TInput, TOutput> {\n return new VldOptional(this);\n }\n \n /**\n * Make this validator nullable (allows null)\n * @returns A new nullable validator\n */\n nullable(): VldNullable<TInput, TOutput> {\n return new VldNullable(this);\n }\n \n /**\n * Make this validator nullish (allows null or undefined)\n * @returns A new nullish validator\n */\n nullish(): VldNullish<TInput, TOutput> {\n return new VldNullish(this);\n }\n}\n\n/**\n * Refine validator - adds custom validation\n */\nexport class VldRefine<TInput, TBase, TOutput extends TBase = TBase> extends VldBase<TInput, TOutput> {\n constructor(\n private readonly baseValidator: VldBase<TInput, TBase>,\n private readonly predicate: (value: TBase) => boolean,\n private readonly customMessage?: string\n ) {\n super();\n }\n \n parse(value: unknown): TOutput {\n const baseResult = this.baseValidator.parse(value);\n \n if (!this.predicate(baseResult)) {\n throw new Error(this.customMessage || 'Refinement check failed');\n }\n \n return baseResult as TOutput;\n }\n \n safeParse(value: unknown): ParseResult<TOutput> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}\n\n/**\n * Transform validator - transforms data after validation\n */\nexport class VldTransform<TInput, TBase, TOutput> extends VldBase<TInput, TOutput> {\n constructor(\n private readonly baseValidator: VldBase<TInput, TBase>,\n private readonly transformer: (value: TBase) => TOutput\n ) {\n super();\n }\n \n parse(value: unknown): TOutput {\n const baseResult = this.baseValidator.parse(value);\n \n try {\n return this.transformer(baseResult);\n } catch (error) {\n throw new Error(`Transform failed: ${(error as Error).message}`);\n }\n }\n \n safeParse(value: unknown): ParseResult<TOutput> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}\n\n/**\n * Default validator - provides default value for undefined\n */\nexport class VldDefault<TInput, TOutput> extends VldBase<TInput | undefined, TOutput> {\n constructor(\n private readonly baseValidator: VldBase<TInput, TOutput>,\n private readonly defaultValue: TOutput\n ) {\n super();\n }\n \n parse(value: unknown): TOutput {\n if (value === undefined) {\n return this.defaultValue;\n }\n return this.baseValidator.parse(value);\n }\n \n safeParse(value: unknown): ParseResult<TOutput> {\n if (value === undefined) {\n return { success: true, data: this.defaultValue };\n }\n return this.baseValidator.safeParse(value);\n }\n}\n\n/**\n * Catch validator - provides fallback value on validation error\n */\nexport class VldCatch<TInput, TOutput> extends VldBase<TInput, TOutput> {\n constructor(\n private readonly baseValidator: VldBase<TInput, TOutput>,\n private readonly fallbackValue: TOutput\n ) {\n super();\n }\n \n parse(value: unknown): TOutput {\n try {\n return this.baseValidator.parse(value);\n } catch {\n return this.fallbackValue;\n }\n }\n \n safeParse(value: unknown): ParseResult<TOutput> {\n const result = this.baseValidator.safeParse(value);\n if (result.success) {\n return result;\n }\n return { success: true, data: this.fallbackValue };\n }\n}\n\n/**\n * Optional validator - allows undefined\n */\nexport class VldOptional<TInput, TOutput> extends VldBase<TInput | undefined, TOutput | undefined> {\n constructor(private readonly baseValidator: VldBase<TInput, TOutput>) {\n super();\n }\n \n static create<TInput, TOutput>(baseValidator: VldBase<TInput, TOutput>): VldOptional<TInput, TOutput> {\n return new VldOptional(baseValidator);\n }\n \n parse(value: unknown): TOutput | undefined {\n if (value === undefined) {\n return undefined;\n }\n return this.baseValidator.parse(value);\n }\n \n safeParse(value: unknown): ParseResult<TOutput | undefined> {\n if (value === undefined) {\n return { success: true, data: undefined };\n }\n return this.baseValidator.safeParse(value);\n }\n}\n\n/**\n * Nullable validator - allows null\n */\nexport class VldNullable<TInput, TOutput> extends VldBase<TInput | null, TOutput | null> {\n constructor(private readonly baseValidator: VldBase<TInput, TOutput>) {\n super();\n }\n \n static create<TInput, TOutput>(baseValidator: VldBase<TInput, TOutput>): VldNullable<TInput, TOutput> {\n return new VldNullable(baseValidator);\n }\n \n parse(value: unknown): TOutput | null {\n if (value === null) {\n return null;\n }\n return this.baseValidator.parse(value);\n }\n \n safeParse(value: unknown): ParseResult<TOutput | null> {\n if (value === null) {\n return { success: true, data: null };\n }\n return this.baseValidator.safeParse(value);\n }\n}\n\n/**\n * Nullish validator - allows null or undefined\n */\nexport class VldNullish<TInput, TOutput> extends VldBase<TInput | null | undefined, TOutput | null | undefined> {\n constructor(private readonly baseValidator: VldBase<TInput, TOutput>) {\n super();\n }\n \n static create<TInput, TOutput>(baseValidator: VldBase<TInput, TOutput>): VldNullish<TInput, TOutput> {\n return new VldNullish(baseValidator);\n }\n \n parse(value: unknown): TOutput | null | undefined {\n if (value === null || value === undefined) {\n return value as null | undefined;\n }\n return this.baseValidator.parse(value);\n }\n \n safeParse(value: unknown): ParseResult<TOutput | null | undefined> {\n if (value === null || value === undefined) {\n return { success: true, data: value as null | undefined };\n }\n return this.baseValidator.safeParse(value);\n }\n}"]}
@@ -0,0 +1,60 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Type for bigint validation check functions
4
+ */
5
+ type BigIntCheck = (value: bigint) => boolean;
6
+ /**
7
+ * Configuration for bigint validator
8
+ */
9
+ interface BigIntValidatorConfig {
10
+ readonly checks: ReadonlyArray<BigIntCheck>;
11
+ readonly errorMessage?: string;
12
+ }
13
+ /**
14
+ * Immutable bigint validator
15
+ */
16
+ export declare class VldBigInt extends VldBase<bigint, bigint> {
17
+ protected readonly config: BigIntValidatorConfig;
18
+ /**
19
+ * Protected constructor to allow extension while maintaining immutability
20
+ */
21
+ protected constructor(config?: Partial<BigIntValidatorConfig>);
22
+ /**
23
+ * Create a new bigint validator
24
+ */
25
+ static create(): VldBigInt;
26
+ /**
27
+ * Parse and validate a bigint value
28
+ */
29
+ parse(value: unknown): bigint;
30
+ /**
31
+ * Safely parse and validate a bigint value
32
+ */
33
+ safeParse(value: unknown): ParseResult<bigint>;
34
+ /**
35
+ * Create a new validator with minimum value constraint
36
+ */
37
+ min(value: bigint, message?: string): VldBigInt;
38
+ /**
39
+ * Create a new validator with maximum value constraint
40
+ */
41
+ max(value: bigint, message?: string): VldBigInt;
42
+ /**
43
+ * Create a new validator that checks for positive values
44
+ */
45
+ positive(message?: string): VldBigInt;
46
+ /**
47
+ * Create a new validator that checks for negative values
48
+ */
49
+ negative(message?: string): VldBigInt;
50
+ /**
51
+ * Create a new validator that checks for non-negative values
52
+ */
53
+ nonnegative(message?: string): VldBigInt;
54
+ /**
55
+ * Create a new validator that checks for non-positive values
56
+ */
57
+ nonpositive(message?: string): VldBigInt;
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=bigint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9C;;GAEG;AACH,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEjD;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAe7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAQ9C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAMzC"}
@@ -0,0 +1,104 @@
1
+ import { VldBase } from './base.js';
2
+ import { getMessages } from '../locales.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
+ //# sourceMappingURL=bigint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../src/validators/bigint.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Type for bigint validation check functions\n */\ntype BigIntCheck = (value: bigint) => boolean;\n\n/**\n * Configuration for bigint validator\n */\ninterface BigIntValidatorConfig {\n readonly checks: ReadonlyArray<BigIntCheck>;\n readonly errorMessage?: string;\n}\n\n/**\n * Immutable bigint validator\n */\nexport class VldBigInt extends VldBase<bigint, bigint> {\n protected readonly config: BigIntValidatorConfig;\n \n /**\n * Protected constructor to allow extension while maintaining immutability\n */\n protected constructor(config?: Partial<BigIntValidatorConfig>) {\n super();\n this.config = {\n checks: config?.checks || [],\n errorMessage: config?.errorMessage\n };\n }\n \n /**\n * Create a new bigint validator\n */\n static create(): VldBigInt {\n return new VldBigInt();\n }\n \n /**\n * Parse and validate a bigint value\n */\n parse(value: unknown): bigint {\n if (typeof value !== 'bigint') {\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\n }\n \n // Apply all checks\n for (const check of this.config.checks) {\n if (!check(value)) {\n throw new Error(this.config.errorMessage || getMessages().invalidBigint);\n }\n }\n \n return value;\n }\n \n /**\n * Safely parse and validate a bigint value\n */\n safeParse(value: unknown): ParseResult<bigint> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n \n /**\n * Create a new validator with minimum value constraint\n */\n min(value: bigint, message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v >= value],\n errorMessage: message || `BigInt must be at least ${value}`\n });\n }\n \n /**\n * Create a new validator with maximum value constraint\n */\n max(value: bigint, message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v <= value],\n errorMessage: message || `BigInt must be at most ${value}`\n });\n }\n \n /**\n * Create a new validator that checks for positive values\n */\n positive(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v > 0n],\n errorMessage: message || 'BigInt must be positive'\n });\n }\n \n /**\n * Create a new validator that checks for negative values\n */\n negative(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v < 0n],\n errorMessage: message || 'BigInt must be negative'\n });\n }\n \n /**\n * Create a new validator that checks for non-negative values\n */\n nonnegative(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v >= 0n],\n errorMessage: message || 'BigInt must be non-negative'\n });\n }\n \n /**\n * Create a new validator that checks for non-positive values\n */\n nonpositive(message?: string): VldBigInt {\n return new VldBigInt({\n checks: [...this.config.checks, (v: bigint) => v <= 0n],\n errorMessage: message || 'BigInt must be non-positive'\n });\n }\n}"]}
@@ -0,0 +1,32 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Immutable boolean validator
4
+ */
5
+ export declare class VldBoolean extends VldBase<boolean, boolean> {
6
+ private readonly errorMessage?;
7
+ /**
8
+ * Protected constructor to allow extension while maintaining immutability
9
+ */
10
+ protected constructor(errorMessage?: string);
11
+ /**
12
+ * Create a new boolean validator
13
+ */
14
+ static create(): VldBoolean;
15
+ /**
16
+ * Parse and validate a boolean value
17
+ */
18
+ parse(value: unknown): boolean;
19
+ /**
20
+ * Safely parse and validate a boolean value
21
+ */
22
+ safeParse(value: unknown): ParseResult<boolean>;
23
+ /**
24
+ * Create a new validator that only accepts true
25
+ */
26
+ true(message?: string): VldBoolean;
27
+ /**
28
+ * Create a new validator that only accepts false
29
+ */
30
+ false(message?: string): VldBoolean;
31
+ }
32
+ //# sourceMappingURL=boolean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/validators/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,UAAW,SAAQ,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAEvC;;OAEG;IACH,SAAS,aAAa,YAAY,CAAC,EAAE,MAAM;IAK3C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,UAAU;IAI3B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAO9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IAU/C;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAIlC;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;CAGpC"}