@volverjs/form-vue 1.1.2 → 1.1.3
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/index.es.js +150 -71
- package/dist/index.umd.js +1 -1
- package/dist/src/VvFormField.d.ts +2 -2
- package/dist/src/VvFormFieldsGroup.d.ts +2 -2
- package/dist/src/index.d.ts +11 -10
- package/package.json +18 -18
- package/src/VvForm.ts +1 -3
- package/src/index.ts +3 -3
- package/src/shims.d.ts +8 -0
- package/src/utils.ts +127 -164
- package/dist/index.d.ts +0 -2
package/dist/index.es.js
CHANGED
|
@@ -8,76 +8,155 @@ var O = /* @__PURE__ */ function(e) {
|
|
|
8
8
|
return e.text = "text", e.number = "number", e.email = "email", e.password = "password", e.tel = "tel", e.url = "url", e.search = "search", e.date = "date", e.time = "time", e.datetimeLocal = "datetime-local", e.month = "month", e.week = "week", e.color = "color", e.select = "select", e.checkbox = "checkbox", e.radio = "radio", e.textarea = "textarea", e.radioGroup = "radioGroup", e.checkboxGroup = "checkboxGroup", e.combobox = "combobox", e.custom = "custom", e;
|
|
9
9
|
}({}), k = /* @__PURE__ */ function(e) {
|
|
10
10
|
return e.invalid = "invalid", e.valid = "valid", e.submitting = "submitting", e.reset = "reset", e.updated = "updated", e.unknown = "unknown", e;
|
|
11
|
-
}({})
|
|
12
|
-
|
|
11
|
+
}({});
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/utils.ts
|
|
14
|
+
function A(e) {
|
|
15
|
+
return Array.isArray(e) ? "array" : e === null ? "null" : typeof e;
|
|
16
|
+
}
|
|
17
|
+
function j(e, t) {
|
|
18
|
+
let n = A(e);
|
|
19
|
+
return t.type ? Array.isArray(t.type) ? t.type.some((t) => t === n || t === "integer" && n === "number" && Number.isInteger(e)) : t.type === n || t.type === "integer" && n === "number" && Number.isInteger(e) : !0;
|
|
20
|
+
}
|
|
21
|
+
var M = (e) => e._def.typeName === "ZodObject", N = (e) => e._zod.def.type === "object", P = (e) => e._def.typeName === "ZodDefault", F = (e) => e._zod.def.type === "default", I = (e) => e._def.typeName === "ZodNullable", L = (e) => e._zod.def.type === "nullable", R = (e) => e._def.typeName === "ZodRecord", z = (e) => e._zod.def.type === "record", B = (e) => e._def.typeName === "ZodArray", ee = (e) => e._zod.def.type === "array", te = (e) => e._def.typeName === "ZodEffects", V = (e) => e._def.typeName === "ZodOptional", H = (e) => e._zod.def.type === "optional", ne = (e) => e._zod.def.type === "pipe", U = (e) => e._zod.def.type === "transform";
|
|
22
|
+
function W(e) {
|
|
13
23
|
let t = e;
|
|
14
|
-
for (;
|
|
24
|
+
for (; te(t);) t = t.innerType();
|
|
15
25
|
return t;
|
|
16
26
|
}
|
|
17
|
-
function
|
|
27
|
+
function G(e) {
|
|
18
28
|
let t = e;
|
|
19
|
-
for (;
|
|
29
|
+
for (; ne(t);) t = U(t._zod.def.out) ? t._zod.def.in : t._zod.def.out;
|
|
20
30
|
return t;
|
|
21
31
|
}
|
|
22
|
-
var
|
|
23
|
-
let t =
|
|
32
|
+
var re = (e) => {
|
|
33
|
+
let t = W(e);
|
|
24
34
|
return V(t) && (t = t._def.innerType), t;
|
|
25
|
-
},
|
|
26
|
-
let t =
|
|
35
|
+
}, ie = (e) => {
|
|
36
|
+
let t = G(e);
|
|
27
37
|
return H(t) && (t = t._zod.def.innerType), t;
|
|
28
|
-
},
|
|
29
|
-
function
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (r == null && i) return [e, o];
|
|
38
|
-
if (a && r !== void 0) {
|
|
39
|
-
let t = w(n, r);
|
|
40
|
-
if (t.success) return [e, t.data ?? o];
|
|
41
|
-
}
|
|
42
|
-
if (z(a) && Array.isArray(r)) {
|
|
43
|
-
let t = J(a._zod.def.element);
|
|
44
|
-
return j(t) ? [e, r.map((e) => X(t, e && typeof e == "object" ? e : void 0))] : [e, r];
|
|
45
|
-
}
|
|
46
|
-
if (L(a) && r) {
|
|
47
|
-
let t = J(a._zod.def.valueType);
|
|
48
|
-
return j(t) ? [e, Object.keys(r).reduce((e, n) => (e[n] = X(t, r[n]), e), {})] : [e, r];
|
|
49
|
-
}
|
|
50
|
-
return j(a) ? [e, X(a, r && typeof r == "object" ? r : o)] : [e, o];
|
|
51
|
-
}))
|
|
52
|
-
} : t;
|
|
38
|
+
}, ae = (e) => !!V(W(e)), oe = (e) => !!H(G(e));
|
|
39
|
+
function K(e, t) {
|
|
40
|
+
if (e.length === 0) return t ?? void 0;
|
|
41
|
+
if (t !== void 0) {
|
|
42
|
+
for (let n of e) if (j(t, n)) return q(n, t);
|
|
43
|
+
for (let n of e) {
|
|
44
|
+
let e = n;
|
|
45
|
+
if (!e.type || e.type === "object") return q(e, t);
|
|
46
|
+
}
|
|
53
47
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
48
|
+
return q(e[0], t);
|
|
49
|
+
}
|
|
50
|
+
function q(e, t) {
|
|
51
|
+
if ("const" in e) return e.const;
|
|
52
|
+
if (e.anyOf && Array.isArray(e.anyOf)) return K(e.anyOf, t);
|
|
53
|
+
if (e.oneOf && Array.isArray(e.oneOf)) return K(e.oneOf, t);
|
|
54
|
+
if (e.allOf && Array.isArray(e.allOf)) {
|
|
55
|
+
let n = {
|
|
56
|
+
...e,
|
|
57
|
+
allOf: void 0
|
|
58
|
+
};
|
|
59
|
+
for (let t of e.allOf) {
|
|
60
|
+
let e = t;
|
|
61
|
+
e.properties && (n.properties = {
|
|
62
|
+
...n.properties,
|
|
63
|
+
...e.properties
|
|
64
|
+
}), e.type && !n.type && (n.type = e.type);
|
|
65
|
+
}
|
|
66
|
+
return q(n, t);
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(e.type)) {
|
|
69
|
+
if (t === null && e.type.includes("null")) return null;
|
|
70
|
+
let n = e.type.find((e) => e !== "null");
|
|
71
|
+
return n ? q({
|
|
72
|
+
...e,
|
|
73
|
+
type: n
|
|
74
|
+
}, t) : e.default ?? null;
|
|
75
|
+
}
|
|
76
|
+
if (e.type !== "object" || !e.properties) switch (e.type) {
|
|
77
|
+
case "string": return typeof t == "string" ? t : e.default;
|
|
78
|
+
case "number":
|
|
79
|
+
case "integer": return typeof t == "number" ? t : e.default;
|
|
80
|
+
case "boolean": return typeof t == "boolean" ? t : e.default;
|
|
81
|
+
case "null": return t === null ? t : e.default;
|
|
82
|
+
case "array": return Array.isArray(t) ? e.items ? t.map((t) => q(e.items, t)) : t : e.default;
|
|
83
|
+
default: return e.default;
|
|
84
|
+
}
|
|
85
|
+
let n = e.properties, r = t && typeof t == "object" && !Array.isArray(t) ? t : void 0, i = {};
|
|
86
|
+
for (let e in n) {
|
|
87
|
+
let t = r?.[e];
|
|
88
|
+
i[e] = q(n[e], t);
|
|
89
|
+
}
|
|
90
|
+
if (r && e.additionalProperties !== !1) {
|
|
91
|
+
let e = new Set(Object.keys(n));
|
|
92
|
+
for (let [t, n] of Object.entries(r)) e.has(t) || (i[t] = n);
|
|
93
|
+
}
|
|
94
|
+
return i;
|
|
95
|
+
}
|
|
96
|
+
var J = (e) => "_zod" in e, se = {
|
|
97
|
+
getInnerType: re,
|
|
98
|
+
isObject: M,
|
|
99
|
+
hasUnknownKeys: (e) => e._def.unknownKeys === "passthrough",
|
|
100
|
+
getShapeEntries: (e) => "shape" in e ? Object.entries(e.shape) : [],
|
|
101
|
+
isOptional: ae,
|
|
102
|
+
isDefault: P,
|
|
103
|
+
getDefaultValue: (e) => e._def.defaultValue(),
|
|
104
|
+
getDefaultInnerType: (e) => e._def.innerType,
|
|
105
|
+
isNullable: I,
|
|
106
|
+
safeParse: (e, t) => e.safeParse(t),
|
|
107
|
+
isArray: B,
|
|
108
|
+
getArrayElement: (e) => e._def.type,
|
|
109
|
+
isRecord: R,
|
|
110
|
+
getRecordValue: (e) => e._def.valueType
|
|
111
|
+
}, ce = {
|
|
112
|
+
getInnerType: ie,
|
|
113
|
+
isObject: N,
|
|
114
|
+
hasUnknownKeys: (e) => !!(e._zod.def.catchall && e._zod.def.catchall._zod.def.type !== "never"),
|
|
115
|
+
getShapeEntries: (e) => "shape" in e._zod.def ? Object.entries(e._zod.def.shape) : [],
|
|
116
|
+
isOptional: oe,
|
|
117
|
+
isDefault: F,
|
|
118
|
+
getDefaultValue: (e) => e._zod.def.defaultValue,
|
|
119
|
+
getDefaultInnerType: (e) => e._zod.def.innerType,
|
|
120
|
+
isNullable: L,
|
|
121
|
+
safeParse: (e, t) => w(e, t),
|
|
122
|
+
isArray: ee,
|
|
123
|
+
getArrayElement: (e) => e._zod.def.element,
|
|
124
|
+
isRecord: z,
|
|
125
|
+
getRecordValue: (e) => e._zod.def.valueType
|
|
126
|
+
};
|
|
127
|
+
function le(e, t, n) {
|
|
128
|
+
let r = e.getInnerType(e.getArrayElement(t));
|
|
129
|
+
return e.isObject(r) ? n.map((t) => Y(e, r, t)) : n;
|
|
130
|
+
}
|
|
131
|
+
function ue(e, t, n) {
|
|
132
|
+
let r = e.getInnerType(e.getRecordValue(t));
|
|
133
|
+
return e.isObject(r) ? Object.keys(n).reduce((t, i) => (t[i] = Y(e, r, n[i]), t), {}) : n;
|
|
134
|
+
}
|
|
135
|
+
function de(e, t, n, r) {
|
|
136
|
+
let i = e.isOptional(n), a = e.getInnerType(n), o;
|
|
137
|
+
if (e.isDefault(a) && (o = e.getDefaultValue(a), a = e.getDefaultInnerType(a)), r === null && e.isNullable(a)) return [t, r];
|
|
138
|
+
if (r == null && i) return [t, o];
|
|
139
|
+
if (a && r !== void 0) {
|
|
140
|
+
let i = e.safeParse(n, r);
|
|
141
|
+
if (i.success) return [t, i.data ?? o];
|
|
142
|
+
}
|
|
143
|
+
return e.isArray(a) && Array.isArray(r) ? [t, le(e, a, r)] : e.isRecord(a) && r ? [t, ue(e, a, r)] : e.isObject(a) ? [t, Y(e, a, r && typeof r == "object" ? r : o)] : [t, o];
|
|
144
|
+
}
|
|
145
|
+
function Y(e, t, n) {
|
|
146
|
+
let r = n && typeof n == "object" && !Array.isArray(n) ? n : {};
|
|
147
|
+
return {
|
|
148
|
+
...e.hasUnknownKeys(t) ? r : {},
|
|
149
|
+
...Object.fromEntries(e.getShapeEntries(t).map(([t, n]) => de(e, t, n, r[t])))
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function X(e, t = {}) {
|
|
153
|
+
let n = J(e) ? ce : se, r = n.getInnerType(e);
|
|
154
|
+
return n.isObject(r) ? Y(n, r, t) : t;
|
|
76
155
|
}
|
|
77
|
-
var
|
|
156
|
+
var fe = (e, t) => J(e) ? T(e, t) : e.safeParseAsync(t), pe = (e, t) => J(e) ? C(t) : t.format(), me = (e, t) => J(e) ? C(new S(t)) : new x(t).format();
|
|
78
157
|
//#endregion
|
|
79
158
|
//#region src/VvForm.ts
|
|
80
|
-
function
|
|
159
|
+
function he(t, r, a, s, f) {
|
|
81
160
|
let m = d(), h = d(), g = e(() => h.value === k.invalid), x = d(), S = d(!1), C, w = (e) => {
|
|
82
161
|
let n = X(t, e);
|
|
83
162
|
if (a?.class) {
|
|
@@ -87,11 +166,11 @@ function ae(t, r, a, s, f) {
|
|
|
87
166
|
return n;
|
|
88
167
|
}, T = async (e = x.value, n) => {
|
|
89
168
|
if (C = n?.fields, S.value) return !0;
|
|
90
|
-
let r = await
|
|
169
|
+
let r = await fe(t, e);
|
|
91
170
|
if (!r.success) {
|
|
92
|
-
if (h.value = k.invalid, !C?.size) return m.value =
|
|
171
|
+
if (h.value = k.invalid, !C?.size) return m.value = pe(t, r.error), !1;
|
|
93
172
|
let e = r.error.issues.filter((e) => C?.has(e.path.join(".")));
|
|
94
|
-
return e.length ? (m.value =
|
|
173
|
+
return e.length ? (m.value = me(t, e), !1) : (m.value = void 0, !0);
|
|
95
174
|
}
|
|
96
175
|
return m.value = void 0, h.value = k.valid, x.value = w(r.data), !0;
|
|
97
176
|
}, E = () => {
|
|
@@ -176,7 +255,7 @@ function ae(t, r, a, s, f) {
|
|
|
176
255
|
if (e) {
|
|
177
256
|
let t = o(e) ? p(e) : e;
|
|
178
257
|
if (JSON.stringify(t) === JSON.stringify(p(x.value))) return;
|
|
179
|
-
x.value =
|
|
258
|
+
x.value = w(t);
|
|
180
259
|
}
|
|
181
260
|
}, { deep: !0 }), _(h, async (n) => {
|
|
182
261
|
if (n === k.invalid) {
|
|
@@ -271,7 +350,7 @@ function ae(t, r, a, s, f) {
|
|
|
271
350
|
}
|
|
272
351
|
//#endregion
|
|
273
352
|
//#region src/VvFormField.ts
|
|
274
|
-
function
|
|
353
|
+
function ge(r, o, d, p) {
|
|
275
354
|
return n({
|
|
276
355
|
name: "VvFormField",
|
|
277
356
|
props: {
|
|
@@ -473,7 +552,7 @@ function oe(r, o, d, p) {
|
|
|
473
552
|
}
|
|
474
553
|
//#endregion
|
|
475
554
|
//#region src/VvFormFieldsGroup.ts
|
|
476
|
-
function
|
|
555
|
+
function _e(t, r, o) {
|
|
477
556
|
return n({
|
|
478
557
|
name: "VvFormFieldsGroup",
|
|
479
558
|
props: {
|
|
@@ -634,7 +713,7 @@ function se(t, r, o) {
|
|
|
634
713
|
}
|
|
635
714
|
//#endregion
|
|
636
715
|
//#region src/VvFormWrapper.ts
|
|
637
|
-
function
|
|
716
|
+
function ve(t, r) {
|
|
638
717
|
return n({
|
|
639
718
|
name: "VvFormWrapper",
|
|
640
719
|
props: {
|
|
@@ -741,7 +820,7 @@ function ce(t, r) {
|
|
|
741
820
|
}
|
|
742
821
|
//#endregion
|
|
743
822
|
//#region src/VvFormTemplate.ts
|
|
744
|
-
function
|
|
823
|
+
function ye(e, t) {
|
|
745
824
|
let r = n({
|
|
746
825
|
name: "VvFormTemplate",
|
|
747
826
|
props: {
|
|
@@ -796,7 +875,7 @@ function le(e, t) {
|
|
|
796
875
|
//#endregion
|
|
797
876
|
//#region src/index.ts
|
|
798
877
|
function Z(e, t = {}) {
|
|
799
|
-
let n = Symbol("formInjectionKey"), r = Symbol("formWrapperInjectionKey"), i = Symbol("formFieldInjectionKey"), a = Symbol("formFieldsGroupInjectionKey"), o =
|
|
878
|
+
let n = Symbol("formInjectionKey"), r = Symbol("formWrapperInjectionKey"), i = Symbol("formFieldInjectionKey"), a = Symbol("formFieldsGroupInjectionKey"), o = ve(n, r), s = ge(n, r, i, t), c = _e(n, r, a), l = ye(n, s), u = /* @__PURE__ */ new Map(), { clear: d, errors: f, formData: p, ignoreUpdates: m, invalid: h, readonly: g, reset: _, status: v, stopUpdatesWatch: y, submit: b, validate: x, VvForm: S } = he(e, n, t, l, u);
|
|
800
879
|
return {
|
|
801
880
|
clear: d,
|
|
802
881
|
errors: f,
|
|
@@ -821,7 +900,7 @@ function Z(e, t = {}) {
|
|
|
821
900
|
};
|
|
822
901
|
}
|
|
823
902
|
var Q = Symbol("pluginInjectionKey");
|
|
824
|
-
function
|
|
903
|
+
function be(e) {
|
|
825
904
|
let t = {};
|
|
826
905
|
return e.schema && (t = Z(e.schema, e)), {
|
|
827
906
|
...t,
|
|
@@ -831,7 +910,7 @@ function ue(e) {
|
|
|
831
910
|
};
|
|
832
911
|
}
|
|
833
912
|
var $ = /* @__PURE__ */ new Map();
|
|
834
|
-
function
|
|
913
|
+
function xe(e, t = {}) {
|
|
835
914
|
if (t.scope && $.has(t.scope)) return $.get(t.scope);
|
|
836
915
|
if (!r()) {
|
|
837
916
|
let n = Z(e, t);
|
|
@@ -843,8 +922,8 @@ function de(e, t = {}) {
|
|
|
843
922
|
});
|
|
844
923
|
return t.scope && $.set(t.scope, n), n;
|
|
845
924
|
}
|
|
846
|
-
function
|
|
925
|
+
function Se(e, t = {}) {
|
|
847
926
|
return Z(e, t);
|
|
848
927
|
}
|
|
849
928
|
//#endregion
|
|
850
|
-
export { O as FormFieldType,
|
|
929
|
+
export { O as FormFieldType, be as createForm, q as defaultObjectByJSONSchema, X as defaultObjectBySchema, Se as formType, Q as pluginInjectionKey, xe as useForm };
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`),require(`@vueuse/core`),require(`zod/v3`),require(`zod/v4/core`),require(`dot-prop`)):typeof define==`function`&&define.amd?define([`exports`,`vue`,`@vueuse/core`,`zod/v3`,`zod/v4/core`,`dot-prop`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`@volverjs/form-vue`]={},e.Vue,e.VueUseCore,e.zodV3,e.zodV4Core,e.dotProp))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=function(e){return e.text=`text`,e.number=`number`,e.email=`email`,e.password=`password`,e.tel=`tel`,e.url=`url`,e.search=`search`,e.date=`date`,e.time=`time`,e.datetimeLocal=`datetime-local`,e.month=`month`,e.week=`week`,e.color=`color`,e.select=`select`,e.checkbox=`checkbox`,e.radio=`radio`,e.textarea=`textarea`,e.radioGroup=`radioGroup`,e.checkboxGroup=`checkboxGroup`,e.combobox=`combobox`,e.custom=`custom`,e}({}),s=function(e){return e.invalid=`invalid`,e.valid=`valid`,e.submitting=`submitting`,e.reset=`reset`,e.updated=`updated`,e.unknown=`unknown`,e}({}),c=e=>e._def.typeName===`ZodObject`,l=e=>e._zod.def.type===`object`,u=e=>e._def.typeName===`ZodDefault`,d=e=>e._zod.def.type===`default`,f=e=>e._def.typeName===`ZodNullable`,p=e=>e._zod.def.type===`nullable`,m=e=>e._def.typeName===`ZodRecord`,h=e=>e._zod.def.type===`record`,g=e=>e._def.typeName===`ZodArray`,_=e=>e._zod.def.type===`array`,v=e=>e._def.typeName===`ZodEffects`,y=e=>e._def.typeName===`ZodOptional`,b=e=>e._zod.def.type===`optional`,x=e=>e._zod.def.type===`pipe`,S=e=>e._zod.def.type===`transform`;function C(e){let t=e;for(;v(t);)t=t.innerType();return t}function w(e){let t=e;for(;x(t);)t=S(t._zod.def.out)?t._zod.def.in:t._zod.def.out;return t}var T=e=>{let t=C(e);return y(t)&&(t=t._def.innerType),t},E=e=>{let t=w(e);return b(t)&&(t=t._zod.def.innerType),t},D=e=>!!y(C(e)),O=e=>!!b(w(e)),k=e=>`_zod`in e;function A(e,t={}){if(k(e)){let n=E(e);return l(n)?{...n._zod.def.catchall&&n._zod.def.catchall._zod.def.type!==`never`?t:{},...Object.fromEntries((`shape`in n._zod.def?Object.entries(n._zod.def.shape):[]).map(([e,n])=>{let r=t[e],a=O(n),o=E(n),s;if(d(o)&&(s=o._zod.def.defaultValue,o=o._zod.def.innerType),r===null&&p(o))return[e,r];if(r==null&&a)return[e,s];if(o&&r!==void 0){let t=(0,i.safeParse)(n,r);if(t.success)return[e,t.data??s]}if(_(o)&&Array.isArray(r)){let t=E(o._zod.def.element);return l(t)?[e,r.map(e=>A(t,e&&typeof e==`object`?e:void 0))]:[e,r]}if(h(o)&&r){let t=E(o._zod.def.valueType);return l(t)?[e,Object.keys(r).reduce((e,n)=>(e[n]=A(t,r[n]),e),{})]:[e,r]}return l(o)?[e,A(o,r&&typeof r==`object`?r:s)]:[e,s]}))}:t}let n=T(e);return c(n)?{...n._def.unknownKeys===`passthrough`?t:{},...Object.fromEntries((`shape`in n?Object.entries(n.shape):[]).map(([e,n])=>{let r=t[e],i=D(n),a=T(n),o;if(u(a)&&(o=a._def.defaultValue(),a=a._def.innerType),r===null&&f(a))return[e,r];if(r==null&&i)return[e,o];if(a&&r!==void 0){let t=n.safeParse(r);if(t.success)return[e,t.data??o]}if(g(a)&&Array.isArray(r)){let t=T(a._def.type);return c(t)?[e,r.map(e=>A(t,e&&typeof e==`object`?e:void 0))]:[e,r]}if(m(a)&&r){let t=T(a._def.valueType);return c(t)?[e,Object.keys(r).reduce((e,n)=>(e[n]=A(t,r[n]),e),{})]:[e,r]}return c(a)?[e,A(a,r&&typeof r==`object`?r:o)]:[e,o]}))}:t}var j=(e,t)=>k(e)?(0,i.safeParseAsync)(e,t):e.safeParseAsync(t),M=(e,t)=>k(e)?(0,i.formatError)(t):t.format(),N=(e,t)=>k(e)?(0,i.formatError)(new i.$ZodError(t)):new r.ZodError(t).format();function P(e,r,i,a,o){let c=(0,t.ref)(),l=(0,t.ref)(),u=(0,t.computed)(()=>l.value===s.invalid),d=(0,t.ref)(),f=(0,t.ref)(!1),p,m=t=>{let n=A(e,t);if(i?.class){let e=i.class;return new e(n)}return n},h=async(t=d.value,n)=>{if(p=n?.fields,f.value)return!0;let r=await j(e,t);if(!r.success){if(l.value=s.invalid,!p?.size)return c.value=M(e,r.error),!1;let t=r.error.issues.filter(e=>p?.has(e.path.join(`.`)));return t.length?(c.value=N(e,t),!1):(c.value=void 0,!0)}return c.value=void 0,l.value=s.valid,d.value=m(r.data),!0},g=()=>{c.value=void 0,l.value=void 0,p=void 0},_=()=>{d.value=m(),g(),l.value=s.reset},v=async e=>f.value||!await h(void 0,e)?!1:(l.value=s.submitting,!0),{ignoreUpdates:y,stop:b}=(0,n.watchIgnorable)(d,()=>{l.value=s.updated},{deep:!0,eventFilter:(0,n.throttleFilter)(i?.updateThrottle??500)}),x=(0,t.readonly)(c),S=(0,t.readonly)(l);return{clear:g,errors:c,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:l,wrappers:o,stopUpdatesWatch:b,submit:v,validate:h,VvForm:(0,t.defineComponent)({name:`VvForm`,props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:i?.readonly},tag:{type:String,default:`form`},template:{type:[Array,Function],default:void 0},superRefine:{type:Function,default:void 0},validateFields:{type:Array,default:void 0}},emits:[`invalid`,`submit`,`update:modelValue`,`update:readonly`,`valid`,`reset`],expose:[`errors`,`invalid`,`readonly`,`status`,`submit`,`tag`,`template`,`valid`,`validate`,`clear`,`reset`],slots:Object,setup(e,{emit:n}){return d.value=m((0,t.toRaw)(e.modelValue)),(0,t.watch)(()=>e.modelValue,e=>{if(e){let n=(0,t.isProxy)(e)?(0,t.toRaw)(e):e;if(JSON.stringify(n)===JSON.stringify((0,t.toRaw)(d.value)))return;d.value=typeof n?.clone==`function`?n.clone():JSON.parse(JSON.stringify(n))}},{deep:!0}),(0,t.watch)(l,async r=>{if(r===s.invalid){let e=(0,t.toRaw)(c.value);n(`invalid`,e),i?.onInvalid?.(e);return}if(r===s.valid){let e=(0,t.toRaw)(d.value);n(`valid`,e),i?.onValid?.(e),n(`update:modelValue`,e),i?.onUpdate?.(e);return}if(r===s.submitting){let e=(0,t.toRaw)(d.value);n(`submit`,e),i?.onSubmit?.(e);return}if(r===s.reset){let e=(0,t.toRaw)(d.value);n(`reset`,e),i?.onReset?.(e);return}if(r===s.updated){if((c.value||i?.continuousValidation||e.continuousValidation)&&await h(void 0,{superRefine:e.superRefine,fields:p??new Set(e.validateFields)}),!d.value||!e.modelValue||JSON.stringify(d.value)!==JSON.stringify(e.modelValue)){let e=(0,t.toRaw)(d.value);n(`update:modelValue`,e),i?.onUpdate?.(e)}l.value===s.updated&&(l.value=s.unknown)}}),(0,t.onMounted)(()=>{e.readonly!==void 0&&(f.value=e.readonly)}),(0,t.watch)(()=>e.readonly,e=>{f.value=e}),(0,t.watch)(f,t=>{t!==e.readonly&&n(`update:readonly`,f.value)}),(0,t.provide)(r,{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:v,validate:h,wrappers:o}),{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,isReadonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:()=>v({superRefine:e.superRefine,fields:new Set(e.validateFields)}),validate:h,wrappers:o}},render(){let e=()=>this.$slots?.default?.({errors:x.value,formData:d.value,invalid:u.value,readonly:f.value,status:S.value,wrappers:o,clear:g,ignoreUpdates:y,reset:_,stopUpdatesWatch:b,submit:v,validate:h})??this.$slots.default;return(0,t.h)(this.tag,{onSubmit:(0,t.withModifiers)(this.submit,[`prevent`]),onReset:(0,t.withModifiers)(this.reset,[`prevent`])},(this.template??i?.template)&&a?[(0,t.h)(a,{schema:this.template??i?.template},{default:e})]:{default:e})}})}}function F(e,n,r,i){return(0,t.defineComponent)({name:`VvFormField`,props:{type:{type:String,validator:e=>Object.values(o).includes(e),default:o.custom},is:{type:[Object,String],default:void 0},name:{type:[String,Number,Boolean,Symbol],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValue:{type:[String,Number,Boolean,Array,Object],default:void 0},lazyLoad:{type:Boolean,default:!1},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabel`,`is`,`type`],slots:Object,setup(s,{slots:c,emit:l}){let{props:u,name:d}=(0,t.toRefs)(s),f=(0,t.useId)(),p=(0,t.inject)(n,void 0);p&&p.fields.value.set(f,s.name);let m=(0,t.inject)(e),h=(0,t.computed)({get(){if(m?.formData)return(0,a.getProperty)(new Object(m.formData.value),String(s.name))},set(e){m?.formData&&((0,a.setProperty)(new Object(m.formData.value),String(s.name),e),l(`update:modelValue`,{newValue:h.value,formData:m?.formData}))}});(0,t.onMounted)(()=>{h.value===void 0&&s.defaultValue!==void 0&&(h.value=s.defaultValue)}),(0,t.onBeforeUnmount)(()=>{p&&p.fields.value.delete(f)});let g=(0,t.computed)(()=>{if(m?.errors.value)return(0,a.getProperty)(m.errors.value,String(s.name))}),_=(0,t.computed)(()=>g.value?._errors),v=(0,t.computed)(()=>g.value!==void 0),y=(0,t.watch)(v,e=>{if(e){l(`invalid`,g.value),p&&p.errors.value.set(String(s.name),g.value);return}l(`valid`,h.value),p&&p.errors.value.delete(s.name)}),b=(0,t.watch)(()=>m?.formData,()=>{l(`update:formData`,m?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{y(),b()});let x=e=>{e instanceof InputEvent&&(e=e.target.value),h.value=e},S=(0,t.computed)(()=>{let e=u.value;return typeof e==`function`&&(e=e(m?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),C=(0,t.computed)(()=>m?.readonly.value||p?.readonly.value?!0:S.value.readonly??s.readonly),w=(0,t.computed)(()=>({...S.value,name:S.value.name??s.name,invalid:v.value,valid:s.showValid?!!(!v.value&&h.value):void 0,type:(e=>{if([o.color,o.date,o.datetimeLocal,o.email,o.month,o.number,o.password,o.search,o.tel,o.text,o.time,o.url,o.week].includes(e))return e})(s.type),invalidLabel:_.value,modelValue:h.value,readonly:C.value,"onUpdate:modelValue":x}));return(0,t.provide)(r,{name:(0,t.readonly)(d),errors:(0,t.readonly)(g)}),{component:(0,t.computed)(()=>{if(s.type===o.custom)return{render(){return c.default?.({errors:(0,t.readonly)(g).value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:v.value,invalidLabel:_.value,modelValue:h.value,readonly:C.value,onUpdate:x,submit:m?.submit,validate:m?.validate})??c.default}};if(!(i?.lazyLoad??s.lazyLoad)){let e;switch(s.type){case o.select:e=(0,t.resolveComponent)(`VvSelect`);break;case o.checkbox:e=(0,t.resolveComponent)(`VvCheckbox`);break;case o.radio:e=(0,t.resolveComponent)(`VvRadio`);break;case o.textarea:e=(0,t.resolveComponent)(`VvTextarea`);break;case o.radioGroup:e=(0,t.resolveComponent)(`VvRadioGroup`);break;case o.checkboxGroup:e=(0,t.resolveComponent)(`VvCheckboxGroup`);break;case o.combobox:e=(0,t.resolveComponent)(`VvCombobox`);break;default:e=(0,t.resolveComponent)(`VvInputText`)}if(typeof e!=`string`)return e;console.warn(`[@volverjs/form-vue]: ${e} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return(0,t.defineAsyncComponent)(async()=>{switch(i?.sideEffects&&await Promise.resolve(i.sideEffects(s.type)),s.type){case o.textarea:return import(`@volverjs/ui-vue/vv-textarea`);case o.radio:return import(`@volverjs/ui-vue/vv-radio`);case o.radioGroup:return import(`@volverjs/ui-vue/vv-radio-group`);case o.checkbox:return import(`@volverjs/ui-vue/vv-checkbox`);case o.checkboxGroup:return import(`@volverjs/ui-vue/vv-checkbox-group`);case o.select:return import(`@volverjs/ui-vue/vv-select`);case o.combobox:return import(`@volverjs/ui-vue/vv-combobox`)}return import(`@volverjs/ui-vue/vv-input-text`)})}),hasProps:w,invalid:v}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):this.type===o.custom?(0,t.h)(this.component,null,this.$slots):(0,t.h)(this.component,this.hasProps,this.$slots)}})}function I(e,n,r){return(0,t.defineComponent)({name:`VvFormFieldsGroup`,props:{is:{type:[Object,String],default:void 0},names:{type:[Array,Object],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValues:{type:[Object],default:void 0},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabels`,`is`],slots:Object,setup(i,{slots:o,emit:s}){let{props:c,names:l,defaultValues:u}=(0,t.toRefs)(i),d=(0,t.useId)(),f=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),p=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),m=(0,t.computed)(()=>Array.isArray(l.value)?l.value.reduce((e,t)=>(e[String(t)]=t,e),{}):l.value),h=(0,t.computed)(()=>Object.keys(m.value).reduce((e,t)=>(e[String(m.value[t])]=t,e),{})),g=(0,t.inject)(n,void 0);g&&f.value.forEach(e=>{g.fields.value.set(`${d}-${e}`,e)});let _=(0,t.inject)(e),v=(0,t.computed)({get(){return _?.formData?p.value.reduce((e,t)=>(e[t]=(0,a.getProperty)(new Object(_.formData.value),m.value[t]),e),{}):{}},set(e){_?.formData&&(p.value.forEach(t=>{(0,a.setProperty)(new Object(_.formData.value),m.value[t],e?.[t])}),s(`update:modelValue`,{newValue:v.value,formData:_?.formData}))}});(0,t.onMounted)(()=>{u.value&&f.value.forEach(e=>{u.value?.[e]!==void 0&&v.value[e]===void 0&&(v.value={...v.value,[e]:u.value?.[e]})})}),(0,t.onBeforeUnmount)(()=>{g&&f.value.forEach(e=>{g.fields.value.delete(`${d}-${e}`)})});let y=(0,t.computed)(()=>{if(!_?.errors.value)return;let e=f.value.reduce((e,t)=>{if(!_.errors.value)return e;let n=(0,a.getProperty)(_.errors.value,String(t));return n===void 0||(e[String(t)]=n),e},{});if(Object.keys(e).length!==0)return e}),b=(0,t.computed)(()=>{if(!y.value)return;let e=Object.keys(y.value).reduce((e,t)=>(y.value?.[t]&&(e[h.value[t]]=y.value[t]._errors),e),{});if(Object.keys(e).length!==0)return e}),x=(0,t.computed)(()=>y.value!==void 0),S=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[t]=!!y.value?.[m.value[t]],e),{})),C=(0,t.watch)(x,()=>{if(x.value){s(`invalid`,y.value),g&&f.value.forEach(e=>{if(!y.value?.[e]){g.errors.value.delete(e);return}g.errors.value.set(e,y.value?.[e])});return}s(`valid`,v.value),g&&f.value.forEach(e=>{g.errors.value.delete(e)})}),w=(0,t.watch)(()=>_?.formData,()=>{s(`update:formData`,_?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{C(),w()});let T=e=>{v.value=e},E=(e,t)=>{t instanceof InputEvent&&(t=t.target.value),p.value.includes(e)&&(v.value={...v.value,[e]:t})},D=(0,t.computed)(()=>{let e=c.value;return typeof e==`function`&&(e=e(_?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),O=(0,t.computed)(()=>_?.readonly.value?!0:D.value.readonly??i.readonly),k=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[`onUpdate:${t}`]=e=>{E(t,e)},e),{"onUpdate:modelValue":T})),A=(0,t.computed)(()=>({...k.value,...D.value,...v.value,modelValue:v.value,names:D.value.name??f.value,invalid:x.value,invalids:S.value,valid:i.showValid?!!(!x.value&&v.value):void 0,invalidLabels:b.value,readonly:O.value}));return(0,t.provide)(r,{names:(0,t.readonly)(l),errors:(0,t.readonly)(y)}),{component:(0,t.computed)(()=>({render(){return o.default?.({errors:y.value,formData:_?.formData.value,formErrors:_?.errors.value,invalid:x.value,invalids:S.value,invalidLabels:b.value,modelValue:v.value,onUpdate:T,onUpdateField:E,readonly:O.value,submit:_?.submit,validate:_?.validate})??o.default}})),hasProps:A,invalid:x}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):(0,t.h)(this.component,null,this.$slots)}})}function L(e,n){return(0,t.defineComponent)({name:`VvFormWrapper`,props:{name:{type:String,required:!0},tag:{type:String,default:void 0},readonly:{type:Boolean,default:!1}},emits:[`invalid`,`valid`],expose:[`clear`,`errors`,`fields`,`fieldsErrors`,`formData`,`invalid`,`readonly`,`reset`,`submit`,`tag`,`validate`,`validateWrapper`],slots:Object,setup(r,{emit:i}){let a=(0,t.inject)(e),o=(0,t.inject)(n,void 0),s=(0,t.ref)(new Map),c=(0,t.ref)(new Map),{name:l}=(0,t.toRefs)(r),u=(0,t.computed)(()=>a?.invalid.value?c.value.size>0:!1);(0,t.watch)(u,e=>{if(e){i(`invalid`);return}i(`valid`)});let d=(0,t.computed)(()=>a?.readonly.value||r.readonly),f={name:(0,t.readonly)(l),errors:c,invalid:(0,t.readonly)(u),readonly:(0,t.readonly)(d),fields:s};return(0,t.provide)(n,f),(0,t.watch)((0,t.computed)(()=>new Map(s.value)),(e,t)=>{o?.fields&&(t.forEach((t,n)=>{e.has(n)||o?.fields.value.delete(n)}),e.forEach((e,t)=>{o?.fields.value.has(t)||o?.fields.value.set(t,e)}))},{deep:!0}),(0,t.watch)(c,e=>{o?.errors&&s.value.forEach(t=>{if(e.has(t)||o.errors.value.delete(t),e.has(t)){let n=e.get(t);n&&o.errors.value.set(t,n)}})},{deep:!0}),(0,t.onMounted)(()=>{if(!a?.wrappers||!l.value){console.warn(`[@volverjs/form-vue]: Invalid wrapper registration state`);return}if(a.wrappers.has(l.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${l.value}" is already used`);return}a.wrappers.set(l.value,f)}),(0,t.onBeforeUnmount)(()=>{a?.wrappers&&l.value&&a.wrappers.delete(l.value)}),{errors:a?.errors,fields:s,fieldsErrors:c,formData:a?.formData,invalid:u,readonly:d,clear:a?.clear,reset:a?.reset,submit:a?.submit,validate:a?.validate,validateWrapper:()=>a?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0)}},render(){let e=()=>this.$slots.default?.({errors:this.errors,fieldsErrors:this.fieldsErrors,formData:this.formData,invalid:this.invalid,readonly:this.readonly,clear:this.clear,reset:this.reset,submit:this.submit,validate:this.validate,validateWrapper:this.validateWrapper});return this.tag?(0,t.h)(this.tag,null,{default:e}):e()}})}function R(e,n){let r=(0,t.defineComponent)({name:`VvFormTemplate`,props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(i,{slots:o}){let s=(0,t.inject)(e);if(s?.formData)return()=>{let e=typeof i.schema==`function`?i.schema(s,i.scope):i.schema,c,l=e.reduce((e,o)=>{let{vvIs:l,vvName:u,vvSlots:d,vvChildren:f,vvIf:p,vvElseIf:m,vvType:h,vvDefaultValue:g,vvShowValid:_,vvContent:v,...y}=typeof o==`function`?o(s,i.scope):o;if(p!==void 0){if(c=typeof p==`string`?!!(0,a.getProperty)(new Object(s.formData.value),p):typeof p==`function`?(0,t.unref)(p(s)):(0,t.unref)(p),!c)return e}else if(m!==void 0&&c!==void 0){if(c||(c=typeof m==`string`?!!(0,a.getProperty)(new Object(s.formData.value),m):typeof m==`function`?(0,t.unref)(m(s)):(0,t.unref)(m),!c))return e}else c=void 0;let b;return f&&(b=typeof l==`string`?(0,t.h)(r,{schema:f}):{default:e=>(0,t.h)(r,{schema:f,scope:e})}),u?(e.push((0,t.h)(n,{name:u,is:l,type:h,defaultValue:g,showValid:_,props:y},d??b??v)),e):l?(e.push((0,t.h)(l,y,d??b??v)),e):(b&&(`default`in b?e.push(b.default(i.scope)):e.push(b)),e)},[]);return l.push(o?.default?.({errors:s?.errors.value,formData:s?.formData.value,invalid:s?.invalid.value,status:s?.status.value,submit:s?.submit,validate:s?.validate,clear:s?.clear,reset:s?.reset})),l}}});return r}function z(e,t={}){let n=Symbol(`formInjectionKey`),r=Symbol(`formWrapperInjectionKey`),i=Symbol(`formFieldInjectionKey`),a=Symbol(`formFieldsGroupInjectionKey`),o=L(n,r),s=F(n,r,i,t),c=I(n,r,a),l=R(n,s),u=new Map,{clear:d,errors:f,formData:p,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,VvForm:S}=P(e,n,t,l,u);return{clear:d,errors:f,formData:p,formFieldInjectionKey:i,formInjectionKey:n,formWrapperInjectionKey:r,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,wrappers:u,VvForm:S,VvFormField:s,VvFormFieldsGroup:c,VvFormTemplate:l,VvFormWrapper:o}}var B=Symbol(`pluginInjectionKey`);function V(e){let t={};return e.schema&&(t=z(e.schema,e)),{...t,install(n,{global:r=!1}={}){n.provide(B,e),r&&(n.config.globalProperties.$vvForm=e,t?.VvForm&&n.component(`VvForm`,t.VvForm),t?.VvFormWrapper&&n.component(`VvFormWrapper`,t.VvFormWrapper),t?.VvFormField&&n.component(`VvFormField`,t.VvFormField),t?.VvFormFieldsGroup&&n.component(`VvFormFieldsGroup`,t.VvFormFieldsGroup),t?.VvFormTemplate&&n.component(`VvFormTemplate`,t.VvFormTemplate))}}}var H=new Map;function U(e,n={}){if(n.scope&&H.has(n.scope))return H.get(n.scope);if(!(0,t.getCurrentInstance)()){let t=z(e,n);return n.scope&&H.set(n.scope,t),t}let r=z(e,{...(0,t.inject)(B,{}),...n});return n.scope&&H.set(n.scope,r),r}function W(e,t={}){return z(e,t)}e.FormFieldType=o,e.createForm=V,e.defaultObjectBySchema=A,e.formType=W,e.pluginInjectionKey=B,e.useForm=U});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("vue"),require("@vueuse/core"),require("zod/v3"),require("zod/v4/core"),require("dot-prop")):typeof define==`function`&&define.amd?define([`exports`,`vue`,`@vueuse/core`,`zod/v3`,`zod/v4/core`,`dot-prop`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`@volverjs/form-vue`]={},e.Vue,e.VueUseCore,e.zodV3,e.zodV4Core,e.dotProp))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=function(e){return e.text=`text`,e.number=`number`,e.email=`email`,e.password=`password`,e.tel=`tel`,e.url=`url`,e.search=`search`,e.date=`date`,e.time=`time`,e.datetimeLocal=`datetime-local`,e.month=`month`,e.week=`week`,e.color=`color`,e.select=`select`,e.checkbox=`checkbox`,e.radio=`radio`,e.textarea=`textarea`,e.radioGroup=`radioGroup`,e.checkboxGroup=`checkboxGroup`,e.combobox=`combobox`,e.custom=`custom`,e}({}),s=function(e){return e.invalid=`invalid`,e.valid=`valid`,e.submitting=`submitting`,e.reset=`reset`,e.updated=`updated`,e.unknown=`unknown`,e}({});function c(e){return Array.isArray(e)?`array`:e===null?`null`:typeof e}function l(e,t){let n=c(e);return t.type?Array.isArray(t.type)?t.type.some(t=>t===n||t===`integer`&&n===`number`&&Number.isInteger(e)):t.type===n||t.type===`integer`&&n===`number`&&Number.isInteger(e):!0}var u=e=>e._def.typeName===`ZodObject`,d=e=>e._zod.def.type===`object`,f=e=>e._def.typeName===`ZodDefault`,p=e=>e._zod.def.type==="default",m=e=>e._def.typeName===`ZodNullable`,h=e=>e._zod.def.type===`nullable`,g=e=>e._def.typeName===`ZodRecord`,_=e=>e._zod.def.type===`record`,v=e=>e._def.typeName===`ZodArray`,y=e=>e._zod.def.type===`array`,b=e=>e._def.typeName===`ZodEffects`,x=e=>e._def.typeName===`ZodOptional`,S=e=>e._zod.def.type===`optional`,C=e=>e._zod.def.type===`pipe`,w=e=>e._zod.def.type===`transform`;function T(e){let t=e;for(;b(t);)t=t.innerType();return t}function E(e){let t=e;for(;C(t);)t=w(t._zod.def.out)?t._zod.def.in:t._zod.def.out;return t}var D=e=>{let t=T(e);return x(t)&&(t=t._def.innerType),t},O=e=>{let t=E(e);return S(t)&&(t=t._zod.def.innerType),t},k=e=>!!x(T(e)),A=e=>!!S(E(e));function j(e,t){if(e.length===0)return t??void 0;if(t!==void 0){for(let n of e)if(l(t,n))return M(n,t);for(let n of e){let e=n;if(!e.type||e.type===`object`)return M(e,t)}}return M(e[0],t)}function M(e,t){if(`const`in e)return e.const;if(e.anyOf&&Array.isArray(e.anyOf))return j(e.anyOf,t);if(e.oneOf&&Array.isArray(e.oneOf))return j(e.oneOf,t);if(e.allOf&&Array.isArray(e.allOf)){let n={...e,allOf:void 0};for(let t of e.allOf){let e=t;e.properties&&(n.properties={...n.properties,...e.properties}),e.type&&!n.type&&(n.type=e.type)}return M(n,t)}if(Array.isArray(e.type)){if(t===null&&e.type.includes(`null`))return null;let n=e.type.find(e=>e!==`null`);return n?M({...e,type:n},t):e.default??null}if(e.type!==`object`||!e.properties)switch(e.type){case`string`:return typeof t==`string`?t:e.default;case`number`:case`integer`:return typeof t==`number`?t:e.default;case`boolean`:return typeof t==`boolean`?t:e.default;case`null`:return t===null?t:e.default;case`array`:return Array.isArray(t)?e.items?t.map(t=>M(e.items,t)):t:e.default;default:return e.default}let n=e.properties,r=t&&typeof t==`object`&&!Array.isArray(t)?t:void 0,i={};for(let e in n){let t=r?.[e];i[e]=M(n[e],t)}if(r&&e.additionalProperties!==!1){let e=new Set(Object.keys(n));for(let[t,n]of Object.entries(r))e.has(t)||(i[t]=n)}return i}var N=e=>`_zod`in e,P={getInnerType:D,isObject:u,hasUnknownKeys:e=>e._def.unknownKeys===`passthrough`,getShapeEntries:e=>`shape`in e?Object.entries(e.shape):[],isOptional:k,isDefault:f,getDefaultValue:e=>e._def.defaultValue(),getDefaultInnerType:e=>e._def.innerType,isNullable:m,safeParse:(e,t)=>e.safeParse(t),isArray:v,getArrayElement:e=>e._def.type,isRecord:g,getRecordValue:e=>e._def.valueType},F={getInnerType:O,isObject:d,hasUnknownKeys:e=>!!(e._zod.def.catchall&&e._zod.def.catchall._zod.def.type!==`never`),getShapeEntries:e=>`shape`in e._zod.def?Object.entries(e._zod.def.shape):[],isOptional:A,isDefault:p,getDefaultValue:e=>e._zod.def.defaultValue,getDefaultInnerType:e=>e._zod.def.innerType,isNullable:h,safeParse:(e,t)=>(0,i.safeParse)(e,t),isArray:y,getArrayElement:e=>e._zod.def.element,isRecord:_,getRecordValue:e=>e._zod.def.valueType};function I(e,t,n){let r=e.getInnerType(e.getArrayElement(t));return e.isObject(r)?n.map(t=>z(e,r,t)):n}function L(e,t,n){let r=e.getInnerType(e.getRecordValue(t));return e.isObject(r)?Object.keys(n).reduce((t,i)=>(t[i]=z(e,r,n[i]),t),{}):n}function R(e,t,n,r){let i=e.isOptional(n),a=e.getInnerType(n),o;if(e.isDefault(a)&&(o=e.getDefaultValue(a),a=e.getDefaultInnerType(a)),r===null&&e.isNullable(a))return[t,r];if(r==null&&i)return[t,o];if(a&&r!==void 0){let i=e.safeParse(n,r);if(i.success)return[t,i.data??o]}return e.isArray(a)&&Array.isArray(r)?[t,I(e,a,r)]:e.isRecord(a)&&r?[t,L(e,a,r)]:e.isObject(a)?[t,z(e,a,r&&typeof r==`object`?r:o)]:[t,o]}function z(e,t,n){let r=n&&typeof n==`object`&&!Array.isArray(n)?n:{};return{...e.hasUnknownKeys(t)?r:{},...Object.fromEntries(e.getShapeEntries(t).map(([t,n])=>R(e,t,n,r[t])))}}function B(e,t={}){let n=N(e)?F:P,r=n.getInnerType(e);return n.isObject(r)?z(n,r,t):t}var V=(e,t)=>N(e)?(0,i.safeParseAsync)(e,t):e.safeParseAsync(t),H=(e,t)=>N(e)?(0,i.formatError)(t):t.format(),U=(e,t)=>N(e)?(0,i.formatError)(new i.$ZodError(t)):new r.ZodError(t).format();function W(e,r,i,a,o){let c=(0,t.ref)(),l=(0,t.ref)(),u=(0,t.computed)(()=>l.value===s.invalid),d=(0,t.ref)(),f=(0,t.ref)(!1),p,m=t=>{let n=B(e,t);if(i?.class){let e=i.class;return new e(n)}return n},h=async(t=d.value,n)=>{if(p=n?.fields,f.value)return!0;let r=await V(e,t);if(!r.success){if(l.value=s.invalid,!p?.size)return c.value=H(e,r.error),!1;let t=r.error.issues.filter(e=>p?.has(e.path.join(`.`)));return t.length?(c.value=U(e,t),!1):(c.value=void 0,!0)}return c.value=void 0,l.value=s.valid,d.value=m(r.data),!0},g=()=>{c.value=void 0,l.value=void 0,p=void 0},_=()=>{d.value=m(),g(),l.value=s.reset},v=async e=>f.value||!await h(void 0,e)?!1:(l.value=s.submitting,!0),{ignoreUpdates:y,stop:b}=(0,n.watchIgnorable)(d,()=>{l.value=s.updated},{deep:!0,eventFilter:(0,n.throttleFilter)(i?.updateThrottle??500)}),x=(0,t.readonly)(c),S=(0,t.readonly)(l);return{clear:g,errors:c,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:l,wrappers:o,stopUpdatesWatch:b,submit:v,validate:h,VvForm:(0,t.defineComponent)({name:`VvForm`,props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:i?.readonly},tag:{type:String,default:`form`},template:{type:[Array,Function],default:void 0},superRefine:{type:Function,default:void 0},validateFields:{type:Array,default:void 0}},emits:[`invalid`,`submit`,`update:modelValue`,`update:readonly`,`valid`,`reset`],expose:[`errors`,`invalid`,`readonly`,`status`,`submit`,`tag`,`template`,`valid`,`validate`,`clear`,`reset`],slots:Object,setup(e,{emit:n}){return d.value=m((0,t.toRaw)(e.modelValue)),(0,t.watch)(()=>e.modelValue,e=>{if(e){let n=(0,t.isProxy)(e)?(0,t.toRaw)(e):e;if(JSON.stringify(n)===JSON.stringify((0,t.toRaw)(d.value)))return;d.value=m(n)}},{deep:!0}),(0,t.watch)(l,async r=>{if(r===s.invalid){let e=(0,t.toRaw)(c.value);n(`invalid`,e),i?.onInvalid?.(e);return}if(r===s.valid){let e=(0,t.toRaw)(d.value);n(`valid`,e),i?.onValid?.(e),n(`update:modelValue`,e),i?.onUpdate?.(e);return}if(r===s.submitting){let e=(0,t.toRaw)(d.value);n(`submit`,e),i?.onSubmit?.(e);return}if(r===s.reset){let e=(0,t.toRaw)(d.value);n(`reset`,e),i?.onReset?.(e);return}if(r===s.updated){if((c.value||i?.continuousValidation||e.continuousValidation)&&await h(void 0,{superRefine:e.superRefine,fields:p??new Set(e.validateFields)}),!d.value||!e.modelValue||JSON.stringify(d.value)!==JSON.stringify(e.modelValue)){let e=(0,t.toRaw)(d.value);n(`update:modelValue`,e),i?.onUpdate?.(e)}l.value===s.updated&&(l.value=s.unknown)}}),(0,t.onMounted)(()=>{e.readonly!==void 0&&(f.value=e.readonly)}),(0,t.watch)(()=>e.readonly,e=>{f.value=e}),(0,t.watch)(f,t=>{t!==e.readonly&&n(`update:readonly`,f.value)}),(0,t.provide)(r,{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:v,validate:h,wrappers:o}),{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,isReadonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:()=>v({superRefine:e.superRefine,fields:new Set(e.validateFields)}),validate:h,wrappers:o}},render(){let e=()=>this.$slots?.default?.({errors:x.value,formData:d.value,invalid:u.value,readonly:f.value,status:S.value,wrappers:o,clear:g,ignoreUpdates:y,reset:_,stopUpdatesWatch:b,submit:v,validate:h})??this.$slots.default;return(0,t.h)(this.tag,{onSubmit:(0,t.withModifiers)(this.submit,[`prevent`]),onReset:(0,t.withModifiers)(this.reset,[`prevent`])},(this.template??i?.template)&&a?[(0,t.h)(a,{schema:this.template??i?.template},{default:e})]:{default:e})}})}}function G(e,n,r,i){return(0,t.defineComponent)({name:`VvFormField`,props:{type:{type:String,validator:e=>Object.values(o).includes(e),default:o.custom},is:{type:[Object,String],default:void 0},name:{type:[String,Number,Boolean,Symbol],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValue:{type:[String,Number,Boolean,Array,Object],default:void 0},lazyLoad:{type:Boolean,default:!1},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabel`,`is`,`type`],slots:Object,setup(s,{slots:c,emit:l}){let{props:u,name:d}=(0,t.toRefs)(s),f=(0,t.useId)(),p=(0,t.inject)(n,void 0);p&&p.fields.value.set(f,s.name);let m=(0,t.inject)(e),h=(0,t.computed)({get(){if(m?.formData)return(0,a.getProperty)(new Object(m.formData.value),String(s.name))},set(e){m?.formData&&((0,a.setProperty)(new Object(m.formData.value),String(s.name),e),l(`update:modelValue`,{newValue:h.value,formData:m?.formData}))}});(0,t.onMounted)(()=>{h.value===void 0&&s.defaultValue!==void 0&&(h.value=s.defaultValue)}),(0,t.onBeforeUnmount)(()=>{p&&p.fields.value.delete(f)});let g=(0,t.computed)(()=>{if(m?.errors.value)return(0,a.getProperty)(m.errors.value,String(s.name))}),_=(0,t.computed)(()=>g.value?._errors),v=(0,t.computed)(()=>g.value!==void 0),y=(0,t.watch)(v,e=>{if(e){l(`invalid`,g.value),p&&p.errors.value.set(String(s.name),g.value);return}l(`valid`,h.value),p&&p.errors.value.delete(s.name)}),b=(0,t.watch)(()=>m?.formData,()=>{l(`update:formData`,m?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{y(),b()});let x=e=>{e instanceof InputEvent&&(e=e.target.value),h.value=e},S=(0,t.computed)(()=>{let e=u.value;return typeof e==`function`&&(e=e(m?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),C=(0,t.computed)(()=>m?.readonly.value||p?.readonly.value?!0:S.value.readonly??s.readonly),w=(0,t.computed)(()=>({...S.value,name:S.value.name??s.name,invalid:v.value,valid:s.showValid?!!(!v.value&&h.value):void 0,type:(e=>{if([o.color,o.date,o.datetimeLocal,o.email,o.month,o.number,o.password,o.search,o.tel,o.text,o.time,o.url,o.week].includes(e))return e})(s.type),invalidLabel:_.value,modelValue:h.value,readonly:C.value,"onUpdate:modelValue":x}));return(0,t.provide)(r,{name:(0,t.readonly)(d),errors:(0,t.readonly)(g)}),{component:(0,t.computed)(()=>{if(s.type===o.custom)return{render(){return c.default?.({errors:(0,t.readonly)(g).value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:v.value,invalidLabel:_.value,modelValue:h.value,readonly:C.value,onUpdate:x,submit:m?.submit,validate:m?.validate})??c.default}};if(!(i?.lazyLoad??s.lazyLoad)){let e;switch(s.type){case o.select:e=(0,t.resolveComponent)(`VvSelect`);break;case o.checkbox:e=(0,t.resolveComponent)(`VvCheckbox`);break;case o.radio:e=(0,t.resolveComponent)(`VvRadio`);break;case o.textarea:e=(0,t.resolveComponent)(`VvTextarea`);break;case o.radioGroup:e=(0,t.resolveComponent)(`VvRadioGroup`);break;case o.checkboxGroup:e=(0,t.resolveComponent)(`VvCheckboxGroup`);break;case o.combobox:e=(0,t.resolveComponent)(`VvCombobox`);break;default:e=(0,t.resolveComponent)(`VvInputText`)}if(typeof e!=`string`)return e;console.warn(`[@volverjs/form-vue]: ${e} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return(0,t.defineAsyncComponent)(async()=>{switch(i?.sideEffects&&await Promise.resolve(i.sideEffects(s.type)),s.type){case o.textarea:return import(`@volverjs/ui-vue/vv-textarea`);case o.radio:return import(`@volverjs/ui-vue/vv-radio`);case o.radioGroup:return import(`@volverjs/ui-vue/vv-radio-group`);case o.checkbox:return import(`@volverjs/ui-vue/vv-checkbox`);case o.checkboxGroup:return import(`@volverjs/ui-vue/vv-checkbox-group`);case o.select:return import(`@volverjs/ui-vue/vv-select`);case o.combobox:return import(`@volverjs/ui-vue/vv-combobox`)}return import(`@volverjs/ui-vue/vv-input-text`)})}),hasProps:w,invalid:v}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):this.type===o.custom?(0,t.h)(this.component,null,this.$slots):(0,t.h)(this.component,this.hasProps,this.$slots)}})}function K(e,n,r){return(0,t.defineComponent)({name:`VvFormFieldsGroup`,props:{is:{type:[Object,String],default:void 0},names:{type:[Array,Object],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValues:{type:[Object],default:void 0},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabels`,`is`],slots:Object,setup(i,{slots:o,emit:s}){let{props:c,names:l,defaultValues:u}=(0,t.toRefs)(i),d=(0,t.useId)(),f=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),p=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),m=(0,t.computed)(()=>Array.isArray(l.value)?l.value.reduce((e,t)=>(e[String(t)]=t,e),{}):l.value),h=(0,t.computed)(()=>Object.keys(m.value).reduce((e,t)=>(e[String(m.value[t])]=t,e),{})),g=(0,t.inject)(n,void 0);g&&f.value.forEach(e=>{g.fields.value.set(`${d}-${e}`,e)});let _=(0,t.inject)(e),v=(0,t.computed)({get(){return _?.formData?p.value.reduce((e,t)=>(e[t]=(0,a.getProperty)(new Object(_.formData.value),m.value[t]),e),{}):{}},set(e){_?.formData&&(p.value.forEach(t=>{(0,a.setProperty)(new Object(_.formData.value),m.value[t],e?.[t])}),s(`update:modelValue`,{newValue:v.value,formData:_?.formData}))}});(0,t.onMounted)(()=>{u.value&&f.value.forEach(e=>{u.value?.[e]!==void 0&&v.value[e]===void 0&&(v.value={...v.value,[e]:u.value?.[e]})})}),(0,t.onBeforeUnmount)(()=>{g&&f.value.forEach(e=>{g.fields.value.delete(`${d}-${e}`)})});let y=(0,t.computed)(()=>{if(!_?.errors.value)return;let e=f.value.reduce((e,t)=>{if(!_.errors.value)return e;let n=(0,a.getProperty)(_.errors.value,String(t));return n===void 0||(e[String(t)]=n),e},{});if(Object.keys(e).length!==0)return e}),b=(0,t.computed)(()=>{if(!y.value)return;let e=Object.keys(y.value).reduce((e,t)=>(y.value?.[t]&&(e[h.value[t]]=y.value[t]._errors),e),{});if(Object.keys(e).length!==0)return e}),x=(0,t.computed)(()=>y.value!==void 0),S=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[t]=!!y.value?.[m.value[t]],e),{})),C=(0,t.watch)(x,()=>{if(x.value){s(`invalid`,y.value),g&&f.value.forEach(e=>{if(!y.value?.[e]){g.errors.value.delete(e);return}g.errors.value.set(e,y.value?.[e])});return}s(`valid`,v.value),g&&f.value.forEach(e=>{g.errors.value.delete(e)})}),w=(0,t.watch)(()=>_?.formData,()=>{s(`update:formData`,_?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{C(),w()});let T=e=>{v.value=e},E=(e,t)=>{t instanceof InputEvent&&(t=t.target.value),p.value.includes(e)&&(v.value={...v.value,[e]:t})},D=(0,t.computed)(()=>{let e=c.value;return typeof e==`function`&&(e=e(_?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),O=(0,t.computed)(()=>_?.readonly.value?!0:D.value.readonly??i.readonly),k=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[`onUpdate:${t}`]=e=>{E(t,e)},e),{"onUpdate:modelValue":T})),A=(0,t.computed)(()=>({...k.value,...D.value,...v.value,modelValue:v.value,names:D.value.name??f.value,invalid:x.value,invalids:S.value,valid:i.showValid?!!(!x.value&&v.value):void 0,invalidLabels:b.value,readonly:O.value}));return(0,t.provide)(r,{names:(0,t.readonly)(l),errors:(0,t.readonly)(y)}),{component:(0,t.computed)(()=>({render(){return o.default?.({errors:y.value,formData:_?.formData.value,formErrors:_?.errors.value,invalid:x.value,invalids:S.value,invalidLabels:b.value,modelValue:v.value,onUpdate:T,onUpdateField:E,readonly:O.value,submit:_?.submit,validate:_?.validate})??o.default}})),hasProps:A,invalid:x}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):(0,t.h)(this.component,null,this.$slots)}})}function q(e,n){return(0,t.defineComponent)({name:`VvFormWrapper`,props:{name:{type:String,required:!0},tag:{type:String,default:void 0},readonly:{type:Boolean,default:!1}},emits:[`invalid`,`valid`],expose:[`clear`,`errors`,`fields`,`fieldsErrors`,`formData`,`invalid`,`readonly`,`reset`,`submit`,`tag`,`validate`,`validateWrapper`],slots:Object,setup(r,{emit:i}){let a=(0,t.inject)(e),o=(0,t.inject)(n,void 0),s=(0,t.ref)(new Map),c=(0,t.ref)(new Map),{name:l}=(0,t.toRefs)(r),u=(0,t.computed)(()=>a?.invalid.value?c.value.size>0:!1);(0,t.watch)(u,e=>{if(e){i(`invalid`);return}i(`valid`)});let d=(0,t.computed)(()=>a?.readonly.value||r.readonly),f={name:(0,t.readonly)(l),errors:c,invalid:(0,t.readonly)(u),readonly:(0,t.readonly)(d),fields:s};return(0,t.provide)(n,f),(0,t.watch)((0,t.computed)(()=>new Map(s.value)),(e,t)=>{o?.fields&&(t.forEach((t,n)=>{e.has(n)||o?.fields.value.delete(n)}),e.forEach((e,t)=>{o?.fields.value.has(t)||o?.fields.value.set(t,e)}))},{deep:!0}),(0,t.watch)(c,e=>{o?.errors&&s.value.forEach(t=>{if(e.has(t)||o.errors.value.delete(t),e.has(t)){let n=e.get(t);n&&o.errors.value.set(t,n)}})},{deep:!0}),(0,t.onMounted)(()=>{if(!a?.wrappers||!l.value){console.warn(`[@volverjs/form-vue]: Invalid wrapper registration state`);return}if(a.wrappers.has(l.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${l.value}" is already used`);return}a.wrappers.set(l.value,f)}),(0,t.onBeforeUnmount)(()=>{a?.wrappers&&l.value&&a.wrappers.delete(l.value)}),{errors:a?.errors,fields:s,fieldsErrors:c,formData:a?.formData,invalid:u,readonly:d,clear:a?.clear,reset:a?.reset,submit:a?.submit,validate:a?.validate,validateWrapper:()=>a?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0)}},render(){let e=()=>this.$slots.default?.({errors:this.errors,fieldsErrors:this.fieldsErrors,formData:this.formData,invalid:this.invalid,readonly:this.readonly,clear:this.clear,reset:this.reset,submit:this.submit,validate:this.validate,validateWrapper:this.validateWrapper});return this.tag?(0,t.h)(this.tag,null,{default:e}):e()}})}function J(e,n){let r=(0,t.defineComponent)({name:`VvFormTemplate`,props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(i,{slots:o}){let s=(0,t.inject)(e);if(s?.formData)return()=>{let e=typeof i.schema==`function`?i.schema(s,i.scope):i.schema,c,l=e.reduce((e,o)=>{let{vvIs:l,vvName:u,vvSlots:d,vvChildren:f,vvIf:p,vvElseIf:m,vvType:h,vvDefaultValue:g,vvShowValid:_,vvContent:v,...y}=typeof o==`function`?o(s,i.scope):o;if(p!==void 0){if(c=typeof p==`string`?!!(0,a.getProperty)(new Object(s.formData.value),p):typeof p==`function`?(0,t.unref)(p(s)):(0,t.unref)(p),!c)return e}else if(m!==void 0&&c!==void 0){if(c||(c=typeof m==`string`?!!(0,a.getProperty)(new Object(s.formData.value),m):typeof m==`function`?(0,t.unref)(m(s)):(0,t.unref)(m),!c))return e}else c=void 0;let b;return f&&(b=typeof l==`string`?(0,t.h)(r,{schema:f}):{default:e=>(0,t.h)(r,{schema:f,scope:e})}),u?(e.push((0,t.h)(n,{name:u,is:l,type:h,defaultValue:g,showValid:_,props:y},d??b??v)),e):l?(e.push((0,t.h)(l,y,d??b??v)),e):(b&&(`default`in b?e.push(b.default(i.scope)):e.push(b)),e)},[]);return l.push(o?.default?.({errors:s?.errors.value,formData:s?.formData.value,invalid:s?.invalid.value,status:s?.status.value,submit:s?.submit,validate:s?.validate,clear:s?.clear,reset:s?.reset})),l}}});return r}function Y(e,t={}){let n=Symbol(`formInjectionKey`),r=Symbol(`formWrapperInjectionKey`),i=Symbol(`formFieldInjectionKey`),a=Symbol(`formFieldsGroupInjectionKey`),o=q(n,r),s=G(n,r,i,t),c=K(n,r,a),l=J(n,s),u=new Map,{clear:d,errors:f,formData:p,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,VvForm:S}=W(e,n,t,l,u);return{clear:d,errors:f,formData:p,formFieldInjectionKey:i,formInjectionKey:n,formWrapperInjectionKey:r,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,wrappers:u,VvForm:S,VvFormField:s,VvFormFieldsGroup:c,VvFormTemplate:l,VvFormWrapper:o}}var X=Symbol(`pluginInjectionKey`);function Z(e){let t={};return e.schema&&(t=Y(e.schema,e)),{...t,install(n,{global:r=!1}={}){n.provide(X,e),r&&(n.config.globalProperties.$vvForm=e,t?.VvForm&&n.component(`VvForm`,t.VvForm),t?.VvFormWrapper&&n.component(`VvFormWrapper`,t.VvFormWrapper),t?.VvFormField&&n.component(`VvFormField`,t.VvFormField),t?.VvFormFieldsGroup&&n.component(`VvFormFieldsGroup`,t.VvFormFieldsGroup),t?.VvFormTemplate&&n.component(`VvFormTemplate`,t.VvFormTemplate))}}}var Q=new Map;function $(e,n={}){if(n.scope&&Q.has(n.scope))return Q.get(n.scope);if(!(0,t.getCurrentInstance)()){let t=Y(e,n);return n.scope&&Q.set(n.scope,t),t}let r=Y(e,{...(0,t.inject)(X,{}),...n});return n.scope&&Q.set(n.scope,r),r}function ee(e,t={}){return Y(e,t)}e.FormFieldType=o,e.createForm=Z,e.defaultObjectByJSONSchema=M,e.defaultObjectBySchema=B,e.formType=ee,e.pluginInjectionKey=X,e.useForm=$});
|
|
@@ -46,7 +46,7 @@ export declare function defineFormField<Schema extends FormSchema, Type = undefi
|
|
|
46
46
|
name: {} | ([{
|
|
47
47
|
type: PropType<Path<InferSchema<Schema>>>;
|
|
48
48
|
required: true;
|
|
49
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
49
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
50
50
|
type: PropType<Path<InferSchema<Schema>>>;
|
|
51
51
|
required: true;
|
|
52
52
|
});
|
|
@@ -104,7 +104,7 @@ export declare function defineFormField<Schema extends FormSchema, Type = undefi
|
|
|
104
104
|
props: [{
|
|
105
105
|
type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
|
|
106
106
|
default: () => {};
|
|
107
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
107
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
108
108
|
type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
|
|
109
109
|
default: () => {};
|
|
110
110
|
};
|
|
@@ -76,7 +76,7 @@ export declare function defineFormFieldsGroup<Schema extends FormSchema, Type =
|
|
|
76
76
|
props: [{
|
|
77
77
|
type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
|
|
78
78
|
default: () => {};
|
|
79
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
79
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
80
80
|
type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
|
|
81
81
|
default: () => {};
|
|
82
82
|
};
|
|
@@ -85,7 +85,7 @@ export declare function defineFormFieldsGroup<Schema extends FormSchema, Type =
|
|
|
85
85
|
defaultValues: [{
|
|
86
86
|
type: PropType<Record<Path<InferSchema<Schema>>, any>>;
|
|
87
87
|
default: undefined;
|
|
88
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
88
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
89
89
|
type: PropType<Record<Path<InferSchema<Schema>>, any>>;
|
|
90
90
|
default: undefined;
|
|
91
91
|
};
|
package/dist/src/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { defineForm } from './VvForm';
|
|
|
3
3
|
import { defineFormField } from './VvFormField';
|
|
4
4
|
import { defineFormFieldsGroup } from './VvFormFieldsGroup';
|
|
5
5
|
import { defineFormWrapper } from './VvFormWrapper';
|
|
6
|
+
import { defineFormTemplate } from './VvFormTemplate';
|
|
6
7
|
import { InjectedFormData, InjectedFormWrapperData, InjectedFormFieldData, FormComposableOptions, FormPluginOptions, FormTemplateItem, Path, PathValue, FormSchema, FormTemplate } from './types';
|
|
7
8
|
declare function _formType<Schema extends FormSchema, Type>(schema: Schema, options?: FormComposableOptions<Schema, Type>): {
|
|
8
9
|
clear: () => void;
|
|
@@ -182,7 +183,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
|
|
|
182
183
|
name: {} | ([{
|
|
183
184
|
type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
|
|
184
185
|
required: true;
|
|
185
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
186
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
186
187
|
type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
|
|
187
188
|
required: true;
|
|
188
189
|
});
|
|
@@ -240,7 +241,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
|
|
|
240
241
|
props: [{
|
|
241
242
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
242
243
|
default: () => {};
|
|
243
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
244
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
244
245
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
245
246
|
default: () => {};
|
|
246
247
|
};
|
|
@@ -342,7 +343,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
|
|
|
342
343
|
props: [{
|
|
343
344
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
344
345
|
default: () => {};
|
|
345
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
346
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
346
347
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
347
348
|
default: () => {};
|
|
348
349
|
};
|
|
@@ -351,7 +352,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
|
|
|
351
352
|
defaultValues: [{
|
|
352
353
|
type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
|
|
353
354
|
default: undefined;
|
|
354
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
355
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
355
356
|
type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
|
|
356
357
|
default: undefined;
|
|
357
358
|
};
|
|
@@ -484,12 +485,12 @@ export declare const pluginInjectionKey: InjectionKey<FormPluginOptions>;
|
|
|
484
485
|
export declare function createForm(options: FormPluginOptions): Plugin & Partial<ReturnType<typeof useForm>>;
|
|
485
486
|
export declare function useForm<Schema extends FormSchema, Type>(schema: Schema, options?: FormComposableOptions<Schema, Type>): ReturnType<typeof _formType<Schema, Type>>;
|
|
486
487
|
export { FormFieldType } from './enums';
|
|
487
|
-
export { defaultObjectBySchema } from './utils';
|
|
488
|
+
export { defaultObjectByJSONSchema, defaultObjectBySchema } from './utils';
|
|
488
489
|
type FormComponent = ReturnType<typeof defineForm>;
|
|
489
490
|
type FormWrapperComponent = ReturnType<typeof defineFormWrapper>;
|
|
490
491
|
type FormFieldComponent = ReturnType<typeof defineFormField>;
|
|
491
492
|
type FormFieldsGroupComponent = ReturnType<typeof defineFormFieldsGroup>;
|
|
492
|
-
type FormTemplateComponent = ReturnType<typeof
|
|
493
|
+
type FormTemplateComponent = ReturnType<typeof defineFormTemplate>;
|
|
493
494
|
export type { FormComponent, FormComposableOptions, FormFieldComponent, FormFieldsGroupComponent, FormPluginOptions, FormSchema, FormTemplate, FormTemplateComponent, FormTemplateItem, FormWrapperComponent, InjectedFormData, InjectedFormFieldData, InjectedFormWrapperData, Path, PathValue, };
|
|
494
495
|
/**
|
|
495
496
|
* @deprecated Use `useForm()` instead
|
|
@@ -672,7 +673,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
|
|
|
672
673
|
name: {} | ([{
|
|
673
674
|
type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
|
|
674
675
|
required: true;
|
|
675
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
676
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
676
677
|
type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
|
|
677
678
|
required: true;
|
|
678
679
|
});
|
|
@@ -730,7 +731,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
|
|
|
730
731
|
props: [{
|
|
731
732
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
732
733
|
default: () => {};
|
|
733
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
734
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
734
735
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
735
736
|
default: () => {};
|
|
736
737
|
};
|
|
@@ -832,7 +833,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
|
|
|
832
833
|
props: [{
|
|
833
834
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
834
835
|
default: () => {};
|
|
835
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
836
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
836
837
|
type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
|
|
837
838
|
default: () => {};
|
|
838
839
|
};
|
|
@@ -841,7 +842,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
|
|
|
841
842
|
defaultValues: [{
|
|
842
843
|
type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
|
|
843
844
|
default: undefined;
|
|
844
|
-
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('
|
|
845
|
+
}] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
|
|
845
846
|
type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
|
|
846
847
|
default: undefined;
|
|
847
848
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volverjs/form-vue",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.3",
|
|
5
5
|
"description": "Vue 3 Forms with @volverjs/ui-vue",
|
|
6
6
|
"author": "8 Wave S.r.l.",
|
|
7
7
|
"license": "MIT",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"src"
|
|
48
48
|
],
|
|
49
49
|
"engines": {
|
|
50
|
-
"node": ">=
|
|
50
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"@volverjs/ui-vue": "^0.0.12",
|
|
@@ -60,29 +60,29 @@
|
|
|
60
60
|
"@antfu/eslint-config": "^9.0.0",
|
|
61
61
|
"@nabla/vite-plugin-eslint": "^3.0.1",
|
|
62
62
|
"@testing-library/vue": "^8.1.0",
|
|
63
|
-
"@vitejs/plugin-vue": "^6.0.
|
|
64
|
-
"@vitest/browser-playwright": "^4.1.
|
|
65
|
-
"@volverjs/style": "^0.1.
|
|
63
|
+
"@vitejs/plugin-vue": "^6.0.7",
|
|
64
|
+
"@vitest/browser-playwright": "^4.1.9",
|
|
65
|
+
"@volverjs/style": "^0.1.24",
|
|
66
66
|
"@volverjs/ui-vue": "^0.0.12",
|
|
67
|
-
"@vue/compiler-dom": "^3.5.
|
|
68
|
-
"@vue/compiler-sfc": "^3.5.
|
|
69
|
-
"@vue/language-core": "^3.
|
|
70
|
-
"@vue/runtime-core": "^3.5.
|
|
71
|
-
"@vue/shared": "^3.5.
|
|
72
|
-
"@vue/test-utils": "^2.4.
|
|
67
|
+
"@vue/compiler-dom": "^3.5.38",
|
|
68
|
+
"@vue/compiler-sfc": "^3.5.38",
|
|
69
|
+
"@vue/language-core": "^3.3.5",
|
|
70
|
+
"@vue/runtime-core": "^3.5.38",
|
|
71
|
+
"@vue/shared": "^3.5.38",
|
|
72
|
+
"@vue/test-utils": "^2.4.11",
|
|
73
73
|
"@vueuse/core": "^14.3.0",
|
|
74
74
|
"copy": "^0.3.2",
|
|
75
75
|
"dot-prop": "^10.1.0",
|
|
76
|
-
"eslint": "^10.
|
|
77
|
-
"happy-dom": "^20.
|
|
78
|
-
"playwright": "^1.
|
|
76
|
+
"eslint": "^10.5.0",
|
|
77
|
+
"happy-dom": "^20.10.3",
|
|
78
|
+
"playwright": "^1.61.0",
|
|
79
79
|
"typescript": "^6.0.3",
|
|
80
|
-
"vite": "^8.0.
|
|
81
|
-
"vite-plugin-dts": "^5.0.
|
|
80
|
+
"vite": "^8.0.16",
|
|
81
|
+
"vite-plugin-dts": "^5.0.2",
|
|
82
82
|
"vite-plugin-externalize-deps": "^0.10.0",
|
|
83
|
-
"vitest": "^4.1.
|
|
83
|
+
"vitest": "^4.1.9",
|
|
84
84
|
"vitest-browser-vue": "^2.1.0",
|
|
85
|
-
"vue": "^3.5.
|
|
85
|
+
"vue": "^3.5.38",
|
|
86
86
|
"zod": "^4.4.3"
|
|
87
87
|
},
|
|
88
88
|
"scripts": {
|
package/src/VvForm.ts
CHANGED
|
@@ -207,9 +207,7 @@ export function defineForm<Schema extends FormSchema, Type, FormTemplateComponen
|
|
|
207
207
|
return
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
formData.value =
|
|
211
|
-
? original.clone()
|
|
212
|
-
: JSON.parse(JSON.stringify(original))
|
|
210
|
+
formData.value = formDataAdapter(original as InferSchema<Schema>)
|
|
213
211
|
}
|
|
214
212
|
},
|
|
215
213
|
{ deep: true },
|
package/src/index.ts
CHANGED
|
@@ -128,7 +128,7 @@ export function createForm(options: FormPluginOptions): Plugin & Partial<ReturnT
|
|
|
128
128
|
const formInstances: Map<string, ReturnType<typeof _formType>> = new Map()
|
|
129
129
|
export function useForm<Schema extends FormSchema, Type>(schema: Schema, options: FormComposableOptions<Schema, Type> = {}): ReturnType <typeof _formType<Schema, Type>> {
|
|
130
130
|
if (options.scope && formInstances.has(options.scope)) {
|
|
131
|
-
return formInstances.get(options.scope)
|
|
131
|
+
return formInstances.get(options.scope)!
|
|
132
132
|
}
|
|
133
133
|
if (!getCurrentInstance()) {
|
|
134
134
|
const toReturn = _formType(schema, options)
|
|
@@ -151,13 +151,13 @@ export function useForm<Schema extends FormSchema, Type>(schema: Schema, options
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
export { FormFieldType } from './enums'
|
|
154
|
-
export { defaultObjectBySchema } from './utils'
|
|
154
|
+
export { defaultObjectByJSONSchema, defaultObjectBySchema } from './utils'
|
|
155
155
|
|
|
156
156
|
type FormComponent = ReturnType<typeof defineForm>
|
|
157
157
|
type FormWrapperComponent = ReturnType<typeof defineFormWrapper>
|
|
158
158
|
type FormFieldComponent = ReturnType<typeof defineFormField>
|
|
159
159
|
type FormFieldsGroupComponent = ReturnType<typeof defineFormFieldsGroup>
|
|
160
|
-
type FormTemplateComponent = ReturnType<typeof
|
|
160
|
+
type FormTemplateComponent = ReturnType<typeof defineFormTemplate>
|
|
161
161
|
|
|
162
162
|
export type {
|
|
163
163
|
FormComponent,
|
package/src/shims.d.ts
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
+
declare module '@volverjs/style'
|
|
1
2
|
declare module '@volverjs/style/*'
|
|
3
|
+
|
|
4
|
+
declare module '*.vue' {
|
|
5
|
+
import type { DefineComponent } from 'vue'
|
|
6
|
+
|
|
7
|
+
const component: DefineComponent<Record<string, unknown>, Record<string, unknown>, any>
|
|
8
|
+
export default component
|
|
9
|
+
}
|
package/src/utils.ts
CHANGED
|
@@ -319,178 +319,141 @@ export const isZod4Schema = (schema: z3.ZodTypeAny | z4.$ZodType): schema is z4.
|
|
|
319
319
|
return false
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
const valueType = getZod4SchemaInnerType(innerType._zod.def.valueType)
|
|
383
|
-
if (isZod4Object(valueType)) {
|
|
384
|
-
return [key, Object.keys(originalValue).reduce((acc: Record<string, unknown>, recordKey: string) => {
|
|
385
|
-
acc[recordKey] = defaultObjectBySchema(valueType, originalValue[recordKey])
|
|
386
|
-
return acc
|
|
387
|
-
}, {})]
|
|
388
|
-
}
|
|
389
|
-
return [key, originalValue]
|
|
390
|
-
}
|
|
391
|
-
if (isZod4Object(innerType)) {
|
|
392
|
-
return [
|
|
393
|
-
key,
|
|
394
|
-
defaultObjectBySchema(
|
|
395
|
-
innerType,
|
|
396
|
-
originalValue
|
|
397
|
-
&& typeof originalValue === 'object'
|
|
398
|
-
? originalValue
|
|
399
|
-
: defaultValue,
|
|
400
|
-
),
|
|
401
|
-
]
|
|
402
|
-
}
|
|
403
|
-
return [key, defaultValue]
|
|
404
|
-
},
|
|
405
|
-
),
|
|
406
|
-
),
|
|
407
|
-
} as Partial<InferSchema<Schema>>
|
|
322
|
+
/**
|
|
323
|
+
* Adapter that abstracts the version-specific Zod internals (zod v3 vs v4) so
|
|
324
|
+
* that the `defaultObjectBySchema` algorithm can be written once.
|
|
325
|
+
*/
|
|
326
|
+
interface ZodAdapter {
|
|
327
|
+
getInnerType: (schema: any) => any
|
|
328
|
+
isObject: (schema: any) => boolean
|
|
329
|
+
hasUnknownKeys: (objectSchema: any) => boolean
|
|
330
|
+
getShapeEntries: (objectSchema: any) => [string, any][]
|
|
331
|
+
isOptional: (schema: any) => boolean
|
|
332
|
+
isDefault: (schema: any) => boolean
|
|
333
|
+
getDefaultValue: (schema: any) => unknown
|
|
334
|
+
getDefaultInnerType: (schema: any) => any
|
|
335
|
+
isNullable: (schema: any) => boolean
|
|
336
|
+
safeParse: (schema: any, value: unknown) => { success: boolean, data?: unknown }
|
|
337
|
+
isArray: (schema: any) => boolean
|
|
338
|
+
getArrayElement: (schema: any) => any
|
|
339
|
+
isRecord: (schema: any) => boolean
|
|
340
|
+
getRecordValue: (schema: any) => any
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const zod3Adapter: ZodAdapter = {
|
|
344
|
+
getInnerType: getZod3SchemaInnerType,
|
|
345
|
+
isObject: isZod3Object,
|
|
346
|
+
hasUnknownKeys: schema => schema._def.unknownKeys === 'passthrough',
|
|
347
|
+
getShapeEntries: schema => ('shape' in schema ? Object.entries(schema.shape) : []),
|
|
348
|
+
isOptional: isZod3SchemaOptional,
|
|
349
|
+
isDefault: isZod3Default,
|
|
350
|
+
getDefaultValue: schema => schema._def.defaultValue(),
|
|
351
|
+
getDefaultInnerType: schema => schema._def.innerType,
|
|
352
|
+
isNullable: isZod3Nullable,
|
|
353
|
+
safeParse: (schema, value) => schema.safeParse(value),
|
|
354
|
+
isArray: isZod3Array,
|
|
355
|
+
getArrayElement: schema => schema._def.type,
|
|
356
|
+
isRecord: isZod3Record,
|
|
357
|
+
getRecordValue: schema => schema._def.valueType,
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const zod4Adapter: ZodAdapter = {
|
|
361
|
+
getInnerType: getZod4SchemaInnerType,
|
|
362
|
+
isObject: isZod4Object,
|
|
363
|
+
hasUnknownKeys: schema => Boolean(schema._zod.def.catchall && schema._zod.def.catchall._zod.def.type !== 'never'),
|
|
364
|
+
getShapeEntries: schema => ('shape' in schema._zod.def ? Object.entries(schema._zod.def.shape) : []),
|
|
365
|
+
isOptional: isZod4SchemaOptional,
|
|
366
|
+
isDefault: isZod4Default,
|
|
367
|
+
getDefaultValue: schema => schema._zod.def.defaultValue,
|
|
368
|
+
getDefaultInnerType: schema => schema._zod.def.innerType,
|
|
369
|
+
isNullable: isZod4Nullable,
|
|
370
|
+
safeParse: (schema, value) => z4SafeParse(schema, value),
|
|
371
|
+
isArray: isZod4Array,
|
|
372
|
+
getArrayElement: schema => schema._zod.def.element,
|
|
373
|
+
isRecord: isZod4Record,
|
|
374
|
+
getRecordValue: schema => schema._zod.def.valueType,
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// Resolves the default value for an array shape entry, recursing into object elements.
|
|
378
|
+
function _resolveArrayValue(adapter: ZodAdapter, innerType: any, originalValue: unknown[]): unknown {
|
|
379
|
+
const arrayType = adapter.getInnerType(adapter.getArrayElement(innerType))
|
|
380
|
+
if (adapter.isObject(arrayType)) {
|
|
381
|
+
return originalValue.map(element => _defaultObjectFromShape(adapter, arrayType, element))
|
|
408
382
|
}
|
|
383
|
+
return originalValue
|
|
384
|
+
}
|
|
409
385
|
|
|
410
|
-
|
|
411
|
-
|
|
386
|
+
// Resolves the default value for a record shape entry, recursing into object values.
|
|
387
|
+
function _resolveRecordValue(adapter: ZodAdapter, innerType: any, originalValue: object): unknown {
|
|
388
|
+
const valueType = adapter.getInnerType(adapter.getRecordValue(innerType))
|
|
389
|
+
if (!adapter.isObject(valueType)) {
|
|
390
|
+
return originalValue
|
|
391
|
+
}
|
|
392
|
+
return Object.keys(originalValue).reduce<Record<string, unknown>>((acc, recordKey) => {
|
|
393
|
+
acc[recordKey] = _defaultObjectFromShape(adapter, valueType, (originalValue as Record<string, unknown>)[recordKey])
|
|
394
|
+
return acc
|
|
395
|
+
}, {})
|
|
396
|
+
}
|
|
412
397
|
|
|
413
|
-
|
|
414
|
-
|
|
398
|
+
// Resolves the default value for a single shape entry of a Zod object schema.
|
|
399
|
+
function _resolveShapeEntry(adapter: ZodAdapter, key: string, subSchema: any, originalValue: unknown): [string, unknown] {
|
|
400
|
+
const isOptional = adapter.isOptional(subSchema)
|
|
401
|
+
let innerType = adapter.getInnerType(subSchema)
|
|
402
|
+
let defaultValue: unknown
|
|
403
|
+
if (adapter.isDefault(innerType)) {
|
|
404
|
+
defaultValue = adapter.getDefaultValue(innerType)
|
|
405
|
+
innerType = adapter.getDefaultInnerType(innerType)
|
|
406
|
+
}
|
|
407
|
+
if (originalValue === null && adapter.isNullable(innerType)) {
|
|
408
|
+
return [key, originalValue]
|
|
409
|
+
}
|
|
410
|
+
if ((originalValue === undefined || originalValue === null) && isOptional) {
|
|
411
|
+
return [key, defaultValue]
|
|
412
|
+
}
|
|
413
|
+
if (innerType && originalValue !== undefined) {
|
|
414
|
+
const parse = adapter.safeParse(subSchema, originalValue)
|
|
415
|
+
if (parse.success) {
|
|
416
|
+
return [key, parse.data ?? defaultValue]
|
|
417
|
+
}
|
|
415
418
|
}
|
|
416
|
-
|
|
419
|
+
if (adapter.isArray(innerType) && Array.isArray(originalValue)) {
|
|
420
|
+
return [key, _resolveArrayValue(adapter, innerType, originalValue)]
|
|
421
|
+
}
|
|
422
|
+
if (adapter.isRecord(innerType) && originalValue) {
|
|
423
|
+
return [key, _resolveRecordValue(adapter, innerType, originalValue as object)]
|
|
424
|
+
}
|
|
425
|
+
if (adapter.isObject(innerType)) {
|
|
426
|
+
return [key, _defaultObjectFromShape(
|
|
427
|
+
adapter,
|
|
428
|
+
innerType,
|
|
429
|
+
originalValue && typeof originalValue === 'object' ? originalValue : defaultValue,
|
|
430
|
+
)]
|
|
431
|
+
}
|
|
432
|
+
return [key, defaultValue]
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Builds the default object for an (already unwrapped) Zod object schema.
|
|
436
|
+
function _defaultObjectFromShape(adapter: ZodAdapter, objectSchema: any, original: unknown): Record<string, unknown> {
|
|
437
|
+
const safeOriginal = (original && typeof original === 'object' && !Array.isArray(original))
|
|
438
|
+
? original as Record<string, unknown>
|
|
439
|
+
: {}
|
|
417
440
|
return {
|
|
418
|
-
...(
|
|
441
|
+
...(adapter.hasUnknownKeys(objectSchema) ? safeOriginal : {}),
|
|
419
442
|
...Object.fromEntries(
|
|
420
|
-
(
|
|
421
|
-
(
|
|
422
|
-
const originalValue = original[key]
|
|
423
|
-
const isOptional = isZod3SchemaOptional(subSchema)
|
|
424
|
-
let innerType = getZod3SchemaInnerType(subSchema)
|
|
425
|
-
let defaultValue: Partial<InferSchema<Schema>> | undefined
|
|
426
|
-
if (isZod3Default(innerType)) {
|
|
427
|
-
defaultValue = innerType._def.defaultValue()
|
|
428
|
-
innerType = innerType._def.innerType
|
|
429
|
-
}
|
|
430
|
-
if (
|
|
431
|
-
originalValue === null
|
|
432
|
-
&& isZod3Nullable(innerType)
|
|
433
|
-
) {
|
|
434
|
-
return [key, originalValue]
|
|
435
|
-
}
|
|
436
|
-
if ((originalValue === undefined || originalValue === null) && isOptional) {
|
|
437
|
-
return [key, defaultValue]
|
|
438
|
-
}
|
|
439
|
-
if (innerType && originalValue !== undefined) {
|
|
440
|
-
const parse = subSchema.safeParse(originalValue)
|
|
441
|
-
if (parse.success) {
|
|
442
|
-
return [key, parse.data ?? defaultValue]
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
if (
|
|
446
|
-
isZod3Array(innerType)
|
|
447
|
-
&& Array.isArray(originalValue)
|
|
448
|
-
) {
|
|
449
|
-
const arrayType = getZod3SchemaInnerType(innerType._def.type)
|
|
450
|
-
if (isZod3Object(arrayType)) {
|
|
451
|
-
return [
|
|
452
|
-
key,
|
|
453
|
-
originalValue.map((element: unknown) =>
|
|
454
|
-
defaultObjectBySchema(
|
|
455
|
-
arrayType,
|
|
456
|
-
(element && typeof element === 'object'
|
|
457
|
-
? element
|
|
458
|
-
: undefined) as Partial<
|
|
459
|
-
typeof arrayType
|
|
460
|
-
>,
|
|
461
|
-
),
|
|
462
|
-
),
|
|
463
|
-
]
|
|
464
|
-
}
|
|
465
|
-
return [key, originalValue]
|
|
466
|
-
}
|
|
467
|
-
if (isZod3Record(innerType) && originalValue) {
|
|
468
|
-
const valueType = getZod3SchemaInnerType(innerType._def.valueType)
|
|
469
|
-
if (isZod3Object(valueType)) {
|
|
470
|
-
return [key, Object.keys(originalValue).reduce((acc: Record<string, unknown>, recordKey: string) => {
|
|
471
|
-
acc[recordKey] = defaultObjectBySchema(valueType, originalValue[recordKey])
|
|
472
|
-
return acc
|
|
473
|
-
}, {})]
|
|
474
|
-
}
|
|
475
|
-
return [key, originalValue]
|
|
476
|
-
}
|
|
477
|
-
if (isZod3Object(innerType)) {
|
|
478
|
-
return [
|
|
479
|
-
key,
|
|
480
|
-
defaultObjectBySchema(
|
|
481
|
-
innerType,
|
|
482
|
-
originalValue
|
|
483
|
-
&& typeof originalValue === 'object'
|
|
484
|
-
? originalValue
|
|
485
|
-
: defaultValue,
|
|
486
|
-
),
|
|
487
|
-
]
|
|
488
|
-
}
|
|
489
|
-
return [key, defaultValue]
|
|
490
|
-
},
|
|
443
|
+
adapter.getShapeEntries(objectSchema).map(([key, subSchema]) =>
|
|
444
|
+
_resolveShapeEntry(adapter, key, subSchema, safeOriginal[key]),
|
|
491
445
|
),
|
|
492
446
|
),
|
|
493
|
-
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export function defaultObjectBySchema<Schema extends FormSchema>(schema: Schema, original: Partial<InferSchema<Schema>> & Record<string, unknown> = {}): Partial<InferSchema<Schema>> {
|
|
451
|
+
const adapter = isZod4Schema(schema) ? zod4Adapter : zod3Adapter
|
|
452
|
+
const innerType = adapter.getInnerType(schema)
|
|
453
|
+
if (!adapter.isObject(innerType)) {
|
|
454
|
+
return original
|
|
455
|
+
}
|
|
456
|
+
return _defaultObjectFromShape(adapter, innerType, original) as Partial<InferSchema<Schema>>
|
|
494
457
|
}
|
|
495
458
|
|
|
496
459
|
export const safeParseAsync = <T extends FormSchema>(schema: T, data: any) => {
|
package/dist/index.d.ts
DELETED