@tanstack/form-core 0.10.3 → 0.12.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.
- package/dist/cjs/FieldApi.d.ts +95 -0
- package/dist/cjs/FormApi.d.ts +118 -0
- package/dist/cjs/index.cjs +926 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +5 -0
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.js +926 -0
- package/dist/cjs/mergeForm.d.ts +4 -0
- package/dist/cjs/tests/FieldApi.spec.d.ts +1 -0
- package/dist/cjs/tests/FieldApi.test-d.d.ts +1 -0
- package/dist/cjs/tests/FormApi.spec.d.ts +1 -0
- package/dist/cjs/tests/mutateMergeDeep.spec.d.ts +1 -0
- package/dist/cjs/tests/utils.d.ts +1 -0
- package/dist/cjs/tests/utils.spec.d.ts +1 -0
- package/dist/cjs/types.d.ts +14 -0
- package/dist/cjs/utils.d.ts +57 -0
- package/dist/mjs/FieldApi.d.ts +95 -0
- package/dist/mjs/FormApi.d.ts +118 -0
- package/dist/mjs/index.d.mts +5 -0
- package/dist/mjs/index.d.ts +5 -0
- package/dist/mjs/index.js +926 -0
- package/dist/mjs/index.mjs +926 -0
- package/dist/mjs/index.mjs.map +1 -0
- package/dist/mjs/mergeForm.d.ts +4 -0
- package/dist/mjs/tests/FieldApi.spec.d.ts +1 -0
- package/dist/mjs/tests/FieldApi.test-d.d.ts +1 -0
- package/dist/mjs/tests/FormApi.spec.d.ts +1 -0
- package/dist/mjs/tests/mutateMergeDeep.spec.d.ts +1 -0
- package/dist/mjs/tests/utils.d.ts +1 -0
- package/dist/mjs/tests/utils.spec.d.ts +1 -0
- package/dist/mjs/types.d.ts +14 -0
- package/dist/mjs/utils.d.ts +57 -0
- package/package.json +16 -21
- package/src/FieldApi.ts +328 -236
- package/src/FormApi.ts +302 -216
- package/src/index.ts +1 -0
- package/src/mergeForm.ts +42 -0
- package/src/tests/FieldApi.spec.ts +135 -48
- package/src/tests/FieldApi.test-d.ts +10 -6
- package/src/tests/FormApi.spec.ts +171 -62
- package/src/tests/mutateMergeDeep.spec.ts +32 -0
- package/src/tests/utils.ts +1 -1
- package/src/types.ts +11 -2
- package/src/utils.ts +137 -14
- package/build/legacy/FieldApi.cjs +0 -340
- package/build/legacy/FieldApi.cjs.map +0 -1
- package/build/legacy/FieldApi.d.cts +0 -4
- package/build/legacy/FieldApi.d.ts +0 -4
- package/build/legacy/FieldApi.js +0 -315
- package/build/legacy/FieldApi.js.map +0 -1
- package/build/legacy/FormApi.cjs +0 -438
- package/build/legacy/FormApi.cjs.map +0 -1
- package/build/legacy/FormApi.d.cts +0 -4
- package/build/legacy/FormApi.d.ts +0 -4
- package/build/legacy/FormApi.js +0 -419
- package/build/legacy/FormApi.js.map +0 -1
- package/build/legacy/index.cjs +0 -31
- package/build/legacy/index.cjs.map +0 -1
- package/build/legacy/index.d.cts +0 -170
- package/build/legacy/index.d.ts +0 -170
- package/build/legacy/index.js +0 -6
- package/build/legacy/index.js.map +0 -1
- package/build/legacy/types.cjs +0 -19
- package/build/legacy/types.cjs.map +0 -1
- package/build/legacy/types.d.cts +0 -7
- package/build/legacy/types.d.ts +0 -7
- package/build/legacy/types.js +0 -1
- package/build/legacy/types.js.map +0 -1
- package/build/legacy/utils.cjs +0 -132
- package/build/legacy/utils.cjs.map +0 -1
- package/build/legacy/utils.d.cts +0 -37
- package/build/legacy/utils.d.ts +0 -37
- package/build/legacy/utils.js +0 -103
- package/build/legacy/utils.js.map +0 -1
- package/build/modern/FieldApi.cjs +0 -337
- package/build/modern/FieldApi.cjs.map +0 -1
- package/build/modern/FieldApi.d.cts +0 -4
- package/build/modern/FieldApi.d.ts +0 -4
- package/build/modern/FieldApi.js +0 -312
- package/build/modern/FieldApi.js.map +0 -1
- package/build/modern/FormApi.cjs +0 -431
- package/build/modern/FormApi.cjs.map +0 -1
- package/build/modern/FormApi.d.cts +0 -4
- package/build/modern/FormApi.d.ts +0 -4
- package/build/modern/FormApi.js +0 -412
- package/build/modern/FormApi.js.map +0 -1
- package/build/modern/index.cjs +0 -31
- package/build/modern/index.cjs.map +0 -1
- package/build/modern/index.d.cts +0 -170
- package/build/modern/index.d.ts +0 -170
- package/build/modern/index.js +0 -6
- package/build/modern/index.js.map +0 -1
- package/build/modern/types.cjs +0 -19
- package/build/modern/types.cjs.map +0 -1
- package/build/modern/types.d.cts +0 -7
- package/build/modern/types.d.ts +0 -7
- package/build/modern/types.js +0 -1
- package/build/modern/types.js.map +0 -1
- package/build/modern/utils.cjs +0 -132
- package/build/modern/utils.cjs.map +0 -1
- package/build/modern/utils.d.cts +0 -37
- package/build/modern/utils.d.ts +0 -37
- package/build/modern/utils.js +0 -103
- package/build/modern/utils.js.map +0 -1
package/build/legacy/FieldApi.js
DELETED
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
// src/FieldApi.ts
|
|
2
|
-
import { Store } from "@tanstack/store";
|
|
3
|
-
var uid = 0;
|
|
4
|
-
var FieldApi = class _FieldApi {
|
|
5
|
-
constructor(opts) {
|
|
6
|
-
this.options = {};
|
|
7
|
-
this.mount = () => {
|
|
8
|
-
var _a, _b;
|
|
9
|
-
const info = this.getInfo();
|
|
10
|
-
info.instances[this.uid] = this;
|
|
11
|
-
const unsubscribe = this.form.store.subscribe(() => {
|
|
12
|
-
this.store.batch(() => {
|
|
13
|
-
const nextValue = this.getValue();
|
|
14
|
-
const nextMeta = this.getMeta();
|
|
15
|
-
if (nextValue !== this.state.value) {
|
|
16
|
-
this.store.setState((prev) => ({ ...prev, value: nextValue }));
|
|
17
|
-
}
|
|
18
|
-
if (nextMeta !== this.state.meta) {
|
|
19
|
-
this.store.setState((prev) => ({ ...prev, meta: nextMeta }));
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
this.update(this.options);
|
|
24
|
-
(_b = (_a = this.options).onMount) == null ? void 0 : _b.call(_a, this);
|
|
25
|
-
return () => {
|
|
26
|
-
const preserveValue = this.options.preserveValue;
|
|
27
|
-
unsubscribe();
|
|
28
|
-
if (!preserveValue) {
|
|
29
|
-
delete info.instances[this.uid];
|
|
30
|
-
this.form.deleteField(this.name);
|
|
31
|
-
}
|
|
32
|
-
if (!Object.keys(info.instances).length && !preserveValue) {
|
|
33
|
-
delete this.form.fieldInfo[this.name];
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
this.update = (opts) => {
|
|
38
|
-
var _a;
|
|
39
|
-
if (this.state.value === void 0) {
|
|
40
|
-
const formDefault = (_a = opts.form.options.defaultValues) == null ? void 0 : _a[opts.name];
|
|
41
|
-
if (opts.defaultValue !== void 0) {
|
|
42
|
-
this.setValue(opts.defaultValue);
|
|
43
|
-
} else if (formDefault !== void 0) {
|
|
44
|
-
this.setValue(formDefault);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (this._getMeta() === void 0) {
|
|
48
|
-
this.setMeta(this.state.meta);
|
|
49
|
-
}
|
|
50
|
-
this.options = opts;
|
|
51
|
-
};
|
|
52
|
-
this.getValue = () => {
|
|
53
|
-
return this.form.getFieldValue(this.name);
|
|
54
|
-
};
|
|
55
|
-
this.setValue = (updater, options) => {
|
|
56
|
-
this.form.setFieldValue(this.name, updater, options);
|
|
57
|
-
this.validate("change", this.state.value);
|
|
58
|
-
};
|
|
59
|
-
this._getMeta = () => this.form.getFieldMeta(this.name);
|
|
60
|
-
this.getMeta = () => this._getMeta() ?? {
|
|
61
|
-
isValidating: false,
|
|
62
|
-
isTouched: false,
|
|
63
|
-
touchedErrors: [],
|
|
64
|
-
errors: [],
|
|
65
|
-
errorMap: {},
|
|
66
|
-
...this.options.defaultMeta
|
|
67
|
-
};
|
|
68
|
-
this.setMeta = (updater) => this.form.setFieldMeta(this.name, updater);
|
|
69
|
-
this.getInfo = () => this.form.getFieldInfo(this.name);
|
|
70
|
-
this.pushValue = (value) => this.form.pushFieldValue(this.name, value);
|
|
71
|
-
this.insertValue = (index, value) => this.form.insertFieldValue(this.name, index, value);
|
|
72
|
-
this.removeValue = (index) => this.form.removeFieldValue(this.name, index);
|
|
73
|
-
this.swapValues = (aIndex, bIndex) => this.form.swapFieldValues(this.name, aIndex, bIndex);
|
|
74
|
-
this.getSubField = (name) => new _FieldApi({
|
|
75
|
-
name: `${this.name}.${name}`,
|
|
76
|
-
form: this.form
|
|
77
|
-
});
|
|
78
|
-
this.validateSync = (value = this.state.value, cause) => {
|
|
79
|
-
const { onChange, onBlur, onSubmit } = this.options;
|
|
80
|
-
const validates = (
|
|
81
|
-
// https://github.com/TanStack/form/issues/490
|
|
82
|
-
cause === "submit" ? [
|
|
83
|
-
{ cause: "change", validate: onChange },
|
|
84
|
-
{ cause: "blur", validate: onBlur },
|
|
85
|
-
{ cause: "submit", validate: onSubmit }
|
|
86
|
-
] : cause === "change" ? [{ cause: "change", validate: onChange }] : [{ cause: "blur", validate: onBlur }]
|
|
87
|
-
);
|
|
88
|
-
const validationCount = (this.getInfo().validationCount || 0) + 1;
|
|
89
|
-
this.getInfo().validationCount = validationCount;
|
|
90
|
-
const doValidate = (validate) => {
|
|
91
|
-
if (this.options.validator && typeof validate !== "function") {
|
|
92
|
-
return this.options.validator().validate(
|
|
93
|
-
value,
|
|
94
|
-
validate
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
if (this.form.options.validator && typeof validate !== "function") {
|
|
98
|
-
return this.form.options.validator().validate(
|
|
99
|
-
value,
|
|
100
|
-
validate
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
return validate(
|
|
104
|
-
value,
|
|
105
|
-
this
|
|
106
|
-
);
|
|
107
|
-
};
|
|
108
|
-
let hasErrored = false;
|
|
109
|
-
this.form.store.batch(() => {
|
|
110
|
-
for (const validateObj of validates) {
|
|
111
|
-
if (!validateObj.validate)
|
|
112
|
-
continue;
|
|
113
|
-
const error = normalizeError(doValidate(validateObj.validate));
|
|
114
|
-
const errorMapKey = getErrorMapKey(validateObj.cause);
|
|
115
|
-
if (this.state.meta.errorMap[errorMapKey] !== error) {
|
|
116
|
-
this.setMeta((prev) => ({
|
|
117
|
-
...prev,
|
|
118
|
-
errorMap: {
|
|
119
|
-
...prev.errorMap,
|
|
120
|
-
[getErrorMapKey(validateObj.cause)]: error
|
|
121
|
-
}
|
|
122
|
-
}));
|
|
123
|
-
}
|
|
124
|
-
if (error) {
|
|
125
|
-
hasErrored = true;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
const submitErrKey = getErrorMapKey("submit");
|
|
130
|
-
if (this.state.meta.errorMap[submitErrKey] && cause !== "submit" && !hasErrored) {
|
|
131
|
-
this.setMeta((prev) => ({
|
|
132
|
-
...prev,
|
|
133
|
-
errorMap: {
|
|
134
|
-
...prev.errorMap,
|
|
135
|
-
[submitErrKey]: void 0
|
|
136
|
-
}
|
|
137
|
-
}));
|
|
138
|
-
}
|
|
139
|
-
if (hasErrored) {
|
|
140
|
-
this.cancelValidateAsync();
|
|
141
|
-
}
|
|
142
|
-
return { hasErrored };
|
|
143
|
-
};
|
|
144
|
-
this.__leaseValidateAsync = () => {
|
|
145
|
-
const count = (this.getInfo().validationAsyncCount || 0) + 1;
|
|
146
|
-
this.getInfo().validationAsyncCount = count;
|
|
147
|
-
return count;
|
|
148
|
-
};
|
|
149
|
-
this.cancelValidateAsync = () => {
|
|
150
|
-
this.__leaseValidateAsync();
|
|
151
|
-
this.setMeta((prev) => ({
|
|
152
|
-
...prev,
|
|
153
|
-
isValidating: false
|
|
154
|
-
}));
|
|
155
|
-
};
|
|
156
|
-
this.validateAsync = async (value = this.state.value, cause) => {
|
|
157
|
-
var _a, _b, _c, _d;
|
|
158
|
-
const {
|
|
159
|
-
onChangeAsync,
|
|
160
|
-
onBlurAsync,
|
|
161
|
-
onSubmitAsync,
|
|
162
|
-
asyncDebounceMs,
|
|
163
|
-
onBlurAsyncDebounceMs,
|
|
164
|
-
onChangeAsyncDebounceMs
|
|
165
|
-
} = this.options;
|
|
166
|
-
const validate = cause === "change" ? onChangeAsync : cause === "submit" ? onSubmitAsync : onBlurAsync;
|
|
167
|
-
if (!validate)
|
|
168
|
-
return [];
|
|
169
|
-
const debounceMs = cause === "submit" ? 0 : (cause === "change" ? onChangeAsyncDebounceMs : onBlurAsyncDebounceMs) ?? asyncDebounceMs ?? 0;
|
|
170
|
-
if (this.state.meta.isValidating !== true) {
|
|
171
|
-
this.setMeta((prev) => ({ ...prev, isValidating: true }));
|
|
172
|
-
}
|
|
173
|
-
const validationAsyncCount = this.__leaseValidateAsync();
|
|
174
|
-
const checkLatest = () => validationAsyncCount === this.getInfo().validationAsyncCount;
|
|
175
|
-
if (!this.getInfo().validationPromise) {
|
|
176
|
-
this.getInfo().validationPromise = new Promise((resolve, reject) => {
|
|
177
|
-
this.getInfo().validationResolve = resolve;
|
|
178
|
-
this.getInfo().validationReject = reject;
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
if (debounceMs > 0) {
|
|
182
|
-
await new Promise((r) => setTimeout(r, debounceMs));
|
|
183
|
-
}
|
|
184
|
-
const doValidate = () => {
|
|
185
|
-
if (this.options.validator && typeof validate !== "function") {
|
|
186
|
-
return this.options.validator().validateAsync(
|
|
187
|
-
value,
|
|
188
|
-
validate
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
if (this.form.options.validator && typeof validate !== "function") {
|
|
192
|
-
return this.form.options.validator().validateAsync(value, validate);
|
|
193
|
-
}
|
|
194
|
-
return validate(
|
|
195
|
-
value,
|
|
196
|
-
this
|
|
197
|
-
);
|
|
198
|
-
};
|
|
199
|
-
if (checkLatest()) {
|
|
200
|
-
const prevErrors = this.getMeta().errors;
|
|
201
|
-
try {
|
|
202
|
-
const rawError = await doValidate();
|
|
203
|
-
if (checkLatest()) {
|
|
204
|
-
const error = normalizeError(rawError);
|
|
205
|
-
this.setMeta((prev) => ({
|
|
206
|
-
...prev,
|
|
207
|
-
isValidating: false,
|
|
208
|
-
errorMap: {
|
|
209
|
-
...prev.errorMap,
|
|
210
|
-
[getErrorMapKey(cause)]: error
|
|
211
|
-
}
|
|
212
|
-
}));
|
|
213
|
-
(_b = (_a = this.getInfo()).validationResolve) == null ? void 0 : _b.call(_a, [...prevErrors, error]);
|
|
214
|
-
}
|
|
215
|
-
} catch (error) {
|
|
216
|
-
if (checkLatest()) {
|
|
217
|
-
(_d = (_c = this.getInfo()).validationReject) == null ? void 0 : _d.call(_c, [...prevErrors, error]);
|
|
218
|
-
throw error;
|
|
219
|
-
}
|
|
220
|
-
} finally {
|
|
221
|
-
if (checkLatest()) {
|
|
222
|
-
this.setMeta((prev) => ({ ...prev, isValidating: false }));
|
|
223
|
-
delete this.getInfo().validationPromise;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return await this.getInfo().validationPromise ?? [];
|
|
228
|
-
};
|
|
229
|
-
this.validate = (cause, value) => {
|
|
230
|
-
if (!this.state.meta.isTouched)
|
|
231
|
-
return [];
|
|
232
|
-
try {
|
|
233
|
-
this.form.validate(cause);
|
|
234
|
-
} catch (_) {
|
|
235
|
-
}
|
|
236
|
-
const { hasErrored } = this.validateSync(value, cause);
|
|
237
|
-
if (hasErrored) {
|
|
238
|
-
if (!this.options.asyncAlways) {
|
|
239
|
-
return this.state.meta.errors;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
return this.validateAsync(value, cause);
|
|
243
|
-
};
|
|
244
|
-
this.handleChange = (updater) => {
|
|
245
|
-
this.setValue(updater, { touch: true });
|
|
246
|
-
};
|
|
247
|
-
this.handleBlur = () => {
|
|
248
|
-
const prevTouched = this.state.meta.isTouched;
|
|
249
|
-
if (!prevTouched) {
|
|
250
|
-
this.setMeta((prev) => ({ ...prev, isTouched: true }));
|
|
251
|
-
this.validate("change");
|
|
252
|
-
}
|
|
253
|
-
this.validate("blur");
|
|
254
|
-
};
|
|
255
|
-
this.form = opts.form;
|
|
256
|
-
this.uid = uid++;
|
|
257
|
-
this.name = opts.name;
|
|
258
|
-
if (opts.defaultValue !== void 0) {
|
|
259
|
-
this.form.setFieldValue(this.name, opts.defaultValue);
|
|
260
|
-
}
|
|
261
|
-
this.store = new Store(
|
|
262
|
-
{
|
|
263
|
-
value: this.getValue(),
|
|
264
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
265
|
-
meta: this._getMeta() ?? {
|
|
266
|
-
isValidating: false,
|
|
267
|
-
isTouched: false,
|
|
268
|
-
touchedErrors: [],
|
|
269
|
-
errors: [],
|
|
270
|
-
errorMap: {},
|
|
271
|
-
...opts.defaultMeta
|
|
272
|
-
}
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
onUpdate: () => {
|
|
276
|
-
const state = this.store.state;
|
|
277
|
-
state.meta.errors = Object.values(state.meta.errorMap).filter(
|
|
278
|
-
(val) => val !== void 0
|
|
279
|
-
);
|
|
280
|
-
state.meta.touchedErrors = state.meta.isTouched ? state.meta.errors : [];
|
|
281
|
-
this.prevState = state;
|
|
282
|
-
this.state = state;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
);
|
|
286
|
-
this.state = this.store.state;
|
|
287
|
-
this.prevState = this.state;
|
|
288
|
-
this.options = opts;
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
function normalizeError(rawError) {
|
|
292
|
-
if (rawError) {
|
|
293
|
-
if (typeof rawError !== "string") {
|
|
294
|
-
return "Invalid Form Values";
|
|
295
|
-
}
|
|
296
|
-
return rawError;
|
|
297
|
-
}
|
|
298
|
-
return void 0;
|
|
299
|
-
}
|
|
300
|
-
function getErrorMapKey(cause) {
|
|
301
|
-
switch (cause) {
|
|
302
|
-
case "submit":
|
|
303
|
-
return "onSubmit";
|
|
304
|
-
case "change":
|
|
305
|
-
return "onChange";
|
|
306
|
-
case "blur":
|
|
307
|
-
return "onBlur";
|
|
308
|
-
case "mount":
|
|
309
|
-
return "onMount";
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
export {
|
|
313
|
-
FieldApi
|
|
314
|
-
};
|
|
315
|
-
//# sourceMappingURL=FieldApi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/FieldApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\nimport type { FormApi, ValidationErrorMap } from './FormApi'\nimport type { ValidationError, Validator } from './types'\nimport type { DeepKeys, DeepValue, Updater } from './utils'\n\nexport type ValidationCause = 'change' | 'blur' | 'submit' | 'mount'\n\ntype ValidateFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (\n value: TData,\n fieldApi: FieldApi<TParentData, TName, ValidatorType, TData>,\n) => ValidationError\n\ntype ValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n FormValidator,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = ValidatorType extends Validator<TData>\n ?\n | Parameters<ReturnType<ValidatorType>['validate']>[1]\n | ValidateFn<TParentData, TName, ValidatorType, TData>\n : FormValidator extends Validator<TData>\n ?\n | Parameters<ReturnType<FormValidator>['validate']>[1]\n | ValidateFn<TParentData, TName, ValidatorType, TData>\n : ValidateFn<TParentData, TName, ValidatorType, TData>\n\ntype ValidateAsyncFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (\n value: TData,\n fieldApi: FieldApi<TParentData, TName, ValidatorType, TData>,\n) => ValidationError | Promise<ValidationError>\n\ntype AsyncValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n FormValidator,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = ValidatorType extends Validator<TData>\n ?\n | Parameters<ReturnType<ValidatorType>['validate']>[1]\n | ValidateAsyncFn<TParentData, TName, ValidatorType, TData>\n : FormValidator extends Validator<TData>\n ?\n | Parameters<ReturnType<FormValidator>['validate']>[1]\n | ValidateAsyncFn<TParentData, TName, ValidatorType, TData>\n : ValidateAsyncFn<TParentData, TName, ValidatorType, TData>\n\nexport interface FieldOptions<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n FormValidator,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n name: TName\n index?: TData extends any[] ? number : never\n defaultValue?: TData\n asyncDebounceMs?: number\n asyncAlways?: boolean\n preserveValue?: boolean\n validator?: ValidatorType\n onMount?: (\n formApi: FieldApi<TParentData, TName, ValidatorType, TData>,\n ) => void\n onChange?: ValidateOrFn<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n >\n onChangeAsync?: AsyncValidateOrFn<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n >\n onChangeAsyncDebounceMs?: number\n onBlur?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>\n onBlurAsync?: AsyncValidateOrFn<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n >\n onBlurAsyncDebounceMs?: number\n onSubmit?: ValidateOrFn<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n >\n onSubmitAsync?: AsyncValidateOrFn<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n >\n defaultMeta?: Partial<FieldMeta>\n}\n\nexport interface FieldApiOptions<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n FormValidator,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> extends FieldOptions<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n > {\n form: FormApi<TParentData, FormValidator>\n}\n\nexport type FieldMeta = {\n isTouched: boolean\n touchedErrors: ValidationError[]\n errors: ValidationError[]\n errorMap: ValidationErrorMap\n isValidating: boolean\n}\n\nlet uid = 0\n\nexport type FieldState<TData> = {\n value: TData\n meta: FieldMeta\n}\n\nexport type ResolveName<TParentData> = unknown extends TParentData\n ? string\n : DeepKeys<TParentData>\n\nexport class FieldApi<\n TParentData,\n TName extends DeepKeys<TParentData>,\n ValidatorType,\n FormValidator,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n uid: number\n form: FieldApiOptions<TParentData, TName, ValidatorType, TData>['form']\n name!: DeepKeys<TParentData>\n options: FieldApiOptions<TParentData, TName, ValidatorType, TData> = {} as any\n store!: Store<FieldState<TData>>\n state!: FieldState<TData>\n prevState!: FieldState<TData>\n\n constructor(\n opts: FieldApiOptions<\n TParentData,\n TName,\n ValidatorType,\n FormValidator,\n TData\n >,\n ) {\n this.form = opts.form as never\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 never\n\n if (opts.defaultValue !== undefined) {\n this.form.setFieldValue(this.name, opts.defaultValue as never)\n }\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 touchedErrors: [],\n errors: [],\n errorMap: {},\n ...opts.defaultMeta,\n },\n },\n {\n onUpdate: () => {\n const state = this.store.state\n\n state.meta.errors = Object.values(state.meta.errorMap).filter(\n (val: unknown) => val !== undefined,\n )\n\n state.meta.touchedErrors = state.meta.isTouched\n ? state.meta.errors\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.options = opts as never\n }\n\n mount = () => {\n const info = this.getInfo()\n info.instances[this.uid] = this as never\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.update(this.options as never)\n this.options.onMount?.(this as never)\n\n return () => {\n const preserveValue = this.options.preserveValue\n unsubscribe()\n if (!preserveValue) {\n delete info.instances[this.uid]\n this.form.deleteField(this.name)\n }\n\n if (!Object.keys(info.instances).length && !preserveValue) {\n delete this.form.fieldInfo[this.name]\n }\n }\n }\n\n update = (\n opts: FieldApiOptions<TParentData, TName, ValidatorType, TData>,\n ) => {\n // Default Value\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.state.value === undefined) {\n const formDefault =\n opts.form.options.defaultValues?.[opts.name as keyof TParentData]\n\n if (opts.defaultValue !== undefined) {\n this.setValue(opts.defaultValue as never)\n } else if (formDefault !== undefined) {\n this.setValue(formDefault as never)\n }\n }\n\n // Default Meta\n if (this._getMeta() === undefined) {\n this.setMeta(this.state.meta)\n }\n\n this.options = opts as never\n }\n\n getValue = (): TData => {\n return this.form.getFieldValue(this.name) as any\n }\n\n setValue = (\n updater: Updater<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 = () => this.form.getFieldMeta(this.name)\n getMeta = () =>\n this._getMeta() ??\n ({\n isValidating: false,\n isTouched: false,\n touchedErrors: [],\n errors: [],\n errorMap: {},\n ...this.options.defaultMeta,\n } as FieldMeta)\n\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\n insertValue = (\n index: number,\n value: TData extends any[] ? TData[number] : 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 = <\n TSubName extends DeepKeys<TData>,\n TSubData extends DeepValue<TData, TSubName> = DeepValue<TData, TSubName>,\n >(\n name: TSubName,\n ): FieldApi<TData, TSubName, ValidatorType, TSubData> =>\n new FieldApi({\n name: `${this.name}.${name}` as never,\n form: this.form,\n }) as any\n\n validateSync = (value = this.state.value, cause: ValidationCause) => {\n const { onChange, onBlur, onSubmit } = this.options\n\n const validates =\n // https://github.com/TanStack/form/issues/490\n cause === 'submit'\n ? ([\n { cause: 'change', validate: onChange },\n { cause: 'blur', validate: onBlur },\n { cause: 'submit', validate: onSubmit },\n ] as const)\n : cause === 'change'\n ? ([{ cause: 'change', validate: onChange }] as const)\n : ([{ cause: 'blur', validate: onBlur }] as const)\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\n const doValidate = (validate: (typeof validates)[number]['validate']) => {\n if (this.options.validator && typeof validate !== 'function') {\n return (this.options.validator as Validator<TData>)().validate(\n value,\n validate,\n )\n }\n\n if (this.form.options.validator && typeof validate !== 'function') {\n return (this.form.options.validator as Validator<TData>)().validate(\n value,\n validate,\n )\n }\n\n return (validate as ValidateFn<TParentData, TName, ValidatorType, TData>)(\n value,\n this as never,\n )\n }\n\n // Needs type cast as eslint errantly believes this is always falsy\n let hasErrored = false as boolean\n\n this.form.store.batch(() => {\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n const error = normalizeError(doValidate(validateObj.validate))\n const errorMapKey = getErrorMapKey(validateObj.cause)\n if (this.state.meta.errorMap[errorMapKey] !== error) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [getErrorMapKey(validateObj.cause)]: 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.meta.errorMap[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n // If a sync error is encountered for the errorMapKey (eg. onChange), cancel any async validation\n if (hasErrored) {\n this.cancelValidateAsync()\n }\n\n return { hasErrored }\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 if (!validate) return []\n const debounceMs =\n cause === 'submit'\n ? 0\n : (cause === 'change'\n ? onChangeAsyncDebounceMs\n : onBlurAsyncDebounceMs) ??\n asyncDebounceMs ??\n 0\n\n if (this.state.meta.isValidating !== true) {\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\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 const doValidate = () => {\n if (this.options.validator && typeof validate !== 'function') {\n return (this.options.validator as Validator<TData>)().validateAsync(\n value,\n validate,\n )\n }\n\n if (this.form.options.validator && typeof validate !== 'function') {\n return (\n this.form.options.validator as Validator<TData>\n )().validateAsync(value, validate)\n }\n\n return (validate as ValidateFn<TParentData, TName, ValidatorType, TData>)(\n value,\n this as never,\n )\n }\n\n // Only kick off validation if this validation is the latest attempt\n if (checkLatest()) {\n const prevErrors = this.getMeta().errors\n try {\n const rawError = await doValidate()\n if (checkLatest()) {\n const error = normalizeError(rawError)\n this.setMeta((prev) => ({\n ...prev,\n isValidating: false,\n errorMap: {\n ...prev.errorMap,\n [getErrorMapKey(cause)]: error,\n },\n }))\n this.getInfo().validationResolve?.([...prevErrors, error])\n }\n } catch (error) {\n if (checkLatest()) {\n this.getInfo().validationReject?.([...prevErrors, 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 (await 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 try {\n this.form.validate(cause)\n } catch (_) {}\n\n // Attempt to sync validate first\n const { hasErrored } = this.validateSync(value, cause)\n\n if (hasErrored) {\n if (!this.options.asyncAlways) {\n return this.state.meta.errors\n }\n }\n // No error? Attempt async validation\n return this.validateAsync(value, cause)\n }\n\n handleChange = (updater: Updater<TData>) => {\n this.setValue(updater, { touch: true })\n }\n\n handleBlur = () => {\n const prevTouched = this.state.meta.isTouched\n if (!prevTouched) {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n this.validate('change')\n }\n this.validate('blur')\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":[]}
|