@tanstack/form-core 1.3.2 → 1.3.4
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 +33 -11
- package/dist/esm/util-types.d.ts +33 -11
- package/package.json +1 -1
- package/src/util-types.ts +90 -35
|
@@ -12,25 +12,47 @@ type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
|
|
|
12
12
|
*/
|
|
13
13
|
export type Narrow<A> = Try<A, [], NarrowRaw<A>>;
|
|
14
14
|
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
export interface AnyDeepKeyAndValue {
|
|
16
|
+
key: string;
|
|
17
|
+
value: any;
|
|
18
|
+
}
|
|
19
|
+
export type ArrayAccessor<TParent extends AnyDeepKeyAndValue> = `${TParent['key'] extends never ? '' : TParent['key']}[${number}]`;
|
|
20
|
+
export interface ArrayDeepKeyAndValue<in out TParent extends AnyDeepKeyAndValue, in out T extends ReadonlyArray<any>> {
|
|
21
|
+
key: ArrayAccessor<TParent>;
|
|
22
|
+
value: T[number] | Nullable<TParent['value']>;
|
|
23
|
+
}
|
|
24
|
+
export type DeepKeyAndValueArray<TParent extends AnyDeepKeyAndValue, T extends ReadonlyArray<any>, TAcc> = DeepKeysAndValues<NonNullable<T[number]>, ArrayDeepKeyAndValue<TParent, T>, TAcc | ArrayDeepKeyAndValue<TParent, T>>;
|
|
25
|
+
export type TupleAccessor<TParent extends AnyDeepKeyAndValue, TKey extends string> = `${TParent['key'] extends never ? '' : TParent['key']}[${TKey}]`;
|
|
26
|
+
export interface TupleDeepKeyAndValue<in out TParent extends AnyDeepKeyAndValue, in out T, in out TKey extends AllTupleKeys<T>> {
|
|
27
|
+
key: TupleAccessor<TParent, TKey>;
|
|
28
|
+
value: T[TKey] | Nullable<TParent['value']>;
|
|
29
|
+
}
|
|
18
30
|
export type AllTupleKeys<T> = T extends any ? keyof T & `${number}` : never;
|
|
19
|
-
export type
|
|
31
|
+
export type DeepKeyAndValueTuple<TParent extends AnyDeepKeyAndValue, T extends ReadonlyArray<any>, TAcc, TAllKeys extends AllTupleKeys<T> = AllTupleKeys<T>> = TAllKeys extends any ? DeepKeysAndValues<NonNullable<T[TAllKeys]>, TupleDeepKeyAndValue<TParent, T, TAllKeys>, TAcc | TupleDeepKeyAndValue<TParent, T, TAllKeys>> : never;
|
|
20
32
|
export type AllObjectKeys<T> = T extends any ? keyof T & (string | number) : never;
|
|
21
|
-
export type ObjectAccessor<
|
|
22
|
-
export type
|
|
23
|
-
export
|
|
33
|
+
export type ObjectAccessor<TParent extends AnyDeepKeyAndValue, TKey extends string | number> = TParent['key'] extends never ? `${TKey}` : `${TParent['key']}.${TKey}`;
|
|
34
|
+
export type Nullable<T> = T & (undefined | null);
|
|
35
|
+
export interface ObjectDeepKeyAndValue<in out TParent extends AnyDeepKeyAndValue, in out T, in out TKey extends AllObjectKeys<T>> {
|
|
36
|
+
key: ObjectAccessor<TParent, TKey>;
|
|
37
|
+
value: T[TKey] | Nullable<TParent['value']>;
|
|
38
|
+
}
|
|
39
|
+
export type DeepKeyAndValueObject<TParent extends AnyDeepKeyAndValue, T, TAcc, TAllKeys extends AllObjectKeys<T> = AllObjectKeys<T>> = TAllKeys extends any ? DeepKeysAndValues<NonNullable<T[TAllKeys]>, ObjectDeepKeyAndValue<TParent, T, TAllKeys>, TAcc | ObjectDeepKeyAndValue<TParent, T, TAllKeys>> : never;
|
|
40
|
+
export type UnknownAccessor<TParent extends AnyDeepKeyAndValue> = TParent['key'] extends never ? string : `${TParent['key']}.${string}`;
|
|
41
|
+
export interface UnknownDeepKeyAndValue<TParent extends AnyDeepKeyAndValue> {
|
|
42
|
+
key: UnknownAccessor<TParent>;
|
|
43
|
+
value: unknown;
|
|
44
|
+
}
|
|
45
|
+
export type DeepKeyAndValueUnknown<TParent extends AnyDeepKeyAndValue> = UnknownDeepKeyAndValue<TParent>;
|
|
46
|
+
export type DeepKeysAndValues<T, TParent extends AnyDeepKeyAndValue = never, TAcc = never> = IsAny<T> extends true ? T : T extends string | number | boolean | bigint | Date ? TAcc : T extends ReadonlyArray<any> ? number extends T['length'] ? DeepKeyAndValueArray<TParent, T, TAcc> : DeepKeyAndValueTuple<TParent, T, TAcc> : keyof T extends never ? TAcc | DeepKeyAndValueUnknown<TParent> : T extends object ? DeepKeyAndValueObject<TParent, T, TAcc> : TAcc;
|
|
24
47
|
export type DeepRecord<T> = {
|
|
25
|
-
[TRecord in
|
|
48
|
+
[TRecord in DeepKeysAndValues<T> extends AnyDeepKeyAndValue ? DeepKeysAndValues<T> : never as TRecord['key']]: TRecord['value'];
|
|
26
49
|
};
|
|
27
|
-
type UnionKeys<T> = T extends any ? keyof T : never;
|
|
28
50
|
/**
|
|
29
51
|
* The keys of an object or array, deeply nested.
|
|
30
52
|
*/
|
|
31
|
-
export type DeepKeys<T> = unknown extends T ? string :
|
|
53
|
+
export type DeepKeys<T> = unknown extends T ? string : DeepKeysAndValues<T> extends AnyDeepKeyAndValue ? DeepKeysAndValues<T>['key'] : never;
|
|
32
54
|
/**
|
|
33
55
|
* Infer the type of a deeply nested property within an object or an array.
|
|
34
56
|
*/
|
|
35
|
-
export type DeepValue<TValue, TAccessor> = DeepRecord<TValue> extends infer TDeepRecord ?
|
|
57
|
+
export type DeepValue<TValue, TAccessor> = DeepRecord<TValue> extends infer TDeepRecord ? TAccessor extends keyof TDeepRecord ? TDeepRecord[TAccessor] : never : never;
|
|
36
58
|
export {};
|
package/dist/esm/util-types.d.ts
CHANGED
|
@@ -12,25 +12,47 @@ type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
|
|
|
12
12
|
*/
|
|
13
13
|
export type Narrow<A> = Try<A, [], NarrowRaw<A>>;
|
|
14
14
|
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
export interface AnyDeepKeyAndValue {
|
|
16
|
+
key: string;
|
|
17
|
+
value: any;
|
|
18
|
+
}
|
|
19
|
+
export type ArrayAccessor<TParent extends AnyDeepKeyAndValue> = `${TParent['key'] extends never ? '' : TParent['key']}[${number}]`;
|
|
20
|
+
export interface ArrayDeepKeyAndValue<in out TParent extends AnyDeepKeyAndValue, in out T extends ReadonlyArray<any>> {
|
|
21
|
+
key: ArrayAccessor<TParent>;
|
|
22
|
+
value: T[number] | Nullable<TParent['value']>;
|
|
23
|
+
}
|
|
24
|
+
export type DeepKeyAndValueArray<TParent extends AnyDeepKeyAndValue, T extends ReadonlyArray<any>, TAcc> = DeepKeysAndValues<NonNullable<T[number]>, ArrayDeepKeyAndValue<TParent, T>, TAcc | ArrayDeepKeyAndValue<TParent, T>>;
|
|
25
|
+
export type TupleAccessor<TParent extends AnyDeepKeyAndValue, TKey extends string> = `${TParent['key'] extends never ? '' : TParent['key']}[${TKey}]`;
|
|
26
|
+
export interface TupleDeepKeyAndValue<in out TParent extends AnyDeepKeyAndValue, in out T, in out TKey extends AllTupleKeys<T>> {
|
|
27
|
+
key: TupleAccessor<TParent, TKey>;
|
|
28
|
+
value: T[TKey] | Nullable<TParent['value']>;
|
|
29
|
+
}
|
|
18
30
|
export type AllTupleKeys<T> = T extends any ? keyof T & `${number}` : never;
|
|
19
|
-
export type
|
|
31
|
+
export type DeepKeyAndValueTuple<TParent extends AnyDeepKeyAndValue, T extends ReadonlyArray<any>, TAcc, TAllKeys extends AllTupleKeys<T> = AllTupleKeys<T>> = TAllKeys extends any ? DeepKeysAndValues<NonNullable<T[TAllKeys]>, TupleDeepKeyAndValue<TParent, T, TAllKeys>, TAcc | TupleDeepKeyAndValue<TParent, T, TAllKeys>> : never;
|
|
20
32
|
export type AllObjectKeys<T> = T extends any ? keyof T & (string | number) : never;
|
|
21
|
-
export type ObjectAccessor<
|
|
22
|
-
export type
|
|
23
|
-
export
|
|
33
|
+
export type ObjectAccessor<TParent extends AnyDeepKeyAndValue, TKey extends string | number> = TParent['key'] extends never ? `${TKey}` : `${TParent['key']}.${TKey}`;
|
|
34
|
+
export type Nullable<T> = T & (undefined | null);
|
|
35
|
+
export interface ObjectDeepKeyAndValue<in out TParent extends AnyDeepKeyAndValue, in out T, in out TKey extends AllObjectKeys<T>> {
|
|
36
|
+
key: ObjectAccessor<TParent, TKey>;
|
|
37
|
+
value: T[TKey] | Nullable<TParent['value']>;
|
|
38
|
+
}
|
|
39
|
+
export type DeepKeyAndValueObject<TParent extends AnyDeepKeyAndValue, T, TAcc, TAllKeys extends AllObjectKeys<T> = AllObjectKeys<T>> = TAllKeys extends any ? DeepKeysAndValues<NonNullable<T[TAllKeys]>, ObjectDeepKeyAndValue<TParent, T, TAllKeys>, TAcc | ObjectDeepKeyAndValue<TParent, T, TAllKeys>> : never;
|
|
40
|
+
export type UnknownAccessor<TParent extends AnyDeepKeyAndValue> = TParent['key'] extends never ? string : `${TParent['key']}.${string}`;
|
|
41
|
+
export interface UnknownDeepKeyAndValue<TParent extends AnyDeepKeyAndValue> {
|
|
42
|
+
key: UnknownAccessor<TParent>;
|
|
43
|
+
value: unknown;
|
|
44
|
+
}
|
|
45
|
+
export type DeepKeyAndValueUnknown<TParent extends AnyDeepKeyAndValue> = UnknownDeepKeyAndValue<TParent>;
|
|
46
|
+
export type DeepKeysAndValues<T, TParent extends AnyDeepKeyAndValue = never, TAcc = never> = IsAny<T> extends true ? T : T extends string | number | boolean | bigint | Date ? TAcc : T extends ReadonlyArray<any> ? number extends T['length'] ? DeepKeyAndValueArray<TParent, T, TAcc> : DeepKeyAndValueTuple<TParent, T, TAcc> : keyof T extends never ? TAcc | DeepKeyAndValueUnknown<TParent> : T extends object ? DeepKeyAndValueObject<TParent, T, TAcc> : TAcc;
|
|
24
47
|
export type DeepRecord<T> = {
|
|
25
|
-
[TRecord in
|
|
48
|
+
[TRecord in DeepKeysAndValues<T> extends AnyDeepKeyAndValue ? DeepKeysAndValues<T> : never as TRecord['key']]: TRecord['value'];
|
|
26
49
|
};
|
|
27
|
-
type UnionKeys<T> = T extends any ? keyof T : never;
|
|
28
50
|
/**
|
|
29
51
|
* The keys of an object or array, deeply nested.
|
|
30
52
|
*/
|
|
31
|
-
export type DeepKeys<T> = unknown extends T ? string :
|
|
53
|
+
export type DeepKeys<T> = unknown extends T ? string : DeepKeysAndValues<T> extends AnyDeepKeyAndValue ? DeepKeysAndValues<T>['key'] : never;
|
|
32
54
|
/**
|
|
33
55
|
* Infer the type of a deeply nested property within an object or an array.
|
|
34
56
|
*/
|
|
35
|
-
export type DeepValue<TValue, TAccessor> = DeepRecord<TValue> extends infer TDeepRecord ?
|
|
57
|
+
export type DeepValue<TValue, TAccessor> = DeepRecord<TValue> extends infer TDeepRecord ? TAccessor extends keyof TDeepRecord ? TDeepRecord[TAccessor] : never : never;
|
|
36
58
|
export {};
|
package/package.json
CHANGED
package/src/util-types.ts
CHANGED
|
@@ -21,35 +21,58 @@ export type Narrow<A> = Try<A, [], NarrowRaw<A>>
|
|
|
21
21
|
|
|
22
22
|
type IsAny<T> = 0 extends 1 & T ? true : false
|
|
23
23
|
|
|
24
|
-
export
|
|
24
|
+
export interface AnyDeepKeyAndValue {
|
|
25
|
+
key: string
|
|
26
|
+
value: any
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type ArrayAccessor<TParent extends AnyDeepKeyAndValue> =
|
|
30
|
+
`${TParent['key'] extends never ? '' : TParent['key']}[${number}]`
|
|
31
|
+
|
|
32
|
+
export interface ArrayDeepKeyAndValue<
|
|
33
|
+
in out TParent extends AnyDeepKeyAndValue,
|
|
34
|
+
in out T extends ReadonlyArray<any>,
|
|
35
|
+
> {
|
|
36
|
+
key: ArrayAccessor<TParent>
|
|
37
|
+
value: T[number] | Nullable<TParent['value']>
|
|
38
|
+
}
|
|
25
39
|
|
|
26
|
-
export type
|
|
40
|
+
export type DeepKeyAndValueArray<
|
|
41
|
+
TParent extends AnyDeepKeyAndValue,
|
|
27
42
|
T extends ReadonlyArray<any>,
|
|
28
|
-
TPrefix extends string,
|
|
29
43
|
TAcc,
|
|
30
|
-
> =
|
|
31
|
-
T[number]
|
|
32
|
-
|
|
33
|
-
TAcc |
|
|
44
|
+
> = DeepKeysAndValues<
|
|
45
|
+
NonNullable<T[number]>,
|
|
46
|
+
ArrayDeepKeyAndValue<TParent, T>,
|
|
47
|
+
TAcc | ArrayDeepKeyAndValue<TParent, T>
|
|
34
48
|
>
|
|
35
49
|
|
|
36
50
|
export type TupleAccessor<
|
|
37
|
-
|
|
38
|
-
TKey,
|
|
39
|
-
> = `${
|
|
51
|
+
TParent extends AnyDeepKeyAndValue,
|
|
52
|
+
TKey extends string,
|
|
53
|
+
> = `${TParent['key'] extends never ? '' : TParent['key']}[${TKey}]`
|
|
54
|
+
|
|
55
|
+
export interface TupleDeepKeyAndValue<
|
|
56
|
+
in out TParent extends AnyDeepKeyAndValue,
|
|
57
|
+
in out T,
|
|
58
|
+
in out TKey extends AllTupleKeys<T>,
|
|
59
|
+
> {
|
|
60
|
+
key: TupleAccessor<TParent, TKey>
|
|
61
|
+
value: T[TKey] | Nullable<TParent['value']>
|
|
62
|
+
}
|
|
40
63
|
|
|
41
64
|
export type AllTupleKeys<T> = T extends any ? keyof T & `${number}` : never
|
|
42
65
|
|
|
43
|
-
export type
|
|
66
|
+
export type DeepKeyAndValueTuple<
|
|
67
|
+
TParent extends AnyDeepKeyAndValue,
|
|
44
68
|
T extends ReadonlyArray<any>,
|
|
45
|
-
TPrefix extends string,
|
|
46
69
|
TAcc,
|
|
47
70
|
TAllKeys extends AllTupleKeys<T> = AllTupleKeys<T>,
|
|
48
71
|
> = TAllKeys extends any
|
|
49
|
-
?
|
|
50
|
-
T[TAllKeys]
|
|
51
|
-
|
|
52
|
-
TAcc |
|
|
72
|
+
? DeepKeysAndValues<
|
|
73
|
+
NonNullable<T[TAllKeys]>,
|
|
74
|
+
TupleDeepKeyAndValue<TParent, T, TAllKeys>,
|
|
75
|
+
TAcc | TupleDeepKeyAndValue<TParent, T, TAllKeys>
|
|
53
76
|
>
|
|
54
77
|
: never
|
|
55
78
|
|
|
@@ -58,53 +81,85 @@ export type AllObjectKeys<T> = T extends any
|
|
|
58
81
|
: never
|
|
59
82
|
|
|
60
83
|
export type ObjectAccessor<
|
|
61
|
-
|
|
84
|
+
TParent extends AnyDeepKeyAndValue,
|
|
62
85
|
TKey extends string | number,
|
|
63
|
-
> =
|
|
86
|
+
> = TParent['key'] extends never ? `${TKey}` : `${TParent['key']}.${TKey}`
|
|
87
|
+
|
|
88
|
+
export type Nullable<T> = T & (undefined | null)
|
|
89
|
+
|
|
90
|
+
export interface ObjectDeepKeyAndValue<
|
|
91
|
+
in out TParent extends AnyDeepKeyAndValue,
|
|
92
|
+
in out T,
|
|
93
|
+
in out TKey extends AllObjectKeys<T>,
|
|
94
|
+
> {
|
|
95
|
+
key: ObjectAccessor<TParent, TKey>
|
|
96
|
+
value: T[TKey] | Nullable<TParent['value']>
|
|
97
|
+
}
|
|
64
98
|
|
|
65
|
-
export type
|
|
99
|
+
export type DeepKeyAndValueObject<
|
|
100
|
+
TParent extends AnyDeepKeyAndValue,
|
|
66
101
|
T,
|
|
67
|
-
TPrefix extends string,
|
|
68
102
|
TAcc,
|
|
69
103
|
TAllKeys extends AllObjectKeys<T> = AllObjectKeys<T>,
|
|
70
104
|
> = TAllKeys extends any
|
|
71
|
-
?
|
|
72
|
-
T[TAllKeys]
|
|
73
|
-
|
|
74
|
-
TAcc |
|
|
105
|
+
? DeepKeysAndValues<
|
|
106
|
+
NonNullable<T[TAllKeys]>,
|
|
107
|
+
ObjectDeepKeyAndValue<TParent, T, TAllKeys>,
|
|
108
|
+
TAcc | ObjectDeepKeyAndValue<TParent, T, TAllKeys>
|
|
75
109
|
>
|
|
76
110
|
: never
|
|
77
111
|
|
|
78
|
-
export type
|
|
112
|
+
export type UnknownAccessor<TParent extends AnyDeepKeyAndValue> =
|
|
113
|
+
TParent['key'] extends never ? string : `${TParent['key']}.${string}`
|
|
114
|
+
|
|
115
|
+
export interface UnknownDeepKeyAndValue<TParent extends AnyDeepKeyAndValue> {
|
|
116
|
+
key: UnknownAccessor<TParent>
|
|
117
|
+
value: unknown
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export type DeepKeyAndValueUnknown<TParent extends AnyDeepKeyAndValue> =
|
|
121
|
+
UnknownDeepKeyAndValue<TParent>
|
|
122
|
+
|
|
123
|
+
export type DeepKeysAndValues<
|
|
124
|
+
T,
|
|
125
|
+
TParent extends AnyDeepKeyAndValue = never,
|
|
126
|
+
TAcc = never,
|
|
127
|
+
> =
|
|
79
128
|
IsAny<T> extends true
|
|
80
129
|
? T
|
|
81
130
|
: T extends string | number | boolean | bigint | Date
|
|
82
131
|
? TAcc
|
|
83
132
|
: T extends ReadonlyArray<any>
|
|
84
133
|
? number extends T['length']
|
|
85
|
-
?
|
|
86
|
-
:
|
|
87
|
-
: T extends
|
|
88
|
-
?
|
|
89
|
-
:
|
|
134
|
+
? DeepKeyAndValueArray<TParent, T, TAcc>
|
|
135
|
+
: DeepKeyAndValueTuple<TParent, T, TAcc>
|
|
136
|
+
: keyof T extends never
|
|
137
|
+
? TAcc | DeepKeyAndValueUnknown<TParent>
|
|
138
|
+
: T extends object
|
|
139
|
+
? DeepKeyAndValueObject<TParent, T, TAcc>
|
|
140
|
+
: TAcc
|
|
90
141
|
|
|
91
142
|
export type DeepRecord<T> = {
|
|
92
|
-
[TRecord in
|
|
143
|
+
[TRecord in DeepKeysAndValues<T> extends AnyDeepKeyAndValue
|
|
144
|
+
? DeepKeysAndValues<T>
|
|
145
|
+
: never as TRecord['key']]: TRecord['value']
|
|
93
146
|
}
|
|
94
147
|
|
|
95
|
-
type UnionKeys<T> = T extends any ? keyof T : never
|
|
96
|
-
|
|
97
148
|
/**
|
|
98
149
|
* The keys of an object or array, deeply nested.
|
|
99
150
|
*/
|
|
100
151
|
export type DeepKeys<T> = unknown extends T
|
|
101
152
|
? string
|
|
102
|
-
:
|
|
153
|
+
: DeepKeysAndValues<T> extends AnyDeepKeyAndValue
|
|
154
|
+
? DeepKeysAndValues<T>['key']
|
|
155
|
+
: never
|
|
103
156
|
|
|
104
157
|
/**
|
|
105
158
|
* Infer the type of a deeply nested property within an object or an array.
|
|
106
159
|
*/
|
|
107
160
|
export type DeepValue<TValue, TAccessor> =
|
|
108
161
|
DeepRecord<TValue> extends infer TDeepRecord
|
|
109
|
-
?
|
|
162
|
+
? TAccessor extends keyof TDeepRecord
|
|
163
|
+
? TDeepRecord[TAccessor]
|
|
164
|
+
: never
|
|
110
165
|
: never
|