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.
- 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.f2zyNh5d.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.Dc1mx48r.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.Cg_8gFQ7.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.BypWgXRB.mjs → dev/shared/attaform-dev.WmuhD_CZ.mjs} +3955 -5029
- package/dist/{shared/attaform.Dkjh_F30.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.CIBMfxg9.d.ts → attaform.B4VkS43-.d.mts} +2 -2
- package/dist/shared/{attaform.Cg1rUfcF.cjs → attaform.B8k8JrmK.mjs} +3778 -5297
- package/dist/shared/attaform.BJGA_UOS.mjs +0 -1
- package/dist/shared/{attaform.CTiZ9Rrv.mjs → attaform.C09fpdLS.mjs} +172 -16
- package/dist/shared/{attaform.Bh8A6YAc.cjs → attaform.CJP3RkGa.mjs} +141 -590
- package/dist/shared/{attaform.CzL2CZ8U.d.ts → attaform.Cgu-hdSb.d.mts} +328 -78
- package/dist/shared/attaform.Cs2Rbdlo.mjs +0 -1
- package/dist/shared/{attaform.DcFDQVpa.d.ts → attaform.D5V4tZWq.d.mts} +79 -179
- package/dist/shared/{attaform.CF-EnyJn.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.Crv0RNiz.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.B3abZaCV.d.cts +0 -2484
- package/dist/shared/attaform.BJGA_UOS.mjs.map +0 -1
- package/dist/shared/attaform.Bh8A6YAc.cjs.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.BypWgXRB.mjs.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.CF-EnyJn.cjs.map +0 -1
- package/dist/shared/attaform.CJ1Z9Mz4.d.mts +0 -2484
- package/dist/shared/attaform.CQN9R62B.cjs.map +0 -1
- package/dist/shared/attaform.CTiZ9Rrv.mjs.map +0 -1
- package/dist/shared/attaform.Cg1rUfcF.cjs.map +0 -1
- package/dist/shared/attaform.Cg_8gFQ7.mjs.map +0 -1
- package/dist/shared/attaform.Crv0RNiz.cjs.map +0 -1
- package/dist/shared/attaform.Cs2Rbdlo.mjs.map +0 -1
- package/dist/shared/attaform.CzL2CZ8U.d.cts +0 -4713
- package/dist/shared/attaform.CzL2CZ8U.d.mts +0 -4713
- package/dist/shared/attaform.DRUT703x.d.cts +0 -56
- package/dist/shared/attaform.DRUT703x.d.ts +0 -56
- package/dist/shared/attaform.DYwyM5Cp.d.cts +0 -232
- package/dist/shared/attaform.Dc1mx48r.mjs.map +0 -1
- package/dist/shared/attaform.DhnPb6nK.mjs.map +0 -1
- package/dist/shared/attaform.Dkjh_F30.mjs.map +0 -1
- package/dist/shared/attaform.DoQm_Vkd.cjs +0 -58
- package/dist/shared/attaform.DoQm_Vkd.cjs.map +0 -1
- package/dist/shared/attaform.DrHOqB-d.d.mts +0 -232
- 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.f2zyNh5d.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
|
@@ -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 };
|