@cleverbrush/schema 1.1.10 → 2.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 (87) hide show
  1. package/README.md +1314 -101
  2. package/dist/builders/AnySchemaBuilder.d.ts +55 -15
  3. package/dist/builders/AnySchemaBuilder.js +2 -112
  4. package/dist/builders/AnySchemaBuilder.js.map +1 -0
  5. package/dist/builders/ArraySchemaBuilder.d.ts +124 -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 +95 -20
  9. package/dist/builders/BooleanSchemaBuilder.js +2 -150
  10. package/dist/builders/BooleanSchemaBuilder.js.map +1 -0
  11. package/dist/builders/DateSchemaBuilder.d.ts +135 -37
  12. package/dist/builders/DateSchemaBuilder.js +2 -433
  13. package/dist/builders/DateSchemaBuilder.js.map +1 -0
  14. package/dist/builders/ExternSchemaBuilder.d.ts +200 -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 +58 -15
  18. package/dist/builders/FunctionSchemaBuilder.js +2 -113
  19. package/dist/builders/FunctionSchemaBuilder.js.map +1 -0
  20. package/dist/builders/LazySchemaBuilder.d.ts +167 -0
  21. package/dist/builders/NullSchemaBuilder.d.ts +162 -0
  22. package/dist/builders/NumberSchemaBuilder.d.ts +143 -31
  23. package/dist/builders/NumberSchemaBuilder.js +2 -386
  24. package/dist/builders/NumberSchemaBuilder.js.map +1 -0
  25. package/dist/builders/ObjectSchemaBuilder.d.ts +266 -61
  26. package/dist/builders/ObjectSchemaBuilder.js +2 -589
  27. package/dist/builders/ObjectSchemaBuilder.js.map +1 -0
  28. package/dist/builders/PropertyValidationResult.d.ts +68 -0
  29. package/dist/builders/RecordSchemaBuilder.d.ts +341 -0
  30. package/dist/builders/RecordSchemaBuilder.js +2 -0
  31. package/dist/builders/RecordSchemaBuilder.js.map +1 -0
  32. package/dist/builders/SchemaBuilder.d.ts +818 -30
  33. package/dist/builders/StringSchemaBuilder.d.ts +152 -37
  34. package/dist/builders/StringSchemaBuilder.js +2 -414
  35. package/dist/builders/StringSchemaBuilder.js.map +1 -0
  36. package/dist/builders/TupleSchemaBuilder.d.ts +248 -0
  37. package/dist/builders/TupleSchemaBuilder.js +2 -0
  38. package/dist/builders/TupleSchemaBuilder.js.map +1 -0
  39. package/dist/builders/UnionSchemaBuilder.d.ts +133 -39
  40. package/dist/builders/UnionSchemaBuilder.js +2 -216
  41. package/dist/builders/UnionSchemaBuilder.js.map +1 -0
  42. package/dist/chunk-BFCMDDTX.js +2 -0
  43. package/dist/chunk-BFCMDDTX.js.map +1 -0
  44. package/dist/chunk-CTP4RHDG.js +2 -0
  45. package/dist/chunk-CTP4RHDG.js.map +1 -0
  46. package/dist/chunk-EUQ5AE3H.js +2 -0
  47. package/dist/chunk-EUQ5AE3H.js.map +1 -0
  48. package/dist/chunk-FWUEUW2N.js +2 -0
  49. package/dist/chunk-FWUEUW2N.js.map +1 -0
  50. package/dist/chunk-IJ6FO37G.js +2 -0
  51. package/dist/chunk-IJ6FO37G.js.map +1 -0
  52. package/dist/chunk-KESLT5EE.js +2 -0
  53. package/dist/chunk-KESLT5EE.js.map +1 -0
  54. package/dist/chunk-KFTO7TMB.js +2 -0
  55. package/dist/chunk-KFTO7TMB.js.map +1 -0
  56. package/dist/chunk-MKAYFPAR.js +2 -0
  57. package/dist/chunk-MKAYFPAR.js.map +1 -0
  58. package/dist/chunk-NXPH3ZUW.js +2 -0
  59. package/dist/chunk-NXPH3ZUW.js.map +1 -0
  60. package/dist/chunk-S5TC6NSU.js +2 -0
  61. package/dist/chunk-S5TC6NSU.js.map +1 -0
  62. package/dist/chunk-YWBNVHR6.js +2 -0
  63. package/dist/chunk-YWBNVHR6.js.map +1 -0
  64. package/dist/chunk-Z7QZ7IXT.js +2 -0
  65. package/dist/chunk-Z7QZ7IXT.js.map +1 -0
  66. package/dist/chunk-ZAN4ZHCJ.js +2 -0
  67. package/dist/chunk-ZAN4ZHCJ.js.map +1 -0
  68. package/dist/chunk-ZUPYV5TI.js +2 -0
  69. package/dist/chunk-ZUPYV5TI.js.map +1 -0
  70. package/dist/core.d.ts +23 -0
  71. package/dist/core.js +2 -0
  72. package/dist/core.js.map +1 -0
  73. package/dist/extension.d.ts +413 -0
  74. package/dist/extensions/array.d.ts +112 -0
  75. package/dist/extensions/enum.d.ts +190 -0
  76. package/dist/extensions/index.d.ts +108 -0
  77. package/dist/extensions/nullable.d.ts +26 -0
  78. package/dist/extensions/number.d.ts +228 -0
  79. package/dist/extensions/string.d.ts +332 -0
  80. package/dist/extensions/util.d.ts +45 -0
  81. package/dist/index.d.ts +7 -20
  82. package/dist/index.js +2 -19
  83. package/dist/index.js.map +1 -0
  84. package/dist/utils/transaction.d.ts +27 -4
  85. package/package.json +74 -6
  86. package/dist/builders/SchemaBuilder.js +0 -275
  87. 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,29 +106,49 @@ 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>[];
