@cleverbrush/schema 1.1.11 → 3.0.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 (98) hide show
  1. package/README.md +1721 -104
  2. package/dist/builders/AnySchemaBuilder.d.ts +54 -14
  3. package/dist/builders/AnySchemaBuilder.js +2 -112
  4. package/dist/builders/AnySchemaBuilder.js.map +1 -0
  5. package/dist/builders/ArraySchemaBuilder.d.ts +126 -23
  6. package/dist/builders/ArraySchemaBuilder.js +2 -284
  7. package/dist/builders/ArraySchemaBuilder.js.map +1 -0
  8. package/dist/builders/BooleanSchemaBuilder.d.ts +109 -19
  9. package/dist/builders/BooleanSchemaBuilder.js +2 -150
  10. package/dist/builders/BooleanSchemaBuilder.js.map +1 -0
  11. package/dist/builders/DateSchemaBuilder.d.ts +154 -34
  12. package/dist/builders/DateSchemaBuilder.js +2 -433
  13. package/dist/builders/DateSchemaBuilder.js.map +1 -0
  14. package/dist/builders/ExternSchemaBuilder.d.ts +202 -0
  15. package/dist/builders/ExternSchemaBuilder.js +2 -0
  16. package/dist/builders/ExternSchemaBuilder.js.map +1 -0
  17. package/dist/builders/FunctionSchemaBuilder.d.ts +205 -18
  18. package/dist/builders/FunctionSchemaBuilder.js +2 -113
  19. package/dist/builders/FunctionSchemaBuilder.js.map +1 -0
  20. package/dist/builders/GenericSchemaBuilder.d.ts +294 -0
  21. package/dist/builders/LazySchemaBuilder.d.ts +169 -0
  22. package/dist/builders/NullSchemaBuilder.d.ts +162 -0
  23. package/dist/builders/NumberSchemaBuilder.d.ts +159 -31
  24. package/dist/builders/NumberSchemaBuilder.js +2 -386
  25. package/dist/builders/NumberSchemaBuilder.js.map +1 -0
  26. package/dist/builders/ObjectSchemaBuilder.d.ts +486 -61
  27. package/dist/builders/ObjectSchemaBuilder.js +2 -589
  28. package/dist/builders/ObjectSchemaBuilder.js.map +1 -0
  29. package/dist/builders/ParseStringSchemaBuilder.d.ts +204 -0
  30. package/dist/builders/ParseStringSchemaBuilder.js +2 -0
  31. package/dist/builders/ParseStringSchemaBuilder.js.map +1 -0
  32. package/dist/builders/PromiseSchemaBuilder.d.ts +213 -0
  33. package/dist/builders/PromiseSchemaBuilder.js +2 -0
  34. package/dist/builders/PromiseSchemaBuilder.js.map +1 -0
  35. package/dist/builders/PropertyValidationResult.d.ts +68 -0
  36. package/dist/builders/RecordSchemaBuilder.d.ts +343 -0
  37. package/dist/builders/RecordSchemaBuilder.js +2 -0
  38. package/dist/builders/RecordSchemaBuilder.js.map +1 -0
  39. package/dist/builders/SchemaBuilder.d.ts +907 -30
  40. package/dist/builders/StringSchemaBuilder.d.ts +154 -37
  41. package/dist/builders/StringSchemaBuilder.js +2 -414
  42. package/dist/builders/StringSchemaBuilder.js.map +1 -0
  43. package/dist/builders/TupleSchemaBuilder.d.ts +250 -0
  44. package/dist/builders/TupleSchemaBuilder.js +2 -0
  45. package/dist/builders/TupleSchemaBuilder.js.map +1 -0
  46. package/dist/builders/UnionSchemaBuilder.d.ts +141 -39
  47. package/dist/builders/UnionSchemaBuilder.js +2 -216
  48. package/dist/builders/UnionSchemaBuilder.js.map +1 -0
  49. package/dist/chunk-3JMDGYDT.js +2 -0
  50. package/dist/chunk-3JMDGYDT.js.map +1 -0
  51. package/dist/chunk-BUEVZ3KA.js +2 -0
  52. package/dist/chunk-BUEVZ3KA.js.map +1 -0
  53. package/dist/chunk-CFIJQ4GP.js +2 -0
  54. package/dist/chunk-CFIJQ4GP.js.map +1 -0
  55. package/dist/chunk-DY7J6RNN.js +2 -0
  56. package/dist/chunk-DY7J6RNN.js.map +1 -0
  57. package/dist/chunk-EIVZX4ZO.js +2 -0
  58. package/dist/chunk-EIVZX4ZO.js.map +1 -0
  59. package/dist/chunk-GXPV6UQK.js +2 -0
  60. package/dist/chunk-GXPV6UQK.js.map +1 -0
  61. package/dist/chunk-HN774HD7.js +2 -0
  62. package/dist/chunk-HN774HD7.js.map +1 -0
  63. package/dist/chunk-K6Z47OQY.js +2 -0
  64. package/dist/chunk-K6Z47OQY.js.map +1 -0
  65. package/dist/chunk-NUW3VXZV.js +2 -0
  66. package/dist/chunk-NUW3VXZV.js.map +1 -0
  67. package/dist/chunk-PHE4LIAN.js +2 -0
  68. package/dist/chunk-PHE4LIAN.js.map +1 -0
  69. package/dist/chunk-QARCEYGO.js +2 -0
  70. package/dist/chunk-QARCEYGO.js.map +1 -0
  71. package/dist/chunk-WDMJBGBD.js +2 -0
  72. package/dist/chunk-WDMJBGBD.js.map +1 -0
  73. package/dist/chunk-WQDYWDOE.js +2 -0
  74. package/dist/chunk-WQDYWDOE.js.map +1 -0
  75. package/dist/chunk-YQZHDMRF.js +2 -0
  76. package/dist/chunk-YQZHDMRF.js.map +1 -0
  77. package/dist/chunk-ZC6YBKCP.js +2 -0
  78. package/dist/chunk-ZC6YBKCP.js.map +1 -0
  79. package/dist/chunk-ZFI27R3L.js +2 -0
  80. package/dist/chunk-ZFI27R3L.js.map +1 -0
  81. package/dist/core.d.ts +28 -0
  82. package/dist/core.js +2 -0
  83. package/dist/core.js.map +1 -0
  84. package/dist/extension.d.ts +421 -0
  85. package/dist/extensions/array.d.ts +112 -0
  86. package/dist/extensions/enum.d.ts +190 -0
  87. package/dist/extensions/index.d.ts +112 -0
  88. package/dist/extensions/nullable.d.ts +26 -0
  89. package/dist/extensions/number.d.ts +228 -0
  90. package/dist/extensions/string.d.ts +332 -0
  91. package/dist/extensions/util.d.ts +45 -0
  92. package/dist/index.d.ts +10 -20
  93. package/dist/index.js +2 -19
  94. package/dist/index.js.map +1 -0
  95. package/dist/utils/transaction.d.ts +27 -4
  96. package/package.json +83 -7
  97. package/dist/builders/SchemaBuilder.js +0 -275
  98. package/dist/utils/transaction.js +0 -178
