@cleverbrush/schema 1.0.0-beta.5 → 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 (76) hide show
  1. package/README.md +118 -320
  2. package/dist/builders/AnySchemaBuilder.d.ts +76 -0
  3. package/dist/builders/AnySchemaBuilder.js +112 -0
  4. package/dist/builders/ArraySchemaBuilder.d.ts +112 -14
  5. package/dist/builders/ArraySchemaBuilder.js +254 -111
  6. package/dist/builders/BooleanSchemaBuilder.d.ts +69 -29
  7. package/dist/builders/BooleanSchemaBuilder.js +134 -74
  8. package/dist/builders/DateSchemaBuilder.d.ts +179 -0
  9. package/dist/builders/DateSchemaBuilder.js +433 -0
  10. package/dist/builders/FunctionSchemaBuilder.d.ts +59 -25
  11. package/dist/builders/FunctionSchemaBuilder.js +102 -58
  12. package/dist/builders/NumberSchemaBuilder.d.ts +159 -59
  13. package/dist/builders/NumberSchemaBuilder.js +345 -165
  14. package/dist/builders/ObjectSchemaBuilder.d.ts +310 -81
  15. package/dist/builders/ObjectSchemaBuilder.js +528 -283
  16. package/dist/builders/SchemaBuilder.d.ts +157 -34
  17. package/dist/builders/SchemaBuilder.js +258 -71
  18. package/dist/builders/StringSchemaBuilder.d.ts +138 -13
  19. package/dist/builders/StringSchemaBuilder.js +261 -115
  20. package/dist/builders/UnionSchemaBuilder.d.ts +132 -9
  21. package/dist/builders/UnionSchemaBuilder.js +196 -75
  22. package/dist/index.d.ts +20 -40
  23. package/dist/index.js +19 -32
  24. package/dist/utils/transaction.d.ts +46 -0
  25. package/dist/utils/transaction.js +178 -0
  26. package/package.json +27 -14
  27. package/dist/defaultSchemas.d.ts +0 -4
  28. package/dist/defaultSchemas.js +0 -45
  29. package/dist/schema.d.ts +0 -231
  30. package/dist/schema.js +0 -2
  31. package/dist/schemaRegistry.d.ts +0 -49
  32. package/dist/schemaRegistry.js +0 -278
  33. package/dist/validators/validateArray.d.ts +0 -3
  34. package/dist/validators/validateArray.js +0 -60
  35. package/dist/validators/validateBoolean.d.ts +0 -2
  36. package/dist/validators/validateBoolean.js +0 -30
  37. package/dist/validators/validateFunction.d.ts +0 -2
  38. package/dist/validators/validateFunction.js +0 -21
  39. package/dist/validators/validateNumber.d.ts +0 -2
  40. package/dist/validators/validateNumber.js +0 -69
  41. package/dist/validators/validateObject.d.ts +0 -3
  42. package/dist/validators/validateObject.js +0 -95
  43. package/dist/validators/validateString.d.ts +0 -2
  44. package/dist/validators/validateString.js +0 -50
  45. package/dist/validators/validateUnion.d.ts +0 -3
  46. package/dist/validators/validateUnion.js +0 -30
  47. package/src/builders/ArraySchemaBuilder.test.ts +0 -270
  48. package/src/builders/ArraySchemaBuilder.ts +0 -381
  49. package/src/builders/BooleanSchemaBuilder.test.ts +0 -196
  50. package/src/builders/BooleanSchemaBuilder.ts +0 -155
  51. package/src/builders/FunctionSchemaBuilder.test.ts +0 -145
  52. package/src/builders/FunctionSchemaBuilder.ts +0 -117
  53. package/src/builders/NumberSchemaBuilder.test.ts +0 -493
  54. package/src/builders/NumberSchemaBuilder.ts +0 -789
  55. package/src/builders/ObjectSchemaBuilder.test.ts +0 -657
  56. package/src/builders/ObjectSchemaBuilder.ts +0 -794
  57. package/src/builders/SchemaBuilder.test.ts +0 -73
  58. package/src/builders/SchemaBuilder.ts +0 -135
  59. package/src/builders/StringSchemaBuilder.test.ts +0 -318
  60. package/src/builders/StringSchemaBuilder.ts +0 -392
  61. package/src/builders/UnionSchemaBuilder.test.ts +0 -162
  62. package/src/builders/UnionSchemaBuilder.ts +0 -154
  63. package/src/defaultSchemas.ts +0 -44
  64. package/src/index.ts +0 -66
  65. package/src/schema.ts +0 -849
  66. package/src/schemaRegistry.builders.test.ts +0 -1393
  67. package/src/schemaRegistry.test.ts +0 -118
  68. package/src/schemaRegistry.ts +0 -461
  69. package/src/validators/validateArray.ts +0 -76
  70. package/src/validators/validateBoolean.ts +0 -36
  71. package/src/validators/validateFunction.ts +0 -25
  72. package/src/validators/validateNumber.ts +0 -82
  73. package/src/validators/validateObject.ts +0 -119
  74. package/src/validators/validateString.ts +0 -59
  75. package/src/validators/validateUnion.ts +0 -36
  76. package/tsconfig.json +0 -16