86
- type: string; /**
87
- * @hidden
88
- */
113
+ validators: ValidatorEntry<TResult>[];
114
+ type: string;
89
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
+ hasCatch: boolean;
126
+ catchValue: TResult | (() => TResult) | undefined;
90
127
  };
91
128
  /**
92
- * @hidden
129
+ * @inheritdoc
93
130
  */
94
- hasType<T>(notUsed?: T): DateSchemaBuilder<T, true>;
131
+ hasType<T>(_notUsed?: T): DateSchemaBuilder<T, true, TNullable, THasDefault, TExtensions> & TExtensions;
95
132
  /**
96
- * @hidden
133
+ * @inheritdoc
97
134
  */
98
- clearHasType(): DateSchemaBuilder<Date, TRequired>;
135
+ clearHasType(): DateSchemaBuilder<Date, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
136
+ /** {@inheritDoc SchemaBuilder.validate} */
137
+ validate(object: TResult, context?: ValidationContext): ValidationResult<TResult>;
138
+ /** {@inheritDoc SchemaBuilder.validateAsync} */
139
+ validateAsync(object: TResult, context?: ValidationContext): Promise<ValidationResult<TResult>>;
99
140
  /**
100
- * Performs validion of Date schema over `object`.
141
+ * Performs synchronous validation of Date schema over `object`.
142
+ * Throws if any preprocessor, validator, or error message provider returns a Promise.
101
143
  * @param context Optional `ValidationContext` settings.
102
144
  */
103
- validate(object: TResult, context?: ValidationContext): Promise<ValidationResult<TResult>>;
145
+ protected _validate(object: TResult, context?: ValidationContext): ValidationResult<TResult>;
146
+ /**
147
+ * Performs async validation of Date schema over `object`.
148
+ * Supports async preprocessors, validators, and error message providers.
149
+ * @param context Optional `ValidationContext` settings.
150
+ */
151
+ protected _validateAsync(object: TResult, context?: ValidationContext): Promise<ValidationResult<TResult>>;
104
152
  /**
105
153
  * @hidden
106
154
  */
@@ -108,72 +156,122 @@ export declare class DateSchemaBuilder<TResult = Date, TRequired extends boolean
108
156
  /**
109
157
  * Restricts Date to be equal to `value`.
110
158
  */
