informa 3.1.0 → 4.0.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/README.md +171 -184
- package/dist/EnumerableWeakSet.d.ts +10 -0
- package/dist/EnumerableWeakSet.d.ts.map +1 -0
- package/dist/EnumerableWeakSet.js +44 -0
- package/dist/EnumerableWeakSet.js.map +1 -0
- package/dist/high.d.ts +2 -3
- package/dist/high.d.ts.map +1 -1
- package/dist/high.js +1 -2
- package/dist/high.js.map +1 -1
- package/dist/internals.d.ts +3 -0
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +5 -2
- package/dist/internals.js.map +1 -1
- package/dist/low.d.ts +16 -0
- package/dist/low.d.ts.map +1 -1
- package/dist/low.js +150 -0
- package/dist/low.js.map +1 -1
- package/dist/quirks/array.d.ts +4 -3
- package/dist/quirks/array.d.ts.map +1 -1
- package/dist/quirks/array.js +163 -75
- package/dist/quirks/array.js.map +1 -1
- package/dist/quirks/basestatified.d.ts +24 -2
- package/dist/quirks/basestatified.d.ts.map +1 -1
- package/dist/quirks/basestatified.js +244 -83
- package/dist/quirks/basestatified.js.map +1 -1
- package/dist/quirks/basestatified.test.d.ts +9 -0
- package/dist/quirks/basestatified.test.d.ts.map +1 -0
- package/dist/quirks/basestatified.test.js +291 -0
- package/dist/quirks/basestatified.test.js.map +1 -0
- package/dist/quirks/map.d.ts.map +1 -1
- package/dist/quirks/map.js +1 -0
- package/dist/quirks/map.js.map +1 -1
- package/dist/quirks/set.d.ts.map +1 -1
- package/dist/quirks/set.js +1 -0
- package/dist/quirks/set.js.map +1 -1
- package/dist/test.js +2 -6
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
- package/src/EnumerableWeakSet.ts +46 -0
- package/src/high.ts +2 -3
- package/src/internals.ts +5 -1
- package/src/low.ts +120 -1
- package/src/quirks/array.ts +168 -92
- package/src/quirks/basestatified.test.ts +375 -0
- package/src/quirks/basestatified.ts +294 -117
- package/src/quirks/map.ts +3 -1
- package/src/quirks/set.ts +3 -1
- package/src/test.ts +13 -15
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Acceptance tests for statifyClass / makeStatified / BaseStatified.
|
|
4
|
+
*
|
|
5
|
+
* Run with: npx tsx src/quirks/basestatified.test.ts
|
|
6
|
+
*
|
|
7
|
+
* Uses Node.js built-in assert — no test framework required.
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
14
|
+
const high_js_1 = __importDefault(require("../high.js"));
|
|
15
|
+
const basestatified_js_1 = require("./basestatified.js");
|
|
16
|
+
const set_js_1 = require("./set.js");
|
|
17
|
+
const internals_js_1 = require("../internals.js");
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Minimal test harness
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
let passed = 0;
|
|
22
|
+
let failed = 0;
|
|
23
|
+
function test(name, fn) {
|
|
24
|
+
try {
|
|
25
|
+
const r = fn();
|
|
26
|
+
if (r instanceof Promise) {
|
|
27
|
+
r.then(() => { console.log(` ✓ ${name}`); passed++; }, (e) => { console.error(` ✗ ${name}`, e); failed++; });
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.log(` ✓ ${name}`);
|
|
31
|
+
passed++;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
console.error(` ✗ ${name}`, e);
|
|
36
|
+
failed++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// 1. Constructor arguments
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
console.log("\n── Constructor arguments ──");
|
|
43
|
+
class Base {
|
|
44
|
+
base;
|
|
45
|
+
constructor(base) { this.base = base; }
|
|
46
|
+
}
|
|
47
|
+
const Derived = (0, basestatified_js_1.statifyClass)((BaseClass) => class Derived extends BaseClass {
|
|
48
|
+
value;
|
|
49
|
+
constructor(base, value) {
|
|
50
|
+
super(base);
|
|
51
|
+
this.value = value;
|
|
52
|
+
}
|
|
53
|
+
}, Base);
|
|
54
|
+
test("new Derived constructs without error", () => {
|
|
55
|
+
const x = new Derived("x", 42);
|
|
56
|
+
strict_1.default.equal(x.base, "x");
|
|
57
|
+
strict_1.default.equal(x.value, 42);
|
|
58
|
+
});
|
|
59
|
+
test("constructor args are forwarded correctly", () => {
|
|
60
|
+
const x = new Derived("hello", 99);
|
|
61
|
+
strict_1.default.equal(x.base, "hello");
|
|
62
|
+
strict_1.default.equal(x.value, 99);
|
|
63
|
+
});
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// 2. instanceof
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
console.log("\n── instanceof ──");
|
|
68
|
+
test("x instanceof Derived", () => {
|
|
69
|
+
const x = new Derived("x", 1);
|
|
70
|
+
strict_1.default.ok(x instanceof Derived);
|
|
71
|
+
});
|
|
72
|
+
test("x instanceof Base", () => {
|
|
73
|
+
const x = new Derived("x", 1);
|
|
74
|
+
strict_1.default.ok(x instanceof Base);
|
|
75
|
+
});
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// 3. isStatified / statifySealKey
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
console.log("\n── isStatified ──");
|
|
80
|
+
test("isStatified returns true for Derived instance", () => {
|
|
81
|
+
const x = new Derived("x", 1);
|
|
82
|
+
strict_1.default.ok((0, internals_js_1.isStatified)(x));
|
|
83
|
+
});
|
|
84
|
+
test("statifySealKey is truthy on instance", () => {
|
|
85
|
+
const x = new Derived("x", 1);
|
|
86
|
+
strict_1.default.ok(x[internals_js_1.statifySealKey]);
|
|
87
|
+
});
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// 4. Class fields — availability after construction
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
console.log("\n── Class fields ──");
|
|
92
|
+
const WithFields = (0, basestatified_js_1.statifyClass)((Base) => class extends Base {
|
|
93
|
+
fromBase = "base-field";
|
|
94
|
+
count = 0;
|
|
95
|
+
label;
|
|
96
|
+
constructor(label) {
|
|
97
|
+
super();
|
|
98
|
+
this.label = label;
|
|
99
|
+
}
|
|
100
|
+
}, Object);
|
|
101
|
+
test("own fields are readable after construction", () => {
|
|
102
|
+
const w = new WithFields("my-label");
|
|
103
|
+
strict_1.default.equal(w.fromBase, "base-field");
|
|
104
|
+
strict_1.default.equal(w.count, 0);
|
|
105
|
+
strict_1.default.equal(w.label, "my-label");
|
|
106
|
+
});
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// 5. Mutation — field setter fires replacement events
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
console.log("\n── Mutation ──");
|
|
111
|
+
test("mutation fires onReplace listener after construction", () => {
|
|
112
|
+
const w = new WithFields("label");
|
|
113
|
+
const received = [];
|
|
114
|
+
high_js_1.default.onReplace(() => w.count, (v) => received.push(v));
|
|
115
|
+
w.count = 1;
|
|
116
|
+
w.count = 2;
|
|
117
|
+
strict_1.default.deepEqual(received, [1, 2]);
|
|
118
|
+
});
|
|
119
|
+
test("mutation fires replaceProp listener", () => {
|
|
120
|
+
const w = new WithFields("label");
|
|
121
|
+
let lastProp;
|
|
122
|
+
let lastVal;
|
|
123
|
+
high_js_1.default.on(() => w, { replaceProp: (v, p) => { lastProp = p; lastVal = v; } });
|
|
124
|
+
w.count = 99;
|
|
125
|
+
strict_1.default.equal(lastProp, "count");
|
|
126
|
+
strict_1.default.equal(lastVal, 99);
|
|
127
|
+
});
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// 6. Non-configurable properties — not reactive
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
console.log("\n── Non-configurable properties ──");
|
|
132
|
+
class WithNonConfig {
|
|
133
|
+
regular = "mutable";
|
|
134
|
+
constructor() {
|
|
135
|
+
Object.defineProperty(this, "frozen", {
|
|
136
|
+
value: "immutable",
|
|
137
|
+
writable: false,
|
|
138
|
+
configurable: false,
|
|
139
|
+
enumerable: true,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const StatifiedNonConfig = (0, basestatified_js_1.statifyClass)((Base) => class extends Base {
|
|
144
|
+
}, WithNonConfig);
|
|
145
|
+
test("non-configurable property retains its value", () => {
|
|
146
|
+
const x = new StatifiedNonConfig();
|
|
147
|
+
strict_1.default.equal(x.frozen, "immutable");
|
|
148
|
+
strict_1.default.equal(x.regular, "mutable");
|
|
149
|
+
});
|
|
150
|
+
test("non-configurable property triggers no events (listener not fired)", () => {
|
|
151
|
+
const x = new StatifiedNonConfig();
|
|
152
|
+
let fired = false;
|
|
153
|
+
// Subscribing to the regular field works fine.
|
|
154
|
+
high_js_1.default.onReplace(() => x.regular, () => { fired = true; });
|
|
155
|
+
x.regular = "changed";
|
|
156
|
+
strict_1.default.ok(fired, "regular field should fire");
|
|
157
|
+
// Non-configurable field cannot be instrumented; no subscription is possible.
|
|
158
|
+
// (Simply verify no crash and value is preserved.)
|
|
159
|
+
strict_1.default.equal(x.frozen, "immutable");
|
|
160
|
+
});
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
// 7. Accessor properties — not double-wrapped
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
console.log("\n── Accessor properties ──");
|
|
165
|
+
class WithAccessor {
|
|
166
|
+
#val = 0;
|
|
167
|
+
get computed() { return this.#val * 2; }
|
|
168
|
+
set computed(v) { this.#val = v / 2; }
|
|
169
|
+
}
|
|
170
|
+
const StatifiedAccessor = (0, basestatified_js_1.statifyClass)((Base) => class extends Base {
|
|
171
|
+
}, WithAccessor);
|
|
172
|
+
test("existing prototype accessor is not double-wrapped", () => {
|
|
173
|
+
const x = new StatifiedAccessor();
|
|
174
|
+
x.computed = 10;
|
|
175
|
+
strict_1.default.equal(x.computed, 10); // 10 → #val = 5 → computed = 10 ✓
|
|
176
|
+
});
|
|
177
|
+
test("prototype accessor write fires replacement events via shim set trap", () => {
|
|
178
|
+
const x = new StatifiedAccessor();
|
|
179
|
+
const received = [];
|
|
180
|
+
high_js_1.default.onReplace(() => x.computed, (v) => received.push(v));
|
|
181
|
+
x.computed = 4;
|
|
182
|
+
strict_1.default.deepEqual(received, [4]);
|
|
183
|
+
});
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
// 8. Nested statified objects — hook/unhook
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
console.log("\n── Nested statified objects ──");
|
|
188
|
+
test("assigning a statified child hooks it into the parent graph", () => {
|
|
189
|
+
const parent = new WithFields("parent");
|
|
190
|
+
const child = high_js_1.default.state({ val: 1 });
|
|
191
|
+
const received = [];
|
|
192
|
+
high_js_1.default.onReplace(() => parent.count, (v) => received.push(v));
|
|
193
|
+
parent.count = child;
|
|
194
|
+
// Mutating child should propagate events up through parent's graph.
|
|
195
|
+
// (The "replace" event on the field itself.)
|
|
196
|
+
strict_1.default.ok(true, "no crash on nested assignment");
|
|
197
|
+
});
|
|
198
|
+
test("replacing a statified child unhooks the old one", () => {
|
|
199
|
+
const parent = new WithFields("parent");
|
|
200
|
+
const child1 = high_js_1.default.state({ val: 1 });
|
|
201
|
+
const child2 = high_js_1.default.state({ val: 2 });
|
|
202
|
+
parent.fromBase = child1;
|
|
203
|
+
parent.fromBase = child2;
|
|
204
|
+
// No crash; old child unhooked, new child hooked.
|
|
205
|
+
strict_1.default.ok(true, "no crash on child replacement");
|
|
206
|
+
});
|
|
207
|
+
console.log("\n── statifyClass direct extension ──");
|
|
208
|
+
const Wayland = (0, basestatified_js_1.statifyClass)((Base) => class Wayland extends Base {
|
|
209
|
+
displays;
|
|
210
|
+
#state = 0;
|
|
211
|
+
get state() { return this.#state; }
|
|
212
|
+
set state(v) { this.#state = v; }
|
|
213
|
+
constructor() {
|
|
214
|
+
super();
|
|
215
|
+
this.displays = new set_js_1.StatifiedSet();
|
|
216
|
+
}
|
|
217
|
+
}, Object);
|
|
218
|
+
test("statifyClass subclass constructs without error", () => {
|
|
219
|
+
const w = new Wayland();
|
|
220
|
+
strict_1.default.ok(w instanceof Wayland);
|
|
221
|
+
strict_1.default.ok(w instanceof Object);
|
|
222
|
+
});
|
|
223
|
+
test("isStatified on statifyClass instance", () => {
|
|
224
|
+
const w = new Wayland();
|
|
225
|
+
strict_1.default.ok((0, internals_js_1.isStatified)(w));
|
|
226
|
+
});
|
|
227
|
+
test("prototype accessor on statifyClass subclass fires replacement events", () => {
|
|
228
|
+
const w = new Wayland();
|
|
229
|
+
const received = [];
|
|
230
|
+
high_js_1.default.onReplace(() => w.state, (v) => received.push(v));
|
|
231
|
+
w.state = 6;
|
|
232
|
+
w.state = 7;
|
|
233
|
+
strict_1.default.deepEqual(received, [6, 7]);
|
|
234
|
+
});
|
|
235
|
+
test("own field on statifyClass subclass fires replacement events", () => {
|
|
236
|
+
const w = new Wayland();
|
|
237
|
+
const received = [];
|
|
238
|
+
high_js_1.default.onReplace(() => w.displays, (v) => received.push(v));
|
|
239
|
+
const newSet = new set_js_1.StatifiedSet();
|
|
240
|
+
w.displays = newSet;
|
|
241
|
+
strict_1.default.deepEqual(received, [newSet]);
|
|
242
|
+
});
|
|
243
|
+
test("on() resolves path for own field", () => {
|
|
244
|
+
const w = new WithFields("test");
|
|
245
|
+
const received = [];
|
|
246
|
+
high_js_1.default.onReplace(() => w.label, (v) => received.push(v));
|
|
247
|
+
w.label = "changed";
|
|
248
|
+
strict_1.default.deepEqual(received, ["changed"]);
|
|
249
|
+
});
|
|
250
|
+
test("on() registered during construction fires for post-construction mutation", () => {
|
|
251
|
+
// This tests the listen-during-construction → replace → fire ordering.
|
|
252
|
+
let offFn;
|
|
253
|
+
const received = [];
|
|
254
|
+
const ConstructionListener = (0, basestatified_js_1.statifyClass)((Base) => class extends Base {
|
|
255
|
+
value = 42;
|
|
256
|
+
constructor() {
|
|
257
|
+
super();
|
|
258
|
+
// Register listener BEFORE construction exits.
|
|
259
|
+
// pendingAssemblies will be reconciled by registerPreExtractionHook
|
|
260
|
+
// which fires inside selectorToRootAndPath (called by $.onReplace).
|
|
261
|
+
offFn = high_js_1.default.onReplace(() => this.value, (v) => received.push(v));
|
|
262
|
+
}
|
|
263
|
+
}, Object);
|
|
264
|
+
const cl = new ConstructionListener();
|
|
265
|
+
cl.value = 100;
|
|
266
|
+
strict_1.default.deepEqual(received, [100]);
|
|
267
|
+
offFn?.();
|
|
268
|
+
});
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
// 12. Aliases — shared statified child is not duplicated
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
console.log("\n── Aliases ──");
|
|
273
|
+
test("assigning same statified value to two fields is one graph node", () => {
|
|
274
|
+
const parent = new WithFields("alias-test");
|
|
275
|
+
const shared = high_js_1.default.state({ v: 1 });
|
|
276
|
+
parent.fromBase = shared;
|
|
277
|
+
parent.label = shared;
|
|
278
|
+
// Both fields reference the same statified object — no duplication.
|
|
279
|
+
strict_1.default.equal(parent.fromBase, parent.label);
|
|
280
|
+
strict_1.default.ok(true, "no crash for aliased assignment");
|
|
281
|
+
});
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// Summary
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
// Allow async tests to settle before printing summary.
|
|
286
|
+
setTimeout(() => {
|
|
287
|
+
console.log(`\n── Summary: ${passed} passed, ${failed} failed ──\n`);
|
|
288
|
+
if (failed > 0)
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}, 100);
|
|
291
|
+
//# sourceMappingURL=basestatified.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basestatified.test.js","sourceRoot":"","sources":["../../src/quirks/basestatified.test.ts"],"names":[],"mappings":"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"}
|
package/dist/quirks/map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/quirks/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/quirks/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjI,OAAO,EAAE,cAAc,EAAiC,MAAM,WAAW,CAAC;AAE1E,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;IAC7E,CAAC,cAAc,CAAC,EAAE,IAAI,CAAQ;IAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,cAAc,CAKtC;IAID,YAAY,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAIzC;IAED,KAAK,IAAI,IAAI,CASZ;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAStB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAgB1B;CACF"}
|
package/dist/quirks/map.js
CHANGED
package/dist/quirks/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/quirks/map.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/quirks/map.ts"],"names":[],"mappings":";;;AAAA,kDAAiI;AACjI,sCAA0E;AAE1E,kBAAgC,SAAQ,GAAS;IAC/C,CAAC,6BAAc,CAAC,GAAS,IAAI,CAAC;IAC9B,IAAI,CAAC,8BAAe,CAAC;QACnB,IAAI,IAAA,iCAAkB,GAAE,KAAK,oBAAoB,EAAE,CAAC;YAClD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAA+B,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,CAAgB;IAEzB,YAAY,IAA8B;QACxC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,SAAS,GAAG,IAAA,4BAAa,EAAC,IAAI,EAAE,IAAI,sBAAa,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK;QACH,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,GAAM;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEtB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;;AAEA,YAAY,CAAC,SAAiB,CAAC,gCAAiB,CAAC,GAAG,IAAI,CAAC"}
|
package/dist/quirks/set.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/quirks/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/quirks/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwD,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtI,OAAO,EAAiC,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAErG,qBAAa,YAAY,CAAC,CAAC,SAAS,eAAe,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;IAC5F,CAAC,cAAc,CAAC,EAAE,IAAI,CAAQ;IAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,cAAc,CAKtC;IAID,YAAY,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAIpC;IAED,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAQlB;IAED,KAAK,IAAI,IAAI,CAWZ;IAED,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAQxB;CACF"}
|
package/dist/quirks/set.js
CHANGED
package/dist/quirks/set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/quirks/set.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/quirks/set.ts"],"names":[],"mappings":";;;AAAA,kDAAsI;AACtI,sCAAqG;AAErG,kBAAqD,SAAQ,GAAM;IACjE,CAAC,6BAAc,CAAC,GAAS,IAAI,CAAC;IAC9B,IAAI,CAAC,8BAAe,CAAC;QACnB,IAAI,IAAA,iCAAkB,GAAE,KAAK,oBAAoB,EAAE,CAAC;YAClD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAA+B,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,CAAgB;IAEzB,YAAY,IAAyB;QACnC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,SAAS,GAAG,IAAA,4BAAa,EAAC,IAAI,EAAE,IAAI,sBAAa,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAErC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAQ;QACb,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;;AAEA,YAAY,CAAC,SAAiB,CAAC,gCAAiB,CAAC,GAAG,IAAI,CAAC"}
|
package/dist/test.js
CHANGED
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const high_js_1 = __importDefault(require("./high.js"));
|
|
7
|
-
const basestatified_js_1 = require("./quirks/basestatified.js");
|
|
8
7
|
const set_js_1 = require("./quirks/set.js");
|
|
9
8
|
const stateful = high_js_1.default.state({ a: [] });
|
|
10
9
|
high_js_1.default.onSpliceInElement(() => stateful.a, (v) => {
|
|
@@ -23,7 +22,7 @@ const asdf = high_js_1.default.state({ d: new Set() });
|
|
|
23
22
|
const asdf2 = high_js_1.default.state({ c: asdf });
|
|
24
23
|
// const aassddff = $.state(new Set());
|
|
25
24
|
stateful.b = asdf2;
|
|
26
|
-
class Wayland extends
|
|
25
|
+
const Wayland = high_js_1.default.statifyClass((Base) => class Wayland extends Base {
|
|
27
26
|
displays = new set_js_1.StatifiedSet();
|
|
28
27
|
#state = 0;
|
|
29
28
|
get state() { return this.#state; }
|
|
@@ -31,10 +30,7 @@ class Wayland extends basestatified_js_1.BaseStatified {
|
|
|
31
30
|
console.log("set", v);
|
|
32
31
|
this.#state = v;
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
super();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
33
|
+
}, Object);
|
|
38
34
|
const w = new Wayland();
|
|
39
35
|
high_js_1.default.onSet(() => w.state, (v) => console.log("asdf awawa!!", v));
|
|
40
36
|
// w.state = 5;
|
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;;;AAAA,wDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class EnumerableWeakSet<T extends WeakKey> implements WeakSet<T>, Iterable<T> {
|
|
2
|
+
#set = new WeakSet<T>();
|
|
3
|
+
|
|
4
|
+
#refs: WeakRef<T>[] = [];
|
|
5
|
+
|
|
6
|
+
constructor(iterable: Iterable<T> | null = null) {
|
|
7
|
+
if (iterable) {
|
|
8
|
+
for (const value of iterable) {
|
|
9
|
+
this.add(value);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
get [Symbol.toStringTag]() {
|
|
15
|
+
return "WeakerableSet";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
add(value: T): this {
|
|
19
|
+
if (!this.#set.has(value)) {
|
|
20
|
+
this.#refs.push(new WeakRef(value));
|
|
21
|
+
this.#set.add(value);
|
|
22
|
+
}
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
delete(value: T): boolean {
|
|
27
|
+
return this.#set.delete(value);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
has(value: T): boolean {
|
|
31
|
+
return this.#set.has(value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
*[Symbol.iterator](): Generator<T, void, unknown> {
|
|
35
|
+
const set = this.#set;
|
|
36
|
+
const refs: WeakRef<T>[] = [];
|
|
37
|
+
for (const wr of this.#refs) {
|
|
38
|
+
const value = wr.deref();
|
|
39
|
+
if (value && set.has(value)) {
|
|
40
|
+
refs.push(wr);
|
|
41
|
+
yield value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
this.#refs = refs;
|
|
45
|
+
}
|
|
46
|
+
}
|
package/src/high.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getMetadataOf, isStatified, proxyMemoized, type Statify } from "./internals.js";
|
|
2
2
|
import { hook, selectorToRootAndPath, statifyObject, type StatifiableObj, type StatifiableProp, type Statified } from "./low.js";
|
|
3
3
|
import { StatifiedArray } from "./quirks/array.js";
|
|
4
|
-
import {
|
|
4
|
+
import { statifyClass } from "./quirks/basestatified.js";
|
|
5
5
|
import { StatifiedMap } from "./quirks/map.js";
|
|
6
6
|
import { StatifiedSet } from "./quirks/set.js";
|
|
7
7
|
|
|
@@ -292,8 +292,7 @@ export default {
|
|
|
292
292
|
offSizeChanged,
|
|
293
293
|
state,
|
|
294
294
|
|
|
295
|
-
|
|
296
|
-
makeStatified,
|
|
295
|
+
statifyClass,
|
|
297
296
|
StatifiedArray,
|
|
298
297
|
StatifiedSet,
|
|
299
298
|
StatifiedMap,
|
package/src/internals.ts
CHANGED
|
@@ -5,7 +5,7 @@ export const exitProxySymbol = Symbol.for(`hi-this-is-informa-${version}-s--exit
|
|
|
5
5
|
|
|
6
6
|
// The mode is used by the functions exposed by informa,
|
|
7
7
|
// no concurrency issues arise because of the unique call stack.
|
|
8
|
-
const globalStateModeSymbol = Symbol.for(
|
|
8
|
+
const globalStateModeSymbol = Symbol.for(`hi-this-is-informa-${version}-s--global-state-mode`);
|
|
9
9
|
export function setGlobalStateMode(mode: "normal" | "extract-proxy-path") {
|
|
10
10
|
if (getGlobalStateMode() === mode) return;
|
|
11
11
|
|
|
@@ -47,3 +47,7 @@ export function isStatified<T extends StatifiableObj>(v: T): v is Statify<T> {
|
|
|
47
47
|
return (v as Statify<T>)[statifySealKey];
|
|
48
48
|
}
|
|
49
49
|
export type Statify<T extends StatifiableObj> = T & { [statifySealKey]: true } & Exitable;
|
|
50
|
+
|
|
51
|
+
export const isStatifiedSetKey = Symbol.for(`hi-this-is-informa-${version}-s--isStatifiedSet`);
|
|
52
|
+
export const isStatifiedArrayKey = Symbol.for(`hi-this-is-informa-${version}-s--isStatifiedArray`);
|
|
53
|
+
export const isStatifiedMapKey = Symbol.for(`hi-this-is-informa-${version}-s--isStatifiedMap`);
|
package/src/low.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { exitProxySymbol, getGlobalStateMode, getMetadataOf, proxyMemoized, setGlobalStateMode, setMetadataOf, statifySealKey, type Statify } from "./internals.js";
|
|
1
|
+
import { exitProxySymbol, getGlobalStateMode, getMetadataOf, isStatifiedArrayKey, isStatifiedMapKey, isStatifiedSetKey, proxyMemoized, setGlobalStateMode, setMetadataOf, statifySealKey, type Statify } from "./internals.js";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
import { StatifiedSet } from "./quirks/set.js";
|
|
4
4
|
import { isListInGrid } from "./utils.js";
|
|
5
5
|
import { EnumerableWeakMap } from "./EnumerableWeakMap.js";
|
|
6
6
|
import { StatifiedMap } from "./quirks/map.js";
|
|
7
|
+
import { StatifiedArray } from "./quirks/array.js";
|
|
7
8
|
|
|
8
9
|
type ProxyEventEmitterEvents = {
|
|
9
10
|
"set": [any],
|
|
@@ -156,6 +157,112 @@ export type Statified<T extends StatifiableProp> = T extends object
|
|
|
156
157
|
: Statify<{ [K in keyof T]: Statified<T[K]> }>
|
|
157
158
|
: T;
|
|
158
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Emit the appropriate structural events when a field transitions from `old` to
|
|
162
|
+
* `next`. Called after unhook/hook so the event graph is already up-to-date.
|
|
163
|
+
*
|
|
164
|
+
* Rules:
|
|
165
|
+
* Set → Set : symmetric diff (deleteItem for removed, addItem for added)
|
|
166
|
+
* Set → other : wipe old set (deleteItem every item)
|
|
167
|
+
* other→ Set : introduce new set (addItem every item)
|
|
168
|
+
* Array→ other : wipe old array (spliceOutElement every item)
|
|
169
|
+
* other→ Array : introduce new array (spliceInElement every item)
|
|
170
|
+
* Map → Map : diff entries (deleteEntry, replaceEntry, addEntry)
|
|
171
|
+
* Map → other : wipe old map (deleteEntry every entry)
|
|
172
|
+
* other→ Map : introduce new map (addEntry every entry)
|
|
173
|
+
*/
|
|
174
|
+
export function emitCollectionTransition(old: unknown, next: unknown): void {
|
|
175
|
+
const oldIsSet = old != null && typeof old === "object" && (old as any)[isStatifiedSetKey];
|
|
176
|
+
const nextIsSet = next != null && typeof next === "object" && (next as any)[isStatifiedSetKey];
|
|
177
|
+
const oldIsArray = old != null && typeof old === "object" && (old as any)[isStatifiedArrayKey];
|
|
178
|
+
const nextIsArray= next != null && typeof next === "object" && (next as any)[isStatifiedArrayKey];
|
|
179
|
+
const oldIsMap = old != null && typeof old === "object" && (old as any)[isStatifiedMapKey];
|
|
180
|
+
const nextIsMap = next != null && typeof next === "object" && (next as any)[isStatifiedMapKey];
|
|
181
|
+
|
|
182
|
+
// ---- Set transitions ----
|
|
183
|
+
if (oldIsSet && nextIsSet) {
|
|
184
|
+
const oldSet = old as StatifiedSet<unknown>;
|
|
185
|
+
const nextSet = next as StatifiedSet<unknown>;
|
|
186
|
+
const oldMeta = getMetadataOf(oldSet as Statify<{}>);
|
|
187
|
+
let changed = false;
|
|
188
|
+
for (const item of oldSet) {
|
|
189
|
+
if (!nextSet.has(item)) { oldMeta.emit("deleteItem", item); changed = true; }
|
|
190
|
+
}
|
|
191
|
+
for (const item of nextSet) {
|
|
192
|
+
if (!oldSet.has(item)) { oldMeta.emit("addItem", item); changed = true; }
|
|
193
|
+
}
|
|
194
|
+
if (changed) oldMeta.emit("cardChanged");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (oldIsSet) {
|
|
198
|
+
const oldSet = old as StatifiedSet<unknown>;
|
|
199
|
+
const oldMeta = getMetadataOf(oldSet as Statify<{}>);
|
|
200
|
+
let changed = false;
|
|
201
|
+
for (const item of oldSet) { oldMeta.emit("deleteItem", item); changed = true; }
|
|
202
|
+
if (changed) oldMeta.emit("cardChanged");
|
|
203
|
+
}
|
|
204
|
+
if (nextIsSet) {
|
|
205
|
+
const nextSet = next as StatifiedSet<unknown>;
|
|
206
|
+
const nextMeta = getMetadataOf(nextSet as Statify<{}>);
|
|
207
|
+
let changed = false;
|
|
208
|
+
for (const item of nextSet) { nextMeta.emit("addItem", item); changed = true; }
|
|
209
|
+
if (changed) nextMeta.emit("cardChanged");
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// ---- Array transitions ----
|
|
213
|
+
if (oldIsArray && !nextIsArray) {
|
|
214
|
+
const oldArr = old as StatifiedArray<unknown>;
|
|
215
|
+
const oldMeta = getMetadataOf(oldArr as Statify<{}>);
|
|
216
|
+
if (oldArr.length > 0) {
|
|
217
|
+
for (let i = oldArr.length - 1; i >= 0; i--) {
|
|
218
|
+
oldMeta.emit("spliceOutElement", oldArr[i], i);
|
|
219
|
+
}
|
|
220
|
+
oldMeta.emit("lengthChanged");
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (nextIsArray && !oldIsArray) {
|
|
224
|
+
const nextArr = next as StatifiedArray<unknown>;
|
|
225
|
+
const nextMeta = getMetadataOf(nextArr as Statify<{}>);
|
|
226
|
+
if (nextArr.length > 0) {
|
|
227
|
+
for (let i = 0; i < nextArr.length; i++) {
|
|
228
|
+
nextMeta.emit("spliceInElement", nextArr[i], i);
|
|
229
|
+
}
|
|
230
|
+
nextMeta.emit("lengthChanged");
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// ---- Map transitions ----
|
|
235
|
+
if (oldIsMap && nextIsMap) {
|
|
236
|
+
const oldMap = old as StatifiedMap<unknown, unknown>;
|
|
237
|
+
const nextMap = next as StatifiedMap<unknown, unknown>;
|
|
238
|
+
const oldMeta = getMetadataOf(oldMap as Statify<{}>);
|
|
239
|
+
let changed = false;
|
|
240
|
+
for (const [k, v] of oldMap) {
|
|
241
|
+
if (!nextMap.has(k)) { oldMeta.emit("deleteEntry", k, v); changed = true; }
|
|
242
|
+
else if (nextMap.get(k) !== v) { oldMeta.emit("replaceEntry", k, nextMap.get(k)); oldMeta.emit("setEntry", k, nextMap.get(k)); changed = true; }
|
|
243
|
+
}
|
|
244
|
+
for (const [k, v] of nextMap) {
|
|
245
|
+
if (!oldMap.has(k)) { oldMeta.emit("addEntry", k, v); oldMeta.emit("setEntry", k, v); changed = true; }
|
|
246
|
+
}
|
|
247
|
+
if (changed) oldMeta.emit("sizeChanged");
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (oldIsMap) {
|
|
251
|
+
const oldMap = old as StatifiedMap<unknown, unknown>;
|
|
252
|
+
const oldMeta = getMetadataOf(oldMap as Statify<{}>);
|
|
253
|
+
let changed = false;
|
|
254
|
+
for (const [k, v] of oldMap) { oldMeta.emit("deleteEntry", k, v); changed = true; }
|
|
255
|
+
if (changed) oldMeta.emit("sizeChanged");
|
|
256
|
+
}
|
|
257
|
+
if (nextIsMap) {
|
|
258
|
+
const nextMap = next as StatifiedMap<unknown, unknown>;
|
|
259
|
+
const nextMeta = getMetadataOf(nextMap as Statify<{}>);
|
|
260
|
+
let changed = false;
|
|
261
|
+
for (const [k, v] of nextMap) { nextMeta.emit("addEntry", k, v); nextMeta.emit("setEntry", k, v); changed = true; }
|
|
262
|
+
if (changed) nextMeta.emit("sizeChanged");
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
159
266
|
export function statifyObject<T extends { [k: string | symbol]: Statified<StatifiableProp> }>(target: T): Statified<T> {
|
|
160
267
|
if ((target as Statified<T>)[statifySealKey]) {
|
|
161
268
|
return target as Statified<T>;
|
|
@@ -214,6 +321,8 @@ export function statifyObject<T extends { [k: string | symbol]: Statified<Statif
|
|
|
214
321
|
unhook(stateMetadata, prop, oldValMetadata);
|
|
215
322
|
}
|
|
216
323
|
|
|
324
|
+
emitCollectionTransition(oldVal, newVal);
|
|
325
|
+
|
|
217
326
|
if (
|
|
218
327
|
typeof prop !== "symbol" &&
|
|
219
328
|
Number.isInteger(Number(prop)) &&
|
|
@@ -331,7 +440,17 @@ export function extract(
|
|
|
331
440
|
});
|
|
332
441
|
}
|
|
333
442
|
|
|
443
|
+
const preExtractionHooks = new Set<() => void>();
|
|
444
|
+
export function registerPreExtractionHook(fn: () => void): () => void {
|
|
445
|
+
preExtractionHooks.add(fn);
|
|
446
|
+
return () => preExtractionHooks.delete(fn);
|
|
447
|
+
}
|
|
448
|
+
|
|
334
449
|
export function selectorToRootAndPath(selector: () => Statify<StatifiableObj>) {
|
|
450
|
+
// Reconcile all pending class instances before entering extract-proxy-path mode.
|
|
451
|
+
// This ensures field accessors are installed so path extraction resolves correctly.
|
|
452
|
+
for (const hook of preExtractionHooks) hook();
|
|
453
|
+
|
|
335
454
|
setGlobalStateMode("extract-proxy-path");
|
|
336
455
|
|
|
337
456
|
let result;
|