@tanstack/form-core 0.0.11 → 0.0.13

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 (76) hide show
  1. package/build/{cjs/FieldApi.js → lib/FieldApi.cjs} +80 -113
  2. package/build/lib/FieldApi.cjs.map +1 -0
  3. package/build/lib/FieldApi.d.ts +112 -0
  4. package/build/lib/FieldApi.d.ts.map +1 -0
  5. package/build/lib/FieldApi.js +305 -0
  6. package/build/lib/FieldApi.js.map +1 -0
  7. package/build/lib/FieldApi.legacy.cjs +307 -0
  8. package/build/lib/FieldApi.legacy.cjs.map +1 -0
  9. package/build/lib/FieldApi.legacy.js +305 -0
  10. package/build/lib/FieldApi.legacy.js.map +1 -0
  11. package/build/{cjs/FormApi.js → lib/FormApi.cjs} +66 -78
  12. package/build/lib/FormApi.cjs.map +1 -0
  13. package/build/{types → lib}/FormApi.d.ts +3 -2
  14. package/build/lib/FormApi.d.ts.map +1 -0
  15. package/build/lib/FormApi.js +246 -0
  16. package/build/lib/FormApi.js.map +1 -0
  17. package/build/lib/FormApi.legacy.cjs +248 -0
  18. package/build/lib/FormApi.legacy.cjs.map +1 -0
  19. package/build/lib/FormApi.legacy.js +246 -0
  20. package/build/lib/FormApi.legacy.js.map +1 -0
  21. package/build/{cjs/_virtual/_rollupPluginBabelHelpers.js → lib/_virtual/_rollupPluginBabelHelpers.cjs} +18 -45
  22. package/build/lib/_virtual/_rollupPluginBabelHelpers.cjs.map +1 -0
  23. package/build/lib/_virtual/_rollupPluginBabelHelpers.js +56 -0
  24. package/build/{cjs → lib}/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  25. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs +65 -0
  26. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs.map +1 -0
  27. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js +56 -0
  28. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js.map +1 -0
  29. package/build/lib/index.cjs +14 -0
  30. package/build/lib/index.cjs.map +1 -0
  31. package/build/{types → lib}/index.d.ts +1 -0
  32. package/build/lib/index.d.ts.map +1 -0
  33. package/build/lib/index.js +4 -0
  34. package/build/{cjs → lib}/index.js.map +1 -1
  35. package/build/lib/index.legacy.cjs +14 -0
  36. package/build/lib/index.legacy.cjs.map +1 -0
  37. package/build/lib/index.legacy.js +4 -0
  38. package/build/lib/index.legacy.js.map +1 -0
  39. package/build/lib/tests/FieldApi.spec.d.ts +2 -0
  40. package/build/lib/tests/FieldApi.spec.d.ts.map +1 -0
  41. package/build/lib/tests/FieldApi.test-d.d.ts +2 -0
  42. package/build/lib/tests/FieldApi.test-d.d.ts.map +1 -0
  43. package/build/lib/tests/FormApi.spec.d.ts +2 -0
  44. package/build/lib/tests/FormApi.spec.d.ts.map +1 -0
  45. package/build/{cjs/utils.js → lib/utils.cjs} +18 -27
  46. package/build/lib/utils.cjs.map +1 -0
  47. package/build/{types → lib}/utils.d.ts +10 -0
  48. package/build/lib/utils.d.ts.map +1 -0
  49. package/build/lib/utils.js +77 -0
  50. package/build/lib/utils.js.map +1 -0
  51. package/build/lib/utils.legacy.cjs +81 -0
  52. package/build/lib/utils.legacy.cjs.map +1 -0
  53. package/build/lib/utils.legacy.js +77 -0
  54. package/build/lib/utils.legacy.js.map +1 -0
  55. package/package.json +22 -9
  56. package/src/FieldApi.ts +101 -46
  57. package/src/FormApi.ts +34 -14
  58. package/src/tests/FieldApi.spec.ts +169 -0
  59. package/src/tests/FieldApi.test-d.ts +41 -0
  60. package/src/tests/FormApi.spec.ts +216 -0
  61. package/src/utils.ts +10 -1
  62. package/build/cjs/FieldApi.js.map +0 -1
  63. package/build/cjs/FormApi.js.map +0 -1
  64. package/build/cjs/index.js +0 -26
  65. package/build/cjs/utils.js.map +0 -1
  66. package/build/esm/index.js +0 -716
  67. package/build/esm/index.js.map +0 -1
  68. package/build/stats-html.html +0 -2689
  69. package/build/stats-react.json +0 -196
  70. package/build/types/FieldApi.d.ts +0 -85
  71. package/build/types/tests/test.test.d.ts +0 -0
  72. package/build/umd/index.development.js +0 -779
  73. package/build/umd/index.development.js.map +0 -1
  74. package/build/umd/index.production.js +0 -22
  75. package/build/umd/index.production.js.map +0 -1
  76. package/src/tests/test.test.tsx +0 -5