111
- equals<T extends Date>(value: T): DateSchemaBuilder<T, TRequired>;
159
+ equals<T extends Date>(value: T,
160
+ /**
161
+ * Custom error message provider.
162
+ */
163
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<T, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
112
164
  /**
113
165
  * Clears `equals()` call.
114
166
  */
115
- clearEquals(): DateSchemaBuilder<Date, TRequired>;
167
+ clearEquals(): DateSchemaBuilder<Date, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
168
+ /**
169
+ * @hidden
170
+ */
171
+ required(errorMessage?: ValidationErrorMessageProvider): DateSchemaBuilder<TResult, true, TNullable, THasDefault, TExtensions> & TExtensions;
172
+ /**
173
+ * @hidden
174
+ */
175
+ optional(): DateSchemaBuilder<TResult, false, TNullable, THasDefault, TExtensions> & TExtensions;
176
+ /**
177
+ * @hidden
178
+ */
179
+ default(value: TResult | (() => TResult)): DateSchemaBuilder<TResult, true, TNullable, true, TExtensions> & TExtensions;
116
180
  /**
117
181
  * @hidden
118
182
  */
119
- required(): DateSchemaBuilder<TResult, true>;
183
+ clearDefault(): DateSchemaBuilder<TResult, TRequired, TNullable, false, TExtensions> & TExtensions;
120
184
  /**
121
185
  * @hidden
122
186
  */
123
- optional(): DateSchemaBuilder<TResult, false>;
187
+ brand<TBrand extends string | symbol>(_name?: TBrand): DateSchemaBuilder<TResult & {
188
+ readonly [K in BRAND]: TBrand;
189
+ }, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
190
+ /**
191
+ * Marks the inferred type as `Readonly<Date>` — prevents mutation of
192
+ * Date methods like `setFullYear()` at the type level. Validation
193
+ * behaviour is unchanged.
194
+ *
195
+ * @see {@link SchemaBuilder.readonly}
196
+ */
197
+ readonly(): DateSchemaBuilder<Readonly<TResult>, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
124
198
  /**
125
199
  * Accept only dates in the future.
126
200
  */
127
- isInFuture(): DateSchemaBuilder<TResult, TRequired>;
201
+ isInFuture(
202
+ /**
203
+ * Custom error message provider.
204
+ */
205
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
128
206
  /**
129
207
  * Cancel `isInFuture()` call.
130
208
  */
131
- clearIsInFuture(): DateSchemaBuilder<TResult, TRequired>;
209
+ clearIsInFuture(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
132
210
  /**
133
211
  * Accept only dates in the past.
134
212
  */
135
- isInPast(): DateSchemaBuilder<TResult, TRequired>;
213
+ isInPast(
214
+ /**
215
+ * Custom error message provider.
216
+ */
217
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
136
218
  /**
137
219
  * Cancel `isInPast()` call.
138
220
  */
139
- clearIsInPast(): DateSchemaBuilder<TResult, TRequired>;
221
+ clearIsInPast(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
140
222
  /**
141
223
  * Set minimal valid Date value for schema.
142
224
  */
143
- min(minValue: Date): DateSchemaBuilder<TResult, TRequired>;
225
+ min(minValue: Date,
226
+ /**
227
+ * Custom error message provider.
228
+ */
229
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
144
230
  /**
145
231
  * Clear `min()` call.
146
232
  */
147
- clearMin(): DateSchemaBuilder<TResult, TRequired>;
233
+ clearMin(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
148
234
  /**
149
235
  * Set maximal valid Date value for schema.
150
236
  */
151
- max(maxValue: Date): DateSchemaBuilder<TResult, TRequired>;
237
+ max(maxValue: Date,
238
+ /**
239
+ * Custom error message provider.
240
+ */
241
+ errorMessage?: ValidationErrorMessageProvider<DateSchemaBuilder<TResult, TRequired>>): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
152
242
  /**
153
243
  * Clear `max()` call.
154
244
  */
155
- clearMax(): DateSchemaBuilder<TResult, TRequired>;
245
+ clearMax(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
156
246
  /**
157
247
  * Accepts JSON string as a valid Date.
158
248
  * String must be in ISO format and will be parsed using `JSON.parse()`.
159
249
  */
160
- acceptJsonString(): DateSchemaBuilder<TResult, TRequired>;
250
+ acceptJsonString(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
161
251
  /**
162
252
  * Cancel `acceptJsonString()` call.
163
253
  */
164
- doNotAcceptJsonString(): DateSchemaBuilder<TResult, TRequired>;
254
+ doNotAcceptJsonString(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
165
255
  /**
166
256
  * Accepts epoch number as a valid Date.
167
257
  * Epoch number will be parsed using `new Date(epoch)`.
168
258
  */
169
- acceptEpoch(): DateSchemaBuilder<TResult, TRequired>;
259
+ acceptEpoch(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
170
260
  /**
171
261
  * Cancel `acceptEpoch()` call.
172
262
  */
173
- doNotAcceptEpoch(): DateSchemaBuilder<TResult, TRequired>;
263
+ doNotAcceptEpoch(): DateSchemaBuilder<TResult, TRequired, TNullable, THasDefault, TExtensions> & TExtensions;
264
+ /**
265
+ * @hidden
266
+ */
267
+ nullable(): DateSchemaBuilder<TResult, TRequired, true, THasDefault, TExtensions> & TExtensions;
268
+ /**
269
+ * @hidden
270
+ */
271
+ notNullable(): DateSchemaBuilder<TResult, TRequired, false, THasDefault, TExtensions> & TExtensions;
174
272
  }
175
273
  /**
176
274
  * Creates a Date schema.
177
275
  */
178
- export declare const date: () => DateSchemaBuilder<Date, true>;
276
+ export declare const date: () => DateSchemaBuilder<Date, true, false, false, {}>;
179
277
  export {};