@tanstack/form-core 0.0.9 → 0.0.11

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.
@@ -17,35 +17,37 @@ var store = require('@tanstack/store');
17
17
 
18
18
  let uid = 0;
19
19
 
20
- var _updateStore = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("updateStore");
20
+ var _prevState = /*#__PURE__*/new WeakMap();
21
21
 
22
- var _leaseValidateAsync = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("leaseValidateAsync");
22
+ var _leaseValidateAsync = /*#__PURE__*/new WeakMap();
23
23
 
24
24
  class FieldApi {
25
25
  constructor(_opts) {
26
26
  var _this$getMeta;
27
27
 
28
- this.options = {};
28
+ _rollupPluginBabelHelpers.defineProperty(this, "uid", void 0);
29
29
 
30
- this.mount = () => {
31
- const info = this.getInfo();
32
- info.instances[this.uid] = this;
33
- const unsubscribe = this.form.store.subscribe(() => {
34
- _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _updateStore)[_updateStore]();
35
- });
36
- return () => {
37
- unsubscribe();
38
- delete info.instances[this.uid];
30
+ _rollupPluginBabelHelpers.defineProperty(this, "form", void 0);
39
31
 
40
- if (!Object.keys(info.instances).length) {
41
- delete this.form.fieldInfo[this.name];
42
- }
43
- };
44
- };
32
+ _rollupPluginBabelHelpers.defineProperty(this, "name", void 0);
33
+
34
+ _rollupPluginBabelHelpers.defineProperty(this, "store", void 0);
45
35
 
46
- Object.defineProperty(this, _updateStore, {
36
+ _rollupPluginBabelHelpers.defineProperty(this, "state", void 0);
37
+
38
+ _rollupPluginBabelHelpers.classPrivateFieldInitSpec(this, _prevState, {
47
39
  writable: true,
48
- value: () => {
40
+ value: void 0
41
+ });
42
+
43
+ _rollupPluginBabelHelpers.defineProperty(this, "options", {});
44
+
45
+ _rollupPluginBabelHelpers.defineProperty(this, "mount", () => {
46
+ var _this$options$onMount, _this$options;
47
+
48
+ const info = this.getInfo();
49
+ info.instances[this.uid] = this;
50
+ const unsubscribe = this.form.store.subscribe(() => {
49
51
  this.store.batch(() => {
50
52
  const nextValue = this.getValue();
51
53
  const nextMeta = this.getMeta();
@@ -62,17 +64,25 @@ class FieldApi {
62
64
  }));
63
65
  }
64
66
  });
65
- }
67
+ });
68
+ (_this$options$onMount = (_this$options = this.options).onMount) == null ? void 0 : _this$options$onMount.call(_this$options, this);
69
+ return () => {
70
+ unsubscribe();
71
+ delete info.instances[this.uid];
72
+
73
+ if (!Object.keys(info.instances).length) {
74
+ delete this.form.fieldInfo[this.name];
75
+ }
76
+ };
66
77
  });
67
78
 
