@tanstack/form-core 1.16.0 → 1.17.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.
Files changed (61) hide show
  1. package/dist/cjs/FieldApi.cjs +48 -40
  2. package/dist/cjs/FieldApi.cjs.map +1 -1
  3. package/dist/cjs/FieldApi.d.cts +33 -30
  4. package/dist/cjs/FieldGroupApi.cjs.map +1 -1
  5. package/dist/cjs/FieldGroupApi.d.cts +6 -6
  6. package/dist/cjs/FormApi.cjs +79 -69
  7. package/dist/cjs/FormApi.cjs.map +1 -1
  8. package/dist/cjs/FormApi.d.cts +40 -35
  9. package/dist/cjs/ValidationLogic.cjs +106 -0
  10. package/dist/cjs/ValidationLogic.cjs.map +1 -0
  11. package/dist/cjs/ValidationLogic.d.cts +47 -0
  12. package/dist/cjs/formOptions.cjs.map +1 -1
  13. package/dist/cjs/formOptions.d.cts +1 -1
  14. package/dist/cjs/index.cjs +3 -0
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/index.d.cts +1 -0
  17. package/dist/cjs/mergeForm.cjs.map +1 -1
  18. package/dist/cjs/mergeForm.d.cts +1 -1
  19. package/dist/cjs/metaHelper.cjs.map +1 -1
  20. package/dist/cjs/metaHelper.d.cts +1 -1
  21. package/dist/cjs/standardSchemaValidator.cjs.map +1 -1
  22. package/dist/cjs/types.d.cts +6 -3
  23. package/dist/cjs/utils.cjs +51 -63
  24. package/dist/cjs/utils.cjs.map +1 -1
  25. package/dist/cjs/utils.d.cts +11 -5
  26. package/dist/esm/FieldApi.d.ts +33 -30
  27. package/dist/esm/FieldApi.js +48 -40
  28. package/dist/esm/FieldApi.js.map +1 -1
  29. package/dist/esm/FieldGroupApi.d.ts +6 -6
  30. package/dist/esm/FieldGroupApi.js.map +1 -1
  31. package/dist/esm/FormApi.d.ts +40 -35
  32. package/dist/esm/FormApi.js +79 -69
  33. package/dist/esm/FormApi.js.map +1 -1
  34. package/dist/esm/ValidationLogic.d.ts +47 -0
  35. package/dist/esm/ValidationLogic.js +106 -0
  36. package/dist/esm/ValidationLogic.js.map +1 -0
  37. package/dist/esm/formOptions.d.ts +1 -1
  38. package/dist/esm/formOptions.js.map +1 -1
  39. package/dist/esm/index.d.ts +1 -0
  40. package/dist/esm/index.js +3 -0
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/mergeForm.d.ts +1 -1
  43. package/dist/esm/mergeForm.js.map +1 -1
  44. package/dist/esm/metaHelper.d.ts +1 -1
  45. package/dist/esm/metaHelper.js.map +1 -1
  46. package/dist/esm/standardSchemaValidator.js.map +1 -1
  47. package/dist/esm/types.d.ts +6 -3
  48. package/dist/esm/utils.d.ts +11 -5
  49. package/dist/esm/utils.js +51 -63
  50. package/dist/esm/utils.js.map +1 -1
  51. package/package.json +16 -3
  52. package/src/FieldApi.ts +185 -14
  53. package/src/FieldGroupApi.ts +14 -0
  54. package/src/FormApi.ts +131 -3
  55. package/src/ValidationLogic.ts +200 -0
  56. package/src/formOptions.ts +1 -1
  57. package/src/index.ts +1 -0
  58. package/src/mergeForm.ts +16 -1
  59. package/src/metaHelper.ts +4 -0
  60. package/src/types.ts +17 -1
  61. package/src/utils.ts +159 -109
@@ -4,6 +4,7 @@ const store = require("@tanstack/store");
4
4
  const standardSchemaValidator = require("./standardSchemaValidator.cjs");
5
5
  const metaHelper = require("./metaHelper.cjs");
6
6
  const utils = require("./utils.cjs");
