@reformer/core 11.0.0-beta.8 → 11.0.0-beta.9
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/README.md +91 -73
- package/dist/behaviors-value-HA_Q03hc.js +108 -0
- package/dist/behaviors.js +370 -242
- package/dist/{create-model-BBRHhHwK.js → create-model-BvcbNPgL.js} +6 -6
- package/dist/date-utils-90-qZbse.js +43 -0
- package/dist/{en-CjAqn7h0.js → en-HP8XEych.js} +6 -3
- package/dist/form/aggregate-signals.d.ts +21 -63
- package/dist/form/behaviors/collections.d.ts +28 -7
- package/dist/form/behaviors/context.d.ts +19 -2
- package/dist/form/behaviors/index.d.ts +3 -3
- package/dist/form/behaviors/internals.d.ts +9 -2
- package/dist/form/behaviors/node.d.ts +25 -2
- package/dist/form/behaviors/operators.d.ts +17 -9
- package/dist/form/behaviors/schema-operators.d.ts +6 -4
- package/dist/form/behaviors/types.d.ts +12 -4
- package/dist/form/create-form.d.ts +47 -35
- package/dist/form/flow/flow.d.ts +87 -0
- package/dist/form/form-bundle.d.ts +45 -28
- package/dist/form/form-config-base.d.ts +46 -0
- package/dist/form/form-level.d.ts +121 -0
- package/dist/form/form-proxy-builder.d.ts +6 -22
- package/dist/form/index.d.ts +16 -21
- package/dist/form/nodes/form-array-node.d.ts +100 -0
- package/dist/form/nodes/form-control-node.d.ts +73 -0
- package/dist/form/nodes/form-group-node.d.ts +66 -0
- package/dist/form/nodes/node-kind.d.ts +29 -0
- package/dist/form/nodes/state/availability.d.ts +6 -0
- package/dist/form/nodes/state/component.d.ts +6 -0
- package/dist/form/nodes/state/index.d.ts +12 -0
- package/dist/form/nodes/state/interaction.d.ts +13 -0
- package/dist/form/nodes/state/issues.d.ts +9 -0
- package/dist/form/nodes/state/pending.d.ts +6 -0
- package/dist/form/schema/compile.d.ts +59 -0
- package/dist/form/schema/compiled.d.ts +143 -0
- package/dist/form/schema/row-key.d.ts +11 -0
- package/dist/form/schema-controller.d.ts +30 -14
- package/dist/form/signal-node-registry.d.ts +6 -7
- package/dist/form/submission.d.ts +93 -0
- package/dist/form/type-guards.d.ts +14 -73
- package/dist/form/types/contracts.d.ts +19 -92
- package/dist/form/types/field-config.d.ts +27 -0
- package/dist/form/types/index.d.ts +5 -57
- package/dist/form/types/nodes.d.ts +159 -0
- package/dist/form/types/schema-node.d.ts +139 -63
- package/dist/form/types/validation-schema.d.ts +23 -27
- package/dist/form/validation/context.d.ts +42 -7
- package/dist/form/validation/index.d.ts +9 -8
- package/dist/form/validation/operators.d.ts +22 -30
- package/dist/form/validation/run.d.ts +93 -18
- package/dist/form/validation/strategy.d.ts +41 -13
- package/dist/form/validation/types.d.ts +74 -20
- package/dist/form/validators/date-utils.d.ts +13 -1
- package/dist/form/validators/email.d.ts +8 -7
- package/dist/form/validators/file-type.d.ts +8 -7
- package/dist/form/validators/file-utils.d.ts +2 -1
- package/dist/form/validators/future-date.d.ts +8 -7
- package/dist/form/validators/index.d.ts +1 -1
- package/dist/form/validators/integer.d.ts +8 -7
- package/dist/form/validators/is-date.d.ts +11 -9
- package/dist/form/validators/is-number.d.ts +11 -9
- package/dist/form/validators/max-age.d.ts +13 -9
- package/dist/form/validators/max-date.d.ts +8 -7
- package/dist/form/validators/max-file-size.d.ts +8 -7
- package/dist/form/validators/max-files.d.ts +8 -7
- package/dist/form/validators/max-length.d.ts +14 -7
- package/dist/form/validators/max-total-file-size.d.ts +8 -7
- package/dist/form/validators/max.d.ts +10 -8
- package/dist/form/validators/min-age.d.ts +12 -9
- package/dist/form/validators/min-date.d.ts +8 -7
- package/dist/form/validators/min-file-size.d.ts +8 -7
- package/dist/form/validators/min-files.d.ts +11 -9
- package/dist/form/validators/min-length.d.ts +14 -7
- package/dist/form/validators/min.d.ts +10 -8
- package/dist/form/validators/multiple-of.d.ts +10 -8
- package/dist/form/validators/non-negative.d.ts +8 -7
- package/dist/form/validators/non-zero.d.ts +8 -7
- package/dist/form/validators/past-date.d.ts +8 -7
- package/dist/form/validators/pattern.d.ts +9 -8
- package/dist/form/validators/phone.d.ts +8 -7
- package/dist/form/validators/required.d.ts +11 -9
- package/dist/form/validators/url.d.ts +20 -13
- package/dist/form/validators/validation-issue.d.ts +8 -0
- package/dist/i18n/descriptor.d.ts +1 -1
- package/dist/i18n/en.json.d.ts +5 -1
- package/dist/i18n/locale-store.d.ts +7 -0
- package/dist/i18n/message-format.d.ts +24 -4
- package/dist/i18n/ru.json.d.ts +5 -1
- package/dist/i18n/translator.d.ts +11 -0
- package/dist/i18n/validation-message.d.ts +42 -7
- package/dist/i18n.d.ts +7 -12
- package/dist/i18n.js +66 -283
- package/dist/index.d.ts +16 -7
- package/dist/index.js +924 -2855
- package/dist/loader-BWkigpVe.js +52 -0
- package/dist/locale/en.js +1 -1
- package/dist/locale/en.json +4 -1
- package/dist/locale/ru.js +4 -1
- package/dist/locale/ru.json +4 -1
- package/dist/locale-CG54AU2Q.js +219 -0
- package/dist/locale.js +1 -1
- package/dist/model/behaviors-value.d.ts +24 -6
- package/dist/model/create-model.d.ts +2 -2
- package/dist/model/derived-registry.d.ts +1 -1
- package/dist/model/index.d.ts +11 -5
- package/dist/model/model-nodes.d.ts +79 -12
- package/dist/model/model-signals-proxy.d.ts +5 -6
- package/dist/model/model-value-proxy.d.ts +20 -15
- package/dist/model/safe-effect.d.ts +33 -1
- package/dist/model/types.d.ts +63 -13
- package/dist/model.js +20 -18
- package/dist/node-kind-C-r6ZMdo.js +15 -0
- package/dist/platforms/react/field-binding/field-adapter.d.ts +1 -1
- package/dist/platforms/react/field-binding/field-handle.d.ts +5 -2
- package/dist/platforms/react/form-bundle-context.d.ts +2 -2
- package/dist/platforms/react/hooks/types.d.ts +57 -38
- package/dist/platforms/react/hooks/use-form-bundle.d.ts +19 -4
- package/dist/platforms/react/hooks/use-form-flow.d.ts +40 -0
- package/dist/platforms/react/hooks/use-form-validation.d.ts +12 -6
- package/dist/platforms/react/hooks/useArrayLength.d.ts +6 -6
- package/dist/platforms/react/hooks/useFormControl.d.ts +7 -9
- package/dist/platforms/react/hooks/useFormControlValue.d.ts +18 -19
- package/dist/platforms/react/hooks/useSignalSubscription.d.ts +9 -1
- package/dist/platforms/react/i18n/context.d.ts +6 -1
- package/dist/platforms/react/i18n/hooks.d.ts +16 -10
- package/dist/platforms/react/i18n/provider.d.ts +9 -2
- package/dist/platforms/react/index.d.ts +6 -4
- package/dist/react.d.ts +22 -0
- package/dist/react.js +505 -0
- package/dist/runtime-token.d.ts +1 -2
- package/dist/safe-effect-BbtX3KuN.js +643 -0
- package/dist/schema-controller-CpiO2JoK.js +143 -0
- package/dist/signals.d.ts +15 -9
- package/dist/signals.js +11 -6
- package/dist/strategy-CoFSemuP.js +375 -0
- package/dist/type-guards-D-N_5Ddh.js +19 -0
- package/dist/validation-issue-B9mjI8jz.js +7 -0
- package/dist/validation-message-Ced9MGxs.js +194 -0
- package/dist/validation.js +9 -9
- package/dist/validators/email.js +5 -5
- package/dist/validators/future-date.js +8 -8
- package/dist/validators/integer.js +3 -3
- package/dist/validators/is-date.js +4 -4
- package/dist/validators/is-number.js +4 -4
- package/dist/validators/max-age.js +8 -9
- package/dist/validators/max-date.js +8 -8
- package/dist/validators/max-length.js +7 -7
- package/dist/validators/max.js +4 -4
- package/dist/validators/min-age.js +10 -8
- package/dist/validators/min-date.js +3 -3
- package/dist/validators/min-length.js +5 -5
- package/dist/validators/min.js +4 -4
- package/dist/validators/multiple-of.js +11 -7
- package/dist/validators/non-negative.js +3 -3
- package/dist/validators/non-zero.js +3 -3
- package/dist/validators/past-date.js +8 -8
- package/dist/validators/pattern.js +5 -5
- package/dist/validators/phone.js +11 -9
- package/dist/validators/required.js +2 -2
- package/dist/validators/url.js +48 -12
- package/dist/validators.js +17 -17
- package/docs/llms/01-api-reference.md +60 -34
- package/docs/llms/02-quick-start.md +111 -80
- package/docs/llms/03-api-signatures.md +368 -153
- package/docs/llms/04-common-patterns.md +58 -56
- package/docs/llms/05-common-mistakes.md +69 -44
- package/docs/llms/06-troubleshooting.md +14 -9
- package/docs/llms/07-complete-import.md +74 -43
- package/docs/llms/08-form-types.md +11 -4
- package/docs/llms/09-formschema.md +129 -81
- package/docs/llms/10-arrays.md +106 -75
- package/docs/llms/11-async-watchfield.md +2 -2
- package/docs/llms/13-multi-step.md +134 -63
- package/docs/llms/14-extended-mistakes.md +20 -17
- package/docs/llms/15-project-structure.md +221 -74
- package/docs/llms/16-ui-components.md +55 -42
- package/docs/llms/17-nonexistent-api.md +199 -32
- package/docs/llms/18-conditional-fields.md +66 -32
- package/docs/llms/19-reading-values.md +15 -3
- package/docs/llms/20-compute-vs-watch.md +16 -10
- package/docs/llms/21-array-operations.md +51 -27
- package/docs/llms/22-cycle-detection.md +1 -1
- package/docs/llms/23-copy-from.md +2 -2
- package/docs/llms/24-sync-fields.md +6 -5
- package/docs/llms/25-reset-when.md +14 -7
- package/docs/llms/26-transform-value.md +4 -4
- package/docs/llms/27-revalidate-when.md +16 -15
- package/docs/llms/28-submit-and-reset.md +276 -128
- package/docs/llms/29-async-preload.md +39 -29
- package/docs/llms/30-type-safety-recipes.md +105 -51
- package/docs/llms/31-async-validator-debounce.md +96 -53
- package/docs/llms/33-validation-strategy.md +177 -65
- package/docs/llms/34-i18n.md +69 -43
- package/docs/llms/35-unified-contract.md +100 -39
- package/docs/llms/36-issue-messages.md +284 -0
- package/docs/llms/37-compiled-schema.md +332 -0
- package/docs/llms/38-form-flow.md +397 -0
- package/llms-index.json +1 -1
- package/llms.txt +6084 -3420
- package/package.json +23 -4
- package/dist/behaviors-value-C7dSEhCc.js +0 -134
- package/dist/date-utils-dTT_x_Be.js +0 -31
- package/dist/form/create-core-form.d.ts +0 -72
- package/dist/form/factories/index.d.ts +0 -6
- package/dist/form/factories/node-factory.d.ts +0 -189
- package/dist/form/form-submitter.d.ts +0 -121
- package/dist/form/nodes/array-node.d.ts +0 -276
- package/dist/form/nodes/field-node.d.ts +0 -297
- package/dist/form/nodes/form-node.d.ts +0 -326
- package/dist/form/nodes/group-node.d.ts +0 -284
- package/dist/form/nodes/model-array-node.d.ts +0 -126
- package/dist/form/nodes/subscription-manager.d.ts +0 -180
- package/dist/form/status-machine.d.ts +0 -115
- package/dist/form/types/deep-schema.d.ts +0 -107
- package/dist/form/types/form-proxy.d.ts +0 -141
- package/dist/form/unique-id.d.ts +0 -45
- package/dist/form/validation/config.d.ts +0 -73
- package/dist/form/validation/error-handler.d.ts +0 -166
- package/dist/form/validators/validation-error.d.ts +0 -8
- package/dist/index-BrNkQj1y.js +0 -105
- package/dist/loader-Dv_Hl7JC.js +0 -216
- package/dist/model-value-proxy-caTmAiUd.js +0 -419
- package/dist/node-BeV_lV5i.js +0 -100
- package/dist/strategy-DgzELWno.js +0 -204
- package/dist/validation-error-B-U3RsV0.js +0 -11
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { signal as v } from "@preact/signals-core";
|
|
2
|
+
const h = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
function y(t) {
|
|
4
|
+
let s = h.get(t);
|
|
5
|
+
return s || (s = { hide: /* @__PURE__ */ new Map(), events: /* @__PURE__ */ new Map(), hooks: /* @__PURE__ */ new Map() }, h.set(t, s)), s;
|
|
6
|
+
}
|
|
7
|
+
function a(t, s) {
|
|
8
|
+
const e = t.lastIndexOf(s);
|
|
9
|
+
return e !== -1 && t.splice(e, 1), t.length === 0;
|
|
10
|
+
}
|
|
11
|
+
function R() {
|
|
12
|
+
const t = /* @__PURE__ */ new Map();
|
|
13
|
+
return {
|
|
14
|
+
hiddenOverrides: /* @__PURE__ */ new Map(),
|
|
15
|
+
propsOverrides: /* @__PURE__ */ new Map(),
|
|
16
|
+
refRegistry: /* @__PURE__ */ new Map(),
|
|
17
|
+
conditionRegistry: /* @__PURE__ */ new Map(),
|
|
18
|
+
effectRegistry: [],
|
|
19
|
+
callbackRegistry: /* @__PURE__ */ new Map(),
|
|
20
|
+
lifecycleRegistry: /* @__PURE__ */ new Map(),
|
|
21
|
+
version: v(0),
|
|
22
|
+
versionFor(s) {
|
|
23
|
+
let e = t.get(s);
|
|
24
|
+
return e || (e = v(0), t.set(s, e)), e;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function w(t = R()) {
|
|
29
|
+
const s = (e) => {
|
|
30
|
+
t.version.value++, t.versionFor(e).value++;
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
__overrideMaps: t,
|
|
34
|
+
addRenderEffect(e) {
|
|
35
|
+
return t.effectRegistry.push(e), () => {
|
|
36
|
+
const n = t.effectRegistry.indexOf(e);
|
|
37
|
+
n !== -1 && t.effectRegistry.splice(n, 1);
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
node: (e) => ({
|
|
41
|
+
setHidden(n) {
|
|
42
|
+
return t.hiddenOverrides.get(e) === n ? this : (t.hiddenOverrides.set(e, n), s(e), this);
|
|
43
|
+
},
|
|
44
|
+
resetHidden() {
|
|
45
|
+
return t.hiddenOverrides.delete(e) && s(e), this;
|
|
46
|
+
},
|
|
47
|
+
patchProps(n) {
|
|
48
|
+
const d = t.propsOverrides.get(e);
|
|
49
|
+
return d != null && Object.keys(n).every(
|
|
50
|
+
(i) => i in d && Object.is(d[i], n[i])
|
|
51
|
+
) ? this : (t.propsOverrides.set(e, { ...d ?? {}, ...n }), s(e), this);
|
|
52
|
+
},
|
|
53
|
+
resetProps() {
|
|
54
|
+
return t.propsOverrides.delete(e) && s(e), this;
|
|
55
|
+
},
|
|
56
|
+
getRef() {
|
|
57
|
+
let n = t.refRegistry.get(e);
|
|
58
|
+
return n || (n = { current: null }, t.refRegistry.set(e, n)), n;
|
|
59
|
+
},
|
|
60
|
+
addHideCondition(n) {
|
|
61
|
+
const { hide: d } = y(t);
|
|
62
|
+
let r = d.get(e);
|
|
63
|
+
if (!r) {
|
|
64
|
+
const c = v([]);
|
|
65
|
+
r = c, d.set(e, c), t.conditionRegistry.set(e, () => c.value.some((f) => f()));
|
|
66
|
+
}
|
|
67
|
+
r.value = [...r.value, n];
|
|
68
|
+
const i = r;
|
|
69
|
+
return () => {
|
|
70
|
+
const c = [...i.value];
|
|
71
|
+
if (!a(c, n)) {
|
|
72
|
+
i.value = c;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
i.value = c, d.get(e) === i && (d.delete(e), t.conditionRegistry.delete(e));
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
addEventHandler(n, d) {
|
|
79
|
+
const { events: r } = y(t);
|
|
80
|
+
let i = r.get(e);
|
|
81
|
+
i || r.set(e, i = /* @__PURE__ */ new Map());
|
|
82
|
+
let c = i.get(n);
|
|
83
|
+
c || i.set(n, c = []), c.push(d);
|
|
84
|
+
let f = t.callbackRegistry.get(e);
|
|
85
|
+
f || t.callbackRegistry.set(e, f = /* @__PURE__ */ new Map()), f.set(n, d);
|
|
86
|
+
const o = c, u = i;
|
|
87
|
+
return () => {
|
|
88
|
+
const g = a(o, d), l = t.callbackRegistry.get(e);
|
|
89
|
+
if (!g) {
|
|
90
|
+
l?.set(n, o[o.length - 1]);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
u.delete(n), l?.delete(n), l?.size === 0 && t.callbackRegistry.delete(e), u.size === 0 && r.delete(e);
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
addLifecycleHook(n, d) {
|
|
97
|
+
const { hooks: r } = y(t);
|
|
98
|
+
let i = r.get(e);
|
|
99
|
+
i || r.set(e, i = /* @__PURE__ */ new Map());
|
|
100
|
+
let c = i.get(n);
|
|
101
|
+
c || i.set(n, c = []), c.push(d), t.lifecycleRegistry.set(e, {
|
|
102
|
+
...t.lifecycleRegistry.get(e) ?? {},
|
|
103
|
+
[n]: d
|
|
104
|
+
});
|
|
105
|
+
const f = c, o = i;
|
|
106
|
+
return () => {
|
|
107
|
+
const u = a(f, d), g = { ...t.lifecycleRegistry.get(e) ?? {} };
|
|
108
|
+
u ? (o.delete(n), delete g[n]) : g[n] = f[f.length - 1], Object.keys(g).length === 0 ? t.lifecycleRegistry.delete(e) : t.lifecycleRegistry.set(e, g), o.size === 0 && r.delete(e);
|
|
109
|
+
};
|
|
110
|
+
},
|
|
111
|
+
__selector: e,
|
|
112
|
+
__overrideMaps: t
|
|
113
|
+
})
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function O() {
|
|
117
|
+
const t = /* @__PURE__ */ new WeakMap();
|
|
118
|
+
return {
|
|
119
|
+
scopeOf(s) {
|
|
120
|
+
let e = t.get(s);
|
|
121
|
+
return e || (e = w(), t.set(s, e)), e;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function M(t, s) {
|
|
126
|
+
const e = [s];
|
|
127
|
+
for (let r = 0; r < e.length; r++)
|
|
128
|
+
for (const i of e[r].nodes.values())
|
|
129
|
+
s.model !== void 0 && i.kind === "part" && i.content.model === s.model && e.push(i.content);
|
|
130
|
+
const n = (r) => e.some((i) => i.nodes.get(r)?.selector === r);
|
|
131
|
+
return [.../* @__PURE__ */ new Set([
|
|
132
|
+
...t.hiddenOverrides.keys(),
|
|
133
|
+
...t.propsOverrides.keys(),
|
|
134
|
+
...t.conditionRegistry.keys(),
|
|
135
|
+
...t.callbackRegistry.keys(),
|
|
136
|
+
...t.lifecycleRegistry.keys()
|
|
137
|
+
])].filter((r) => !n(r));
|
|
138
|
+
}
|
|
139
|
+
export {
|
|
140
|
+
w as a,
|
|
141
|
+
O as c,
|
|
142
|
+
M as u
|
|
143
|
+
};
|
package/dist/signals.d.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
import { ReadonlySignal } from '@preact/signals-core';
|
|
2
|
+
export { signal, computed, effect, batch, untracked, Signal } from '@preact/signals-core';
|
|
3
|
+
export type { ReadonlySignal } from '@preact/signals-core';
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
5
|
+
* Значение — сигнал: результат `signal()` или `computed()`, в том числе созданный другой копией
|
|
6
|
+
* рантайма.
|
|
3
7
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* пакетов — это критично для проверок вида `value instanceof Signal` над сигналами,
|
|
8
|
-
* созданными внутри @reformer/core.
|
|
8
|
+
* Контейнерные узлы дерева `model.$` (группа, массив) тоже проходят проверку: это сигналы
|
|
9
|
+
* агрегированного значения. Лист от контейнера отличает `isModelContainerSignal`, а ручку, к
|
|
10
|
+
* которой можно привязать поле, — `isValueSignal` (оба — из `@reformer/core`).
|
|
9
11
|
*
|
|
10
|
-
* @
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* isSignal(signal(1)); // true
|
|
15
|
+
* isSignal(computed(() => 1)); // true
|
|
16
|
+
* isSignal({ value: 1 }); // false
|
|
17
|
+
* ```
|
|
11
18
|
*/
|
|
12
|
-
export
|
|
13
|
-
export type { ReadonlySignal } from '@preact/signals-core';
|
|
19
|
+
export declare function isSignal(value: unknown): value is ReadonlySignal<unknown>;
|
package/dist/signals.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { Signal as
|
|
1
|
+
import { Signal as e, batch as a, computed as f, effect as i, signal as l, untracked as p } from "@preact/signals-core";
|
|
2
|
+
const n = Symbol.for("preact-signals");
|
|
3
|
+
function o(t) {
|
|
4
|
+
return typeof t == "object" && t !== null && t.brand === n;
|
|
5
|
+
}
|
|
2
6
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
7
|
+
e as Signal,
|
|
8
|
+
a as batch,
|
|
5
9
|
f as computed,
|
|
6
|
-
|
|
7
|
-
o as
|
|
8
|
-
|
|
10
|
+
i as effect,
|
|
11
|
+
o as isSignal,
|
|
12
|
+
l as signal,
|
|
13
|
+
p as untracked
|
|
9
14
|
};
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { batch as F, signal as X, effect as Y, untracked as Z } from "@preact/signals-core";
|
|
2
|
+
import { a as ee } from "./create-model-BvcbNPgL.js";
|
|
3
|
+
import { g as p } from "./signal-node-registry-tiwel-TV.js";
|
|
4
|
+
import { n as te, m as L, o as ne, f as oe } from "./safe-effect-BbtX3KuN.js";
|
|
5
|
+
let k = null;
|
|
6
|
+
function B(e, n) {
|
|
7
|
+
const t = k;
|
|
8
|
+
k = e;
|
|
9
|
+
try {
|
|
10
|
+
return n();
|
|
11
|
+
} finally {
|
|
12
|
+
k = t;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function h(e) {
|
|
16
|
+
if (!k)
|
|
17
|
+
throw new Error(
|
|
18
|
+
`[@reformer/core/validation] "${e}" вызван вне схемы валидации — операторы валидации можно вызывать только внутри прогона validateModel(...) (напрямую или через apply/each).`
|
|
19
|
+
);
|
|
20
|
+
return k;
|
|
21
|
+
}
|
|
22
|
+
function W(e, n) {
|
|
23
|
+
let t = e.origins.get(n);
|
|
24
|
+
t || e.origins.set(n, t = /* @__PURE__ */ new Map());
|
|
25
|
+
let o = t.get(e.origin);
|
|
26
|
+
return o || t.set(e.origin, o = []), o;
|
|
27
|
+
}
|
|
28
|
+
function j(e, n, t) {
|
|
29
|
+
const o = e.origin;
|
|
30
|
+
e.origin = n, e.executed.add(n);
|
|
31
|
+
try {
|
|
32
|
+
t();
|
|
33
|
+
} finally {
|
|
34
|
+
e.origin = o;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const se = (e) => e.whenStack.every((n) => n());
|
|
38
|
+
function I(e, n) {
|
|
39
|
+
return se(e) ? (e.checked.add(n), !0) : !1;
|
|
40
|
+
}
|
|
41
|
+
function be(e, n) {
|
|
42
|
+
const t = h("validate"), o = W(t, e);
|
|
43
|
+
if (!I(t, e)) return;
|
|
44
|
+
const i = e.peek();
|
|
45
|
+
for (const s of n) {
|
|
46
|
+
const r = s(i);
|
|
47
|
+
r && o.push(r);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const _ = "ruleFailed";
|
|
51
|
+
function me(e, n) {
|
|
52
|
+
const t = h("validateAsync"), o = e, i = W(t, o);
|
|
53
|
+
if (!I(t, o)) return;
|
|
54
|
+
const s = e.peek(), r = t.signal;
|
|
55
|
+
t.asyncFields.add(o);
|
|
56
|
+
for (const a of n)
|
|
57
|
+
t.pending.push(
|
|
58
|
+
// Вызов внутри исполнителя промиса: синхронное исключение правила — такой же сбой.
|
|
59
|
+
new Promise((c) => c(a(s, { signal: r }))).then(
|
|
60
|
+
(c) => {
|
|
61
|
+
c && !r.aborted && i.push(c);
|
|
62
|
+
},
|
|
63
|
+
(c) => {
|
|
64
|
+
r.aborted || (t.failures.push({ handle: o, error: c }), i.some((u) => u.code === _) || i.push({ code: _ }));
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function Oe(e, n) {
|
|
70
|
+
const t = h("validateWhen");
|
|
71
|
+
t.whenStack.push(e);
|
|
72
|
+
try {
|
|
73
|
+
n();
|
|
74
|
+
} finally {
|
|
75
|
+
t.whenStack.pop();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function ie(e, n, t) {
|
|
79
|
+
const o = h("cross"), i = W(o, n);
|
|
80
|
+
if (!I(o, n)) return;
|
|
81
|
+
const s = t(e.get());
|
|
82
|
+
s && i.push(s);
|
|
83
|
+
}
|
|
84
|
+
function V(e) {
|
|
85
|
+
return {
|
|
86
|
+
model: e,
|
|
87
|
+
cross: (n, t) => ie(e, n, t)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function C(e, n, t) {
|
|
91
|
+
const o = n, i = { ...e, model: o };
|
|
92
|
+
B(
|
|
93
|
+
i,
|
|
94
|
+
() => j(i, t, () => t(V(o)))
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
function re(e, n) {
|
|
98
|
+
const t = ne(n);
|
|
99
|
+
if (!t)
|
|
100
|
+
throw new TypeError(
|
|
101
|
+
`[@reformer/core/validation] ${e}: ожидался массив под-форм модели — \`model.$.<массив>\`. Массив примитивов — одно значение поля, его проверяют целиком: \`validate(model.$.<массив>, [...])\`.`
|
|
102
|
+
);
|
|
103
|
+
return L(t);
|
|
104
|
+
}
|
|
105
|
+
function Se(e, n) {
|
|
106
|
+
const t = h("applyEach"), o = re("applyEach", e), i = o.length;
|
|
107
|
+
for (let s = 0; s < i; s++) C(t, o.at(s), n);
|
|
108
|
+
}
|
|
109
|
+
function Ee(...e) {
|
|
110
|
+
const n = h("apply");
|
|
111
|
+
if (typeof e[0] == "function") {
|
|
112
|
+
for (const i of e)
|
|
113
|
+
j(n, i, () => i(V(n.model)));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const [t, o] = e;
|
|
117
|
+
for (const i of Array.isArray(t) ? t : [t]) {
|
|
118
|
+
const s = te(i);
|
|
119
|
+
if (!s)
|
|
120
|
+
throw new TypeError(
|
|
121
|
+
"[@reformer/core/validation] apply: ожидалась группа модели — `model.$.<группа>`. Массив под-форм подключают через `applyEach`."
|
|
122
|
+
);
|
|
123
|
+
C(n, L(s), o);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function Me(e) {
|
|
127
|
+
return e;
|
|
128
|
+
}
|
|
129
|
+
const S = /* @__PURE__ */ new WeakMap(), G = /* @__PURE__ */ new WeakMap(), z = /* @__PURE__ */ new WeakMap(), H = /* @__PURE__ */ new WeakMap(), E = /* @__PURE__ */ new WeakMap(), b = {}, $ = {}, U = /* @__PURE__ */ new WeakMap();
|
|
130
|
+
function ae(e) {
|
|
131
|
+
const n = /* @__PURE__ */ new Set(), t = [];
|
|
132
|
+
for (const o of e)
|
|
133
|
+
for (const i of o) {
|
|
134
|
+
const s = JSON.stringify([i.code, i.severity ?? null, i.params ?? null]);
|
|
135
|
+
n.has(s) || (n.add(s), t.push(i));
|
|
136
|
+
}
|
|
137
|
+
return t;
|
|
138
|
+
}
|
|
139
|
+
function M(e, n, t, o, i, s = !1) {
|
|
140
|
+
const r = E.get(e), a = n.ownIssues?.peek() ?? [], c = r !== void 0 && a === r.written, u = c ? r.byOrigin : /* @__PURE__ */ new Map();
|
|
141
|
+
if (!c && s && a.length > 0 && u.set($, a), u.delete(b), t === void 0) {
|
|
142
|
+
for (const l of [...u.keys()]) l !== $ && u.delete(l);
|
|
143
|
+
i !== void 0 && i.length > 0 && u.set(b, i);
|
|
144
|
+
} else {
|
|
145
|
+
for (const l of t.executed) u.delete(l);
|
|
146
|
+
o?.forEach((l, v) => {
|
|
147
|
+
l.length > 0 && u.set(v, l);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const f = u.size === 0 ? [] : ae(u.values());
|
|
151
|
+
n.setIssues(f), E.set(e, { byOrigin: u, written: n.ownIssues?.peek() ?? f });
|
|
152
|
+
}
|
|
153
|
+
function N(e, n, t, o) {
|
|
154
|
+
const i = p(e), s = t === void 0 ? void 0 : n?.origins.get(e);
|
|
155
|
+
if (i === void 0) {
|
|
156
|
+
if (s?.forEach((r, a) => {
|
|
157
|
+
const c = o.get(a) ?? [];
|
|
158
|
+
c.push(...r), o.set(a, c);
|
|
159
|
+
}), n === void 0 && t !== void 0) {
|
|
160
|
+
const r = o.get(b) ?? [];
|
|
161
|
+
r.push(...t), o.set(b, r);
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
M(e, i, n, s, t);
|
|
166
|
+
}
|
|
167
|
+
function ce(e, n, t) {
|
|
168
|
+
if (e === void 0) return;
|
|
169
|
+
const o = p(e.$);
|
|
170
|
+
if (o !== void 0 && !(t.size === 0 && !E.has(o))) {
|
|
171
|
+
if (n === void 0) {
|
|
172
|
+
M(o, o, void 0, void 0, t.get(b) ?? [], !0);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
M(o, o, n, t, void 0, !0);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function ue(e, n) {
|
|
179
|
+
let t = S.get(e);
|
|
180
|
+
t || S.set(e, t = /* @__PURE__ */ new WeakMap());
|
|
181
|
+
let o = t.get(n);
|
|
182
|
+
return o || t.set(n, o = { fields: /* @__PURE__ */ new Set(), ac: null }), o;
|
|
183
|
+
}
|
|
184
|
+
const fe = (e) => {
|
|
185
|
+
for (const n of e.values()) for (const t of n) if (t.severity !== "warning") return !0;
|
|
186
|
+
return !1;
|
|
187
|
+
};
|
|
188
|
+
function le(e) {
|
|
189
|
+
return e.aborted ? Promise.resolve() : new Promise((n) => {
|
|
190
|
+
e.addEventListener("abort", () => n(), { once: !0 });
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
const P = (e) => e !== null && typeof e == "object" && p(e)?.disabled?.peek() === !0;
|
|
194
|
+
function D(e, n) {
|
|
195
|
+
if (n.__path === "") return P(n);
|
|
196
|
+
let t = e.$;
|
|
197
|
+
for (const o of n.__path.split("."))
|
|
198
|
+
if (t === null || typeof t != "object" || (t = t[o], P(t))) return !0;
|
|
199
|
+
return t !== n;
|
|
200
|
+
}
|
|
201
|
+
function de(e, n, t, o, i) {
|
|
202
|
+
for (const s of n.keys())
|
|
203
|
+
D(e, s) && (n.set(s, []), i.get(s)?.forEach((r, a, c) => c.set(a, [])), o.delete(s));
|
|
204
|
+
for (let s = t.length - 1; s >= 0; s--)
|
|
205
|
+
D(e, t[s].handle) && t.splice(s, 1);
|
|
206
|
+
}
|
|
207
|
+
function pe(e, n) {
|
|
208
|
+
S.get(e)?.get(n)?.ac?.abort();
|
|
209
|
+
}
|
|
210
|
+
let A = 0;
|
|
211
|
+
function q(e) {
|
|
212
|
+
A++;
|
|
213
|
+
try {
|
|
214
|
+
F(e);
|
|
215
|
+
} finally {
|
|
216
|
+
A--;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const ge = () => A > 0;
|
|
220
|
+
async function J(e, n, t, o = !1) {
|
|
221
|
+
const i = ue(e, n);
|
|
222
|
+
i.ac?.abort();
|
|
223
|
+
const s = new AbortController();
|
|
224
|
+
i.ac = s;
|
|
225
|
+
const r = [], a = {
|
|
226
|
+
model: e,
|
|
227
|
+
issues: /* @__PURE__ */ new Map(),
|
|
228
|
+
checked: /* @__PURE__ */ new Set(),
|
|
229
|
+
pending: [],
|
|
230
|
+
asyncFields: /* @__PURE__ */ new Set(),
|
|
231
|
+
failures: r,
|
|
232
|
+
whenStack: [],
|
|
233
|
+
signal: s.signal,
|
|
234
|
+
origin: n,
|
|
235
|
+
origins: /* @__PURE__ */ new Map(),
|
|
236
|
+
executed: /* @__PURE__ */ new Set([n])
|
|
237
|
+
};
|
|
238
|
+
B(a, () => n(V(e)));
|
|
239
|
+
const c = [];
|
|
240
|
+
if (t) {
|
|
241
|
+
for (const f of a.asyncFields) {
|
|
242
|
+
const l = p(f);
|
|
243
|
+
l && c.push(l);
|
|
244
|
+
}
|
|
245
|
+
for (const f of c) f.setPending(!0);
|
|
246
|
+
}
|
|
247
|
+
a.pending.length ? await Promise.race([Promise.all(a.pending), le(s.signal)]) : o && await oe();
|
|
248
|
+
for (const [f, l] of a.origins) a.issues.set(f, [...l.values()].flat());
|
|
249
|
+
o && de(e, a.issues, r, a.checked, a.origins);
|
|
250
|
+
const u = {
|
|
251
|
+
status: s.signal.aborted ? "cancelled" : r.length > 0 ? "error" : fe(a.issues) ? "invalid" : "valid",
|
|
252
|
+
issues: a.issues,
|
|
253
|
+
failures: r
|
|
254
|
+
};
|
|
255
|
+
return G.set(u, i), z.set(u, a.checked), H.set(u, { origins: a.origins, executed: a.executed }), U.set(u, e), {
|
|
256
|
+
result: u,
|
|
257
|
+
release: () => {
|
|
258
|
+
for (const f of c) f.setPending(!1);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
async function Ae(e, n) {
|
|
263
|
+
return (await J(e, n, !1)).result;
|
|
264
|
+
}
|
|
265
|
+
function he(e, n) {
|
|
266
|
+
if (e.status === "cancelled") return;
|
|
267
|
+
const t = G.get(e), o = new Set(e.issues.keys()), i = z.get(e) ?? o, s = H.get(e), r = () => {
|
|
268
|
+
const a = /* @__PURE__ */ new Map();
|
|
269
|
+
if (t)
|
|
270
|
+
for (const c of t.fields)
|
|
271
|
+
o.has(c) || N(c, s, void 0, a);
|
|
272
|
+
for (const [c, u] of e.issues) N(c, s, u, a);
|
|
273
|
+
if (ce(U.get(e), s, a), n?.touch) for (const c of i) p(c)?.markAsTouched();
|
|
274
|
+
};
|
|
275
|
+
n?.touch ? q(r) : F(r), t && (t.fields = o);
|
|
276
|
+
}
|
|
277
|
+
async function K(e, n, t) {
|
|
278
|
+
const { result: o, release: i } = await J(e, n, !0, t?.skipDisabled), s = t?.touch ?? !1, r = () => {
|
|
279
|
+
he(o, { touch: s !== !1 }), s === "all" && (o.status === "invalid" || o.status === "error") && p(e.$)?.markAsTouched(), i();
|
|
280
|
+
};
|
|
281
|
+
return s !== !1 ? q(r) : F(r), o;
|
|
282
|
+
}
|
|
283
|
+
async function Fe(e, n, t) {
|
|
284
|
+
return (await K(e, n, t)).status === "valid";
|
|
285
|
+
}
|
|
286
|
+
function We(e, n, t = {}) {
|
|
287
|
+
const { strategy: o = "submit", debounce: i = 0, liveAfterSubmit: s = "change" } = t, r = X(!1);
|
|
288
|
+
let a = 0, c = !1, u, f;
|
|
289
|
+
const l = async (d) => {
|
|
290
|
+
a++, r.value = !0;
|
|
291
|
+
try {
|
|
292
|
+
return await K(e, n, { touch: d, skipDisabled: !0 });
|
|
293
|
+
} finally {
|
|
294
|
+
--a === 0 && (r.value = !1);
|
|
295
|
+
}
|
|
296
|
+
}, v = () => {
|
|
297
|
+
l(!1).catch((d) => {
|
|
298
|
+
process.env.NODE_ENV !== "production" && console.error(
|
|
299
|
+
"[@reformer/core/validation] живой прогон схемы завершился исключением",
|
|
300
|
+
d
|
|
301
|
+
);
|
|
302
|
+
});
|
|
303
|
+
}, Q = () => {
|
|
304
|
+
if (!i) {
|
|
305
|
+
v();
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
f && clearTimeout(f), f = setTimeout(v, i);
|
|
309
|
+
}, x = (d, g, y) => {
|
|
310
|
+
let O = !0;
|
|
311
|
+
return Y(() => {
|
|
312
|
+
if (y?.(), ee(e, d), O) {
|
|
313
|
+
O = !1;
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
o === "afterFirstSubmit" && !c || Z(g);
|
|
317
|
+
});
|
|
318
|
+
}, m = {
|
|
319
|
+
async validate() {
|
|
320
|
+
return (await m.run()).status === "valid";
|
|
321
|
+
},
|
|
322
|
+
run(d) {
|
|
323
|
+
return d?.submit && (c = !0), l(d?.touch ?? !0);
|
|
324
|
+
},
|
|
325
|
+
start() {
|
|
326
|
+
if (u) return () => m.dispose();
|
|
327
|
+
const d = o === "afterFirstSubmit" ? s : o;
|
|
328
|
+
if (d === "change")
|
|
329
|
+
u = x((g) => void g.value, Q);
|
|
330
|
+
else if (d === "blur") {
|
|
331
|
+
const g = /* @__PURE__ */ new WeakMap();
|
|
332
|
+
let y = !1;
|
|
333
|
+
u = x(
|
|
334
|
+
(O) => {
|
|
335
|
+
const w = p(O);
|
|
336
|
+
if (w === void 0) return;
|
|
337
|
+
const R = w.touches?.value ?? (w.touched.value ? 1 : 0), T = g.get(w);
|
|
338
|
+
T !== void 0 && R > T && (y = !0), g.set(w, R);
|
|
339
|
+
},
|
|
340
|
+
() => {
|
|
341
|
+
y && !ge() && v();
|
|
342
|
+
},
|
|
343
|
+
() => {
|
|
344
|
+
y = !1;
|
|
345
|
+
}
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
return () => m.dispose();
|
|
349
|
+
},
|
|
350
|
+
dispose() {
|
|
351
|
+
f && (clearTimeout(f), f = void 0), u?.(), u = void 0, pe(e, n);
|
|
352
|
+
},
|
|
353
|
+
get isValidating() {
|
|
354
|
+
return r.value;
|
|
355
|
+
},
|
|
356
|
+
get validating() {
|
|
357
|
+
return r;
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
return m;
|
|
361
|
+
}
|
|
362
|
+
export {
|
|
363
|
+
me as a,
|
|
364
|
+
Oe as b,
|
|
365
|
+
Ee as c,
|
|
366
|
+
Se as d,
|
|
367
|
+
Me as e,
|
|
368
|
+
he as f,
|
|
369
|
+
Fe as g,
|
|
370
|
+
We as h,
|
|
371
|
+
pe as i,
|
|
372
|
+
K as j,
|
|
373
|
+
Ae as r,
|
|
374
|
+
be as v
|
|
375
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { k as o } from "./node-kind-C-r6ZMdo.js";
|
|
2
|
+
function i(r) {
|
|
3
|
+
return o(r) !== void 0;
|
|
4
|
+
}
|
|
5
|
+
function t(r) {
|
|
6
|
+
return o(r) === "control";
|
|
7
|
+
}
|
|
8
|
+
function u(r) {
|
|
9
|
+
return o(r) === "group";
|
|
10
|
+
}
|
|
11
|
+
function a(r) {
|
|
12
|
+
return o(r) === "array";
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
t as a,
|
|
16
|
+
u as b,
|
|
17
|
+
a as c,
|
|
18
|
+
i
|
|
19
|
+
};
|