@strictly/define 0.0.12 → 0.0.14
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/.out/transformers/flatteners/json_path.d.ts +6 -2
- package/.out/transformers/flatteners/json_path.js +15 -2
- package/.out/transformers/flatteners/specs/json_paths.tests.d.ts +1 -0
- package/.out/transformers/flatteners/specs/json_paths.tests.js +50 -0
- package/.out/tsconfig.tsbuildinfo +1 -1
- package/.out/types/builders.d.ts +21 -20
- package/.out/types/builders.js +8 -5
- package/.out/types/flattened_types_of_validating_type.d.ts +4 -4
- package/.out/types/flattened_validators_of_validating_type.d.ts +7 -6
- package/.out/types/specs/flattened_validators_of_validating_type.tests.js +2 -2
- package/.out/types/validating_definitions.d.ts +14 -12
- package/.out/types/validating_type_def_with_error.d.ts +13 -13
- package/.out/validation/validator.d.ts +1 -0
- package/.out/validation/validator.js +4 -0
- package/.out/validation/validators/composite_validator.d.ts +7 -0
- package/.out/validation/validators/composite_validator.js +32 -0
- package/.turbo/turbo-build.log +8 -8
- package/.turbo/turbo-check-types.log +1 -1
- package/dist/index.cjs +86 -33
- package/dist/index.d.cts +85 -79
- package/dist/index.d.ts +85 -79
- package/dist/index.js +62 -9
- package/package.json +1 -1
- package/transformers/flatteners/json_path.ts +44 -4
- package/transformers/flatteners/specs/json_paths.tests.ts +69 -0
- package/types/builders.ts +46 -26
- package/types/flattened_types_of_validating_type.ts +5 -2
- package/types/flattened_validators_of_validating_type.ts +7 -9
- package/types/specs/builder.tests.ts +31 -31
- package/types/specs/flattened_validators_of_validating_type.tests.ts +7 -7
- package/types/validating_definitions.ts +27 -15
- package/types/validating_type_def_with_error.ts +23 -23
- package/validation/validator.ts +21 -0
- package/validation/validators/composite_validator.ts +42 -0
package/types/builders.ts
CHANGED
|
@@ -43,15 +43,20 @@ class TypeDefBuilder<T extends ValidatingTypeDef> implements ValidatingType<T> {
|
|
|
43
43
|
constructor(readonly definition: T) {
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
enforce<E2>(
|
|
47
|
-
|
|
46
|
+
enforce<E2, C2>(): TypeDefBuilder<ValidatingTypeDefWithError<T, E2, C2>>
|
|
47
|
+
enforce<E2,
|
|
48
|
+
C2>(rule: Validator<ValueOfType<Type<T>>, E2, string, C2>): TypeDefBuilder<ValidatingTypeDefWithError<T, E2, C2>>
|
|
49
|
+
enforce<E2, C2>(rule?: Validator<ValueOfType<Type<T>>, E2, string, C2>) {
|
|
50
|
+
return new TypeDefBuilder<ValidatingTypeDefWithError<T, E2, C2>>(
|
|
48
51
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
49
52
|
{
|
|
50
53
|
...this.definition,
|
|
51
|
-
...(
|
|
54
|
+
...(rule != null && isAnnotatedValidator(rule)
|
|
55
|
+
? mergeAnnotations(rule.annotations(null!, null!), this.definition)
|
|
56
|
+
: {}),
|
|
52
57
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
-
rule: (value: any) => {
|
|
54
|
-
return this.definition.rule(value) ?? validate(rule, value,
|
|
58
|
+
rule: (value: any, valuePath: string, context: any) => {
|
|
59
|
+
return this.definition.rule(value, valuePath, context) ?? (rule && validate(rule, value, valuePath, context))
|
|
55
60
|
},
|
|
56
61
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
62
|
} as any,
|
|
@@ -153,12 +158,12 @@ class RecordTypeDefBuilder<T extends ValidatingRecordTypeDef> extends TypeDefBui
|
|
|
153
158
|
})
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
|
-
|
|
157
161
|
class ObjectTypeDefBuilder<
|
|
158
162
|
E,
|
|
163
|
+
C,
|
|
159
164
|
Fields extends Readonly<Record<ObjectFieldKey, ValidatingTypeDef>> = {},
|
|
160
165
|
> extends TypeDefBuilder<
|
|
161
|
-
ValidatingObjectTypeDef<E, Fields>
|
|
166
|
+
ValidatingObjectTypeDef<E, C, Fields>
|
|
162
167
|
> {
|
|
163
168
|
field<
|
|
164
169
|
Name extends string,
|
|
@@ -168,36 +173,42 @@ class ObjectTypeDefBuilder<
|
|
|
168
173
|
{ definition }: Type<T>,
|
|
169
174
|
): ObjectTypeDefBuilder<
|
|
170
175
|
E,
|
|
176
|
+
C,
|
|
171
177
|
Fields & Record<Name, T>
|
|
172
178
|
>
|
|
173
179
|
field<
|
|
174
180
|
Name extends string,
|
|
175
181
|
T extends ValidatingTypeDef,
|
|
176
182
|
RequiredError,
|
|
183
|
+
C2,
|
|
177
184
|
>(
|
|
178
185
|
name: Name,
|
|
179
186
|
{ definition }: Type<T>,
|
|
180
187
|
rule: Rule<RequiredError, ValueOfTypeDef<T>>,
|
|
181
188
|
): ObjectTypeDefBuilder<
|
|
182
189
|
E,
|
|
183
|
-
|
|
190
|
+
C & C2,
|
|
191
|
+
Fields & Record<Name, ValidatingTypeDefWithError<T, RequiredError, C & C2>>
|
|
184
192
|
>
|
|
185
193
|
field<
|
|
186
194
|
Name extends string,
|
|
187
195
|
T extends ValidatingTypeDef,
|
|
188
196
|
RequiredError = never,
|
|
197
|
+
C2 = {},
|
|
189
198
|
>(
|
|
190
199
|
name: Name,
|
|
191
200
|
{ definition }: Type<T>,
|
|
192
|
-
rule?: Rule<RequiredError, ValueOfTypeDef<T>>,
|
|
201
|
+
rule?: Rule<RequiredError, C2, ValueOfTypeDef<T>>,
|
|
193
202
|
): ObjectTypeDefBuilder<
|
|
194
203
|
E,
|
|
195
|
-
|
|
204
|
+
C & C2,
|
|
205
|
+
Fields & Record<Name, ValidatingTypeDefWithError<T, RequiredError, C2>>
|
|
196
206
|
> {
|
|
197
207
|
// have to explicitly supply types as TS will infinitely recurse trying to infer them!
|
|
198
208
|
return new ObjectTypeDefBuilder<
|
|
199
209
|
E,
|
|
200
|
-
|
|
210
|
+
C & C2,
|
|
211
|
+
Fields & Record<Name, ValidatingTypeDefWithError<T, RequiredError, C2>>
|
|
201
212
|
>({
|
|
202
213
|
...this.definition,
|
|
203
214
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
@@ -206,11 +217,11 @@ class ObjectTypeDefBuilder<
|
|
|
206
217
|
[name]: {
|
|
207
218
|
...definition,
|
|
208
219
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
209
|
-
rule: function (v: any) {
|
|
210
|
-
return definition.rule(v)
|
|
220
|
+
rule: function (v: any, valuePath: string, context: C2) {
|
|
221
|
+
return definition.rule(v, valuePath, context) ?? (rule && validate(rule, v, valuePath, context))
|
|
211
222
|
},
|
|
212
223
|
},
|
|
213
|
-
} as Fields & Record<Name, ValidatingTypeDefWithError<T, RequiredError>>,
|
|
224
|
+
} as Fields & Record<Name, ValidatingTypeDefWithError<T, RequiredError, C2>>,
|
|
214
225
|
})
|
|
215
226
|
}
|
|
216
227
|
|
|
@@ -222,6 +233,7 @@ class ObjectTypeDefBuilder<
|
|
|
222
233
|
{ definition }: Type<T>,
|
|
223
234
|
): ObjectTypeDefBuilder<
|
|
224
235
|
E,
|
|
236
|
+
C,
|
|
225
237
|
Fields & Readonly<Record<Name, T>>
|
|
226
238
|
> {
|
|
227
239
|
const newFields = {
|
|
@@ -233,6 +245,7 @@ class ObjectTypeDefBuilder<
|
|
|
233
245
|
// have to explicitly supply types as TS will infinitely recurse trying to infer them!
|
|
234
246
|
return new ObjectTypeDefBuilder<
|
|
235
247
|
E,
|
|
248
|
+
C,
|
|
236
249
|
Fields & Readonly<Record<Name, T>>
|
|
237
250
|
>({
|
|
238
251
|
...this.definition,
|
|
@@ -251,6 +264,7 @@ class ObjectTypeDefBuilder<
|
|
|
251
264
|
{ definition }: Type<T>,
|
|
252
265
|
): ObjectTypeDefBuilder<
|
|
253
266
|
E,
|
|
267
|
+
C,
|
|
254
268
|
Fields & Partial<Record<Name, T>>
|
|
255
269
|
> {
|
|
256
270
|
const newFields = {
|
|
@@ -261,6 +275,7 @@ class ObjectTypeDefBuilder<
|
|
|
261
275
|
// have to explicitly supply types as TS will infinitely recurse trying to infer them!
|
|
262
276
|
return new ObjectTypeDefBuilder<
|
|
263
277
|
E,
|
|
278
|
+
C,
|
|
264
279
|
Fields & Partial<Record<Name, T>>
|
|
265
280
|
>({
|
|
266
281
|
...this.definition,
|
|
@@ -279,6 +294,7 @@ class ObjectTypeDefBuilder<
|
|
|
279
294
|
{ definition }: Type<T>,
|
|
280
295
|
): ObjectTypeDefBuilder<
|
|
281
296
|
E,
|
|
297
|
+
C,
|
|
282
298
|
Fields & Partial<Readonly<Record<Name, T>>>
|
|
283
299
|
> {
|
|
284
300
|
const newFields = {
|
|
@@ -290,6 +306,7 @@ class ObjectTypeDefBuilder<
|
|
|
290
306
|
// have to explicitly supply types as TS will infinitely recurse trying to infer them!
|
|
291
307
|
return new ObjectTypeDefBuilder<
|
|
292
308
|
E,
|
|
309
|
+
C,
|
|
293
310
|
Fields & Partial<Readonly<Record<Name, T>>>
|
|
294
311
|
>({
|
|
295
312
|
...this.definition,
|
|
@@ -303,11 +320,13 @@ class ObjectTypeDefBuilder<
|
|
|
303
320
|
|
|
304
321
|
class UnionTypeDefBuilder<
|
|
305
322
|
E,
|
|
323
|
+
C,
|
|
306
324
|
D extends string | null,
|
|
307
325
|
U extends Record<UnionKey, TypeDef>,
|
|
308
326
|
> extends TypeDefBuilder<
|
|
309
327
|
ValidatingUnionTypeDef<
|
|
310
328
|
E,
|
|
329
|
+
C,
|
|
311
330
|
D,
|
|
312
331
|
U
|
|
313
332
|
>
|
|
@@ -320,11 +339,11 @@ class UnionTypeDefBuilder<
|
|
|
320
339
|
{
|
|
321
340
|
definition: typeDef,
|
|
322
341
|
}: Type<T>,
|
|
323
|
-
): UnionTypeDefBuilder<E, D, Readonly<Record<K, T>> & U> {
|
|
342
|
+
): UnionTypeDefBuilder<E, C, D, Readonly<Record<K, T>> & U> {
|
|
324
343
|
const {
|
|
325
344
|
unions,
|
|
326
345
|
} = this.definition
|
|
327
|
-
return new UnionTypeDefBuilder<E, D, Readonly<Record<K, T>> & U>(
|
|
346
|
+
return new UnionTypeDefBuilder<E, C, D, Readonly<Record<K, T>> & U>(
|
|
328
347
|
{
|
|
329
348
|
...this.definition,
|
|
330
349
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
@@ -337,7 +356,7 @@ class UnionTypeDefBuilder<
|
|
|
337
356
|
}
|
|
338
357
|
}
|
|
339
358
|
|
|
340
|
-
export function literal<T>(value?: [T]): TypeDefBuilder<ValidatingLiteralTypeDef<never, T>> {
|
|
359
|
+
export function literal<T>(value?: [T]): TypeDefBuilder<ValidatingLiteralTypeDef<never, {}, T>> {
|
|
341
360
|
return new TypeDefBuilder({
|
|
342
361
|
type: TypeDefType.Literal,
|
|
343
362
|
valuePrototype: value!,
|
|
@@ -356,10 +375,11 @@ export function nullable<
|
|
|
356
375
|
T extends ValidatingTypeDef,
|
|
357
376
|
>(nonNullable: ValidatingType<T>): UnionTypeDefBuilder<
|
|
358
377
|
never,
|
|
378
|
+
{},
|
|
359
379
|
null,
|
|
360
380
|
{
|
|
361
381
|
readonly ['0']: T,
|
|
362
|
-
readonly ['1']: ValidatingLiteralTypeDef<never, null>,
|
|
382
|
+
readonly ['1']: ValidatingLiteralTypeDef<never, {}, null>,
|
|
363
383
|
}
|
|
364
384
|
> {
|
|
365
385
|
return new UnionTypeDefBuilder(
|
|
@@ -371,7 +391,7 @@ export function nullable<
|
|
|
371
391
|
['1']: nullType.definition,
|
|
372
392
|
},
|
|
373
393
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
374
|
-
rule: emptyRule as Rule<never>,
|
|
394
|
+
rule: emptyRule as Rule<never, {}>,
|
|
375
395
|
readonly: false,
|
|
376
396
|
required: false,
|
|
377
397
|
},
|
|
@@ -381,12 +401,12 @@ export function nullable<
|
|
|
381
401
|
export function list<T extends ValidatingTypeDef>(elements: ValidatingType<T>): ListTypeDefBuilder<{
|
|
382
402
|
readonly type: TypeDefType.List,
|
|
383
403
|
elements: T,
|
|
384
|
-
readonly rule: Rule<never>,
|
|
404
|
+
readonly rule: Rule<never, {}>,
|
|
385
405
|
readonly readonly: boolean,
|
|
386
406
|
readonly required: boolean,
|
|
387
407
|
}> {
|
|
388
408
|
// have to explicitly supply types as TS will infinitely recurse trying to infer them!
|
|
389
|
-
return new ListTypeDefBuilder<ValidatingListTypeDef<never, T>>({
|
|
409
|
+
return new ListTypeDefBuilder<ValidatingListTypeDef<never, {}, T>>({
|
|
390
410
|
type: TypeDefType.List,
|
|
391
411
|
elements: elements.definition,
|
|
392
412
|
rule: emptyRule,
|
|
@@ -405,7 +425,7 @@ export function record<
|
|
|
405
425
|
readonly type: TypeDefType.Record,
|
|
406
426
|
readonly keyPrototype: K,
|
|
407
427
|
valueTypeDef: V['definition'],
|
|
408
|
-
readonly rule: Rule<never>,
|
|
428
|
+
readonly rule: Rule<never, {}>,
|
|
409
429
|
readonly readonly: boolean,
|
|
410
430
|
readonly required: boolean,
|
|
411
431
|
}>({
|
|
@@ -429,11 +449,11 @@ export function object(): ObjectTypeDefBuilder<never, {}> {
|
|
|
429
449
|
})
|
|
430
450
|
}
|
|
431
451
|
|
|
432
|
-
export function union<D extends null>(): UnionTypeDefBuilder<never, D, {}>
|
|
433
|
-
export function union<D extends string>(discriminator: D): UnionTypeDefBuilder<never, D, {}>
|
|
434
|
-
export function union<D extends string | null>(discriminator?: D): UnionTypeDefBuilder<never, D, {}> {
|
|
452
|
+
export function union<D extends null>(): UnionTypeDefBuilder<never, {}, D, {}>
|
|
453
|
+
export function union<D extends string>(discriminator: D): UnionTypeDefBuilder<never, {}, D, {}>
|
|
454
|
+
export function union<D extends string | null>(discriminator?: D): UnionTypeDefBuilder<never, {}, D, {}> {
|
|
435
455
|
// have to explicitly supply types as TS will infinitely recurse trying to infer them!
|
|
436
|
-
return new UnionTypeDefBuilder<never, D, {}>(
|
|
456
|
+
return new UnionTypeDefBuilder<never, {}, D, {}>(
|
|
437
457
|
{
|
|
438
458
|
type: TypeDefType.Union,
|
|
439
459
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from './flattened'
|
|
12
12
|
import { type PathOf } from './path_of'
|
|
13
13
|
import {
|
|
14
|
+
type ContextOfValidatingTypeDef,
|
|
14
15
|
type ErrorOfValidatingTypeDef,
|
|
15
16
|
type ValidatingListTypeDef,
|
|
16
17
|
type ValidatingLiteralTypeDef,
|
|
@@ -93,7 +94,8 @@ type InternalFlattenedTypeDefsOfObjectChildren<
|
|
|
93
94
|
Path extends string,
|
|
94
95
|
Qualifier extends string,
|
|
95
96
|
Depth extends number,
|
|
96
|
-
> = T extends ValidatingObjectTypeDef<infer _E, infer
|
|
97
|
+
> = T extends ValidatingObjectTypeDef<infer _E, infer _C, infer Fields>
|
|
98
|
+
? keyof Fields extends string ? UnionToIntersection<{
|
|
97
99
|
readonly [
|
|
98
100
|
K in keyof Fields
|
|
99
101
|
]-?: undefined extends Fields[K]
|
|
@@ -101,6 +103,7 @@ type InternalFlattenedTypeDefsOfObjectChildren<
|
|
|
101
103
|
? InternalFlattenedTypeDefsOf<
|
|
102
104
|
ValidatingUnionTypeDef<
|
|
103
105
|
ErrorOfValidatingTypeDef<Exclude<Fields[K], undefined>>,
|
|
106
|
+
ContextOfValidatingTypeDef<Exclude<Fields[K], undefined>>,
|
|
104
107
|
null,
|
|
105
108
|
{
|
|
106
109
|
readonly '0': Exclude<Fields[K], undefined>,
|
|
@@ -129,7 +132,7 @@ type InternalFlattenedTypeDefsOfUnionChildren<
|
|
|
129
132
|
Path extends string,
|
|
130
133
|
Qualifier extends string,
|
|
131
134
|
Depth extends number,
|
|
132
|
-
> = T extends ValidatingUnionTypeDef<infer _E, infer D, infer Unions>
|
|
135
|
+
> = T extends ValidatingUnionTypeDef<infer _E, infer _C, infer D, infer Unions>
|
|
133
136
|
? keyof Unions extends string ? D extends null ? UnionToIntersection<{
|
|
134
137
|
readonly [K in keyof Unions]: InternalFlattenedTypeDefsOfChildren<
|
|
135
138
|
Unions[K],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { type Simplify } from 'type-fest'
|
|
1
2
|
import { type Validator } from 'validation/validator'
|
|
2
3
|
import { type FlattenedTypesOfType } from './flattened_types_of_type'
|
|
3
4
|
import {
|
|
4
5
|
type ReadonlyOfTypeDef,
|
|
5
|
-
type ReadonlyTypeOfType,
|
|
6
6
|
} from './readonly_type_of_type'
|
|
7
7
|
import {
|
|
8
8
|
type ErrorOfValidatingTypeDef,
|
|
@@ -10,24 +10,22 @@ import {
|
|
|
10
10
|
type ValidatingTypeDef,
|
|
11
11
|
} from './validating_definitions'
|
|
12
12
|
import {
|
|
13
|
-
type ValueOfType,
|
|
14
13
|
type ValueOfTypeDef,
|
|
15
14
|
} from './value_of_type'
|
|
16
15
|
|
|
17
|
-
type ValidatorOfValidatingType<T extends ValidatingTypeDef, ValuePath extends string
|
|
18
|
-
ValidatingTypeDef<infer E> ? Validator<ValueOfTypeDef<ReadonlyOfTypeDef<T>>, E, ValuePath,
|
|
16
|
+
type ValidatorOfValidatingType<T extends ValidatingTypeDef, ValuePath extends string> = T extends
|
|
17
|
+
ValidatingTypeDef<infer E, infer C> ? Validator<ValueOfTypeDef<ReadonlyOfTypeDef<T>>, E, ValuePath, C>
|
|
19
18
|
: never
|
|
20
19
|
|
|
21
20
|
export type FlattenedValidatorsOfValidatingType<
|
|
22
21
|
T extends ValidatingType,
|
|
23
22
|
TypePathsToValuePaths extends Readonly<Record<keyof FlattenedTypes, string>>,
|
|
24
23
|
FlattenedTypes extends Readonly<Record<string, ValidatingType>> = FlattenedTypesOfType<T, '*'>,
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
> // needs to simplify otherwise TS compiler dies
|
|
25
|
+
= Simplify<{
|
|
27
26
|
[K in keyof FlattenedTypes as ErrorOfValidatingTypeDef<FlattenedTypes[K]['definition']> extends never ? never : K]:
|
|
28
27
|
ValidatorOfValidatingType<
|
|
29
28
|
FlattenedTypes[K]['definition'],
|
|
30
|
-
TypePathsToValuePaths[K]
|
|
31
|
-
Context
|
|
29
|
+
TypePathsToValuePaths[K]
|
|
32
30
|
>
|
|
33
|
-
}
|
|
31
|
+
}>
|
|
@@ -21,7 +21,7 @@ describe('builder', function () {
|
|
|
21
21
|
type C = {
|
|
22
22
|
readonly type: TypeDefType.Literal,
|
|
23
23
|
readonly valuePrototype: [number],
|
|
24
|
-
readonly rule: Rule<never>,
|
|
24
|
+
readonly rule: Rule<never, {}>,
|
|
25
25
|
readonly required: boolean,
|
|
26
26
|
readonly readonly: boolean,
|
|
27
27
|
}
|
|
@@ -49,19 +49,19 @@ describe('builder', function () {
|
|
|
49
49
|
readonly [0]: {
|
|
50
50
|
readonly type: TypeDefType.Literal,
|
|
51
51
|
readonly valuePrototype: [number],
|
|
52
|
-
readonly rule: Rule<never>,
|
|
52
|
+
readonly rule: Rule<never, {}>,
|
|
53
53
|
readonly required: boolean,
|
|
54
54
|
readonly readonly: boolean,
|
|
55
55
|
},
|
|
56
56
|
readonly [1]: {
|
|
57
57
|
readonly type: TypeDefType.Literal,
|
|
58
58
|
readonly valuePrototype: [null],
|
|
59
|
-
readonly rule: Rule<never>,
|
|
59
|
+
readonly rule: Rule<never, {}>,
|
|
60
60
|
readonly required: boolean,
|
|
61
61
|
readonly readonly: boolean,
|
|
62
62
|
},
|
|
63
63
|
},
|
|
64
|
-
readonly rule: Rule<never>,
|
|
64
|
+
readonly rule: Rule<never, {}>,
|
|
65
65
|
readonly required: boolean,
|
|
66
66
|
readonly readonly: boolean,
|
|
67
67
|
}
|
|
@@ -125,11 +125,11 @@ describe('builder', function () {
|
|
|
125
125
|
elements: {
|
|
126
126
|
readonly type: TypeDefType.Literal,
|
|
127
127
|
readonly valuePrototype: [number],
|
|
128
|
-
readonly rule: Rule<never>,
|
|
128
|
+
readonly rule: Rule<never, {}>,
|
|
129
129
|
readonly required: boolean,
|
|
130
130
|
readonly readonly: boolean,
|
|
131
131
|
},
|
|
132
|
-
readonly rule: Rule<never>,
|
|
132
|
+
readonly rule: Rule<never, {}>,
|
|
133
133
|
readonly required: boolean,
|
|
134
134
|
readonly readonly: boolean,
|
|
135
135
|
}
|
|
@@ -147,11 +147,11 @@ describe('builder', function () {
|
|
|
147
147
|
readonly elements: {
|
|
148
148
|
readonly type: TypeDefType.Literal,
|
|
149
149
|
readonly valuePrototype: [number],
|
|
150
|
-
readonly rule: Rule<never>,
|
|
150
|
+
readonly rule: Rule<never, {}>,
|
|
151
151
|
readonly required: boolean,
|
|
152
152
|
readonly readonly: boolean,
|
|
153
153
|
},
|
|
154
|
-
readonly rule: Rule<never>,
|
|
154
|
+
readonly rule: Rule<never, {}>,
|
|
155
155
|
readonly required: boolean,
|
|
156
156
|
readonly readonly: boolean,
|
|
157
157
|
}
|
|
@@ -173,11 +173,11 @@ describe('builder', function () {
|
|
|
173
173
|
valueTypeDef: {
|
|
174
174
|
readonly type: TypeDefType.Literal,
|
|
175
175
|
readonly valuePrototype: [number],
|
|
176
|
-
readonly rule: Rule<never>,
|
|
176
|
+
readonly rule: Rule<never, {}>,
|
|
177
177
|
readonly required: boolean,
|
|
178
178
|
readonly readonly: boolean,
|
|
179
179
|
},
|
|
180
|
-
readonly rule: Rule<never>,
|
|
180
|
+
readonly rule: Rule<never, {}>,
|
|
181
181
|
readonly required: boolean,
|
|
182
182
|
readonly readonly: boolean,
|
|
183
183
|
}
|
|
@@ -196,11 +196,11 @@ describe('builder', function () {
|
|
|
196
196
|
readonly valueTypeDef: {
|
|
197
197
|
readonly type: TypeDefType.Literal,
|
|
198
198
|
readonly valuePrototype: [number],
|
|
199
|
-
readonly rule: Rule<never>,
|
|
199
|
+
readonly rule: Rule<never, {}>,
|
|
200
200
|
readonly required: boolean,
|
|
201
201
|
readonly readonly: boolean,
|
|
202
202
|
},
|
|
203
|
-
readonly rule: Rule<never>,
|
|
203
|
+
readonly rule: Rule<never, {}>,
|
|
204
204
|
readonly required: boolean,
|
|
205
205
|
readonly readonly: boolean,
|
|
206
206
|
}
|
|
@@ -218,11 +218,11 @@ describe('builder', function () {
|
|
|
218
218
|
valueTypeDef: {
|
|
219
219
|
readonly type: TypeDefType.Literal,
|
|
220
220
|
readonly valuePrototype: [number],
|
|
221
|
-
readonly rule: Rule<never>,
|
|
221
|
+
readonly rule: Rule<never, {}>,
|
|
222
222
|
readonly required: boolean,
|
|
223
223
|
readonly readonly: boolean,
|
|
224
224
|
} | undefined,
|
|
225
|
-
readonly rule: Rule<never>,
|
|
225
|
+
readonly rule: Rule<never, {}>,
|
|
226
226
|
readonly required: boolean,
|
|
227
227
|
readonly readonly: boolean,
|
|
228
228
|
}
|
|
@@ -241,11 +241,11 @@ describe('builder', function () {
|
|
|
241
241
|
readonly valueTypeDef: {
|
|
242
242
|
readonly type: TypeDefType.Literal,
|
|
243
243
|
readonly valuePrototype: [number],
|
|
244
|
-
readonly rule: Rule<never>,
|
|
244
|
+
readonly rule: Rule<never, {}>,
|
|
245
245
|
readonly required: boolean,
|
|
246
246
|
readonly readonly: boolean,
|
|
247
247
|
} | undefined,
|
|
248
|
-
readonly rule: Rule<never>,
|
|
248
|
+
readonly rule: Rule<never, {}>,
|
|
249
249
|
readonly required: boolean,
|
|
250
250
|
readonly readonly: boolean,
|
|
251
251
|
}
|
|
@@ -265,11 +265,11 @@ describe('builder', function () {
|
|
|
265
265
|
readonly valueTypeDef: {
|
|
266
266
|
readonly type: TypeDefType.Literal,
|
|
267
267
|
readonly valuePrototype: [number],
|
|
268
|
-
readonly rule: Rule<never>,
|
|
268
|
+
readonly rule: Rule<never, {}>,
|
|
269
269
|
readonly required: boolean,
|
|
270
270
|
readonly readonly: boolean,
|
|
271
271
|
} | undefined,
|
|
272
|
-
readonly rule: Rule<never>,
|
|
272
|
+
readonly rule: Rule<never, {}>,
|
|
273
273
|
readonly required: boolean,
|
|
274
274
|
readonly readonly: boolean,
|
|
275
275
|
}
|
|
@@ -295,7 +295,7 @@ describe('builder', function () {
|
|
|
295
295
|
a: {
|
|
296
296
|
readonly type: TypeDefType.Literal,
|
|
297
297
|
readonly valuePrototype: [number],
|
|
298
|
-
readonly rule: Rule<never>,
|
|
298
|
+
readonly rule: Rule<never, {}>,
|
|
299
299
|
readonly required: boolean,
|
|
300
300
|
readonly readonly: boolean,
|
|
301
301
|
},
|
|
@@ -304,7 +304,7 @@ describe('builder', function () {
|
|
|
304
304
|
readonly b: {
|
|
305
305
|
readonly type: TypeDefType.Literal,
|
|
306
306
|
readonly valuePrototype: [boolean],
|
|
307
|
-
readonly rule: Rule<never>,
|
|
307
|
+
readonly rule: Rule<never, {}>,
|
|
308
308
|
readonly required: boolean,
|
|
309
309
|
readonly readonly: boolean,
|
|
310
310
|
},
|
|
@@ -313,7 +313,7 @@ describe('builder', function () {
|
|
|
313
313
|
c?: {
|
|
314
314
|
readonly type: TypeDefType.Literal,
|
|
315
315
|
readonly valuePrototype: [string],
|
|
316
|
-
readonly rule: Rule<never>,
|
|
316
|
+
readonly rule: Rule<never, {}>,
|
|
317
317
|
readonly required: boolean,
|
|
318
318
|
readonly readonly: boolean,
|
|
319
319
|
},
|
|
@@ -322,12 +322,12 @@ describe('builder', function () {
|
|
|
322
322
|
readonly d?: {
|
|
323
323
|
readonly type: TypeDefType.Literal,
|
|
324
324
|
readonly valuePrototype: [number],
|
|
325
|
-
readonly rule: Rule<never>,
|
|
325
|
+
readonly rule: Rule<never, {}>,
|
|
326
326
|
readonly required: boolean,
|
|
327
327
|
readonly readonly: boolean,
|
|
328
328
|
},
|
|
329
329
|
},
|
|
330
|
-
readonly rule: Rule<never>,
|
|
330
|
+
readonly rule: Rule<never, {}>,
|
|
331
331
|
readonly required: boolean,
|
|
332
332
|
readonly readonly: boolean,
|
|
333
333
|
}
|
|
@@ -359,7 +359,7 @@ describe('builder', function () {
|
|
|
359
359
|
readonly [1]: {
|
|
360
360
|
readonly type: TypeDefType.Literal,
|
|
361
361
|
readonly valuePrototype: [number],
|
|
362
|
-
readonly rule: Rule<never>,
|
|
362
|
+
readonly rule: Rule<never, {}>,
|
|
363
363
|
readonly required: boolean,
|
|
364
364
|
readonly readonly: boolean,
|
|
365
365
|
},
|
|
@@ -368,12 +368,12 @@ describe('builder', function () {
|
|
|
368
368
|
readonly [2]: {
|
|
369
369
|
readonly type: TypeDefType.Literal,
|
|
370
370
|
readonly valuePrototype: [string],
|
|
371
|
-
readonly rule: Rule<never>,
|
|
371
|
+
readonly rule: Rule<never, {}>,
|
|
372
372
|
readonly required: boolean,
|
|
373
373
|
readonly readonly: boolean,
|
|
374
374
|
},
|
|
375
375
|
},
|
|
376
|
-
readonly rule: Rule<never>,
|
|
376
|
+
readonly rule: Rule<never, {}>,
|
|
377
377
|
readonly required: boolean,
|
|
378
378
|
readonly readonly: boolean,
|
|
379
379
|
}
|
|
@@ -407,12 +407,12 @@ describe('builder', function () {
|
|
|
407
407
|
a: {
|
|
408
408
|
readonly type: TypeDefType.Literal,
|
|
409
409
|
readonly valuePrototype: [boolean],
|
|
410
|
-
readonly rule: Rule<never>,
|
|
410
|
+
readonly rule: Rule<never, {}>,
|
|
411
411
|
readonly required: boolean,
|
|
412
412
|
readonly readonly: boolean,
|
|
413
413
|
},
|
|
414
414
|
},
|
|
415
|
-
readonly rule: Rule<never>,
|
|
415
|
+
readonly rule: Rule<never, {}>,
|
|
416
416
|
readonly required: boolean,
|
|
417
417
|
readonly readonly: boolean,
|
|
418
418
|
},
|
|
@@ -424,17 +424,17 @@ describe('builder', function () {
|
|
|
424
424
|
b: {
|
|
425
425
|
readonly type: TypeDefType.Literal,
|
|
426
426
|
readonly valuePrototype: [number],
|
|
427
|
-
readonly rule: Rule<never>,
|
|
427
|
+
readonly rule: Rule<never, {}>,
|
|
428
428
|
readonly required: boolean,
|
|
429
429
|
readonly readonly: boolean,
|
|
430
430
|
},
|
|
431
431
|
},
|
|
432
|
-
readonly rule: Rule<never>,
|
|
432
|
+
readonly rule: Rule<never, {}>,
|
|
433
433
|
readonly required: boolean,
|
|
434
434
|
readonly readonly: boolean,
|
|
435
435
|
},
|
|
436
436
|
},
|
|
437
|
-
readonly rule: Rule<never>,
|
|
437
|
+
readonly rule: Rule<never, {}>,
|
|
438
438
|
readonly required: boolean,
|
|
439
439
|
readonly readonly: boolean,
|
|
440
440
|
}
|
|
@@ -9,7 +9,7 @@ import { type Validator } from 'validation/validator'
|
|
|
9
9
|
|
|
10
10
|
describe('FlattenedValidatorsOfValidatingType', function () {
|
|
11
11
|
describe('literal', function () {
|
|
12
|
-
const literalType = numberType.enforce(function (): 'a' {
|
|
12
|
+
const literalType = numberType.enforce<'a', number>(function (): 'a' {
|
|
13
13
|
return 'a'
|
|
14
14
|
})
|
|
15
15
|
type T = FlattenedValidatorsOfValidatingType<
|
|
@@ -27,17 +27,17 @@ describe('FlattenedValidatorsOfValidatingType', function () {
|
|
|
27
27
|
})
|
|
28
28
|
|
|
29
29
|
describe('list', function () {
|
|
30
|
-
const literalType = numberType.enforce(function (): '
|
|
31
|
-
return '
|
|
30
|
+
const literalType = numberType.enforce<'Y', { b: boolean }>(function (): 'Y' {
|
|
31
|
+
return 'Y'
|
|
32
32
|
})
|
|
33
|
-
const listType = list(literalType.narrow).enforce(function (): '
|
|
34
|
-
return '
|
|
33
|
+
const listType = list(literalType.narrow).enforce<'X', { a: number }>(function (): 'X' {
|
|
34
|
+
return 'X'
|
|
35
35
|
})
|
|
36
36
|
type T = FlattenedValidatorsOfValidatingType<typeof listType, Reverse<ValueToTypePathsOfType<typeof listType>>>
|
|
37
37
|
|
|
38
38
|
type C = {
|
|
39
|
-
readonly $: Validator<readonly number[], '
|
|
40
|
-
readonly '$.*': Validator<number, '
|
|
39
|
+
readonly $: Validator<readonly number[], 'X', '$', { a: number }>,
|
|
40
|
+
readonly '$.*': Validator<number, 'Y', `$.${number}`, { b: boolean }>,
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
it('equals expected type', function () {
|