package/src/schema.ts DELETED
@@ -1,849 +0,0 @@
1
- import { ISchemaBuilder } from './builders/SchemaBuilder.js';
2
- import { IUnionSchemaBuilder } from './builders/UnionSchemaBuilder.js';
3
- import { IStringSchemaBuilder } from './builders/StringSchemaBuilder.js';
4
- import { IObjectSchemaBuilder } from './builders/ObjectSchemaBuilder.js';
5
- import { INumberSchemaBuilder } from './builders/NumberSchemaBuilder.js';
6
- import { IArraySchemaBuilder } from './builders/ArraySchemaBuilder.js';
7
- import { IBooleanSchemaBuilder } from './builders/BooleanSchemaBuilder.js';
8
- import { IFunctionSchemaBuilder } from './builders/FunctionSchemaBuilder.js';
9
- import { ISchemaRegistry } from './index.js';
10
-
11
- export type DefaultSchemaType =
12
- | 'alias'
13
- | 'boolean'
14
- | 'number'
15
- | 'string'
16
- | 'array'
17
- | 'object'
18
- | 'union'
19
- | 'function';
20
-
21
- export type KeysWithNoNever<T> = {
22
- [k in keyof T]: T[k] extends never ? never : k;
23
- }[keyof T];
24
-
25
- export type OmitNever<T> = {
26
- [k in KeysWithNoNever<T>]: T[k];
27
- };
28
-
29
- type MakePropOptional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
30
-
31
- export type Union<T1, T2> = {
32
- [k in keyof Omit<T1, keyof T2>]: T1[k];
33
- } & T2;
34
-
35
- export type DefaultCommonSchema = {
36
- isRequired: true;
37
- isNullable: false;
38
- };
39
-
40
- export type DefaultBooleanSchema = DefaultCommonSchema & {
41
- type: 'boolean';
42
- };
43
- export type DefaultNumberSchema = DefaultCommonSchema & {
44
- type: 'number';
45
- ensureNotNaN: true;
46
- ensureIsFinite: true;
47
- };
48
-
49
- export type DefaultStringSchema = DefaultCommonSchema & {
50
- type: 'string';
51
- };
52
-
53
- export type DefaultArraySchema = DefaultCommonSchema & {
54
- type: 'array';
55
- };
56
-
57
- export type DefaultUnionSchema = DefaultCommonSchema & {
58
- type: 'union';
59
- };
60
-
61
- export type DefaultObjectSchema = DefaultCommonSchema & {
62
- type: 'object';
63
- noUnknownProperties: true;
64
- };
65
-
66
- export type DefaultFunctionSchema = DefaultCommonSchema & {
67
- type: 'function';
68
- };
69
-
70
- export type ValidationResultRaw = {
71
- valid: boolean;
72
- errors?: Array<string>;
73
- };
74
-
75
- export type ValidationResult =
76
- | ValidationResultRaw
77
- | Promise<ValidationResultRaw>;
78
-
79
- export type ValidationResultWithObject<T> = {
80
- valid: boolean;
81
- errors?: Array<string>;
82
- object?: T;
83
- };
84
- export type Validator = (value: any) => ValidationResult;
85
-
86
- export type CommonSchemaSpecification<
87
- TRequired extends boolean = true,
88
- TNullable extends boolean = false
89
- > = {
90
- isRequired?: TRequired;
91
- isNullable?: TNullable;
92
- validators?: Array<Validator>;
93
- };
94
- export type BooleanSchema = CommonSchemaSpecification<any, any> & {
95
- type: 'boolean';
96
- equals?: boolean;
97
- };
98
-
99
- export type NumberSchema = CommonSchemaSpecification<any, any> & {
100
- type: 'number';
101
- min?: number;
102
- max?: number;
103
- equals?: number;
104
- isInteger?: boolean;
105
- ensureNotNaN?: boolean;
106
- ensureIsFinite?: boolean;
107
- };
108
-
109
- export type ArraySchema<T> = CommonSchemaSpecification<any, any> & {
110
- type: 'array';
111
- preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
112
- ofType?: T;
113
- minLength?: number;
114
- maxLength?: number;
115
- };
116
-
117
- export type ObjectSchema<T extends Record<string, Schema> = never> =
118
- CommonSchemaSpecification<any, any> & {
119
- type: 'object';
120
- noUnknownProperties?: boolean;
121
- properties?: T;
122
- preprocessors?: {
123
- [S in keyof T | '*']?: S extends keyof T
124
- ?
125
- | ((
126
- value: any
127
- ) =>
128
- | undefined
129
- | InferType<T[S]>
130
- | Promise<InferType<T[S]>>)
131
- | string
132
- : (value: InferType<T>) => void | Promise<void>;
133
- };
134
- };
135
-
136
- export type AliasSchema = CommonSchemaSpecification<any, any> & {
137
- type: 'alias';
138
- schemaName: string;
139
- externalRegistry?: ISchemaRegistry<any>;
140
- };
141
-
142
- export type UnionSchema<T extends any[]> = CommonSchemaSpecification<
143
- any,
144
- any
145
- > & {
146
- type: 'union';
147
- variants: T;
148
- };
149
-
150
- export type StringSchema = CommonSchemaSpecification<any, any> & {
151
- type: 'string';
152
- equals?: string;
153
- minLength?: number;
154
- maxLength?: number;
155
- };
156
-
157
- export type FunctionSchema = CommonSchemaSpecification<any, any> & {
158
- type: 'function';
159
- };
160
-
161
- export type SchemaSpecification =
162
- | ObjectSchema
163
- | BooleanSchema
164
- | NumberSchema
165
- | ArraySchema<any>
166
- | AliasSchema
167
- | UnionSchema<any>
168
- | StringSchema
169
- | FunctionSchema;
170
-
171
- export type Schema<T = any> = T extends Record<string, any>
172
- ? any
173
- : T extends number
174
- ? NumberSchema | number | 'number'
175
- : T extends string
176
- ? StringSchema | string | 'string'
177
- : T extends boolean
178
- ? BooleanSchema | boolean
179
- : number | DefaultSchemaType | SchemaSpecification | Schema[];
180
-
181
- export type MakeOptional<T> = T extends IUnionSchemaBuilder<
182
- infer TRequired,
183
- infer TNullable,
184
- infer TVariants
185
- >
186
- ? IUnionSchemaBuilder<false, TNullable, TVariants>
187
- : T extends IStringSchemaBuilder<
188
- infer TRequired,
189
- infer TNullable,
190
- infer TMinLength,
191
- infer TMaxLength,
192
- infer TEqualsTo
193
- >
194
- ? IStringSchemaBuilder<false, TNullable, TMinLength, TMaxLength, TEqualsTo>
195
- : T extends IObjectSchemaBuilder<
196
- infer TRequired,
197
- infer TNullable,
198
- infer TNoUnknownProperties,
199
- infer TProperties,
200
- infer TMapToType
201
- >
202
- ? IObjectSchemaBuilder<
203
- false,
204
- TNullable,
205
- TNoUnknownProperties,
206
- TProperties,
207
- TMapToType
208
- >
209
- : T extends INumberSchemaBuilder<
210
- infer TRequired,
211
- infer TNullable,
212
- infer TMin,
213
- infer TMax,
214
- infer TIsInteger,
215
- infer TEnsureNotNaN,
216
- infer TEnsureIsFinite,
217
- infer TEqualsTo
218
- >
219
- ? INumberSchemaBuilder<
220
- false,
221
- TNullable,
222
- TMin,
223
- TMax,
224
- TIsInteger,
225
- TEnsureNotNaN,
226
- TEnsureIsFinite,
227
- TEqualsTo
228
- >
229
- : T extends IArraySchemaBuilder<
230
- infer TRequired,
231
- infer TNullable,
232
- infer TOfType,
233
- infer TMaxLength,
234
- infer TMinLength
235
- >
236
- ? IArraySchemaBuilder<false, TNullable, TOfType, TMaxLength, TMinLength>
237
- : T extends IBooleanSchemaBuilder<
238
- infer TRequired,
239
- infer TNullable,
240
- infer TEqualsTo
241
- >
242
- ? IBooleanSchemaBuilder<false, TNullable, TEqualsTo>
243
- : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable>
244
- ? IFunctionSchemaBuilder<false, TNullable>
245
- : T & { isRequired: false };
246
-
247
- export type MakeRequired<T> = T extends IUnionSchemaBuilder<
248
- infer TRequired,
249
- infer TNullable,
250
- infer TVariants
251
- >
252
- ? IUnionSchemaBuilder<true, TNullable, TVariants>
253
- : T extends IStringSchemaBuilder<
254
- infer TRequired,
255
- infer TNullable,
256
- infer TMinLength,
257
- infer TMaxLength,
258
- infer TEqualsTo
259
- >
260
- ? IStringSchemaBuilder<true, TNullable, TMinLength, TMaxLength, TEqualsTo>
261
- : T extends IObjectSchemaBuilder<
262
- infer TRequired,
263
- infer TNullable,
264
- infer TNoUnknownProperties,
265
- infer TProperties,
266
- infer TMapToType
267
- >
268
- ? IObjectSchemaBuilder<
269
- true,
270
- TNullable,
271
- TNoUnknownProperties,
272
- TProperties,
273
- TMapToType
274
- >
275
- : T extends INumberSchemaBuilder<
276
- infer TRequired,
277
- infer TNullable,
278
- infer TMin,
279
- infer TMax,
280
- infer TIsInteger,
281
- infer TEnsureNotNaN,
282
- infer TEnsureIsFinite,
283
- infer TEqualsTo
284
- >
285
- ? INumberSchemaBuilder<
286
- true,
287
- TNullable,
288
- TMin,
289
- TMax,
290
- TIsInteger,
291
- TEnsureNotNaN,
292
- TEnsureIsFinite,
293
- TEqualsTo
294
- >
295
- : T extends IArraySchemaBuilder<
296
- infer TRequired,
297
- infer TNullable,
298
- infer TOfType,
299
- infer TMaxLength,
300
- infer TMinLength
301
- >
302
- ? IArraySchemaBuilder<true, TNullable, TOfType, TMaxLength, TMinLength>
303
- : T extends IBooleanSchemaBuilder<
304
- infer TRequired,
305
- infer TNullable,
306
- infer TEqualsTo
307
- >
308
- ? IBooleanSchemaBuilder<true, TNullable, TEqualsTo>
309
- : T extends IFunctionSchemaBuilder<
310
- infer TRequired,
311
- infer TNullable,
312
- infer TMapToType
313
- >
314
- ? IFunctionSchemaBuilder<true, TNullable, TMapToType>
315
- : T & { isRequired: true };
316
-
317
- export type MakeNullable<T> = T extends IUnionSchemaBuilder<
318
- infer TRequired,
319
- infer TNullable,
320
- infer TVariants
321
- >
322
- ? IUnionSchemaBuilder<TRequired, true, TVariants>
323
- : T extends IStringSchemaBuilder<
324
- infer TRequired,
325
- infer TNullable,
326
- infer TMinLength,
327
- infer TMaxLength,
328
- infer TEqualsTo
329
- >
330
- ? IStringSchemaBuilder<TRequired, true, TMinLength, TMaxLength, TEqualsTo>
331
- : T extends IObjectSchemaBuilder<
332
- infer TRequired,
333
- infer TNullable,
334
- infer TNoUnknownProperties,
335
- infer TProperties,
336
- infer TMapToType
337
- >
338
- ? IObjectSchemaBuilder<
339
- TRequired,
340
- true,
341
- TNoUnknownProperties,
342
- TProperties,
343
- TMapToType
344
- >
345
- : T extends INumberSchemaBuilder<
346
- infer TRequired,
347
- infer TNullable,
348
- infer TMin,
349
- infer TMax,
350
- infer TIsInteger,
351
- infer TEnsureNotNaN,
352
- infer TEnsureIsFinite,
353
- infer TEqualsTo
354
- >
355
- ? INumberSchemaBuilder<
356
- TRequired,
357
- true,
358
- TMin,
359
- TMax,
360
- TIsInteger,
361
- TEnsureNotNaN,
362
- TEnsureIsFinite,
363
- TEqualsTo
364
- >
365
- : T extends IArraySchemaBuilder<
366
- infer TRequired,
367
- infer TNullable,
368
- infer TOfType,
369
- infer TMaxLength,
370
- infer TMinLength
371
- >
372
- ? IArraySchemaBuilder<TRequired, true, TOfType, TMaxLength, TMinLength>
373
- : T extends IBooleanSchemaBuilder<
374
- infer TRequired,
375
- infer TNullable,
376
- infer TEqualsTo
377
- >
378
- ? IBooleanSchemaBuilder<TRequired, true, TEqualsTo>
379
- : T extends IFunctionSchemaBuilder<
380
- infer TRequired,
381
- infer TNullable,
382
- infer TMapToType
383
- >
384
- ? IFunctionSchemaBuilder<TRequired, true, TMapToType>
385
- : T & { isNullable: true };
386
-
387
- export type MakeNotNullable<T> = T extends IUnionSchemaBuilder<
388
- infer TRequired,
389
- infer TNullable,
390
- infer TVariants
391
- >
392
- ? IUnionSchemaBuilder<TRequired, false, TVariants>
393
- : T extends IStringSchemaBuilder<
394
- infer TRequired,
395
- infer TNullable,
396
- infer TMinLength,
397
- infer TMaxLength,
398
- infer TEqualsTo
399
- >
400
- ? IStringSchemaBuilder<TRequired, false, TMinLength, TMaxLength, TEqualsTo>
401
- : T extends IObjectSchemaBuilder<
402
- infer TRequired,
403
- infer TNullable,
404
- infer TNoUnknownProperties,
405
- infer TProperties,
406
- infer TMapToType
407
- >
408
- ? IObjectSchemaBuilder<
409
- TRequired,
410
- false,
411
- TNoUnknownProperties,
412
- TProperties,
413
- TMapToType
414
- >
415
- : T extends INumberSchemaBuilder<
416
- infer TRequired,
417
- infer TNullable,
418
- infer TMin,
419
- infer TMax,
420
- infer TIsInteger,
421
- infer TEnsureNotNaN,
422
- infer TEnsureIsFinite,
423
- infer TEqualsTo
424
- >
425
- ? INumberSchemaBuilder<
426
- TRequired,
427
- false,
428
- TMin,
429
- TMax,
430
- TIsInteger,
431
- TEnsureNotNaN,
432
- TEnsureIsFinite,
433
- TEqualsTo
434
- >
435
- : T extends IArraySchemaBuilder<
436
- infer TRequired,
437
- infer TNullable,
438
- infer TOfType,
439
- infer TMaxLength,
440
- infer TMinLength
441
- >
442
- ? IArraySchemaBuilder<TRequired, false, TOfType, TMaxLength, TMinLength>
443
- : T extends IBooleanSchemaBuilder<
444
- infer TRequired,
445
- infer TNullable,
446
- infer TEqualsTo
447
- >
448
- ? IBooleanSchemaBuilder<TRequired, false, TEqualsTo>
449
- : T extends IFunctionSchemaBuilder<
450
- infer TRequired,
451
- infer TNullable,
452
- infer TMapToType
453
- >
454
- ? IFunctionSchemaBuilder<TRequired, false, TMapToType>
455
- : T & { isNullable: false };
456
-
457
- export type ExpandUnionVariants<TVariants extends any[]> = TVariants extends [
458
- infer T
459
- ]
460
- ? [ExpandSchemaBuilder<T>]
461
- : TVariants extends [infer T, ...infer Rest]
462
- ? [ExpandSchemaBuilder<T>, ...ExpandUnionVariants<[...Rest]>]
463
- : never;
464
-
465
- export type ExpandSchemaBuilder<TSchema> = TSchema extends [
466
- infer TType,
467
- ...infer TParams
468
- ]
469
- ? TType extends 'object'
470
- ? TParams extends [
471
- infer TRequired extends boolean,
472
- infer TNullable extends boolean,
473
- infer TNoUnknownProperties extends boolean | undefined,
474
- infer TProperties,
475
- infer TMapToType
476
- ]
477
- ? IObjectSchemaBuilder<
478
- TRequired,
479
- TNullable,
480
- TNoUnknownProperties,
481
- {
482
- [k in keyof TProperties]: ExpandSchemaBuilder<
483
- TProperties[k]
484
- >;
485
- },
486
- TMapToType
487
- >
488
- : IObjectSchemaBuilder
489
- : TType extends 'string'
490
- ? TParams extends [
491
- infer TRequired extends boolean,
492
- infer TNullable extends boolean,
493
- infer TMinLength extends number | undefined,
494
- infer TMaxLength extends number | undefined,
495
- infer TEqualsTo extends string | undefined
496
- ]
497
- ? TEqualsTo extends undefined
498
- ? IStringSchemaBuilder<
499
- TRequired,
500
- TNullable,
501
- TMinLength,
502
- TMaxLength,
503
- undefined
504
- >
505
- : IStringSchemaBuilder<
506
- TRequired,
507
- TNullable,
508
- TMinLength,
509
- TMaxLength,
510
- TEqualsTo
511
- >
512
- : IStringSchemaBuilder
513
- : TType extends 'number'
514
- ? TParams extends [
515
- infer TRequired extends boolean,
516
- infer TNullable extends boolean,
517
- infer TMin extends number | undefined,
518
- infer TMax extends number | undefined,
519
- infer TIsInteger extends boolean | undefined,
520
- infer TEnsureNotNaN extends boolean | undefined,
521
- infer TEnsureIsFinite extends boolean | undefined,
522
- infer TEqualsTo extends number | undefined
523
- ]
524
- ? TEqualsTo extends undefined
525
- ? INumberSchemaBuilder<
526
- TRequired,
527
- TNullable,
528
- TMin,
529
- TMax,
530
- TIsInteger,
531
- TEnsureNotNaN,
532
- TEnsureIsFinite,
533
- TEqualsTo
534
- >
535
- : INumberSchemaBuilder<
536
- TRequired,
537
- TNullable,
538
- TMin,
539
- TMax,
540
- TIsInteger,
541
- TEnsureNotNaN,
542
- TEnsureIsFinite,
543
- undefined
544
- >
545
- : INumberSchemaBuilder
546
- : TType extends 'array'
547
- ? TParams extends [
548
- infer TRequired extends boolean,
549
- infer TNullable extends boolean,
550
- infer TOfType,
551
- infer TMaxLength extends number | undefined,
552
- infer TMinLength extends number | undefined
553
- ]
554
- ? IArraySchemaBuilder<
555
- TRequired,
556
- TNullable,
557
- ExpandSchemaBuilder<TOfType>,
558
- TMaxLength,
559
- TMinLength
560
- >
561
- : IArraySchemaBuilder
562
- : TType extends 'union'
563
- ? TParams extends [
564
- infer TRequired extends boolean,
565
- infer TNullable extends boolean,
566
- infer TVariants extends any[]
567
- ]
568
- ? IUnionSchemaBuilder<
569
- TRequired,
570
- TNullable,
571
- ExpandUnionVariants<TVariants>
572
- >
573
- : IUnionSchemaBuilder
574
- : TType extends 'boolean'
575
- ? TParams extends [
576
- infer TRequired extends boolean,
577
- infer TNullable extends boolean,
578
- infer TEqualsTo extends boolean | undefined
579
- ]
580
- ? IBooleanSchemaBuilder<
581
- TRequired,
582
- TNullable,
583
- TEqualsTo extends undefined ? undefined : boolean
584
- >
585
- : IBooleanSchemaBuilder
586
- : TType extends 'function'
587
- ? TParams extends [
588
- infer TRequired extends boolean,
589
- infer TNullable extends boolean,
590
- infer TMapToType
591
- ]
592
- ? IFunctionSchemaBuilder<TRequired, TNullable, TMapToType>
593
- : IFunctionSchemaBuilder
594
- : TSchema
595
- : TSchema;
596
-
597
- export type ReduceSchemaBuilder<TBuilder> =
598
- TBuilder extends IObjectSchemaBuilder<
599
- infer TRequired,
600
- infer TNullable,
601
- infer TNoUnknownProperties,
602
- infer TProperties,
603
- infer TMapToType
604
- >
605
- ? [
606
- 'object',
607
- TRequired,
608
- TNullable,
609
- TNoUnknownProperties,
610
- {
611
- [k in keyof TProperties]: ReduceSchemaBuilder<TProperties[k]>;
612
- },
613
- TMapToType
614
- ]
615
- : TBuilder extends IStringSchemaBuilder<
616
- infer TRequired,
617
- infer TNullable,
618
- infer TMinLength,
619
- infer TMaxLength,
620
- infer TEqualsTo
621
- >
622
- ? ['string', TRequired, TNullable, TMinLength, TMaxLength, TEqualsTo]
623
- : TBuilder extends INumberSchemaBuilder<
624
- infer TRequired,
625
- infer TNullable,
626
- infer TMin,
627
- infer TMax,
628
- infer TIsInteger,
629
- infer TEnsureNotNaN,
630
- infer TEnsureIsFinite,
631
- infer TEqualsTo
632
- >
633
- ? [
634
- 'number',
635
- TRequired,
636
- TNullable,
637
- TMin,
638
- TMax,
639
- TIsInteger,
640
- TEnsureNotNaN,
641
- TEnsureIsFinite,
642
- TEqualsTo
643
- ]
644
- : TBuilder extends IArraySchemaBuilder<
645
- infer TRequired,
646
- infer TNullable,
647
- infer TOfType,
648
- infer TMaxLength,
649
- infer TMinLength
650
- >
651
- ? [
652
- 'array',
653
- TRequired,
654
- TNullable,
655
- ReduceSchemaBuilder<TOfType>,
656
- TMaxLength,
657
- TMinLength
658
- ]
659
- : TBuilder extends IUnionSchemaBuilder<
660
- infer TRequired,
661
- infer TNullable,
662
- infer TVariants
663
- >
664
- ? ['union', TRequired, TNullable, ReduceSchemaBuilder<TVariants>]
665
- : TBuilder extends IBooleanSchemaBuilder<
666
- infer TRequired,
667
- infer TNullable,
668
- infer TEqualsTo
669
- >
670
- ? ['boolean', TRequired, TNullable, TEqualsTo]
671
- : TBuilder extends IFunctionSchemaBuilder<
672
- infer TRequired,
673
- infer TNullable,
674
- infer TMapToType
675
- >
676
- ? ['function', TRequired, TNullable, TMapToType]
677
- : TBuilder extends [infer F]
678
- ? [ReduceSchemaBuilder<F>]
679
- : TBuilder extends [infer F, ...infer Rest]
680
- ? [ReduceSchemaBuilder<F>, ...ReduceSchemaBuilder<Rest>]
681
- : TBuilder;
682
-
683
- export type InferType<S> = S extends DefaultSchemaType
684
- ? S extends 'string'
685
- ? string
686
- : S extends 'boolean'
687
- ? boolean
688
- : S extends 'number'
689
- ? number
690
- : S extends 'array'
691
- ? Array<any>
692
- : S extends 'object'
693
- ? Record<string, never>
694
- : S extends 'function'
695
- ? Function
696
- : never
697
- : S extends number
698
- ? S
699
- : S extends BooleanSchema
700
- ? S['equals'] extends undefined
701
- ? boolean
702
- : S['equals']
703
- : S extends UnionSchema<infer K>
704
- ? InferType<K>
705
- : S extends { type: 'union'; variants: infer K }
706
- ? K extends any[]
707
- ? InferType<K>
708
- : any
709
- : S extends IObjectSchemaBuilder<
710
- infer TRequired,
711
- infer TNullable,
712
- infer TNoUnknownProperties,
713
- infer TProperties,
714
- infer TMapToType
715
- >
716
- ? TMapToType extends undefined
717
- ? InferType<
718
- CommonSchemaSpecification<TRequired, TNullable> & {
719
- type: 'object';
720
- } & (TNoUnknownProperties extends true
721
- ? { noUnknownProperties: true }
722
- : { noUnknownProperties: false }) &
723
- (TProperties extends Record<string, any>
724
- ? {
725
- properties: TProperties;
726
- }
727
- : {})
728
- >
729
- : TMapToType
730
- : S extends INumberSchemaBuilder<
731
- infer TRequired,
732
- infer TNullable,
733
- infer TMin,
734
- infer TMax,
735
- infer TIsInteger,
736
- infer TEnsureNotNaN,
737
- infer TEnsureIsFinite,
738
- infer TEqualsTo
739
- >
740
- ? TRequired extends true
741
- ? TEqualsTo extends undefined
742
- ? number
743
- : TEqualsTo
744
- : TEqualsTo extends undefined
745
- ? number | undefined
746
- : TEqualsTo | undefined
747
- : S extends IBooleanSchemaBuilder<
748
- infer TRequired,
749
- infer TNullable,
750
- infer TEqualsTo
751
- >
752
- ? TRequired extends true
753
- ? TEqualsTo extends undefined
754
- ? boolean
755
- : TEqualsTo
756
- : TEqualsTo extends undefined
757
- ? boolean | undefined
758
- : TEqualsTo | undefined
759
- : S extends IStringSchemaBuilder<
760
- infer TRequired,
761
- infer TNullable,
762
- infer TMinLength,
763
- infer TMaxLength,
764
- infer TEqualsTo
765
- >
766
- ? TRequired extends true
767
- ? TEqualsTo extends undefined
768
- ? string
769
- : TEqualsTo
770
- : TEqualsTo extends undefined
771
- ? string | undefined
772
- : TEqualsTo | undefined
773
- : S extends IUnionSchemaBuilder<
774
- infer TRequired,
775
- infer TNullable,
776
- infer TVariants
777
- >
778
- ? TRequired extends true
779
- ? InferType<TVariants>
780
- : InferType<TVariants> | undefined
781
- : S extends IArraySchemaBuilder<
782
- infer TRequired,
783
- infer TNullable,
784
- infer TOfType,
785
- infer TMaxLength,
786
- infer TMinLength
787
- >
788
- ? TRequired extends true
789
- ? TOfType extends undefined
790
- ? any[]
791
- : InferType<TOfType>[]
792
- : TOfType extends undefined
793
- ? any[] | undefined
794
- : InferType<TOfType>[] | undefined
795
- : S extends IFunctionSchemaBuilder<
796
- infer TRequired,
797
- infer TNullable,
798
- infer TMapToType
799
- >
800
- ? TMapToType extends undefined
801
- ? TRequired extends true
802
- ? Function
803
- : Function | undefined
804
- : TRequired extends true
805
- ? TMapToType
806
- : TMapToType | undefined
807
- : S extends StringSchema
808
- ? S['equals'] extends undefined
809
- ? string
810
- : S['equals']
811
- : S extends NumberSchema
812
- ? S['equals'] extends undefined
813
- ? number
814
- : S['equals']
815
- : S extends ObjectSchema<infer K>
816
- ? OptionalPropertiesOf<K> extends never
817
- ? { [k in keyof K]: InferType<K[k]> }
818
- : MakePropOptional<
819
- { [k in keyof K]: InferType<K[k]> },
820
- OptionalPropertiesOf<K>
821
- >
822
- : S extends { type: 'object'; properties: infer K }
823
- ? OptionalPropertiesOf<K> extends never
824
- ? { [k in keyof K]: InferType<K[k]> }
825
- : MakePropOptional<
826
- { [k in keyof K]: InferType<K[k]> },
827
- OptionalPropertiesOf<K>
828
- >
829
- : S extends [infer F]
830
- ? InferType<F>
831
- : S extends [infer F, ...infer Rest]
832
- ? InferType<F> | InferType<Rest>
833
- : S extends ArraySchema<infer L>
834
- ? InferType<L> extends never
835
- ? Array<any>
836
- : InferType<L>[]
837
- : S extends { type: 'array'; ofType: infer L }
838
- ? InferType<L>[]
839
- : S extends { type: 'array' }
840
- ? Array<any>
841
- : any;
842
-
843
- type OptionalPropertiesOf<T> = {
844
- [k in keyof T]: T[k] extends ISchemaBuilder<infer TRequired, any>
845
- ? TRequired extends false
846
- ? k
847
- : never
848
- : never;
849
- }[keyof T];