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
@@ -0,0 +1,197 @@
1
+ class AttaformError extends Error {
2
+ constructor(message, options) {
3
+ super(message, options);
4
+ this.name = new.target.name;
5
+ }
6
+ }
7
+ class InvalidPathError extends AttaformError {
8
+ }
9
+ class InvalidUseFormConfigError extends AttaformError {
10
+ constructor() {
11
+ super(
12
+ "[attaform] useForm received an invalid configuration (a schema directly, no argument, or no `schema` field). Pass it as `useForm({ schema })` \u2014 the schema is one of several configuration options. See https://attaform.dev/docs/reading-the-form/the-form for the full configuration shape."
13
+ );
14
+ }
15
+ }
16
+ class SubmitErrorHandlerError extends AttaformError {
17
+ }
18
+ function toError(value) {
19
+ if (value instanceof Error) return value;
20
+ const message = typeof value === "string" && value.length > 0 ? value : `Submit callback threw a non-Error value (${typeof value})`;
21
+ return new Error(message, { cause: value });
22
+ }
23
+ function normalizeErrorInput(item, scope, defaultCode) {
24
+ if (item instanceof Error) {
25
+ return {
26
+ message: item.message.length > 0 ? item.message : "Unknown error",
27
+ path: scope !== void 0 ? [...scope] : [],
28
+ code: defaultCode
29
+ };
30
+ }
31
+ const entry = {
32
+ message: typeof item.message === "string" && item.message.length > 0 ? item.message : "Unknown error",
33
+ path: scope !== void 0 ? [...scope] : Array.isArray(item.path) ? [...item.path] : [],
34
+ code: typeof item.code === "string" && item.code.length > 0 ? item.code : defaultCode
35
+ };
36
+ if (item.data !== void 0) entry.data = item.data;
37
+ return entry;
38
+ }
39
+ function normalizeErrorInputs(input, scope, defaultCode) {
40
+ const items = Array.isArray(input) ? input : [input];
41
+ return items.map((item) => normalizeErrorInput(item, scope, defaultCode));
42
+ }
43
+ function* cellEntriesFor(cells, side) {
44
+ for (const [key, cell] of cells) {
45
+ const list = cell[side];
46
+ if (list.length > 0) yield [key, list];
47
+ }
48
+ }
49
+ class RegistryNotInstalledError extends AttaformError {
50
+ constructor() {
51
+ super(
52
+ "[attaform] No registry attached to this Vue app. Component-level useForm / injectForm / useRegister auto-install the registry, but SSR helpers (renderAttaformState, hydrateAttaformState) run outside setup and require an explicit `app.use(createAttaform())` at server-render time. Add it to your SSR entry, before `renderToString`."
53
+ );
54
+ }
55
+ }
56
+ class OutsideSetupError extends AttaformError {
57
+ constructor() {
58
+ super(
59
+ "[attaform] useForm / injectForm called outside Vue setup(). Move into setup or mount a child component to trigger from an event."
60
+ );
61
+ }
62
+ }
63
+ class ReservedFormKeyError extends AttaformError {
64
+ constructor(key) {
65
+ super(
66
+ `[attaform] Form key "${key}" uses the reserved "__atta:" namespace. Use a different prefix \u2014 "__atta:" is for library-internal synthetic keys (anonymous useForm() calls without an explicit key).`
67
+ );
68
+ }
69
+ }
70
+ function groupErrorsByKey(entries) {
71
+ const grouped = /* @__PURE__ */ new Map();
72
+ for (const raw of entries) {
73
+ const { key } = canonicalizePath(raw.path);
74
+ const list = grouped.get(key);
75
+ if (list === void 0) grouped.set(key, [raw]);
76
+ else list.push(raw);
77
+ }
78
+ return grouped;
79
+ }
80
+
81
+ const INTEGER_SEGMENT = /^(?:0|[1-9]\d*)$/;
82
+ function normalizeSegment(raw) {
83
+ if (typeof raw === "number") {
84
+ if (!Number.isInteger(raw) || raw < 0) {
85
+ throw new InvalidPathError(
86
+ `Path segments must be non-negative integers when numeric; got ${String(raw)}`
87
+ );
88
+ }
89
+ return raw;
90
+ }
91
+ if (INTEGER_SEGMENT.test(raw)) return Number(raw);
92
+ return raw;
93
+ }
94
+ function parseDottedPath(path) {
95
+ if (path.length === 0) return [""];
96
+ const rawSegments = path.split(".");
97
+ const segments = [];
98
+ for (const raw of rawSegments) {
99
+ if (raw.length === 0) {
100
+ throw new InvalidPathError(
101
+ `Path '${path}' has an empty segment; use the array form for empty keys.`
102
+ );
103
+ }
104
+ segments.push(normalizeSegment(raw));
105
+ }
106
+ return segments;
107
+ }
108
+ const CANONICAL_STRING_CACHE_MAX = 128;
109
+ const canonicalStringCache = /* @__PURE__ */ new Map();
110
+ const PATHKEY_TO_SEGMENTS_MAX = 4096;
111
+ const pathKeyToSegments = /* @__PURE__ */ new Map();
112
+ function rememberSegmentsForPathKey(key, segments) {
113
+ if (!pathKeyToSegments.has(key) && pathKeyToSegments.size >= PATHKEY_TO_SEGMENTS_MAX) {
114
+ const oldest = pathKeyToSegments.keys().next().value;
115
+ if (oldest !== void 0) pathKeyToSegments.delete(oldest);
116
+ }
117
+ pathKeyToSegments.set(key, segments);
118
+ }
119
+ function segmentsForPathKey(key) {
120
+ const cached = pathKeyToSegments.get(key);
121
+ if (cached !== void 0) return cached;
122
+ let parsed;
123
+ try {
124
+ parsed = JSON.parse(key);
125
+ } catch {
126
+ return null;
127
+ }
128
+ if (!Array.isArray(parsed)) return null;
129
+ const segments = [];
130
+ for (const raw of parsed) {
131
+ if (typeof raw !== "string" && typeof raw !== "number") return null;
132
+ segments.push(normalizeSegment(raw));
133
+ }
134
+ rememberSegmentsForPathKey(key, segments);
135
+ return segments;
136
+ }
137
+ function canonicalizePath(input) {
138
+ if (typeof input === "string") {
139
+ const cached = canonicalStringCache.get(input);
140
+ if (cached !== void 0) return cached;
141
+ const segments = parseDottedPath(input);
142
+ const key = JSON.stringify(segments);
143
+ const entry = { segments, key };
144
+ if (canonicalStringCache.size >= CANONICAL_STRING_CACHE_MAX) {
145
+ const oldest = canonicalStringCache.keys().next().value;
146
+ if (oldest !== void 0) canonicalStringCache.delete(oldest);
147
+ }
148
+ canonicalStringCache.set(input, entry);
149
+ rememberSegmentsForPathKey(key, segments);
150
+ return entry;
151
+ }
152
+ return keyForSegments(input);
153
+ }
154
+ function keyForSegments(input) {
155
+ const segments = Array.from(input).map(normalizeSegment);
156
+ const key = JSON.stringify(segments);
157
+ rememberSegmentsForPathKey(key, segments);
158
+ return { segments, key };
159
+ }
160
+ function segmentsToDotted(segments) {
161
+ return segments.join(".");
162
+ }
163
+ function pathKeyToDotted(key) {
164
+ const segments = segmentsForPathKey(key);
165
+ if (segments === null) return null;
166
+ return segmentsToDotted(segments);
167
+ }
168
+ function coerceToPathKey(input) {
169
+ if (input.length > 0 && input.charCodeAt(0) === 91) {
170
+ try {
171
+ const parsed = JSON.parse(input);
172
+ if (Array.isArray(parsed) && parsed.every((s) => typeof s === "string" || typeof s === "number")) {
173
+ return input;
174
+ }
175
+ } catch {
176
+ }
177
+ }
178
+ return canonicalizePath(input).key;
179
+ }
180
+ const ROOT_PATH = Object.freeze([]);
181
+ const ROOT_PATH_KEY = "[]";
182
+ function isPathPrefix(prefix, path) {
183
+ if (path.length < prefix.length) return false;
184
+ for (let i = 0; i < prefix.length; i++) {
185
+ if (path[i] !== prefix[i]) return false;
186
+ }
187
+ return true;
188
+ }
189
+ function pathsEqual(a, b) {
190
+ if (a.length !== b.length) return false;
191
+ for (let i = 0; i < a.length; i++) {
192
+ if (a[i] !== b[i]) return false;
193
+ }
194
+ return true;
195
+ }
196
+
197
+ export { AttaformError as A, InvalidPathError as I, OutsideSetupError as O, ROOT_PATH as R, SubmitErrorHandlerError as S, InvalidUseFormConfigError as a, ROOT_PATH_KEY as b, RegistryNotInstalledError as c, ReservedFormKeyError as d, canonicalizePath as e, pathsEqual as f, pathKeyToDotted as g, cellEntriesFor as h, isPathPrefix as i, groupErrorsByKey as j, keyForSegments as k, normalizeErrorInputs as l, coerceToPathKey as m, normalizeErrorInput as n, parseDottedPath as p, segmentsForPathKey as s, toError as t };