@dynamicforms/vue-forms 2.0.2 → 3.0.0-alpha.1

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.
@@ -0,0 +1,61 @@
1
+ import { Plugin as Plugin_2 } from '@dynamicforms/vue-forms';
2
+
3
+ /**
4
+ * Turns on or off the development warning for a class instance held without tracking. On by default; a production
5
+ * build has no warning.
6
+ */
7
+ export declare function setTrackingWarnings(enabled: boolean): void;
8
+
9
+ /** A `Date` a field holds: every setter is a change of the field. */
10
+ export declare class TrackedDate extends Date {
11
+ setTime(time: number): number;
12
+ setMilliseconds(...args: [number]): number;
13
+ setUTCMilliseconds(...args: [number]): number;
14
+ setSeconds(...args: [number, number?]): number;
15
+ setUTCSeconds(...args: [number, number?]): number;
16
+ setMinutes(...args: [number, number?, number?]): number;
17
+ setUTCMinutes(...args: [number, number?, number?]): number;
18
+ setHours(...args: [number, number?, number?, number?]): number;
19
+ setUTCHours(...args: [number, number?, number?, number?]): number;
20
+ setDate(...args: [number]): number;
21
+ setUTCDate(...args: [number]): number;
22
+ setMonth(...args: [number, number?]): number;
23
+ setUTCMonth(...args: [number, number?]): number;
24
+ setFullYear(...args: [number, number?, number?]): number;
25
+ setUTCFullYear(...args: [number, number?, number?]): number;
26
+ }
27
+
28
+ /** A `Map` a field holds: `set`, `delete` and `clear` are changes of the field. */
29
+ export declare class TrackedMap<K = unknown, V = unknown> extends Map<K, V> {
30
+ set(key: K, value: V): this;
31
+ delete(key: K): boolean;
32
+ clear(): void;
33
+ }
34
+
35
+ /** A `Set` a field holds: `add`, `delete` and `clear` are changes of the field. */
36
+ export declare class TrackedSet<V = unknown> extends Set<V> {
37
+ add(value: V): this;
38
+ delete(value: V): boolean;
39
+ clear(): void;
40
+ }
41
+
42
+ /**
43
+ * Makes a write into the value a field holds a change of the field. Install it with `installPlugin(tracking)`.
44
+ *
45
+ * A `Field` stores a copy of the value it is assigned: a plain object or an array as a proxy, a `Map`, a `Set` or a
46
+ * `Date` as a `TrackedMap`, `TrackedSet` or `TrackedDate`, at every level. A write through `field.value` (a property,
47
+ * an array method, `map.set()`, `date.setFullYear()`) runs as a change of the field: in a transaction, with
48
+ * validation, `ValueChangedAction` and rollback. Every `originalValue`, a container's included, is stored as a deep
49
+ * copy without tracking.
50
+ *
51
+ * An `Action`'s value is stored as it is.
52
+ */
53
+ export declare const tracking: Plugin_2;
54
+
55
+ /**
56
+ * Marks `value` to be held as it is: without a copy, without tracking and without the warning a class instance
57
+ * gives. Returns `value`.
58
+ */
59
+ export declare function untracked<T extends object>(value: T): T;
60
+
61
+ export { }
@@ -0,0 +1,279 @@
1
+ import { reactive as e, toRaw as t } from "vue";
2
+ import { Action as n, transaction as r } from "@dynamicforms/vue-forms";
3
+ //#region src/plugins/tracking/tracked-value.ts
4
+ var i;
5
+ function a(e) {
6
+ i = e;
7
+ }
8
+ var o = /* @__PURE__ */ new WeakMap(), s = /* @__PURE__ */ new WeakMap(), c = /* @__PURE__ */ new WeakMap(), l = /* @__PURE__ */ new WeakSet(), u = /* @__PURE__ */ new WeakSet(), d = !0, f = 0;
9
+ function p(e) {
10
+ l.add(e);
11
+ }
12
+ function m(e) {
13
+ d = e;
14
+ }
15
+ function h(e) {
16
+ let n = t(e);
17
+ return typeof n == "object" && !!n && o.get(n) || n;
18
+ }
19
+ function g(e) {
20
+ if (typeof e != "object" || !e) return "primitive";
21
+ if (l.has(e) || e.__v_skip) return "opaque";
22
+ if (Array.isArray(e)) return "array";
23
+ if (e instanceof Map) return "map";
24
+ if (e instanceof Set) return "set";
25
+ if (e instanceof Date) return "date";
26
+ let t = Object.getPrototypeOf(e);
27
+ return t === Object.prototype || t === null ? "plain" : "instance";
28
+ }
29
+ function _(e) {
30
+ if (process.env.NODE_ENV !== "production") {
31
+ if (!d || u.has(e)) return;
32
+ u.add(e);
33
+ let t = e.constructor?.name || "class";
34
+ console.warn(`[vue-forms tracking] a ${t} instance is held without tracking: a write into it is not a change of the field. Mark it with untracked() to hold it without this warning.`);
35
+ }
36
+ }
37
+ function v(e) {
38
+ return s.get(e) ?? e;
39
+ }
40
+ function y(e) {
41
+ f++;
42
+ try {
43
+ e();
44
+ } finally {
45
+ f--;
46
+ }
47
+ }
48
+ function b(e, t, n) {
49
+ i.changeInPlace(e, t, () => y(n), () => S(e.value));
50
+ }
51
+ function x(e, t, n = /* @__PURE__ */ new Map()) {
52
+ let r = h(e), i = g(r);
53
+ if (i === "primitive" || i === "opaque") return r;
54
+ let a = r;
55
+ if (i === "instance") return _(a), a;
56
+ if (c.get(a) === t) return v(a);
57
+ if (n.has(a)) return n.get(a);
58
+ switch (i) {
59
+ case "date": {
60
+ let e = new M(a.getTime());
61
+ return c.set(e, t), n.set(a, e), e;
62
+ }
63
+ case "map": {
64
+ let e = new k();
65
+ return n.set(a, e), a.forEach((r, i) => {
66
+ Map.prototype.set.call(e, i, x(r, t, n));
67
+ }), c.set(e, t), e;
68
+ }
69
+ case "set": {
70
+ let e = new A();
71
+ return n.set(a, e), a.forEach((r) => Set.prototype.add.call(e, x(r, t, n))), c.set(e, t), e;
72
+ }
73
+ default: {
74
+ let e = i === "array" ? [] : Object.create(Object.getPrototypeOf(a)), r = new Proxy(e, O);
75
+ return o.set(r, e), s.set(e, r), n.set(a, r), C(a, e, (e) => x(e, t, n)), c.set(e, t), r;
76
+ }
77
+ }
78
+ }
79
+ function S(e, t = /* @__PURE__ */ new Map()) {
80
+ let n = h(e), r = g(n);
81
+ if (r === "primitive" || r === "opaque" || r === "instance") return n;
82
+ let i = n;
83
+ if (t.has(i)) return t.get(i);
84
+ switch (r) {
85
+ case "date": {
86
+ let e = new Date(i.getTime());
87
+ return t.set(i, e), e;
88
+ }
89
+ case "map": {
90
+ let e = /* @__PURE__ */ new Map();
91
+ return t.set(i, e), Map.prototype.forEach.call(i, (n, r) => e.set(r, S(n, t))), e;
92
+ }
93
+ case "set": {
94
+ let e = /* @__PURE__ */ new Set();
95
+ return t.set(i, e), Set.prototype.forEach.call(i, (n) => e.add(S(n, t))), e;
96
+ }
97
+ default: {
98
+ let e = r === "array" ? [] : Object.create(Object.getPrototypeOf(i));
99
+ return t.set(i, e), C(i, e, (e) => S(e, t)), e;
100
+ }
101
+ }
102
+ }
103
+ function C(e, t, n) {
104
+ Array.isArray(e) && (t.length = e.length);
105
+ for (let r of Reflect.ownKeys(e)) {
106
+ if (Array.isArray(e) && r === "length") continue;
107
+ let { value: i, get: a, set: o, enumerable: s } = Reflect.getOwnPropertyDescriptor(e, r);
108
+ a || o ? Reflect.defineProperty(t, r, {
109
+ get: a,
110
+ set: o,
111
+ enumerable: s,
112
+ configurable: !0
113
+ }) : Reflect.defineProperty(t, r, {
114
+ value: n(i),
115
+ writable: !0,
116
+ enumerable: s,
117
+ configurable: !0
118
+ });
119
+ }
120
+ }
121
+ function w(e, t) {
122
+ return Object.is(h(e), h(t));
123
+ }
124
+ var T = /* @__PURE__ */ new Set([
125
+ "push",
126
+ "pop",
127
+ "shift",
128
+ "unshift",
129
+ "splice",
130
+ "sort",
131
+ "reverse",
132
+ "fill",
133
+ "copyWithin"
134
+ ]), E = /* @__PURE__ */ new Map();
135
+ function D(e) {
136
+ let t = E.get(e);
137
+ if (!t) {
138
+ let n = Array.prototype[e];
139
+ t = function(...e) {
140
+ return r(() => n.apply(this, e));
141
+ }, E.set(e, t);
142
+ }
143
+ return t;
144
+ }
145
+ var O = {
146
+ get(e, t, n) {
147
+ return Array.isArray(e) && typeof t == "string" && T.has(t) ? D(t) : Reflect.get(e, t, n);
148
+ },
149
+ set(t, n, r) {
150
+ if (f) return Reflect.set(t, n, r);
151
+ let i = c.get(t), a = Object.hasOwn(t, n), o = t[n];
152
+ if (a && w(o, r)) return !0;
153
+ let l = x(r, i), u = s.get(t), d = Array.isArray(t), p = d && n === "length" ? t.slice(l) : [], m = d ? t.length : 0;
154
+ return b(i, () => Reflect.set(t, n, l), () => {
155
+ let t = e(u);
156
+ a ? t[n] = o : delete t[n], p.forEach((e, n) => t[l + n] = e), d && t.length !== m && (t.length = m);
157
+ }), !0;
158
+ },
159
+ deleteProperty(t, n) {
160
+ if (f || !Object.hasOwn(t, n)) return Reflect.deleteProperty(t, n);
161
+ let r = c.get(t), i = t[n], a = s.get(t);
162
+ return b(r, () => Reflect.deleteProperty(t, n), () => e(a)[n] = i), !0;
163
+ }
164
+ }, k = class extends Map {
165
+ set(t, n) {
166
+ let r = c.get(this);
167
+ if (f || !r) return super.set(t, n);
168
+ let i = super.has(t), a = super.get(t);
169
+ if (i && w(a, n)) return this;
170
+ let o = x(n, r);
171
+ return b(r, () => super.set(t, o), () => {
172
+ let n = e(this);
173
+ i ? n.set(t, a) : n.delete(t);
174
+ }), this;
175
+ }
176
+ delete(t) {
177
+ let n = c.get(this);
178
+ if (f || !n || !super.has(t)) return super.delete(t);
179
+ let r = super.get(t);
180
+ return b(n, () => super.delete(t), () => e(this).set(t, r)), !0;
181
+ }
182
+ clear() {
183
+ let t = c.get(this);
184
+ if (f || !t || super.size === 0) return super.clear();
185
+ let n = [...super.entries()];
186
+ b(t, () => super.clear(), () => n.forEach(([t, n]) => e(this).set(t, n)));
187
+ }
188
+ }, A = class extends Set {
189
+ add(n) {
190
+ let r = c.get(this);
191
+ if (f || !r) return super.add(n);
192
+ if (super.has(t(n))) return this;
193
+ let i = x(n, r);
194
+ return b(r, () => super.add(i), () => e(this).delete(i)), this;
195
+ }
196
+ delete(n) {
197
+ let r = c.get(this), i = t(n);
198
+ return f || !r || !super.has(i) ? super.delete(i) : (b(r, () => super.delete(i), () => e(this).add(i)), !0);
199
+ }
200
+ clear() {
201
+ let t = c.get(this);
202
+ if (f || !t || super.size === 0) return super.clear();
203
+ let n = [...super.values()];
204
+ b(t, () => super.clear(), () => n.forEach((t) => e(this).add(t)));
205
+ }
206
+ };
207
+ function j(e, t, n) {
208
+ let r = c.get(e);
209
+ if (f || !r) return t.apply(e, n);
210
+ let i = e.getTime(), a = new Date(i), o = t.apply(a, n);
211
+ return Object.is(o, i) || b(r, () => Date.prototype.setTime.call(e, o), () => Date.prototype.setTime.call(e, i)), o;
212
+ }
213
+ var M = class extends Date {
214
+ setTime(e) {
215
+ return j(this, Date.prototype.setTime, [e]);
216
+ }
217
+ setMilliseconds(...e) {
218
+ return j(this, Date.prototype.setMilliseconds, e);
219
+ }
220
+ setUTCMilliseconds(...e) {
221
+ return j(this, Date.prototype.setUTCMilliseconds, e);
222
+ }
223
+ setSeconds(...e) {
224
+ return j(this, Date.prototype.setSeconds, e);
225
+ }
226
+ setUTCSeconds(...e) {
227
+ return j(this, Date.prototype.setUTCSeconds, e);
228
+ }
229
+ setMinutes(...e) {
230
+ return j(this, Date.prototype.setMinutes, e);
231
+ }
232
+ setUTCMinutes(...e) {
233
+ return j(this, Date.prototype.setUTCMinutes, e);
234
+ }
235
+ setHours(...e) {
236
+ return j(this, Date.prototype.setHours, e);
237
+ }
238
+ setUTCHours(...e) {
239
+ return j(this, Date.prototype.setUTCHours, e);
240
+ }
241
+ setDate(...e) {
242
+ return j(this, Date.prototype.setDate, e);
243
+ }
244
+ setUTCDate(...e) {
245
+ return j(this, Date.prototype.setUTCDate, e);
246
+ }
247
+ setMonth(...e) {
248
+ return j(this, Date.prototype.setMonth, e);
249
+ }
250
+ setUTCMonth(...e) {
251
+ return j(this, Date.prototype.setUTCMonth, e);
252
+ }
253
+ setFullYear(...e) {
254
+ return j(this, Date.prototype.setFullYear, e);
255
+ }
256
+ setUTCFullYear(...e) {
257
+ return j(this, Date.prototype.setUTCFullYear, e);
258
+ }
259
+ }, N = {
260
+ setup(e) {
261
+ a(e);
262
+ },
263
+ onSetValue(e, t) {
264
+ return t instanceof n ? e : x(e, t);
265
+ },
266
+ onSetOriginalValue(e, t) {
267
+ return t instanceof n ? e : S(e);
268
+ }
269
+ };
270
+ function P(e) {
271
+ return p(e), e;
272
+ }
273
+ function F(e) {
274
+ m(e);
275
+ }
276
+ //#endregion
277
+ export { M as TrackedDate, k as TrackedMap, A as TrackedSet, F as setTrackingWarnings, N as tracking, P as untracked };
278
+
279
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","names":[],"sources":["../../src/plugins/tracking/tracked-value.ts","../../src/plugins/tracking.ts"],"sourcesContent":["import { reactive, toRaw } from 'vue';\n\nimport { type FieldBase, type PluginContext, transaction } from '@dynamicforms/vue-forms';\n\nlet context: PluginContext | undefined;\n\n/** Records the context the plugin's setup received. */\nexport function useContext(installed: PluginContext): void {\n context = installed;\n}\n\n/** proxy over a plain object or an array -> the object it wraps */\nconst targets = new WeakMap<object, object>();\n/** plain object or array -> its proxy */\nconst proxies = new WeakMap<object, object>();\n/** tracked node (the object a proxy wraps, or a TrackedMap, TrackedSet or TrackedDate) -> the field holding it */\nconst owners = new WeakMap<object, FieldBase>();\n/** values marked with untracked() */\nconst opaque = new WeakSet<object>();\n/** class instances already warned about */\nconst warned = new WeakSet<object>();\nlet warnings = true;\n/** greater than zero while an undo step writes, so the write is not recorded as a change */\nlet restoring = 0;\n\nexport function markUntracked(value: object): void {\n opaque.add(value);\n}\n\nexport function enableWarnings(enabled: boolean): void {\n warnings = enabled;\n}\n\ntype Kind = 'primitive' | 'opaque' | 'instance' | 'plain' | 'array' | 'map' | 'set' | 'date';\n\n/** The object behind a Vue proxy and behind a tracking proxy. */\nfunction unwrap(value: unknown): unknown {\n const raw = toRaw(value);\n return (raw !== null && typeof raw === 'object' && targets.get(raw)) || raw;\n}\n\nfunction kindOf(value: unknown): Kind {\n if (value === null || typeof value !== 'object') return 'primitive';\n // an element and a value marked with markRaw() carry __v_skip\n if (opaque.has(value) || (value as { __v_skip?: boolean }).__v_skip) return 'opaque';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Map) return 'map';\n if (value instanceof Set) return 'set';\n if (value instanceof Date) return 'date';\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null ? 'plain' : 'instance';\n}\n\nfunction warnUntracked(value: object): void {\n if (process.env.NODE_ENV !== 'production') {\n if (!warnings || warned.has(value)) return;\n warned.add(value);\n const name = (value as { constructor?: { name?: string } }).constructor?.name || 'class';\n console.warn(\n `[vue-forms tracking] a ${name} instance is held without tracking: a write into it is not a change of the ` +\n 'field. Mark it with untracked() to hold it without this warning.',\n );\n }\n}\n\n/** The form a tracked node takes in the value: the proxy for a plain object or an array, the node itself otherwise. */\nfunction trackedForm(node: object): object {\n return proxies.get(node) ?? node;\n}\n\n/** Runs an undo step: the write goes through Vue's proxy, so what read the value runs again, and is not recorded. */\nfunction restore(step: () => void): void {\n restoring++;\n try {\n step();\n } finally {\n restoring--;\n }\n}\n\nfunction change(field: FieldBase, write: () => void, undo: () => void): void {\n context!.changeInPlace(\n field,\n write,\n () => restore(undo),\n () => plain(field.value),\n );\n}\n\n/**\n * `value` in the form `field` holds it: a plain object or an array becomes a proxy over a copy, a `Map`, a `Set` or\n * a `Date` a tracked subclass instance, all owned by `field`. A node `field` already owns is kept, so moving a row\n * within the value keeps the row. Anything else is kept as it is.\n */\nexport function adopt(value: unknown, field: FieldBase, seen = new Map<object, unknown>()): unknown {\n const source = unwrap(value);\n const kind = kindOf(source);\n if (kind === 'primitive' || kind === 'opaque') return source;\n const node = source as object;\n if (kind === 'instance') {\n warnUntracked(node);\n return node;\n }\n if (owners.get(node) === field) return trackedForm(node);\n if (seen.has(node)) return seen.get(node);\n\n switch (kind) {\n case 'date': {\n const copy = new TrackedDate((node as Date).getTime());\n owners.set(copy, field);\n seen.set(node, copy);\n return copy;\n }\n case 'map': {\n const copy = new TrackedMap();\n seen.set(node, copy);\n (node as Map<unknown, unknown>).forEach((item, key) => {\n Map.prototype.set.call(copy, key, adopt(item, field, seen));\n });\n owners.set(copy, field);\n return copy;\n }\n case 'set': {\n const copy = new TrackedSet();\n seen.set(node, copy);\n (node as Set<unknown>).forEach((item) => Set.prototype.add.call(copy, adopt(item, field, seen)));\n owners.set(copy, field);\n return copy;\n }\n default: {\n const target: Record<PropertyKey, unknown> =\n kind === 'array' ? [] : Object.create(Object.getPrototypeOf(node) as object | null);\n const proxy = new Proxy(target, handler);\n targets.set(proxy, target);\n proxies.set(target, proxy);\n seen.set(node, proxy);\n copyProperties(node, target, (item) => adopt(item, field, seen));\n owners.set(target, field);\n return proxy;\n }\n }\n}\n\n/** A deep copy of `value` with no tracking: plain objects, arrays, `Map`, `Set` and `Date`. */\nexport function plain(value: unknown, seen = new Map<object, unknown>()): unknown {\n const source = unwrap(value);\n const kind = kindOf(source);\n if (kind === 'primitive' || kind === 'opaque' || kind === 'instance') return source;\n const node = source as object;\n if (seen.has(node)) return seen.get(node);\n switch (kind) {\n case 'date': {\n const copy = new Date((node as Date).getTime());\n seen.set(node, copy);\n return copy;\n }\n case 'map': {\n const copy = new Map();\n seen.set(node, copy);\n Map.prototype.forEach.call(node, (item, key) => copy.set(key, plain(item, seen)));\n return copy;\n }\n case 'set': {\n const copy = new Set();\n seen.set(node, copy);\n Set.prototype.forEach.call(node, (item) => copy.add(plain(item, seen)));\n return copy;\n }\n default: {\n const copy: Record<PropertyKey, unknown> =\n kind === 'array' ? [] : Object.create(Object.getPrototypeOf(node) as object | null);\n seen.set(node, copy);\n copyProperties(node, copy, (item) => plain(item, seen));\n return copy;\n }\n }\n}\n\n/** Copies the own properties of `source` to `target`, data properties through `map`, accessors as they are. */\nfunction copyProperties(source: object, target: Record<PropertyKey, unknown>, map: (item: unknown) => unknown): void {\n if (Array.isArray(source)) (target as unknown as unknown[]).length = source.length;\n for (const key of Reflect.ownKeys(source)) {\n if (Array.isArray(source) && key === 'length') continue;\n const { value, get, set, enumerable } = Reflect.getOwnPropertyDescriptor(source, key)!;\n // a copy is writable whatever the source was, so a frozen source gives a value the field can change\n if (get || set) Reflect.defineProperty(target, key, { get, set, enumerable, configurable: true });\n else Reflect.defineProperty(target, key, { value: map(value), writable: true, enumerable, configurable: true });\n }\n}\n\n/** The same object for the same unwrapped value, so `a.b = a.b` is not a change. */\nfunction same(a: unknown, b: unknown): boolean {\n return Object.is(unwrap(a), unwrap(b));\n}\n\nconst arrayMutators = new Set(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse', 'fill', 'copyWithin']);\nconst batched = new Map<string, (...args: unknown[]) => unknown>();\n\n/** An array method that runs in one transaction, so its writes are one change of the field. */\nfunction batchedMethod(name: string): (...args: unknown[]) => unknown {\n let method = batched.get(name);\n if (!method) {\n const original = (Array.prototype as unknown as Record<string, (...args: unknown[]) => unknown>)[name];\n method = function batchedArrayMethod(this: unknown, ...args: unknown[]) {\n return transaction(() => original.apply(this, args));\n };\n batched.set(name, method);\n }\n return method;\n}\n\nconst handler: ProxyHandler<Record<PropertyKey, unknown>> = {\n get(target, key, receiver) {\n if (Array.isArray(target) && typeof key === 'string' && arrayMutators.has(key)) return batchedMethod(key);\n return Reflect.get(target, key, receiver);\n },\n\n set(target, key, value) {\n if (restoring) return Reflect.set(target, key, value);\n const field = owners.get(target)!;\n const had = Object.hasOwn(target, key);\n const previous = target[key as keyof typeof target];\n if (had && same(previous, value)) return true;\n const next = adopt(value, field);\n const proxy = proxies.get(target)!;\n // a shorter length removes the items above it, which the undo step puts back\n const isArray = Array.isArray(target);\n const removed = isArray && key === 'length' ? target.slice(next as number) : [];\n // a write past the end extends the array, which the undo step shortens again\n const length = isArray ? target.length : 0;\n change(\n field,\n () => Reflect.set(target, key, next),\n () => {\n const live = reactive(proxy) as Record<PropertyKey, unknown>;\n if (had) live[key] = previous;\n else delete live[key];\n removed.forEach((item, index) => (live[(next as number) + index] = item));\n if (isArray && live.length !== length) live.length = length;\n },\n );\n return true;\n },\n\n deleteProperty(target, key) {\n if (restoring || !Object.hasOwn(target, key)) return Reflect.deleteProperty(target, key);\n const field = owners.get(target)!;\n const previous = target[key as keyof typeof target];\n const proxy = proxies.get(target)!;\n change(\n field,\n () => Reflect.deleteProperty(target, key),\n () => ((reactive(proxy) as Record<PropertyKey, unknown>)[key] = previous),\n );\n return true;\n },\n};\n\n/** A `Map` a field holds: `set`, `delete` and `clear` are changes of the field. */\nexport class TrackedMap<K = unknown, V = unknown> extends Map<K, V> {\n set(key: K, value: V): this {\n const field = owners.get(this);\n if (restoring || !field) return super.set(key, value);\n const had = super.has(key);\n const previous = super.get(key);\n if (had && same(previous, value)) return this;\n const next = adopt(value, field) as V;\n change(\n field,\n () => super.set(key, next),\n () => {\n const live = reactive(this) as Map<K, V>;\n if (had) live.set(key, previous as V);\n else live.delete(key);\n },\n );\n return this;\n }\n\n delete(key: K): boolean {\n const field = owners.get(this);\n if (restoring || !field || !super.has(key)) return super.delete(key);\n const previous = super.get(key) as V;\n change(\n field,\n () => super.delete(key),\n () => (reactive(this) as Map<K, V>).set(key, previous),\n );\n return true;\n }\n\n clear(): void {\n const field = owners.get(this);\n if (restoring || !field || super.size === 0) return super.clear();\n const entries = [...super.entries()];\n change(\n field,\n () => super.clear(),\n () => entries.forEach(([key, item]) => (reactive(this) as Map<K, V>).set(key, item)),\n );\n }\n}\n\n/** A `Set` a field holds: `add`, `delete` and `clear` are changes of the field. */\nexport class TrackedSet<V = unknown> extends Set<V> {\n add(value: V): this {\n const field = owners.get(this);\n if (restoring || !field) return super.add(value);\n if (super.has(toRaw(value))) return this;\n const next = adopt(value, field) as V;\n change(\n field,\n () => super.add(next),\n () => (reactive(this) as Set<V>).delete(next),\n );\n return this;\n }\n\n delete(value: V): boolean {\n const field = owners.get(this);\n const item = toRaw(value);\n if (restoring || !field || !super.has(item)) return super.delete(item);\n change(\n field,\n () => super.delete(item),\n () => (reactive(this) as Set<V>).add(item),\n );\n return true;\n }\n\n clear(): void {\n const field = owners.get(this);\n if (restoring || !field || super.size === 0) return super.clear();\n const items = [...super.values()];\n change(\n field,\n () => super.clear(),\n () => items.forEach((item) => (reactive(this) as Set<V>).add(item)),\n );\n }\n}\n\ntype DateSetter = (this: Date, ...args: number[]) => number;\n\n/**\n * Applies a `Date` setter to a field's date: the setter runs on a copy first, and a different time is written as a\n * change of the field.\n */\nfunction setDate(date: TrackedDate, setter: DateSetter, args: number[]): number {\n const field = owners.get(date);\n if (restoring || !field) return setter.apply(date, args);\n const before = date.getTime();\n const probe = new Date(before);\n const after = setter.apply(probe, args);\n if (Object.is(after, before)) return after;\n change(\n field,\n () => Date.prototype.setTime.call(date, after),\n () => Date.prototype.setTime.call(date, before),\n );\n return after;\n}\n\n/** A `Date` a field holds: every setter is a change of the field. */\nexport class TrackedDate extends Date {\n setTime(time: number): number {\n return setDate(this, Date.prototype.setTime, [time]);\n }\n setMilliseconds(...args: [number]): number {\n return setDate(this, Date.prototype.setMilliseconds, args);\n }\n setUTCMilliseconds(...args: [number]): number {\n return setDate(this, Date.prototype.setUTCMilliseconds, args);\n }\n setSeconds(...args: [number, number?]): number {\n return setDate(this, Date.prototype.setSeconds as DateSetter, args as number[]);\n }\n setUTCSeconds(...args: [number, number?]): number {\n return setDate(this, Date.prototype.setUTCSeconds as DateSetter, args as number[]);\n }\n setMinutes(...args: [number, number?, number?]): number {\n return setDate(this, Date.prototype.setMinutes as DateSetter, args as number[]);\n }\n setUTCMinutes(...args: [number, number?, number?]): number {\n return setDate(this, Date.prototype.setUTCMinutes as DateSetter, args as number[]);\n }\n setHours(...args: [number, number?, number?, number?]): number {\n return setDate(this, Date.prototype.setHours as DateSetter, args as number[]);\n }\n setUTCHours(...args: [number, number?, number?, number?]): number {\n return setDate(this, Date.prototype.setUTCHours as DateSetter, args as number[]);\n }\n setDate(...args: [number]): number {\n return setDate(this, Date.prototype.setDate, args);\n }\n setUTCDate(...args: [number]): number {\n return setDate(this, Date.prototype.setUTCDate, args);\n }\n setMonth(...args: [number, number?]): number {\n return setDate(this, Date.prototype.setMonth as DateSetter, args as number[]);\n }\n setUTCMonth(...args: [number, number?]): number {\n return setDate(this, Date.prototype.setUTCMonth as DateSetter, args as number[]);\n }\n setFullYear(...args: [number, number?, number?]): number {\n return setDate(this, Date.prototype.setFullYear as DateSetter, args as number[]);\n }\n setUTCFullYear(...args: [number, number?, number?]): number {\n return setDate(this, Date.prototype.setUTCFullYear as DateSetter, args as number[]);\n }\n}\n","import { adopt, enableWarnings, markUntracked, plain, useContext } from './tracking/tracked-value';\n\nimport { Action, type Plugin } from '@dynamicforms/vue-forms';\n\nexport { TrackedDate, TrackedMap, TrackedSet } from './tracking/tracked-value';\n\n/**\n * Makes a write into the value a field holds a change of the field. Install it with `installPlugin(tracking)`.\n *\n * A `Field` stores a copy of the value it is assigned: a plain object or an array as a proxy, a `Map`, a `Set` or a\n * `Date` as a `TrackedMap`, `TrackedSet` or `TrackedDate`, at every level. A write through `field.value` (a property,\n * an array method, `map.set()`, `date.setFullYear()`) runs as a change of the field: in a transaction, with\n * validation, `ValueChangedAction` and rollback. Every `originalValue`, a container's included, is stored as a deep\n * copy without tracking.\n *\n * An `Action`'s value is stored as it is.\n */\nexport const tracking: Plugin = {\n setup(context) {\n useContext(context);\n },\n onSetValue(value, element) {\n return element instanceof Action ? value : adopt(value, element);\n },\n onSetOriginalValue(value, element) {\n return element instanceof Action ? value : plain(value);\n },\n};\n\n/**\n * Marks `value` to be held as it is: without a copy, without tracking and without the warning a class instance\n * gives. Returns `value`.\n */\nexport function untracked<T extends object>(value: T): T {\n markUntracked(value);\n return value;\n}\n\n/**\n * Turns on or off the development warning for a class instance held without tracking. On by default; a production\n * build has no warning.\n */\nexport function setTrackingWarnings(enabled: boolean): void {\n enableWarnings(enabled);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@dynamicforms/vue-forms",
3
3
  "private": false,
4
- "version": "2.0.2",
4
+ "version": "3.0.0-alpha.1",
5
5
  "type": "module",
6
- "description": "A Vue.js library for form state management with built-in validation, conditional logic, nested structures, and a rich event system. UI-agnostic and TypeScript-first.",
6
+ "sideEffects": false,
7
+ "description": "Reactive forms and application state for Vue.js: validation, rules between fields, transactions and lists. UI-agnostic and TypeScript-first.",
7
8
  "author": "Jure Erznožnik",
8
9
  "files": [
9
10
  "dist/*"
@@ -14,7 +15,10 @@
14
15
  "types": "./dist/index.d.ts",
15
16
  "default": "./dist/dynamicforms-vue-forms.js"
16
17
  },
17
- "./style.css": "./dist/dynamicforms-vue-forms.css",
18
+ "./plugins/tracking": {
19
+ "types": "./dist/plugins/tracking.d.ts",
20
+ "default": "./dist/plugins/tracking.js"
21
+ },
18
22
  "./package.json": "./package.json"
19
23
  },