7
+ const ValidationLogic = require("./ValidationLogic.cjs");
7
8
  class FieldApi {
8
9
  /**
9
10
  * Initializes a new `FieldApi` instance.
@@ -11,7 +12,6 @@ class FieldApi {
11
12
  constructor(opts) {
12
13
  this.options = {};
13
14
  this.mount = () => {
14
- var _a, _b;
15
15
  const cleanup = this.store.mount();
16
16
  if (this.options.defaultValue !== void 0) {
17
17
  this.form.setFieldValue(this.name, this.options.defaultValue, {
@@ -37,17 +37,17 @@ class FieldApi {
37
37
  (prev) => ({
38
38
  ...prev,
39
39
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
40
- errorMap: { ...prev == null ? void 0 : prev.errorMap, onMount: error },
40
+ errorMap: { ...prev?.errorMap, onMount: error },
41
41
  errorSourceMap: {
42
42
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
43
- ...prev == null ? void 0 : prev.errorSourceMap,
43
+ ...prev?.errorSourceMap,
44
44
  onMount: "field"
45
45
  }
46
46
  })
47
47
  );
48
48
  }
49
49
  }
50
- (_b = (_a = this.options.listeners) == null ? void 0 : _a.onMount) == null ? void 0 : _b.call(_a, {
50
+ this.options.listeners?.onMount?.({
51
51
  value: this.state.value,
52
52
  fieldApi: this
53
53
  });
@@ -119,22 +119,29 @@ class FieldApi {
119
119
  for (const field of fields) {
120
120
  if (!field.instance) continue;
121
121
  const { onChangeListenTo, onBlurListenTo } = field.instance.options.validators || {};
122
- if (cause === "change" && (onChangeListenTo == null ? void 0 : onChangeListenTo.includes(this.name))) {
122
+ if (cause === "change" && onChangeListenTo?.includes(this.name)) {
123
123
  linkedFields.push(field.instance);
124
124
  }
125
- if (cause === "blur" && (onBlurListenTo == null ? void 0 : onBlurListenTo.includes(this.name))) {
125
+ if (cause === "blur" && onBlurListenTo?.includes(this.name)) {
126
126
  linkedFields.push(field.instance);
127
127
  }
128
128
  }
129
129
  return linkedFields;
130
130
  };
131
131
  this.validateSync = (cause, errorFromForm) => {
132
- var _a;
133
- const validates = utils.getSyncValidatorArray(cause, this.options);
132
+ const validates = utils.getSyncValidatorArray(cause, {
133
+ ...this.options,
134
+ form: this.form,
135
+ validationLogic: this.form.options.validationLogic || ValidationLogic.defaultValidationLogic
136
+ });
134
137
  const linkedFields = this.getLinkedFields(cause);
135
138
  const linkedFieldValidates = linkedFields.reduce(
136
139
  (acc, field) => {
137
- const fieldValidates = utils.getSyncValidatorArray(cause, field.options);
140
+ const fieldValidates = utils.getSyncValidatorArray(cause, {
141
+ ...field.options,
142
+ form: field.form,
143
+ validationLogic: field.form.options.validationLogic || ValidationLogic.defaultValidationLogic
144
+ });
138
145
  fieldValidates.forEach((validate) => {
139
146
  validate.field = field;
140
147
  });
@@ -145,7 +152,6 @@ class FieldApi {
145
152
  let hasErrored = false;
146
153
  store.batch(() => {
147
154
  const validateFieldFn = (field, validateObj) => {
148
- var _a2;
149
155
  const errorMapKey = getErrorMapKey(validateObj.cause);
150
156
  const fieldLevelError = validateObj.validate ? normalizeError(
151
157
  field.runValidator({
@@ -163,7 +169,7 @@ class FieldApi {
163
169
  formLevelError,
164
170
  fieldLevelError
165
171
  });
166
- if (((_a2 = field.state.meta.errorMap) == null ? void 0 : _a2[errorMapKey]) !== newErrorValue) {
172
+ if (field.state.meta.errorMap?.[errorMapKey] !== newErrorValue) {
167
173
  field.setMeta((prev) => ({
168
174
  ...prev,
169
175
  errorMap: {
@@ -191,7 +197,7 @@ class FieldApi {
191
197
  const submitErrKey = getErrorMapKey("submit");
192
198
  if (
193
199
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
194
- ((_a = this.state.meta.errorMap) == null ? void 0 : _a[submitErrKey]) && cause !== "submit" && !hasErrored
200
+ this.state.meta.errorMap?.[submitErrKey] && cause !== "submit" && !hasErrored
195
201
  ) {
196
202
  this.setMeta((prev) => ({
197
203
  ...prev,
@@ -208,12 +214,20 @@ class FieldApi {
208
214
  return { hasErrored };
209
215
  };
210
216
  this.validateAsync = async (cause, formValidationResultPromise) => {
211
- const validates = utils.getAsyncValidatorArray(cause, this.options);
217
+ const validates = utils.getAsyncValidatorArray(cause, {
218
+ ...this.options,
219
+ form: this.form,
220
+ validationLogic: this.form.options.validationLogic || ValidationLogic.defaultValidationLogic
221
+ });
212
222
  const asyncFormValidationResults = await formValidationResultPromise;
213
223
  const linkedFields = this.getLinkedFields(cause);
214
224
  const linkedFieldValidates = linkedFields.reduce(
215
225
  (acc, field) => {
216
- const fieldValidates = utils.getAsyncValidatorArray(cause, field.options);
226
+ const fieldValidates = utils.getAsyncValidatorArray(cause, {
227
+ ...field.options,
228
+ form: field.form,
229
+ validationLogic: field.form.options.validationLogic || ValidationLogic.defaultValidationLogic
230
+ });
217
231
  fieldValidates.forEach((validate) => {
218
232
  validate.field = field;
219
233
  });
@@ -232,14 +246,13 @@ class FieldApi {
232
246
  const validateFieldAsyncFn = (field, validateObj, promises) => {
233
247
  const errorMapKey = getErrorMapKey(validateObj.cause);
234
248
  const fieldValidatorMeta = field.getInfo().validationMetaMap[errorMapKey];
235
- fieldValidatorMeta == null ? void 0 : fieldValidatorMeta.lastAbortController.abort();
249
+ fieldValidatorMeta?.lastAbortController.abort();
236
250
  const controller = new AbortController();
237
251
  this.getInfo().validationMetaMap[errorMapKey] = {
238
252
  lastAbortController: controller
239
253
  };
240
254
  promises.push(
241
255
  new Promise(async (resolve) => {
242
- var _a;
243
256
  let rawError;
244
257
  try {
245
258
  rawError = await new Promise((rawResolve, rawReject) => {
@@ -274,7 +287,7 @@ class FieldApi {
274
287
  }
275
288
  if (controller.signal.aborted) return resolve(void 0);
276
289
  const fieldLevelError = normalizeError(rawError);
277
- const formLevelError = (_a = asyncFormValidationResults[this.name]) == null ? void 0 : _a[errorMapKey];
290
+ const formLevelError = asyncFormValidationResults[this.name]?.[errorMapKey];
278
291
  const { newErrorValue, newSource } = utils.determineFieldLevelErrorSourceAndValue({
279
292
  formLevelError,
280
293
  fieldLevelError
@@ -284,7 +297,7 @@ class FieldApi {
284
297
  ...prev,
285
298
  errorMap: {
286
299
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
287
- ...prev == null ? void 0 : prev.errorMap,
300
+ ...prev?.errorMap,
288
301
  [errorMapKey]: newErrorValue
289
302
  },
290
303
  errorSourceMap: {
@@ -321,18 +334,17 @@ class FieldApi {
321
334
  return results.filter(Boolean);
322
335
  };
323
336
  this.validate = (cause, opts2) => {
324
- var _a;
325
337
  if (!this.state.meta.isTouched) return [];
326
- const { fieldsErrorMap } = (opts2 == null ? void 0 : opts2.skipFormValidation) ? { fieldsErrorMap: {} } : this.form.validateSync(cause);
338
+ const { fieldsErrorMap } = opts2?.skipFormValidation ? { fieldsErrorMap: {} } : this.form.validateSync(cause);
327
339
  const { hasErrored } = this.validateSync(
328
340
  cause,
329
341
  fieldsErrorMap[this.name] ?? {}
330
342
  );
331
343
  if (hasErrored && !this.options.asyncAlways) {
332
- (_a = this.getInfo().validationMetaMap[getErrorMapKey(cause)]) == null ? void 0 : _a.lastAbortController.abort();
344
+ this.getInfo().validationMetaMap[getErrorMapKey(cause)]?.lastAbortController.abort();
333
345
  return this.state.meta.errors;
334
346
  }
335
- const formValidationResultPromise = (opts2 == null ? void 0 : opts2.skipFormValidation) ? Promise.resolve({}) : this.form.validateAsync(cause);
347
+ const formValidationResultPromise = opts2?.skipFormValidation ? Promise.resolve({}) : this.form.validateAsync(cause);
336
348
  return this.validateAsync(cause, formValidationResultPromise);
337
349
  };
338
350
  this.handleChange = (updater) => {
@@ -415,78 +427,72 @@ class FieldApi {
415
427
  }));
416
428
  }
417
429
  triggerOnBlurListener() {
418
- var _a, _b, _c, _d, _e, _f;
419
- const formDebounceMs = (_a = this.form.options.listeners) == null ? void 0 : _a.onBlurDebounceMs;
430
+ const formDebounceMs = this.form.options.listeners?.onBlurDebounceMs;
420
431
  if (formDebounceMs && formDebounceMs > 0) {
421
432
  if (this.timeoutIds.formListeners.blur) {
422
433
  clearTimeout(this.timeoutIds.formListeners.blur);
423
434
  }
424
435
  this.timeoutIds.formListeners.blur = setTimeout(() => {
425
- var _a2, _b2;
426
- (_b2 = (_a2 = this.form.options.listeners) == null ? void 0 : _a2.onBlur) == null ? void 0 : _b2.call(_a2, {
436
+ this.form.options.listeners?.onBlur?.({
427
437
  formApi: this.form,
428
438
  fieldApi: this
429
439
  });
430
440
  }, formDebounceMs);
431
441
  } else {
432
- (_c = (_b = this.form.options.listeners) == null ? void 0 : _b.onBlur) == null ? void 0 : _c.call(_b, {
442
+ this.form.options.listeners?.onBlur?.({
433
443
  formApi: this.form,
434
444
  fieldApi: this
435
445
  });
436
446
  }
437
- const fieldDebounceMs = (_d = this.options.listeners) == null ? void 0 : _d.onBlurDebounceMs;
447
+ const fieldDebounceMs = this.options.listeners?.onBlurDebounceMs;
438
448
  if (fieldDebounceMs && fieldDebounceMs > 0) {
439
449
  if (this.timeoutIds.listeners.blur) {
440
450
  clearTimeout(this.timeoutIds.listeners.blur);
441
451
  }
442
452
  this.timeoutIds.listeners.blur = setTimeout(() => {
443
- var _a2, _b2;
444
- (_b2 = (_a2 = this.options.listeners) == null ? void 0 : _a2.onBlur) == null ? void 0 : _b2.call(_a2, {
453
+ this.options.listeners?.onBlur?.({
445
454
  value: this.state.value,
446
455
  fieldApi: this
447
456
  });
448
457
  }, fieldDebounceMs);
449
458
  } else {
450
- (_f = (_e = this.options.listeners) == null ? void 0 : _e.onBlur) == null ? void 0 : _f.call(_e, {
459
+ this.options.listeners?.onBlur?.({
451
460
  value: this.state.value,
452
461
  fieldApi: this
453
462
  });
454
463
  }
455
464
  }
456
465
  triggerOnChangeListener() {
457
- var _a, _b, _c, _d, _e, _f;
458
- const formDebounceMs = (_a = this.form.options.listeners) == null ? void 0 : _a.onChangeDebounceMs;
466
+ const formDebounceMs = this.form.options.listeners?.onChangeDebounceMs;
459
467
  if (formDebounceMs && formDebounceMs > 0) {
460
468
  if (this.timeoutIds.formListeners.change) {
461
469
  clearTimeout(this.timeoutIds.formListeners.change);
462
470
  }
463
471
  this.timeoutIds.formListeners.change = setTimeout(() => {
464
- var _a2, _b2;
465
- (_b2 = (_a2 = this.form.options.listeners) == null ? void 0 : _a2.onChange) == null ? void 0 : _b2.call(_a2, {
472
+ this.form.options.listeners?.onChange?.({
466
473
  formApi: this.form,
467
474
  fieldApi: this
468
475
  });
469
476
  }, formDebounceMs);
470
477
  } else {
471
- (_c = (_b = this.form.options.listeners) == null ? void 0 : _b.onChange) == null ? void 0 : _c.call(_b, {
478
+ this.form.options.listeners?.onChange?.({
472
479
  formApi: this.form,
473
480
  fieldApi: this
474
481
  });
475
482
  }
476
- const fieldDebounceMs = (_d = this.options.listeners) == null ? void 0 : _d.onChangeDebounceMs;
483
+ const fieldDebounceMs = this.options.listeners?.onChangeDebounceMs;
477
484
  if (fieldDebounceMs && fieldDebounceMs > 0) {
478
485
  if (this.timeoutIds.listeners.change) {
479
486
  clearTimeout(this.timeoutIds.listeners.change);
480
487
  }
481
488
  this.timeoutIds.listeners.change = setTimeout(() => {
482
- var _a2, _b2;
483
- (_b2 = (_a2 = this.options.listeners) == null ? void 0 : _a2.onChange) == null ? void 0 : _b2.call(_a2, {
489
+ this.options.listeners?.onChange?.({
484
490
  value: this.state.value,
485
491
  fieldApi: this
486
492
  });
487
493
  }, fieldDebounceMs);
488
494
  } else {
489
- (_f = (_e = this.options.listeners) == null ? void 0 : _e.onChange) == null ? void 0 : _f.call(_e, {
495
+ this.options.listeners?.onChange?.({
490
496
  value: this.state.value,
491
497
  fieldApi: this
492
498
  });
@@ -509,6 +515,8 @@ function getErrorMapKey(cause) {
509
515
  return "onMount";
510
516
  case "server":
511
517
  return "onServer";
518
+ case "dynamic":
519
+ return "onDynamic";
512
520
  case "change":
513
521
  default:
514
522
  return "onChange";
@@ -1 +1 @@
1
- {"version":3,"file":"FieldApi.cjs","sources":["../../src/FieldApi.ts"],"sourcesContent":["import { Derived, batch } from '@tanstack/store'\nimport {\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta } from './metaHelper'\nimport {\n determineFieldLevelErrorSourceAndValue,\n getAsyncValidatorArray,\n getBy,\n getSyncValidatorArray,\n} from './utils'\nimport type { DeepKeys, DeepValue, UnwrapOneLevelOfArray } from './util-types'\nimport type {\n StandardSchemaV1,\n StandardSchemaV1Issue,\n TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type {\n FieldInfo,\n FormApi,\n FormAsyncValidateOrFn,\n FormValidateAsyncFn,\n FormValidateFn,\n FormValidateOrFn,\n} from './FormApi'\nimport type {\n ListenerCause,\n UpdateMetaOptions,\n ValidationCause,\n ValidationError,\n ValidationErrorMap,\n ValidationErrorMapSource,\n} from './types'\nimport type { AsyncValidator, SyncValidator, Updater } from './utils'\n\n/**\n * @private\n */\n// TODO: Add the `Unwrap` type to the errors\ntype FieldErrorMapFromValidator<\n TFormData,\n TName extends DeepKeys<TFormData>,\n TData extends DeepValue<TFormData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n> = Partial<\n Record<\n DeepKeys<TFormData>,\n ValidationErrorMap<\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >\n>\n\n/**\n * @private\n */\nexport type FieldValidateFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => unknown\n\n/**\n * @private\n */\nexport type FieldValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FieldValidateFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\ntype StandardBrandedSchemaV1<T> = T & { __standardSchemaV1: true }\n\ntype UnwrapFormValidateOrFnForInner<\n TValidateOrFn extends undefined | FormValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateFn<any>]\n ? ReturnType<TValidateOrFn>\n : [TValidateOrFn] extends [StandardSchemaV1<infer TOut, any>]\n ? StandardBrandedSchemaV1<TOut>\n : undefined\n\nexport type UnwrapFieldValidateOrFn<\n TName extends string,\n TValidateOrFn extends undefined | FieldValidateOrFn<any, any, any>,\n TFormValidateOrFn extends undefined | FormValidateOrFn<any>,\n> =\n | ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>]\n ? TName extends keyof TStandardOut\n ? StandardSchemaV1Issue[]\n : undefined\n : undefined)\n | (UnwrapFormValidateOrFnForInner<TFormValidateOrFn> extends infer TFormValidateVal\n ? TFormValidateVal extends { __standardSchemaV1: true }\n ? [DeepValue<TFormValidateVal, TName>] extends [never]\n ? undefined\n : StandardSchemaV1Issue[]\n : TFormValidateVal extends { fields: any }\n ? TName extends keyof TFormValidateVal['fields']\n ? TFormValidateVal['fields'][TName]\n : undefined\n : undefined\n : never)\n | ([TValidateOrFn] extends [FieldValidateFn<any, any, any>]\n ? ReturnType<TValidateOrFn>\n : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][]\n StandardSchemaV1Issue[]\n : undefined)\n\n/**\n * @private\n */\nexport type FieldValidateAsyncFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (options: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n signal: AbortSignal\n}) => unknown | Promise<unknown>\n\n/**\n * @private\n */\nexport type FieldAsyncValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FieldValidateAsyncFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\ntype UnwrapFormAsyncValidateOrFnForInner<\n TValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateAsyncFn<any>]\n ? Awaited<ReturnType<TValidateOrFn>>\n : [TValidateOrFn] extends [StandardSchemaV1<infer TOut, any>]\n ? StandardBrandedSchemaV1<TOut>\n : undefined\n\nexport type UnwrapFieldAsyncValidateOrFn<\n TName extends string,\n TValidateOrFn extends undefined | FieldAsyncValidateOrFn<any, any, any>,\n TFormValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> =\n | ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>]\n ? TName extends keyof TStandardOut\n ? StandardSchemaV1Issue[]\n : undefined\n : undefined)\n | (UnwrapFormAsyncValidateOrFnForInner<TFormValidateOrFn> extends infer TFormValidateVal\n ? TFormValidateVal extends { __standardSchemaV1: true }\n ? [DeepValue<TFormValidateVal, TName>] extends [never]\n ? undefined\n : StandardSchemaV1Issue[]\n : TFormValidateVal extends { fields: any }\n ? TName extends keyof TFormValidateVal['fields']\n ? TFormValidateVal['fields'][TName]\n : undefined\n : undefined\n : never)\n | ([TValidateOrFn] extends [FieldValidateAsyncFn<any, any, any>]\n ? Awaited<ReturnType<TValidateOrFn>>\n : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][]\n StandardSchemaV1Issue[]\n : undefined)\n\n/**\n * @private\n */\nexport type FieldListenerFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field listener function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => void\n\nexport interface FieldValidators<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * An optional function, that runs on the mount event of input.\n */\n onMount?: TOnMount\n /**\n * An optional function, that runs on the change event of input.\n *\n * @example z.string().min(1)\n */\n onChange?: TOnChange\n /**\n * An optional property similar to `onChange` but async validation\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onChangeAsync?: TOnChangeAsync\n /**\n * An optional number to represent how long the `onChangeAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onChangeAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onChange` and `onChangeAsync` events when its value changes\n */\n onChangeListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the blur event of input.\n *\n * @example z.string().min(1)\n */\n onBlur?: TOnBlur\n /**\n * An optional property similar to `onBlur` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onBlurAsync?: TOnBlurAsync\n\n /**\n * An optional number to represent how long the `onBlurAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onBlurAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onBlur` and `onBlurAsync` events when its value changes\n */\n onBlurListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the submit event of form.\n *\n * @example z.string().min(1)\n */\n onSubmit?: TOnSubmit\n /**\n * An optional property similar to `onSubmit` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onSubmitAsync?: TOnSubmitAsync\n}\n\nexport interface FieldListeners<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n onChange?: FieldListenerFn<TParentData, TName, TData>\n onChangeDebounceMs?: number\n onBlur?: FieldListenerFn<TParentData, TName, TData>\n onBlurDebounceMs?: number\n onMount?: FieldListenerFn<TParentData, TName, TData>\n onSubmit?: FieldListenerFn<TParentData, TName, TData>\n}\n\n/**\n * An object type representing the options for a field in a form.\n */\nexport interface FieldOptions<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * The field name. The type will be `DeepKeys<TParentData>` to ensure your name is a deep key of the parent dataset.\n */\n name: TName\n /**\n * An optional default value for the field.\n */\n defaultValue?: NoInfer<TData>\n /**\n * The default time to debounce async validation if there is not a more specific debounce time passed.\n */\n asyncDebounceMs?: number\n /**\n * If `true`, always run async validation, even if there are errors emitted during synchronous validation.\n */\n asyncAlways?: boolean\n /**\n * A list of validators to pass to the field\n */\n validators?: FieldValidators<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n /**\n * An optional object with default metadata for the field.\n */\n defaultMeta?: Partial<\n FieldMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n >\n /**\n * A list of listeners which attach to the corresponding events\n */\n listeners?: FieldListeners<TParentData, TName, TData>\n /**\n * Disable the `flat(1)` operation on `field.errors`. This is useful if you want to keep the error structure as is. Not suggested for most use-cases.\n */\n disableErrorFlat?: boolean\n}\n\n/**\n * An object type representing the required options for the FieldApi class.\n */\nexport interface FieldApiOptions<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> extends FieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n > {\n form: FormApi<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TParentSubmitMeta\n >\n}\n\nexport type FieldMetaBase<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n /**\n * A flag indicating whether the field has been touched.\n */\n isTouched: boolean\n /**\n * A flag indicating whether the field has been blurred.\n */\n isBlurred: boolean\n /**\n * A flag that is `true` if the field's value has been modified by the user. Opposite of `isPristine`.\n */\n isDirty: boolean\n /**\n * A map of errors related to the field value.\n */\n errorMap: ValidationErrorMap<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>,\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>,\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>,\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>\n >\n /**\n * @private allows tracking the source of the errors in the error map\n */\n errorSourceMap: ValidationErrorMapSource\n /**\n * A flag indicating whether the field is currently being validated.\n */\n isValidating: boolean\n}\n\nexport type AnyFieldMetaBase = FieldMetaBase<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nexport type FieldMetaDerived<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n /**\n * An array of errors related to the field value.\n */\n errors: Array<\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>\n >\n >\n /**\n * A flag that is `true` if the field's value has not been modified by the user. Opposite of `isDirty`.\n */\n isPristine: boolean\n /**\n * A boolean indicating if the field is valid. Evaluates `true` if there are no field errors.\n */\n isValid: boolean\n /**\n * A flag indicating whether the field's current value is the default value\n */\n isDefaultValue: boolean\n}\n\nexport type AnyFieldMetaDerived = FieldMetaDerived<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * An object type representing the metadata of a field in a form.\n */\nexport type FieldMeta<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = FieldMetaBase<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n> &\n FieldMetaDerived<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n\nexport type AnyFieldMeta = FieldMeta<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * An object type representing the state of a field.\n */\nexport type FieldState<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n /**\n * The current value of the field.\n */\n value: TData\n /**\n * The current metadata of the field.\n */\n meta: FieldMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n}\n\n/**\n * @public\n *\n * A type representing the Field API with all generics set to `any` for convenience.\n */\nexport type AnyFieldApi = FieldApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * A class representing the API for managing a form field.\n *\n * Normally, you will not need to create a new `FieldApi` instance directly.\n * Instead, you will use a framework hook/function like `useField` or `createField`\n * to create a new instance for you that uses your framework's reactivity model.\n * However, if you need to create a new instance manually, you can do so by calling\n * the `new FieldApi` constructor.\n */\nexport class FieldApi<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> {\n /**\n * A reference to the form API instance.\n */\n form: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TParentSubmitMeta\n >['form']\n /**\n * The field name.\n */\n name!: DeepKeys<TParentData>\n /**\n * The field options.\n */\n options: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TParentSubmitMeta\n > = {} as any\n /**\n * The field state store.\n */\n store!: Derived<\n FieldState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n >\n /**\n * The current field state.\n */\n get state() {\n return this.store.state\n }\n timeoutIds: {\n validations: Record<ValidationCause, ReturnType<typeof setTimeout> | null>\n listeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n formListeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n }\n\n /**\n * Initializes a new `FieldApi` instance.\n */\n constructor(\n opts: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) {\n this.form = opts.form as never\n this.name = opts.name as never\n this.timeoutIds = {\n validations: {} as Record<ValidationCause, never>,\n listeners: {} as Record<ListenerCause, never>,\n formListeners: {} as Record<ListenerCause, never>,\n }\n\n this.store = new Derived({\n deps: [this.form.store],\n fn: () => {\n const value = this.form.getFieldValue(this.name)\n const meta = this.form.getFieldMeta(this.name) ?? {\n ...defaultFieldMeta,\n ...opts.defaultMeta,\n }\n\n return {\n value,\n meta,\n } as FieldState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n },\n })\n\n this.options = opts as never\n }\n\n /**\n * @private\n */\n runValidator<\n TValue extends TStandardSchemaValidatorValue<TData> & {\n fieldApi: AnyFieldApi\n },\n TType extends 'validate' | 'validateAsync',\n >(props: {\n validate: TType extends 'validate'\n ? FieldValidateOrFn<any, any, any>\n : FieldAsyncValidateOrFn<any, any, any>\n value: TValue\n type: TType\n // When `api` is 'field', the return type cannot be `FormValidationError`\n }): unknown {\n if (isStandardSchemaValidator(props.validate)) {\n return standardSchemaValidators[props.type](\n props.value,\n props.validate,\n ) as never\n }\n\n return (props.validate as FieldValidateFn<any, any>)(props.value) as never\n }\n\n /**\n * Mounts the field instance to the form.\n */\n mount = () => {\n const cleanup = this.store.mount()\n\n if ((this.options.defaultValue as unknown) !== undefined) {\n this.form.setFieldValue(this.name, this.options.defaultValue as never, {\n dontUpdateMeta: true,\n })\n }\n\n const info = this.getInfo()\n info.instance = this as never\n\n this.update(this.options as never)\n const { onMount } = this.options.validators || {}\n\n if (onMount) {\n const error = this.runValidator({\n validate: onMount,\n value: {\n value: this.state.value,\n fieldApi: this,\n validationSource: 'field',\n },\n type: 'validate',\n })\n if (error) {\n this.setMeta(\n (prev) =>\n ({\n ...prev,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n errorMap: { ...prev?.errorMap, onMount: error },\n errorSourceMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorSourceMap,\n onMount: 'field',\n },\n }) as never,\n )\n }\n }\n\n this.options.listeners?.onMount?.({\n value: this.state.value,\n fieldApi: this,\n })\n\n return cleanup\n }\n\n /**\n * Updates the field instance with new options.\n */\n update = (\n opts: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) => {\n this.options = opts as never\n\n const nameHasChanged = this.name !== opts.name\n this.name = opts.name\n\n // Default Value\n if ((this.state.value as unknown) === undefined) {\n const formDefault = getBy(opts.form.options.defaultValues, opts.name)\n\n const defaultValue = (opts.defaultValue as unknown) ?? formDefault\n\n // The name is dynamic in array fields. It changes when the user performs operations like removing or reordering.\n // In this case, we don't want to force a default value if the store managed to find an existing value.\n if (nameHasChanged) {\n this.setValue((val) => (val as unknown) || defaultValue, {\n dontUpdateMeta: true,\n })\n } else if (defaultValue !== undefined) {\n this.setValue(defaultValue as never, {\n dontUpdateMeta: true,\n })\n }\n }\n\n // Default Meta\n if (this.form.getFieldMeta(this.name) === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n /**\n * Gets the current field value.\n * @deprecated Use `field.state.value` instead.\n */\n getValue = (): TData => {\n return this.form.getFieldValue(this.name) as TData\n }\n\n /**\n * Sets the field value and run the `change` validator.\n */\n setValue = (updater: Updater<TData>, options?: UpdateMetaOptions) => {\n this.form.setFieldValue(this.name, updater as never, options)\n\n this.triggerOnChangeListener()\n\n this.validate('change')\n }\n\n getMeta = () => this.store.state.meta\n\n /**\n * Sets the field metadata.\n */\n setMeta = (\n updater: Updater<\n FieldMetaBase<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n >,\n ) => this.form.setFieldMeta(this.name, updater)\n\n /**\n * Gets the field information object.\n */\n getInfo = () => this.form.getFieldInfo(this.name)\n\n /**\n * Pushes a new value to the field.\n */\n pushValue = (\n value: TData extends any[] ? TData[number] : never,\n opts?: UpdateMetaOptions,\n ) => {\n this.form.pushFieldValue(this.name, value as any, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Inserts a value at the specified index, shifting the subsequent values to the right.\n */\n insertValue = (\n index: number,\n value: TData extends any[] ? TData[number] : never,\n opts?: UpdateMetaOptions,\n ) => {\n this.form.insertFieldValue(this.name, index, value as any, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Replaces a value at the specified index.\n */\n replaceValue = (\n index: number,\n value: TData extends any[] ? TData[number] : never,\n opts?: UpdateMetaOptions,\n ) => {\n this.form.replaceFieldValue(this.name, index, value as any, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Removes a value at the specified index.\n */\n removeValue = (index: number, opts?: UpdateMetaOptions) => {\n this.form.removeFieldValue(this.name, index, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Swaps the values at the specified indices.\n */\n swapValues = (aIndex: number, bIndex: number, opts?: UpdateMetaOptions) => {\n this.form.swapFieldValues(this.name, aIndex, bIndex, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Moves the value at the first specified index to the second specified index.\n */\n moveValue = (aIndex: number, bIndex: number, opts?: UpdateMetaOptions) => {\n this.form.moveFieldValues(this.name, aIndex, bIndex, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Clear all values from the array.\n */\n clearValues = (opts?: UpdateMetaOptions) => {\n this.form.clearFieldValues(this.name, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * @private\n */\n getLinkedFields = (cause: ValidationCause) => {\n const fields = Object.values(this.form.fieldInfo) as FieldInfo<any>[]\n\n const linkedFields: AnyFieldApi[] = []\n for (const field of fields) {\n if (!field.instance) continue\n const { onChangeListenTo, onBlurListenTo } =\n field.instance.options.validators || {}\n if (cause === 'change' && onChangeListenTo?.includes(this.name)) {\n linkedFields.push(field.instance)\n }\n if (cause === 'blur' && onBlurListenTo?.includes(this.name as string)) {\n linkedFields.push(field.instance)\n }\n }\n\n return linkedFields\n }\n\n /**\n * @private\n */\n validateSync = (\n cause: ValidationCause,\n errorFromForm: ValidationErrorMap,\n ) => {\n const validates = getSyncValidatorArray(cause, this.options)\n\n const linkedFields = this.getLinkedFields(cause)\n const linkedFieldValidates = linkedFields.reduce(\n (acc, field) => {\n const fieldValidates = getSyncValidatorArray(cause, field.options)\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n SyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n // Needs type cast as eslint errantly believes this is always falsy\n let hasErrored = false as boolean\n\n batch(() => {\n const validateFieldFn = (\n field: AnyFieldApi,\n validateObj: SyncValidator<any>,\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n\n const fieldLevelError = validateObj.validate\n ? normalizeError(\n field.runValidator({\n validate: validateObj.validate,\n value: {\n value: field.store.state.value,\n validationSource: 'field',\n fieldApi: field,\n },\n type: 'validate',\n }),\n )\n : undefined\n\n const formLevelError = errorFromForm[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (field.state.meta.errorMap?.[errorMapKey] !== newErrorValue) {\n field.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n if (newErrorValue) {\n hasErrored = true\n }\n }\n\n for (const validateObj of validates) {\n validateFieldFn(this, validateObj)\n }\n for (const fieldValitateObj of linkedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldFn(fieldValitateObj.field, fieldValitateObj)\n }\n })\n\n /**\n * when we have an error for onSubmit in the state, we want\n * to clear the error as soon as the user enters a valid value in the field\n */\n const submitErrKey = getErrorMapKey('submit')\n\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.state.meta.errorMap?.[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n return { hasErrored }\n }\n\n /**\n * @private\n */\n validateAsync = async (\n cause: ValidationCause,\n formValidationResultPromise: Promise<\n FieldErrorMapFromValidator<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >,\n ) => {\n const validates = getAsyncValidatorArray(cause, this.options)\n\n // Get the field-specific error messages that are coming from the form's validator\n const asyncFormValidationResults = await formValidationResultPromise\n\n const linkedFields = this.getLinkedFields(cause)\n const linkedFieldValidates = linkedFields.reduce(\n (acc, field) => {\n const fieldValidates = getAsyncValidatorArray(cause, field.options)\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n AsyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n if (!this.state.meta.isValidating) {\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n\n for (const linkedField of linkedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n\n /**\n * We have to use a for loop and generate our promises this way, otherwise it won't be sync\n * when there are no validators needed to be run\n */\n const validatesPromises: Promise<ValidationError | undefined>[] = []\n const linkedPromises: Promise<ValidationError | undefined>[] = []\n\n const validateFieldAsyncFn = (\n field: AnyFieldApi,\n validateObj: AsyncValidator<any>,\n promises: Promise<ValidationError | undefined>[],\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n const fieldValidatorMeta = field.getInfo().validationMetaMap[errorMapKey]\n\n fieldValidatorMeta?.lastAbortController.abort()\n const controller = new AbortController()\n\n this.getInfo().validationMetaMap[errorMapKey] = {\n lastAbortController: controller,\n }\n\n promises.push(\n new Promise<ValidationError | undefined>(async (resolve) => {\n let rawError!: ValidationError | undefined\n try {\n rawError = await new Promise((rawResolve, rawReject) => {\n if (this.timeoutIds.validations[validateObj.cause]) {\n clearTimeout(this.timeoutIds.validations[validateObj.cause]!)\n }\n\n this.timeoutIds.validations[validateObj.cause] = setTimeout(\n async () => {\n if (controller.signal.aborted) return rawResolve(undefined)\n try {\n rawResolve(\n await this.runValidator({\n validate: validateObj.validate,\n value: {\n value: field.store.state.value,\n fieldApi: field,\n signal: controller.signal,\n validationSource: 'field',\n },\n type: 'validateAsync',\n }),\n )\n } catch (e) {\n rawReject(e)\n }\n },\n validateObj.debounceMs,\n )\n })\n } catch (e: unknown) {\n rawError = e as ValidationError\n }\n if (controller.signal.aborted) return resolve(undefined)\n\n const fieldLevelError = normalizeError(rawError)\n const formLevelError =\n asyncFormValidationResults[this.name]?.[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n field.setMeta((prev) => {\n return {\n ...prev,\n errorMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }\n })\n\n resolve(newErrorValue)\n }),\n )\n }\n\n // TODO: Dedupe this logic to reduce bundle size\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n validateFieldAsyncFn(this, validateObj, validatesPromises)\n }\n for (const fieldValitateObj of linkedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldAsyncFn(\n fieldValitateObj.field,\n fieldValitateObj,\n linkedPromises,\n )\n }\n\n let results: ValidationError[] = []\n if (validatesPromises.length || linkedPromises.length) {\n results = await Promise.all(validatesPromises)\n await Promise.all(linkedPromises)\n }\n\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n\n for (const linkedField of linkedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: false }))\n }\n\n return results.filter(Boolean)\n }\n\n /**\n * Validates the field value.\n */\n validate = (\n cause: ValidationCause,\n opts?: { skipFormValidation?: boolean },\n ): ValidationError[] | Promise<ValidationError[]> => {\n // If the field is pristine, do not validate\n if (!this.state.meta.isTouched) return []\n\n // Attempt to sync validate first\n const { fieldsErrorMap } = opts?.skipFormValidation\n ? { fieldsErrorMap: {} as never }\n : this.form.validateSync(cause)\n const { hasErrored } = this.validateSync(\n cause,\n fieldsErrorMap[this.name] ?? {},\n )\n\n if (hasErrored && !this.options.asyncAlways) {\n this.getInfo().validationMetaMap[\n getErrorMapKey(cause)\n ]?.lastAbortController.abort()\n return this.state.meta.errors\n }\n\n // No error? Attempt async validation\n const formValidationResultPromise = opts?.skipFormValidation\n ? Promise.resolve({})\n : this.form.validateAsync(cause)\n return this.validateAsync(cause, formValidationResultPromise)\n }\n\n /**\n * Handles the change event.\n */\n handleChange = (updater: Updater<TData>) => {\n this.setValue(updater)\n }\n\n /**\n * Handles the blur event.\n */\n handleBlur = () => {\n const prevTouched = this.state.meta.isTouched\n if (!prevTouched) {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n if (!this.state.meta.isBlurred) {\n this.setMeta((prev) => ({ ...prev, isBlurred: true }))\n }\n this.validate('blur')\n\n this.triggerOnBlurListener()\n }\n\n /**\n * Updates the field's errorMap\n */\n setErrorMap(\n errorMap: ValidationErrorMap<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>,\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>,\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>,\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>\n >,\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n ...errorMap,\n },\n }))\n }\n\n /**\n * Parses the field's value with the given schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse this field's value with.\n */\n parseValueWithSchema = (schema: StandardSchemaV1<TData, unknown>) => {\n return standardSchemaValidators.validate(\n { value: this.state.value, validationSource: 'field' },\n schema,\n )\n }\n\n /**\n * Parses the field's value with the given schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse this field's value with.\n */\n parseValueWithSchemaAsync = (schema: StandardSchemaV1<TData, unknown>) => {\n return standardSchemaValidators.validateAsync(\n { value: this.state.value, validationSource: 'field' },\n schema,\n )\n }\n\n private triggerOnBlurListener() {\n const formDebounceMs = this.form.options.listeners?.onBlurDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.blur) {\n clearTimeout(this.timeoutIds.formListeners.blur)\n }\n\n this.timeoutIds.formListeners.blur = setTimeout(() => {\n this.form.options.listeners?.onBlur?.({\n formApi: this.form,\n fieldApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onBlur?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onBlurDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.blur) {\n clearTimeout(this.timeoutIds.listeners.blur)\n }\n\n this.timeoutIds.listeners.blur = setTimeout(() => {\n this.options.listeners?.onBlur?.({\n value: this.state.value,\n fieldApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onBlur?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n }\n\n private triggerOnChangeListener() {\n const formDebounceMs = this.form.options.listeners?.onChangeDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.change) {\n clearTimeout(this.timeoutIds.formListeners.change)\n }\n\n this.timeoutIds.formListeners.change = setTimeout(() => {\n this.form.options.listeners?.onChange?.({\n formApi: this.form,\n fieldApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onChange?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onChangeDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.change) {\n clearTimeout(this.timeoutIds.listeners.change)\n }\n\n this.timeoutIds.listeners.change = setTimeout(() => {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n fieldApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n return rawError\n }\n\n return undefined\n}\n\nfunction getErrorMapKey(cause: ValidationCause) {\n switch (cause) {\n case 'submit':\n return 'onSubmit'\n case 'blur':\n return 'onBlur'\n case 'mount':\n return 'onMount'\n case 'server':\n return 'onServer'\n case 'change':\n default:\n return 'onChange'\n }\n}\n"],"names":["opts","getBy","getSyncValidatorArray","batch","determineFieldLevelErrorSourceAndValue","_a","getAsyncValidatorArray","standardSchemaValidators","Derived","defaultFieldMeta","isStandardSchemaValidator","_b"],"mappings":"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"}
1
+ {"version":3,"file":"FieldApi.cjs","sources":["../../src/FieldApi.ts"],"sourcesContent":["import { Derived, batch } from '@tanstack/store'\nimport {\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta } from './metaHelper'\nimport {\n determineFieldLevelErrorSourceAndValue,\n getAsyncValidatorArray,\n getBy,\n getSyncValidatorArray,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport type { DeepKeys, DeepValue, UnwrapOneLevelOfArray } from './util-types'\nimport type {\n StandardSchemaV1,\n StandardSchemaV1Issue,\n TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type {\n FieldInfo,\n FormApi,\n FormAsyncValidateOrFn,\n FormValidateAsyncFn,\n FormValidateFn,\n FormValidateOrFn,\n} from './FormApi'\nimport type {\n ListenerCause,\n UpdateMetaOptions,\n ValidationCause,\n ValidationError,\n ValidationErrorMap,\n ValidationErrorMapSource,\n} from './types'\nimport type { AsyncValidator, SyncValidator, Updater } from './utils'\n\n/**\n * @private\n */\n// TODO: Add the `Unwrap` type to the errors\ntype FieldErrorMapFromValidator<\n TFormData,\n TName extends DeepKeys<TFormData>,\n TData extends DeepValue<TFormData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n> = Partial<\n Record<\n DeepKeys<TFormData>,\n ValidationErrorMap<\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >\n>\n\n/**\n * @private\n */\nexport type FieldValidateFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => unknown\n\n/**\n * @private\n */\nexport type FieldValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FieldValidateFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\ntype StandardBrandedSchemaV1<T> = T & { __standardSchemaV1: true }\n\ntype UnwrapFormValidateOrFnForInner<\n TValidateOrFn extends undefined | FormValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateFn<any>]\n ? ReturnType<TValidateOrFn>\n : [TValidateOrFn] extends [StandardSchemaV1<infer TOut, any>]\n ? StandardBrandedSchemaV1<TOut>\n : undefined\n\nexport type UnwrapFieldValidateOrFn<\n TName extends string,\n TValidateOrFn extends undefined | FieldValidateOrFn<any, any, any>,\n TFormValidateOrFn extends undefined | FormValidateOrFn<any>,\n> =\n | ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>]\n ? TName extends keyof TStandardOut\n ? StandardSchemaV1Issue[]\n : undefined\n : undefined)\n | (UnwrapFormValidateOrFnForInner<TFormValidateOrFn> extends infer TFormValidateVal\n ? TFormValidateVal extends { __standardSchemaV1: true }\n ? [DeepValue<TFormValidateVal, TName>] extends [never]\n ? undefined\n : StandardSchemaV1Issue[]\n : TFormValidateVal extends { fields: any }\n ? TName extends keyof TFormValidateVal['fields']\n ? TFormValidateVal['fields'][TName]\n : undefined\n : undefined\n : never)\n | ([TValidateOrFn] extends [FieldValidateFn<any, any, any>]\n ? ReturnType<TValidateOrFn>\n : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][]\n StandardSchemaV1Issue[]\n : undefined)\n\n/**\n * @private\n */\nexport type FieldValidateAsyncFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (options: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n signal: AbortSignal\n}) => unknown | Promise<unknown>\n\n/**\n * @private\n */\nexport type FieldAsyncValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FieldValidateAsyncFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\ntype UnwrapFormAsyncValidateOrFnForInner<\n TValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateAsyncFn<any>]\n ? Awaited<ReturnType<TValidateOrFn>>\n : [TValidateOrFn] extends [StandardSchemaV1<infer TOut, any>]\n ? StandardBrandedSchemaV1<TOut>\n : undefined\n\nexport type UnwrapFieldAsyncValidateOrFn<\n TName extends string,\n TValidateOrFn extends undefined | FieldAsyncValidateOrFn<any, any, any>,\n TFormValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> =\n | ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>]\n ? TName extends keyof TStandardOut\n ? StandardSchemaV1Issue[]\n : undefined\n : undefined)\n | (UnwrapFormAsyncValidateOrFnForInner<TFormValidateOrFn> extends infer TFormValidateVal\n ? TFormValidateVal extends { __standardSchemaV1: true }\n ? [DeepValue<TFormValidateVal, TName>] extends [never]\n ? undefined\n : StandardSchemaV1Issue[]\n : TFormValidateVal extends { fields: any }\n ? TName extends keyof TFormValidateVal['fields']\n ? TFormValidateVal['fields'][TName]\n : undefined\n : undefined\n : never)\n | ([TValidateOrFn] extends [FieldValidateAsyncFn<any, any, any>]\n ? Awaited<ReturnType<TValidateOrFn>>\n : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][]\n StandardSchemaV1Issue[]\n : undefined)\n\n/**\n * @private\n */\nexport type FieldListenerFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field listener function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => void\n\nexport interface FieldValidators<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * An optional function, that runs on the mount event of input.\n */\n onMount?: TOnMount\n /**\n * An optional function, that runs on the change event of input.\n *\n * @example z.string().min(1)\n */\n onChange?: TOnChange\n /**\n * An optional property similar to `onChange` but async validation\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onChangeAsync?: TOnChangeAsync\n /**\n * An optional number to represent how long the `onChangeAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onChangeAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onChange` and `onChangeAsync` events when its value changes\n */\n onChangeListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the blur event of input.\n *\n * @example z.string().min(1)\n */\n onBlur?: TOnBlur\n /**\n * An optional property similar to `onBlur` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onBlurAsync?: TOnBlurAsync\n\n /**\n * An optional number to represent how long the `onBlurAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onBlurAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onBlur` and `onBlurAsync` events when its value changes\n */\n onBlurListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the submit event of form.\n *\n * @example z.string().min(1)\n */\n onSubmit?: TOnSubmit\n /**\n * An optional property similar to `onSubmit` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onSubmitAsync?: TOnSubmitAsync\n onDynamic?: TOnDynamic\n onDynamicAsync?: TOnDynamicAsync\n onDynamicAsyncDebounceMs?: number\n}\n\nexport interface FieldListeners<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n onChange?: FieldListenerFn<TParentData, TName, TData>\n onChangeDebounceMs?: number\n onBlur?: FieldListenerFn<TParentData, TName, TData>\n onBlurDebounceMs?: number\n onMount?: FieldListenerFn<TParentData, TName, TData>\n onSubmit?: FieldListenerFn<TParentData, TName, TData>\n}\n\n/**\n * An object type representing the options for a field in a form.\n */\nexport interface FieldOptions<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * The field name. The type will be `DeepKeys<TParentData>` to ensure your name is a deep key of the parent dataset.\n */\n name: TName\n /**\n * An optional default value for the field.\n */\n defaultValue?: NoInfer<TData>\n /**\n * The default time to debounce async validation if there is not a more specific debounce time passed.\n */\n asyncDebounceMs?: number\n /**\n * If `true`, always run async validation, even if there are errors emitted during synchronous validation.\n */\n asyncAlways?: boolean\n /**\n * A list of validators to pass to the field\n */\n validators?: FieldValidators<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n /**\n * An optional object with default metadata for the field.\n */\n defaultMeta?: Partial<\n FieldMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n >\n /**\n * A list of listeners which attach to the corresponding events\n */\n listeners?: FieldListeners<TParentData, TName, TData>\n /**\n * Disable the `flat(1)` operation on `field.errors`. This is useful if you want to keep the error structure as is. Not suggested for most use-cases.\n */\n disableErrorFlat?: boolean\n}\n\n/**\n * An object type representing the required options for the FieldApi class.\n */\nexport interface FieldApiOptions<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> extends FieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n > {\n form: FormApi<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >\n}\n\nexport type FieldMetaBase<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n /**\n * A flag indicating whether the field has been touched.\n */\n isTouched: boolean\n /**\n * A flag indicating whether the field has been blurred.\n */\n isBlurred: boolean\n /**\n * A flag that is `true` if the field's value has been modified by the user. Opposite of `isPristine`.\n */\n isDirty: boolean\n /**\n * A map of errors related to the field value.\n */\n errorMap: ValidationErrorMap<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>,\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>,\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>,\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>,\n UnwrapFieldValidateOrFn<TName, TOnDynamic, TFormOnDynamic>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnDynamicAsync, TFormOnDynamicAsync>\n >\n\n /**\n * @private allows tracking the source of the errors in the error map\n */\n errorSourceMap: ValidationErrorMapSource\n /**\n * A flag indicating whether the field is currently being validated.\n */\n isValidating: boolean\n}\n\nexport type AnyFieldMetaBase = FieldMetaBase<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nexport type FieldMetaDerived<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n /**\n * An array of errors related to the field value.\n */\n errors: Array<\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldValidateOrFn<TName, TOnDynamic, TFormOnDynamic>\n >\n | UnwrapOneLevelOfArray<\n UnwrapFieldAsyncValidateOrFn<\n TName,\n TOnDynamicAsync,\n TFormOnDynamicAsync\n >\n >\n >\n /**\n * A flag that is `true` if the field's value has not been modified by the user. Opposite of `isDirty`.\n */\n isPristine: boolean\n /**\n * A boolean indicating if the field is valid. Evaluates `true` if there are no field errors.\n */\n isValid: boolean\n /**\n * A flag indicating whether the field's current value is the default value\n */\n isDefaultValue: boolean\n}\n\nexport type AnyFieldMetaDerived = FieldMetaDerived<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * An object type representing the metadata of a field in a form.\n */\nexport type FieldMeta<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = FieldMetaBase<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n> &\n FieldMetaDerived<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n\nexport type AnyFieldMeta = FieldMeta<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * An object type representing the state of a field.\n */\nexport type FieldState<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n /**\n * The current value of the field.\n */\n value: TData\n /**\n * The current metadata of the field.\n */\n meta: FieldMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n}\n\n/**\n * @public\n *\n * A type representing the Field API with all generics set to `any` for convenience.\n */\nexport type AnyFieldApi = FieldApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * A class representing the API for managing a form field.\n *\n * Normally, you will not need to create a new `FieldApi` instance directly.\n * Instead, you will use a framework hook/function like `useField` or `createField`\n * to create a new instance for you that uses your framework's reactivity model.\n * However, if you need to create a new instance manually, you can do so by calling\n * the `new FieldApi` constructor.\n */\nexport class FieldApi<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> {\n /**\n * A reference to the form API instance.\n */\n form: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >['form']\n /**\n * The field name.\n */\n name!: DeepKeys<TParentData>\n /**\n * The field options.\n */\n options: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > = {} as any\n /**\n * The field state store.\n */\n store!: Derived<\n FieldState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n >\n /**\n * The current field state.\n */\n get state() {\n return this.store.state\n }\n timeoutIds: {\n validations: Record<ValidationCause, ReturnType<typeof setTimeout> | null>\n listeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n formListeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n }\n\n /**\n * Initializes a new `FieldApi` instance.\n */\n constructor(\n opts: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) {\n this.form = opts.form as never\n this.name = opts.name as never\n this.timeoutIds = {\n validations: {} as Record<ValidationCause, never>,\n listeners: {} as Record<ListenerCause, never>,\n formListeners: {} as Record<ListenerCause, never>,\n }\n\n this.store = new Derived({\n deps: [this.form.store],\n fn: () => {\n const value = this.form.getFieldValue(this.name)\n const meta = this.form.getFieldMeta(this.name) ?? {\n ...defaultFieldMeta,\n ...opts.defaultMeta,\n }\n\n return {\n value,\n meta,\n } as FieldState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n },\n })\n\n this.options = opts as never\n }\n\n /**\n * @private\n */\n runValidator<\n TValue extends TStandardSchemaValidatorValue<TData> & {\n fieldApi: AnyFieldApi\n },\n TType extends 'validate' | 'validateAsync',\n >(props: {\n validate: TType extends 'validate'\n ? FieldValidateOrFn<any, any, any>\n : FieldAsyncValidateOrFn<any, any, any>\n value: TValue\n type: TType\n // When `api` is 'field', the return type cannot be `FormValidationError`\n }): unknown {\n if (isStandardSchemaValidator(props.validate)) {\n return standardSchemaValidators[props.type](\n props.value,\n props.validate,\n ) as never\n }\n\n return (props.validate as FieldValidateFn<any, any>)(props.value) as never\n }\n\n /**\n * Mounts the field instance to the form.\n */\n mount = () => {\n const cleanup = this.store.mount()\n\n if ((this.options.defaultValue as unknown) !== undefined) {\n this.form.setFieldValue(this.name, this.options.defaultValue as never, {\n dontUpdateMeta: true,\n })\n }\n\n const info = this.getInfo()\n info.instance = this as never\n\n this.update(this.options as never)\n const { onMount } = this.options.validators || {}\n\n if (onMount) {\n const error = this.runValidator({\n validate: onMount,\n value: {\n value: this.state.value,\n fieldApi: this,\n validationSource: 'field',\n },\n type: 'validate',\n })\n if (error) {\n this.setMeta(\n (prev) =>\n ({\n ...prev,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n errorMap: { ...prev?.errorMap, onMount: error },\n errorSourceMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorSourceMap,\n onMount: 'field',\n },\n }) as never,\n )\n }\n }\n\n this.options.listeners?.onMount?.({\n value: this.state.value,\n fieldApi: this,\n })\n\n return cleanup\n }\n\n /**\n * Updates the field instance with new options.\n */\n update = (\n opts: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) => {\n this.options = opts as never\n\n const nameHasChanged = this.name !== opts.name\n this.name = opts.name\n\n // Default Value\n if ((this.state.value as unknown) === undefined) {\n const formDefault = getBy(opts.form.options.defaultValues, opts.name)\n\n const defaultValue = (opts.defaultValue as unknown) ?? formDefault\n\n // The name is dynamic in array fields. It changes when the user performs operations like removing or reordering.\n // In this case, we don't want to force a default value if the store managed to find an existing value.\n if (nameHasChanged) {\n this.setValue((val) => (val as unknown) || defaultValue, {\n dontUpdateMeta: true,\n })\n } else if (defaultValue !== undefined) {\n this.setValue(defaultValue as never, {\n dontUpdateMeta: true,\n })\n }\n }\n\n // Default Meta\n if (this.form.getFieldMeta(this.name) === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n /**\n * Gets the current field value.\n * @deprecated Use `field.state.value` instead.\n */\n getValue = (): TData => {\n return this.form.getFieldValue(this.name) as TData\n }\n\n /**\n * Sets the field value and run the `change` validator.\n */\n setValue = (updater: Updater<TData>, options?: UpdateMetaOptions) => {\n this.form.setFieldValue(this.name, updater as never, options)\n\n this.triggerOnChangeListener()\n\n this.validate('change')\n }\n\n getMeta = () => this.store.state.meta\n\n /**\n * Sets the field metadata.\n */\n setMeta = (\n updater: Updater<\n FieldMetaBase<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n >,\n ) => this.form.setFieldMeta(this.name, updater)\n\n /**\n * Gets the field information object.\n */\n getInfo = () => this.form.getFieldInfo(this.name)\n\n /**\n * Pushes a new value to the field.\n */\n pushValue = (\n value: TData extends any[] ? TData[number] : never,\n opts?: UpdateMetaOptions,\n ) => {\n this.form.pushFieldValue(this.name, value as any, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Inserts a value at the specified index, shifting the subsequent values to the right.\n */\n insertValue = (\n index: number,\n value: TData extends any[] ? TData[number] : never,\n opts?: UpdateMetaOptions,\n ) => {\n this.form.insertFieldValue(this.name, index, value as any, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Replaces a value at the specified index.\n */\n replaceValue = (\n index: number,\n value: TData extends any[] ? TData[number] : never,\n opts?: UpdateMetaOptions,\n ) => {\n this.form.replaceFieldValue(this.name, index, value as any, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Removes a value at the specified index.\n */\n removeValue = (index: number, opts?: UpdateMetaOptions) => {\n this.form.removeFieldValue(this.name, index, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Swaps the values at the specified indices.\n */\n swapValues = (aIndex: number, bIndex: number, opts?: UpdateMetaOptions) => {\n this.form.swapFieldValues(this.name, aIndex, bIndex, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Moves the value at the first specified index to the second specified index.\n */\n moveValue = (aIndex: number, bIndex: number, opts?: UpdateMetaOptions) => {\n this.form.moveFieldValues(this.name, aIndex, bIndex, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * Clear all values from the array.\n */\n clearValues = (opts?: UpdateMetaOptions) => {\n this.form.clearFieldValues(this.name, opts)\n\n this.triggerOnChangeListener()\n }\n\n /**\n * @private\n */\n getLinkedFields = (cause: ValidationCause) => {\n const fields = Object.values(this.form.fieldInfo) as FieldInfo<any>[]\n\n const linkedFields: AnyFieldApi[] = []\n for (const field of fields) {\n if (!field.instance) continue\n const { onChangeListenTo, onBlurListenTo } =\n field.instance.options.validators || {}\n if (cause === 'change' && onChangeListenTo?.includes(this.name)) {\n linkedFields.push(field.instance)\n }\n if (cause === 'blur' && onBlurListenTo?.includes(this.name as string)) {\n linkedFields.push(field.instance)\n }\n }\n\n return linkedFields\n }\n\n /**\n * @private\n */\n validateSync = (\n cause: ValidationCause,\n errorFromForm: ValidationErrorMap,\n ) => {\n const validates = getSyncValidatorArray(cause, {\n ...this.options,\n form: this.form,\n validationLogic:\n this.form.options.validationLogic || defaultValidationLogic,\n })\n\n const linkedFields = this.getLinkedFields(cause)\n const linkedFieldValidates = linkedFields.reduce(\n (acc, field) => {\n const fieldValidates = getSyncValidatorArray(cause, {\n ...field.options,\n form: field.form,\n validationLogic:\n field.form.options.validationLogic || defaultValidationLogic,\n })\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n SyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n // Needs type cast as eslint errantly believes this is always falsy\n let hasErrored = false as boolean\n\n batch(() => {\n const validateFieldFn = (\n field: AnyFieldApi,\n validateObj: SyncValidator<any>,\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n\n const fieldLevelError = validateObj.validate\n ? normalizeError(\n field.runValidator({\n validate: validateObj.validate,\n value: {\n value: field.store.state.value,\n validationSource: 'field',\n fieldApi: field,\n },\n type: 'validate',\n }),\n )\n : undefined\n\n const formLevelError = errorFromForm[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (field.state.meta.errorMap?.[errorMapKey] !== newErrorValue) {\n field.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n if (newErrorValue) {\n hasErrored = true\n }\n }\n\n for (const validateObj of validates) {\n validateFieldFn(this, validateObj)\n }\n for (const fieldValitateObj of linkedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldFn(fieldValitateObj.field, fieldValitateObj)\n }\n })\n\n /**\n * when we have an error for onSubmit in the state, we want\n * to clear the error as soon as the user enters a valid value in the field\n */\n const submitErrKey = getErrorMapKey('submit')\n\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.state.meta.errorMap?.[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n return { hasErrored }\n }\n\n /**\n * @private\n */\n validateAsync = async (\n cause: ValidationCause,\n formValidationResultPromise: Promise<\n FieldErrorMapFromValidator<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >,\n ) => {\n const validates = getAsyncValidatorArray(cause, {\n ...this.options,\n form: this.form,\n validationLogic:\n this.form.options.validationLogic || defaultValidationLogic,\n })\n\n // Get the field-specific error messages that are coming from the form's validator\n const asyncFormValidationResults = await formValidationResultPromise\n\n const linkedFields = this.getLinkedFields(cause)\n const linkedFieldValidates = linkedFields.reduce(\n (acc, field) => {\n const fieldValidates = getAsyncValidatorArray(cause, {\n ...field.options,\n form: field.form,\n validationLogic:\n field.form.options.validationLogic || defaultValidationLogic,\n })\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n AsyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n if (!this.state.meta.isValidating) {\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n\n for (const linkedField of linkedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n\n /**\n * We have to use a for loop and generate our promises this way, otherwise it won't be sync\n * when there are no validators needed to be run\n */\n const validatesPromises: Promise<ValidationError | undefined>[] = []\n const linkedPromises: Promise<ValidationError | undefined>[] = []\n\n const validateFieldAsyncFn = (\n field: AnyFieldApi,\n validateObj: AsyncValidator<any>,\n promises: Promise<ValidationError | undefined>[],\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n const fieldValidatorMeta = field.getInfo().validationMetaMap[errorMapKey]\n\n fieldValidatorMeta?.lastAbortController.abort()\n const controller = new AbortController()\n\n this.getInfo().validationMetaMap[errorMapKey] = {\n lastAbortController: controller,\n }\n\n promises.push(\n new Promise<ValidationError | undefined>(async (resolve) => {\n let rawError!: ValidationError | undefined\n try {\n rawError = await new Promise((rawResolve, rawReject) => {\n if (this.timeoutIds.validations[validateObj.cause]) {\n clearTimeout(this.timeoutIds.validations[validateObj.cause]!)\n }\n\n this.timeoutIds.validations[validateObj.cause] = setTimeout(\n async () => {\n if (controller.signal.aborted) return rawResolve(undefined)\n try {\n rawResolve(\n await this.runValidator({\n validate: validateObj.validate,\n value: {\n value: field.store.state.value,\n fieldApi: field,\n signal: controller.signal,\n validationSource: 'field',\n },\n type: 'validateAsync',\n }),\n )\n } catch (e) {\n rawReject(e)\n }\n },\n validateObj.debounceMs,\n )\n })\n } catch (e: unknown) {\n rawError = e as ValidationError\n }\n if (controller.signal.aborted) return resolve(undefined)\n\n const fieldLevelError = normalizeError(rawError)\n const formLevelError =\n asyncFormValidationResults[this.name]?.[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n field.setMeta((prev) => {\n return {\n ...prev,\n errorMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }\n })\n\n resolve(newErrorValue)\n }),\n )\n }\n\n // TODO: Dedupe this logic to reduce bundle size\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n validateFieldAsyncFn(this, validateObj, validatesPromises)\n }\n for (const fieldValitateObj of linkedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldAsyncFn(\n fieldValitateObj.field,\n fieldValitateObj,\n linkedPromises,\n )\n }\n\n let results: ValidationError[] = []\n if (validatesPromises.length || linkedPromises.length) {\n results = await Promise.all(validatesPromises)\n await Promise.all(linkedPromises)\n }\n\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n\n for (const linkedField of linkedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: false }))\n }\n\n return results.filter(Boolean)\n }\n\n /**\n * Validates the field value.\n */\n validate = (\n cause: ValidationCause,\n opts?: { skipFormValidation?: boolean },\n ): ValidationError[] | Promise<ValidationError[]> => {\n // If the field is pristine, do not validate\n if (!this.state.meta.isTouched) return []\n\n // Attempt to sync validate first\n const { fieldsErrorMap } = opts?.skipFormValidation\n ? { fieldsErrorMap: {} as never }\n : this.form.validateSync(cause)\n const { hasErrored } = this.validateSync(\n cause,\n fieldsErrorMap[this.name] ?? {},\n )\n\n if (hasErrored && !this.options.asyncAlways) {\n this.getInfo().validationMetaMap[\n getErrorMapKey(cause)\n ]?.lastAbortController.abort()\n return this.state.meta.errors\n }\n\n // No error? Attempt async validation\n const formValidationResultPromise = opts?.skipFormValidation\n ? Promise.resolve({})\n : this.form.validateAsync(cause)\n return this.validateAsync(cause, formValidationResultPromise)\n }\n\n /**\n * Handles the change event.\n */\n handleChange = (updater: Updater<TData>) => {\n this.setValue(updater)\n }\n\n /**\n * Handles the blur event.\n */\n handleBlur = () => {\n const prevTouched = this.state.meta.isTouched\n if (!prevTouched) {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n if (!this.state.meta.isBlurred) {\n this.setMeta((prev) => ({ ...prev, isBlurred: true }))\n }\n this.validate('blur')\n\n this.triggerOnBlurListener()\n }\n\n /**\n * Updates the field's errorMap\n */\n setErrorMap(\n errorMap: ValidationErrorMap<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>,\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>,\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>,\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>,\n UnwrapFieldValidateOrFn<TName, TOnDynamic, TFormOnDynamic>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnDynamicAsync, TFormOnDynamicAsync>\n >,\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n ...errorMap,\n },\n }))\n }\n\n /**\n * Parses the field's value with the given schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse this field's value with.\n */\n parseValueWithSchema = (schema: StandardSchemaV1<TData, unknown>) => {\n return standardSchemaValidators.validate(\n { value: this.state.value, validationSource: 'field' },\n schema,\n )\n }\n\n /**\n * Parses the field's value with the given schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse this field's value with.\n */\n parseValueWithSchemaAsync = (schema: StandardSchemaV1<TData, unknown>) => {\n return standardSchemaValidators.validateAsync(\n { value: this.state.value, validationSource: 'field' },\n schema,\n )\n }\n\n private triggerOnBlurListener() {\n const formDebounceMs = this.form.options.listeners?.onBlurDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.blur) {\n clearTimeout(this.timeoutIds.formListeners.blur)\n }\n\n this.timeoutIds.formListeners.blur = setTimeout(() => {\n this.form.options.listeners?.onBlur?.({\n formApi: this.form,\n fieldApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onBlur?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onBlurDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.blur) {\n clearTimeout(this.timeoutIds.listeners.blur)\n }\n\n this.timeoutIds.listeners.blur = setTimeout(() => {\n this.options.listeners?.onBlur?.({\n value: this.state.value,\n fieldApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onBlur?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n }\n\n private triggerOnChangeListener() {\n const formDebounceMs = this.form.options.listeners?.onChangeDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.change) {\n clearTimeout(this.timeoutIds.formListeners.change)\n }\n\n this.timeoutIds.formListeners.change = setTimeout(() => {\n this.form.options.listeners?.onChange?.({\n formApi: this.form,\n fieldApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onChange?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onChangeDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.change) {\n clearTimeout(this.timeoutIds.listeners.change)\n }\n\n this.timeoutIds.listeners.change = setTimeout(() => {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n fieldApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n return rawError\n }\n\n return undefined\n}\n\nfunction getErrorMapKey(cause: ValidationCause) {\n switch (cause) {\n case 'submit':\n return 'onSubmit'\n case 'blur':\n return 'onBlur'\n case 'mount':\n return 'onMount'\n case 'server':\n return 'onServer'\n case 'dynamic':\n return 'onDynamic'\n case 'change':\n default:\n return 'onChange'\n }\n}\n"],"names":["opts","getBy","getSyncValidatorArray","defaultValidationLogic","batch","determineFieldLevelErrorSourceAndValue","getAsyncValidatorArray","standardSchemaValidators","Derived","defaultFieldMeta","isStandardSchemaValidator"],"mappings":"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"}