@@ -1,5 +1,5 @@
1
- import { Preprocessor, SchemaBuilder, ValidationResult, ValidationContext, Validator } from './SchemaBuilder.js';
2
- type DateSchemaBuilderCreateProps<T = Date, R extends boolean = true> = Partial<ReturnType<DateSchemaBuilder<T, R>['introspect']>>;
1
+ import { type BRAND, type PreprocessorEntry, SchemaBuilder, type ValidationContext, type ValidationErrorMessageProvider, type ValidationResult, type ValidatorEntry } from './SchemaBuilder.js';
2
+ type DateSchemaBuilderCreateProps<T = Date, R extends boolean = true> = Partial<ReturnType<DateSchemaBuilder<T, R, any>['introspect']>>;
3
3
  /**
4
4
  * Allows to create Date schema. It can be required or optional.
5
5
  * It can be restricted to be: equal to a certain value, in future, in past, in a certain range.
@@ -12,59 +12,87 @@ type DateSchemaBuilderCreateProps<T = Date, R extends boolean = true> = Partial<
12
12
  * @example ```ts
13
13
  * const date = new Date(2020, 0, 2);
14
14
  * const schema = date().min(new Date(2020, 0, 1));
15
- * const result = await schema.validate(date);
15
+ * const result = schema.validate(date);
16
16
  * // result.valid === true
17
17
  * // result.object === date
18
18
  * ```
19
19
  *
20
20
  * @example ```ts
21
21
  * const schema = date();
22
- * const result = await schema.validate('2020-01-01');
22
+ * const result = schema.validate('2020-01-01');
23
23
  * // result.valid === false
24
24
  * // result.errors[0].message === 'is expected to be a date'
25
25
  * ```
26
26
  *
27
27
  * @example ```ts
28
28
  * const schema = date().parseFromJson();
29
- * const result = await schema.validate('2020-01-01T00:00:00.000Z');
29
+ * const result = schema.validate('2020-01-01T00:00:00.000Z');
30
30
  * // result.valid === true
31
31
  * // result.object is equal to corresponding Date object
32
32
  * ```
33
33
  *
34
34
  * @example ```ts
35
35
  * const schema = date().parseFromEpoch();
36
- * const result = await schema.validate(1577836800000);
36
+ * const result = schema.validate(1577836800000);
37
37
  * // result.valid === true
38
38
  * // result.object is equal to corresponding Date object
39
39
  * ```
40
40
  *
41
41
  * @see {@link date}
42
42
  */
