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