attaform 0.27.6 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstract.d.mts +5 -4
- package/dist/abstract.mjs +4 -3
- package/dist/chunks/fingerprint.mjs +0 -1
- package/dist/chunks/fingerprint2.mjs +1 -2
- package/dist/dev/abstract.mjs +4 -0
- package/dist/{chunks → dev/chunks}/dev-key-collision-warnings.mjs +0 -1
- package/dist/{chunks → dev/chunks}/devtools.mjs +5 -6
- package/dist/{chunks/fingerprint.cjs → dev/chunks/fingerprint.mjs} +7 -10
- package/dist/{chunks/fingerprint2.cjs → dev/chunks/fingerprint2.mjs} +32 -35
- package/dist/dev/directive.mjs +1 -0
- package/dist/dev/history.mjs +89 -0
- package/dist/dev/index.mjs +5 -0
- package/dist/dev/runtime/plugins/attaform.mjs +40 -0
- package/dist/{shared/attaform.D6tk90Rc.cjs → dev/shared/attaform-dev.6qxD-Yqo.mjs} +187 -43
- package/dist/{shared/attaform.CQN9R62B.cjs → dev/shared/attaform-dev.BJGA_UOS.mjs} +1 -4
- package/dist/{shared/attaform.DYEr28Pt.mjs → dev/shared/attaform-dev.BR8u0YOZ.mjs} +6 -7
- package/dist/dev/shared/attaform-dev.BXE2cr0L.mjs +220 -0
- package/dist/dev/shared/attaform-dev.By4PRjt0.mjs +248 -0
- package/dist/{shared/attaform.B1ZYt2Li.mjs → dev/shared/attaform-dev.D2I8e_Mm.mjs} +132 -568
- package/dist/dev/shared/attaform-dev.Dr2YzS5B.mjs +197 -0
- package/dist/{shared/attaform.nMaz2C5P.mjs → dev/shared/attaform-dev.P7cseiEG.mjs} +178 -397
- package/dist/{shared/attaform.CKH2lGdL.mjs → dev/shared/attaform-dev.WmuhD_CZ.mjs} +3944 -5056
- package/dist/{shared/attaform.DMxM2kol.mjs → dev/shared/attaform-dev.oYrkP9dj.mjs} +160 -508
- package/dist/dev/zod-v3.mjs +17 -0
- package/dist/dev/zod-v4.mjs +16 -0
- package/dist/dev/zod.mjs +5 -0
- package/dist/directive.d.mts +20 -0
- package/dist/directive.mjs +1 -0
- package/dist/esbuild.mjs +0 -1
- package/dist/history.d.mts +59 -0
- package/dist/history.mjs +89 -0
- package/dist/index.d.mts +11 -5
- package/dist/index.mjs +5 -4
- package/dist/nuxt.d.mts +1 -1
- package/dist/nuxt.mjs +5 -2
- package/dist/rollup.mjs +0 -1
- package/dist/rspack.d.mts +6 -1
- package/dist/rspack.mjs +0 -1
- package/dist/runtime/components/AttaformDevtoolsPanel.vue +9 -8
- package/dist/runtime/plugins/attaform.mjs +1 -2
- package/dist/shared/{attaform.Fp3sCrVs.d.ts → attaform.B4VkS43-.d.mts} +2 -2
- package/dist/shared/{attaform.DrvMscNX.cjs → attaform.B8k8JrmK.mjs} +4073 -5630
- package/dist/shared/attaform.BJGA_UOS.mjs +0 -1
- package/dist/shared/{attaform.CoR4mWfv.mjs → attaform.C09fpdLS.mjs} +172 -16
- package/dist/shared/{attaform.D8kliaKw.cjs → attaform.CJP3RkGa.mjs} +141 -590
- package/dist/shared/{attaform.DniawQLP.d.cts → attaform.Cgu-hdSb.d.mts} +268 -68
- package/dist/shared/attaform.Cs2Rbdlo.mjs +0 -1
- package/dist/shared/{attaform.CHlJLAiv.d.mts → attaform.D5V4tZWq.d.mts} +69 -179
- package/dist/shared/{attaform.B9Wyhfro.cjs → attaform.D6DCnnQu.mjs} +11 -16
- package/dist/shared/attaform.DhnPb6nK.mjs +0 -1
- package/dist/shared/attaform.Dq4vWxuG.mjs +197 -0
- package/dist/shared/attaform.JfSWdEcb.d.mts +44 -0
- package/dist/shared/attaform.KvlEedlF.mjs +0 -1
- package/dist/shared/{attaform.DdQN7sgN.cjs → attaform.NLmerepI.mjs} +175 -557
- package/dist/shared/attaform.h0i6LijT.mjs +242 -0
- package/dist/shared/{attaform.Biytrv0-.cjs → attaform.uLbun31C.mjs} +204 -544
- package/dist/shared/attaform.v0fQtWyA.mjs +0 -1
- package/dist/shared/attaform.wfY8XFvm.mjs +197 -0
- package/dist/transforms.mjs +0 -1
- package/dist/vite.d.mts +17 -5
- package/dist/vite.mjs +24 -2
- package/dist/webpack.d.mts +6 -1
- package/dist/webpack.mjs +0 -1
- package/dist/zod-v3.d.mts +11 -6
- package/dist/zod-v3.mjs +17 -4
- package/dist/zod-v4.d.mts +12 -6
- package/dist/zod-v4.mjs +16 -4
- package/dist/zod.d.mts +4 -3
- package/dist/zod.mjs +5 -4
- package/package.json +23 -8
- package/skills/attaform/SKILL.md +2 -1
- package/dist/abstract.cjs +0 -48
- package/dist/abstract.cjs.map +0 -1
- package/dist/abstract.d.cts +0 -42
- package/dist/abstract.d.ts +0 -42
- package/dist/abstract.mjs.map +0 -1
- package/dist/chunks/dev-key-collision-warnings.cjs +0 -25
- package/dist/chunks/dev-key-collision-warnings.cjs.map +0 -1
- package/dist/chunks/dev-key-collision-warnings.mjs.map +0 -1
- package/dist/chunks/devtools.cjs +0 -157
- package/dist/chunks/devtools.cjs.map +0 -1
- package/dist/chunks/devtools.mjs.map +0 -1
- package/dist/chunks/fingerprint.cjs.map +0 -1
- package/dist/chunks/fingerprint.mjs.map +0 -1
- package/dist/chunks/fingerprint2.cjs.map +0 -1
- package/dist/chunks/fingerprint2.mjs.map +0 -1
- package/dist/esbuild.cjs +0 -28
- package/dist/esbuild.cjs.map +0 -1
- package/dist/esbuild.d.cts +0 -56
- package/dist/esbuild.d.ts +0 -56
- package/dist/esbuild.mjs.map +0 -1
- package/dist/index.cjs +0 -51
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -249
- package/dist/index.d.ts +0 -249
- package/dist/index.mjs.map +0 -1
- package/dist/nuxt.cjs +0 -84
- package/dist/nuxt.cjs.map +0 -1
- package/dist/nuxt.d.cts +0 -66
- package/dist/nuxt.d.ts +0 -66
- package/dist/nuxt.mjs.map +0 -1
- package/dist/rollup.cjs +0 -24
- package/dist/rollup.cjs.map +0 -1
- package/dist/rollup.d.cts +0 -35
- package/dist/rollup.d.ts +0 -35
- package/dist/rollup.mjs.map +0 -1
- package/dist/rspack.cjs +0 -10
- package/dist/rspack.cjs.map +0 -1
- package/dist/rspack.d.cts +0 -40
- package/dist/rspack.d.ts +0 -40
- package/dist/rspack.mjs.map +0 -1
- package/dist/runtime/components/AttaformDevtoolsPanel.vue.d.ts +0 -7
- package/dist/runtime/components/DevtoolsValueTree.vue.d.ts +0 -35
- package/dist/runtime/plugins/attaform.cjs +0 -43
- package/dist/runtime/plugins/attaform.cjs.map +0 -1
- package/dist/runtime/plugins/attaform.d.cts +0 -5
- package/dist/runtime/plugins/attaform.d.ts +0 -5
- package/dist/runtime/plugins/attaform.mjs.map +0 -1
- package/dist/shared/attaform.B1ZYt2Li.mjs.map +0 -1
- package/dist/shared/attaform.B9Wyhfro.cjs.map +0 -1
- package/dist/shared/attaform.BGDV42hI.d.cts +0 -232
- package/dist/shared/attaform.BJGA_UOS.mjs.map +0 -1
- package/dist/shared/attaform.Biytrv0-.cjs.map +0 -1
- package/dist/shared/attaform.Bn0IzhD_.cjs +0 -800
- package/dist/shared/attaform.Bn0IzhD_.cjs.map +0 -1
- package/dist/shared/attaform.C9fPTxjB.d.cts +0 -41
- package/dist/shared/attaform.C9fPTxjB.d.ts +0 -41
- package/dist/shared/attaform.CKH2lGdL.mjs.map +0 -1
- package/dist/shared/attaform.CQN9R62B.cjs.map +0 -1
- package/dist/shared/attaform.CoR4mWfv.mjs.map +0 -1
- package/dist/shared/attaform.Cs2Rbdlo.mjs.map +0 -1
- package/dist/shared/attaform.D6tk90Rc.cjs.map +0 -1
- package/dist/shared/attaform.D8kliaKw.cjs.map +0 -1
- package/dist/shared/attaform.DLknk9nF.d.mts +0 -232
- package/dist/shared/attaform.DMxM2kol.mjs.map +0 -1
- package/dist/shared/attaform.DRUT703x.d.cts +0 -56
- package/dist/shared/attaform.DRUT703x.d.ts +0 -56
- package/dist/shared/attaform.DYEr28Pt.mjs.map +0 -1
- package/dist/shared/attaform.DdQN7sgN.cjs.map +0 -1
- package/dist/shared/attaform.DhnPb6nK.mjs.map +0 -1
- package/dist/shared/attaform.DniawQLP.d.mts +0 -4763
- package/dist/shared/attaform.DniawQLP.d.ts +0 -4763
- package/dist/shared/attaform.DoQm_Vkd.cjs +0 -58
- package/dist/shared/attaform.DoQm_Vkd.cjs.map +0 -1
- package/dist/shared/attaform.DrvMscNX.cjs.map +0 -1
- package/dist/shared/attaform.F2Q8iv38.d.ts +0 -2494
- package/dist/shared/attaform.FmqKO1Ex.d.cts +0 -2494
- package/dist/shared/attaform.KvlEedlF.mjs.map +0 -1
- package/dist/shared/attaform.RaTzp1WF.cjs +0 -26
- package/dist/shared/attaform.RaTzp1WF.cjs.map +0 -1
- package/dist/shared/attaform.nMaz2C5P.mjs.map +0 -1
- package/dist/shared/attaform.v0fQtWyA.mjs.map +0 -1
- package/dist/shared/attaform.yUrz7C2z.cjs +0 -29
- package/dist/shared/attaform.yUrz7C2z.cjs.map +0 -1
- package/dist/transforms.cjs +0 -12
- package/dist/transforms.cjs.map +0 -1
- package/dist/transforms.d.cts +0 -73
- package/dist/transforms.d.ts +0 -73
- package/dist/transforms.mjs.map +0 -1
- package/dist/vite.cjs +0 -363
- package/dist/vite.cjs.map +0 -1
- package/dist/vite.d.cts +0 -133
- package/dist/vite.d.ts +0 -133
- package/dist/vite.mjs.map +0 -1
- package/dist/webpack.cjs +0 -10
- package/dist/webpack.cjs.map +0 -1
- package/dist/webpack.d.cts +0 -37
- package/dist/webpack.d.ts +0 -37
- package/dist/webpack.mjs.map +0 -1
- package/dist/zod-v3.cjs +0 -53
- package/dist/zod-v3.cjs.map +0 -1
- package/dist/zod-v3.d.cts +0 -246
- package/dist/zod-v3.d.ts +0 -246
- package/dist/zod-v3.mjs.map +0 -1
- package/dist/zod-v4.cjs +0 -55
- package/dist/zod-v4.cjs.map +0 -1
- package/dist/zod-v4.d.cts +0 -172
- package/dist/zod-v4.d.ts +0 -172
- package/dist/zod-v4.mjs.map +0 -1
- package/dist/zod.cjs +0 -51
- package/dist/zod.cjs.map +0 -1
- package/dist/zod.d.cts +0 -7
- package/dist/zod.d.ts +0 -7
- package/dist/zod.mjs.map +0 -1
|
@@ -1,31 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { A as AttaformError,
|
|
3
|
-
import {
|
|
1
|
+
import { o as humanize, h as useAbstractForm } from './attaform-dev.WmuhD_CZ.mjs';
|
|
2
|
+
import { A as AttaformError, e as canonicalizePath, a as InvalidUseFormConfigError } from './attaform-dev.Dr2YzS5B.mjs';
|
|
3
|
+
import { s as slimPrimitivesWalk, d as deriveDefaultWalk, m as mergeDeep, f as fixStructuralDefaults, w as walkPathSegments, c as createAbstractSchema, b as buildFieldMetaPathMap, a as getFieldMetaListForSchema, g as getFieldMetaForSchema } from './attaform-dev.6qxD-Yqo.mjs';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
|
|
6
|
-
const fieldMeta = fieldMetaStore;
|
|
7
|
-
function getFieldMetaList(schema) {
|
|
8
|
-
return getFieldMetaListForSchema(schema);
|
|
9
|
-
}
|
|
10
|
-
function withMeta(schema, payload) {
|
|
11
|
-
const existing = getFieldMetaForSchema(schema) ?? {};
|
|
12
|
-
const cloned = schema.clone();
|
|
13
|
-
fieldMetaStore.add(cloned, { ...existing, ...payload });
|
|
14
|
-
return cloned;
|
|
15
|
-
}
|
|
16
|
-
function getFieldMeta(schema) {
|
|
17
|
-
return getFieldMetaForSchema(schema);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
6
|
let warnedZodCodeMissing = false;
|
|
21
|
-
function zodIssuesToValidationErrors(issues
|
|
7
|
+
function zodIssuesToValidationErrors(issues) {
|
|
22
8
|
return issues.map((issue) => {
|
|
23
9
|
let code;
|
|
24
10
|
if (typeof issue.code === "string" && issue.code.length > 0) {
|
|
25
11
|
code = `zod:${issue.code}`;
|
|
26
12
|
} else {
|
|
27
13
|
code = "zod:unknown";
|
|
28
|
-
if (
|
|
14
|
+
if (!warnedZodCodeMissing) {
|
|
29
15
|
warnedZodCodeMissing = true;
|
|
30
16
|
console.warn(
|
|
31
17
|
"[attaform] zod-v4 adapter received an issue with no string `code`; stamping `'zod:unknown'`. This usually means a custom Zod plugin emitted an issue without the standard code field."
|
|
@@ -39,7 +25,6 @@ function zodIssuesToValidationErrors(issues, formKey) {
|
|
|
39
25
|
// to absolutise, then routes form-level (absolute path length 0)
|
|
40
26
|
// entries to the empty-string bucket at storage time.
|
|
41
27
|
path: issue.path.map((seg) => typeof seg === "number" ? seg : String(seg)),
|
|
42
|
-
formKey,
|
|
43
28
|
code
|
|
44
29
|
};
|
|
45
30
|
});
|
|
@@ -51,89 +36,59 @@ function readDef(schema) {
|
|
|
51
36
|
if (schema === null || typeof schema !== "object") return void 0;
|
|
52
37
|
return schema.def;
|
|
53
38
|
}
|
|
39
|
+
const KIND_ALIAS = /* @__PURE__ */ new Map([
|
|
40
|
+
["discriminated_union", "discriminated-union"],
|
|
41
|
+
["discriminatedUnion", "discriminated-union"],
|
|
42
|
+
["prefault", "default"],
|
|
43
|
+
["template_literal", "template-literal"],
|
|
44
|
+
["templateLiteral", "template-literal"]
|
|
45
|
+
]);
|
|
46
|
+
const IDENTITY_KINDS = /* @__PURE__ */ new Set([
|
|
47
|
+
"object",
|
|
48
|
+
"array",
|
|
49
|
+
"set",
|
|
50
|
+
"record",
|
|
51
|
+
"tuple",
|
|
52
|
+
"string",
|
|
53
|
+
"number",
|
|
54
|
+
"boolean",
|
|
55
|
+
"bigint",
|
|
56
|
+
"date",
|
|
57
|
+
"enum",
|
|
58
|
+
"literal",
|
|
59
|
+
"null",
|
|
60
|
+
"undefined",
|
|
61
|
+
"any",
|
|
62
|
+
"unknown",
|
|
63
|
+
"optional",
|
|
64
|
+
"nullable",
|
|
65
|
+
"default",
|
|
66
|
+
"pipe",
|
|
67
|
+
"readonly",
|
|
68
|
+
"nan",
|
|
69
|
+
"void",
|
|
70
|
+
"never",
|
|
71
|
+
"lazy",
|
|
72
|
+
"intersection",
|
|
73
|
+
"catch",
|
|
74
|
+
"promise",
|
|
75
|
+
"custom",
|
|
76
|
+
"transform",
|
|
77
|
+
"file",
|
|
78
|
+
"map",
|
|
79
|
+
"symbol",
|
|
80
|
+
"function"
|
|
81
|
+
]);
|
|
54
82
|
function kindOf(schema) {
|
|
55
83
|
const def = readDef(schema);
|
|
56
84
|
const rawType = def?.type;
|
|
57
85
|
if (rawType === void 0) return "unknown";
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return "object";
|
|
61
|
-
case "array":
|
|
62
|
-
return "array";
|
|
63
|
-
case "set":
|
|
64
|
-
return "set";
|
|
65
|
-
case "record":
|
|
66
|
-
return "record";
|
|
67
|
-
case "tuple":
|
|
68
|
-
return "tuple";
|
|
69
|
-
case "union":
|
|
70
|
-
return def?.discriminator !== void 0 ? "discriminated-union" : "union";
|
|
71
|
-
case "discriminated_union":
|
|
72
|
-
case "discriminatedUnion":
|
|
73
|
-
return "discriminated-union";
|
|
74
|
-
case "string":
|
|
75
|
-
return "string";
|
|
76
|
-
case "number":
|
|
77
|
-
return "number";
|
|
78
|
-
case "boolean":
|
|
79
|
-
return "boolean";
|
|
80
|
-
case "bigint":
|
|
81
|
-
return "bigint";
|
|
82
|
-
case "date":
|
|
83
|
-
return "date";
|
|
84
|
-
case "enum":
|
|
85
|
-
return "enum";
|
|
86
|
-
case "literal":
|
|
87
|
-
return "literal";
|
|
88
|
-
case "null":
|
|
89
|
-
return "null";
|
|
90
|
-
case "undefined":
|
|
91
|
-
return "undefined";
|
|
92
|
-
case "optional":
|
|
93
|
-
return "optional";
|
|
94
|
-
case "nullable":
|
|
95
|
-
return "nullable";
|
|
96
|
-
case "default":
|
|
97
|
-
case "prefault":
|
|
98
|
-
return "default";
|
|
99
|
-
case "pipe":
|
|
100
|
-
return "pipe";
|
|
101
|
-
case "readonly":
|
|
102
|
-
return "readonly";
|
|
103
|
-
case "any":
|
|
104
|
-
return "any";
|
|
105
|
-
case "nan":
|
|
106
|
-
return "nan";
|
|
107
|
-
case "void":
|
|
108
|
-
return "void";
|
|
109
|
-
case "never":
|
|
110
|
-
return "never";
|
|
111
|
-
case "lazy":
|
|
112
|
-
return "lazy";
|
|
113
|
-
case "intersection":
|
|
114
|
-
return "intersection";
|
|
115
|
-
case "catch":
|
|
116
|
-
return "catch";
|
|
117
|
-
case "transform":
|
|
118
|
-
return "transform";
|
|
119
|
-
case "promise":
|
|
120
|
-
return "promise";
|
|
121
|
-
case "custom":
|
|
122
|
-
return "custom";
|
|
123
|
-
case "template_literal":
|
|
124
|
-
case "templateLiteral":
|
|
125
|
-
return "template-literal";
|
|
126
|
-
case "file":
|
|
127
|
-
return "file";
|
|
128
|
-
case "map":
|
|
129
|
-
return "map";
|
|
130
|
-
case "symbol":
|
|
131
|
-
return "symbol";
|
|
132
|
-
case "function":
|
|
133
|
-
return "function";
|
|
134
|
-
default:
|
|
135
|
-
return "unknown";
|
|
86
|
+
if (rawType === "union") {
|
|
87
|
+
return def?.discriminator !== void 0 ? "discriminated-union" : "union";
|
|
136
88
|
}
|
|
89
|
+
const alias = KIND_ALIAS.get(rawType);
|
|
90
|
+
if (alias !== void 0) return alias;
|
|
91
|
+
return IDENTITY_KINDS.has(rawType) ? rawType : "unknown";
|
|
137
92
|
}
|
|
138
93
|
function getObjectShape(schema) {
|
|
139
94
|
const s = schema;
|
|
@@ -265,10 +220,22 @@ function assertZodVersion(schema) {
|
|
|
265
220
|
const def = readDef(schema);
|
|
266
221
|
if (def?.type === void 0) {
|
|
267
222
|
throw new Error(
|
|
268
|
-
"[attaform/zod-v4] Schema is not a Zod v4 schema. The `attaform/zod-v4` adapter requires zod@^4. Either: (a) install zod@^4 in your project; (b) import from `attaform/zod`, which auto-detects the Zod version (and tree-shakes to a single adapter when the `attaform/vite` plugin is active); or (c) import from `attaform/zod-v3` if you are staying on Zod v3."
|
|
223
|
+
"[attaform/zod-v4] Schema is not a Zod v4 schema. The `attaform/zod-v4` adapter requires zod@^4. Either: (a) install zod@^4 in your project; (b) import from `attaform/zod`, which auto-detects the Zod version (and tree-shakes to a single adapter when the `attaform/vite` plugin is active); or (c) import from `attaform/zod-v3` if you are staying on Zod v3."
|
|
269
224
|
);
|
|
270
225
|
}
|
|
271
226
|
}
|
|
227
|
+
const DESCEND_SINGLE = [
|
|
228
|
+
"innerType",
|
|
229
|
+
"element",
|
|
230
|
+
"in",
|
|
231
|
+
"out",
|
|
232
|
+
"left",
|
|
233
|
+
"right",
|
|
234
|
+
"keyType",
|
|
235
|
+
"valueType"
|
|
236
|
+
];
|
|
237
|
+
const DESCEND_RECORD = ["shape", "entries"];
|
|
238
|
+
const DESCEND_LIST = ["options", "items"];
|
|
272
239
|
function walkSchemaTree(schema, visit, seen) {
|
|
273
240
|
const visited = seen ?? /* @__PURE__ */ new WeakSet();
|
|
274
241
|
const candidate = schema;
|
|
@@ -278,40 +245,25 @@ function walkSchemaTree(schema, visit, seen) {
|
|
|
278
245
|
if (visit(schema)) return true;
|
|
279
246
|
const def = readDef(schema);
|
|
280
247
|
if (def === void 0) return false;
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
return true;
|
|
293
|
-
}
|
|
294
|
-
if (def.valueType !== void 0 && walkSchemaTree(def.valueType, visit, visited)) {
|
|
295
|
-
return true;
|
|
296
|
-
}
|
|
297
|
-
if (def.shape !== void 0) {
|
|
298
|
-
for (const sub of Object.values(def.shape)) {
|
|
299
|
-
if (walkSchemaTree(sub, visit, visited)) return true;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
if (def.entries !== void 0) {
|
|
303
|
-
for (const sub of Object.values(def.entries)) {
|
|
304
|
-
if (walkSchemaTree(sub, visit, visited)) return true;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
if (def.options !== void 0) {
|
|
308
|
-
for (const sub of def.options) {
|
|
309
|
-
if (walkSchemaTree(sub, visit, visited)) return true;
|
|
248
|
+
const slots = def;
|
|
249
|
+
for (const key of DESCEND_SINGLE) {
|
|
250
|
+
const child = slots[key];
|
|
251
|
+
if (child !== void 0 && walkSchemaTree(child, visit, visited)) return true;
|
|
252
|
+
}
|
|
253
|
+
for (const key of DESCEND_RECORD) {
|
|
254
|
+
const record = slots[key];
|
|
255
|
+
if (record !== void 0) {
|
|
256
|
+
for (const sub of Object.values(record)) {
|
|
257
|
+
if (walkSchemaTree(sub, visit, visited)) return true;
|
|
258
|
+
}
|
|
310
259
|
}
|
|
311
260
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
261
|
+
for (const key of DESCEND_LIST) {
|
|
262
|
+
const list = slots[key];
|
|
263
|
+
if (list !== void 0) {
|
|
264
|
+
for (const sub of list) {
|
|
265
|
+
if (walkSchemaTree(sub, visit, visited)) return true;
|
|
266
|
+
}
|
|
315
267
|
}
|
|
316
268
|
}
|
|
317
269
|
if (typeof def.getter === "function") {
|
|
@@ -323,6 +275,9 @@ function walkSchemaTree(schema, visit, seen) {
|
|
|
323
275
|
}
|
|
324
276
|
return false;
|
|
325
277
|
}
|
|
278
|
+
function containsDiscriminatedUnion(schema, seen) {
|
|
279
|
+
return walkSchemaTree(schema, (node) => kindOf(node) === "discriminated-union", seen);
|
|
280
|
+
}
|
|
326
281
|
function containsAsyncRefine(schema, seen) {
|
|
327
282
|
return walkSchemaTree(
|
|
328
283
|
schema,
|
|
@@ -335,14 +290,25 @@ function containsAsyncRefine(schema, seen) {
|
|
|
335
290
|
seen
|
|
336
291
|
);
|
|
337
292
|
}
|
|
293
|
+
const CONTAINER_SLOTS = [
|
|
294
|
+
"shape",
|
|
295
|
+
"entries",
|
|
296
|
+
"element",
|
|
297
|
+
"options",
|
|
298
|
+
"items",
|
|
299
|
+
"keyType",
|
|
300
|
+
"valueType",
|
|
301
|
+
"left",
|
|
302
|
+
"right"
|
|
303
|
+
];
|
|
338
304
|
function hasContainerOrRootRefine(schema, seen) {
|
|
339
305
|
return walkSchemaTree(
|
|
340
306
|
schema,
|
|
341
307
|
(node) => {
|
|
342
308
|
const def = readDef(node);
|
|
343
309
|
if (def === void 0) return false;
|
|
344
|
-
const
|
|
345
|
-
if (!
|
|
310
|
+
const slots = def;
|
|
311
|
+
if (!CONTAINER_SLOTS.some((key) => slots[key] !== void 0)) return false;
|
|
346
312
|
return getChecks(node).length > 0;
|
|
347
313
|
},
|
|
348
314
|
seen
|
|
@@ -384,7 +350,7 @@ function assertSupportedKinds(schema, path = [], lazyGetters = []) {
|
|
|
384
350
|
const kind = kindOf(schema);
|
|
385
351
|
if (UNSUPPORTED.includes(kind)) {
|
|
386
352
|
throw new UnsupportedSchemaError(
|
|
387
|
-
`[attaform/zod] unsupported kind '${kind}' at '${labelPath(path)}'`
|
|
353
|
+
`[attaform/zod] unsupported kind '${kind}' at '${labelPath(path)}'`
|
|
388
354
|
);
|
|
389
355
|
}
|
|
390
356
|
switch (kind) {
|
|
@@ -479,7 +445,9 @@ function assertSupportedKinds(schema, path = [], lazyGetters = []) {
|
|
|
479
445
|
return;
|
|
480
446
|
default: {
|
|
481
447
|
const _exhaustive = kind;
|
|
482
|
-
throw new Error(
|
|
448
|
+
throw new Error(
|
|
449
|
+
`assertSupportedKinds: unhandled ZodKind '${_exhaustive}'`
|
|
450
|
+
);
|
|
483
451
|
}
|
|
484
452
|
}
|
|
485
453
|
}
|
|
@@ -509,10 +477,6 @@ function unwrapToDiscriminatedUnion(schema) {
|
|
|
509
477
|
}
|
|
510
478
|
return void 0;
|
|
511
479
|
}
|
|
512
|
-
function getDiscriminatedUnionFirstOption(schema) {
|
|
513
|
-
const options = getDiscriminatedOptions(schema);
|
|
514
|
-
return options[0];
|
|
515
|
-
}
|
|
516
480
|
|
|
517
481
|
const V4_INTROSPECTOR = {
|
|
518
482
|
kindOf: (schema) => kindOf(schema),
|
|
@@ -525,6 +489,7 @@ const V4_INTROSPECTOR = {
|
|
|
525
489
|
isCoercePrimitive,
|
|
526
490
|
containsAsyncRefine,
|
|
527
491
|
containsAsyncTransform,
|
|
492
|
+
containsDiscriminatedUnion,
|
|
528
493
|
hasContainerOrRootRefine,
|
|
529
494
|
// Walker accessors (D2 / D3 / D5).
|
|
530
495
|
getArrayElement: (schema) => {
|
|
@@ -555,6 +520,31 @@ function slimPrimitivesOf(schema, maxRecursionDepth) {
|
|
|
555
520
|
return new Set(slimPrimitivesWalk(schema, V4_INTROSPECTOR, maxRecursionDepth));
|
|
556
521
|
}
|
|
557
522
|
|
|
523
|
+
function deriveDefault(schema, useDefault, maxRecursionDepth) {
|
|
524
|
+
return deriveDefaultWalk(schema, useDefault, V4_INTROSPECTOR, maxRecursionDepth, {
|
|
525
|
+
// v4 has an exhaustive switch against `SchemaIntrospector.kindOf`;
|
|
526
|
+
// unknown kinds genuinely shouldn't appear, so return undefined.
|
|
527
|
+
unsupportedKindFallback: () => void 0
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
function getDefaultValuesFromZodSchema(opts) {
|
|
531
|
+
const { schema, useDefaultSchemaValues, constraints, maxRecursionDepth } = opts;
|
|
532
|
+
const initial = deriveDefault(schema, useDefaultSchemaValues, maxRecursionDepth);
|
|
533
|
+
const merged = mergeDeep(initial, constraints);
|
|
534
|
+
return fixStructuralDefaults(
|
|
535
|
+
schema,
|
|
536
|
+
merged,
|
|
537
|
+
useDefaultSchemaValues,
|
|
538
|
+
maxRecursionDepth,
|
|
539
|
+
{
|
|
540
|
+
intro: V4_INTROSPECTOR,
|
|
541
|
+
slimPrimitivesOf: (s) => slimPrimitivesOf(s, maxRecursionDepth),
|
|
542
|
+
deriveDefault: (s, useDefault) => deriveDefault(s, useDefault, maxRecursionDepth),
|
|
543
|
+
unwrapToDiscriminatedUnion
|
|
544
|
+
}
|
|
545
|
+
);
|
|
546
|
+
}
|
|
547
|
+
|
|
558
548
|
const PATH_SEPARATOR = ".";
|
|
559
549
|
function getNestedZodSchemasAtPath(schema, path, maxRecursionDepth) {
|
|
560
550
|
if (Array.isArray(path)) {
|
|
@@ -571,127 +561,15 @@ function getNestedZodSchemasAtPath(schema, path, maxRecursionDepth) {
|
|
|
571
561
|
);
|
|
572
562
|
}
|
|
573
563
|
|
|
574
|
-
function
|
|
575
|
-
if (stripConfig.stripRefinements === true) return rebuilt;
|
|
564
|
+
function carrySyncChecks(rebuilt, original) {
|
|
576
565
|
if (!hasChecks(original)) return rebuilt;
|
|
577
|
-
const
|
|
578
|
-
const checks = stripConfig.shouldKeepCheck === void 0 ? all : all.filter(stripConfig.shouldKeepCheck);
|
|
566
|
+
const checks = getChecks(original).filter((c) => !isAsyncCheck(c));
|
|
579
567
|
if (checks.length === 0) return rebuilt;
|
|
580
568
|
return rebuilt.check(
|
|
581
569
|
...checks
|
|
582
570
|
);
|
|
583
571
|
}
|
|
584
|
-
function unhandledZodKind(fnName, kind) {
|
|
585
|
-
throw new Error(`${fnName}: unhandled ZodKind '${kind}'`);
|
|
586
|
-
}
|
|
587
|
-
function stripRefinements(schema) {
|
|
588
|
-
const kind = kindOf(schema);
|
|
589
|
-
switch (kind) {
|
|
590
|
-
case "string":
|
|
591
|
-
return hasChecks(schema) ? z.string() : schema;
|
|
592
|
-
case "number":
|
|
593
|
-
return hasChecks(schema) ? z.number() : schema;
|
|
594
|
-
case "bigint":
|
|
595
|
-
return hasChecks(schema) ? z.bigint() : schema;
|
|
596
|
-
case "array": {
|
|
597
|
-
const element = getArrayElement(schema);
|
|
598
|
-
return z.array(stripRefinements(element));
|
|
599
|
-
}
|
|
600
|
-
case "set": {
|
|
601
|
-
const valueType = getSetValueType(schema);
|
|
602
|
-
return z.set(stripRefinements(valueType));
|
|
603
|
-
}
|
|
604
|
-
case "tuple": {
|
|
605
|
-
const items = getTupleItems(schema).map(stripRefinements);
|
|
606
|
-
return z.tuple(items);
|
|
607
|
-
}
|
|
608
|
-
case "object": {
|
|
609
|
-
const shape = getObjectShape(schema);
|
|
610
|
-
const next = {};
|
|
611
|
-
for (const [k, v] of Object.entries(shape)) {
|
|
612
|
-
next[k] = stripRefinements(v);
|
|
613
|
-
}
|
|
614
|
-
return z.object(next);
|
|
615
|
-
}
|
|
616
|
-
case "record": {
|
|
617
|
-
const keyType = getRecordKeyType(
|
|
618
|
-
schema
|
|
619
|
-
);
|
|
620
|
-
const valueType = stripRefinements(getRecordValueType(schema));
|
|
621
|
-
return z.record(keyType, valueType);
|
|
622
|
-
}
|
|
623
|
-
case "union": {
|
|
624
|
-
const options = getUnionOptions(schema).map(stripRefinements);
|
|
625
|
-
return z.union(options);
|
|
626
|
-
}
|
|
627
|
-
case "discriminated-union": {
|
|
628
|
-
const options = getDiscriminatedOptions(schema).map(
|
|
629
|
-
(opt) => stripRefinements(opt)
|
|
630
|
-
);
|
|
631
|
-
const discriminator = getDiscriminator(schema);
|
|
632
|
-
if (discriminator === void 0) return schema;
|
|
633
|
-
return z.discriminatedUnion(
|
|
634
|
-
discriminator,
|
|
635
|
-
options
|
|
636
|
-
);
|
|
637
|
-
}
|
|
638
|
-
// Wrappers: strip the inner, preserve the wrapper semantics where
|
|
639
|
-
// possible. For stripping refinements we typically want wrappers to
|
|
640
|
-
// survive (optional/nullable/default), so leave them alone.
|
|
641
|
-
case "optional":
|
|
642
|
-
case "nullable":
|
|
643
|
-
case "default":
|
|
644
|
-
case "readonly":
|
|
645
|
-
case "pipe":
|
|
646
|
-
return schema;
|
|
647
|
-
case "lazy": {
|
|
648
|
-
const inner = unwrapLazy(schema);
|
|
649
|
-
if (inner === void 0) return schema;
|
|
650
|
-
const slimmedInner = stripRefinements(inner);
|
|
651
|
-
return z.lazy(() => slimmedInner);
|
|
652
|
-
}
|
|
653
|
-
case "intersection": {
|
|
654
|
-
const left = getIntersectionLeft(schema);
|
|
655
|
-
const right = getIntersectionRight(schema);
|
|
656
|
-
if (left === void 0 || right === void 0) return schema;
|
|
657
|
-
return z.intersection(stripRefinements(left), stripRefinements(right));
|
|
658
|
-
}
|
|
659
|
-
case "catch": {
|
|
660
|
-
const inner = unwrapInner(schema);
|
|
661
|
-
if (inner === void 0) return schema;
|
|
662
|
-
const slimmedInner = stripRefinements(inner);
|
|
663
|
-
return slimmedInner.catch(getCatchDefault(schema));
|
|
664
|
-
}
|
|
665
|
-
// Leaf types without refinements, or Zod features we don't rewrite.
|
|
666
|
-
case "boolean":
|
|
667
|
-
case "date":
|
|
668
|
-
case "enum":
|
|
669
|
-
case "literal":
|
|
670
|
-
case "null":
|
|
671
|
-
case "undefined":
|
|
672
|
-
case "any":
|
|
673
|
-
case "unknown":
|
|
674
|
-
case "nan":
|
|
675
|
-
case "void":
|
|
676
|
-
case "never":
|
|
677
|
-
case "promise":
|
|
678
|
-
case "custom":
|
|
679
|
-
case "template-literal":
|
|
680
|
-
case "transform":
|
|
681
|
-
case "file":
|
|
682
|
-
case "map":
|
|
683
|
-
case "symbol":
|
|
684
|
-
case "function":
|
|
685
|
-
return schema;
|
|
686
|
-
default:
|
|
687
|
-
return unhandledZodKind("stripRefinements", kind);
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
572
|
function stripAsyncChecks(schema) {
|
|
691
|
-
const config = {
|
|
692
|
-
stripRefinements: false,
|
|
693
|
-
shouldKeepCheck: (c) => !isAsyncCheck(c)
|
|
694
|
-
};
|
|
695
573
|
const seen = /* @__PURE__ */ new WeakSet();
|
|
696
574
|
function recurse(s) {
|
|
697
575
|
if (seen.has(s)) return s;
|
|
@@ -699,25 +577,24 @@ function stripAsyncChecks(schema) {
|
|
|
699
577
|
const kind = kindOf(s);
|
|
700
578
|
switch (kind) {
|
|
701
579
|
case "string":
|
|
702
|
-
return hasChecks(s) ?
|
|
580
|
+
return hasChecks(s) ? carrySyncChecks(z.string(), s) : s;
|
|
703
581
|
case "number":
|
|
704
|
-
return hasChecks(s) ?
|
|
582
|
+
return hasChecks(s) ? carrySyncChecks(z.number(), s) : s;
|
|
705
583
|
case "bigint":
|
|
706
|
-
return hasChecks(s) ?
|
|
584
|
+
return hasChecks(s) ? carrySyncChecks(z.bigint(), s) : s;
|
|
707
585
|
case "array": {
|
|
708
586
|
const element = getArrayElement(s);
|
|
709
|
-
return
|
|
587
|
+
return carrySyncChecks(z.array(recurse(element)), s);
|
|
710
588
|
}
|
|
711
589
|
case "set": {
|
|
712
|
-
|
|
713
|
-
return carryChecks(z.set(recurse(valueType)), s, config);
|
|
590
|
+
return carrySyncChecks(z.set(recurse(getSetValueType(s))), s);
|
|
714
591
|
}
|
|
715
592
|
case "tuple": {
|
|
716
593
|
const items = getTupleItems(s).map(recurse);
|
|
717
594
|
const rebuilt = z.tuple(
|
|
718
595
|
items
|
|
719
596
|
);
|
|
720
|
-
return
|
|
597
|
+
return carrySyncChecks(rebuilt, s);
|
|
721
598
|
}
|
|
722
599
|
case "object": {
|
|
723
600
|
const shape = getObjectShape(s);
|
|
@@ -725,20 +602,22 @@ function stripAsyncChecks(schema) {
|
|
|
725
602
|
for (const [k, v] of Object.entries(shape)) {
|
|
726
603
|
next[k] = recurse(v);
|
|
727
604
|
}
|
|
728
|
-
return
|
|
605
|
+
return carrySyncChecks(z.object(next), s);
|
|
729
606
|
}
|
|
730
607
|
case "record": {
|
|
731
608
|
const keyType = getRecordKeyType(s);
|
|
732
609
|
const valueType = recurse(getRecordValueType(s));
|
|
733
|
-
|
|
734
|
-
|
|
610
|
+
return carrySyncChecks(
|
|
611
|
+
z.record(keyType, valueType),
|
|
612
|
+
s
|
|
613
|
+
);
|
|
735
614
|
}
|
|
736
615
|
case "union": {
|
|
737
616
|
const options = getUnionOptions(s).map(recurse);
|
|
738
|
-
|
|
739
|
-
options
|
|
617
|
+
return carrySyncChecks(
|
|
618
|
+
z.union(options),
|
|
619
|
+
s
|
|
740
620
|
);
|
|
741
|
-
return carryChecks(rebuilt, s, config);
|
|
742
621
|
}
|
|
743
622
|
case "discriminated-union": {
|
|
744
623
|
const options = getDiscriminatedOptions(s).map((opt) => recurse(opt));
|
|
@@ -751,13 +630,11 @@ function stripAsyncChecks(schema) {
|
|
|
751
630
|
}
|
|
752
631
|
case "optional": {
|
|
753
632
|
const inner = unwrapInner(s);
|
|
754
|
-
|
|
755
|
-
return recurse(inner).optional();
|
|
633
|
+
return inner === void 0 ? s : recurse(inner).optional();
|
|
756
634
|
}
|
|
757
635
|
case "nullable": {
|
|
758
636
|
const inner = unwrapInner(s);
|
|
759
|
-
|
|
760
|
-
return recurse(inner).nullable();
|
|
637
|
+
return inner === void 0 ? s : recurse(inner).nullable();
|
|
761
638
|
}
|
|
762
639
|
case "default": {
|
|
763
640
|
const inner = unwrapInner(s);
|
|
@@ -766,11 +643,8 @@ function stripAsyncChecks(schema) {
|
|
|
766
643
|
}
|
|
767
644
|
case "readonly": {
|
|
768
645
|
const inner = unwrapInner(s);
|
|
769
|
-
|
|
770
|
-
return recurse(inner).readonly();
|
|
646
|
+
return inner === void 0 ? s : recurse(inner).readonly();
|
|
771
647
|
}
|
|
772
|
-
case "pipe":
|
|
773
|
-
return s;
|
|
774
648
|
case "lazy": {
|
|
775
649
|
const inner = unwrapLazy(s);
|
|
776
650
|
if (inner === void 0) return s;
|
|
@@ -788,7 +662,11 @@ function stripAsyncChecks(schema) {
|
|
|
788
662
|
if (inner === void 0) return s;
|
|
789
663
|
return recurse(inner).catch(getCatchDefault(s));
|
|
790
664
|
}
|
|
791
|
-
//
|
|
665
|
+
// Pipes pass through (see the docblock); the rest are leaves
|
|
666
|
+
// whose checks the strip walker deliberately leaves in place —
|
|
667
|
+
// an async check on one of these still poisons the sync parse
|
|
668
|
+
// and the callers' defensive catch owns that case.
|
|
669
|
+
case "pipe":
|
|
792
670
|
case "boolean":
|
|
793
671
|
case "date":
|
|
794
672
|
case "enum":
|
|
@@ -809,235 +687,10 @@ function stripAsyncChecks(schema) {
|
|
|
809
687
|
case "symbol":
|
|
810
688
|
case "function":
|
|
811
689
|
return s;
|
|
812
|
-
default:
|
|
813
|
-
return unhandledZodKind("stripAsyncChecks", kind);
|
|
814
690
|
}
|
|
815
691
|
}
|
|
816
692
|
return recurse(schema);
|
|
817
693
|
}
|
|
818
|
-
function getSlimSchema(schema, stripConfig, maxRecursionDepth) {
|
|
819
|
-
return walkSlim(schema, stripConfig, maxRecursionDepth, 0);
|
|
820
|
-
}
|
|
821
|
-
function walkSlim(schema, stripConfig, maxDepth, lazyDepth) {
|
|
822
|
-
const kind = kindOf(schema);
|
|
823
|
-
switch (kind) {
|
|
824
|
-
case "optional": {
|
|
825
|
-
const inner = unwrapInner(schema) ?? schema;
|
|
826
|
-
const slimmedInner = walkSlim(inner, stripConfig, maxDepth, lazyDepth);
|
|
827
|
-
return stripConfig.stripOptional === true ? slimmedInner : slimmedInner.optional();
|
|
828
|
-
}
|
|
829
|
-
case "nullable": {
|
|
830
|
-
const inner = unwrapInner(schema) ?? schema;
|
|
831
|
-
const slimmedInner = walkSlim(inner, stripConfig, maxDepth, lazyDepth);
|
|
832
|
-
return stripConfig.stripNullable === true ? slimmedInner : slimmedInner.nullable();
|
|
833
|
-
}
|
|
834
|
-
case "default": {
|
|
835
|
-
const inner = unwrapInner(schema) ?? schema;
|
|
836
|
-
const slimmedInner = walkSlim(inner, stripConfig, maxDepth, lazyDepth);
|
|
837
|
-
if (stripConfig.stripDefaultValues === true) return slimmedInner;
|
|
838
|
-
const defaultValue = getDefaultValue(schema);
|
|
839
|
-
return slimmedInner.default(defaultValue);
|
|
840
|
-
}
|
|
841
|
-
case "readonly": {
|
|
842
|
-
const inner = unwrapInner(schema);
|
|
843
|
-
return inner === void 0 ? schema : walkSlim(inner, stripConfig, maxDepth, lazyDepth).readonly();
|
|
844
|
-
}
|
|
845
|
-
case "pipe": {
|
|
846
|
-
if (stripConfig.stripPipe === true) {
|
|
847
|
-
const pipeIn = unwrapPipeIn(schema);
|
|
848
|
-
const pipeOut = unwrapPipeOut(schema);
|
|
849
|
-
const real = pipeIn !== void 0 && kindOf(pipeIn) !== "transform" ? pipeIn : pipeOut !== void 0 && kindOf(pipeOut) !== "transform" ? pipeOut : pipeIn ?? pipeOut ?? schema;
|
|
850
|
-
return walkSlim(real, stripConfig, maxDepth, lazyDepth);
|
|
851
|
-
}
|
|
852
|
-
return schema;
|
|
853
|
-
}
|
|
854
|
-
case "object": {
|
|
855
|
-
const shape = getObjectShape(schema);
|
|
856
|
-
const next = {};
|
|
857
|
-
for (const [k, v] of Object.entries(shape)) {
|
|
858
|
-
next[k] = walkSlim(v, stripConfig, maxDepth, lazyDepth);
|
|
859
|
-
}
|
|
860
|
-
return carryChecks(z.object(next), schema, stripConfig);
|
|
861
|
-
}
|
|
862
|
-
case "array": {
|
|
863
|
-
const element = getArrayElement(schema);
|
|
864
|
-
return carryChecks(
|
|
865
|
-
z.array(walkSlim(element, stripConfig, maxDepth, lazyDepth)),
|
|
866
|
-
schema,
|
|
867
|
-
stripConfig
|
|
868
|
-
);
|
|
869
|
-
}
|
|
870
|
-
case "set": {
|
|
871
|
-
const valueType = getSetValueType(schema);
|
|
872
|
-
return carryChecks(
|
|
873
|
-
z.set(walkSlim(valueType, stripConfig, maxDepth, lazyDepth)),
|
|
874
|
-
schema,
|
|
875
|
-
stripConfig
|
|
876
|
-
);
|
|
877
|
-
}
|
|
878
|
-
case "tuple": {
|
|
879
|
-
const items = getTupleItems(schema).map(
|
|
880
|
-
(it) => walkSlim(it, stripConfig, maxDepth, lazyDepth)
|
|
881
|
-
);
|
|
882
|
-
const rebuilt = z.tuple(
|
|
883
|
-
items
|
|
884
|
-
);
|
|
885
|
-
return carryChecks(rebuilt, schema, stripConfig);
|
|
886
|
-
}
|
|
887
|
-
case "record": {
|
|
888
|
-
const keyType = getRecordKeyType(schema);
|
|
889
|
-
const valueType = walkSlim(getRecordValueType(schema), stripConfig, maxDepth, lazyDepth);
|
|
890
|
-
const rebuilt = z.record(keyType, valueType);
|
|
891
|
-
return carryChecks(rebuilt, schema, stripConfig);
|
|
892
|
-
}
|
|
893
|
-
case "union": {
|
|
894
|
-
const options = getUnionOptions(schema).map(
|
|
895
|
-
(opt) => walkSlim(opt, stripConfig, maxDepth, lazyDepth)
|
|
896
|
-
);
|
|
897
|
-
const rebuilt = z.union(options);
|
|
898
|
-
return carryChecks(rebuilt, schema, stripConfig);
|
|
899
|
-
}
|
|
900
|
-
case "discriminated-union": {
|
|
901
|
-
const options = getDiscriminatedOptions(schema).map(
|
|
902
|
-
(opt) => walkSlim(opt, stripConfig, maxDepth, lazyDepth)
|
|
903
|
-
);
|
|
904
|
-
const discriminator = getDiscriminator(schema);
|
|
905
|
-
if (discriminator === void 0) return schema;
|
|
906
|
-
return z.discriminatedUnion(
|
|
907
|
-
discriminator,
|
|
908
|
-
options
|
|
909
|
-
);
|
|
910
|
-
}
|
|
911
|
-
// Leaves: strip refinements if requested, otherwise pass through.
|
|
912
|
-
case "string":
|
|
913
|
-
case "number":
|
|
914
|
-
case "bigint":
|
|
915
|
-
return stripConfig.stripRefinements === true && hasChecks(schema) ? stripRefinements(schema) : schema;
|
|
916
|
-
case "boolean":
|
|
917
|
-
case "date":
|
|
918
|
-
case "enum":
|
|
919
|
-
case "literal":
|
|
920
|
-
case "null":
|
|
921
|
-
case "undefined":
|
|
922
|
-
case "any":
|
|
923
|
-
case "unknown":
|
|
924
|
-
case "nan":
|
|
925
|
-
case "void":
|
|
926
|
-
case "never":
|
|
927
|
-
case "promise":
|
|
928
|
-
case "custom":
|
|
929
|
-
case "template-literal":
|
|
930
|
-
case "map":
|
|
931
|
-
case "symbol":
|
|
932
|
-
case "function":
|
|
933
|
-
return schema;
|
|
934
|
-
case "lazy": {
|
|
935
|
-
if (lazyDepth >= maxDepth) return schema;
|
|
936
|
-
const inner = unwrapLazy(schema);
|
|
937
|
-
if (inner === void 0) return schema;
|
|
938
|
-
const slimmedInner = walkSlim(inner, stripConfig, maxDepth, lazyDepth + 1);
|
|
939
|
-
return z.lazy(() => slimmedInner);
|
|
940
|
-
}
|
|
941
|
-
case "intersection": {
|
|
942
|
-
const left = getIntersectionLeft(schema);
|
|
943
|
-
const right = getIntersectionRight(schema);
|
|
944
|
-
if (left === void 0 || right === void 0) return schema;
|
|
945
|
-
return z.intersection(
|
|
946
|
-
walkSlim(left, stripConfig, maxDepth, lazyDepth),
|
|
947
|
-
walkSlim(right, stripConfig, maxDepth, lazyDepth)
|
|
948
|
-
);
|
|
949
|
-
}
|
|
950
|
-
case "catch": {
|
|
951
|
-
const inner = unwrapInner(schema);
|
|
952
|
-
if (inner === void 0) return schema;
|
|
953
|
-
const slimmedInner = walkSlim(inner, stripConfig, maxDepth, lazyDepth);
|
|
954
|
-
return slimmedInner.catch(getCatchDefault(schema));
|
|
955
|
-
}
|
|
956
|
-
case "transform":
|
|
957
|
-
case "file":
|
|
958
|
-
return schema;
|
|
959
|
-
default:
|
|
960
|
-
return unhandledZodKind("getSlimSchema", kind);
|
|
961
|
-
}
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
function deriveDefault(schema, useDefault, maxRecursionDepth) {
|
|
965
|
-
return deriveDefaultWalk(schema, useDefault, V4_INTROSPECTOR, maxRecursionDepth, {
|
|
966
|
-
// v4 has an exhaustive switch against `SchemaIntrospector.kindOf`;
|
|
967
|
-
// unknown kinds genuinely shouldn't appear, so return undefined.
|
|
968
|
-
unsupportedKindFallback: () => void 0,
|
|
969
|
-
// v4 historically recurses into the inner on `useDefault=false`
|
|
970
|
-
// so a `.catch(v)` slot returns the leaf empty rather than the
|
|
971
|
-
// fallback. Pinned by `test/adapters/zod-v4/unsupported-kinds.test.ts`
|
|
972
|
-
// (`z.catch falls through to inner leaf default when useDefault=false`).
|
|
973
|
-
catchOnUseDefaultFalse: "recurseInner"
|
|
974
|
-
});
|
|
975
|
-
}
|
|
976
|
-
function getDefaultValuesFromZodSchema(opts) {
|
|
977
|
-
const { schema, useDefaultSchemaValues, constraints, maxRecursionDepth } = opts;
|
|
978
|
-
const initial = deriveDefault(schema, useDefaultSchemaValues, maxRecursionDepth);
|
|
979
|
-
const merged = mergeDeep(initial, constraints);
|
|
980
|
-
const slimSchema = getSlimSchema(
|
|
981
|
-
schema,
|
|
982
|
-
{
|
|
983
|
-
stripDefaultValues: true,
|
|
984
|
-
stripPipe: true,
|
|
985
|
-
stripRefinements: true
|
|
986
|
-
},
|
|
987
|
-
maxRecursionDepth
|
|
988
|
-
);
|
|
989
|
-
const firstParse = slimSchema.safeParse(merged);
|
|
990
|
-
if (firstParse.success) {
|
|
991
|
-
return { data: firstParse.data, success: true, slimSchema };
|
|
992
|
-
}
|
|
993
|
-
let fixedData = merged;
|
|
994
|
-
for (const issue of firstParse.error.issues) {
|
|
995
|
-
const pathSegments = issue.path.map((seg) => typeof seg === "number" ? seg : String(seg));
|
|
996
|
-
const originalCandidate = getNestedZodSchemasAtPath(schema, pathSegments, maxRecursionDepth)[0];
|
|
997
|
-
if (originalCandidate !== void 0) {
|
|
998
|
-
if (isCoercePrimitive(originalCandidate)) continue;
|
|
999
|
-
if (kindOf(originalCandidate) === "pipe") {
|
|
1000
|
-
const pipeIn = unwrapPipeIn(originalCandidate);
|
|
1001
|
-
if (pipeIn !== void 0 && kindOf(pipeIn) === "transform") continue;
|
|
1002
|
-
}
|
|
1003
|
-
}
|
|
1004
|
-
const candidates = getNestedZodSchemasAtPath(slimSchema, pathSegments, maxRecursionDepth);
|
|
1005
|
-
if (candidates.length === 0) continue;
|
|
1006
|
-
const candidate = candidates[0];
|
|
1007
|
-
if (candidate === void 0) continue;
|
|
1008
|
-
const valueAtPath = getAtPath(merged, pathSegments);
|
|
1009
|
-
const slimKinds = slimPrimitivesOf(candidate, maxRecursionDepth);
|
|
1010
|
-
if (slimKinds.size > 0 && slimKinds.has(slimKindOf(valueAtPath))) {
|
|
1011
|
-
continue;
|
|
1012
|
-
}
|
|
1013
|
-
const fixValue = defaultFromIssue(issue, candidate, useDefaultSchemaValues, maxRecursionDepth);
|
|
1014
|
-
if (fixValue === SKIP) continue;
|
|
1015
|
-
fixedData = pathSegments.length === 0 ? fixValue : setAtPath(fixedData, pathSegments, fixValue);
|
|
1016
|
-
}
|
|
1017
|
-
const secondParse = slimSchema.safeParse(fixedData);
|
|
1018
|
-
if (secondParse.success) {
|
|
1019
|
-
return { data: secondParse.data, success: true, slimSchema };
|
|
1020
|
-
}
|
|
1021
|
-
return { data: fixedData, success: false, slimSchema };
|
|
1022
|
-
}
|
|
1023
|
-
const SKIP = /* @__PURE__ */ Symbol("atta:skip-fix");
|
|
1024
|
-
function defaultFromIssue(issue, candidate, useDefaultSchemaValues, maxRecursionDepth) {
|
|
1025
|
-
if (issue.code === "invalid_type") {
|
|
1026
|
-
const du = unwrapToDiscriminatedUnion(candidate);
|
|
1027
|
-
if (du !== void 0) {
|
|
1028
|
-
const first = getDiscriminatedUnionFirstOption(du);
|
|
1029
|
-
if (first !== void 0)
|
|
1030
|
-
return deriveDefault(first, useDefaultSchemaValues, maxRecursionDepth);
|
|
1031
|
-
}
|
|
1032
|
-
return deriveDefault(candidate, useDefaultSchemaValues, maxRecursionDepth);
|
|
1033
|
-
}
|
|
1034
|
-
if (issue.code === "invalid_value") {
|
|
1035
|
-
const values = issue.values;
|
|
1036
|
-
if (values !== void 0 && values.length > 0) return values[0];
|
|
1037
|
-
return deriveDefault(candidate, useDefaultSchemaValues, maxRecursionDepth);
|
|
1038
|
-
}
|
|
1039
|
-
return deriveDefault(candidate, useDefaultSchemaValues, maxRecursionDepth);
|
|
1040
|
-
}
|
|
1041
694
|
|
|
1042
695
|
function unwrapStructuralWrappers(schema) {
|
|
1043
696
|
let current = schema;
|
|
@@ -1153,7 +806,7 @@ function buildV4Services() {
|
|
|
1153
806
|
peelAllWrappers: (schema) => peelAllWrappers(schema),
|
|
1154
807
|
isLeafRequired: (schema) => isLeafRequired(schema),
|
|
1155
808
|
resolveFieldMetaAtPath: (schema, path, maxRecursionDepth) => resolveFieldMetaAtPath(schema, path, maxRecursionDepth),
|
|
1156
|
-
issuesToValidationErrors: (issues
|
|
809
|
+
issuesToValidationErrors: (issues) => zodIssuesToValidationErrors(issues),
|
|
1157
810
|
safeParseSync: (schema, data) => {
|
|
1158
811
|
const result = schema.safeParse(data);
|
|
1159
812
|
return result.success ? { success: true, data: result.data } : { success: false, issues: result.error.issues };
|
|
@@ -1186,7 +839,7 @@ function runStrictGetDefaultsV4(rootSchema, config, formKey, maxRecursionDepth)
|
|
|
1186
839
|
}
|
|
1187
840
|
return {
|
|
1188
841
|
data,
|
|
1189
|
-
errors: zodIssuesToValidationErrors(strictResult.error.issues
|
|
842
|
+
errors: zodIssuesToValidationErrors(strictResult.error.issues),
|
|
1190
843
|
success: false,
|
|
1191
844
|
formKey
|
|
1192
845
|
};
|
|
@@ -1217,7 +870,7 @@ function buildSubSchemaStubV4(schema, formKey, maxRecursionDepth) {
|
|
|
1217
870
|
}
|
|
1218
871
|
return {
|
|
1219
872
|
data: void 0,
|
|
1220
|
-
errors: zodIssuesToValidationErrors(result.error.issues
|
|
873
|
+
errors: zodIssuesToValidationErrors(result.error.issues),
|
|
1221
874
|
success: false,
|
|
1222
875
|
formKey
|
|
1223
876
|
};
|
|
@@ -1236,14 +889,14 @@ function resolveFieldMetaAtPath(rootSchema, path, maxRecursionDepth) {
|
|
|
1236
889
|
meta: Object.freeze({})
|
|
1237
890
|
};
|
|
1238
891
|
}
|
|
1239
|
-
const pathMap =
|
|
892
|
+
const pathMap = buildFieldMetaPathMap(rootSchema, {
|
|
1240
893
|
intro: V4_INTROSPECTOR,
|
|
1241
894
|
peelAllWrappers,
|
|
1242
|
-
getFieldMetaList
|
|
895
|
+
getFieldMetaList: getFieldMetaListForSchema
|
|
1243
896
|
});
|
|
1244
897
|
const pathKey = canonicalizePath(path).key;
|
|
1245
898
|
const peeled = peelAllWrappers(target);
|
|
1246
|
-
const payload = pathMap
|
|
899
|
+
const payload = pathMap?.get(pathKey) ?? getFieldMetaForSchema(target) ?? (peeled !== target ? getFieldMetaForSchema(peeled) : void 0);
|
|
1247
900
|
const targetDescription = readDescription(target);
|
|
1248
901
|
const peeledDescription = peeled !== target ? readDescription(peeled) : void 0;
|
|
1249
902
|
const schemaDescription = targetDescription ?? peeledDescription;
|
|
@@ -1271,5 +924,4 @@ function useForm(configuration) {
|
|
|
1271
924
|
});
|
|
1272
925
|
}
|
|
1273
926
|
|
|
1274
|
-
export { UnsupportedSchemaError as U, assertZodVersion as a, getIntersectionRight as b, unwrapLazy as c, unwrapInner as d, unwrapPipe as e,
|
|
1275
|
-
//# sourceMappingURL=attaform.DMxM2kol.mjs.map
|
|
927
|
+
export { UnsupportedSchemaError as U, assertZodVersion as a, getIntersectionRight as b, unwrapLazy as c, unwrapInner as d, unwrapPipe as e, getDiscriminator as f, getIntersectionLeft as g, getDiscriminatedOptions as h, getUnionOptions as i, getRecordKeyType as j, kindOf as k, getRecordValueType as l, getTupleItems as m, getSetValueType as n, getArrayElement as o, getObjectShape as p, getEnumValues as q, getLiteralValues as r, getChecks as s, getCatchDefault as t, useForm as u, getDefaultValue as v, zodV4Adapter as z };
|