@tanstack/form-core 0.11.0 → 0.13.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 (101) hide show
  1. package/dist/cjs/FieldApi.d.ts +94 -0
  2. package/dist/cjs/FormApi.d.ts +118 -0
  3. package/dist/cjs/index.cjs +926 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/cjs/index.d.cts +5 -0
  6. package/dist/cjs/index.d.ts +5 -0
  7. package/dist/cjs/index.js +926 -0
  8. package/dist/cjs/mergeForm.d.ts +4 -0
  9. package/dist/cjs/tests/FieldApi.spec.d.ts +1 -0
  10. package/dist/cjs/tests/FieldApi.test-d.d.ts +1 -0
  11. package/dist/cjs/tests/FormApi.spec.d.ts +1 -0
  12. package/dist/cjs/tests/mutateMergeDeep.spec.d.ts +1 -0
  13. package/dist/cjs/tests/utils.d.ts +1 -0
  14. package/dist/cjs/tests/utils.spec.d.ts +1 -0
  15. package/dist/cjs/types.d.ts +14 -0
  16. package/dist/cjs/utils.d.ts +57 -0
  17. package/dist/mjs/FieldApi.d.ts +94 -0
  18. package/dist/mjs/FormApi.d.ts +118 -0
  19. package/dist/mjs/index.d.mts +5 -0
  20. package/dist/mjs/index.d.ts +5 -0
  21. package/dist/mjs/index.js +926 -0
  22. package/dist/mjs/index.mjs +926 -0
  23. package/dist/mjs/index.mjs.map +1 -0
  24. package/dist/mjs/mergeForm.d.ts +4 -0
  25. package/dist/mjs/tests/FieldApi.spec.d.ts +1 -0
  26. package/dist/mjs/tests/FieldApi.test-d.d.ts +1 -0
  27. package/dist/mjs/tests/FormApi.spec.d.ts +1 -0
  28. package/dist/mjs/tests/mutateMergeDeep.spec.d.ts +1 -0
  29. package/dist/mjs/tests/utils.d.ts +1 -0
  30. package/dist/mjs/tests/utils.spec.d.ts +1 -0
  31. package/dist/mjs/types.d.ts +14 -0
  32. package/dist/mjs/utils.d.ts +57 -0
  33. package/package.json +16 -21
  34. package/src/FieldApi.ts +53 -38
  35. package/src/FormApi.ts +59 -23
  36. package/src/index.ts +1 -0
  37. package/src/mergeForm.ts +42 -0
  38. package/src/tests/FormApi.spec.ts +1 -0
  39. package/src/tests/mutateMergeDeep.spec.ts +32 -0
  40. package/src/types.ts +2 -1
  41. package/src/utils.ts +40 -23
  42. package/build/legacy/FieldApi.cjs +0 -313
  43. package/build/legacy/FieldApi.cjs.map +0 -1
  44. package/build/legacy/FieldApi.d.cts +0 -3
  45. package/build/legacy/FieldApi.d.ts +0 -3
  46. package/build/legacy/FieldApi.js +0 -288
  47. package/build/legacy/FieldApi.js.map +0 -1
  48. package/build/legacy/FormApi.cjs +0 -445
  49. package/build/legacy/FormApi.cjs.map +0 -1
  50. package/build/legacy/FormApi.d.cts +0 -3
  51. package/build/legacy/FormApi.d.ts +0 -3
  52. package/build/legacy/FormApi.js +0 -428
  53. package/build/legacy/FormApi.js.map +0 -1
  54. package/build/legacy/index.cjs +0 -31
  55. package/build/legacy/index.cjs.map +0 -1
  56. package/build/legacy/index.d.cts +0 -257
  57. package/build/legacy/index.d.ts +0 -257
  58. package/build/legacy/index.js +0 -6
  59. package/build/legacy/index.js.map +0 -1
  60. package/build/legacy/types.cjs +0 -19
  61. package/build/legacy/types.cjs.map +0 -1
  62. package/build/legacy/types.d.cts +0 -16
  63. package/build/legacy/types.d.ts +0 -16
  64. package/build/legacy/types.js +0 -1
  65. package/build/legacy/types.js.map +0 -1
  66. package/build/legacy/utils.cjs +0 -187
  67. package/build/legacy/utils.cjs.map +0 -1
  68. package/build/legacy/utils.d.cts +0 -3
  69. package/build/legacy/utils.d.ts +0 -3
  70. package/build/legacy/utils.js +0 -156
  71. package/build/legacy/utils.js.map +0 -1
  72. package/build/modern/FieldApi.cjs +0 -312
  73. package/build/modern/FieldApi.cjs.map +0 -1
  74. package/build/modern/FieldApi.d.cts +0 -3
  75. package/build/modern/FieldApi.d.ts +0 -3
  76. package/build/modern/FieldApi.js +0 -287
  77. package/build/modern/FieldApi.js.map +0 -1
  78. package/build/modern/FormApi.cjs +0 -439
  79. package/build/modern/FormApi.cjs.map +0 -1
  80. package/build/modern/FormApi.d.cts +0 -3
  81. package/build/modern/FormApi.d.ts +0 -3
  82. package/build/modern/FormApi.js +0 -422
  83. package/build/modern/FormApi.js.map +0 -1
  84. package/build/modern/index.cjs +0 -31
  85. package/build/modern/index.cjs.map +0 -1
  86. package/build/modern/index.d.cts +0 -257
  87. package/build/modern/index.d.ts +0 -257
  88. package/build/modern/index.js +0 -6
  89. package/build/modern/index.js.map +0 -1
  90. package/build/modern/types.cjs +0 -19
  91. package/build/modern/types.cjs.map +0 -1
  92. package/build/modern/types.d.cts +0 -16
  93. package/build/modern/types.d.ts +0 -16
  94. package/build/modern/types.js +0 -1
  95. package/build/modern/types.js.map +0 -1
  96. package/build/modern/utils.cjs +0 -187
  97. package/build/modern/utils.cjs.map +0 -1
  98. package/build/modern/utils.d.cts +0 -3
  99. package/build/modern/utils.d.ts +0 -3
  100. package/build/modern/utils.js +0 -156
  101. package/build/modern/utils.js.map +0 -1
