@llui/dom 0.0.19 → 0.0.21
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 +25 -21
- package/dist/addressed.d.ts +1 -1
- package/dist/addressed.d.ts.map +1 -1
- package/dist/addressed.js.map +1 -1
- package/dist/binding.d.ts +2 -2
- package/dist/binding.d.ts.map +1 -1
- package/dist/binding.js +2 -2
- package/dist/binding.js.map +1 -1
- package/dist/devtools.d.ts +3 -3
- package/dist/devtools.d.ts.map +1 -1
- package/dist/devtools.js +14 -12
- package/dist/devtools.js.map +1 -1
- package/dist/el-split.js +3 -3
- package/dist/el-split.js.map +1 -1
- package/dist/el-template.js +3 -3
- package/dist/el-template.js.map +1 -1
- package/dist/elements.js +1 -1
- package/dist/elements.js.map +1 -1
- package/dist/hmr.d.ts +2 -1
- package/dist/hmr.d.ts.map +1 -1
- package/dist/hmr.js +74 -34
- package/dist/hmr.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/lifetime.d.ts +39 -0
- package/dist/lifetime.d.ts.map +1 -0
- package/dist/lifetime.js +250 -0
- package/dist/lifetime.js.map +1 -0
- package/dist/mathml-elements.js +1 -1
- package/dist/mathml-elements.js.map +1 -1
- package/dist/mount.d.ts +41 -7
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +216 -9
- package/dist/mount.js.map +1 -1
- package/dist/primitives/branch.d.ts.map +1 -1
- package/dist/primitives/branch.js +30 -20
- package/dist/primitives/branch.js.map +1 -1
- package/dist/primitives/child.js +12 -12
- package/dist/primitives/child.js.map +1 -1
- package/dist/primitives/context.js +6 -6
- package/dist/primitives/context.js.map +1 -1
- package/dist/primitives/each.d.ts.map +1 -1
- package/dist/primitives/each.js +37 -32
- package/dist/primitives/each.js.map +1 -1
- package/dist/primitives/error-boundary.js +7 -7
- package/dist/primitives/error-boundary.js.map +1 -1
- package/dist/primitives/foreign.js +3 -3
- package/dist/primitives/foreign.js.map +1 -1
- package/dist/primitives/lazy.js +11 -11
- package/dist/primitives/lazy.js.map +1 -1
- package/dist/primitives/on-mount.js +2 -2
- package/dist/primitives/on-mount.js.map +1 -1
- package/dist/primitives/portal.js +4 -4
- package/dist/primitives/portal.js.map +1 -1
- package/dist/primitives/sample.d.ts +18 -0
- package/dist/primitives/sample.d.ts.map +1 -0
- package/dist/primitives/sample.js +22 -0
- package/dist/primitives/sample.js.map +1 -0
- package/dist/primitives/scope.d.ts +25 -0
- package/dist/primitives/scope.d.ts.map +1 -0
- package/dist/primitives/scope.js +36 -0
- package/dist/primitives/scope.js.map +1 -0
- package/dist/primitives/selector.js +4 -4
- package/dist/primitives/selector.js.map +1 -1
- package/dist/primitives/show.d.ts.map +1 -1
- package/dist/primitives/show.js +4 -1
- package/dist/primitives/show.js.map +1 -1
- package/dist/primitives/slice.d.ts.map +1 -1
- package/dist/primitives/slice.js +16 -1
- package/dist/primitives/slice.js.map +1 -1
- package/dist/primitives/text.js +3 -3
- package/dist/primitives/text.js.map +1 -1
- package/dist/primitives/unsafe-html.d.ts +28 -0
- package/dist/primitives/unsafe-html.d.ts.map +1 -0
- package/dist/primitives/unsafe-html.js +82 -0
- package/dist/primitives/unsafe-html.js.map +1 -0
- package/dist/primitives/virtual-each.d.ts.map +1 -1
- package/dist/primitives/virtual-each.js +9 -9
- package/dist/primitives/virtual-each.js.map +1 -1
- package/dist/render-context.d.ts +2 -2
- package/dist/render-context.d.ts.map +1 -1
- package/dist/render-context.js.map +1 -1
- package/dist/ssr.d.ts +4 -4
- package/dist/ssr.d.ts.map +1 -1
- package/dist/ssr.js +3 -3
- package/dist/ssr.js.map +1 -1
- package/dist/svg-elements.js +1 -1
- package/dist/svg-elements.js.map +1 -1
- package/dist/tracking/disposer-log.d.ts +4 -4
- package/dist/tracking/disposer-log.d.ts.map +1 -1
- package/dist/tracking/disposer-log.js.map +1 -1
- package/dist/types.d.ts +50 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update-loop.d.ts +3 -3
- package/dist/update-loop.d.ts.map +1 -1
- package/dist/update-loop.js +12 -8
- package/dist/update-loop.js.map +1 -1
- package/dist/view-helpers.d.ts +15 -1
- package/dist/view-helpers.d.ts.map +1 -1
- package/dist/view-helpers.js +6 -0
- package/dist/view-helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/lifetime.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
let nextId = 1;
|
|
2
|
+
/**
|
|
3
|
+
* Walk up the scope chain to find the owning ComponentInstance. The
|
|
4
|
+
* instance is stamped onto the rootLifetime by `installDevTools`, so this
|
|
5
|
+
* returns null in production (no devtools) or for scopes that haven't
|
|
6
|
+
* yet been parented to a tracked root (e.g., during initial creation).
|
|
7
|
+
*/
|
|
8
|
+
function findInstance(scope) {
|
|
9
|
+
let s = scope;
|
|
10
|
+
while (s) {
|
|
11
|
+
if (s.instance)
|
|
12
|
+
return s.instance;
|
|
13
|
+
s = s.parent;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
// Shared empty arrays — avoid allocating per scope when unused
|
|
18
|
+
const EMPTY_LIFETIMES = [];
|
|
19
|
+
const EMPTY_DISPOSERS = [];
|
|
20
|
+
const EMPTY_BINDINGS = [];
|
|
21
|
+
const EMPTY_UPDATERS = [];
|
|
22
|
+
// Lifetime pool — reuse disposed scope objects to reduce GC pressure.
|
|
23
|
+
// Capped to avoid memory leaks in apps that create/destroy thousands of rows.
|
|
24
|
+
const SCOPE_POOL = [];
|
|
25
|
+
const SCOPE_POOL_MAX = 2048;
|
|
26
|
+
// Dev-mode flag. Flipped to true by installDevTools() once any component
|
|
27
|
+
// instance has a disposer log. In production this stays false forever,
|
|
28
|
+
// and disposeLifetime skips findInstance entirely — zero cost.
|
|
29
|
+
let anyDisposerLogInstalled = false;
|
|
30
|
+
/** @internal — called by devtools.ts::installDevTools */
|
|
31
|
+
export function _markDisposerLogInstalled() {
|
|
32
|
+
anyDisposerLogInstalled = true;
|
|
33
|
+
}
|
|
34
|
+
/** @internal Drain the scope pool — for testing only */
|
|
35
|
+
export function _drainScopePool() {
|
|
36
|
+
SCOPE_POOL.length = 0;
|
|
37
|
+
}
|
|
38
|
+
export function createLifetime(parent) {
|
|
39
|
+
let scope;
|
|
40
|
+
if (SCOPE_POOL.length > 0) {
|
|
41
|
+
scope = SCOPE_POOL.pop();
|
|
42
|
+
scope.id = nextId++;
|
|
43
|
+
scope.parent = parent;
|
|
44
|
+
// Arrays already reset to empties by dispose. Reset dev-only hints
|
|
45
|
+
// so recycled scopes don't carry stale tagging/back-refs. Cheap
|
|
46
|
+
// (two undefined writes) and keeps production-identical behavior
|
|
47
|
+
// when these fields are never set.
|
|
48
|
+
scope.disposalCause = undefined;
|
|
49
|
+
scope.instance = undefined;
|
|
50
|
+
scope._kind = undefined;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
scope = {
|
|
54
|
+
id: nextId++,
|
|
55
|
+
parent,
|
|
56
|
+
children: EMPTY_LIFETIMES,
|
|
57
|
+
disposers: EMPTY_DISPOSERS,
|
|
58
|
+
bindings: EMPTY_BINDINGS,
|
|
59
|
+
itemUpdaters: EMPTY_UPDATERS,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (parent) {
|
|
63
|
+
if (parent.children === EMPTY_LIFETIMES)
|
|
64
|
+
parent.children = [];
|
|
65
|
+
parent.children.push(scope);
|
|
66
|
+
}
|
|
67
|
+
return scope;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Dispose a scope and all its children. By default, detaches the scope
|
|
71
|
+
* from its parent's `children` array via `indexOf + splice` — O(N) per
|
|
72
|
+
* call, which becomes O(N²) when disposing many sibling scopes in bulk
|
|
73
|
+
* (e.g. `each` clearing 1000 rows).
|
|
74
|
+
*
|
|
75
|
+
* Pass `skipParentRemoval = true` when the caller will batch-remove
|
|
76
|
+
* children afterwards (see `removeOrphanedFromParent`). The scope's
|
|
77
|
+
* `parent` pointer is still set to `null` so the caller can identify
|
|
78
|
+
* orphaned entries.
|
|
79
|
+
*/
|
|
80
|
+
export function disposeLifetime(scope, skipParentRemoval = false) {
|
|
81
|
+
if (scope.disposers.length === 0 && scope.children.length === 0 && scope.bindings.length === 0) {
|
|
82
|
+
// Dev-only: still emit a DisposerEvent for empty scopes — the log
|
|
83
|
+
// is meant to capture every scope the app destroys, not only ones
|
|
84
|
+
// that had attached work. Outer flag check keeps production (no
|
|
85
|
+
// devtools ever installed) at true zero cost — no parent-chain walk.
|
|
86
|
+
if (anyDisposerLogInstalled) {
|
|
87
|
+
const inst = findInstance(scope);
|
|
88
|
+
if (inst?._disposerLog !== undefined) {
|
|
89
|
+
inst._disposerLog.push({
|
|
90
|
+
scopeId: String(scope.id),
|
|
91
|
+
cause: scope.disposalCause ?? 'component-unmount',
|
|
92
|
+
timestamp: Date.now(),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!skipParentRemoval)
|
|
97
|
+
removeFromParent(scope);
|
|
98
|
+
scope.parent = null;
|
|
99
|
+
// Don't pool empty scopes from the early-return path — they may be
|
|
100
|
+
// disposed idempotently (twice), which would create pool duplicates
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// When skipParentRemoval is true, children don't mutate during disposal —
|
|
104
|
+
// iterate directly without allocating a copy. Otherwise, clone to avoid
|
|
105
|
+
// mutation during iteration.
|
|
106
|
+
const children = skipParentRemoval ? scope.children : scope.children.slice();
|
|
107
|
+
for (const child of children) {
|
|
108
|
+
disposeLifetime(child, skipParentRemoval);
|
|
109
|
+
}
|
|
110
|
+
for (const disposer of scope.disposers) {
|
|
111
|
+
disposer();
|
|
112
|
+
}
|
|
113
|
+
// Dev-only: emit disposer events into the owning instance's log.
|
|
114
|
+
// Outer flag check keeps production (no devtools ever installed) at
|
|
115
|
+
// true zero cost — skips the O(depth) parent-chain walk entirely.
|
|
116
|
+
if (anyDisposerLogInstalled) {
|
|
117
|
+
const inst = findInstance(scope);
|
|
118
|
+
if (inst?._disposerLog !== undefined) {
|
|
119
|
+
inst._disposerLog.push({
|
|
120
|
+
scopeId: String(scope.id),
|
|
121
|
+
cause: scope.disposalCause ?? 'component-unmount',
|
|
122
|
+
timestamp: Date.now(),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Mark bindings as dead and break closure/DOM retention
|
|
127
|
+
for (const binding of scope.bindings) {
|
|
128
|
+
binding.dead = true;
|
|
129
|
+
binding.accessor = null;
|
|
130
|
+
binding.node = null;
|
|
131
|
+
binding.lastValue = undefined;
|
|
132
|
+
}
|
|
133
|
+
// Reset to shared empties — don't just truncate, so pooled scopes
|
|
134
|
+
// don't hold allocated-but-empty arrays
|
|
135
|
+
scope.disposers = EMPTY_DISPOSERS;
|
|
136
|
+
scope.bindings = EMPTY_BINDINGS;
|
|
137
|
+
scope.children = EMPTY_LIFETIMES;
|
|
138
|
+
scope.itemUpdaters = EMPTY_UPDATERS;
|
|
139
|
+
if (!skipParentRemoval)
|
|
140
|
+
removeFromParent(scope);
|
|
141
|
+
scope.parent = null;
|
|
142
|
+
// Return to pool for reuse
|
|
143
|
+
if (SCOPE_POOL.length < SCOPE_POOL_MAX)
|
|
144
|
+
SCOPE_POOL.push(scope);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Batch-remove children with `parent === null` from `parent.children`.
|
|
148
|
+
* Called after a bulk `disposeLifetime(child, true)` pass to collapse the
|
|
149
|
+
* individual O(N) splice operations into one O(N) scan.
|
|
150
|
+
*/
|
|
151
|
+
export function removeOrphanedChildren(parent) {
|
|
152
|
+
const children = parent.children;
|
|
153
|
+
let w = 0;
|
|
154
|
+
for (let r = 0; r < children.length; r++) {
|
|
155
|
+
if (children[r].parent !== null)
|
|
156
|
+
children[w++] = children[r];
|
|
157
|
+
}
|
|
158
|
+
children.length = w;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Bulk dispose an array of sibling scopes — avoids per-scope function call
|
|
162
|
+
* overhead. Used by each() clear path where 1000+ scopes are disposed at once.
|
|
163
|
+
* Caller must call removeOrphanedChildren(parent) afterwards.
|
|
164
|
+
*/
|
|
165
|
+
export function disposeLifetimesBulk(scopes) {
|
|
166
|
+
for (let i = 0; i < scopes.length; i++) {
|
|
167
|
+
const scope = scopes[i];
|
|
168
|
+
// Recursively dispose children
|
|
169
|
+
const children = scope.children;
|
|
170
|
+
if (children.length > 0) {
|
|
171
|
+
disposeLifetimesBulk(children);
|
|
172
|
+
}
|
|
173
|
+
// Run disposers
|
|
174
|
+
const disposers = scope.disposers;
|
|
175
|
+
for (let d = 0; d < disposers.length; d++)
|
|
176
|
+
disposers[d]();
|
|
177
|
+
// Dev-only: emit disposer events — same guard as disposeLifetime.
|
|
178
|
+
if (anyDisposerLogInstalled) {
|
|
179
|
+
const inst = findInstance(scope);
|
|
180
|
+
if (inst?._disposerLog !== undefined) {
|
|
181
|
+
inst._disposerLog.push({
|
|
182
|
+
scopeId: String(scope.id),
|
|
183
|
+
cause: scope.disposalCause ?? 'component-unmount',
|
|
184
|
+
timestamp: Date.now(),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Mark bindings dead
|
|
189
|
+
const bindings = scope.bindings;
|
|
190
|
+
for (let b = 0; b < bindings.length; b++) {
|
|
191
|
+
const binding = bindings[b];
|
|
192
|
+
binding.dead = true;
|
|
193
|
+
binding.accessor = null;
|
|
194
|
+
binding.node = null;
|
|
195
|
+
binding.lastValue = undefined;
|
|
196
|
+
}
|
|
197
|
+
// Reset to shared empties + detach from parent + return to pool
|
|
198
|
+
scope.disposers = EMPTY_DISPOSERS;
|
|
199
|
+
scope.bindings = EMPTY_BINDINGS;
|
|
200
|
+
scope.children = EMPTY_LIFETIMES;
|
|
201
|
+
scope.itemUpdaters = EMPTY_UPDATERS;
|
|
202
|
+
scope.parent = null;
|
|
203
|
+
if (SCOPE_POOL.length < SCOPE_POOL_MAX)
|
|
204
|
+
SCOPE_POOL.push(scope);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export function addBinding(scope, binding) {
|
|
208
|
+
binding.ownerLifetime = scope;
|
|
209
|
+
if (scope.bindings === EMPTY_BINDINGS)
|
|
210
|
+
scope.bindings = [];
|
|
211
|
+
scope.bindings.push(binding);
|
|
212
|
+
}
|
|
213
|
+
export function addItemUpdater(scope, updater) {
|
|
214
|
+
if (scope.itemUpdaters === EMPTY_UPDATERS)
|
|
215
|
+
scope.itemUpdaters = [];
|
|
216
|
+
scope.itemUpdaters.push(updater);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Register a per-item updater that compares the new value against the last
|
|
220
|
+
* value before applying. Shared by `text()`, `elSplit()`, and `elTemplate()`
|
|
221
|
+
* so the equality-check logic lives in one place.
|
|
222
|
+
*
|
|
223
|
+
* @param apply - DOM write: receives the new value when it differs
|
|
224
|
+
* @returns the initial value (caller should apply it to the DOM)
|
|
225
|
+
*/
|
|
226
|
+
export function addCheckedItemUpdater(scope, get, apply) {
|
|
227
|
+
let last = get();
|
|
228
|
+
addItemUpdater(scope, () => {
|
|
229
|
+
const v = get();
|
|
230
|
+
if (v === last || (v !== v && last !== last))
|
|
231
|
+
return;
|
|
232
|
+
last = v;
|
|
233
|
+
apply(v);
|
|
234
|
+
});
|
|
235
|
+
return last;
|
|
236
|
+
}
|
|
237
|
+
export function addDisposer(scope, disposer) {
|
|
238
|
+
if (scope.disposers === EMPTY_DISPOSERS)
|
|
239
|
+
scope.disposers = [];
|
|
240
|
+
scope.disposers.push(disposer);
|
|
241
|
+
}
|
|
242
|
+
function removeFromParent(scope) {
|
|
243
|
+
if (scope.parent) {
|
|
244
|
+
const idx = scope.parent.children.indexOf(scope);
|
|
245
|
+
if (idx !== -1) {
|
|
246
|
+
scope.parent.children.splice(idx, 1);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=lifetime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifetime.js","sourceRoot":"","sources":["../src/lifetime.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Lifetime, Binding } from './types.js'\nimport type { ComponentInstance } from './update-loop.js'\n\nlet nextId = 1\n\n/**\n * Walk up the scope chain to find the owning ComponentInstance. The\n * instance is stamped onto the rootLifetime by `installDevTools`, so this\n * returns null in production (no devtools) or for scopes that haven't\n * yet been parented to a tracked root (e.g., during initial creation).\n */\nfunction findInstance(scope: Lifetime): ComponentInstance | null {\n let s: Lifetime | null = scope\n while (s) {\n if (s.instance) return s.instance\n s = s.parent\n }\n return null\n}\n\n// Shared empty arrays — avoid allocating per scope when unused\nconst EMPTY_LIFETIMES: Lifetime[] = []\nconst EMPTY_DISPOSERS: Array<() => void> = []\nconst EMPTY_BINDINGS: Binding[] = []\nconst EMPTY_UPDATERS: Array<() => void> = []\n\n// Lifetime pool — reuse disposed scope objects to reduce GC pressure.\n// Capped to avoid memory leaks in apps that create/destroy thousands of rows.\nconst SCOPE_POOL: Lifetime[] = []\nconst SCOPE_POOL_MAX = 2048\n\n// Dev-mode flag. Flipped to true by installDevTools() once any component\n// instance has a disposer log. In production this stays false forever,\n// and disposeLifetime skips findInstance entirely — zero cost.\nlet anyDisposerLogInstalled = false\n\n/** @internal — called by devtools.ts::installDevTools */\nexport function _markDisposerLogInstalled(): void {\n anyDisposerLogInstalled = true\n}\n\n/** @internal Drain the scope pool — for testing only */\nexport function _drainScopePool(): void {\n SCOPE_POOL.length = 0\n}\n\nexport function createLifetime(parent: Lifetime | null): Lifetime {\n let scope: Lifetime\n if (SCOPE_POOL.length > 0) {\n scope = SCOPE_POOL.pop()!\n scope.id = nextId++\n scope.parent = parent\n // Arrays already reset to empties by dispose. Reset dev-only hints\n // so recycled scopes don't carry stale tagging/back-refs. Cheap\n // (two undefined writes) and keeps production-identical behavior\n // when these fields are never set.\n scope.disposalCause = undefined\n scope.instance = undefined\n scope._kind = undefined\n } else {\n scope = {\n id: nextId++,\n parent,\n children: EMPTY_LIFETIMES,\n disposers: EMPTY_DISPOSERS,\n bindings: EMPTY_BINDINGS,\n itemUpdaters: EMPTY_UPDATERS,\n }\n }\n\n if (parent) {\n if (parent.children === EMPTY_LIFETIMES) parent.children = []\n parent.children.push(scope)\n }\n\n return scope\n}\n\n/**\n * Dispose a scope and all its children. By default, detaches the scope\n * from its parent's `children` array via `indexOf + splice` — O(N) per\n * call, which becomes O(N²) when disposing many sibling scopes in bulk\n * (e.g. `each` clearing 1000 rows).\n *\n * Pass `skipParentRemoval = true` when the caller will batch-remove\n * children afterwards (see `removeOrphanedFromParent`). The scope's\n * `parent` pointer is still set to `null` so the caller can identify\n * orphaned entries.\n */\nexport function disposeLifetime(scope: Lifetime, skipParentRemoval = false): void {\n if (scope.disposers.length === 0 && scope.children.length === 0 && scope.bindings.length === 0) {\n // Dev-only: still emit a DisposerEvent for empty scopes — the log\n // is meant to capture every scope the app destroys, not only ones\n // that had attached work. Outer flag check keeps production (no\n // devtools ever installed) at true zero cost — no parent-chain walk.\n if (anyDisposerLogInstalled) {\n const inst = findInstance(scope)\n if (inst?._disposerLog !== undefined) {\n inst._disposerLog.push({\n scopeId: String(scope.id),\n cause: scope.disposalCause ?? 'component-unmount',\n timestamp: Date.now(),\n })\n }\n }\n if (!skipParentRemoval) removeFromParent(scope)\n scope.parent = null\n // Don't pool empty scopes from the early-return path — they may be\n // disposed idempotently (twice), which would create pool duplicates\n return\n }\n\n // When skipParentRemoval is true, children don't mutate during disposal —\n // iterate directly without allocating a copy. Otherwise, clone to avoid\n // mutation during iteration.\n const children = skipParentRemoval ? scope.children : scope.children.slice()\n for (const child of children) {\n disposeLifetime(child, skipParentRemoval)\n }\n\n for (const disposer of scope.disposers) {\n disposer()\n }\n\n // Dev-only: emit disposer events into the owning instance's log.\n // Outer flag check keeps production (no devtools ever installed) at\n // true zero cost — skips the O(depth) parent-chain walk entirely.\n if (anyDisposerLogInstalled) {\n const inst = findInstance(scope)\n if (inst?._disposerLog !== undefined) {\n inst._disposerLog.push({\n scopeId: String(scope.id),\n cause: scope.disposalCause ?? 'component-unmount',\n timestamp: Date.now(),\n })\n }\n }\n\n // Mark bindings as dead and break closure/DOM retention\n for (const binding of scope.bindings) {\n binding.dead = true\n binding.accessor = null!\n binding.node = null!\n binding.lastValue = undefined\n }\n\n // Reset to shared empties — don't just truncate, so pooled scopes\n // don't hold allocated-but-empty arrays\n scope.disposers = EMPTY_DISPOSERS\n scope.bindings = EMPTY_BINDINGS\n scope.children = EMPTY_LIFETIMES\n scope.itemUpdaters = EMPTY_UPDATERS\n\n if (!skipParentRemoval) removeFromParent(scope)\n scope.parent = null\n\n // Return to pool for reuse\n if (SCOPE_POOL.length < SCOPE_POOL_MAX) SCOPE_POOL.push(scope)\n}\n\n/**\n * Batch-remove children with `parent === null` from `parent.children`.\n * Called after a bulk `disposeLifetime(child, true)` pass to collapse the\n * individual O(N) splice operations into one O(N) scan.\n */\nexport function removeOrphanedChildren(parent: Lifetime): void {\n const children = parent.children\n let w = 0\n for (let r = 0; r < children.length; r++) {\n if (children[r]!.parent !== null) children[w++] = children[r]!\n }\n children.length = w\n}\n\n/**\n * Bulk dispose an array of sibling scopes — avoids per-scope function call\n * overhead. Used by each() clear path where 1000+ scopes are disposed at once.\n * Caller must call removeOrphanedChildren(parent) afterwards.\n */\nexport function disposeLifetimesBulk(scopes: Lifetime[]): void {\n for (let i = 0; i < scopes.length; i++) {\n const scope = scopes[i]!\n // Recursively dispose children\n const children = scope.children\n if (children.length > 0) {\n disposeLifetimesBulk(children)\n }\n // Run disposers\n const disposers = scope.disposers\n for (let d = 0; d < disposers.length; d++) disposers[d]!()\n // Dev-only: emit disposer events — same guard as disposeLifetime.\n if (anyDisposerLogInstalled) {\n const inst = findInstance(scope)\n if (inst?._disposerLog !== undefined) {\n inst._disposerLog.push({\n scopeId: String(scope.id),\n cause: scope.disposalCause ?? 'component-unmount',\n timestamp: Date.now(),\n })\n }\n }\n // Mark bindings dead\n const bindings = scope.bindings\n for (let b = 0; b < bindings.length; b++) {\n const binding = bindings[b]!\n binding.dead = true\n binding.accessor = null!\n binding.node = null!\n binding.lastValue = undefined\n }\n // Reset to shared empties + detach from parent + return to pool\n scope.disposers = EMPTY_DISPOSERS\n scope.bindings = EMPTY_BINDINGS\n scope.children = EMPTY_LIFETIMES\n scope.itemUpdaters = EMPTY_UPDATERS\n scope.parent = null\n if (SCOPE_POOL.length < SCOPE_POOL_MAX) SCOPE_POOL.push(scope)\n }\n}\n\nexport function addBinding(scope: Lifetime, binding: Binding): void {\n binding.ownerLifetime = scope\n if (scope.bindings === EMPTY_BINDINGS) scope.bindings = []\n scope.bindings.push(binding)\n}\n\nexport function addItemUpdater(scope: Lifetime, updater: () => void): void {\n if (scope.itemUpdaters === EMPTY_UPDATERS) scope.itemUpdaters = []\n scope.itemUpdaters.push(updater)\n}\n\n/**\n * Register a per-item updater that compares the new value against the last\n * value before applying. Shared by `text()`, `elSplit()`, and `elTemplate()`\n * so the equality-check logic lives in one place.\n *\n * @param apply - DOM write: receives the new value when it differs\n * @returns the initial value (caller should apply it to the DOM)\n */\nexport function addCheckedItemUpdater<V>(\n scope: Lifetime,\n get: () => V,\n apply: (value: V) => void,\n): V {\n let last: V = get()\n addItemUpdater(scope, () => {\n const v = get()\n if (v === last || (v !== v && last !== last)) return\n last = v\n apply(v)\n })\n return last\n}\n\nexport function addDisposer(scope: Lifetime, disposer: () => void): void {\n if (scope.disposers === EMPTY_DISPOSERS) scope.disposers = []\n scope.disposers.push(disposer)\n}\n\nfunction removeFromParent(scope: Lifetime): void {\n if (scope.parent) {\n const idx = scope.parent.children.indexOf(scope)\n if (idx !== -1) {\n scope.parent.children.splice(idx, 1)\n }\n }\n}\n"]}
|
package/dist/mathml-elements.js
CHANGED
|
@@ -25,7 +25,7 @@ function createMathmlElement(tag, propsOrChildren, maybeChildren) {
|
|
|
25
25
|
const key = kind === 'class' ? undefined : rawKey;
|
|
26
26
|
const accessor = value;
|
|
27
27
|
const perItem = value.length === 0;
|
|
28
|
-
const binding = createBinding(ctx.
|
|
28
|
+
const binding = createBinding(ctx.rootLifetime, {
|
|
29
29
|
mask: FULL_MASK,
|
|
30
30
|
accessor,
|
|
31
31
|
kind,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mathml-elements.js","sourceRoot":"","sources":["../src/mathml-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { FULL_MASK } from './update-loop.js'\n\nconst MATHML_NS = 'http://www.w3.org/1998/Math/MathML'\n\ntype ElementProps = Record<string, unknown>\ntype Child = Node | string | Node[]\ntype Children = Child[]\n\nfunction createMathmlElement(\n tag: string,\n propsOrChildren?: ElementProps | Children,\n maybeChildren?: Children,\n): MathMLElement {\n const el = document.createElementNS(MATHML_NS, tag) as MathMLElement\n const ctx = getRenderContext()\n\n const props: ElementProps | undefined = Array.isArray(propsOrChildren)\n ? undefined\n : propsOrChildren\n const children: Children | undefined = Array.isArray(propsOrChildren)\n ? propsOrChildren\n : maybeChildren\n\n if (props) {\n for (const [rawKey, value] of Object.entries(props)) {\n if (rawKey === 'key') continue\n\n if (/^on[A-Z]/.test(rawKey)) {\n const eventName = rawKey.slice(2).toLowerCase()\n el.addEventListener(eventName, value as EventListener)\n continue\n }\n\n if (typeof value === 'function') {\n const kind: BindingKind = rawKey === 'class' || rawKey === 'className' ? 'class' : 'attr'\n const key = kind === 'class' ? undefined : rawKey\n const accessor = value as (state: never) => unknown\n const perItem = value.length === 0\n\n const binding = createBinding(ctx.rootScope, {\n mask: FULL_MASK,\n accessor,\n kind,\n node: el,\n key,\n perItem,\n })\n\n const initialValue = perItem ? (value as () => unknown)() : accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node: el, key }, initialValue)\n continue\n }\n\n if (rawKey === 'class' || rawKey === 'className') {\n applyBinding({ kind: 'class', node: el, key: undefined }, value)\n } else {\n applyBinding({ kind: 'attr', node: el, key: rawKey }, value)\n }\n }\n }\n\n if (children) {\n for (const child of children) {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child))\n } else if (Array.isArray(child)) {\n for (const node of child) el.appendChild(node)\n } else {\n el.appendChild(child)\n }\n }\n }\n\n return el\n}\n\ntype MathElFn = {\n (): MathMLElement\n (props: ElementProps, children?: Children): MathMLElement\n (children: Children): MathMLElement\n}\n\ntype MathVoidElFn = {\n (): MathMLElement\n (props: ElementProps): MathMLElement\n}\n\n/* v8 ignore start — mechanical tag wrappers */\n// Top-level\n// prettier-ignore\nexport const math = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('math', p, c)) as MathElFn\n\n// Token elements\n// prettier-ignore\nexport const mi = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mi', p, c)) as MathElFn\n// prettier-ignore\nexport const mn = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mn', p, c)) as MathElFn\n// prettier-ignore\nexport const mo = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mo', p, c)) as MathElFn\n// prettier-ignore\nexport const ms = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('ms', p, c)) as MathElFn\n// prettier-ignore\nexport const mtext = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtext', p, c)) as MathElFn\n\n// Layout\n// prettier-ignore\nexport const mrow = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mrow', p, c)) as MathElFn\n// prettier-ignore\nexport const mfrac = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mfrac', p, c)) as MathElFn\n// prettier-ignore\nexport const msqrt = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msqrt', p, c)) as MathElFn\n// prettier-ignore\nexport const mroot = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mroot', p, c)) as MathElFn\n// prettier-ignore\nexport const msup = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msup', p, c)) as MathElFn\n// prettier-ignore\nexport const msub = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msub', p, c)) as MathElFn\n// prettier-ignore\nexport const msubsup = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msubsup', p, c)) as MathElFn\n// prettier-ignore\nexport const munder = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('munder', p, c)) as MathElFn\n// prettier-ignore\nexport const mover = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mover', p, c)) as MathElFn\n// prettier-ignore\nexport const munderover = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('munderover', p, c)) as MathElFn\n// prettier-ignore\nexport const mmultiscripts = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mmultiscripts', p, c)) as MathElFn\n// prettier-ignore\nexport const mprescripts = ((p?: ElementProps) => createMathmlElement('mprescripts', p)) as MathVoidElFn\n// prettier-ignore\nexport const mnone = ((p?: ElementProps) => createMathmlElement('none', p)) as MathVoidElFn\n\n// Table\n// prettier-ignore\nexport const mtable = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtable', p, c)) as MathElFn\n// prettier-ignore\nexport const mtr = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtr', p, c)) as MathElFn\n// prettier-ignore\nexport const mtd = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtd', p, c)) as MathElFn\n\n// Spacing / visual\n// prettier-ignore\nexport const mspace = ((p?: ElementProps) => createMathmlElement('mspace', p)) as MathVoidElFn\n// prettier-ignore\nexport const mpadded = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mpadded', p, c)) as MathElFn\n// prettier-ignore\nexport const mphantom = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mphantom', p, c)) as MathElFn\n// prettier-ignore\nexport const menclose = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('menclose', p, c)) as MathElFn\n// prettier-ignore\nexport const merror = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('merror', p, c)) as MathElFn\n\n// Interactive\n// prettier-ignore\nexport const maction = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('maction', p, c)) as MathElFn\n\n// Semantics\n// prettier-ignore\nexport const semantics = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('semantics', p, c)) as MathElFn\n// prettier-ignore\nexport const annotation = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('annotation', p, c)) as MathElFn\n// prettier-ignore\nexport const annotationXml = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('annotation-xml', p, c)) as MathElFn\n/* v8 ignore stop */\n"]}
|
|
1
|
+
{"version":3,"file":"mathml-elements.js","sourceRoot":"","sources":["../src/mathml-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { FULL_MASK } from './update-loop.js'\n\nconst MATHML_NS = 'http://www.w3.org/1998/Math/MathML'\n\ntype ElementProps = Record<string, unknown>\ntype Child = Node | string | Node[]\ntype Children = Child[]\n\nfunction createMathmlElement(\n tag: string,\n propsOrChildren?: ElementProps | Children,\n maybeChildren?: Children,\n): MathMLElement {\n const el = document.createElementNS(MATHML_NS, tag) as MathMLElement\n const ctx = getRenderContext()\n\n const props: ElementProps | undefined = Array.isArray(propsOrChildren)\n ? undefined\n : propsOrChildren\n const children: Children | undefined = Array.isArray(propsOrChildren)\n ? propsOrChildren\n : maybeChildren\n\n if (props) {\n for (const [rawKey, value] of Object.entries(props)) {\n if (rawKey === 'key') continue\n\n if (/^on[A-Z]/.test(rawKey)) {\n const eventName = rawKey.slice(2).toLowerCase()\n el.addEventListener(eventName, value as EventListener)\n continue\n }\n\n if (typeof value === 'function') {\n const kind: BindingKind = rawKey === 'class' || rawKey === 'className' ? 'class' : 'attr'\n const key = kind === 'class' ? undefined : rawKey\n const accessor = value as (state: never) => unknown\n const perItem = value.length === 0\n\n const binding = createBinding(ctx.rootLifetime, {\n mask: FULL_MASK,\n accessor,\n kind,\n node: el,\n key,\n perItem,\n })\n\n const initialValue = perItem ? (value as () => unknown)() : accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node: el, key }, initialValue)\n continue\n }\n\n if (rawKey === 'class' || rawKey === 'className') {\n applyBinding({ kind: 'class', node: el, key: undefined }, value)\n } else {\n applyBinding({ kind: 'attr', node: el, key: rawKey }, value)\n }\n }\n }\n\n if (children) {\n for (const child of children) {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child))\n } else if (Array.isArray(child)) {\n for (const node of child) el.appendChild(node)\n } else {\n el.appendChild(child)\n }\n }\n }\n\n return el\n}\n\ntype MathElFn = {\n (): MathMLElement\n (props: ElementProps, children?: Children): MathMLElement\n (children: Children): MathMLElement\n}\n\ntype MathVoidElFn = {\n (): MathMLElement\n (props: ElementProps): MathMLElement\n}\n\n/* v8 ignore start — mechanical tag wrappers */\n// Top-level\n// prettier-ignore\nexport const math = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('math', p, c)) as MathElFn\n\n// Token elements\n// prettier-ignore\nexport const mi = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mi', p, c)) as MathElFn\n// prettier-ignore\nexport const mn = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mn', p, c)) as MathElFn\n// prettier-ignore\nexport const mo = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mo', p, c)) as MathElFn\n// prettier-ignore\nexport const ms = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('ms', p, c)) as MathElFn\n// prettier-ignore\nexport const mtext = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtext', p, c)) as MathElFn\n\n// Layout\n// prettier-ignore\nexport const mrow = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mrow', p, c)) as MathElFn\n// prettier-ignore\nexport const mfrac = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mfrac', p, c)) as MathElFn\n// prettier-ignore\nexport const msqrt = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msqrt', p, c)) as MathElFn\n// prettier-ignore\nexport const mroot = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mroot', p, c)) as MathElFn\n// prettier-ignore\nexport const msup = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msup', p, c)) as MathElFn\n// prettier-ignore\nexport const msub = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msub', p, c)) as MathElFn\n// prettier-ignore\nexport const msubsup = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('msubsup', p, c)) as MathElFn\n// prettier-ignore\nexport const munder = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('munder', p, c)) as MathElFn\n// prettier-ignore\nexport const mover = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mover', p, c)) as MathElFn\n// prettier-ignore\nexport const munderover = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('munderover', p, c)) as MathElFn\n// prettier-ignore\nexport const mmultiscripts = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mmultiscripts', p, c)) as MathElFn\n// prettier-ignore\nexport const mprescripts = ((p?: ElementProps) => createMathmlElement('mprescripts', p)) as MathVoidElFn\n// prettier-ignore\nexport const mnone = ((p?: ElementProps) => createMathmlElement('none', p)) as MathVoidElFn\n\n// Table\n// prettier-ignore\nexport const mtable = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtable', p, c)) as MathElFn\n// prettier-ignore\nexport const mtr = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtr', p, c)) as MathElFn\n// prettier-ignore\nexport const mtd = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mtd', p, c)) as MathElFn\n\n// Spacing / visual\n// prettier-ignore\nexport const mspace = ((p?: ElementProps) => createMathmlElement('mspace', p)) as MathVoidElFn\n// prettier-ignore\nexport const mpadded = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mpadded', p, c)) as MathElFn\n// prettier-ignore\nexport const mphantom = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('mphantom', p, c)) as MathElFn\n// prettier-ignore\nexport const menclose = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('menclose', p, c)) as MathElFn\n// prettier-ignore\nexport const merror = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('merror', p, c)) as MathElFn\n\n// Interactive\n// prettier-ignore\nexport const maction = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('maction', p, c)) as MathElFn\n\n// Semantics\n// prettier-ignore\nexport const semantics = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('semantics', p, c)) as MathElFn\n// prettier-ignore\nexport const annotation = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('annotation', p, c)) as MathElFn\n// prettier-ignore\nexport const annotationXml = ((p?: ElementProps | Children, c?: Children) => createMathmlElement('annotation-xml', p, c)) as MathElFn\n/* v8 ignore stop */\n"]}
|
package/dist/mount.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentDef, AppHandle,
|
|
1
|
+
import type { ComponentDef, AppHandle, Lifetime } from './types.js';
|
|
2
2
|
declare global {
|
|
3
3
|
interface ImportMeta {
|
|
4
4
|
env?: {
|
|
@@ -9,19 +9,53 @@ declare global {
|
|
|
9
9
|
export interface MountOptions {
|
|
10
10
|
devTools?: boolean;
|
|
11
11
|
/**
|
|
12
|
-
* Parent scope for the mounted component's
|
|
13
|
-
* the
|
|
12
|
+
* Parent scope for the mounted component's rootLifetime. When provided,
|
|
13
|
+
* the rootLifetime is created as a child of this scope — context lookups
|
|
14
14
|
* from within the component walk up through the parent's scope tree,
|
|
15
15
|
* and disposing the parent scope cascades into this instance's scope.
|
|
16
16
|
* Used by `@llui/vike`'s persistent-layout machinery to mount a page
|
|
17
17
|
* as a true scope-tree child of its enclosing layout, so layout-
|
|
18
18
|
* provided contexts flow naturally into pages via `useContext`.
|
|
19
19
|
*
|
|
20
|
-
* When omitted (the default), the
|
|
20
|
+
* When omitted (the default), the rootLifetime is detached — same as
|
|
21
21
|
* every `mountApp` call before persistent layouts existed.
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
parentLifetime?: Lifetime;
|
|
24
24
|
}
|
|
25
|
-
export declare function mountApp<S, M, E>(container: HTMLElement, def: ComponentDef<S, M, E>, data?:
|
|
26
|
-
export declare function
|
|
25
|
+
export declare function mountApp<S, M, E>(container: HTMLElement, def: ComponentDef<S, M, E>, data?: undefined, options?: MountOptions): AppHandle;
|
|
26
|
+
export declare function mountApp<S, M, E, D>(container: HTMLElement, def: ComponentDef<S, M, E, D>, data: D, options?: MountOptions): AppHandle;
|
|
27
|
+
/**
|
|
28
|
+
* Mount a component relative to a comment anchor rather than inside a
|
|
29
|
+
* container element. Inserts a synthesized end sentinel (`<!-- llui-mount-end -->`)
|
|
30
|
+
* immediately after the anchor and places the component's nodes between
|
|
31
|
+
* the pair. The anchor must already be attached to a live DOM tree.
|
|
32
|
+
*
|
|
33
|
+
* Unlike `mountApp`, the caller's anchor node is preserved across the
|
|
34
|
+
* handle's lifetime — only the content between the pair (and the end
|
|
35
|
+
* sentinel itself) is disposed. Used by `@llui/vike` persistent layouts
|
|
36
|
+
* to mount chain layers without a wrapper element.
|
|
37
|
+
*
|
|
38
|
+
* If a pre-existing `<!-- llui-mount-end -->` is found after the anchor
|
|
39
|
+
* (e.g. stale from an undisposed prior mount), the content between the
|
|
40
|
+
* anchor and that sentinel is swept and the sentinel is reused. Dev mode
|
|
41
|
+
* warns in that case.
|
|
42
|
+
*/
|
|
43
|
+
export declare function mountAtAnchor<S, M, E>(anchor: Comment, def: ComponentDef<S, M, E>, data?: undefined, options?: MountOptions): AppHandle;
|
|
44
|
+
export declare function mountAtAnchor<S, M, E, D>(anchor: Comment, def: ComponentDef<S, M, E, D>, data: D, options?: MountOptions): AppHandle;
|
|
45
|
+
/**
|
|
46
|
+
* Hydrate a component relative to a comment anchor rather than inside a
|
|
47
|
+
* container element. Analogous to `hydrateApp` — uses `serverState` as
|
|
48
|
+
* the initial state (not `init()`'s output) while preserving `init()`'s
|
|
49
|
+
* effects for post-mount dispatch.
|
|
50
|
+
*
|
|
51
|
+
* The DOM-handling path is identical to `mountAtAnchor`: reuses a
|
|
52
|
+
* pre-existing end sentinel when present, synthesizes one otherwise.
|
|
53
|
+
* Atomic-swaps the owned region whether or not server content is there
|
|
54
|
+
* to replace. No error for a missing end sentinel — the vike chain's
|
|
55
|
+
* outer `hydrateApp`'s `replaceChildren` wipes inner layers' sentinels,
|
|
56
|
+
* so inner-layer `hydrateAtAnchor` calls routinely find nothing to
|
|
57
|
+
* reuse, and that's normal.
|
|
58
|
+
*/
|
|
59
|
+
export declare function hydrateAtAnchor<S, M, E, D = void>(anchor: Comment, def: ComponentDef<S, M, E, D>, serverState: S, options?: MountOptions): AppHandle;
|
|
60
|
+
export declare function hydrateApp<S, M, E, D = void>(container: HTMLElement, def: ComponentDef<S, M, E, D>, serverState: S, options?: MountOptions): AppHandle;
|
|
27
61
|
//# sourceMappingURL=mount.d.ts.map
|
package/dist/mount.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA2CnE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KACxB;CACF;AAsBD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAA;CAC1B;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AACZ,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AAsJZ;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AACZ,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AAqGZ;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAC/C,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CA+EX;AAYD,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAC1C,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAqEX"}
|