@toyz/loom 0.9.0 → 0.11.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 +38 -11
- package/dist/element/element.d.ts +3 -0
- package/dist/element/element.d.ts.map +1 -1
- package/dist/element/element.js +21 -0
- package/dist/element/element.js.map +1 -1
- package/dist/element/form.d.ts +3 -1
- package/dist/element/form.d.ts.map +1 -1
- package/dist/element/form.js +33 -24
- package/dist/element/form.js.map +1 -1
- package/dist/element/icon.d.ts +1 -3
- package/dist/element/icon.d.ts.map +1 -1
- package/dist/element/icon.js +20 -34
- package/dist/element/icon.js.map +1 -1
- package/dist/element/index.d.ts +0 -1
- package/dist/element/index.d.ts.map +1 -1
- package/dist/element/index.js +3 -0
- package/dist/element/index.js.map +1 -1
- package/dist/element/timing.d.ts +0 -15
- package/dist/element/timing.d.ts.map +1 -1
- package/dist/element/timing.js +22 -12
- package/dist/element/timing.js.map +1 -1
- package/dist/element/virtual.d.ts +46 -41
- package/dist/element/virtual.d.ts.map +1 -1
- package/dist/element/virtual.js +170 -101
- package/dist/element/virtual.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/jsx-runtime.d.ts.map +1 -1
- package/dist/jsx-runtime.js +85 -6
- package/dist/jsx-runtime.js.map +1 -1
- package/dist/morph.d.ts +4 -0
- package/dist/morph.d.ts.map +1 -1
- package/dist/morph.js +25 -0
- package/dist/morph.js.map +1 -1
- package/dist/query/decorators.d.ts.map +1 -1
- package/dist/query/decorators.js +10 -2
- package/dist/query/decorators.js.map +1 -1
- package/dist/store/decorators.d.ts.map +1 -1
- package/dist/store/decorators.js +18 -28
- package/dist/store/decorators.js.map +1 -1
- package/dist/store/reactive.d.ts +12 -0
- package/dist/store/reactive.d.ts.map +1 -1
- package/dist/store/reactive.js +26 -0
- package/dist/store/reactive.js.map +1 -1
- package/dist/trace.d.ts +93 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +176 -0
- package/dist/trace.js.map +1 -0
- package/package.json +1 -1
package/dist/trace.d.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom — Traced Template Projection
|
|
3
|
+
*
|
|
4
|
+
* Phase 1: Dependency tracking for update().
|
|
5
|
+
* - Traces which Reactive instances are read during update()
|
|
6
|
+
* - On subsequent scheduleUpdate() calls, checks if any tracked
|
|
7
|
+
* dependency actually changed before running update()+morph().
|
|
8
|
+
* - Eliminates unnecessary renders when unrelated state changes.
|
|
9
|
+
*
|
|
10
|
+
* Phase 2: Fine-grained DOM patching via Closure Bindings.
|
|
11
|
+
* - During traced update(), function children/props are executed
|
|
12
|
+
* within a sub-trace to capture their specific dependencies.
|
|
13
|
+
* - A Binding is created linking those dependencies to the DOM node.
|
|
14
|
+
* - On subsequent updates, if all dirty deps have bindings,
|
|
15
|
+
* the element fast-patches those DOM nodes directly.
|
|
16
|
+
*/
|
|
17
|
+
import type { Reactive } from "./store/reactive";
|
|
18
|
+
/** A single Reactive→DOM binding created during traced update() */
|
|
19
|
+
export interface Binding {
|
|
20
|
+
/** The set of reactives that trigger this binding */
|
|
21
|
+
reactives: Set<Reactive<any>>;
|
|
22
|
+
/** The DOM node to patch */
|
|
23
|
+
target: Node | Element;
|
|
24
|
+
/** The closure that updates the DOM (re-evaluates the binding) */
|
|
25
|
+
patcher: () => void;
|
|
26
|
+
}
|
|
27
|
+
/** Dependency set: the Reactives that were read during a single update() call */
|
|
28
|
+
export interface TraceDeps {
|
|
29
|
+
/** Set of Reactives read during the traced update() */
|
|
30
|
+
deps: Set<Reactive<any>>;
|
|
31
|
+
/** Snapshot of each dependency's version at trace time */
|
|
32
|
+
versions: Map<Reactive<any>, number>;
|
|
33
|
+
/** Phase 2 — Reactive→DOM bindings for fast-patching */
|
|
34
|
+
bindings: Map<Reactive<any>, Binding[]>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Begin tracing. Called before update().
|
|
38
|
+
* All Reactive.value reads will be recorded.
|
|
39
|
+
*/
|
|
40
|
+
export declare function startTrace(): void;
|
|
41
|
+
/**
|
|
42
|
+
* End tracing and return the dependency set + version snapshots + bindings.
|
|
43
|
+
* Called after update() completes.
|
|
44
|
+
*/
|
|
45
|
+
export declare function endTrace(): TraceDeps;
|
|
46
|
+
/**
|
|
47
|
+
* Check if tracing is currently active.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isTracing(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Record a Reactive read. Called from Reactive.value getter
|
|
52
|
+
* when a trace is active.
|
|
53
|
+
*/
|
|
54
|
+
export declare function recordRead(reactive: Reactive<any>): void;
|
|
55
|
+
/**
|
|
56
|
+
* Start a sub-trace for a closure binding.
|
|
57
|
+
* Pushes the current activeDeps to the stack and starts a fresh set.
|
|
58
|
+
*/
|
|
59
|
+
export declare function startSubTrace(): void;
|
|
60
|
+
/**
|
|
61
|
+
* End a sub-trace and return the captured dependencies.
|
|
62
|
+
* Merges the captured deps back into the parent trace (so the component remains dirty).
|
|
63
|
+
*/
|
|
64
|
+
export declare function endSubTrace(): Set<Reactive<any>>;
|
|
65
|
+
/**
|
|
66
|
+
* Register a Reactive→DOM binding.
|
|
67
|
+
* Called by the JSX runtime when a closure binding is detected.
|
|
68
|
+
*/
|
|
69
|
+
export declare function addBinding(reactives: Set<Reactive<any>>, target: Node | Element, patcher: () => void): void;
|
|
70
|
+
/**
|
|
71
|
+
* Check if any dependency in the trace has changed since the snapshot.
|
|
72
|
+
* Returns true if at least one dependency's version differs.
|
|
73
|
+
* Returns true if trace is null (first render, always dirty).
|
|
74
|
+
*/
|
|
75
|
+
export declare function hasDirtyDeps(trace: TraceDeps | null): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Check if all dirty dependencies have bindings — if so, we can
|
|
78
|
+
* fast-patch the DOM without running update()+morph().
|
|
79
|
+
* Returns false for null trace or if any dirty dep has no binding.
|
|
80
|
+
*/
|
|
81
|
+
export declare function canFastPatch(trace: TraceDeps | null): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Apply all dirty bindings.
|
|
84
|
+
* Only patches bindings for deps that actually changed.
|
|
85
|
+
* Uses a Set to deduplicate patchers (one binding might depend on multiple changed reactives).
|
|
86
|
+
*/
|
|
87
|
+
export declare function applyBindings(trace: TraceDeps): void;
|
|
88
|
+
/**
|
|
89
|
+
* Update the snapshot versions to current.
|
|
90
|
+
* Called after a successful update()+morph() or fast-patch.
|
|
91
|
+
*/
|
|
92
|
+
export declare function refreshSnapshots(trace: TraceDeps): void;
|
|
93
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,mEAAmE;AACnE,MAAM,WAAW,OAAO;IACtB,qDAAqD;IACrD,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,4BAA4B;IAC5B,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,kEAAkE;IAClE,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IACrC,wDAAwD;IACxD,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;CACzC;AAkBD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAepC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAIxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAYhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC7B,MAAM,EAAE,IAAI,GAAG,OAAO,EACtB,OAAO,EAAE,MAAM,IAAI,GAClB,IAAI,CAcN;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAM7D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAW7D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAkBpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAIvD"}
|
package/dist/trace.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom — Traced Template Projection
|
|
3
|
+
*
|
|
4
|
+
* Phase 1: Dependency tracking for update().
|
|
5
|
+
* - Traces which Reactive instances are read during update()
|
|
6
|
+
* - On subsequent scheduleUpdate() calls, checks if any tracked
|
|
7
|
+
* dependency actually changed before running update()+morph().
|
|
8
|
+
* - Eliminates unnecessary renders when unrelated state changes.
|
|
9
|
+
*
|
|
10
|
+
* Phase 2: Fine-grained DOM patching via Closure Bindings.
|
|
11
|
+
* - During traced update(), function children/props are executed
|
|
12
|
+
* within a sub-trace to capture their specific dependencies.
|
|
13
|
+
* - A Binding is created linking those dependencies to the DOM node.
|
|
14
|
+
* - On subsequent updates, if all dirty deps have bindings,
|
|
15
|
+
* the element fast-patches those DOM nodes directly.
|
|
16
|
+
*/
|
|
17
|
+
// ── Tracer state (module-scoped) ──
|
|
18
|
+
/**
|
|
19
|
+
* The current set of dependencies being tracked.
|
|
20
|
+
* When nested tracing occurs, the parent set is pushed to `traceStack`.
|
|
21
|
+
*/
|
|
22
|
+
let activeDeps = null;
|
|
23
|
+
/** Stack of dependency sets for nested tracing (e.g. inside a binding closure) */
|
|
24
|
+
let traceStack = [];
|
|
25
|
+
/** Active bindings being collected during a traced update() */
|
|
26
|
+
let activeBindings = null;
|
|
27
|
+
// ── Public API ──
|
|
28
|
+
/**
|
|
29
|
+
* Begin tracing. Called before update().
|
|
30
|
+
* All Reactive.value reads will be recorded.
|
|
31
|
+
*/
|
|
32
|
+
export function startTrace() {
|
|
33
|
+
activeDeps = new Set();
|
|
34
|
+
traceStack = [];
|
|
35
|
+
activeBindings = new Map();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* End tracing and return the dependency set + version snapshots + bindings.
|
|
39
|
+
* Called after update() completes.
|
|
40
|
+
*/
|
|
41
|
+
export function endTrace() {
|
|
42
|
+
const deps = activeDeps ?? new Set();
|
|
43
|
+
activeDeps = null;
|
|
44
|
+
// Snapshot current versions for dirty checking
|
|
45
|
+
const versions = new Map();
|
|
46
|
+
for (const r of deps) {
|
|
47
|
+
versions.set(r, r.peekVersion());
|
|
48
|
+
}
|
|
49
|
+
const bindings = activeBindings ?? new Map();
|
|
50
|
+
activeBindings = null;
|
|
51
|
+
traceStack = [];
|
|
52
|
+
return { deps, versions, bindings };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if tracing is currently active.
|
|
56
|
+
*/
|
|
57
|
+
export function isTracing() {
|
|
58
|
+
return activeDeps !== null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Record a Reactive read. Called from Reactive.value getter
|
|
62
|
+
* when a trace is active.
|
|
63
|
+
*/
|
|
64
|
+
export function recordRead(reactive) {
|
|
65
|
+
if (activeDeps) {
|
|
66
|
+
activeDeps.add(reactive);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Start a sub-trace for a closure binding.
|
|
71
|
+
* Pushes the current activeDeps to the stack and starts a fresh set.
|
|
72
|
+
*/
|
|
73
|
+
export function startSubTrace() {
|
|
74
|
+
if (activeDeps) {
|
|
75
|
+
traceStack.push(activeDeps);
|
|
76
|
+
}
|
|
77
|
+
activeDeps = new Set();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* End a sub-trace and return the captured dependencies.
|
|
81
|
+
* Merges the captured deps back into the parent trace (so the component remains dirty).
|
|
82
|
+
*/
|
|
83
|
+
export function endSubTrace() {
|
|
84
|
+
const captured = activeDeps ?? new Set();
|
|
85
|
+
activeDeps = traceStack.pop() || null;
|
|
86
|
+
// Merge sub-trace deps into parent trace
|
|
87
|
+
if (activeDeps) {
|
|
88
|
+
for (const r of captured) {
|
|
89
|
+
activeDeps.add(r);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return captured;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Register a Reactive→DOM binding.
|
|
96
|
+
* Called by the JSX runtime when a closure binding is detected.
|
|
97
|
+
*/
|
|
98
|
+
export function addBinding(reactives, target, patcher) {
|
|
99
|
+
if (!activeBindings)
|
|
100
|
+
return;
|
|
101
|
+
const binding = { reactives, target, patcher };
|
|
102
|
+
// Register this binding for every reactive it depends on
|
|
103
|
+
for (const r of reactives) {
|
|
104
|
+
let list = activeBindings.get(r);
|
|
105
|
+
if (!list) {
|
|
106
|
+
list = [];
|
|
107
|
+
activeBindings.set(r, list);
|
|
108
|
+
}
|
|
109
|
+
list.push(binding);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if any dependency in the trace has changed since the snapshot.
|
|
114
|
+
* Returns true if at least one dependency's version differs.
|
|
115
|
+
* Returns true if trace is null (first render, always dirty).
|
|
116
|
+
*/
|
|
117
|
+
export function hasDirtyDeps(trace) {
|
|
118
|
+
if (!trace)
|
|
119
|
+
return true;
|
|
120
|
+
for (const [r, ver] of trace.versions) {
|
|
121
|
+
if (r.peekVersion() !== ver)
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if all dirty dependencies have bindings — if so, we can
|
|
128
|
+
* fast-patch the DOM without running update()+morph().
|
|
129
|
+
* Returns false for null trace or if any dirty dep has no binding.
|
|
130
|
+
*/
|
|
131
|
+
export function canFastPatch(trace) {
|
|
132
|
+
if (!trace)
|
|
133
|
+
return false;
|
|
134
|
+
if (trace.bindings.size === 0)
|
|
135
|
+
return false;
|
|
136
|
+
for (const [r, ver] of trace.versions) {
|
|
137
|
+
if (r.peekVersion() !== ver) {
|
|
138
|
+
// This dep is dirty — does it have bindings?
|
|
139
|
+
if (!trace.bindings.has(r))
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Apply all dirty bindings.
|
|
147
|
+
* Only patches bindings for deps that actually changed.
|
|
148
|
+
* Uses a Set to deduplicate patchers (one binding might depend on multiple changed reactives).
|
|
149
|
+
*/
|
|
150
|
+
export function applyBindings(trace) {
|
|
151
|
+
const patchersToRun = new Set();
|
|
152
|
+
for (const [r, ver] of trace.versions) {
|
|
153
|
+
if (r.peekVersion() !== ver) {
|
|
154
|
+
const bindings = trace.bindings.get(r);
|
|
155
|
+
if (bindings) {
|
|
156
|
+
for (const b of bindings) {
|
|
157
|
+
patchersToRun.add(b.patcher);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Execute unique patchers
|
|
163
|
+
for (const patcher of patchersToRun) {
|
|
164
|
+
patcher();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Update the snapshot versions to current.
|
|
169
|
+
* Called after a successful update()+morph() or fast-patch.
|
|
170
|
+
*/
|
|
171
|
+
export function refreshSnapshots(trace) {
|
|
172
|
+
for (const r of trace.deps) {
|
|
173
|
+
trace.versions.set(r, r.peekVersion());
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
|