@tanstack/form-core 0.19.1 → 0.19.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/dist/cjs/util-types.d.cts +1 -10
- package/dist/esm/util-types.d.ts +1 -10
- package/package.json +1 -1
- package/src/tests/util-types.test-d.ts +14 -0
- package/src/util-types.ts +8 -22
|
@@ -30,14 +30,5 @@ type PrefixFromDepth<T extends string | number, TDepth extends any[]> = TDepth['
|
|
|
30
30
|
Infer the type of a deeply nested property within an object or an array.
|
|
31
31
|
See the tests in `util-types.test-d.ts` for usage.
|
|
32
32
|
*/
|
|
33
|
-
export type DeepValue<TValue, TAccessor
|
|
34
|
-
...TDepth,
|
|
35
|
-
any
|
|
36
|
-
]> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets, [...TDepth, any]> : TAccessor extends keyof TValue ? TValue[TAccessor] : TValue[TAccessor & number] : TValue extends Record<string | number, any> ? TAccessor extends `${infer TBefore}[${infer TEverythingElse}` ? DeepValue<DeepValue<TValue, TBefore, [...TDepth, any]>, `[${TEverythingElse}`, [
|
|
37
|
-
...TDepth,
|
|
38
|
-
any
|
|
39
|
-
]> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets, [...TDepth, any]> : TAccessor extends `${infer TBefore}.${infer TAfter}` ? DeepValue<DeepValue<TValue, TBefore, [...TDepth, any]>, TAfter, [
|
|
40
|
-
...TDepth,
|
|
41
|
-
any
|
|
42
|
-
]> : TAccessor extends string ? TValue[TAccessor] : never : never;
|
|
33
|
+
export type DeepValue<TValue, TAccessor> = unknown extends TValue ? TValue : TValue extends ReadonlyArray<any> ? TAccessor extends `[${infer TBrackets}].${infer TAfter}` ? DeepValue<DeepValue<TValue, TBrackets>, TAfter> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets> : TAccessor extends keyof TValue ? TValue[TAccessor] : TValue[TAccessor & number] : TValue extends Record<string | number, any> ? TAccessor extends `${infer TBefore}[${infer TEverythingElse}` ? DeepValue<DeepValue<TValue, TBefore>, `[${TEverythingElse}`> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets> : TAccessor extends `${infer TBefore}.${infer TAfter}` ? DeepValue<DeepValue<TValue, TBefore>, TAfter> : TAccessor extends string ? TValue[TAccessor] : never : never;
|
|
43
34
|
export {};
|
package/dist/esm/util-types.d.ts
CHANGED
|
@@ -30,14 +30,5 @@ type PrefixFromDepth<T extends string | number, TDepth extends any[]> = TDepth['
|
|
|
30
30
|
Infer the type of a deeply nested property within an object or an array.
|
|
31
31
|
See the tests in `util-types.test-d.ts` for usage.
|
|
32
32
|
*/
|
|
33
|
-
export type DeepValue<TValue, TAccessor
|
|
34
|
-
...TDepth,
|
|
35
|
-
any
|
|
36
|
-
]> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets, [...TDepth, any]> : TAccessor extends keyof TValue ? TValue[TAccessor] : TValue[TAccessor & number] : TValue extends Record<string | number, any> ? TAccessor extends `${infer TBefore}[${infer TEverythingElse}` ? DeepValue<DeepValue<TValue, TBefore, [...TDepth, any]>, `[${TEverythingElse}`, [
|
|
37
|
-
...TDepth,
|
|
38
|
-
any
|
|
39
|
-
]> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets, [...TDepth, any]> : TAccessor extends `${infer TBefore}.${infer TAfter}` ? DeepValue<DeepValue<TValue, TBefore, [...TDepth, any]>, TAfter, [
|
|
40
|
-
...TDepth,
|
|
41
|
-
any
|
|
42
|
-
]> : TAccessor extends string ? TValue[TAccessor] : never : never;
|
|
33
|
+
export type DeepValue<TValue, TAccessor> = unknown extends TValue ? TValue : TValue extends ReadonlyArray<any> ? TAccessor extends `[${infer TBrackets}].${infer TAfter}` ? DeepValue<DeepValue<TValue, TBrackets>, TAfter> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets> : TAccessor extends keyof TValue ? TValue[TAccessor] : TValue[TAccessor & number] : TValue extends Record<string | number, any> ? TAccessor extends `${infer TBefore}[${infer TEverythingElse}` ? DeepValue<DeepValue<TValue, TBefore>, `[${TEverythingElse}`> : TAccessor extends `[${infer TBrackets}]` ? DeepValue<TValue, TBrackets> : TAccessor extends `${infer TBefore}.${infer TAfter}` ? DeepValue<DeepValue<TValue, TBefore>, TAfter> : TAccessor extends string ? TValue[TAccessor] : never : never;
|
|
43
34
|
export {};
|
package/package.json
CHANGED
|
@@ -135,3 +135,17 @@ type FormDefinitionValue = DeepValue<
|
|
|
135
135
|
>
|
|
136
136
|
|
|
137
137
|
assertType<string>(0 as never as FormDefinitionValue)
|
|
138
|
+
|
|
139
|
+
type DoubleDeepArray = DeepValue<
|
|
140
|
+
{
|
|
141
|
+
people: {
|
|
142
|
+
parents: {
|
|
143
|
+
name: string
|
|
144
|
+
age: number
|
|
145
|
+
}[]
|
|
146
|
+
}[]
|
|
147
|
+
},
|
|
148
|
+
`people[${0}].parents[${0}].name`
|
|
149
|
+
>
|
|
150
|
+
|
|
151
|
+
assertType<string>(0 as never as DoubleDeepArray)
|
package/src/util-types.ts
CHANGED
|
@@ -96,12 +96,10 @@ export type DeepValue<
|
|
|
96
96
|
TValue,
|
|
97
97
|
// A string representing the path of the property we're trying to access
|
|
98
98
|
TAccessor,
|
|
99
|
-
// (Optional) An array representing the current depth of recursion
|
|
100
|
-
TDepth extends any[] = [],
|
|
101
99
|
> =
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
?
|
|
100
|
+
// If TValue is any it will recurse forever, this terminates the recursion
|
|
101
|
+
unknown extends TValue
|
|
102
|
+
? TValue
|
|
105
103
|
: // Check if we're looking for the property in an array
|
|
106
104
|
TValue extends ReadonlyArray<any>
|
|
107
105
|
? TAccessor extends `[${infer TBrackets}].${infer TAfter}`
|
|
@@ -109,32 +107,20 @@ export type DeepValue<
|
|
|
109
107
|
Extract the first element from the accessor path (`TBrackets`)
|
|
110
108
|
and recursively call `DeepValue` with it
|
|
111
109
|
*/
|
|
112
|
-
DeepValue<
|
|
113
|
-
DeepValue<TValue, TBrackets, [...TDepth, any]>,
|
|
114
|
-
TAfter,
|
|
115
|
-
[...TDepth, any]
|
|
116
|
-
>
|
|
110
|
+
DeepValue<DeepValue<TValue, TBrackets>, TAfter>
|
|
117
111
|
: TAccessor extends `[${infer TBrackets}]`
|
|
118
|
-
? DeepValue<TValue, TBrackets
|
|
112
|
+
? DeepValue<TValue, TBrackets>
|
|
119
113
|
: TAccessor extends keyof TValue
|
|
120
114
|
? TValue[TAccessor]
|
|
121
115
|
: TValue[TAccessor & number]
|
|
122
116
|
: // Check if we're looking for the property in an object
|
|
123
117
|
TValue extends Record<string | number, any>
|
|
124
118
|
? TAccessor extends `${infer TBefore}[${infer TEverythingElse}`
|
|
125
|
-
? DeepValue<
|
|
126
|
-
DeepValue<TValue, TBefore, [...TDepth, any]>,
|
|
127
|
-
`[${TEverythingElse}`,
|
|
128
|
-
[...TDepth, any]
|
|
129
|
-
>
|
|
119
|
+
? DeepValue<DeepValue<TValue, TBefore>, `[${TEverythingElse}`>
|
|
130
120
|
: TAccessor extends `[${infer TBrackets}]`
|
|
131
|
-
? DeepValue<TValue, TBrackets
|
|
121
|
+
? DeepValue<TValue, TBrackets>
|
|
132
122
|
: TAccessor extends `${infer TBefore}.${infer TAfter}`
|
|
133
|
-
? DeepValue<
|
|
134
|
-
DeepValue<TValue, TBefore, [...TDepth, any]>,
|
|
135
|
-
TAfter,
|
|
136
|
-
[...TDepth, any]
|
|
137
|
-
>
|
|
123
|
+
? DeepValue<DeepValue<TValue, TBefore>, TAfter>
|
|
138
124
|
: TAccessor extends string
|
|
139
125
|
? TValue[TAccessor]
|
|
140
126
|
: never
|