@@ -30,9 +30,17 @@ export type FieldValidateFn<
30
30
| Validator < TParentData , unknown >
31
31
| undefined = undefined ,
32
32
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
33
+ TParentMetaExtension extends object = never ,
33
34
> = ( props : {
34
35
value : TData
35
- fieldApi : FieldApi < TParentData , TName , TFieldValidator , TFormValidator , TData >
36
+ fieldApi : FieldApi <
37
+ TParentData ,
38
+ TName ,
39
+ TFieldValidator ,
40
+ TFormValidator ,
41
+ TData ,
42
+ TParentMetaExtension
43
+ >
36
44
} ) => ValidationError
37
45
38
46
/**
@@ -48,10 +56,18 @@ export type FieldValidateOrFn<
48
56
| Validator < TParentData , unknown >
49
57
| undefined = undefined ,
50
58
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
59
+ TParentMetaExtension extends object = never ,
51
60
> =
52
61
| ( TFieldValidator extends Validator < TData , infer TFN > ? TFN : never )
53
62
| ( TFormValidator extends Validator < TParentData , infer FFN > ? FFN : never )
54
- | FieldValidateFn < TParentData , TName , TFieldValidator , TFormValidator , TData >
63
+ | FieldValidateFn <
64
+ TParentData ,
65
+ TName ,
66
+ TFieldValidator ,
67
+ TFormValidator ,
68
+ TData ,
69
+ TParentMetaExtension
70
+ >
55
71
| StandardSchemaV1 < TData , unknown >
56
72
57
73
/**
@@ -67,9 +83,17 @@ export type FieldValidateAsyncFn<
67
83
| Validator < TParentData , unknown >
68
84
| undefined = undefined ,
69
85
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
86
+ TParentMetaExtension extends object = never ,
70
87
> = ( options : {
71
88
value : TData
72
- fieldApi : FieldApi < TParentData , TName , TFieldValidator , TFormValidator , TData >
89
+ fieldApi : FieldApi <
90
+ TParentData ,
91
+ TName ,
92
+ TFieldValidator ,
93
+ TFormValidator ,
94
+ TData ,
95
+ TParentMetaExtension
96
+ >
73
97
signal : AbortSignal
74
98
} ) => ValidationError | Promise < ValidationError >
75
99
@@ -86,6 +110,7 @@ export type FieldAsyncValidateOrFn<
86
110
| Validator < TParentData , unknown >
87
111
| undefined = undefined ,
88
112
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
113
+ TParentMetaExtension extends object = never ,
89
114
> =
90
115
| ( TFieldValidator extends Validator < TData , infer TFN > ? TFN : never )
91
116
| ( TFormValidator extends Validator < TParentData , infer FFN > ? FFN : never )
@@ -94,7 +119,8 @@ export type FieldAsyncValidateOrFn<
94
119
TName ,
95
120
TFieldValidator ,
96
121
TFormValidator ,
97
- TData
122
+ TData ,
123
+ TParentMetaExtension
98
124
>
99
125
| StandardSchemaV1 < TData , unknown >
100
126
@@ -111,9 +137,17 @@ export type FieldListenerFn<
111
137
| Validator < TParentData , unknown >
112
138
| undefined = undefined ,
113
139
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
140
+ TParentMetaExtension extends object = never ,
114
141
> = ( props : {
115
142
value : TData
116
- fieldApi : FieldApi < TParentData , TName , TFieldValidator , TFormValidator , TData >
143
+ fieldApi : FieldApi <
144
+ TParentData ,
145
+ TName ,
146
+ TFieldValidator ,
147
+ TFormValidator ,
148
+ TData ,
149
+ TParentMetaExtension
150
+ >
117
151
} ) => void
118
152
119
153
export interface FieldValidators <
@@ -126,6 +160,7 @@ export interface FieldValidators<
126
160
| Validator < TParentData , unknown >
127
161
| undefined = undefined ,
128
162
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
163
+ TParentMetaExtension extends object = never ,
129
164
> {
130
165
/**
131
166
* An optional function that takes a param of `formApi` which is a generic type of `TData` and `TParentData`
@@ -161,7 +196,8 @@ export interface FieldValidators<
161
196
TName ,
162
197
TFieldValidator ,
163
198
TFormValidator ,
164
- TData
199
+ TData ,
200
+ TParentMetaExtension
165
201
>
166
202
/**
167
203
* An optional number to represent how long the `onChangeAsync` should wait before running
@@ -197,7 +233,8 @@ export interface FieldValidators<
197
233
TName ,
198
234
TFieldValidator ,
199
235
TFormValidator ,
200
- TData
236
+ TData ,
237
+ TParentMetaExtension
201
238
>
202
239
203
240
/**
@@ -234,7 +271,8 @@ export interface FieldValidators<
234
271
TName ,
235
272
TFieldValidator ,
236
273
TFormValidator ,
237
- TData
274
+ TData ,
275
+ TParentMetaExtension
238
276
>
239
277
}
240
278
@@ -248,34 +286,39 @@ export interface FieldListeners<
248
286
| Validator < TParentData , unknown >
249
287
| undefined = undefined ,
250
288
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
289
+ TParentMetaExtension extends object = never ,
251
290
> {
252
291
onChange ?: FieldListenerFn <
253
292
TParentData ,
254
293
TName ,
255
294
TFieldValidator ,
256
295
TFormValidator ,
257
- TData
296
+ TData ,
297
+ TParentMetaExtension
258
298
>
259
299
onBlur ?: FieldListenerFn <
260
300
TParentData ,
261
301
TName ,
262
302
TFieldValidator ,
263
303
TFormValidator ,
264
- TData
304
+ TData ,
305
+ TParentMetaExtension
265
306
>
266
307
onMount ?: FieldListenerFn <
267
308
TParentData ,
268
309
TName ,
269
310
TFieldValidator ,
270
311
TFormValidator ,
271
- TData
312
+ TData ,
313
+ TParentMetaExtension
272
314
>
273
315
onSubmit ?: FieldListenerFn <
274
316
TParentData ,
275
317
TName ,
276
318
TFieldValidator ,
277
319
TFormValidator ,
278
- TData
320
+ TData ,
321
+ TParentMetaExtension
279
322
>
280
323
}
281
324
@@ -292,6 +335,7 @@ export interface FieldOptions<
292
335
| Validator < TParentData , unknown >
293
336
| undefined = undefined ,
294
337
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
338
+ TParentMetaExtension extends object = never ,
295
339
> {
296
340
/**
297
341
* The field name. The type will be `DeepKeys<TParentData>` to ensure your name is a deep key of the parent dataset.
@@ -321,7 +365,8 @@ export interface FieldOptions<
321
365
TName ,
322
366
TFieldValidator ,
323
367
TFormValidator ,
324
- TData
368
+ TData ,
369
+ TParentMetaExtension
325
370
>
326
371
/**
327
372
* An optional object with default metadata for the field.
@@ -335,7 +380,8 @@ export interface FieldOptions<
335
380
TName ,
336
381
TFieldValidator ,
337
382
TFormValidator ,
338
- TData
383
+ TData ,
384
+ TParentMetaExtension
339
385
>
340
386
}
341
387
@@ -352,14 +398,16 @@ export interface FieldApiOptions<
352
398
| Validator < TParentData , unknown >
353
399
| undefined = undefined ,
354
400
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
401
+ TParentMetaExtension extends object = never ,
355
402
> extends FieldOptions <
356
403
TParentData ,
357
404
TName ,
358
405
TFieldValidator ,
359
406
TFormValidator ,
360
- TData
407
+ TData ,
408
+ TParentMetaExtension
361
409
> {
362
- form : FormApi < TParentData , TFormValidator >
410
+ form : FormApi < TParentData , TFormValidator , TParentMetaExtension >
363
411
}
364
412
365
413
export type FieldMetaBase = {
@@ -434,6 +482,7 @@ export class FieldApi<
434
482
| Validator < TParentData , unknown >
435
483
| undefined = undefined ,
436
484
TData extends DeepValue < TParentData , TName > = DeepValue < TParentData , TName > ,
485
+ TParentMetaExtension extends object = never ,
437
486
> {
438
487
/**
439
488
* A reference to the form API instance.
@@ -443,7 +492,8 @@ export class FieldApi<
443
492
TName ,
444
493
TFieldValidator ,
445
494
TFormValidator ,
446
- TData
495
+ TData ,
496
+ TParentMetaExtension
447
497
> [ 'form' ]
448
498
/**
449
499
* The field name.
@@ -457,7 +507,8 @@ export class FieldApi<
457
507
TName ,
458
508
TFieldValidator ,
459
509
TFormValidator ,
460
- TData
510
+ TData ,
511
+ TParentMetaExtension
461
512
> = { } as any
462
513
/**
463
514
* The field state store.
@@ -480,7 +531,8 @@ export class FieldApi<
480
531
TName ,
481
532
TFieldValidator ,
482
533
TFormValidator ,
483
- TData
534
+ TData ,
535
+ TParentMetaExtension
484
536
> ,
485
537
) {
486
538
this . form = opts . form as never
@@ -523,14 +575,14 @@ export class FieldApi<
523
575
runValidator <
524
576
TValue extends {
525
577
value : TData
526
- fieldApi : FieldApi < any , any , any , any >
578
+ fieldApi : FieldApi < any , any , any , any , any , any >
527
579
validationSource : ValidationSource
528
580
} ,
529
581
TType extends 'validate' | 'validateAsync' ,
530
582
> ( props : {
531
583
validate : TType extends 'validate'
532
- ? FieldValidateOrFn < any , any , any , any >
533
- : FieldAsyncValidateOrFn < any , any , any , any >
584
+ ? FieldValidateOrFn < any , any , any , any , any , any >
585
+ : FieldAsyncValidateOrFn < any , any , any , any , any , any >
534
586
value : TValue
535
587
type : TType
536
588
// When `api` is 'field', the return type cannot be `FormValidationError`
@@ -558,7 +610,9 @@ export class FieldApi<
558
610
) as never
559
611
}
560
612
561
- return ( props . validate as FieldValidateFn < any , any > ) ( props . value ) as never
613
+ return ( props . validate as FieldValidateFn < any , any , any , any , any , any > ) (
614
+ props . value ,
615
+ ) as never
562
616
}
563
617
564
618
/**
@@ -578,7 +632,7 @@ export class FieldApi<
578
632
validate : onMount ,
579
633
value : {
580
634
value : this . state . value ,
581
- fieldApi : this ,
635
+ fieldApi : this as FieldApi < any , any , any , any , any , any > ,
582
636
validationSource : 'field' ,
583
637
} ,
584
638
type : 'validate' ,
@@ -594,7 +648,7 @@ export class FieldApi<
594
648
595
649
this . options . listeners ?. onMount ?.( {
596
650
value : this . state . value ,
597
- fieldApi : this ,
651
+ fieldApi : this as FieldApi < any , any , any , any , any , any > ,
598
652
} )
599
653
600
654
return cleanup
@@ -609,7 +663,8 @@ export class FieldApi<
609
663
TName ,
610
664
TFieldValidator ,
611
665
TFormValidator ,
612
- TData
666
+ TData ,
667
+ TParentMetaExtension
613
668
> ,
614
669
) => {
615
670
// Default Value
@@ -762,15 +817,17 @@ export class FieldApi<
762
817
} )
763
818
return acc . concat ( fieldValidates as never )
764
819
} ,
765
- [ ] as Array < SyncValidator < any > & { field : FieldApi < any , any , any , any > } > ,
820
+ [ ] as Array <
821
+ SyncValidator < any > & { field : FieldApi < any , any , any , any , any , any > }
822
+ > ,
766
823
)
767
824
768
825
// Needs type cast as eslint errantly believes this is always falsy
769
826
let hasErrored = false as boolean
770
827
771
828
batch ( ( ) => {
772
829
const validateFieldFn = (
773
- field : FieldApi < any , any , any , any > ,
830
+ field : FieldApi < any , any , any , any , any , any > ,
774
831
validateObj : SyncValidator < any > ,
775
832
) => {
776
833
const errorMapKey = getErrorMapKey ( validateObj . cause )
@@ -813,7 +870,10 @@ export class FieldApi<
813
870
}
814
871
815
872
for ( const validateObj of validates ) {
816
- validateFieldFn ( this , validateObj )
873
+ validateFieldFn (
874
+ this as FieldApi < any , any , any , any , any , any > ,
875
+ validateObj ,
876
+ )
817
877
}
818
878
for ( const fieldValitateObj of linkedFieldValidates ) {
819
879
if ( ! fieldValitateObj . validate ) continue
@@ -868,7 +928,7 @@ export class FieldApi<
868
928
return acc . concat ( fieldValidates as never )
869
929
} ,
870
930
[ ] as Array <
871
- AsyncValidator < any > & { field : FieldApi < any , any , any , any > }
931
+ AsyncValidator < any > & { field : FieldApi < any , any , any , any , any , any > }
872
932
> ,
873
933
)
874
934
@@ -888,7 +948,7 @@ export class FieldApi<
888
948
const linkedPromises : Promise < ValidationError | undefined > [ ] = [ ]
889
949
890
950
const validateFieldAsyncFn = (
891
- field : FieldApi < any , any , any , any > ,
951
+ field : FieldApi < any , any , any , any , any , any > ,
892
952
validateObj : AsyncValidator < any > ,
893
953
promises : Promise < ValidationError | undefined > [ ] ,
894
954
) => {
@@ -958,7 +1018,11 @@ export class FieldApi<
958
1018
// TODO: Dedupe this logic to reduce bundle size
959
1019
for ( const validateObj of validates ) {
960
1020
if ( ! validateObj . validate ) continue
961
- validateFieldAsyncFn ( this , validateObj , validatesPromises )
1021
+ validateFieldAsyncFn (
1022
+ this as FieldApi < any , any , any , any , any , any > ,
1023
+ validateObj ,
1024
+ validatesPromises ,
1025
+ )
962
1026
}
963
1027
for ( const fieldValitateObj of linkedFieldValidates ) {
964
1028
if ( ! fieldValitateObj . validate ) continue
0 commit comments