@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.
@@ -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, Validator } from './types'
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] } & {}