@strictly/define 0.0.1 → 0.0.2
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/index.d.ts +17 -11
- package/.out/index.js +17 -11
- package/.out/transformers/copies/copy.d.ts +3 -3
- package/.out/transformers/copies/copy_to.d.ts +3 -3
- package/.out/transformers/copies/copy_to.js +4 -0
- package/.out/transformers/copies/mobx_copy.d.ts +4 -4
- package/.out/transformers/copies/mobx_copy.js +1 -1
- package/.out/transformers/copies/specs/copy_to.tests.js +8 -8
- package/.out/transformers/copies/specs/mobx_copy.tests.js +1 -1
- package/.out/transformers/flatteners/flatten_accessors_of_type.d.ts +5 -0
- package/.out/transformers/flatteners/flatten_accessors_of_type.js +11 -0
- package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.d.ts +2 -2
- package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.js +2 -2
- package/.out/transformers/flatteners/{flatten_type_def_to.d.ts → flatten_type_to.d.ts} +1 -1
- package/.out/transformers/flatteners/{flatten_type_def_to.js → flatten_type_to.js} +1 -1
- package/.out/transformers/flatteners/{flatten_type_defs_of.d.ts → flatten_types_of_type.d.ts} +1 -1
- package/.out/transformers/flatteners/flatten_types_of_type.js +7 -0
- package/.out/transformers/flatteners/flatten_validation_errors_of_type.d.ts +22 -0
- package/.out/transformers/flatteners/flatten_validation_errors_of_type.js +10 -0
- package/.out/transformers/flatteners/flatten_validators_of_validating_type.d.ts +4 -0
- package/.out/transformers/flatteners/flatten_validators_of_validating_type.js +17 -0
- package/.out/transformers/flatteners/{flatten_value_type_to.d.ts → flatten_value_to.d.ts} +4 -4
- package/.out/transformers/flatteners/{flatten_value_type_to.js → flatten_value_to.js} +7 -2
- package/.out/transformers/flatteners/flatten_values_of_type.d.ts +3 -0
- package/.out/transformers/flatteners/flatten_values_of_type.js +7 -0
- package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.js → flatten_accessors_of_type.tests.js} +5 -6
- package/.out/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.js +6 -6
- package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.js → flatten_type_to.tests.js} +15 -13
- package/.out/transformers/flatteners/specs/flatten_types_of_type.tests.js +18 -0
- package/.out/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.js +25 -0
- package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.js → flatten_value_to.tests.js} +81 -58
- package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.js → flatten_values_of_type.tests.js} +4 -4
- package/.out/transformers/flatteners/specs/value_path_to_type_path.tests.js +5 -3
- package/.out/transformers/flatteners/value_path_to_type_path.d.ts +1 -1
- package/.out/tsconfig.tsbuildinfo +1 -1
- package/.out/types/builders.d.ts +55 -29
- package/.out/types/builders.js +116 -32
- package/.out/types/definitions.d.ts +1 -1
- package/.out/types/flattened_accessors_of_type.d.ts +9 -0
- package/.out/types/{flattened_type_defs_of.d.ts → flattened_types_of_type.d.ts} +9 -6
- package/.out/types/flattened_types_of_validating_type.d.ts +25 -0
- package/.out/types/flattened_validators_of_validating_type.d.ts +10 -0
- package/.out/types/flattened_values_of_type.d.ts +6 -0
- package/.out/types/{mobx_value_type_of.d.ts → mobx_value_of_type.d.ts} +2 -2
- package/.out/types/{partial_type_def_of.d.ts → partial_type_of_type.d.ts} +1 -1
- package/.out/types/path_of.d.ts +1 -0
- package/.out/types/{json_paths_of.d.ts → paths_of_type.d.ts} +5 -5
- package/.out/types/readonly_type_of_type.d.ts +29 -0
- package/.out/types/specs/builder.tests.js +73 -23
- package/.out/types/specs/{flattened_accessors_of.tests.js → flattened_accessors_of_type.tests.js} +1 -1
- package/.out/types/specs/{flattened_type_defs_of.tests.js → flattened_types_of_type.tests.js} +22 -15
- package/.out/types/specs/flattened_validators_of_validating_type.tests.js +24 -0
- package/.out/types/specs/flattened_values_of_type.tests.js +18 -0
- package/.out/types/specs/{partial_type_def_of.tests.js → partial_type_of_type.tests.js} +4 -4
- package/.out/types/specs/{json_paths_of.tests.js → paths_of_type.tests.js} +19 -19
- package/.out/types/specs/{readonly_type_def_of.tests.js → readonly_type_of_type.tests.js} +6 -6
- package/.out/types/specs/type_of_type.tests.d.ts +1 -0
- package/.out/types/specs/type_of_type.tests.js +27 -0
- package/.out/types/specs/value_of_type.tests.d.ts +1 -0
- package/.out/types/specs/{value_type_of.tests.js → value_of_type.tests.js} +1 -1
- package/.out/types/specs/value_to_type_paths_of_type.tests.d.ts +1 -0
- package/.out/types/specs/{value_to_type_paths_of.tests.js → value_to_type_paths_of_type.tests.js} +9 -9
- package/.out/types/specs/value_types_of_discriminated_union.tests.js +2 -2
- package/.out/types/strict_definitions.d.ts +2 -2
- package/.out/types/type_of_type.d.ts +49 -0
- package/.out/types/type_of_type.js +70 -0
- package/.out/types/validating_definitions.d.ts +49 -0
- package/.out/types/validating_definitions.js +1 -0
- package/.out/types/validating_type_def_with_error.d.ts +55 -0
- package/.out/types/validating_type_def_with_error.js +1 -0
- package/.out/types/value_of_type.d.ts +24 -0
- package/.out/types/value_of_type.js +1 -0
- package/.out/types/{value_to_type_paths_of.d.ts → value_to_type_paths_of_type.d.ts} +13 -13
- package/.out/types/value_to_type_paths_of_type.js +1 -0
- package/.out/types/value_types_of_discriminated_union.d.ts +5 -4
- package/.out/validation/errors_of_validators.d.ts +4 -0
- package/.out/validation/errors_of_validators.js +1 -0
- package/.out/validation/specs/errors_of_validators.tests.d.ts +1 -0
- package/.out/validation/specs/errors_of_validators.tests.js +9 -0
- package/.out/validation/specs/validators_of_values.tests.d.ts +1 -0
- package/.out/validation/specs/validators_of_values.tests.js +21 -0
- package/.out/validation/validator.d.ts +21 -0
- package/.out/validation/validator.js +26 -0
- package/.out/validation/validators/defined_validator.d.ts +10 -0
- package/.out/validation/validators/defined_validator.js +18 -0
- package/.out/validation/validators/minimum_string_length_validator.d.ts +16 -0
- package/.out/validation/validators/minimum_string_length_validator.js +23 -0
- package/.out/validation/validators_of_values.d.ts +4 -0
- package/.out/validation/validators_of_values.js +1 -0
- package/.turbo/turbo-build.log +9 -9
- package/.turbo/turbo-check-types.log +1 -1
- package/.turbo/turbo-release$colon$exports.log +1 -1
- package/README.md +16 -2
- package/dist/index.cjs +364 -76
- package/dist/index.d.cts +365 -114
- package/dist/index.d.ts +365 -114
- package/dist/index.js +355 -73
- package/index.ts +17 -11
- package/package.json +11 -3
- package/transformers/copies/copy.ts +4 -4
- package/transformers/copies/copy_to.ts +11 -7
- package/transformers/copies/mobx_copy.ts +6 -6
- package/transformers/copies/specs/copy_to.tests.ts +8 -8
- package/transformers/copies/specs/mobx_copy.tests.ts +3 -3
- package/transformers/flatteners/{flatten_accessors_of.ts → flatten_accessors_of_type.ts} +10 -10
- package/transformers/flatteners/flatten_json_value_to_type_paths_of.ts +5 -5
- package/transformers/flatteners/{flatten_type_def_to.ts → flatten_type_to.ts} +1 -1
- package/transformers/flatteners/{flatten_type_defs_of.ts → flatten_types_of_type.ts} +3 -3
- package/transformers/flatteners/flatten_validation_errors_of_type.ts +93 -0
- package/transformers/flatteners/flatten_validators_of_validating_type.ts +32 -0
- package/transformers/flatteners/{flatten_value_type_to.ts → flatten_value_to.ts} +12 -7
- package/transformers/flatteners/{flatten_value_types_of.ts → flatten_values_of_type.ts} +6 -6
- package/transformers/flatteners/specs/{flatten_accessors_of.tests.ts → flatten_accessors_of_type.tests.ts} +10 -11
- package/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.ts +6 -6
- package/transformers/flatteners/specs/{flatten_type_def_to.tests.ts → flatten_type_to.tests.ts} +15 -13
- package/transformers/flatteners/specs/flatten_types_of_type.tests.ts +27 -0
- package/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.ts +48 -0
- package/transformers/flatteners/specs/{flatten_value_type_to.tests.ts → flatten_value_to.tests.ts} +124 -91
- package/transformers/flatteners/specs/{flatten_value_types_of.tests.ts → flatten_values_of_type.tests.ts} +4 -4
- package/transformers/flatteners/specs/value_path_to_type_path.tests.ts +20 -18
- package/transformers/flatteners/value_path_to_type_path.ts +4 -4
- package/types/builders.ts +239 -71
- package/types/definitions.ts +2 -2
- package/types/{flattened_accessors_of.ts → flattened_accessors_of_type.ts} +3 -3
- package/types/{flattened_type_defs_of.ts → flattened_types_of_type.ts} +22 -12
- package/types/flattened_types_of_validating_type.ts +152 -0
- package/types/flattened_validators_of_validating_type.ts +33 -0
- package/types/flattened_values_of_type.ts +11 -0
- package/types/{mobx_value_type_of.ts → mobx_value_of_type.ts} +2 -2
- package/types/{partial_type_def_of.ts → partial_type_of_type.ts} +3 -1
- package/types/{json_path_of.ts → path_of.ts} +1 -1
- package/types/{json_paths_of.ts → paths_of_type.ts} +5 -5
- package/types/readonly_type_of_type.ts +54 -0
- package/types/specs/builder.tests.ts +205 -54
- package/types/specs/{flattened_accessors_of.tests.ts → flattened_accessors_of_type.tests.ts} +3 -3
- package/types/specs/{flattened_type_defs_of.tests.ts → flattened_types_of_type.tests.ts} +82 -34
- package/types/specs/flattened_validators_of_validating_type.tests.ts +47 -0
- package/types/specs/flattened_values_of_type.tests.ts +39 -0
- package/types/specs/{partial_type_def_of.tests.ts → partial_type_of_type.tests.ts} +11 -11
- package/types/specs/{json_paths_of.tests.ts → paths_of_type.tests.ts} +47 -47
- package/types/specs/{readonly_type_def_of.tests.ts → readonly_type_of_type.tests.ts} +14 -14
- package/types/specs/type_of_type.tests.ts +60 -0
- package/types/specs/{value_type_of.tests.ts → value_of_type.tests.ts} +15 -15
- package/types/specs/{value_to_type_paths_of.tests.ts → value_to_type_paths_of_type.tests.ts} +26 -25
- package/types/specs/value_types_of_discriminated_union.tests.ts +6 -6
- package/types/strict_definitions.ts +3 -3
- package/types/type_of_type.ts +178 -0
- package/types/validating_definitions.ts +109 -0
- package/types/validating_type_def_with_error.ts +93 -0
- package/types/value_of_type.ts +84 -0
- package/types/{value_to_type_paths_of.ts → value_to_type_paths_of_type.ts} +30 -29
- package/types/value_types_of_discriminated_union.ts +4 -3
- package/validation/errors_of_validators.ts +10 -0
- package/validation/specs/errors_of_validators.tests.ts +20 -0
- package/validation/specs/validators_of_values.tests.ts +68 -0
- package/validation/validator.ts +103 -0
- package/validation/validators/defined_validator.ts +22 -0
- package/validation/validators/minimum_string_length_validator.ts +36 -0
- package/validation/validators_of_values.ts +17 -0
- package/.out/transformers/flatteners/flatten_accessors_of.d.ts +0 -5
- package/.out/transformers/flatteners/flatten_accessors_of.js +0 -11
- package/.out/transformers/flatteners/flatten_type_defs_of.js +0 -7
- package/.out/transformers/flatteners/flatten_value_types_of.d.ts +0 -3
- package/.out/transformers/flatteners/flatten_value_types_of.js +0 -7
- package/.out/transformers/flatteners/specs/flatten_type_defs_of.tests.js +0 -17
- package/.out/types/flattened_accessors_of.d.ts +0 -9
- package/.out/types/flattened_value_types_of.d.ts +0 -6
- package/.out/types/json_path_of.d.ts +0 -1
- package/.out/types/readonly_type_def_of.d.ts +0 -29
- package/.out/types/specs/flattened_value_types_of.tests.js +0 -11
- package/.out/types/value_type_of.d.ts +0 -24
- package/transformers/flatteners/specs/flatten_type_defs_of.tests.ts +0 -26
- package/types/flattened_value_types_of.ts +0 -11
- package/types/readonly_type_def_of.ts +0 -53
- package/types/specs/flattened_value_types_of.tests.ts +0 -21
- package/types/value_type_of.ts +0 -84
- /package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.d.ts → flatten_accessors_of_type.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.d.ts → flatten_type_to.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_type_defs_of.tests.d.ts → flatten_types_of_type.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.d.ts → flatten_validation_errors_of_type.tests.d.ts} +0 -0
- /package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.d.ts → flatten_value_to.tests.d.ts} +0 -0
- /package/.out/{types/flattened_accessors_of.js → transformers/flatteners/specs/flatten_values_of_type.tests.d.ts} +0 -0
- /package/.out/types/{flattened_type_defs_of.js → flattened_accessors_of_type.js} +0 -0
- /package/.out/types/{flattened_value_types_of.js → flattened_types_of_type.js} +0 -0
- /package/.out/types/{json_path_of.js → flattened_types_of_validating_type.js} +0 -0
- /package/.out/types/{json_paths_of.js → flattened_validators_of_validating_type.js} +0 -0
- /package/.out/types/{partial_type_def_of.js → flattened_values_of_type.js} +0 -0
- /package/.out/types/{mobx_value_type_of.js → mobx_value_of_type.js} +0 -0
- /package/.out/types/{readonly_type_def_of.js → partial_type_of_type.js} +0 -0
- /package/.out/types/{specs/flattened_accessors_of.tests.d.ts → path_of.js} +0 -0
- /package/.out/types/{specs/flattened_type_defs_of.tests.d.ts → paths_of_type.js} +0 -0
- /package/.out/types/{specs/flattened_value_types_of.tests.d.ts → readonly_type_of_type.js} +0 -0
- /package/.out/types/specs/{json_paths_of.tests.d.ts → flattened_accessors_of_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{partial_type_def_of.tests.d.ts → flattened_types_of_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{readonly_type_def_of.tests.d.ts → flattened_validators_of_validating_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{value_to_type_paths_of.tests.d.ts → flattened_values_of_type.tests.d.ts} +0 -0
- /package/.out/types/specs/{value_type_of.tests.d.ts → partial_type_of_type.tests.d.ts} +0 -0
- /package/.out/types/{value_to_type_paths_of.js → specs/paths_of_type.tests.d.ts} +0 -0
- /package/.out/types/{value_type_of.js → specs/readonly_type_of_type.tests.d.ts} +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type UnionToIntersection,
|
|
3
|
+
} from 'type-fest'
|
|
4
|
+
import {
|
|
5
|
+
type Type,
|
|
6
|
+
type TypeDef,
|
|
7
|
+
} from './definitions'
|
|
8
|
+
import {
|
|
9
|
+
type Depths,
|
|
10
|
+
type StartingDepth,
|
|
11
|
+
} from './flattened'
|
|
12
|
+
import { type PathOf } from './path_of'
|
|
13
|
+
import {
|
|
14
|
+
type ErrorOfValidatingTypeDef,
|
|
15
|
+
type ValidatingListTypeDef,
|
|
16
|
+
type ValidatingLiteralTypeDef,
|
|
17
|
+
type ValidatingObjectTypeDef,
|
|
18
|
+
type ValidatingRecordTypeDef,
|
|
19
|
+
type ValidatingUnionTypeDef,
|
|
20
|
+
} from './validating_definitions'
|
|
21
|
+
|
|
22
|
+
// TODO rename to FlattenedValidatingTypesOfValidatingType
|
|
23
|
+
export type FlattenedTypesOfValidatingType<
|
|
24
|
+
T extends Type,
|
|
25
|
+
SegmentOverride extends string | null,
|
|
26
|
+
Path extends string = '$',
|
|
27
|
+
Depth extends number = StartingDepth,
|
|
28
|
+
> = InternalFlattenedTypeDefsOf<T['definition'], SegmentOverride, Path, '', Depth>
|
|
29
|
+
|
|
30
|
+
type InternalFlattenedTypeDefsOf<
|
|
31
|
+
T extends TypeDef,
|
|
32
|
+
SegmentOverride extends string | null,
|
|
33
|
+
Path extends string,
|
|
34
|
+
Qualifier extends string,
|
|
35
|
+
Depth extends number,
|
|
36
|
+
> =
|
|
37
|
+
& {
|
|
38
|
+
readonly [K in Path]: Type<T>
|
|
39
|
+
}
|
|
40
|
+
& InternalFlattenedTypeDefsOfChildren<T, SegmentOverride, Path, Qualifier, Depth>
|
|
41
|
+
|
|
42
|
+
type InternalFlattenedTypeDefsOfChildren<
|
|
43
|
+
T extends TypeDef,
|
|
44
|
+
SegmentOverride extends string | null,
|
|
45
|
+
Path extends string,
|
|
46
|
+
Qualifier extends string,
|
|
47
|
+
Depth extends number,
|
|
48
|
+
NextDepth extends number = Depths[Depth],
|
|
49
|
+
> =
|
|
50
|
+
// resolve anything too deep to `never` instead of to {} so the caller knows
|
|
51
|
+
// it has explicitly failed
|
|
52
|
+
NextDepth extends -1 ? never
|
|
53
|
+
: T extends ValidatingLiteralTypeDef ? InternalFlattenedTypeDefsOfLiteralChildren
|
|
54
|
+
: T extends ValidatingListTypeDef ? InternalFlattenedTypeDefsOfListChildren<T, SegmentOverride, Path, NextDepth>
|
|
55
|
+
: T extends ValidatingRecordTypeDef ? InternalFlattenedTypeDefsOfRecordChildren<T, SegmentOverride, Path, NextDepth>
|
|
56
|
+
: T extends ValidatingObjectTypeDef
|
|
57
|
+
? InternalFlattenedTypeDefsOfObjectChildren<T, SegmentOverride, Path, Qualifier, NextDepth>
|
|
58
|
+
: T extends ValidatingUnionTypeDef
|
|
59
|
+
? InternalFlattenedTypeDefsOfUnionChildren<T, SegmentOverride, Path, Qualifier, NextDepth>
|
|
60
|
+
: never
|
|
61
|
+
|
|
62
|
+
type InternalFlattenedTypeDefsOfLiteralChildren = {}
|
|
63
|
+
|
|
64
|
+
type InternalFlattenedTypeDefsOfListChildren<
|
|
65
|
+
T extends ValidatingListTypeDef,
|
|
66
|
+
SegmentOverride extends string | null,
|
|
67
|
+
Path extends string,
|
|
68
|
+
Depth extends number,
|
|
69
|
+
> = InternalFlattenedTypeDefsOf<
|
|
70
|
+
T['elements'],
|
|
71
|
+
SegmentOverride,
|
|
72
|
+
PathOf<Path, number, SegmentOverride>,
|
|
73
|
+
'',
|
|
74
|
+
Depth
|
|
75
|
+
>
|
|
76
|
+
|
|
77
|
+
type InternalFlattenedTypeDefsOfRecordChildren<
|
|
78
|
+
T extends ValidatingRecordTypeDef,
|
|
79
|
+
SegmentOverride extends string | null,
|
|
80
|
+
Path extends string,
|
|
81
|
+
Depth extends number,
|
|
82
|
+
> = InternalFlattenedTypeDefsOf<
|
|
83
|
+
T['valueTypeDef'],
|
|
84
|
+
SegmentOverride,
|
|
85
|
+
PathOf<Path, T['keyPrototype'], SegmentOverride>,
|
|
86
|
+
'',
|
|
87
|
+
Depth
|
|
88
|
+
>
|
|
89
|
+
|
|
90
|
+
type InternalFlattenedTypeDefsOfObjectChildren<
|
|
91
|
+
T extends ValidatingObjectTypeDef,
|
|
92
|
+
SegmentOverride extends string | null,
|
|
93
|
+
Path extends string,
|
|
94
|
+
Qualifier extends string,
|
|
95
|
+
Depth extends number,
|
|
96
|
+
> = T extends ValidatingObjectTypeDef<infer _E, infer Fields> ? keyof Fields extends string ? UnionToIntersection<{
|
|
97
|
+
readonly [
|
|
98
|
+
K in keyof Fields
|
|
99
|
+
]-?: undefined extends Fields[K]
|
|
100
|
+
// if the field is optional, synthesize a nullable type
|
|
101
|
+
? InternalFlattenedTypeDefsOf<
|
|
102
|
+
ValidatingUnionTypeDef<
|
|
103
|
+
ErrorOfValidatingTypeDef<Exclude<Fields[K], undefined>>,
|
|
104
|
+
null,
|
|
105
|
+
{
|
|
106
|
+
readonly '0': Exclude<Fields[K], undefined>,
|
|
107
|
+
readonly '1': ValidatingLiteralTypeDef<undefined>,
|
|
108
|
+
}
|
|
109
|
+
>,
|
|
110
|
+
SegmentOverride,
|
|
111
|
+
PathOf<Path, `${Qualifier}${K}`, null>,
|
|
112
|
+
'',
|
|
113
|
+
Depth
|
|
114
|
+
>
|
|
115
|
+
: InternalFlattenedTypeDefsOf<
|
|
116
|
+
Exclude<Fields[K], undefined>,
|
|
117
|
+
SegmentOverride,
|
|
118
|
+
PathOf<Path, `${Qualifier}${K}`, null>,
|
|
119
|
+
'',
|
|
120
|
+
Depth
|
|
121
|
+
>
|
|
122
|
+
}[keyof Fields]>
|
|
123
|
+
: never
|
|
124
|
+
: never
|
|
125
|
+
|
|
126
|
+
type InternalFlattenedTypeDefsOfUnionChildren<
|
|
127
|
+
T extends ValidatingUnionTypeDef,
|
|
128
|
+
SegmentOverride extends string | null,
|
|
129
|
+
Path extends string,
|
|
130
|
+
Qualifier extends string,
|
|
131
|
+
Depth extends number,
|
|
132
|
+
> = T extends ValidatingUnionTypeDef<infer _E, infer D, infer Unions>
|
|
133
|
+
? keyof Unions extends string ? D extends null ? UnionToIntersection<{
|
|
134
|
+
readonly [K in keyof Unions]: InternalFlattenedTypeDefsOfChildren<
|
|
135
|
+
Unions[K],
|
|
136
|
+
SegmentOverride,
|
|
137
|
+
Path,
|
|
138
|
+
'',
|
|
139
|
+
Depth
|
|
140
|
+
>
|
|
141
|
+
}[keyof Unions]>
|
|
142
|
+
: UnionToIntersection<{
|
|
143
|
+
readonly [K in keyof Unions]: InternalFlattenedTypeDefsOfChildren<
|
|
144
|
+
Unions[K],
|
|
145
|
+
SegmentOverride,
|
|
146
|
+
Path,
|
|
147
|
+
`${Qualifier}${K}:`,
|
|
148
|
+
Depth
|
|
149
|
+
>
|
|
150
|
+
}[keyof Unions]>
|
|
151
|
+
: never
|
|
152
|
+
: never
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Validator } from 'validation/validator'
|
|
2
|
+
import { type FlattenedTypesOfType } from './flattened_types_of_type'
|
|
3
|
+
import {
|
|
4
|
+
type ReadonlyOfTypeDef,
|
|
5
|
+
type ReadonlyTypeOfType,
|
|
6
|
+
} from './readonly_type_of_type'
|
|
7
|
+
import {
|
|
8
|
+
type ErrorOfValidatingTypeDef,
|
|
9
|
+
type ValidatingType,
|
|
10
|
+
type ValidatingTypeDef,
|
|
11
|
+
} from './validating_definitions'
|
|
12
|
+
import {
|
|
13
|
+
type ValueOfType,
|
|
14
|
+
type ValueOfTypeDef,
|
|
15
|
+
} from './value_of_type'
|
|
16
|
+
|
|
17
|
+
type ValidatorOfValidatingType<T extends ValidatingTypeDef, ValuePath extends string, Context> = T extends
|
|
18
|
+
ValidatingTypeDef<infer E> ? Validator<ValueOfTypeDef<ReadonlyOfTypeDef<T>>, E, ValuePath, Context>
|
|
19
|
+
: never
|
|
20
|
+
|
|
21
|
+
export type FlattenedValidatorsOfValidatingType<
|
|
22
|
+
T extends ValidatingType,
|
|
23
|
+
TypePathsToValuePaths extends Readonly<Record<keyof FlattenedTypes, string>>,
|
|
24
|
+
FlattenedTypes extends Readonly<Record<string, ValidatingType>> = FlattenedTypesOfType<T, '*'>,
|
|
25
|
+
Context = ValueOfType<ReadonlyTypeOfType<T>>,
|
|
26
|
+
> = {
|
|
27
|
+
[K in keyof FlattenedTypes as ErrorOfValidatingTypeDef<FlattenedTypes[K]['definition']> extends never ? never : K]:
|
|
28
|
+
ValidatorOfValidatingType<
|
|
29
|
+
FlattenedTypes[K]['definition'],
|
|
30
|
+
TypePathsToValuePaths[K],
|
|
31
|
+
Context
|
|
32
|
+
>
|
|
33
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Type } from './definitions'
|
|
2
|
+
import { type FlattenedTypesOfType } from './flattened_types_of_type'
|
|
3
|
+
import { type ValueOfType } from './value_of_type'
|
|
4
|
+
|
|
5
|
+
export type FlattenedValuesOfType<
|
|
6
|
+
T extends Type,
|
|
7
|
+
SegmentOverride extends string | null = null,
|
|
8
|
+
Flattened extends Readonly<Record<string, Type>> = FlattenedTypesOfType<T, SegmentOverride>,
|
|
9
|
+
> = {
|
|
10
|
+
[K in keyof Flattened]: ValueOfType<Flattened[K], {}>
|
|
11
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type Type,
|
|
3
3
|
} from './definitions'
|
|
4
|
-
import { type
|
|
4
|
+
import { type ValueOfType } from './value_of_type'
|
|
5
5
|
|
|
6
6
|
const MOBX_OBSERVABLE_KEY = '___mobx_observable'
|
|
7
7
|
|
|
@@ -13,4 +13,4 @@ export type NonMobxObservable<T = {}> = {
|
|
|
13
13
|
[MOBX_OBSERVABLE_KEY]?: never,
|
|
14
14
|
} & T
|
|
15
15
|
|
|
16
|
-
export type
|
|
16
|
+
export type MobxValueOfType<T extends Type> = ValueOfType<T, MobxObservable>
|
|
@@ -9,8 +9,10 @@ import {
|
|
|
9
9
|
type UnionTypeDef,
|
|
10
10
|
} from './definitions'
|
|
11
11
|
|
|
12
|
+
// TODO rename to PartialOfType
|
|
13
|
+
|
|
12
14
|
// converts a type def to have nullable values and partial record fields
|
|
13
|
-
export type
|
|
15
|
+
export type PartialTypeOfType<T extends Type> = {
|
|
14
16
|
readonly typeDef: InternalPartialAndNullableOf<T['definition']>,
|
|
15
17
|
}
|
|
16
18
|
|
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
type Depths,
|
|
12
12
|
type StartingDepth,
|
|
13
13
|
} from './flattened'
|
|
14
|
-
import { type
|
|
14
|
+
import { type PathOf } from './path_of'
|
|
15
15
|
|
|
16
|
-
export type
|
|
16
|
+
export type PathsOfType<
|
|
17
17
|
T extends Type,
|
|
18
18
|
SegmentOverride extends string | null = null,
|
|
19
19
|
Prefix extends string = '$',
|
|
@@ -57,7 +57,7 @@ type InternalJsonPathsOfListChildren<
|
|
|
57
57
|
Depth extends number,
|
|
58
58
|
> = InternalJsonPathsOf<
|
|
59
59
|
F['elements'],
|
|
60
|
-
|
|
60
|
+
PathOf<
|
|
61
61
|
Prefix,
|
|
62
62
|
number,
|
|
63
63
|
SegmentOverride
|
|
@@ -73,7 +73,7 @@ type InternalJsonPathsOfRecordChildren<
|
|
|
73
73
|
Depth extends number,
|
|
74
74
|
> = InternalJsonPathsOf<
|
|
75
75
|
F['valueTypeDef'],
|
|
76
|
-
|
|
76
|
+
PathOf<
|
|
77
77
|
Prefix,
|
|
78
78
|
F['keyPrototype'],
|
|
79
79
|
SegmentOverride
|
|
@@ -91,7 +91,7 @@ type InternalJsonPathsOfObjectChildren<
|
|
|
91
91
|
> = F extends ObjectTypeDef<infer Fields> ? keyof Fields extends string ? {
|
|
92
92
|
[K in keyof Fields]: InternalJsonPathsOf<
|
|
93
93
|
Fields[K],
|
|
94
|
-
|
|
94
|
+
PathOf<
|
|
95
95
|
Prefix,
|
|
96
96
|
`${Qualifier}${K}`,
|
|
97
97
|
null
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ListTypeDef,
|
|
3
|
+
type LiteralTypeDef,
|
|
4
|
+
type ObjectTypeDef,
|
|
5
|
+
type RecordTypeDef,
|
|
6
|
+
type Type,
|
|
7
|
+
type TypeDef,
|
|
8
|
+
type UnionTypeDef,
|
|
9
|
+
} from './definitions'
|
|
10
|
+
|
|
11
|
+
// TODO rename to ReadonlyOfType
|
|
12
|
+
export type ReadonlyTypeOfType<T extends Type> = {
|
|
13
|
+
readonly definition: ReadonlyOfTypeDef<T['definition']>,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type ReadonlyOfTypeDef<T extends TypeDef> = T extends LiteralTypeDef ? ReadonlyOfLiteralTypeDef<T>
|
|
17
|
+
: T extends ListTypeDef ? ReadonlyOfListTypeDef<T>
|
|
18
|
+
: T extends RecordTypeDef ? ReadonlyOfRecordTypeDef<T>
|
|
19
|
+
: T extends ObjectTypeDef ? ReadonlyOfObjectTypeDef<T>
|
|
20
|
+
: T extends UnionTypeDef ? ReadonlyOfUnionTypeDef<T>
|
|
21
|
+
: never
|
|
22
|
+
|
|
23
|
+
type ReadonlyOfLiteralTypeDef<T extends LiteralTypeDef> = T
|
|
24
|
+
|
|
25
|
+
type ReadonlyOfListTypeDef<T extends ListTypeDef> = {
|
|
26
|
+
readonly type: T['type'],
|
|
27
|
+
readonly elements: ReadonlyOfTypeDef<T['elements']>,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type ReadonlyOfRecordTypeDef<T extends RecordTypeDef> = {
|
|
31
|
+
readonly type: T['type'],
|
|
32
|
+
readonly keyPrototype: T['keyPrototype'],
|
|
33
|
+
readonly valueTypeDef: undefined extends T['valueTypeDef'] ? ReadonlyOfTypeDef<
|
|
34
|
+
Exclude<T['valueTypeDef'], undefined>
|
|
35
|
+
> | undefined
|
|
36
|
+
: ReadonlyOfTypeDef<T['valueTypeDef']>,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type ReadonlyOfObjectTypeDef<T extends ObjectTypeDef> = T extends ObjectTypeDef<infer Fields> ? {
|
|
40
|
+
readonly type: T['type'],
|
|
41
|
+
readonly fields: {
|
|
42
|
+
readonly [K in keyof Fields]: ReadonlyOfTypeDef<Fields[K]>
|
|
43
|
+
},
|
|
44
|
+
}
|
|
45
|
+
: never
|
|
46
|
+
|
|
47
|
+
type ReadonlyOfUnionTypeDef<T extends UnionTypeDef> = T extends UnionTypeDef<infer D, infer Unions> ? {
|
|
48
|
+
readonly type: T['type'],
|
|
49
|
+
readonly discriminator: D,
|
|
50
|
+
readonly unions: {
|
|
51
|
+
readonly [K in keyof Unions]: ReadonlyOfTypeDef<Unions[K]>
|
|
52
|
+
},
|
|
53
|
+
}
|
|
54
|
+
: never
|