@@ -1,428 +0,0 @@
1
- // src/FormApi.ts
2
- import { Store } from "@tanstack/store";
3
- import {
4
- getAsyncValidatorArray,
5
- getSyncValidatorArray,
6
- deleteBy,
7
- functionalUpdate,
8
- getBy,
9
- isNonEmptyArray,
10
- setBy
11
- } from "./utils.js";
12
- function getDefaultFormState(defaultState) {
13
- return {
14
- values: defaultState.values ?? {},
15
- errors: defaultState.errors ?? [],
16
- errorMap: defaultState.errorMap ?? {},
17
- fieldMeta: defaultState.fieldMeta ?? {},
18
- canSubmit: defaultState.canSubmit ?? true,
19
- isFieldsValid: defaultState.isFieldsValid ?? false,
20
- isFieldsValidating: defaultState.isFieldsValidating ?? false,
21
- isFormValid: defaultState.isFormValid ?? false,
22
- isFormValidating: defaultState.isFormValidating ?? false,
23
- isSubmitted: defaultState.isSubmitted ?? false,
24
- isSubmitting: defaultState.isSubmitting ?? false,
25
- isTouched: defaultState.isTouched ?? false,
26
- isValid: defaultState.isValid ?? false,
27
- isValidating: defaultState.isValidating ?? false,
28
- submissionAttempts: defaultState.submissionAttempts ?? 0,
29
- validationMetaMap: defaultState.validationMetaMap ?? {
30
- onChange: void 0,
31
- onBlur: void 0,
32
- onSubmit: void 0,
33
- onMount: void 0
34
- }
35
- };
36
- }
37
- var FormApi = class {
38
- constructor(opts) {
39
- this.options = {};
40
- // // This carries the context for nested fields
41
- this.fieldInfo = {};
42
- this.mount = () => {
43
- const { onMount } = this.options.validators || {};
44
- if (!onMount)
45
- return;
46
- const error = this.runValidator({
47
- validate: onMount,
48
- value: {
49
- value: this.state.values,
50
- formApi: this
51
- },
52
- type: "validate"
53
- });
54
- if (error) {
55
- this.store.setState((prev) => ({
56
- ...prev,
57
- errorMap: { ...prev.errorMap, onMount: error }
58
- }));
59
- }
60
- };
61
- this.update = (options) => {
62
- if (!options)
63
- return;
64
- this.store.batch(() => {
65
- const shouldUpdateValues = options.defaultValues && options.defaultValues !== this.options.defaultValues && !this.state.isTouched;
66
- const shouldUpdateState = options.defaultState !== this.options.defaultState && !this.state.isTouched;
67
- this.store.setState(
68
- () => getDefaultFormState(
69
- Object.assign(
70
- {},
71
- this.state,
72
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
73
- shouldUpdateState ? options.defaultState : {},
74
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
75
- shouldUpdateValues ? {
76
- values: options.defaultValues
77
- } : {}
78
- )
79
- )
80
- );
81
- });
82
- this.options = options;
83
- };
84
- this.reset = () => this.store.setState(
85
- () => {
86
- var _a;
87
- return getDefaultFormState({
88
- ...this.options.defaultState,
89
- values: this.options.defaultValues ?? ((_a = this.options.defaultState) == null ? void 0 : _a.values)
90
- });
91
- }
92
- );
93
- this.validateAllFields = async (cause) => {
94
- const fieldValidationPromises = [];
95
- this.store.batch(() => {
96
- void Object.values(this.fieldInfo).forEach((field) => {
97
- Object.values(field.instances).forEach((instance) => {
98
- fieldValidationPromises.push(
99
- Promise.resolve().then(() => instance.validate(cause))
100
- );
101
- if (!instance.state.meta.isTouched) {
102
- instance.setMeta((prev) => ({ ...prev, isTouched: true }));
103
- }
104
- });
105
- });
106
- });
107
- const fieldErrorMapMap = await Promise.all(fieldValidationPromises);
108
- return fieldErrorMapMap.flat();
109
- };
110
- // TODO: This code is copied from FieldApi, we should refactor to share
111
- this.validateSync = (cause) => {
112
- const validates = getSyncValidatorArray(cause, this.options);
113
- let hasErrored = false;
114
- this.store.batch(() => {
115
- for (const validateObj of validates) {
116
- if (!validateObj.validate)
117
- continue;
118
- const error = normalizeError(
119
- this.runValidator({
120
- validate: validateObj.validate,
121
- value: {
122
- value: this.state.values,
123
- formApi: this
124
- },
125
- type: "validate"
126
- })
127
- );
128
- const errorMapKey = getErrorMapKey(validateObj.cause);
129
- if (this.state.errorMap[errorMapKey] !== error) {
130
- this.store.setState((prev) => ({
131
- ...prev,
132
- errorMap: {
133
- ...prev.errorMap,
134
- [errorMapKey]: error
135
- }
136
- }));
137
- }
138
- if (error) {
139
- hasErrored = true;
140
- }
141
- }
142
- });
143
- const submitErrKey = getErrorMapKey("submit");
144
- if (this.state.errorMap[submitErrKey] && cause !== "submit" && !hasErrored) {
145
- this.store.setState((prev) => ({
146
- ...prev,
147
- errorMap: {
148
- ...prev.errorMap,
149
- [submitErrKey]: void 0
150
- }
151
- }));
152
- }
153
- return { hasErrored };
154
- };
155
- this.validateAsync = async (cause) => {
156
- const validates = getAsyncValidatorArray(cause, this.options);
157
- if (!this.state.isFormValidating) {
158
- this.store.setState((prev) => ({ ...prev, isFormValidating: true }));
159
- }
160
- const promises = [];
161
- for (const validateObj of validates) {
162
- if (!validateObj.validate)
163
- continue;
164
- const key = getErrorMapKey(validateObj.cause);
165
- const fieldValidatorMeta = this.state.validationMetaMap[key];
166
- fieldValidatorMeta == null ? void 0 : fieldValidatorMeta.lastAbortController.abort();
167
- const controller = new AbortController();
168
- this.state.validationMetaMap[key] = {
169
- lastAbortController: controller
170
- };
171
- promises.push(
172
- new Promise(async (resolve) => {
173
- let rawError;
174
- try {
175
- rawError = await new Promise((rawResolve, rawReject) => {
176
- setTimeout(() => {
177
- if (controller.signal.aborted)
178
- return rawResolve(void 0);
179
- this.runValidator({
180
- validate: validateObj.validate,
181
- value: {
182
- value: this.state.values,
183
- formApi: this,
184
- signal: controller.signal
185
- },
186
- type: "validateAsync"
187
- }).then(rawResolve).catch(rawReject);
188
- }, validateObj.debounceMs);
189
- });
190
- } catch (e) {
191
- rawError = e;
192
- }
193
- const error = normalizeError(rawError);
194
- this.store.setState((prev) => ({
195
- ...prev,
196
- errorMap: {
197
- ...prev.errorMap,
198
- [getErrorMapKey(cause)]: error
199
- }
200
- }));
201
- resolve(error);
202
- })
203
- );
204
- }
205
- let results = [];
206
- if (promises.length) {
207
- results = await Promise.all(promises);
208
- }
209
- this.store.setState((prev) => ({
210
- ...prev,
211
- isFormValidating: false
212
- }));
213
- return results.filter(Boolean);
214
- };
215
- this.validate = (cause) => {
216
- const { hasErrored } = this.validateSync(cause);
217
- if (hasErrored && !this.options.asyncAlways) {
218
- return this.state.errors;
219
- }
220
- return this.validateAsync(cause);
221
- };
222
- this.handleSubmit = async () => {
223
- var _a, _b, _c, _d, _e, _f;
224
- this.store.setState((old) => ({
225
- ...old,
226
- // Submission attempts mark the form as not submitted
227
- isSubmitted: false,
228
- // Count submission attempts
229
- submissionAttempts: old.submissionAttempts + 1
230
- }));
231
- if (!this.state.canSubmit)
232
- return;
233
- this.store.setState((d) => ({ ...d, isSubmitting: true }));
234
- const done = () => {
235
- this.store.setState((prev) => ({ ...prev, isSubmitting: false }));
236
- };
237
- await this.validateAllFields("submit");
238
- if (!this.state.isFieldsValid) {
239
- done();
240
- (_b = (_a = this.options).onSubmitInvalid) == null ? void 0 : _b.call(_a, {
241
- value: this.state.values,
242
- formApi: this
243
- });
244
- return;
245
- }
246
- await this.validate("submit");
247
- if (!this.state.isValid) {
248
- done();
249
- (_d = (_c = this.options).onSubmitInvalid) == null ? void 0 : _d.call(_c, {
250
- value: this.state.values,
251
- formApi: this
252
- });
253
- return;
254
- }
255
- try {
256
- await ((_f = (_e = this.options).onSubmit) == null ? void 0 : _f.call(_e, { value: this.state.values, formApi: this }));
257
- this.store.batch(() => {
258
- this.store.setState((prev) => ({ ...prev, isSubmitted: true }));
259
- done();
260
- });
261
- } catch (err) {
262
- done();
263
- throw err;
264
- }
265
- };
266
- this.getFieldValue = (field) => getBy(this.state.values, field);
267
- this.getFieldMeta = (field) => {
268
- return this.state.fieldMeta[field];
269
- };
270
- this.getFieldInfo = (field) => {
271
- var _a;
272
- return (_a = this.fieldInfo)[field] || (_a[field] = {
273
- instances: {},
274
- validationMetaMap: {
275
- onChange: void 0,
276
- onBlur: void 0,
277
- onSubmit: void 0,
278
- onMount: void 0
279
- }
280
- });
281
- };
282
- this.setFieldMeta = (field, updater) => {
283
- this.store.setState((prev) => {
284
- return {
285
- ...prev,
286
- fieldMeta: {
287
- ...prev.fieldMeta,
288
- [field]: functionalUpdate(updater, prev.fieldMeta[field])
289
- }
290
- };
291
- });
292
- };
293
- this.setFieldValue = (field, updater, opts) => {
294
- const touch = opts == null ? void 0 : opts.touch;
295
- this.store.batch(() => {
296
- if (touch) {
297
- this.setFieldMeta(field, (prev) => ({
298
- ...prev,
299
- isTouched: true
300
- }));
301
- }
302
- this.store.setState((prev) => {
303
- return {
304
- ...prev,
305
- values: setBy(prev.values, field, updater)
306
- };
307
- });
308
- });
309
- };
310
- this.deleteField = (field) => {
311
- this.store.setState((prev) => {
312
- const newState = { ...prev };
313
- newState.values = deleteBy(newState.values, field);
314
- delete newState.fieldMeta[field];
315
- return newState;
316
- });
317
- };
318
- this.pushFieldValue = (field, value, opts) => {
319
- return this.setFieldValue(
320
- field,
321
- (prev) => [...Array.isArray(prev) ? prev : [], value],
322
- opts
323
- );
324
- };
325
- this.insertFieldValue = (field, index, value, opts) => {
326
- this.setFieldValue(
327
- field,
328
- (prev) => {
329
- return prev.map(
330
- (d, i) => i === index ? value : d
331
- );
332
- },
333
- opts
334
- );
335
- };
336
- this.removeFieldValue = (field, index, opts) => {
337
- this.setFieldValue(
338
- field,
339
- (prev) => {
340
- return prev.filter(
341
- (_d, i) => i !== index
342
- );
343
- },
344
- opts
345
- );
346
- };
347
- this.swapFieldValues = (field, index1, index2) => {
348
- this.setFieldValue(field, (prev) => {
349
- const prev1 = prev[index1];
350
- const prev2 = prev[index2];
351
- return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1);
352
- });
353
- };
354
- var _a;
355
- this.store = new Store(
356
- getDefaultFormState({
357
- ...opts == null ? void 0 : opts.defaultState,
358
- values: (opts == null ? void 0 : opts.defaultValues) ?? ((_a = opts == null ? void 0 : opts.defaultState) == null ? void 0 : _a.values),
359
- isFormValid: true
360
- }),
361
- {
362
- onUpdate: () => {
363
- let { state } = this.store;
364
- const fieldMetaValues = Object.values(state.fieldMeta);
365
- const isFieldsValidating = fieldMetaValues.some(
366
- (field) => field == null ? void 0 : field.isValidating
367
- );
368
- const isFieldsValid = !fieldMetaValues.some(
369
- (field) => (field == null ? void 0 : field.errorMap) && isNonEmptyArray(Object.values(field.errorMap).filter(Boolean))
370
- );
371
- const isTouched = fieldMetaValues.some((field) => field == null ? void 0 : field.isTouched);
372
- const isValidating = isFieldsValidating || state.isFormValidating;
373
- state.errors = Object.values(state.errorMap).filter(
374
- (val) => val !== void 0
375
- );
376
- const isFormValid = state.errors.length === 0;
377
- const isValid = isFieldsValid && isFormValid;
378
- const canSubmit = state.submissionAttempts === 0 && !isTouched || !isValidating && !state.isSubmitting && isValid;
379
- state = {
380
- ...state,
381
- isFieldsValidating,
382
- isFieldsValid,
383
- isFormValid,
384
- isValid,
385
- canSubmit,
386
- isTouched
387
- };
388
- this.store.state = state;
389
- this.state = state;
390
- }
391
- }
392
- );
393
- this.state = this.store.state;
394
- this.update(opts || {});
395
- }
396
- runValidator(props) {
397
- const adapter = this.options.validatorAdapter;
398
- if (adapter && typeof props.validate !== "function") {
399
- return adapter()[props.type](props.value, props.validate);
400
- }
401
- return props.validate(props.value);
402
- }
403
- };
404
- function normalizeError(rawError) {
405
- if (rawError) {
406
- if (typeof rawError !== "string") {
407
- return "Invalid Form Values";
408
- }
409
- return rawError;
410
- }
411
- return void 0;
412
- }
413
- function getErrorMapKey(cause) {
414
- switch (cause) {
415
- case "submit":
416
- return "onSubmit";
417
- case "change":
418
- return "onChange";
419
- case "blur":
420
- return "onBlur";
421
- case "mount":
422
- return "onMount";
423
- }
424
- }
425
- export {
426
- FormApi
427
- };
428
- //# sourceMappingURL=FormApi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/FormApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\nimport type { DeepKeys, DeepValue, Updater } from './utils'\nimport {\n getAsyncValidatorArray,\n getSyncValidatorArray,\n deleteBy,\n functionalUpdate,\n getBy,\n isNonEmptyArray,\n setBy,\n} from './utils'\nimport type { FieldApi, FieldMeta } from './FieldApi'\nimport type {\n ValidationError,\n ValidationErrorMap,\n Validator,\n ValidationCause,\n ValidationErrorMapKeys,\n} from './types'\n\nexport type FormValidateFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = (props: {\n value: TFormData\n formApi: FormApi<TFormData, TFormValidator>\n}) => ValidationError\n\nexport type FormValidateOrFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = TFormValidator extends Validator<TFormData, infer TFN>\n ? TFN\n : FormValidateFn<TFormData, TFormValidator>\n\nexport type FormValidateAsyncFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = (props: {\n value: TFormData\n formApi: FormApi<TFormData, TFormValidator>\n signal: AbortSignal\n}) => ValidationError | Promise<ValidationError>\n\nexport type FormAsyncValidateOrFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = TFormValidator extends Validator<TFormData, infer FFN>\n ? FFN | FormValidateAsyncFn<TFormData, TFormValidator>\n : FormValidateAsyncFn<TFormData, TFormValidator>\n\nexport interface FormValidators<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> {\n onMount?: FormValidateOrFn<TFormData, TFormValidator>\n onChange?: FormValidateOrFn<TFormData, TFormValidator>\n onChangeAsync?: FormAsyncValidateOrFn<TFormData, TFormValidator>\n onChangeAsyncDebounceMs?: number\n onBlur?: FormValidateOrFn<TFormData, TFormValidator>\n onBlurAsync?: FormAsyncValidateOrFn<TFormData, TFormValidator>\n onBlurAsyncDebounceMs?: number\n onSubmit?: FormValidateOrFn<TFormData, TFormValidator>\n onSubmitAsync?: FormAsyncValidateOrFn<TFormData, TFormValidator>\n onSubmitAsyncDebounceMs?: number\n}\n\nexport type FormOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = {\n defaultValues?: TFormData\n defaultState?: Partial<FormState<TFormData>>\n asyncAlways?: boolean\n asyncDebounceMs?: number\n validatorAdapter?: TFormValidator\n validators?: FormValidators<TFormData, TFormValidator>\n onSubmit?: (props: {\n value: TFormData\n formApi: FormApi<TFormData, TFormValidator>\n }) => any | Promise<any>\n onSubmitInvalid?: (props: {\n value: TFormData\n formApi: FormApi<TFormData, TFormValidator>\n }) => void\n}\n\nexport type ValidationMeta = {\n lastAbortController: AbortController\n}\n\nexport type FieldInfo<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = {\n instances: Record<\n string,\n FieldApi<\n TFormData,\n any,\n Validator<unknown, unknown> | undefined,\n TFormValidator\n >\n >\n validationMetaMap: Record<ValidationErrorMapKeys, ValidationMeta | undefined>\n}\n\nexport type FormState<TFormData> = {\n values: TFormData\n // Form Validation\n isFormValidating: boolean\n isFormValid: boolean\n errors: ValidationError[]\n errorMap: ValidationErrorMap\n validationMetaMap: Record<ValidationErrorMapKeys, ValidationMeta | undefined>\n // Fields\n fieldMeta: Record<DeepKeys<TFormData>, FieldMeta>\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isSubmitting: boolean\n // General\n isTouched: boolean\n isSubmitted: boolean\n isValidating: boolean\n isValid: boolean\n canSubmit: boolean\n submissionAttempts: number\n}\n\nfunction getDefaultFormState<TFormData>(\n defaultState: Partial<FormState<TFormData>>,\n): FormState<TFormData> {\n return {\n values: defaultState.values ?? ({} as never),\n errors: defaultState.errors ?? [],\n errorMap: defaultState.errorMap ?? {},\n fieldMeta: defaultState.fieldMeta ?? ({} as never),\n canSubmit: defaultState.canSubmit ?? true,\n isFieldsValid: defaultState.isFieldsValid ?? false,\n isFieldsValidating: defaultState.isFieldsValidating ?? false,\n isFormValid: defaultState.isFormValid ?? false,\n isFormValidating: defaultState.isFormValidating ?? false,\n isSubmitted: defaultState.isSubmitted ?? false,\n isSubmitting: defaultState.isSubmitting ?? false,\n isTouched: defaultState.isTouched ?? false,\n isValid: defaultState.isValid ?? false,\n isValidating: defaultState.isValidating ?? false,\n submissionAttempts: defaultState.submissionAttempts ?? 0,\n validationMetaMap: defaultState.validationMetaMap ?? {\n onChange: undefined,\n onBlur: undefined,\n onSubmit: undefined,\n onMount: undefined,\n },\n }\n}\n\nexport class FormApi<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> {\n options: FormOptions<TFormData, TFormValidator> = {}\n store!: Store<FormState<TFormData>>\n // Do not use __state directly, as it is not reactive.\n // Please use form.useStore() utility to subscribe to state\n state!: FormState<TFormData>\n // // This carries the context for nested fields\n fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData, TFormValidator>> =\n {} as any\n\n constructor(opts?: FormOptions<TFormData, TFormValidator>) {\n this.store = new Store<FormState<TFormData>>(\n getDefaultFormState({\n ...(opts?.defaultState as any),\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n }),\n {\n onUpdate: () => {\n let { state } = this.store\n // Computed state\n const fieldMetaValues = Object.values(state.fieldMeta) as (\n | FieldMeta\n | undefined\n )[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field?.isValidating,\n )\n\n const isFieldsValid = !fieldMetaValues.some(\n (field) =>\n field?.errorMap &&\n isNonEmptyArray(Object.values(field.errorMap).filter(Boolean)),\n )\n\n const isTouched = fieldMetaValues.some((field) => field?.isTouched)\n\n const isValidating = isFieldsValidating || state.isFormValidating\n state.errors = Object.values(state.errorMap).filter(\n (val: unknown) => val !== undefined,\n )\n const isFormValid = state.errors.length === 0\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (state.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !state.isSubmitting && isValid)\n\n state = {\n ...state,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n this.store.state = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n\n this.update(opts || {})\n }\n\n runValidator<\n TValue extends { value: TFormData; formApi: FormApi<any, any> },\n TType extends 'validate' | 'validateAsync',\n >(props: {\n validate: TType extends 'validate'\n ? FormValidateOrFn<TFormData, TFormValidator>\n : FormAsyncValidateOrFn<TFormData, TFormValidator>\n value: TValue\n type: TType\n }): ReturnType<ReturnType<Validator<any>>[TType]> {\n const adapter = this.options.validatorAdapter\n if (adapter && typeof props.validate !== 'function') {\n return adapter()[props.type](props.value, props.validate) as never\n }\n\n return (props.validate as FormValidateFn<any, any>)(props.value) as never\n }\n\n mount = () => {\n const { onMount } = this.options.validators || {}\n if (!onMount) return\n const error = this.runValidator({\n validate: onMount,\n value: {\n value: this.state.values,\n formApi: this,\n },\n type: 'validate',\n })\n if (error) {\n this.store.setState((prev) => ({\n ...prev,\n errorMap: { ...prev.errorMap, onMount: error },\n }))\n }\n }\n\n update = (options?: FormOptions<TFormData, TFormValidator>) => {\n if (!options) return\n\n this.store.batch(() => {\n const shouldUpdateValues =\n options.defaultValues &&\n options.defaultValues !== this.options.defaultValues &&\n !this.state.isTouched\n\n const shouldUpdateState =\n options.defaultState !== this.options.defaultState &&\n !this.state.isTouched\n\n this.store.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n this.state as any,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateState ? options.defaultState : {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() =>\n getDefaultFormState({\n ...(this.options.defaultState as any),\n values: this.options.defaultValues ?? this.options.defaultState?.values,\n }),\n )\n\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError[]>[] = [] as any\n this.store.batch(() => {\n void (\n Object.values(this.fieldInfo) as FieldInfo<any, TFormValidator>[]\n ).forEach((field) => {\n Object.values(field.instances).forEach((instance) => {\n // Validate the field\n fieldValidationPromises.push(\n Promise.resolve().then(() => instance.validate(cause)),\n )\n // If any fields are not touched\n if (!instance.state.meta.isTouched) {\n // Mark them as touched\n instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n })\n })\n })\n\n const fieldErrorMapMap = await Promise.all(fieldValidationPromises)\n return fieldErrorMapMap.flat()\n }\n\n // TODO: This code is copied from FieldApi, we should refactor to share\n validateSync = (cause: ValidationCause) => {\n const validates = getSyncValidatorArray(cause, this.options)\n let hasErrored = false as boolean\n\n this.store.batch(() => {\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n\n const error = normalizeError(\n this.runValidator({\n validate: validateObj.validate,\n value: {\n value: this.state.values,\n formApi: this,\n },\n type: 'validate',\n }),\n )\n const errorMapKey = getErrorMapKey(validateObj.cause)\n if (this.state.errorMap[errorMapKey] !== error) {\n this.store.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: error,\n },\n }))\n }\n if (error) {\n hasErrored = true\n }\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 if (\n this.state.errorMap[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.store.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n return { hasErrored }\n }\n\n validateAsync = async (\n cause: ValidationCause,\n ): Promise<ValidationError[]> => {\n const validates = getAsyncValidatorArray(cause, this.options)\n\n if (!this.state.isFormValidating) {\n this.store.setState((prev) => ({ ...prev, isFormValidating: 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 promises: Promise<ValidationError | undefined>[] = []\n\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n const key = getErrorMapKey(validateObj.cause)\n const fieldValidatorMeta = this.state.validationMetaMap[key]\n\n fieldValidatorMeta?.lastAbortController.abort()\n // Sorry Safari 12\n // eslint-disable-next-line compat/compat\n const controller = new AbortController()\n\n this.state.validationMetaMap[key] = {\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 setTimeout(() => {\n if (controller.signal.aborted) return rawResolve(undefined)\n this.runValidator({\n validate: validateObj.validate!,\n value: {\n value: this.state.values,\n formApi: this,\n signal: controller.signal,\n },\n type: 'validateAsync',\n })\n .then(rawResolve)\n .catch(rawReject)\n }, validateObj.debounceMs)\n })\n } catch (e: unknown) {\n rawError = e as ValidationError\n }\n const error = normalizeError(rawError)\n this.store.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [getErrorMapKey(cause)]: error,\n },\n }))\n\n resolve(error)\n }),\n )\n }\n\n let results: ValidationError[] = []\n if (promises.length) {\n results = await Promise.all(promises)\n }\n\n this.store.setState((prev) => ({\n ...prev,\n isFormValidating: false,\n }))\n\n return results.filter(Boolean)\n }\n\n validate = (\n cause: ValidationCause,\n ): ValidationError[] | Promise<ValidationError[]> => {\n // Attempt to sync validate first\n const { hasErrored } = this.validateSync(cause)\n\n if (hasErrored && !this.options.asyncAlways) {\n return this.state.errors\n }\n\n // No error? Attempt async validation\n return this.validateAsync(cause)\n }\n\n handleSubmit = async () => {\n // Check to see that the form and all fields have been touched\n // If they have not, touch them all and run validation\n // Run form validation\n // Submit the form\n\n this.store.setState((old) => ({\n ...old,\n // Submission attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n }))\n\n // Don't let invalid forms submit\n if (!this.state.canSubmit) return\n\n this.store.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.store.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n // Validate all fields\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onSubmitInvalid?.({\n value: this.state.values,\n formApi: this,\n })\n return\n }\n\n // Run validation for the form\n await this.validate('submit')\n\n if (!this.state.isValid) {\n done()\n this.options.onSubmitInvalid?.({\n value: this.state.values,\n formApi: this,\n })\n return\n }\n\n try {\n // Run the submit code\n await this.options.onSubmit?.({ value: this.state.values, formApi: this })\n\n this.store.batch(() => {\n this.store.setState((prev) => ({ ...prev, isSubmitted: true }))\n done()\n })\n } catch (err) {\n done()\n throw err\n }\n }\n\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldMeta | undefined => {\n return this.state.fieldMeta[field]\n }\n\n getFieldInfo = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldInfo<TFormData, TFormValidator> => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (this.fieldInfo[field] ||= {\n instances: {},\n validationMetaMap: {\n onChange: undefined,\n onBlur: undefined,\n onSubmit: undefined,\n onMount: undefined,\n },\n })\n }\n\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<FieldMeta>,\n ) => {\n this.store.setState((prev) => {\n return {\n ...prev,\n fieldMeta: {\n ...prev.fieldMeta,\n [field]: functionalUpdate(updater, prev.fieldMeta[field]),\n },\n }\n })\n }\n\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: { touch?: boolean },\n ) => {\n const touch = opts?.touch\n\n this.store.batch(() => {\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n }\n\n deleteField = <TField extends DeepKeys<TFormData>>(field: TField) => {\n this.store.setState((prev) => {\n const newState = { ...prev }\n newState.values = deleteBy(newState.values, field)\n delete newState.fieldMeta[field]\n\n return newState\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField> extends any[]\n ? DeepValue<TFormData, TField>[number]\n : never,\n opts?: { touch?: boolean },\n ) => {\n return this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n opts,\n )\n }\n\n insertFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField> extends any[]\n ? DeepValue<TFormData, TField>[number]\n : never,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n opts,\n )\n }\n\n removeFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n opts,\n )\n }\n\n swapFieldValues = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n this.setFieldValue(field, (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\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\nfunction getErrorMapKey(cause: ValidationCause) {\n switch (cause) {\n case 'submit':\n return 'onSubmit'\n case 'change':\n return 'onChange'\n case 'blur':\n return 'onBlur'\n case 'mount':\n return 'onMount'\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
-
17
- // src/index.ts
18
- var src_exports = {};
19
- module.exports = __toCommonJS(src_exports);
20
- __reExport(src_exports, require("./FormApi.cjs"), module.exports);
21
- __reExport(src_exports, require("./FieldApi.cjs"), module.exports);
22
- __reExport(src_exports, require("./utils.cjs"), module.exports);
23
- __reExport(src_exports, require("./types.cjs"), module.exports);
24
- // Annotate the CommonJS export names for ESM import in node:
25
- 0 && (module.exports = {
26
- ...require("./FormApi.cjs"),
27
- ...require("./FieldApi.cjs"),
28
- ...require("./utils.cjs"),
29
- ...require("./types.cjs")
30
- });
31
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './FormApi'\nexport * from './FieldApi'\nexport * from './utils'\nexport * from './types'\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,0BAAd;AACA,wBAAc,2BADd;AAEA,wBAAc,wBAFd;AAGA,wBAAc,wBAHd;","names":[]}