68
- this.update = opts => {
69
- var _this$form$options$de, _this$form$options$de2, _this$form$options$de3, _this$form$options$de4;
79
+ _rollupPluginBabelHelpers.defineProperty(this, "update", opts => {
80
+ var _this$form$options$as, _this$form$options$on, _this$form$options$on2;
70
81
 
71
82
  this.options = {
72
- validatePristine: (_this$form$options$de = this.form.options.defaultValidatePristine) != null ? _this$form$options$de : false,
73
- validateOn: (_this$form$options$de2 = this.form.options.defaultValidateOn) != null ? _this$form$options$de2 : 'change',
74
- validateAsyncOn: (_this$form$options$de3 = this.form.options.defaultValidateAsyncOn) != null ? _this$form$options$de3 : 'blur',
75
- validateAsyncDebounceMs: (_this$form$options$de4 = this.form.options.defaultValidateAsyncDebounceMs) != null ? _this$form$options$de4 : 0,
83
+ asyncDebounceMs: (_this$form$options$as = this.form.options.asyncDebounceMs) != null ? _this$form$options$as : 0,
84
+ onChangeAsyncDebounceMs: (_this$form$options$on = this.form.options.onChangeAsyncDebounceMs) != null ? _this$form$options$on : 0,
85
+ onBlurAsyncDebounceMs: (_this$form$options$on2 = this.form.options.onBlurAsyncDebounceMs) != null ? _this$form$options$on2 : 0,
76
86
  ...opts
77
87
  }; // Default Value
78
88
 
@@ -85,44 +95,42 @@ class FieldApi {
85
95
  if (this.getMeta() === undefined) {
86
96
  this.setMeta(this.state.meta);
87
97
  }
88
- };
98
+ });
89
99
 
90
- this.getValue = () => {
100
+ _rollupPluginBabelHelpers.defineProperty(this, "getValue", () => {
91
101
  return this.form.getFieldValue(this.name);
92
- };
102
+ });
93
103
 
94
- this.setValue = (updater, options) => this.form.setFieldValue(this.name, updater, options);
104
+ _rollupPluginBabelHelpers.defineProperty(this, "setValue", (updater, options) => this.form.setFieldValue(this.name, updater, options));
95
105
 
96
- this.getMeta = () => this.form.getFieldMeta(this.name);
106
+ _rollupPluginBabelHelpers.defineProperty(this, "getMeta", () => this.form.getFieldMeta(this.name));
97
107
 
98
- this.setMeta = updater => this.form.setFieldMeta(this.name, updater);
108
+ _rollupPluginBabelHelpers.defineProperty(this, "setMeta", updater => this.form.setFieldMeta(this.name, updater));
99
109
 
100
- this.getInfo = () => this.form.getFieldInfo(this.name);
110
+ _rollupPluginBabelHelpers.defineProperty(this, "getInfo", () => this.form.getFieldInfo(this.name));
101
111
 
102
- this.pushValue = value => this.form.pushFieldValue(this.name, value);
112
+ _rollupPluginBabelHelpers.defineProperty(this, "pushValue", value => this.form.pushFieldValue(this.name, value));
103
113
 
104
- this.insertValue = (index, value) => this.form.insertFieldValue(this.name, index, value);
114
+ _rollupPluginBabelHelpers.defineProperty(this, "insertValue", (index, value) => this.form.insertFieldValue(this.name, index, value));
105
115
 
106
- this.removeValue = index => this.form.removeFieldValue(this.name, index);
116
+ _rollupPluginBabelHelpers.defineProperty(this, "removeValue", index => this.form.removeFieldValue(this.name, index));
107
117
 
108
- this.swapValues = (aIndex, bIndex) => this.form.swapFieldValues(this.name, aIndex, bIndex);
118
+ _rollupPluginBabelHelpers.defineProperty(this, "swapValues", (aIndex, bIndex) => this.form.swapFieldValues(this.name, aIndex, bIndex));
109
119
 
110
- this.getSubField = name => new FieldApi({
120
+ _rollupPluginBabelHelpers.defineProperty(this, "getSubField", name => new FieldApi({
111
121
  name: this.name + "." + name,
112
122
  form: this.form
113
- });
123
+ }));
114
124
 
115
- this.validateSync = async (value = this.state.value) => {
125
+ _rollupPluginBabelHelpers.defineProperty(this, "validateSync", async (value = this.state.value, cause) => {
116
126
  const {
117
- validate
127
+ onChange,
128
+ onBlur
118
129
  } = this.options;
119
-
120
- if (!validate) {
121
- return;
122
- } // Use the validationCount for all field instances to
130
+ const validate = cause === 'submit' ? undefined : cause === 'change' ? onChange : onBlur;
131
+ if (!validate) return; // Use the validationCount for all field instances to
123
132
  // track freshness of the validation
124
133
 
125
-
126
134
  const validationCount = (this.getInfo().validationCount || 0) + 1;
127
135
  this.getInfo().validationCount = validationCount;
128
136
  const error = normalizeError(validate(value, this));
@@ -137,9 +145,9 @@ class FieldApi {
137
145
  if (this.state.meta.error) {
138
146
  this.cancelValidateAsync();
139
147
  }
140
- };
148
+ });
141
149
 
142
- Object.defineProperty(this, _leaseValidateAsync, {
150
+ _rollupPluginBabelHelpers.classPrivateFieldInitSpec(this, _leaseValidateAsync, {
143
151
  writable: true,
144
152
  value: () => {
145
153
  const count = (this.getInfo().validationAsyncCount || 0) + 1;
@@ -148,32 +156,36 @@ class FieldApi {
148
156
  }
149
157
  });
150
158
 
151
- this.cancelValidateAsync = () => {
159
+ _rollupPluginBabelHelpers.defineProperty(this, "cancelValidateAsync", () => {
152
160
  // Lease a new validation count to ignore any pending validations
153
- _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _leaseValidateAsync)[_leaseValidateAsync](); // Cancel any pending validation state
161
+ _rollupPluginBabelHelpers.classPrivateFieldGet(this, _leaseValidateAsync).call(this); // Cancel any pending validation state
154
162
 
155
163
 
156
164
  this.setMeta(prev => ({ ...prev,
157
165
  isValidating: false
158
166
  }));
159
- };
167
+ });
168
+
169
+ _rollupPluginBabelHelpers.defineProperty(this, "validateAsync", async (value = this.state.value, cause) => {
170
+ var _ref, _ref2;
160
171
 
161
- this.validateAsync = async (value = this.state.value) => {
162
172
  const {
163
- validateAsync,
164
- validateAsyncDebounceMs
173
+ onChangeAsync,
174
+ onBlurAsync,
175
+ onSubmitAsync,
176
+ asyncDebounceMs,
177
+ onBlurAsyncDebounceMs,
178
+ onChangeAsyncDebounceMs
165
179
  } = this.options;
166
-
167
- if (!validateAsync) {
168
- return;
169
- }
170
-
180
+ const validate = cause === 'change' ? onChangeAsync : cause === 'submit' ? onSubmitAsync : onBlurAsync;
181
+ if (!validate) return;
182
+ const debounceMs = cause === 'submit' ? 0 : (_ref = (_ref2 = cause === 'change' ? onChangeAsyncDebounceMs : onBlurAsyncDebounceMs) != null ? _ref2 : asyncDebounceMs) != null ? _ref : 500;
171
183
  if (this.state.meta.isValidating !== true) this.setMeta(prev => ({ ...prev,
172
184
  isValidating: true
173
185
  })); // Use the validationCount for all field instances to
174
186
  // track freshness of the validation
175
187
 
176
- const validationAsyncCount = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _leaseValidateAsync)[_leaseValidateAsync]();
188
+ const validationAsyncCount = _rollupPluginBabelHelpers.classPrivateFieldGet(this, _leaseValidateAsync).call(this);
177
189
 
178
190
  const checkLatest = () => validationAsyncCount === this.getInfo().validationAsyncCount;
179
191
 
@@ -184,14 +196,14 @@ class FieldApi {
184
196
  });
185
197
  }
186
198
 
187
- if (validateAsyncDebounceMs > 0) {
188
- await new Promise(r => setTimeout(r, validateAsyncDebounceMs));
199
+ if (debounceMs > 0) {
200
+ await new Promise(r => setTimeout(r, debounceMs));
189
201
  } // Only kick off validation if this validation is the latest attempt
190
202
 
191
203
 
192
204
  if (checkLatest()) {
193
205
  try {
194
- const rawError = await validateAsync(value, this);
206
+ const rawError = await validate(value, this);
195
207
 
196
208
  if (checkLatest()) {
197
209
  var _this$getInfo$validat, _this$getInfo;
@@ -222,43 +234,25 @@ class FieldApi {
222
234
 
223
235
 
224
236
  return this.getInfo().validationPromise;
225
- };
226
-
227
- this.shouldValidate = (isAsync, cause) => {
228
- const {
229
- validateOn,
230
- validateAsyncOn
231
- } = this.options;
232
- const level = getValidationCauseLevel(cause); // Must meet *at least* the validation level to validate,
233
- // e.g. if validateOn is 'change' and validateCause is 'blur',
234
- // the field will still validate
235
-
236
- return Object.keys(validateCauseLevels).some(d => isAsync ? validateAsyncOn : validateOn === d && level >= validateCauseLevels[d]);
237
- };
237
+ });
238
238
 
239
- this.validate = async (cause, value) => {
239
+ _rollupPluginBabelHelpers.defineProperty(this, "validate", (cause, value) => {
240
240
  // If the field is pristine and validatePristine is false, do not validate
241
- if (!this.options.validatePristine && !this.state.meta.isTouched) return; // Attempt to sync validate first
242
-
243
- if (this.shouldValidate(false, cause)) {
244
- this.validateSync(value);
245
- } // If there is an error, return it, do not attempt async validation
241
+ if (!this.state.meta.isTouched) return; // Attempt to sync validate first
246
242
 
243
+ this.validateSync(value, cause); // If there is an error, return it, do not attempt async validation
247
244
 
248
245
  if (this.state.meta.error) {
249
- return this.state.meta.error;
246
+ if (!this.options.asyncAlways) {
247
+ return this.state.meta.error;
248
+ }
250
249
  } // No error? Attempt async validation
251
250
 
252
251
 
253
- if (this.shouldValidate(true, cause)) {
254
- return this.validateAsync(value);
255
- } // If there is no sync error or async validation attempt, there is no error
256
-
257
-
258
- return undefined;
259
- };
252
+ return this.validateAsync(value, cause);
253
+ });
260
254
 
261
- this.getChangeProps = (props = {}) => {
255
+ _rollupPluginBabelHelpers.defineProperty(this, "getChangeProps", (props = {}) => {
262
256
  return { ...props,
263
257
  value: this.state.value,
264
258
  onChange: value => {
@@ -266,16 +260,21 @@ class FieldApi {
266
260
  props.onChange == null ? void 0 : props.onChange(value);
267
261
  },
268
262
  onBlur: e => {
263
+ const prevTouched = this.state.meta.isTouched;
269
264
  this.setMeta(prev => ({ ...prev,
270
265
  isTouched: true
271
266
  }));
267
+
268
+ if (!prevTouched) {
269
+ this.validate('change');
270
+ }
271
+
272
272
  this.validate('blur');
273
- props.onBlur == null ? void 0 : props.onBlur(e);
274
273
  }
275
274
  };
276
- };
275
+ });
277
276
 
278
- this.getInputProps = (props = {}) => {
277
+ _rollupPluginBabelHelpers.defineProperty(this, "getInputProps", (props = {}) => {
279
278
  return { ...props,
280
279
  value: String(this.state.value),
281
280
  onChange: e => {
@@ -284,7 +283,7 @@ class FieldApi {
284
283
  },
285
284
  onBlur: this.getChangeProps(props).onBlur
286
285
  };
287
- };
286
+ });
288
287
 
289
288
  this.form = _opts.form;
290
289
  this.uid = uid++; // Support field prefixing from FieldScope
@@ -303,31 +302,27 @@ class FieldApi {
303
302
  ...this.options.defaultMeta
304
303
  }
305
304
  }, {
306
- onUpdate: next => {
307
- next.meta.touchedError = next.meta.isTouched ? next.meta.error : undefined; // Do not validate pristine fields
308
-
309
- const prevState = this.state;
310
- this.state = next;
305
+ onUpdate: () => {
306
+ const state = this.store.state;
307
+ state.meta.touchedError = state.meta.isTouched ? state.meta.error : undefined;
311
308
 
312
- if (next.value !== prevState.value) {
313
- this.validate('change', next.value);
309
+ if (state.value !== _rollupPluginBabelHelpers.classPrivateFieldGet(this, _prevState).value) {
310
+ this.validate('change', state.value);
314
311
  }
312
+
313
+ _rollupPluginBabelHelpers.classPrivateFieldSet(this, _prevState, state);
314
+
315
+ this.state = state;
315
316
  }
316
317
  });
317
318
  this.state = this.store.state;
319
+
320
+ _rollupPluginBabelHelpers.classPrivateFieldSet(this, _prevState, this.state);
321
+
318
322
  this.update(_opts);
319
323
  }
320
324
 
321
325
  }
322
- const validateCauseLevels = {
323
- change: 0,
324
- blur: 1,
325
- submit: 2
326
- };
327
-
328
- function getValidationCauseLevel(cause) {
329
- return !cause ? 3 : validateCauseLevels[cause];
330
- }
331
326
 
332
327
  function normalizeError(rawError) {
333
328
  if (rawError) {
@@ -1 +1 @@
1
- {"version":3,"file":"FieldApi.js","sources":["../../src/FieldApi.ts"],"sourcesContent":["//\nimport type { DeepKeys, DeepValue, RequiredByKey, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\nexport interface FieldOptions<TData, TFormData> {\n name: unknown extends TFormData ? string : DeepKeys<TFormData>\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n validate?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError\n validateAsync?: (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n ) => ValidationError | Promise<ValidationError>\n validatePristine?: boolean // Default: false\n validateOn?: ValidationCause // Default: 'change'\n validateAsyncOn?: ValidationCause // Default: 'blur'\n validateAsyncDebounceMs?: number\n defaultMeta?: Partial<FieldMeta>\n}\n\nexport type FieldApiOptions<TData, TFormData> = FieldOptions<\n TData,\n TFormData\n> & {\n form: FormApi<TFormData>\n}\n\nexport type FieldMeta = {\n isTouched: boolean\n touchedError?: ValidationError\n error?: ValidationError\n isValidating: boolean\n}\n\nexport type UserChangeProps<TData> = {\n onChange?: (updater: Updater<TData>) => void\n onBlur?: (event: any) => void\n}\n\nexport type UserInputProps = {\n onChange?: (event: any) => void\n onBlur?: (event: any) => void\n}\n\nexport type ChangeProps<TData> = {\n value: TData\n onChange: (updater: Updater<TData>) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps = {\n value: string\n onChange: (event: any) => void\n onBlur: (event: any) => void\n}\n\nlet uid = 0\n\nexport type FieldState<TData> = {\n value: TData\n meta: FieldMeta\n}\n\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n options: RequiredByKey<\n FieldOptions<TData, TFormData>,\n | 'validatePristine'\n | 'validateOn'\n | 'validateAsyncOn'\n | 'validateAsyncDebounceMs'\n > = {} as any\n\n constructor(opts: FieldApiOptions<TData, TFormData>) {\n this.form = opts.form\n this.uid = uid++\n // Support field prefixing from FieldScope\n // let fieldPrefix = ''\n // if (this.form.fieldName) {\n // fieldPrefix = `${this.form.fieldName}.`\n // }\n\n this.name = opts.name as any\n\n this.store = new Store<FieldState<TData>>(\n {\n value: this.getValue(),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n meta: this.getMeta() ?? {\n isValidating: false,\n isTouched: false,\n ...this.options.defaultMeta,\n },\n },\n {\n onUpdate: (next) => {\n next.meta.touchedError = next.meta.isTouched\n ? next.meta.error\n : undefined\n\n // Do not validate pristine fields\n const prevState = this.state\n this.state = next\n if (next.value !== prevState.value) {\n this.validate('change', next.value)\n }\n },\n },\n )\n\n this.state = this.store.state\n this.update(opts)\n }\n\n mount = () => {\n const info = this.getInfo()\n info.instances[this.uid] = this\n\n const unsubscribe = this.form.store.subscribe(() => {\n this.#updateStore()\n })\n\n return () => {\n unsubscribe()\n delete info.instances[this.uid]\n if (!Object.keys(info.instances).length) {\n delete this.form.fieldInfo[this.name]\n }\n }\n }\n\n #updateStore = () => {\n this.store.batch(() => {\n const nextValue = this.getValue()\n const nextMeta = this.getMeta()\n\n if (nextValue !== this.state.value) {\n this.store.setState((prev) => ({ ...prev, value: nextValue }))\n }\n\n if (nextMeta !== this.state.meta) {\n this.store.setState((prev) => ({ ...prev, meta: nextMeta }))\n }\n })\n }\n\n update = (opts: FieldApiOptions<TData, TFormData>) => {\n this.options = {\n validatePristine: this.form.options.defaultValidatePristine ?? false,\n validateOn: this.form.options.defaultValidateOn ?? 'change',\n validateAsyncOn: this.form.options.defaultValidateAsyncOn ?? 'blur',\n validateAsyncDebounceMs:\n this.form.options.defaultValidateAsyncDebounceMs ?? 0,\n ...opts,\n }\n\n // Default Value\n if (\n this.state.value === undefined &&\n this.options.defaultValue !== undefined\n ) {\n this.setValue(this.options.defaultValue)\n }\n\n // Default Meta\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name)\n }\n setValue = (\n updater: Updater<TData>,\n options?: { touch?: boolean; notify?: boolean },\n ) => this.form.setFieldValue(this.name, updater as any, options)\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (value: TData extends any[] ? TData[number] : never) =>\n this.form.pushFieldValue(this.name, value as any)\n insertValue = (index: number, value: TData) =>\n this.form.insertFieldValue(this.name, index, value as any)\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<TData>>(name: TName) =>\n new FieldApi<DeepValue<TData, TName>, TFormData>({\n name: `${this.name}.${name}` as any,\n form: this.form,\n })\n\n validateSync = async (value = this.state.value) => {\n const { validate } = this.options\n\n if (!validate) {\n return\n }\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationCount = (this.getInfo().validationCount || 0) + 1\n this.getInfo().validationCount = validationCount\n const error = normalizeError(validate(value, this))\n\n if (this.state.meta.error !== error) {\n this.setMeta((prev) => ({\n ...prev,\n error,\n }))\n }\n\n // If a sync error is encountered, cancel any async validation\n if (this.state.meta.error) {\n this.cancelValidateAsync()\n }\n }\n\n #leaseValidateAsync = () => {\n const count = (this.getInfo().validationAsyncCount || 0) + 1\n this.getInfo().validationAsyncCount = count\n return count\n }\n\n cancelValidateAsync = () => {\n // Lease a new validation count to ignore any pending validations\n this.#leaseValidateAsync()\n // Cancel any pending validation state\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n }))\n }\n\n validateAsync = async (value = this.state.value) => {\n const { validateAsync, validateAsyncDebounceMs } = this.options\n\n if (!validateAsync) {\n return\n }\n\n if (this.state.meta.isValidating !== true)\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationAsyncCount = this.#leaseValidateAsync()\n\n const checkLatest = () =>\n validationAsyncCount === this.getInfo().validationAsyncCount\n\n if (!this.getInfo().validationPromise) {\n this.getInfo().validationPromise = new Promise((resolve, reject) => {\n this.getInfo().validationResolve = resolve\n this.getInfo().validationReject = reject\n })\n }\n\n if (validateAsyncDebounceMs > 0) {\n await new Promise((r) => setTimeout(r, validateAsyncDebounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validateAsync(value, this)\n\n if (checkLatest()) {\n const error = normalizeError(rawError)\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n error,\n }))\n this.getInfo().validationResolve?.(error)\n }\n } catch (error) {\n if (checkLatest()) {\n this.getInfo().validationReject?.(error)\n throw error\n }\n } finally {\n if (checkLatest()) {\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n delete this.getInfo().validationPromise\n }\n }\n }\n\n // Always return the latest validation promise to the caller\n return this.getInfo().validationPromise\n }\n\n shouldValidate = (isAsync: boolean, cause?: ValidationCause) => {\n const { validateOn, validateAsyncOn } = this.options\n const level = getValidationCauseLevel(cause)\n\n // Must meet *at least* the validation level to validate,\n // e.g. if validateOn is 'change' and validateCause is 'blur',\n // the field will still validate\n return Object.keys(validateCauseLevels).some((d) =>\n isAsync\n ? validateAsyncOn\n : validateOn === d && level >= validateCauseLevels[d],\n )\n }\n\n validate = async (\n cause?: ValidationCause,\n value?: TData,\n ): Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.options.validatePristine && !this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n if (this.shouldValidate(false, cause)) {\n this.validateSync(value)\n }\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n return this.state.meta.error\n }\n\n // No error? Attempt async validation\n if (this.shouldValidate(true, cause)) {\n return this.validateAsync(value)\n }\n\n // If there is no sync error or async validation attempt, there is no error\n return undefined\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('blur')\n props.onBlur?.(e)\n },\n } as ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps & Omit<T, keyof InputProps> => {\n return {\n ...props,\n value: String(this.state.value),\n onChange: (e) => {\n this.setValue(e.target.value)\n props.onChange?.(e.target.value)\n },\n onBlur: this.getChangeProps(props).onBlur,\n }\n }\n}\n\nconst validateCauseLevels = {\n change: 0,\n blur: 1,\n submit: 2,\n}\n\nfunction getValidationCauseLevel(cause?: ValidationCause) {\n return !cause ? 3 : validateCauseLevels[cause]\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n if (typeof rawError !== 'string') {\n return 'Invalid Form Values'\n }\n\n return rawError\n }\n\n return undefined\n}\n"],"names":["uid","FieldApi","constructor","opts","options","mount","info","getInfo","instances","unsubscribe","form","store","subscribe","_classPrivateFieldLooseBase","Object","keys","length","fieldInfo","name","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","update","validatePristine","defaultValidatePristine","validateOn","defaultValidateOn","validateAsyncOn","defaultValidateAsyncOn","validateAsyncDebounceMs","defaultValidateAsyncDebounceMs","undefined","defaultValue","setValue","setMeta","getFieldValue","updater","setFieldValue","getFieldMeta","setFieldMeta","getFieldInfo","pushValue","pushFieldValue","insertValue","index","insertFieldValue","removeValue","removeFieldValue","swapValues","aIndex","bIndex","swapFieldValues","getSubField","validateSync","validate","validationCount","error","normalizeError","cancelValidateAsync","count","validationAsyncCount","isValidating","validateAsync","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","shouldValidate","isAsync","cause","level","getValidationCauseLevel","validateCauseLevels","some","d","isTouched","getChangeProps","props","onChange","onBlur","e","getInputProps","String","target","Store","defaultMeta","onUpdate","next","touchedError","prevState","change","blur","submit"],"mappings":"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"}
1
+ {"version":3,"file":"FieldApi.js","sources":["../../src/FieldApi.ts"],"sourcesContent":["//\nimport type { DeepKeys, DeepValue, RequiredByKey, Updater } from './utils'\nimport type { FormApi, ValidationError } from './FormApi'\nimport { Store } from '@tanstack/store'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit'\n\ntype ValidateFn<TData, TFormData> = (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n) => ValidationError\n\ntype ValidateAsyncFn<TData, TFormData> = (\n value: TData,\n fieldApi: FieldApi<TData, TFormData>,\n) => ValidationError | Promise<ValidationError>\n\nexport interface FieldOptions<TData, TFormData> {\n name: unknown extends TFormData ? string : DeepKeys<TFormData>\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n asyncDebounceMs?: number\n asyncAlways?: boolean\n onMount?: (formApi: FieldApi<TData, TFormData>) => void\n onChange?: ValidateFn<TData, TFormData>\n onChangeAsync?: ValidateAsyncFn<TData, TFormData>\n onChangeAsyncDebounceMs?: number\n onBlur?: ValidateFn<TData, TFormData>\n onBlurAsync?: ValidateAsyncFn<TData, TFormData>\n onBlurAsyncDebounceMs?: number\n onSubmitAsync?: ValidateAsyncFn<TData, TFormData>\n defaultMeta?: Partial<FieldMeta>\n}\n\nexport type FieldApiOptions<TData, TFormData> = FieldOptions<\n TData,\n TFormData\n> & {\n form: FormApi<TFormData>\n}\n\nexport type FieldMeta = {\n isTouched: boolean\n touchedError?: ValidationError\n error?: ValidationError\n isValidating: boolean\n}\n\nexport type UserChangeProps<TData> = {\n onChange?: (updater: Updater<TData>) => void\n onBlur?: (event: any) => void\n}\n\nexport type UserInputProps = {\n onChange?: (event: any) => void\n onBlur?: (event: any) => void\n}\n\nexport type ChangeProps<TData> = {\n value: TData\n onChange: (value: TData) => void\n onBlur: (event: any) => void\n}\n\nexport type InputProps = {\n value: string\n onChange: (event: any) => void\n onBlur: (event: any) => void\n}\n\nlet uid = 0\n\nexport type FieldState<TData> = {\n value: TData\n meta: FieldMeta\n}\n\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n #prevState!: FieldState<TData>\n options: FieldOptions<TData, TFormData> = {} as any\n\n constructor(opts: FieldApiOptions<TData, TFormData>) {\n this.form = opts.form\n this.uid = uid++\n // Support field prefixing from FieldScope\n // let fieldPrefix = ''\n // if (this.form.fieldName) {\n // fieldPrefix = `${this.form.fieldName}.`\n // }\n\n this.name = opts.name as any\n\n this.store = new Store<FieldState<TData>>(\n {\n value: this.getValue(),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n meta: this.getMeta() ?? {\n isValidating: false,\n isTouched: false,\n ...this.options.defaultMeta,\n },\n },\n {\n onUpdate: () => {\n const state = this.store.state\n\n state.meta.touchedError = state.meta.isTouched\n ? state.meta.error\n : undefined\n\n if (state.value !== this.#prevState.value) {\n this.validate('change', state.value)\n }\n\n this.#prevState = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n this.#prevState = this.state\n this.update(opts)\n }\n\n mount = () => {\n const info = this.getInfo()\n info.instances[this.uid] = this\n\n const unsubscribe = this.form.store.subscribe(() => {\n this.store.batch(() => {\n const nextValue = this.getValue()\n const nextMeta = this.getMeta()\n\n if (nextValue !== this.state.value) {\n this.store.setState((prev) => ({ ...prev, value: nextValue }))\n }\n\n if (nextMeta !== this.state.meta) {\n this.store.setState((prev) => ({ ...prev, meta: nextMeta }))\n }\n })\n })\n\n this.options.onMount?.(this)\n\n return () => {\n unsubscribe()\n delete info.instances[this.uid]\n if (!Object.keys(info.instances).length) {\n delete this.form.fieldInfo[this.name]\n }\n }\n }\n\n update = (opts: FieldApiOptions<TData, TFormData>) => {\n this.options = {\n asyncDebounceMs: this.form.options.asyncDebounceMs ?? 0,\n onChangeAsyncDebounceMs: this.form.options.onChangeAsyncDebounceMs ?? 0,\n onBlurAsyncDebounceMs: this.form.options.onBlurAsyncDebounceMs ?? 0,\n ...opts,\n }\n\n // Default Value\n if (\n this.state.value === undefined &&\n this.options.defaultValue !== undefined\n ) {\n this.setValue(this.options.defaultValue)\n }\n\n // Default Meta\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name)\n }\n setValue = (\n updater: Updater<TData>,\n options?: { touch?: boolean; notify?: boolean },\n ) => this.form.setFieldValue(this.name, updater as any, options)\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (value: TData extends any[] ? TData[number] : never) =>\n this.form.pushFieldValue(this.name, value as any)\n insertValue = (index: number, value: TData) =>\n this.form.insertFieldValue(this.name, index, value as any)\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<TData>>(name: TName) =>\n new FieldApi<DeepValue<TData, TName>, TFormData>({\n name: `${this.name}.${name}` as any,\n form: this.form,\n })\n\n validateSync = async (value = this.state.value, cause: ValidationCause) => {\n const { onChange, onBlur } = this.options\n const validate =\n cause === 'submit' ? undefined : cause === 'change' ? onChange : onBlur\n\n if (!validate) return\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationCount = (this.getInfo().validationCount || 0) + 1\n this.getInfo().validationCount = validationCount\n const error = normalizeError(validate(value, this))\n\n if (this.state.meta.error !== error) {\n this.setMeta((prev) => ({\n ...prev,\n error,\n }))\n }\n\n // If a sync error is encountered, cancel any async validation\n if (this.state.meta.error) {\n this.cancelValidateAsync()\n }\n }\n\n #leaseValidateAsync = () => {\n const count = (this.getInfo().validationAsyncCount || 0) + 1\n this.getInfo().validationAsyncCount = count\n return count\n }\n\n cancelValidateAsync = () => {\n // Lease a new validation count to ignore any pending validations\n this.#leaseValidateAsync()\n // Cancel any pending validation state\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n }))\n }\n\n validateAsync = async (value = this.state.value, cause: ValidationCause) => {\n const {\n onChangeAsync,\n onBlurAsync,\n onSubmitAsync,\n asyncDebounceMs,\n onBlurAsyncDebounceMs,\n onChangeAsyncDebounceMs,\n } = this.options\n\n const validate =\n cause === 'change'\n ? onChangeAsync\n : cause === 'submit'\n ? onSubmitAsync\n : onBlurAsync\n\n if (!validate) return\n\n const debounceMs =\n cause === 'submit'\n ? 0\n : (cause === 'change'\n ? onChangeAsyncDebounceMs\n : onBlurAsyncDebounceMs) ??\n asyncDebounceMs ??\n 500\n\n if (this.state.meta.isValidating !== true)\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n\n // Use the validationCount for all field instances to\n // track freshness of the validation\n const validationAsyncCount = this.#leaseValidateAsync()\n\n const checkLatest = () =>\n validationAsyncCount === this.getInfo().validationAsyncCount\n\n if (!this.getInfo().validationPromise) {\n this.getInfo().validationPromise = new Promise((resolve, reject) => {\n this.getInfo().validationResolve = resolve\n this.getInfo().validationReject = reject\n })\n }\n\n if (debounceMs > 0) {\n await new Promise((r) => setTimeout(r, debounceMs))\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n try {\n const rawError = await validate(value, this)\n\n if (checkLatest()) {\n const error = normalizeError(rawError)\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n error,\n }))\n this.getInfo().validationResolve?.(error)\n }\n } catch (error) {\n if (checkLatest()) {\n this.getInfo().validationReject?.(error)\n throw error\n }\n } finally {\n if (checkLatest()) {\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n delete this.getInfo().validationPromise\n }\n }\n }\n\n // Always return the latest validation promise to the caller\n return this.getInfo().validationPromise\n }\n\n validate = (\n cause: ValidationCause,\n value?: TData,\n ): ValidationError | Promise<ValidationError> => {\n // If the field is pristine and validatePristine is false, do not validate\n if (!this.state.meta.isTouched) return\n\n // Attempt to sync validate first\n this.validateSync(value, cause)\n\n // If there is an error, return it, do not attempt async validation\n if (this.state.meta.error) {\n if (!this.options.asyncAlways) {\n return this.state.meta.error\n }\n }\n\n // No error? Attempt async validation\n return this.validateAsync(value, cause)\n }\n\n getChangeProps = <T extends UserChangeProps<any>>(\n props: T = {} as T,\n ): ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value)\n props.onChange?.(value)\n },\n onBlur: (e) => {\n const prevTouched = this.state.meta.isTouched\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n if (!prevTouched) {\n this.validate('change')\n }\n this.validate('blur')\n },\n } as ChangeProps<TData> & Omit<T, keyof ChangeProps<TData>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps & Omit<T, keyof InputProps> => {\n return {\n ...props,\n value: String(this.state.value),\n onChange: (e) => {\n this.setValue(e.target.value)\n props.onChange?.(e.target.value)\n },\n onBlur: this.getChangeProps(props).onBlur,\n }\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n if (typeof rawError !== 'string') {\n return 'Invalid Form Values'\n }\n\n return rawError\n }\n\n return undefined\n}\n"],"names":["uid","FieldApi","constructor","opts","_defineProperty","_classPrivateFieldInitSpec","info","getInfo","instances","unsubscribe","form","store","subscribe","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","options","onMount","Object","keys","length","fieldInfo","name","asyncDebounceMs","onChangeAsyncDebounceMs","onBlurAsyncDebounceMs","undefined","defaultValue","setValue","setMeta","getFieldValue","updater","setFieldValue","getFieldMeta","setFieldMeta","getFieldInfo","pushFieldValue","index","insertFieldValue","removeFieldValue","aIndex","bIndex","swapFieldValues","cause","onChange","onBlur","validate","validationCount","error","normalizeError","cancelValidateAsync","count","validationAsyncCount","_classPrivateFieldGet","isValidating","onChangeAsync","onBlurAsync","onSubmitAsync","debounceMs","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","isTouched","validateSync","asyncAlways","validateAsync","props","e","prevTouched","String","target","getChangeProps","Store","defaultMeta","onUpdate","touchedError","_classPrivateFieldSet","update"],"mappings":"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"}