20
24
  "workspaces": [
@@ -40,7 +44,9 @@
40
44
  "validation",
41
45
  "reactive",
42
46
  "typescript",
43
- "data entry"
47
+ "data entry",
48
+ "state",
49
+ "state-management"
44
50
  ],
45
51
  "license": "MIT",
46
52
  "homepage": "https://docs.velis.si/dynamicforms/vue-forms",
@@ -55,7 +61,6 @@
55
61
  "node": ">=22"
56
62
  },
57
63
  "dependencies": {
58
- "@dynamicforms/translatable": "^0.1.0",
59
64
  "lodash-es": "^4.17.21"
60
65
  },
61
66
  "peerDependencies": {
@@ -64,12 +69,11 @@
64
69
  "devDependencies": {
65
70
  "@eslint/js": "^10.0.1",
66
71
  "@types/lodash-es": "^4.17.12",
67
- "@types/markdown-it-attrs": "^4.1.3",
68
72
  "@types/node": "^26.2.0",
69
73
  "@typescript-eslint/eslint-plugin": "^8.67.0",
70
74
  "@typescript-eslint/parser": "^8.67.0",
71
- "@vitejs/plugin-vue": "^6",
72
75
  "@vitest/coverage-v8": "^4",
76
+ "@vue/devtools-kit": "^8.2.1",
73
77
  "@vue/test-utils": "^2.2.4",
74
78
  "@vue/tsconfig": "^0.7.0",
75
79
  "baseline-browser-mapping": "^2.8.31",
@@ -82,15 +86,14 @@
82
86
  "eslint-plugin-unicorn": "^73.0.0",
83
87
  "eslint-plugin-vue": "^10.10.0",
84
88
  "jsdom": "^26.0.0",
85
- "markdown-it-attrs": "^4.3.1",
86
89
  "prettier": "^3.9.6",
87
90
  "rollup-plugin-visualizer": "^5.14.0",
88
91
  "typescript": "^5",
89
92
  "vite": "^8",
90
93
  "vite-plugin-dts": "^4",
91
94
  "vitest": "^4",
95
+ "vue": "^3.5.43",
92
96
  "vue-eslint-parser": "^10.4.1",
93
- "vue-markdown-render": "^2.3.0",
94
97
  "vue-tsc": "^2"
95
98
  },
96
99
  "allowScripts": {