@tanstack/form-core 0.13.7 → 0.14.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/FieldApi.cjs +0 -4
- package/dist/cjs/FieldApi.cjs.map +1 -1
- package/dist/cjs/FieldApi.d.cts +2 -2
- package/dist/cjs/FormApi.cjs.map +1 -1
- package/dist/cjs/FormApi.d.cts +2 -1
- package/dist/cjs/index.d.cts +1 -0
- package/dist/cjs/util-types.d.cts +29 -0
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/cjs/utils.d.cts +0 -19
- package/dist/esm/FieldApi.d.ts +2 -2
- package/dist/esm/FieldApi.js +0 -4
- package/dist/esm/FieldApi.js.map +1 -1
- package/dist/esm/FormApi.d.ts +2 -1
- package/dist/esm/FormApi.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/util-types.d.ts +29 -0
- package/dist/esm/utils.d.ts +0 -19
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/FieldApi.ts +4 -18
- package/src/FormApi.ts +4 -1
- package/src/index.ts +1 -0
- package/src/tests/FieldApi.spec.ts +2 -22
- package/src/tests/FieldApi.test-d.ts +1 -1
- package/src/tests/FormApi.spec.ts +4 -4
- package/src/tests/mutateMergeDeep.spec.ts +1 -1
- package/src/tests/util-types.test-d.ts +106 -0
- package/src/tests/utils.spec.ts +8 -8
- package/src/util-types.ts +99 -0
- package/src/utils.ts +1 -73
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export type RequiredByKey<T, K extends keyof T> = Omit<T, K> &
|
|
2
|
+
Required<Pick<T, K>>
|
|
3
|
+
|
|
4
|
+
type Narrowable = string | number | bigint | boolean
|
|
5
|
+
|
|
6
|
+
type NarrowRaw<A> =
|
|
7
|
+
| (A extends [] ? [] : never)
|
|
8
|
+
| (A extends Narrowable ? A : never)
|
|
9
|
+
| {
|
|
10
|
+
[K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type Narrow<A> = Try<A, [], NarrowRaw<A>>
|
|
14
|
+
|
|
15
|
+
type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch
|
|
16
|
+
|
|
17
|
+
// Hack to get TypeScript to show simplified types in error messages
|
|
18
|
+
export type Pretty<T> = { [K in keyof T]: T[K] } & {}
|
|
19
|
+
|
|
20
|
+
type ComputeRange<
|
|
21
|
+
N extends number,
|
|
22
|
+
Result extends Array<unknown> = [],
|
|
23
|
+
> = Result['length'] extends N
|
|
24
|
+
? Result
|
|
25
|
+
: ComputeRange<N, [...Result, Result['length']]>
|
|
26
|
+
type Index40 = ComputeRange<40>[number]
|
|
27
|
+
|
|
28
|
+
// Is this type a tuple?
|
|
29
|
+
type IsTuple<T> = T extends readonly any[] & { length: infer Length }
|
|
30
|
+
? Length extends Index40
|
|
31
|
+
? T
|
|
32
|
+
: never
|
|
33
|
+
: never
|
|
34
|
+
|
|
35
|
+
// If this type is a tuple, what indices are allowed?
|
|
36
|
+
type AllowedIndexes<
|
|
37
|
+
Tuple extends ReadonlyArray<any>,
|
|
38
|
+
Keys extends number = never,
|
|
39
|
+
> = Tuple extends readonly []
|
|
40
|
+
? Keys
|
|
41
|
+
: Tuple extends readonly [infer _, ...infer Tail]
|
|
42
|
+
? AllowedIndexes<Tail, Keys | Tail['length']>
|
|
43
|
+
: Keys
|
|
44
|
+
|
|
45
|
+
type PrefixArrayAccessor<T extends any[], TDepth extends any[]> = {
|
|
46
|
+
[K in keyof T]: `[${number}]${DeepKeys<T[K], TDepth>}`
|
|
47
|
+
}[number]
|
|
48
|
+
|
|
49
|
+
type PrefixTupleAccessor<
|
|
50
|
+
T extends any[],
|
|
51
|
+
TIndex extends number,
|
|
52
|
+
TDepth extends any[],
|
|
53
|
+
> = {
|
|
54
|
+
[K in TIndex]: `[${K}]` | `[${K}]${DeepKeys<T[K], TDepth>}`
|
|
55
|
+
}[TIndex]
|
|
56
|
+
|
|
57
|
+
type PrefixObjectAccessor<T extends object, TDepth extends any[]> = {
|
|
58
|
+
[K in keyof T]: K extends string | number
|
|
59
|
+
?
|
|
60
|
+
| PrefixFromDepth<K, TDepth>
|
|
61
|
+
| `${PrefixFromDepth<K, TDepth>}${DeepKeys<T[K], [TDepth]>}`
|
|
62
|
+
: never
|
|
63
|
+
}[keyof T]
|
|
64
|
+
|
|
65
|
+
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5
|
|
66
|
+
? never
|
|
67
|
+
: unknown extends T
|
|
68
|
+
? PrefixFromDepth<string, TDepth>
|
|
69
|
+
: object extends T
|
|
70
|
+
? PrefixFromDepth<string, TDepth>
|
|
71
|
+
: T extends readonly any[] & IsTuple<T>
|
|
72
|
+
? PrefixTupleAccessor<T, AllowedIndexes<T>, TDepth>
|
|
73
|
+
: T extends any[]
|
|
74
|
+
? PrefixArrayAccessor<T, [...TDepth, any]>
|
|
75
|
+
: T extends Date
|
|
76
|
+
? never
|
|
77
|
+
: T extends object
|
|
78
|
+
? PrefixObjectAccessor<T, TDepth>
|
|
79
|
+
: never
|
|
80
|
+
|
|
81
|
+
type PrefixFromDepth<
|
|
82
|
+
T extends string | number,
|
|
83
|
+
TDepth extends any[],
|
|
84
|
+
> = TDepth['length'] extends 0 ? T : `.${T}`
|
|
85
|
+
|
|
86
|
+
export type DeepValue<TValue, TAccessor> = TValue extends Record<
|
|
87
|
+
string | number,
|
|
88
|
+
any
|
|
89
|
+
>
|
|
90
|
+
? TAccessor extends `${infer TBefore}[${infer TBrackets}].${infer TAfter}`
|
|
91
|
+
? DeepValue<TValue[TBefore][TBrackets], TAfter>
|
|
92
|
+
: TAccessor extends `[${infer TBrackets}]`
|
|
93
|
+
? DeepValue<TValue, TBrackets>
|
|
94
|
+
: TAccessor extends `${infer TBefore}[${infer TBrackets}]`
|
|
95
|
+
? DeepValue<TValue[TBefore], TBrackets>
|
|
96
|
+
: TAccessor extends `${infer TBefore}.${infer TAfter}`
|
|
97
|
+
? DeepValue<TValue[TBefore], TAfter>
|
|
98
|
+
: TValue[TAccessor & string]
|
|
99
|
+
: never
|
package/src/utils.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ValidationCause
|
|
1
|
+
import type { ValidationCause } from './types'
|
|
2
2
|
import type { FormValidators } from './FormApi'
|
|
3
3
|
import type { FieldValidators } from './FieldApi'
|
|
4
4
|
|
|
@@ -267,75 +267,3 @@ export function getSyncValidatorArray<T>(
|
|
|
267
267
|
return [changeValidator, serverValidator] as never
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
|
-
|
|
271
|
-
export type RequiredByKey<T, K extends keyof T> = Omit<T, K> &
|
|
272
|
-
Required<Pick<T, K>>
|
|
273
|
-
|
|
274
|
-
type ComputeRange<
|
|
275
|
-
N extends number,
|
|
276
|
-
Result extends Array<unknown> = [],
|
|
277
|
-
> = Result['length'] extends N
|
|
278
|
-
? Result
|
|
279
|
-
: ComputeRange<N, [...Result, Result['length']]>
|
|
280
|
-
type Index40 = ComputeRange<40>[number]
|
|
281
|
-
|
|
282
|
-
// Is this type a tuple?
|
|
283
|
-
type IsTuple<T> = T extends readonly any[] & { length: infer Length }
|
|
284
|
-
? Length extends Index40
|
|
285
|
-
? T
|
|
286
|
-
: never
|
|
287
|
-
: never
|
|
288
|
-
|
|
289
|
-
// If this type is a tuple, what indices are allowed?
|
|
290
|
-
type AllowedIndexes<
|
|
291
|
-
Tuple extends ReadonlyArray<any>,
|
|
292
|
-
Keys extends number = never,
|
|
293
|
-
> = Tuple extends readonly []
|
|
294
|
-
? Keys
|
|
295
|
-
: Tuple extends readonly [infer _, ...infer Tail]
|
|
296
|
-
? AllowedIndexes<Tail, Keys | Tail['length']>
|
|
297
|
-
: Keys
|
|
298
|
-
|
|
299
|
-
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5
|
|
300
|
-
? never
|
|
301
|
-
: unknown extends T
|
|
302
|
-
? string
|
|
303
|
-
: T extends readonly any[] & IsTuple<T>
|
|
304
|
-
? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth>
|
|
305
|
-
: T extends any[]
|
|
306
|
-
? DeepKeysPrefix<T, number, TDepth>
|
|
307
|
-
: T extends Date
|
|
308
|
-
? never
|
|
309
|
-
: T extends object
|
|
310
|
-
? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth>
|
|
311
|
-
: never
|
|
312
|
-
|
|
313
|
-
type DeepKeysPrefix<
|
|
314
|
-
T,
|
|
315
|
-
TPrefix,
|
|
316
|
-
TDepth extends any[],
|
|
317
|
-
> = TPrefix extends keyof T & (number | string)
|
|
318
|
-
? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}`
|
|
319
|
-
: never
|
|
320
|
-
|
|
321
|
-
export type DeepValue<T, TProp> = T extends Record<string | number, any>
|
|
322
|
-
? TProp extends `${infer TBranch}.${infer TDeepProp}`
|
|
323
|
-
? DeepValue<T[TBranch], TDeepProp>
|
|
324
|
-
: T[TProp & string]
|
|
325
|
-
: never
|
|
326
|
-
|
|
327
|
-
type Narrowable = string | number | bigint | boolean
|
|
328
|
-
|
|
329
|
-
type NarrowRaw<A> =
|
|
330
|
-
| (A extends [] ? [] : never)
|
|
331
|
-
| (A extends Narrowable ? A : never)
|
|
332
|
-
| {
|
|
333
|
-
[K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
export type Narrow<A> = Try<A, [], NarrowRaw<A>>
|
|
337
|
-
|
|
338
|
-
type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch
|
|
339
|
-
|
|
340
|
-
// Hack to get TypeScript to show simplified types in error messages
|
|
341
|
-
export type Pretty<T> = { [K in keyof T]: T[K] } & {}
|