@@ -1,65 +1,53 @@
1
- /**
2
- * form-core
3
- *
4
- * Copyright (c) TanStack
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
1
  'use strict';
12
2
 
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
3
+ var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.cjs');
16
4
  var store = require('@tanstack/store');
17
5
 
18
6
  let uid = 0;
19
7
 
20
- var _prevState = /*#__PURE__*/new WeakMap();
21
-
8
+ /**
9
+ * TData may not be known at the time of FieldApi construction, so we need to
10
+ * use a conditional type to determine if TData is known or not.
11
+ *
12
+ * If TData is not known, we use the TFormData type to determine the type of
13
+ * the field value based on the field name.
14
+ */
22
15
  var _leaseValidateAsync = /*#__PURE__*/new WeakMap();
23
-
24
16
  class FieldApi {
25
17
  constructor(_opts) {
26
18
  var _this$getMeta;
27
-
28
19
  _rollupPluginBabelHelpers.defineProperty(this, "uid", void 0);
29
-
30
20
  _rollupPluginBabelHelpers.defineProperty(this, "form", void 0);
31
-
32
21
  _rollupPluginBabelHelpers.defineProperty(this, "name", void 0);
33
-
22
+ /**
23
+ * This is a hack that allows us to use `GetTData` without calling it everywhere
24
+ *
25
+ * Unfortunately this hack appears to be needed alongside the `TName` hack
26
+ * further up in this file. This properly types all of the internal methods,
27
+ * while the `TName` hack types the options properly
28
+ */
29
+ _rollupPluginBabelHelpers.defineProperty(this, "_tdata", void 0);
34
30
  _rollupPluginBabelHelpers.defineProperty(this, "store", void 0);
35
-
36
31
  _rollupPluginBabelHelpers.defineProperty(this, "state", void 0);
37
-
38
- _rollupPluginBabelHelpers.classPrivateFieldInitSpec(this, _prevState, {
39
- writable: true,
40
- value: void 0
41
- });
42
-
32
+ _rollupPluginBabelHelpers.defineProperty(this, "prevState", void 0);
43
33
  _rollupPluginBabelHelpers.defineProperty(this, "options", {});
44
-
45
34
  _rollupPluginBabelHelpers.defineProperty(this, "mount", () => {
46
35
  var _this$options$onMount, _this$options;
47
-
48
36
  const info = this.getInfo();
49
37
  info.instances[this.uid] = this;
50
38
  const unsubscribe = this.form.store.subscribe(() => {
51
39
  this.store.batch(() => {
52
40
  const nextValue = this.getValue();
53
41
  const nextMeta = this.getMeta();
54
-
55
42
  if (nextValue !== this.state.value) {
56
- this.store.setState(prev => ({ ...prev,
43
+ this.store.setState(prev => ({
44
+ ...prev,
57
45
  value: nextValue
58
46
  }));
59
47
  }
60
-
61
48
  if (nextMeta !== this.state.meta) {
62
- this.store.setState(prev => ({ ...prev,
49
+ this.store.setState(prev => ({
50
+ ...prev,
63
51
  meta: nextMeta
64
52
  }));
65
53
  }
@@ -69,84 +57,80 @@ class FieldApi {
69
57
  return () => {
70
58
  unsubscribe();
71
59
  delete info.instances[this.uid];
72
-
73
60
  if (!Object.keys(info.instances).length) {
74
61
  delete this.form.fieldInfo[this.name];
75
62
  }
76
63
  };
77
64
  });
78
-
79
65
  _rollupPluginBabelHelpers.defineProperty(this, "update", opts => {
80
66
  var _this$form$options$as, _this$form$options$on, _this$form$options$on2;
81
-
82
67
  this.options = {
83
68
  asyncDebounceMs: (_this$form$options$as = this.form.options.asyncDebounceMs) != null ? _this$form$options$as : 0,
84
69
  onChangeAsyncDebounceMs: (_this$form$options$on = this.form.options.onChangeAsyncDebounceMs) != null ? _this$form$options$on : 0,
85
70
  onBlurAsyncDebounceMs: (_this$form$options$on2 = this.form.options.onBlurAsyncDebounceMs) != null ? _this$form$options$on2 : 0,
86
71
  ...opts
87
- }; // Default Value
72
+ };
88
73
 
89
- if (this.state.value === undefined && this.options.defaultValue !== undefined) {
90
- this.setValue(this.options.defaultValue);
91
- } // Default Meta
74
+ // Default Value
92
75
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
76
+ if (this.state.value === undefined) {
77
+ var _opts$form$options$de;
78
+ if (this.options.defaultValue !== undefined) {
79
+ this.setValue(this.options.defaultValue);
80
+ } else if (((_opts$form$options$de = opts.form.options.defaultValues) == null ? void 0 : _opts$form$options$de[this.options.name]) !== undefined) {
81
+ this.setValue(opts.form.options.defaultValues[this.options.name]);
82
+ }
83
+ }
93
84
 
94
-
85
+ // Default Meta
86
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
95
87
  if (this.getMeta() === undefined) {
96
88
  this.setMeta(this.state.meta);
97
89
  }
98
90
  });
99
-
100
91
  _rollupPluginBabelHelpers.defineProperty(this, "getValue", () => {
101
92
  return this.form.getFieldValue(this.name);
102
93
  });
103
-
104
- _rollupPluginBabelHelpers.defineProperty(this, "setValue", (updater, options) => this.form.setFieldValue(this.name, updater, options));
105
-
94
+ _rollupPluginBabelHelpers.defineProperty(this, "setValue", (updater, options) => {
95
+ this.form.setFieldValue(this.name, updater, options);
96
+ this.validate('change', this.state.value);
97
+ });
106
98
  _rollupPluginBabelHelpers.defineProperty(this, "getMeta", () => this.form.getFieldMeta(this.name));
107
-
108
99
  _rollupPluginBabelHelpers.defineProperty(this, "setMeta", updater => this.form.setFieldMeta(this.name, updater));
109
-
110
100
  _rollupPluginBabelHelpers.defineProperty(this, "getInfo", () => this.form.getFieldInfo(this.name));
111
-
112
101
  _rollupPluginBabelHelpers.defineProperty(this, "pushValue", value => this.form.pushFieldValue(this.name, value));
113
-
114
102
  _rollupPluginBabelHelpers.defineProperty(this, "insertValue", (index, value) => this.form.insertFieldValue(this.name, index, value));
115
-
116
103
  _rollupPluginBabelHelpers.defineProperty(this, "removeValue", index => this.form.removeFieldValue(this.name, index));
117
-
118
104
  _rollupPluginBabelHelpers.defineProperty(this, "swapValues", (aIndex, bIndex) => this.form.swapFieldValues(this.name, aIndex, bIndex));
119
-
120
105
  _rollupPluginBabelHelpers.defineProperty(this, "getSubField", name => new FieldApi({
121
106
  name: this.name + "." + name,
122
107
  form: this.form
123
108
  }));
124
-
125
- _rollupPluginBabelHelpers.defineProperty(this, "validateSync", async (value = this.state.value, cause) => {
109
+ _rollupPluginBabelHelpers.defineProperty(this, "validateSync", (value = this.state.value, cause) => {
126
110
  const {
127
111
  onChange,
128
112
  onBlur
129
113
  } = this.options;
130
114
  const validate = cause === 'submit' ? undefined : cause === 'change' ? onChange : onBlur;
131
- if (!validate) return; // Use the validationCount for all field instances to
132
- // track freshness of the validation
115
+ if (!validate) return;
133
116
 
117
+ // Use the validationCount for all field instances to
118
+ // track freshness of the validation
134
119
  const validationCount = (this.getInfo().validationCount || 0) + 1;
135
120
  this.getInfo().validationCount = validationCount;
136
121
  const error = normalizeError(validate(value, this));
137
-
138
122
  if (this.state.meta.error !== error) {
139
- this.setMeta(prev => ({ ...prev,
123
+ this.setMeta(prev => ({
124
+ ...prev,
140
125
  error
141
126
  }));
142
- } // If a sync error is encountered, cancel any async validation
143
-
127
+ }
144
128
 
129
+ // If a sync error is encountered, cancel any async validation
145
130
  if (this.state.meta.error) {
146
131
  this.cancelValidateAsync();
147
132
  }
148
133
  });
149
-
150
134
  _rollupPluginBabelHelpers.classPrivateFieldInitSpec(this, _leaseValidateAsync, {
151
135
  writable: true,
152
136
  value: () => {
@@ -155,20 +139,17 @@ class FieldApi {
155
139
  return count;
156
140
  }
157
141
  });
158
-
159
142
  _rollupPluginBabelHelpers.defineProperty(this, "cancelValidateAsync", () => {
160
143
  // Lease a new validation count to ignore any pending validations
161
- _rollupPluginBabelHelpers.classPrivateFieldGet(this, _leaseValidateAsync).call(this); // Cancel any pending validation state
162
-
163
-
164
- this.setMeta(prev => ({ ...prev,
144
+ _rollupPluginBabelHelpers.classPrivateFieldGet(this, _leaseValidateAsync).call(this);
145
+ // Cancel any pending validation state
146
+ this.setMeta(prev => ({
147
+ ...prev,
165
148
  isValidating: false
166
149
  }));
167
150
  });
168
-
169
151
  _rollupPluginBabelHelpers.defineProperty(this, "validateAsync", async (value = this.state.value, cause) => {
170
152
  var _ref, _ref2;
171
-
172
153
  const {
173
154
  onChangeAsync,
174
155
  onBlurAsync,
@@ -180,36 +161,34 @@ class FieldApi {
180
161
  const validate = cause === 'change' ? onChangeAsync : cause === 'submit' ? onSubmitAsync : onBlurAsync;
181
162
  if (!validate) return;
182
163
  const debounceMs = cause === 'submit' ? 0 : (_ref = (_ref2 = cause === 'change' ? onChangeAsyncDebounceMs : onBlurAsyncDebounceMs) != null ? _ref2 : asyncDebounceMs) != null ? _ref : 500;
183
- if (this.state.meta.isValidating !== true) this.setMeta(prev => ({ ...prev,
164
+ if (this.state.meta.isValidating !== true) this.setMeta(prev => ({
165
+ ...prev,
184
166
  isValidating: true
185
- })); // Use the validationCount for all field instances to
186
- // track freshness of the validation
167
+ }));
187
168
 
169
+ // Use the validationCount for all field instances to
170
+ // track freshness of the validation
188
171
  const validationAsyncCount = _rollupPluginBabelHelpers.classPrivateFieldGet(this, _leaseValidateAsync).call(this);
189
-
190
172
  const checkLatest = () => validationAsyncCount === this.getInfo().validationAsyncCount;
191
-
192
173
  if (!this.getInfo().validationPromise) {
193
174
  this.getInfo().validationPromise = new Promise((resolve, reject) => {
194
175
  this.getInfo().validationResolve = resolve;
195
176
  this.getInfo().validationReject = reject;
196
177
  });
197
178
  }
198
-
199
179
  if (debounceMs > 0) {
200
180
  await new Promise(r => setTimeout(r, debounceMs));
201
- } // Only kick off validation if this validation is the latest attempt
202
-
181
+ }
203
182
 
183
+ // Only kick off validation if this validation is the latest attempt
204
184
  if (checkLatest()) {
205
185
  try {
206
186
  const rawError = await validate(value, this);
207
-
208
187
  if (checkLatest()) {
209
188
  var _this$getInfo$validat, _this$getInfo;
210
-
211
189
  const error = normalizeError(rawError);
212
- this.setMeta(prev => ({ ...prev,
190
+ this.setMeta(prev => ({
191
+ ...prev,
213
192
  isValidating: false,
214
193
  error
215
194
  }));
@@ -218,42 +197,43 @@ class FieldApi {
218
197
  } catch (error) {
219
198
  if (checkLatest()) {
220
199
  var _this$getInfo$validat2, _this$getInfo2;
221
-
222
200
  (_this$getInfo$validat2 = (_this$getInfo2 = this.getInfo()).validationReject) == null ? void 0 : _this$getInfo$validat2.call(_this$getInfo2, error);
223
201
  throw error;
224
202
  }
225
203
  } finally {
226
204
  if (checkLatest()) {
227
- this.setMeta(prev => ({ ...prev,
205
+ this.setMeta(prev => ({
206
+ ...prev,
228
207
  isValidating: false
229
208
  }));
230
209
  delete this.getInfo().validationPromise;
231
210
  }
232
211
  }
233
- } // Always return the latest validation promise to the caller
234
-
212
+ }
235
213
 
214
+ // Always return the latest validation promise to the caller
236
215
  return this.getInfo().validationPromise;
237
216
  });
238
-
239
217
  _rollupPluginBabelHelpers.defineProperty(this, "validate", (cause, value) => {
240
218
  // If the field is pristine and validatePristine is false, do not validate
241
- if (!this.state.meta.isTouched) return; // Attempt to sync validate first
219
+ if (!this.state.meta.isTouched) return;
242
220
 
243
- this.validateSync(value, cause); // If there is an error, return it, do not attempt async validation
221
+ // Attempt to sync validate first
222
+ this.validateSync(value, cause);
244
223
 
224
+ // If there is an error, return it, do not attempt async validation
245
225
  if (this.state.meta.error) {
246
226
  if (!this.options.asyncAlways) {
247
227
  return this.state.meta.error;
248
228
  }
249
- } // No error? Attempt async validation
250
-
229
+ }
251
230
 
231
+ // No error? Attempt async validation
252
232
  return this.validateAsync(value, cause);
253
233
  });
254
-
255
234
  _rollupPluginBabelHelpers.defineProperty(this, "getChangeProps", (props = {}) => {
256
- return { ...props,
235
+ return {
236
+ ...props,
257
237
  value: this.state.value,
258
238
  onChange: value => {
259
239
  this.setValue(value);
@@ -261,22 +241,21 @@ class FieldApi {
261
241
  },
262
242
  onBlur: e => {
263
243
  const prevTouched = this.state.meta.isTouched;
264
- this.setMeta(prev => ({ ...prev,
244
+ this.setMeta(prev => ({
245
+ ...prev,
265
246
  isTouched: true
266
247
  }));
267
-
268
248
  if (!prevTouched) {
269
249
  this.validate('change');
270
250
  }
271
-
272
251
  this.validate('blur');
273
252
  }
274
253
  };
275
254
  });
276
-
277
255
  _rollupPluginBabelHelpers.defineProperty(this, "getInputProps", (props = {}) => {
278
- return { ...props,
279
- value: String(this.state.value),
256
+ return {
257
+ ...props,
258
+ value: this.state.value,
280
259
  onChange: e => {
281
260
  this.setValue(e.target.value);
282
261
  props.onChange == null ? void 0 : props.onChange(e.target.value);
@@ -284,9 +263,9 @@ class FieldApi {
284
263
  onBlur: this.getChangeProps(props).onBlur
285
264
  };
286
265
  });
287
-
288
266
  this.form = _opts.form;
289
- this.uid = uid++; // Support field prefixing from FieldScope
267
+ this.uid = uid++;
268
+ // Support field prefixing from FieldScope
290
269
  // let fieldPrefix = ''
291
270
  // if (this.form.fieldName) {
292
271
  // fieldPrefix = `${this.form.fieldName}.`
@@ -305,36 +284,24 @@ class FieldApi {
305
284
  onUpdate: () => {
306
285
  const state = this.store.state;
307
286
  state.meta.touchedError = state.meta.isTouched ? state.meta.error : undefined;
308
-
309
- if (state.value !== _rollupPluginBabelHelpers.classPrivateFieldGet(this, _prevState).value) {
310
- this.validate('change', state.value);
311
- }
312
-
313
- _rollupPluginBabelHelpers.classPrivateFieldSet(this, _prevState, state);
314
-
287
+ this.prevState = state;
315
288
  this.state = state;
316
289
  }
317
290
  });
318
291
  this.state = this.store.state;
319
-
320
- _rollupPluginBabelHelpers.classPrivateFieldSet(this, _prevState, this.state);
321
-
292
+ this.prevState = this.state;
322
293
  this.update(_opts);
323
294
  }
324
-
325
295
  }
326
-
327
296
  function normalizeError(rawError) {
328
297
  if (rawError) {
329
298
  if (typeof rawError !== 'string') {
330
299
  return 'Invalid Form Values';
331
300
  }
332
-
333
301
  return rawError;
334
302
  }
335
-
336
303
  return undefined;
337
304
  }
338
305
 
339
306
  exports.FieldApi = FieldApi;
340
- //# sourceMappingURL=FieldApi.js.map
307
+ //# sourceMappingURL=FieldApi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldApi.cjs","sources":["../../src/FieldApi.ts"],"sourcesContent":["import type { DeepKeys, DeepValue, 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<\n _TData,\n TFormData,\n /**\n * This allows us to restrict the name to only be a valid field name while\n * also assigning it to a generic\n */\n TName = unknown extends TFormData ? string : DeepKeys<TFormData>,\n /**\n * If TData is unknown, we can use the TName generic to determine the type\n */\n TData = unknown extends _TData ? DeepValue<TFormData, TName> : _TData,\n> {\n name: TName\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<T> = {\n value: T\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\n/**\n * TData may not be known at the time of FieldApi construction, so we need to\n * use a conditional type to determine if TData is known or not.\n *\n * If TData is not known, we use the TFormData type to determine the type of\n * the field value based on the field name.\n */\ntype GetTData<Name, TData, TFormData> = unknown extends TData\n ? DeepValue<TFormData, Name>\n : TData\n\nexport class FieldApi<TData, TFormData> {\n uid: number\n form: FormApi<TFormData>\n name!: DeepKeys<TFormData>\n /**\n * This is a hack that allows us to use `GetTData` without calling it everywhere\n *\n * Unfortunately this hack appears to be needed alongside the `TName` hack\n * further up in this file. This properly types all of the internal methods,\n * while the `TName` hack types the options properly\n */\n _tdata!: GetTData<typeof this.name, TData, TFormData>\n store!: Store<FieldState<typeof this._tdata>>\n state!: FieldState<typeof this._tdata>\n prevState!: FieldState<typeof this._tdata>\n options: FieldOptions<typeof this._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<typeof this._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 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 as never)\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 as never)\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<typeof this._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 } as never\n\n // Default Value\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.state.value === undefined) {\n if (this.options.defaultValue !== undefined) {\n this.setValue(this.options.defaultValue as never)\n } else if (\n opts.form.options.defaultValues?.[\n this.options.name as keyof TFormData\n ] !== undefined\n ) {\n this.setValue(\n opts.form.options.defaultValues[\n this.options.name as keyof TFormData\n ] as never,\n )\n }\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 = (): typeof this._tdata => {\n return this.form.getFieldValue(this.name)\n }\n\n setValue = (\n updater: Updater<typeof this._tdata>,\n options?: { touch?: boolean; notify?: boolean },\n ) => {\n this.form.setFieldValue(this.name, updater as never, options)\n this.validate('change', this.state.value)\n }\n\n getMeta = (): FieldMeta => this.form.getFieldMeta(this.name)\n\n setMeta = (updater: Updater<FieldMeta>) =>\n this.form.setFieldMeta(this.name, updater)\n\n getInfo = () => this.form.getFieldInfo(this.name)\n\n pushValue = (\n value: typeof this._tdata extends any[]\n ? (typeof this._tdata)[number]\n : never,\n ) => this.form.pushFieldValue(this.name, value as any)\n\n insertValue = (\n index: number,\n value: typeof this._tdata extends any[]\n ? (typeof this._tdata)[number]\n : never,\n ) => this.form.insertFieldValue(this.name, index, value as any)\n\n removeValue = (index: number) => this.form.removeFieldValue(this.name, index)\n\n swapValues = (aIndex: number, bIndex: number) =>\n this.form.swapFieldValues(this.name, aIndex, bIndex)\n\n getSubField = <TName extends DeepKeys<typeof this._tdata>>(name: TName) =>\n new FieldApi<DeepValue<typeof this._tdata, TName>, TFormData>({\n name: `${this.name}.${name}` as never,\n form: this.form,\n })\n\n validateSync = (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 as never, this as never))\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 as never, this as never)\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?: typeof this._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<typeof this._tdata> &\n Omit<T, keyof ChangeProps<typeof this._tdata>> => {\n return {\n ...props,\n value: this.state.value,\n onChange: (value) => {\n this.setValue(value as never)\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<typeof this._tdata> &\n Omit<T, keyof ChangeProps<typeof this._tdata>>\n }\n\n getInputProps = <T extends UserInputProps>(\n props: T = {} as T,\n ): InputProps<typeof this._tdata> &\n Omit<T, keyof InputProps<typeof this._tdata>> => {\n return {\n ...props,\n value: 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 } as InputProps<typeof this._tdata> &\n Omit<T, keyof InputProps<typeof this._tdata>>\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","_leaseValidateAsync","WeakMap","FieldApi","constructor","opts","_this$getMeta","_defineProperty","_this$options$onMount","_this$options","info","getInfo","instances","unsubscribe","form","store","subscribe","batch","nextValue","getValue","nextMeta","getMeta","state","value","setState","prev","meta","options","onMount","call","Object","keys","length","fieldInfo","name","_this$form$options$as","_this$form$options$on","_this$form$options$on2","asyncDebounceMs","onChangeAsyncDebounceMs","onBlurAsyncDebounceMs","undefined","_opts$form$options$de","defaultValue","setValue","defaultValues","setMeta","getFieldValue","updater","setFieldValue","validate","getFieldMeta","setFieldMeta","getFieldInfo","pushFieldValue","index","insertFieldValue","removeFieldValue","aIndex","bIndex","swapFieldValues","cause","onChange","onBlur","validationCount","error","normalizeError","cancelValidateAsync","_classPrivateFieldInitSpec","writable","count","validationAsyncCount","_classPrivateFieldGet","isValidating","_ref","_ref2","onChangeAsync","onBlurAsync","onSubmitAsync","debounceMs","checkLatest","validationPromise","Promise","resolve","reject","validationResolve","validationReject","r","setTimeout","rawError","_this$getInfo$validat","_this$getInfo","_this$getInfo$validat2","_this$getInfo2","isTouched","validateSync","asyncAlways","validateAsync","props","e","prevTouched","target","getChangeProps","Store","defaultMeta","onUpdate","touchedError","prevState","update"],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import type { DeepKeys, DeepValue, Updater } from './utils';
2
+ import type { FormApi, ValidationError } from './FormApi';
3
+ import { Store } from '@tanstack/store';
4
+ export type ValidationCause = 'change' | 'blur' | 'submit';
5
+ type ValidateFn<TData, TFormData> = (value: TData, fieldApi: FieldApi<TData, TFormData>) => ValidationError;
6
+ type ValidateAsyncFn<TData, TFormData> = (value: TData, fieldApi: FieldApi<TData, TFormData>) => ValidationError | Promise<ValidationError>;
7
+ export interface FieldOptions<_TData, TFormData,
8
+ /**
9
+ * This allows us to restrict the name to only be a valid field name while
10
+ * also assigning it to a generic
11
+ */
12
+ TName = unknown extends TFormData ? string : DeepKeys<TFormData>,
13
+ /**
14
+ * If TData is unknown, we can use the TName generic to determine the type
15
+ */
16
+ TData = unknown extends _TData ? DeepValue<TFormData, TName> : _TData> {
17
+ name: TName;
18
+ index?: TData extends any[] ? number : never;
19
+ defaultValue?: TData;
20
+ asyncDebounceMs?: number;
21
+ asyncAlways?: boolean;
22
+ onMount?: (formApi: FieldApi<TData, TFormData>) => void;
23
+ onChange?: ValidateFn<TData, TFormData>;
24
+ onChangeAsync?: ValidateAsyncFn<TData, TFormData>;
25
+ onChangeAsyncDebounceMs?: number;
26
+ onBlur?: ValidateFn<TData, TFormData>;
27
+ onBlurAsync?: ValidateAsyncFn<TData, TFormData>;
28
+ onBlurAsyncDebounceMs?: number;
29
+ onSubmitAsync?: ValidateAsyncFn<TData, TFormData>;
30
+ defaultMeta?: Partial<FieldMeta>;
31
+ }
32
+ export type FieldApiOptions<TData, TFormData> = FieldOptions<TData, TFormData> & {
33
+ form: FormApi<TFormData>;
34
+ };
35
+ export type FieldMeta = {
36
+ isTouched: boolean;
37
+ touchedError?: ValidationError;
38
+ error?: ValidationError;
39
+ isValidating: boolean;
40
+ };
41
+ export type UserChangeProps<TData> = {
42
+ onChange?: (updater: Updater<TData>) => void;
43
+ onBlur?: (event: any) => void;
44
+ };
45
+ export type UserInputProps = {
46
+ onChange?: (event: any) => void;
47
+ onBlur?: (event: any) => void;
48
+ };
49
+ export type ChangeProps<TData> = {
50
+ value: TData;
51
+ onChange: (value: TData) => void;
52
+ onBlur: (event: any) => void;
53
+ };
54
+ export type InputProps<T> = {
55
+ value: T;
56
+ onChange: (event: any) => void;
57
+ onBlur: (event: any) => void;
58
+ };
59
+ export type FieldState<TData> = {
60
+ value: TData;
61
+ meta: FieldMeta;
62
+ };
63
+ /**
64
+ * TData may not be known at the time of FieldApi construction, so we need to
65
+ * use a conditional type to determine if TData is known or not.
66
+ *
67
+ * If TData is not known, we use the TFormData type to determine the type of
68
+ * the field value based on the field name.
69
+ */
70
+ type GetTData<Name, TData, TFormData> = unknown extends TData ? DeepValue<TFormData, Name> : TData;
71
+ export declare class FieldApi<TData, TFormData> {
72
+ #private;
73
+ uid: number;
74
+ form: FormApi<TFormData>;
75
+ name: DeepKeys<TFormData>;
76
+ /**
77
+ * This is a hack that allows us to use `GetTData` without calling it everywhere
78
+ *
79
+ * Unfortunately this hack appears to be needed alongside the `TName` hack
80
+ * further up in this file. This properly types all of the internal methods,
81
+ * while the `TName` hack types the options properly
82
+ */
83
+ _tdata: GetTData<typeof this.name, TData, TFormData>;
84
+ store: Store<FieldState<typeof this._tdata>>;
85
+ state: FieldState<typeof this._tdata>;
86
+ prevState: FieldState<typeof this._tdata>;
87
+ options: FieldOptions<typeof this._tdata, TFormData>;
88
+ constructor(opts: FieldApiOptions<TData, TFormData>);
89
+ mount: () => () => void;
90
+ update: (opts: FieldApiOptions<typeof this._tdata, TFormData>) => void;
91
+ getValue: () => typeof this._tdata;
92
+ setValue: (updater: Updater<typeof this._tdata>, options?: {
93
+ touch?: boolean;
94
+ notify?: boolean;
95
+ }) => void;
96
+ getMeta: () => FieldMeta;
97
+ setMeta: (updater: Updater<FieldMeta>) => void;
98
+ getInfo: () => Record<DeepKeys<TFormData>, import("./FormApi").FieldInfo<TFormData>>[DeepKeys<TFormData>];
99
+ pushValue: (value: typeof this._tdata extends any[] ? (typeof this._tdata)[number] : never) => void;
100
+ insertValue: (index: number, value: typeof this._tdata extends any[] ? (typeof this._tdata)[number] : never) => void;
101
+ removeValue: (index: number) => void;
102
+ swapValues: (aIndex: number, bIndex: number) => void;
103
+ getSubField: <TName extends DeepKeys<GetTData<DeepKeys<TFormData>, TData, TFormData>>>(name: TName) => FieldApi<DeepValue<GetTData<DeepKeys<TFormData>, TData, TFormData>, TName>, TFormData>;
104
+ validateSync: (value: GetTData<DeepKeys<TFormData>, TData, TFormData> | undefined, cause: ValidationCause) => void;
105
+ cancelValidateAsync: () => void;
106
+ validateAsync: (value: GetTData<DeepKeys<TFormData>, TData, TFormData> | undefined, cause: ValidationCause) => Promise<ValidationError>;
107
+ validate: (cause: ValidationCause, value?: typeof this._tdata) => ValidationError | Promise<ValidationError>;
108
+ getChangeProps: <T extends UserChangeProps<any>>(props?: T) => ChangeProps<GetTData<DeepKeys<TFormData>, TData, TFormData>> & Omit<T, keyof ChangeProps<GetTData<DeepKeys<TFormData>, TData, TFormData>>>;
109
+ getInputProps: <T extends UserInputProps>(props?: T) => InputProps<GetTData<DeepKeys<TFormData>, TData, TFormData>> & Omit<T, keyof InputProps<GetTData<DeepKeys<TFormData>, TData, TFormData>>>;
110
+ }
111
+ export {};
112
+ //# sourceMappingURL=FieldApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldApi.d.ts","sourceRoot":"","sources":["../../src/FieldApi.ts"],"names":[],"mappings":"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"}