@tanstack/form-core 0.21.0 → 0.22.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/dist/cjs/util-types.d.cts +2 -2
- package/dist/esm/util-types.d.ts +2 -2
- package/package.json +2 -2
- package/src/tests/util-types.test-d.ts +12 -0
- package/src/util-types.ts +12 -14
|
@@ -24,9 +24,9 @@ type PrefixTupleAccessor<T extends any[], TIndex extends number, TDepth extends
|
|
|
24
24
|
[K in TIndex]: `[${K}]` | `[${K}]${DeepKeys<T[K], TDepth>}`;
|
|
25
25
|
}[TIndex];
|
|
26
26
|
type PrefixObjectAccessor<T extends object, TDepth extends any[]> = {
|
|
27
|
-
[K in keyof T]
|
|
27
|
+
[K in keyof T]-?: K extends string | number ? PrefixFromDepth<K, TDepth> | `${PrefixFromDepth<K, TDepth>}${DeepKeys<T[K], [TDepth]>}` : never;
|
|
28
28
|
}[keyof T];
|
|
29
|
-
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5 ? never : unknown extends T ? PrefixFromDepth<string, TDepth> :
|
|
29
|
+
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5 ? never : unknown extends T ? PrefixFromDepth<string, TDepth> : T extends readonly any[] & IsTuple<T> ? PrefixTupleAccessor<T, AllowedIndexes<T>, TDepth> : T extends any[] ? PrefixArrayAccessor<T, [...TDepth, any]> : T extends Date ? never : T extends object ? PrefixObjectAccessor<T, TDepth> : T extends string | number | boolean | bigint ? '' : never;
|
|
30
30
|
type PrefixFromDepth<T extends string | number, TDepth extends any[]> = TDepth['length'] extends 0 ? T : `.${T}`;
|
|
31
31
|
/**
|
|
32
32
|
Infer the type of a deeply nested property within an object or an array.
|
package/dist/esm/util-types.d.ts
CHANGED
|
@@ -24,9 +24,9 @@ type PrefixTupleAccessor<T extends any[], TIndex extends number, TDepth extends
|
|
|
24
24
|
[K in TIndex]: `[${K}]` | `[${K}]${DeepKeys<T[K], TDepth>}`;
|
|
25
25
|
}[TIndex];
|
|
26
26
|
type PrefixObjectAccessor<T extends object, TDepth extends any[]> = {
|
|
27
|
-
[K in keyof T]
|
|
27
|
+
[K in keyof T]-?: K extends string | number ? PrefixFromDepth<K, TDepth> | `${PrefixFromDepth<K, TDepth>}${DeepKeys<T[K], [TDepth]>}` : never;
|
|
28
28
|
}[keyof T];
|
|
29
|
-
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5 ? never : unknown extends T ? PrefixFromDepth<string, TDepth> :
|
|
29
|
+
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5 ? never : unknown extends T ? PrefixFromDepth<string, TDepth> : T extends readonly any[] & IsTuple<T> ? PrefixTupleAccessor<T, AllowedIndexes<T>, TDepth> : T extends any[] ? PrefixArrayAccessor<T, [...TDepth, any]> : T extends Date ? never : T extends object ? PrefixObjectAccessor<T, TDepth> : T extends string | number | boolean | bigint ? '' : never;
|
|
30
30
|
type PrefixFromDepth<T extends string | number, TDepth extends any[]> = TDepth['length'] extends 0 ? T : `.${T}`;
|
|
31
31
|
/**
|
|
32
32
|
Infer the type of a deeply nested property within an object or an array.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/form-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Powerful, type-safe, framework agnostic forms.",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"src"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@tanstack/store": "^0.
|
|
36
|
+
"@tanstack/store": "^0.4.1"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {}
|
|
39
39
|
}
|
|
@@ -41,6 +41,18 @@ assertType<
|
|
|
41
41
|
| 'meta.mainUser.age'
|
|
42
42
|
>(0 as never as NestedSupport)
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Properly handles deep partial object nesting like so:
|
|
46
|
+
*/
|
|
47
|
+
type NestedPartialSupport = DeepKeys<{ meta?: { mainUser?: User } }>
|
|
48
|
+
assertType<
|
|
49
|
+
| 'meta'
|
|
50
|
+
| 'meta.mainUser'
|
|
51
|
+
| 'meta.mainUser.name'
|
|
52
|
+
| 'meta.mainUser.id'
|
|
53
|
+
| 'meta.mainUser.age'
|
|
54
|
+
>(0 as never as NestedPartialSupport)
|
|
55
|
+
|
|
44
56
|
/**
|
|
45
57
|
* Properly handles `object` edgecase nesting like so:
|
|
46
58
|
*/
|
package/src/util-types.ts
CHANGED
|
@@ -60,7 +60,7 @@ type PrefixTupleAccessor<
|
|
|
60
60
|
}[TIndex]
|
|
61
61
|
|
|
62
62
|
type PrefixObjectAccessor<T extends object, TDepth extends any[]> = {
|
|
63
|
-
[K in keyof T]
|
|
63
|
+
[K in keyof T]-?: K extends string | number
|
|
64
64
|
?
|
|
65
65
|
| PrefixFromDepth<K, TDepth>
|
|
66
66
|
| `${PrefixFromDepth<K, TDepth>}${DeepKeys<T[K], [TDepth]>}`
|
|
@@ -71,19 +71,17 @@ export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5
|
|
|
71
71
|
? never
|
|
72
72
|
: unknown extends T
|
|
73
73
|
? PrefixFromDepth<string, TDepth>
|
|
74
|
-
:
|
|
75
|
-
?
|
|
76
|
-
: T extends
|
|
77
|
-
?
|
|
78
|
-
: T extends
|
|
79
|
-
?
|
|
80
|
-
: T extends
|
|
81
|
-
?
|
|
82
|
-
: T extends
|
|
83
|
-
?
|
|
84
|
-
:
|
|
85
|
-
? ''
|
|
86
|
-
: never
|
|
74
|
+
: T extends readonly any[] & IsTuple<T>
|
|
75
|
+
? PrefixTupleAccessor<T, AllowedIndexes<T>, TDepth>
|
|
76
|
+
: T extends any[]
|
|
77
|
+
? PrefixArrayAccessor<T, [...TDepth, any]>
|
|
78
|
+
: T extends Date
|
|
79
|
+
? never
|
|
80
|
+
: T extends object
|
|
81
|
+
? PrefixObjectAccessor<T, TDepth>
|
|
82
|
+
: T extends string | number | boolean | bigint
|
|
83
|
+
? ''
|
|
84
|
+
: never
|
|
87
85
|
|
|
88
86
|
type PrefixFromDepth<
|
|
89
87
|
T extends string | number,
|