43
- export declare class DateSchemaBuilder<TResult = Date, TRequired extends boolean = true> extends SchemaBuilder<TResult, TRequired> {
43
+ export declare class DateSchemaBuilder<TResult = Date, TRequired extends boolean = true, TNullable extends boolean = false, THasDefault extends boolean = false, TExtensions = {}> extends SchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> {
44
44
  #private;
45
- static create(props: DateSchemaBuilderCreateProps): DateSchemaBuilder<Date, true>;
46
- private constructor();
45
+ /**
46
+ * @hidden
47
+ */
48
+ static create(props: DateSchemaBuilderCreateProps): DateSchemaBuilder<Date, true, false, false, {}>;
49
+ protected constructor(props: DateSchemaBuilderCreateProps);
47
50
  introspect(): {
48
51
  /**
49
52
  * Min valid value (if defined).
50
53
  */
51
54
  min: Date | undefined;
55
+ /**
56
+ * Min value validation error message provider.
57
+ * If not provided, default error message will be used.
58
+ */
59
+ minValidationErrorMessageProvider: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired, false, false, {}>>;
52
60
  /**
53
61
  * Max valid value (if defined).
54
62
  */
55
63
  max: Date | undefined;
64
+ /**
65
+ * Max value validation error message provider.
66
+ * If not provided, default error message will be used.
67
+ */
68
+ maxValidationErrorMessageProvider: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired, false, false, {}>>;
56
69
  /**
57
70
  * Make sure that date is in future. `false` by default.
58
71
  */
59
72
  ensureIsInFuture: boolean;
73
+ /**
74
+ * Ensure in future validation error message provider.
75
+ * If not provided, default error message will be used.
76
+ */
77
+ ensureIsInFutureValidationErrorMessageProvider: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired, false, false, {}>>;
60
78
  /**
61
79
  * Make sure that date is in past. `false` by default.
62
80
  */
63
81
  ensureIsInPast: boolean;
82
+ /**
83
+ * Ensure in past validation error message provider.
84
+ * If not provided, default error message will be used.
85
+ */
86
+ ensureIsInPastValidationErrorMessageProvider: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired, false, false, {}>>;
64
87
  /**
65
88
  * If set, restrict date to be equal to a certain value.
66
89
  */
67
90
  equalsTo: Date | undefined;
91
+ /**
92
+ * Equals to validation error message provider.
93
+ * If not provided, default error message will be used.
94
+ */
95
+ equalsToValidationErrorMessageProvider: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired, false, false, {}>>;
68
96
  /**
69
97
  * If set, schema will try to parse date from the UNIX epoch (number).
70
98
  * `false` by default.
@@ -78,27 +106,51 @@ export declare class DateSchemaBuilder<TResult = Date, TRequired extends boolean
78
106
  /**
79
107
  * Array of preprocessor functions
80
108
  */
81
- preprocessors: Preprocessor<TResult>[];
109
+ preprocessors: PreprocessorEntry<TResult>[];
82
110
  /**
83
111
  * Array of validator functions
84
112
  */
85
- validators: Validator<TResult>[];
113
+ validators: ValidatorEntry<TResult>[];
86
114
  type: string;
87
115
  isRequired: boolean;
116
+ isNullable: boolean;
117
+ isReadonly: boolean;
118
+ requiredValidationErrorMessageProvider: ValidationErrorMessageProvider<SchemaBuilder<any, any, any, any, any>>;
119
+ extensions: {
120
+ [x: string]: unknown;
121
+ };
122
+ hasDefault: boolean;
123
+ defaultValue: TResult | (() => TResult) | undefined;
124
+ description: string | undefined;
125
+ schemaName: string | undefined;
126
+ hasCatch: boolean;
127
+ catchValue: TResult | (() => TResult) | undefined;
128
+ example: unknown;
88
129
  };
89
130
  /**
90
- * @hidden
131
+ * @inheritdoc
91
132
  */
92
- hasType<T>(notUsed?: T): DateSchemaBuilder<T, true>;
133
+ hasType<T>(_notUsed?: T): DateSchemaBuilder<T, true, TNullable, THasDefault, TExtensions> & TExtensions;
93
134
  /**
94
- * @hidden
135
+ * @inheritdoc
136
+ */
137
+ clearHasType(): DateSchemaBuilder<Date, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
138
+ /** {@inheritDoc SchemaBuilder.validate} */
139
+ validate(object: TResult, context?: ValidationContext): ValidationResult<TResult>;
140
+ /** {@inheritDoc SchemaBuilder.validateAsync} */
141
+ validateAsync(object: TResult, context?: ValidationContext): Promise<ValidationResult<TResult>>;
142
+ /**
143
+ * Performs synchronous validation of Date schema over `object`.
144
+ * Throws if any preprocessor, validator, or error message provider returns a Promise.
145
+ * @param context Optional `ValidationContext` settings.
95
146
  */
96
- clearHasType(): DateSchemaBuilder<Date, TRequired>;
147
+ protected _validate(object: TResult, context?: ValidationContext): ValidationResult<TResult>;
97
148
  /**
98
- * Performs validion of Date schema over `object`.
149
+ * Performs async validation of Date schema over `object`.
150
+ * Supports async preprocessors, validators, and error message providers.
99
151
  * @param context Optional `ValidationContext` settings.
100
152
  */
101
- validate(object: TResult, context?: ValidationContext): Promise<ValidationResult<TResult>>;
153
+ protected _validateAsync(object: TResult, context?: ValidationContext): Promise<ValidationResult<TResult>>;
102
154
  /**
103
155
  * @hidden
104
156
  */
@@ -106,72 +158,140 @@ export declare class DateSchemaBuilder<TResult = Date, TRequired extends boolean
106
158
  /**
107
159
  * Restricts Date to be equal to `value`.
108
160
  */
109
- equals<T extends Date>(value: T): DateSchemaBuilder<T, TRequired>;
161
+ equals<T extends Date>(value: T,
162
+ /**
163
+ * Custom error message provider.
164
+ */
165
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<T, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
110
166
  /**
111
167
  * Clears `equals()` call.
112
168
  */
113
- clearEquals(): DateSchemaBuilder<Date, TRequired>;
169
+ clearEquals(): DateSchemaBuilder<Date, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
170
+ /**
171
+ * @hidden
172
+ */
173
+ required(errorMessage?: ValidationErrorMessageProvider): DateSchemaBuilder<TResult, true, TNullable, THasDefault, TExtensions> & TExtensions;
114
174
  /**
115
175
  * @hidden
116
176
  */
117
- required(): DateSchemaBuilder<TResult, true>;
177
+ optional(): DateSchemaBuilder<TResult, false, TNullable, THasDefault, TExtensions> & TExtensions;
118
178
  /**
119
179
  * @hidden
120
180
  */
121
- optional(): DateSchemaBuilder<TResult, false>;
181
+ default(value: TResult | (() => TResult)): DateSchemaBuilder<TResult, true, TNullable, true, TExtensions> & TExtensions;
182
+ /**
183
+ * @hidden
184
+ */
185
+ clearDefault(): DateSchemaBuilder<TResult, TRequired, TNullable, false, TExtensions> & TExtensions;
186
+ /**
187
+ * @hidden
188
+ */
189
+ brand<TBrand extends string | symbol>(_name?: TBrand): DateSchemaBuilder<TResult & {
190
+ readonly [K in BRAND]: TBrand;
191
+ }, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
192
+ /**
193
+ * Marks the inferred type as `Readonly<Date>` — prevents mutation of
194
+ * Date methods like `setFullYear()` at the type level. Validation
195
+ * behaviour is unchanged.
196
+ *
197
+ * @see {@link SchemaBuilder.readonly}
198
+ */
199
+ readonly(): DateSchemaBuilder<Readonly<TResult>, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
122
200
  /**
123
201
  * Accept only dates in the future.
124
202
  */
125
- isInFuture(): DateSchemaBuilder<TResult, TRequired>;
203
+ isInFuture(
204
+ /**
205
+ * Custom error message provider.
206
+ */
207
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
126
208
  /**
127
209
  * Cancel `isInFuture()` call.
128
210
  */
129
- clearIsInFuture(): DateSchemaBuilder<TResult, TRequired>;
211
+ clearIsInFuture(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
130
212
  /**
131
213
  * Accept only dates in the past.
132
214
  */
133
- isInPast(): DateSchemaBuilder<TResult, TRequired>;
215
+ isInPast(
216
+ /**
217
+ * Custom error message provider.
218
+ */
219
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
134
220
  /**
135
221
  * Cancel `isInPast()` call.
136
222
  */
137
- clearIsInPast(): DateSchemaBuilder<TResult, TRequired>;
223
+ clearIsInPast(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
138
224
  /**
139
225
  * Set minimal valid Date value for schema.
140
226
  */
141
- min(minValue: Date): DateSchemaBuilder<TResult, TRequired>;
227
+ min(minValue: Date,
228
+ /**
229
+ * Custom error message provider.
230
+ */
231
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
142
232
  /**
143
233
  * Clear `min()` call.
144
234
  */
145
- clearMin(): DateSchemaBuilder<TResult, TRequired>;
235
+ clearMin(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
146
236
  /**
147
237
  * Set maximal valid Date value for schema.
148
238
  */
149
- max(maxValue: Date): DateSchemaBuilder<TResult, TRequired>;
239
+ max(maxValue: Date,
240
+ /**
241
+ * Custom error message provider.
242
+ */
243
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
150
244
  /**
151
245
  * Clear `max()` call.
152
246
  */
153
- clearMax(): DateSchemaBuilder<TResult, TRequired>;
247
+ clearMax(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
248
+ /**
249
+ * Adds a preprocessor that coerces a string value to a Date
250
+ * using `new Date(value)`. If the string does not represent a
251
+ * valid date the original value is left unchanged so the date
252
+ * schema rejects it.
253
+ *
254
+ * This is a convenient alias for common string→Date coercion.
255
+ * For more specific parsing, see {@link acceptJsonString} and
256
+ * {@link acceptEpoch}.
257
+ *
258
+ * @example ```ts
259
+ * const schema = date().coerce();
260
+ * const result = schema.validate('2024-01-15');
261
+ * // result.valid === true
262
+ * // result.object instanceof Date === true
263
+ * ```
264
+ */
265
+ coerce(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
154
266
  /**
155
267
  * Accepts JSON string as a valid Date.
156
268
  * String must be in ISO format and will be parsed using `JSON.parse()`.
157
269
  */
158
- acceptJsonString(): DateSchemaBuilder<TResult, TRequired>;
270
+ acceptJsonString(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
159
271
  /**
160
272
  * Cancel `acceptJsonString()` call.
161
273
  */
162
- doNotAcceptJsonString(): DateSchemaBuilder<TResult, TRequired>;
274
+ doNotAcceptJsonString(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
163
275
  /**
164
276
  * Accepts epoch number as a valid Date.
165
277
  * Epoch number will be parsed using `new Date(epoch)`.
166
278
  */
167
- acceptEpoch(): DateSchemaBuilder<TResult, TRequired>;
279
+ acceptEpoch(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
168
280
  /**
169
281
  * Cancel `acceptEpoch()` call.
170
282
  */
171
- doNotAcceptEpoch(): DateSchemaBuilder<TResult, TRequired>;
283
+ doNotAcceptEpoch(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
284
+ /**
285
+ * @hidden
286
+ */
287
+ nullable(): DateSchemaBuilder<TResult, TRequired, true, THasDefault, TExtensions> & TExtensions;
288
+ /**
289
+ * @hidden
290
+ */
291
+ notNullable(): DateSchemaBuilder<TResult, TRequired, false, THasDefault, TExtensions> & TExtensions;
172
292
  }
173
293
  /**
174
294
  * Creates a Date schema.
175
295
  */
176
- export declare const date: () => DateSchemaBuilder<Date, true>;
296
+ export declare const date: () => DateSchemaBuilder<Date, true, false, false, {}>;
177
297
  export {};