attaform 0.27.5 → 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.
Files changed (184) hide show
  1. package/dist/abstract.d.mts +5 -4
  2. package/dist/abstract.mjs +4 -3
  3. package/dist/chunks/fingerprint.mjs +0 -1
  4. package/dist/chunks/fingerprint2.mjs +1 -2
  5. package/dist/dev/abstract.mjs +4 -0
  6. package/dist/{chunks → dev/chunks}/dev-key-collision-warnings.mjs +0 -1
  7. package/dist/{chunks → dev/chunks}/devtools.mjs +5 -6
  8. package/dist/{chunks/fingerprint.cjs → dev/chunks/fingerprint.mjs} +7 -10
  9. package/dist/{chunks/fingerprint2.cjs → dev/chunks/fingerprint2.mjs} +32 -35
  10. package/dist/dev/directive.mjs +1 -0
  11. package/dist/dev/history.mjs +89 -0
  12. package/dist/dev/index.mjs +5 -0
  13. package/dist/dev/runtime/plugins/attaform.mjs +40 -0
  14. package/dist/{shared/attaform.f2zyNh5d.cjs → dev/shared/attaform-dev.6qxD-Yqo.mjs} +187 -43
  15. package/dist/{shared/attaform.CQN9R62B.cjs → dev/shared/attaform-dev.BJGA_UOS.mjs} +1 -4
  16. package/dist/{shared/attaform.Dc1mx48r.mjs → dev/shared/attaform-dev.BR8u0YOZ.mjs} +6 -7
  17. package/dist/dev/shared/attaform-dev.BXE2cr0L.mjs +220 -0
  18. package/dist/dev/shared/attaform-dev.By4PRjt0.mjs +248 -0
  19. package/dist/{shared/attaform.Cg_8gFQ7.mjs → dev/shared/attaform-dev.D2I8e_Mm.mjs} +132 -568
  20. package/dist/dev/shared/attaform-dev.Dr2YzS5B.mjs +197 -0
  21. package/dist/{shared/attaform.nMaz2C5P.mjs → dev/shared/attaform-dev.P7cseiEG.mjs} +178 -397
  22. package/dist/{shared/attaform.BypWgXRB.mjs → dev/shared/attaform-dev.WmuhD_CZ.mjs} +3955 -5029
  23. package/dist/{shared/attaform.Dkjh_F30.mjs → dev/shared/attaform-dev.oYrkP9dj.mjs} +160 -508
  24. package/dist/dev/zod-v3.mjs +17 -0
  25. package/dist/dev/zod-v4.mjs +16 -0
  26. package/dist/dev/zod.mjs +5 -0
  27. package/dist/directive.d.mts +20 -0
  28. package/dist/directive.mjs +1 -0
  29. package/dist/esbuild.mjs +0 -1
  30. package/dist/history.d.mts +59 -0
  31. package/dist/history.mjs +89 -0
  32. package/dist/index.d.mts +11 -5
  33. package/dist/index.mjs +5 -4
  34. package/dist/nuxt.d.mts +1 -1
  35. package/dist/nuxt.mjs +5 -2
  36. package/dist/rollup.mjs +0 -1
  37. package/dist/rspack.d.mts +6 -1
  38. package/dist/rspack.mjs +0 -1
  39. package/dist/runtime/components/AttaformDevtoolsPanel.vue +9 -8
  40. package/dist/runtime/plugins/attaform.mjs +1 -2
  41. package/dist/shared/{attaform.CIBMfxg9.d.ts → attaform.B4VkS43-.d.mts} +2 -2
  42. package/dist/shared/{attaform.Cg1rUfcF.cjs → attaform.B8k8JrmK.mjs} +3778 -5297
  43. package/dist/shared/attaform.BJGA_UOS.mjs +0 -1
  44. package/dist/shared/{attaform.CTiZ9Rrv.mjs → attaform.C09fpdLS.mjs} +172 -16
  45. package/dist/shared/{attaform.Bh8A6YAc.cjs → attaform.CJP3RkGa.mjs} +141 -590
  46. package/dist/shared/{attaform.CzL2CZ8U.d.ts → attaform.Cgu-hdSb.d.mts} +328 -78
  47. package/dist/shared/attaform.Cs2Rbdlo.mjs +0 -1
  48. package/dist/shared/{attaform.DcFDQVpa.d.ts → attaform.D5V4tZWq.d.mts} +79 -179
  49. package/dist/shared/{attaform.CF-EnyJn.cjs → attaform.D6DCnnQu.mjs} +11 -16
  50. package/dist/shared/attaform.DhnPb6nK.mjs +0 -1
  51. package/dist/shared/attaform.Dq4vWxuG.mjs +197 -0
  52. package/dist/shared/attaform.JfSWdEcb.d.mts +44 -0
  53. package/dist/shared/attaform.KvlEedlF.mjs +0 -1
  54. package/dist/shared/{attaform.Crv0RNiz.cjs → attaform.NLmerepI.mjs} +175 -557
  55. package/dist/shared/attaform.h0i6LijT.mjs +242 -0
  56. package/dist/shared/{attaform.Biytrv0-.cjs → attaform.uLbun31C.mjs} +204 -544
  57. package/dist/shared/attaform.v0fQtWyA.mjs +0 -1
  58. package/dist/shared/attaform.wfY8XFvm.mjs +197 -0
  59. package/dist/transforms.mjs +0 -1
  60. package/dist/vite.d.mts +17 -5
  61. package/dist/vite.mjs +24 -2
  62. package/dist/webpack.d.mts +6 -1
  63. package/dist/webpack.mjs +0 -1
  64. package/dist/zod-v3.d.mts +11 -6
  65. package/dist/zod-v3.mjs +17 -4
  66. package/dist/zod-v4.d.mts +12 -6
  67. package/dist/zod-v4.mjs +16 -4
  68. package/dist/zod.d.mts +4 -3
  69. package/dist/zod.mjs +5 -4
  70. package/package.json +23 -8
  71. package/skills/attaform/SKILL.md +2 -1
  72. package/dist/abstract.cjs +0 -48
  73. package/dist/abstract.cjs.map +0 -1
  74. package/dist/abstract.d.cts +0 -42
  75. package/dist/abstract.d.ts +0 -42
  76. package/dist/abstract.mjs.map +0 -1
  77. package/dist/chunks/dev-key-collision-warnings.cjs +0 -25
  78. package/dist/chunks/dev-key-collision-warnings.cjs.map +0 -1
  79. package/dist/chunks/dev-key-collision-warnings.mjs.map +0 -1
  80. package/dist/chunks/devtools.cjs +0 -157
  81. package/dist/chunks/devtools.cjs.map +0 -1
  82. package/dist/chunks/devtools.mjs.map +0 -1
  83. package/dist/chunks/fingerprint.cjs.map +0 -1
  84. package/dist/chunks/fingerprint.mjs.map +0 -1
  85. package/dist/chunks/fingerprint2.cjs.map +0 -1
  86. package/dist/chunks/fingerprint2.mjs.map +0 -1
  87. package/dist/esbuild.cjs +0 -28
  88. package/dist/esbuild.cjs.map +0 -1
  89. package/dist/esbuild.d.cts +0 -56
  90. package/dist/esbuild.d.ts +0 -56
  91. package/dist/esbuild.mjs.map +0 -1
  92. package/dist/index.cjs +0 -51
  93. package/dist/index.cjs.map +0 -1
  94. package/dist/index.d.cts +0 -249
  95. package/dist/index.d.ts +0 -249
  96. package/dist/index.mjs.map +0 -1
  97. package/dist/nuxt.cjs +0 -84
  98. package/dist/nuxt.cjs.map +0 -1
  99. package/dist/nuxt.d.cts +0 -66
  100. package/dist/nuxt.d.ts +0 -66
  101. package/dist/nuxt.mjs.map +0 -1
  102. package/dist/rollup.cjs +0 -24
  103. package/dist/rollup.cjs.map +0 -1
  104. package/dist/rollup.d.cts +0 -35
  105. package/dist/rollup.d.ts +0 -35
  106. package/dist/rollup.mjs.map +0 -1
  107. package/dist/rspack.cjs +0 -10
  108. package/dist/rspack.cjs.map +0 -1
  109. package/dist/rspack.d.cts +0 -40
  110. package/dist/rspack.d.ts +0 -40
  111. package/dist/rspack.mjs.map +0 -1
  112. package/dist/runtime/components/AttaformDevtoolsPanel.vue.d.ts +0 -7
  113. package/dist/runtime/components/DevtoolsValueTree.vue.d.ts +0 -35
  114. package/dist/runtime/plugins/attaform.cjs +0 -43
  115. package/dist/runtime/plugins/attaform.cjs.map +0 -1
  116. package/dist/runtime/plugins/attaform.d.cts +0 -5
  117. package/dist/runtime/plugins/attaform.d.ts +0 -5
  118. package/dist/runtime/plugins/attaform.mjs.map +0 -1
  119. package/dist/shared/attaform.B3abZaCV.d.cts +0 -2484
  120. package/dist/shared/attaform.BJGA_UOS.mjs.map +0 -1
  121. package/dist/shared/attaform.Bh8A6YAc.cjs.map +0 -1
  122. package/dist/shared/attaform.Biytrv0-.cjs.map +0 -1
  123. package/dist/shared/attaform.Bn0IzhD_.cjs +0 -800
  124. package/dist/shared/attaform.Bn0IzhD_.cjs.map +0 -1
  125. package/dist/shared/attaform.BypWgXRB.mjs.map +0 -1
  126. package/dist/shared/attaform.C9fPTxjB.d.cts +0 -41
  127. package/dist/shared/attaform.C9fPTxjB.d.ts +0 -41
  128. package/dist/shared/attaform.CF-EnyJn.cjs.map +0 -1
  129. package/dist/shared/attaform.CJ1Z9Mz4.d.mts +0 -2484
  130. package/dist/shared/attaform.CQN9R62B.cjs.map +0 -1
  131. package/dist/shared/attaform.CTiZ9Rrv.mjs.map +0 -1
  132. package/dist/shared/attaform.Cg1rUfcF.cjs.map +0 -1
  133. package/dist/shared/attaform.Cg_8gFQ7.mjs.map +0 -1
  134. package/dist/shared/attaform.Crv0RNiz.cjs.map +0 -1
  135. package/dist/shared/attaform.Cs2Rbdlo.mjs.map +0 -1
  136. package/dist/shared/attaform.CzL2CZ8U.d.cts +0 -4713
  137. package/dist/shared/attaform.CzL2CZ8U.d.mts +0 -4713
  138. package/dist/shared/attaform.DRUT703x.d.cts +0 -56
  139. package/dist/shared/attaform.DRUT703x.d.ts +0 -56
  140. package/dist/shared/attaform.DYwyM5Cp.d.cts +0 -232
  141. package/dist/shared/attaform.Dc1mx48r.mjs.map +0 -1
  142. package/dist/shared/attaform.DhnPb6nK.mjs.map +0 -1
  143. package/dist/shared/attaform.Dkjh_F30.mjs.map +0 -1
  144. package/dist/shared/attaform.DoQm_Vkd.cjs +0 -58
  145. package/dist/shared/attaform.DoQm_Vkd.cjs.map +0 -1
  146. package/dist/shared/attaform.DrHOqB-d.d.mts +0 -232
  147. package/dist/shared/attaform.KvlEedlF.mjs.map +0 -1
  148. package/dist/shared/attaform.RaTzp1WF.cjs +0 -26
  149. package/dist/shared/attaform.RaTzp1WF.cjs.map +0 -1
  150. package/dist/shared/attaform.f2zyNh5d.cjs.map +0 -1
  151. package/dist/shared/attaform.nMaz2C5P.mjs.map +0 -1
  152. package/dist/shared/attaform.v0fQtWyA.mjs.map +0 -1
  153. package/dist/shared/attaform.yUrz7C2z.cjs +0 -29
  154. package/dist/shared/attaform.yUrz7C2z.cjs.map +0 -1
  155. package/dist/transforms.cjs +0 -12
  156. package/dist/transforms.cjs.map +0 -1
  157. package/dist/transforms.d.cts +0 -73
  158. package/dist/transforms.d.ts +0 -73
  159. package/dist/transforms.mjs.map +0 -1
  160. package/dist/vite.cjs +0 -363
  161. package/dist/vite.cjs.map +0 -1
  162. package/dist/vite.d.cts +0 -133
  163. package/dist/vite.d.ts +0 -133
  164. package/dist/vite.mjs.map +0 -1
  165. package/dist/webpack.cjs +0 -10
  166. package/dist/webpack.cjs.map +0 -1
  167. package/dist/webpack.d.cts +0 -37
  168. package/dist/webpack.d.ts +0 -37
  169. package/dist/webpack.mjs.map +0 -1
  170. package/dist/zod-v3.cjs +0 -53
  171. package/dist/zod-v3.cjs.map +0 -1
  172. package/dist/zod-v3.d.cts +0 -246
  173. package/dist/zod-v3.d.ts +0 -246
  174. package/dist/zod-v3.mjs.map +0 -1
  175. package/dist/zod-v4.cjs +0 -55
  176. package/dist/zod-v4.cjs.map +0 -1
  177. package/dist/zod-v4.d.cts +0 -172
  178. package/dist/zod-v4.d.ts +0 -172
  179. package/dist/zod-v4.mjs.map +0 -1
  180. package/dist/zod.cjs +0 -51
  181. package/dist/zod.cjs.map +0 -1
  182. package/dist/zod.d.cts +0 -7
  183. package/dist/zod.d.ts +0 -7
  184. package/dist/zod.mjs.map +0 -1
