@strictly/define 0.0.1 → 0.0.3

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 (199) hide show
  1. package/.out/index.d.ts +17 -11
  2. package/.out/index.js +17 -11
  3. package/.out/transformers/copies/copy.d.ts +3 -3
  4. package/.out/transformers/copies/copy_to.d.ts +3 -3
  5. package/.out/transformers/copies/copy_to.js +4 -0
  6. package/.out/transformers/copies/mobx_copy.d.ts +4 -4
  7. package/.out/transformers/copies/mobx_copy.js +1 -1
  8. package/.out/transformers/copies/specs/copy_to.tests.js +8 -8
  9. package/.out/transformers/copies/specs/mobx_copy.tests.js +1 -1
  10. package/.out/transformers/flatteners/flatten_accessors_of_type.d.ts +5 -0
  11. package/.out/transformers/flatteners/flatten_accessors_of_type.js +11 -0
  12. package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.d.ts +2 -2
  13. package/.out/transformers/flatteners/flatten_json_value_to_type_paths_of.js +2 -2
  14. package/.out/transformers/flatteners/{flatten_type_def_to.d.ts → flatten_type_to.d.ts} +1 -1
  15. package/.out/transformers/flatteners/{flatten_type_def_to.js → flatten_type_to.js} +1 -1
  16. package/.out/transformers/flatteners/{flatten_type_defs_of.d.ts → flatten_types_of_type.d.ts} +1 -1
  17. package/.out/transformers/flatteners/flatten_types_of_type.js +7 -0
  18. package/.out/transformers/flatteners/flatten_validation_errors_of_type.d.ts +22 -0
  19. package/.out/transformers/flatteners/flatten_validation_errors_of_type.js +10 -0
  20. package/.out/transformers/flatteners/flatten_validators_of_validating_type.d.ts +4 -0
  21. package/.out/transformers/flatteners/flatten_validators_of_validating_type.js +17 -0
  22. package/.out/transformers/flatteners/{flatten_value_type_to.d.ts → flatten_value_to.d.ts} +4 -4
  23. package/.out/transformers/flatteners/{flatten_value_type_to.js → flatten_value_to.js} +7 -2
  24. package/.out/transformers/flatteners/flatten_values_of_type.d.ts +3 -0
  25. package/.out/transformers/flatteners/flatten_values_of_type.js +7 -0
  26. package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.js → flatten_accessors_of_type.tests.js} +5 -6
  27. package/.out/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.js +6 -6
  28. package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.js → flatten_type_to.tests.js} +15 -13
  29. package/.out/transformers/flatteners/specs/flatten_types_of_type.tests.js +18 -0
  30. package/.out/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.js +25 -0
  31. package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.js → flatten_value_to.tests.js} +81 -58
  32. package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.js → flatten_values_of_type.tests.js} +4 -4
  33. package/.out/transformers/flatteners/specs/value_path_to_type_path.tests.js +5 -3
  34. package/.out/transformers/flatteners/value_path_to_type_path.d.ts +1 -1
  35. package/.out/tsconfig.tsbuildinfo +1 -1
  36. package/.out/types/builders.d.ts +55 -29
  37. package/.out/types/builders.js +116 -32
  38. package/.out/types/definitions.d.ts +1 -1
  39. package/.out/types/flattened_accessors_of_type.d.ts +9 -0
  40. package/.out/types/{flattened_type_defs_of.d.ts → flattened_types_of_type.d.ts} +9 -6
  41. package/.out/types/flattened_types_of_validating_type.d.ts +25 -0
  42. package/.out/types/flattened_validators_of_validating_type.d.ts +10 -0
  43. package/.out/types/flattened_values_of_type.d.ts +6 -0
  44. package/.out/types/{mobx_value_type_of.d.ts → mobx_value_of_type.d.ts} +2 -2
  45. package/.out/types/{partial_type_def_of.d.ts → partial_type_of_type.d.ts} +1 -1
  46. package/.out/types/path_of.d.ts +1 -0
  47. package/.out/types/{json_paths_of.d.ts → paths_of_type.d.ts} +5 -5
  48. package/.out/types/readonly_type_of_type.d.ts +29 -0
  49. package/.out/types/specs/builder.tests.js +73 -23
  50. package/.out/types/specs/{flattened_accessors_of.tests.js → flattened_accessors_of_type.tests.js} +1 -1
  51. package/.out/types/specs/{flattened_type_defs_of.tests.js → flattened_types_of_type.tests.js} +22 -15
  52. package/.out/types/specs/flattened_validators_of_validating_type.tests.js +24 -0
  53. package/.out/types/specs/flattened_values_of_type.tests.js +18 -0
  54. package/.out/types/specs/{partial_type_def_of.tests.js → partial_type_of_type.tests.js} +4 -4
  55. package/.out/types/specs/{json_paths_of.tests.js → paths_of_type.tests.js} +19 -19
  56. package/.out/types/specs/{readonly_type_def_of.tests.js → readonly_type_of_type.tests.js} +6 -6
  57. package/.out/types/specs/type_of_type.tests.d.ts +1 -0
  58. package/.out/types/specs/type_of_type.tests.js +27 -0
  59. package/.out/types/specs/value_of_type.tests.d.ts +1 -0
  60. package/.out/types/specs/{value_type_of.tests.js → value_of_type.tests.js} +1 -1
  61. package/.out/types/specs/value_to_type_paths_of_type.tests.d.ts +1 -0
  62. package/.out/types/specs/{value_to_type_paths_of.tests.js → value_to_type_paths_of_type.tests.js} +9 -9
  63. package/.out/types/specs/value_types_of_discriminated_union.tests.js +2 -2
  64. package/.out/types/strict_definitions.d.ts +2 -2
  65. package/.out/types/type_of_type.d.ts +49 -0
  66. package/.out/types/type_of_type.js +70 -0
  67. package/.out/types/validating_definitions.d.ts +49 -0
  68. package/.out/types/validating_definitions.js +1 -0
  69. package/.out/types/validating_type_def_with_error.d.ts +55 -0
  70. package/.out/types/validating_type_def_with_error.js +1 -0
  71. package/.out/types/value_of_type.d.ts +24 -0
  72. package/.out/types/value_of_type.js +1 -0
  73. package/.out/types/{value_to_type_paths_of.d.ts → value_to_type_paths_of_type.d.ts} +13 -13
  74. package/.out/types/value_to_type_paths_of_type.js +1 -0
  75. package/.out/types/value_types_of_discriminated_union.d.ts +5 -4
  76. package/.out/validation/errors_of_validators.d.ts +4 -0
  77. package/.out/validation/errors_of_validators.js +1 -0
  78. package/.out/validation/specs/errors_of_validators.tests.d.ts +1 -0
  79. package/.out/validation/specs/errors_of_validators.tests.js +9 -0
  80. package/.out/validation/specs/validators_of_values.tests.d.ts +1 -0
  81. package/.out/validation/specs/validators_of_values.tests.js +21 -0
  82. package/.out/validation/validator.d.ts +21 -0
  83. package/.out/validation/validator.js +26 -0
  84. package/.out/validation/validators/defined_validator.d.ts +10 -0
  85. package/.out/validation/validators/defined_validator.js +18 -0
  86. package/.out/validation/validators/minimum_string_length_validator.d.ts +16 -0
  87. package/.out/validation/validators/minimum_string_length_validator.js +23 -0
  88. package/.out/validation/validators_of_values.d.ts +4 -0
  89. package/.out/validation/validators_of_values.js +1 -0
  90. package/.turbo/turbo-build.log +9 -9
  91. package/.turbo/turbo-check-types.log +1 -1
  92. package/.turbo/turbo-release$colon$exports.log +1 -1
  93. package/README.md +16 -2
  94. package/dist/index.cjs +364 -76
  95. package/dist/index.d.cts +365 -114
  96. package/dist/index.d.ts +365 -114
  97. package/dist/index.js +355 -73
  98. package/index.ts +17 -11
  99. package/package.json +11 -3
  100. package/transformers/copies/copy.ts +4 -4
  101. package/transformers/copies/copy_to.ts +11 -7
  102. package/transformers/copies/mobx_copy.ts +6 -6
  103. package/transformers/copies/specs/copy_to.tests.ts +8 -8
  104. package/transformers/copies/specs/mobx_copy.tests.ts +3 -3
  105. package/transformers/flatteners/{flatten_accessors_of.ts → flatten_accessors_of_type.ts} +10 -10
  106. package/transformers/flatteners/flatten_json_value_to_type_paths_of.ts +5 -5
  107. package/transformers/flatteners/{flatten_type_def_to.ts → flatten_type_to.ts} +1 -1
  108. package/transformers/flatteners/{flatten_type_defs_of.ts → flatten_types_of_type.ts} +3 -3
  109. package/transformers/flatteners/flatten_validation_errors_of_type.ts +93 -0
  110. package/transformers/flatteners/flatten_validators_of_validating_type.ts +32 -0
  111. package/transformers/flatteners/{flatten_value_type_to.ts → flatten_value_to.ts} +12 -7
  112. package/transformers/flatteners/{flatten_value_types_of.ts → flatten_values_of_type.ts} +6 -6
  113. package/transformers/flatteners/specs/{flatten_accessors_of.tests.ts → flatten_accessors_of_type.tests.ts} +10 -11
  114. package/transformers/flatteners/specs/flatten_json_value_to_type_paths_of.tests.ts +6 -6
  115. package/transformers/flatteners/specs/{flatten_type_def_to.tests.ts → flatten_type_to.tests.ts} +15 -13
  116. package/transformers/flatteners/specs/flatten_types_of_type.tests.ts +27 -0
  117. package/transformers/flatteners/specs/flatten_validation_errors_of_type.tests.ts +48 -0
  118. package/transformers/flatteners/specs/{flatten_value_type_to.tests.ts → flatten_value_to.tests.ts} +124 -91
  119. package/transformers/flatteners/specs/{flatten_value_types_of.tests.ts → flatten_values_of_type.tests.ts} +4 -4
  120. package/transformers/flatteners/specs/value_path_to_type_path.tests.ts +20 -18
  121. package/transformers/flatteners/value_path_to_type_path.ts +4 -4
  122. package/types/builders.ts +239 -71
  123. package/types/definitions.ts +2 -2
  124. package/types/{flattened_accessors_of.ts → flattened_accessors_of_type.ts} +3 -3
  125. package/types/{flattened_type_defs_of.ts → flattened_types_of_type.ts} +22 -12
  126. package/types/flattened_types_of_validating_type.ts +152 -0
  127. package/types/flattened_validators_of_validating_type.ts +33 -0
  128. package/types/flattened_values_of_type.ts +11 -0
  129. package/types/{mobx_value_type_of.ts → mobx_value_of_type.ts} +2 -2
  130. package/types/{partial_type_def_of.ts → partial_type_of_type.ts} +3 -1
  131. package/types/{json_path_of.ts → path_of.ts} +1 -1
  132. package/types/{json_paths_of.ts → paths_of_type.ts} +5 -5
  133. package/types/readonly_type_of_type.ts +54 -0
  134. package/types/specs/builder.tests.ts +205 -54
  135. package/types/specs/{flattened_accessors_of.tests.ts → flattened_accessors_of_type.tests.ts} +3 -3
  136. package/types/specs/{flattened_type_defs_of.tests.ts → flattened_types_of_type.tests.ts} +82 -34
  137. package/types/specs/flattened_validators_of_validating_type.tests.ts +47 -0
  138. package/types/specs/flattened_values_of_type.tests.ts +39 -0
  139. package/types/specs/{partial_type_def_of.tests.ts → partial_type_of_type.tests.ts} +11 -11
  140. package/types/specs/{json_paths_of.tests.ts → paths_of_type.tests.ts} +47 -47
  141. package/types/specs/{readonly_type_def_of.tests.ts → readonly_type_of_type.tests.ts} +14 -14
  142. package/types/specs/type_of_type.tests.ts +60 -0
  143. package/types/specs/{value_type_of.tests.ts → value_of_type.tests.ts} +15 -15
  144. package/types/specs/{value_to_type_paths_of.tests.ts → value_to_type_paths_of_type.tests.ts} +26 -25
  145. package/types/specs/value_types_of_discriminated_union.tests.ts +6 -6
  146. package/types/strict_definitions.ts +3 -3
  147. package/types/type_of_type.ts +178 -0
  148. package/types/validating_definitions.ts +109 -0
  149. package/types/validating_type_def_with_error.ts +93 -0
  150. package/types/value_of_type.ts +84 -0
  151. package/types/{value_to_type_paths_of.ts → value_to_type_paths_of_type.ts} +30 -29
  152. package/types/value_types_of_discriminated_union.ts +4 -3
  153. package/validation/errors_of_validators.ts +10 -0
  154. package/validation/specs/errors_of_validators.tests.ts +20 -0
  155. package/validation/specs/validators_of_values.tests.ts +68 -0
  156. package/validation/validator.ts +103 -0
  157. package/validation/validators/defined_validator.ts +22 -0
  158. package/validation/validators/minimum_string_length_validator.ts +36 -0
  159. package/validation/validators_of_values.ts +17 -0
  160. package/.out/transformers/flatteners/flatten_accessors_of.d.ts +0 -5
  161. package/.out/transformers/flatteners/flatten_accessors_of.js +0 -11
  162. package/.out/transformers/flatteners/flatten_type_defs_of.js +0 -7
  163. package/.out/transformers/flatteners/flatten_value_types_of.d.ts +0 -3
  164. package/.out/transformers/flatteners/flatten_value_types_of.js +0 -7
  165. package/.out/transformers/flatteners/specs/flatten_type_defs_of.tests.js +0 -17
  166. package/.out/types/flattened_accessors_of.d.ts +0 -9
  167. package/.out/types/flattened_value_types_of.d.ts +0 -6
  168. package/.out/types/json_path_of.d.ts +0 -1
  169. package/.out/types/readonly_type_def_of.d.ts +0 -29
  170. package/.out/types/specs/flattened_value_types_of.tests.js +0 -11
  171. package/.out/types/value_type_of.d.ts +0 -24
  172. package/transformers/flatteners/specs/flatten_type_defs_of.tests.ts +0 -26
  173. package/types/flattened_value_types_of.ts +0 -11
  174. package/types/readonly_type_def_of.ts +0 -53
  175. package/types/specs/flattened_value_types_of.tests.ts +0 -21
  176. package/types/value_type_of.ts +0 -84
  177. /package/.out/transformers/flatteners/specs/{flatten_accessors_of.tests.d.ts → flatten_accessors_of_type.tests.d.ts} +0 -0
  178. /package/.out/transformers/flatteners/specs/{flatten_type_def_to.tests.d.ts → flatten_type_to.tests.d.ts} +0 -0
  179. /package/.out/transformers/flatteners/specs/{flatten_type_defs_of.tests.d.ts → flatten_types_of_type.tests.d.ts} +0 -0
  180. /package/.out/transformers/flatteners/specs/{flatten_value_type_to.tests.d.ts → flatten_validation_errors_of_type.tests.d.ts} +0 -0
  181. /package/.out/transformers/flatteners/specs/{flatten_value_types_of.tests.d.ts → flatten_value_to.tests.d.ts} +0 -0
  182. /package/.out/{types/flattened_accessors_of.js → transformers/flatteners/specs/flatten_values_of_type.tests.d.ts} +0 -0
  183. /package/.out/types/{flattened_type_defs_of.js → flattened_accessors_of_type.js} +0 -0
  184. /package/.out/types/{flattened_value_types_of.js → flattened_types_of_type.js} +0 -0
  185. /package/.out/types/{json_path_of.js → flattened_types_of_validating_type.js} +0 -0
  186. /package/.out/types/{json_paths_of.js → flattened_validators_of_validating_type.js} +0 -0
  187. /package/.out/types/{partial_type_def_of.js → flattened_values_of_type.js} +0 -0
  188. /package/.out/types/{mobx_value_type_of.js → mobx_value_of_type.js} +0 -0
  189. /package/.out/types/{readonly_type_def_of.js → partial_type_of_type.js} +0 -0
  190. /package/.out/types/{specs/flattened_accessors_of.tests.d.ts → path_of.js} +0 -0
  191. /package/.out/types/{specs/flattened_type_defs_of.tests.d.ts → paths_of_type.js} +0 -0
  192. /package/.out/types/{specs/flattened_value_types_of.tests.d.ts → readonly_type_of_type.js} +0 -0
  193. /package/.out/types/specs/{json_paths_of.tests.d.ts → flattened_accessors_of_type.tests.d.ts} +0 -0
  194. /package/.out/types/specs/{partial_type_def_of.tests.d.ts → flattened_types_of_type.tests.d.ts} +0 -0
  195. /package/.out/types/specs/{readonly_type_def_of.tests.d.ts → flattened_validators_of_validating_type.tests.d.ts} +0 -0
  196. /package/.out/types/specs/{value_to_type_paths_of.tests.d.ts → flattened_values_of_type.tests.d.ts} +0 -0
  197. /package/.out/types/specs/{value_type_of.tests.d.ts → partial_type_of_type.tests.d.ts} +0 -0
  198. /package/.out/types/{value_to_type_paths_of.js → specs/paths_of_type.tests.d.ts} +0 -0
  199. /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 ValueTypeOf } from './value_type_of'
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 MobxValueTypeOf<T extends Type> = ValueTypeOf<T, MobxObservable>
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 PartialTypeDefOf<T extends Type> = {
15
+ export type PartialTypeOfType<T extends Type> = {
14
16
  readonly typeDef: InternalPartialAndNullableOf<T['definition']>,
15
17
  }
16
18
 
@@ -1,4 +1,4 @@
1
- export type JsonPathOf<
1
+ export type PathOf<
2
2
  Prefix extends string,
3
3
  Accessor extends string | number | symbol,
4
4
  SegmentOverride extends string | null = null,
@@ -11,9 +11,9 @@ import {
11
11
  type Depths,
12
12
  type StartingDepth,
13
13
  } from './flattened'
14
- import { type JsonPathOf } from './json_path_of'
14
+ import { type PathOf } from './path_of'
15
15
 
16
- export type JsonPathsOf<
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
- JsonPathOf<
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
- JsonPathOf<
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
- JsonPathOf<
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