@@ -1,31 +1,17 @@
1
- import { r as getAtPath, p as slimKindOf, t as setAtPath, q as humanize, h as useAbstractForm } from './attaform.BypWgXRB.mjs';
2
- import { A as AttaformError, _ as __DEV__, f as canonicalizePath, a as InvalidUseFormConfigError } from './attaform.nMaz2C5P.mjs';
3
- import { f as fieldMetaStore, g as getFieldMetaForSchema, a as getFieldMetaListForSchema, s as slimPrimitivesWalk, w as walkPathSegments, d as deriveDefaultWalk, m as mergeDeep, c as createAbstractSchema, b as getFieldMetaPathMap } from './attaform.CTiZ9Rrv.mjs';
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, formKey) {
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 (__DEV__ && !warnedZodCodeMissing) {
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
- switch (rawType) {
59
- case "object":
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
- if (def.innerType !== void 0 && walkSchemaTree(def.innerType, visit, visited)) {
282
- return true;
283
- }
284
- if (def.element !== void 0 && walkSchemaTree(def.element, visit, visited)) {
285
- return true;
286
- }
287
- if (def.in !== void 0 && walkSchemaTree(def.in, visit, visited)) return true;
288
- if (def.out !== void 0 && walkSchemaTree(def.out, visit, visited)) return true;
289
- if (def.left !== void 0 && walkSchemaTree(def.left, visit, visited)) return true;
290
- if (def.right !== void 0 && walkSchemaTree(def.right, visit, visited)) return true;
291
- if (def.keyType !== void 0 && walkSchemaTree(def.keyType, visit, visited)) {
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
- if (def.items !== void 0) {
313
- for (const sub of def.items) {
314
- if (walkSchemaTree(sub, visit, visited)) return true;
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 isContainer = def.shape !== void 0 || def.entries !== void 0 || def.element !== void 0 || def.options !== void 0 || def.items !== void 0 || def.keyType !== void 0 || def.valueType !== void 0 || def.left !== void 0 || def.right !== void 0;
345
- if (!isContainer) return false;
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(`assertSupportedKinds: unhandled ZodKind '${_exhaustive}'`);
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 carryChecks(rebuilt, original, stripConfig) {
575
- if (stripConfig.stripRefinements === true) return rebuilt;
564
+ function carrySyncChecks(rebuilt, original) {
576
565
  if (!hasChecks(original)) return rebuilt;
577
- const all = getChecks(original);
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) ? carryChecks(z.string(), s, config) : s;
580
+ return hasChecks(s) ? carrySyncChecks(z.string(), s) : s;
703
581
  case "number":
704
- return hasChecks(s) ? carryChecks(z.number(), s, config) : s;
582
+ return hasChecks(s) ? carrySyncChecks(z.number(), s) : s;
705
583
  case "bigint":
706
- return hasChecks(s) ? carryChecks(z.bigint(), s, config) : s;
584
+ return hasChecks(s) ? carrySyncChecks(z.bigint(), s) : s;
707
585
  case "array": {
708
586
  const element = getArrayElement(s);
709
- return carryChecks(z.array(recurse(element)), s, config);
587
+ return carrySyncChecks(z.array(recurse(element)), s);
710
588
  }
711
589
  case "set": {
712
- const valueType = getSetValueType(s);
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 carryChecks(rebuilt, s, config);
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 carryChecks(z.object(next), s, config);
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
- const rebuilt = z.record(keyType, valueType);
734
- return carryChecks(rebuilt, s, config);
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
- const rebuilt = z.union(
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
- if (inner === void 0) return s;
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
- if (inner === void 0) return s;
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
- if (inner === void 0) return s;
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
- // Leaves with no checks — pass through unchanged.
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, fk) => zodIssuesToValidationErrors(issues, fk),
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, formKey),
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, formKey),
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 = getFieldMetaPathMap(rootSchema, {
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.get(pathKey) ?? getFieldMeta(target) ?? (peeled !== target ? getFieldMeta(peeled) : void 0);
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, fieldMeta as f, getIntersectionLeft as g, getDiscriminator as h, getDiscriminatedOptions as i, getUnionOptions as j, kindOf as k, getRecordKeyType as l, getRecordValueType as m, getTupleItems as n, getSetValueType as o, getArrayElement as p, getObjectShape as q, getEnumValues as r, getLiteralValues as s, getChecks as t, useForm as u, getCatchDefault as v, withMeta as w, getDefaultValue as x, zodV4Adapter as z };
1275
- //# sourceMappingURL=attaform.Dkjh_F30.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 };