@livetemplate/client 0.8.37 → 0.8.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,581 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ /**
37
+ * RangeDomApplier Tests
38
+ *
39
+ * Verifies per-op targeted DOM mutation for range diff ops:
40
+ * r (remove), u (update), i (insert after), a (append),
41
+ * p (prepend), o (reorder)
42
+ *
43
+ * The applier bypasses full HTML reconstruction + morphdom diff for
44
+ * the common case of single-row mutation on a large keyed range.
45
+ */
46
+ const range_dom_applier_1 = require("../state/range-dom-applier");
47
+ const tree_renderer_1 = require("../state/tree-renderer");
48
+ const logger_1 = require("../utils/logger");
49
+ const ROW_STATICS = ['<tr data-key="', '"><td>', "</td></tr>"];
50
+ const RANGE_PATH = "0";
51
+ function makeFixture(itemCount) {
52
+ const logger = (0, logger_1.createLogger)({ level: "silent" });
53
+ const renderer = new tree_renderer_1.TreeRenderer(logger);
54
+ const items = Array.from({ length: itemCount }, (_, i) => ({
55
+ _k: `row-${i}`,
56
+ "0": `row-${i}`,
57
+ "1": `value-${i}`,
58
+ }));
59
+ const result = renderer.applyUpdate({
60
+ s: ["<div><table><tbody>", "</tbody></table></div>"],
61
+ [RANGE_PATH]: {
62
+ d: items,
63
+ s: ROW_STATICS,
64
+ m: { idKey: "0" },
65
+ },
66
+ });
67
+ document.body.innerHTML = result.html;
68
+ const wrapper = document.body.firstElementChild;
69
+ const container = wrapper.querySelector("tbody");
70
+ const itemState = new Map();
71
+ for (const it of items) {
72
+ itemState.set(it._k, it);
73
+ }
74
+ const hookCalls = [];
75
+ const applier = new range_dom_applier_1.RangeDomApplier({
76
+ logger,
77
+ renderItem: (item, idx, statics, sm, sp) => renderer.renderRangeItem(item, idx, statics, sm, sp),
78
+ executeLifecycleHook: (el, hook) => {
79
+ hookCalls.push({ hook, key: el.getAttribute("data-key") });
80
+ },
81
+ itemLookup: (path, key) => {
82
+ if (path === RANGE_PATH)
83
+ return itemState.get(key);
84
+ return undefined;
85
+ },
86
+ });
87
+ // Mirror the production flow: callers run canApplyTargeted (which
88
+ // resolves and caches the container) before calling apply. Without
89
+ // this, a/p ops can't locate the container — they have no key in
90
+ // op[1] for findContainer to walk to.
91
+ if (items.length > 0) {
92
+ applier.findContainer(wrapper, RANGE_PATH, items[0]._k);
93
+ }
94
+ return {
95
+ wrapper,
96
+ container,
97
+ renderer,
98
+ applier,
99
+ hookCalls,
100
+ rangePath: RANGE_PATH,
101
+ statics: ROW_STATICS,
102
+ itemState,
103
+ };
104
+ }
105
+ function makeTargetedOp(ops) {
106
+ return {
107
+ rangePath: RANGE_PATH,
108
+ ops,
109
+ statics: ROW_STATICS,
110
+ idKey: "0",
111
+ };
112
+ }
113
+ describe("RangeDomApplier - container & predicate", () => {
114
+ it("findContainer locates the items' parent via data-key sample", () => {
115
+ const fx = makeFixture(5);
116
+ const c = fx.applier.findContainer(fx.wrapper, RANGE_PATH, "row-2");
117
+ expect(c).toBe(fx.container);
118
+ });
119
+ it("findContainer returns null when no sample key is provided and cache empty", () => {
120
+ const fx = makeFixture(5);
121
+ fx.applier.invalidate();
122
+ // No anyKnownItemKey → must NOT fall back to an unscoped wrapper walk
123
+ // (which could return a container belonging to a different keyed range).
124
+ expect(fx.applier.findContainer(fx.wrapper, RANGE_PATH)).toBeNull();
125
+ });
126
+ it("findContainer returns null when sample key doesn't match any element", () => {
127
+ const fx = makeFixture(5);
128
+ fx.applier.invalidate();
129
+ expect(fx.applier.findContainer(fx.wrapper, RANGE_PATH, "ghost-key")).toBeNull();
130
+ });
131
+ it("findContainer re-resolves when cached element detaches", () => {
132
+ const fx = makeFixture(5);
133
+ fx.applier.findContainer(fx.wrapper, RANGE_PATH, "row-2");
134
+ fx.container.remove();
135
+ expect(fx.applier.findContainer(fx.wrapper, RANGE_PATH, "row-2")).toBeNull();
136
+ });
137
+ it("canApplyTargeted ok for keyed range with no nested ranges", () => {
138
+ const fx = makeFixture(5);
139
+ const result = fx.applier.canApplyTargeted(fx.wrapper, { d: [...fx.itemState.values()], s: ROW_STATICS, m: { idKey: "0" } }, RANGE_PATH);
140
+ expect(result.ok).toBe(true);
141
+ expect(result.container).toBe(fx.container);
142
+ });
143
+ it("canApplyTargeted rejects when statics lack data-key", () => {
144
+ const fx = makeFixture(5);
145
+ const result = fx.applier.canApplyTargeted(fx.wrapper, {
146
+ d: [{ _k: "x", "0": "a" }],
147
+ s: ["<li>", "</li>"],
148
+ }, RANGE_PATH);
149
+ expect(result.ok).toBe(false);
150
+ expect(result.reason).toMatch(/data-key/);
151
+ });
152
+ it("canApplyTargeted rejects nested-range items", () => {
153
+ const fx = makeFixture(5);
154
+ const result = fx.applier.canApplyTargeted(fx.wrapper, {
155
+ d: [
156
+ {
157
+ _k: "row-0",
158
+ "0": "row-0",
159
+ "1": { d: [{ "0": "nested" }], s: ["<i>", "</i>"] },
160
+ },
161
+ ],
162
+ s: ROW_STATICS,
163
+ }, RANGE_PATH);
164
+ expect(result.ok).toBe(false);
165
+ expect(result.reason).toMatch(/nested-range/);
166
+ });
167
+ it("canApplyTargeted rejects when lvt-ignore is on the wrapper path", () => {
168
+ const fx = makeFixture(5);
169
+ const tableEl = fx.wrapper.querySelector("table");
170
+ tableEl.setAttribute("lvt-ignore", "");
171
+ const result = fx.applier.canApplyTargeted(fx.wrapper, { d: [...fx.itemState.values()], s: ROW_STATICS, m: { idKey: "0" } }, RANGE_PATH);
172
+ expect(result.ok).toBe(false);
173
+ expect(result.reason).toMatch(/lvt-ignore/);
174
+ });
175
+ it("canApplyTargeted rejects when lvt-ignore is on the wrapper element itself", () => {
176
+ const fx = makeFixture(5);
177
+ fx.wrapper.setAttribute("lvt-ignore", "");
178
+ const result = fx.applier.canApplyTargeted(fx.wrapper, { d: [...fx.itemState.values()], s: ROW_STATICS, m: { idKey: "0" } }, RANGE_PATH);
179
+ expect(result.ok).toBe(false);
180
+ expect(result.reason).toMatch(/lvt-ignore/);
181
+ });
182
+ });
183
+ describe("RangeDomApplier - r (remove)", () => {
184
+ it("removes a row by key", () => {
185
+ const fx = makeFixture(5);
186
+ expect(fx.container.querySelectorAll("tr").length).toBe(5);
187
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["r", "row-2"]]));
188
+ expect(fx.container.querySelectorAll("tr").length).toBe(4);
189
+ expect(fx.container.querySelector('[data-key="row-2"]')).toBeNull();
190
+ });
191
+ it("fires lvt-destroyed on the row before removal", () => {
192
+ const fx = makeFixture(3);
193
+ fx.container.querySelector('[data-key="row-1"]').setAttribute("lvt-destroyed", "/* hook */");
194
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["r", "row-1"]]));
195
+ expect(fx.hookCalls).toEqual([
196
+ { hook: "lvt-destroyed", key: "row-1" },
197
+ ]);
198
+ });
199
+ it("fires lvt-destroyed on descendants too", () => {
200
+ const fx = makeFixture(3);
201
+ const row = fx.container.querySelector('[data-key="row-0"]');
202
+ const td = row.querySelector("td");
203
+ td.setAttribute("lvt-destroyed", "/* hook */");
204
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["r", "row-0"]]));
205
+ expect(fx.hookCalls.some((c) => c.hook === "lvt-destroyed" && c.key === null)).toBe(true);
206
+ });
207
+ it("is a no-op when key is missing (logs debug)", () => {
208
+ const fx = makeFixture(3);
209
+ expect(() => fx.applier.apply(fx.wrapper, makeTargetedOp([["r", "missing-key"]]))).not.toThrow();
210
+ expect(fx.container.querySelectorAll("tr").length).toBe(3);
211
+ });
212
+ });
213
+ describe("RangeDomApplier - u (update)", () => {
214
+ it("updates a single row in place", () => {
215
+ const fx = makeFixture(3);
216
+ fx.itemState.set("row-1", {
217
+ _k: "row-1",
218
+ "0": "row-1",
219
+ "1": "updated-value",
220
+ });
221
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["u", "row-1", { "1": "updated-value" }]]));
222
+ const row = fx.container.querySelector('[data-key="row-1"]');
223
+ expect(row.textContent).toContain("updated-value");
224
+ expect(fx.container.querySelectorAll("tr").length).toBe(3);
225
+ });
226
+ it("fires lvt-destroyed/lvt-mounted when called without morphdomOptions", () => {
227
+ const fx = makeFixture(3);
228
+ const oldRow = fx.container.querySelector('[data-key="row-1"]');
229
+ oldRow.setAttribute("lvt-destroyed", "/* d */");
230
+ fx.itemState.set("row-1", {
231
+ _k: "row-1",
232
+ "0": "row-1",
233
+ "1": "v1-updated",
234
+ });
235
+ // Override renderItem to return HTML with lvt-mounted on the row.
236
+ const ctx = fx.applier.ctx;
237
+ const origRender = ctx.renderItem;
238
+ ctx.renderItem = () => '<tr data-key="row-1" lvt-mounted="/* m */"><td>v1-updated</td></tr>';
239
+ // Reset hookCalls and count manual onNodeAdded notifications.
240
+ fx.hookCalls.length = 0;
241
+ let nodeAddedCalls = 0;
242
+ ctx.onNodeAdded = () => {
243
+ nodeAddedCalls++;
244
+ };
245
+ // Call apply WITHOUT passing morphdomOptions (third arg).
246
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["u", "row-1", { "1": "v1-updated" }]]));
247
+ // Restore.
248
+ ctx.renderItem = origRender;
249
+ ctx.onNodeAdded = undefined;
250
+ // Both lifecycle hooks fired AND the host was notified about the new node.
251
+ expect(fx.hookCalls.find((c) => c.hook === "lvt-destroyed")).toBeDefined();
252
+ expect(fx.hookCalls.find((c) => c.hook === "lvt-mounted")).toBeDefined();
253
+ expect(nodeAddedCalls).toBe(1);
254
+ });
255
+ it("morphs the row with childrenOnly:false so root-element attrs are diffed", async () => {
256
+ // Row attribute (class) changes between renders. With childrenOnly:true
257
+ // morphdom would skip attr diffing on the row root. Verify we override
258
+ // and the class makes it onto the live element.
259
+ const morphdom = (await Promise.resolve().then(() => __importStar(require("morphdom")))).default;
260
+ const fx = makeFixture(2);
261
+ fx.itemState.set("row-0", {
262
+ _k: "row-0",
263
+ "0": "row-0",
264
+ "1": "v0",
265
+ });
266
+ const ctx = fx.applier.ctx;
267
+ const origRender = ctx.renderItem;
268
+ ctx.renderItem = () => '<tr data-key="row-0" class="highlighted"><td>v0</td></tr>';
269
+ const morphdomOpts = { childrenOnly: true }; // intentionally provoke the bug
270
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["u", "row-0", { "1": "v0" }]]), morphdomOpts);
271
+ ctx.renderItem = origRender;
272
+ // The row root's class attribute should now be "highlighted" — only
273
+ // possible if the applier overrode childrenOnly to false.
274
+ const row = fx.container.querySelector('[data-key="row-0"]');
275
+ expect(row.getAttribute("class")).toBe("highlighted");
276
+ // morphdom is referenced just to ensure the import path stays alive
277
+ void morphdom;
278
+ });
279
+ it("returns null from apply() when u op silently no-ops (item state missing)", () => {
280
+ // Stale state: item is in DOM but lookup returns nothing. Previously,
281
+ // applyUpdateRow would log + return silently and apply() would still
282
+ // mark the container as TARGETED_APPLIED → morphdom skips → live DOM
283
+ // stays out of sync forever. With the boolean-return fix, apply()
284
+ // returns null and updateDOM falls back to a full rebuild.
285
+ const fx = makeFixture(3);
286
+ fx.itemState.delete("row-1"); // simulate desync
287
+ const result = fx.applier.apply(fx.wrapper, makeTargetedOp([["u", "row-1", { "1": "v1-new" }]]));
288
+ expect(result).toBeNull();
289
+ });
290
+ it("returns null from apply() when i op anchor is missing", () => {
291
+ const fx = makeFixture(3);
292
+ const result = fx.applier.apply(fx.wrapper, makeTargetedOp([["i", "ghost-anchor", { _k: "row-new" }]]));
293
+ expect(result).toBeNull();
294
+ });
295
+ it("r op is idempotent (apply succeeds even when row already gone)", () => {
296
+ const fx = makeFixture(3);
297
+ fx.container.querySelector('[data-key="row-1"]').remove();
298
+ const result = fx.applier.apply(fx.wrapper, makeTargetedOp([["r", "row-1"]]));
299
+ expect(result).toBe(fx.container);
300
+ });
301
+ it("apply() returns null for unknown op type (forward-compat fail-safe)", () => {
302
+ const fx = makeFixture(3);
303
+ const result = fx.applier.apply(fx.wrapper, makeTargetedOp([["zz-future-op", "row-0"]]));
304
+ expect(result).toBeNull();
305
+ });
306
+ it("applyAppend bails entirely on partial render failure (no DOM mutation)", () => {
307
+ const fx = makeFixture(2);
308
+ const ctx = fx.applier.ctx;
309
+ const origRender = ctx.renderItem;
310
+ let calls = 0;
311
+ ctx.renderItem = (item, idx, statics) => {
312
+ calls++;
313
+ if (calls === 2)
314
+ return "<!--bad-->"; // parses to no element
315
+ return origRender(item, idx, statics);
316
+ };
317
+ const items = [
318
+ { _k: "row-a", "0": "row-a", "1": "va" },
319
+ { _k: "row-b", "0": "row-b", "1": "vb" },
320
+ ];
321
+ const result = fx.applier.apply(fx.wrapper, makeTargetedOp([["a", items]]));
322
+ ctx.renderItem = origRender;
323
+ // Without atomic insert, row-a would have been appended before row-b's
324
+ // failure → 3 children. With atomic insert: still 2.
325
+ expect(fx.container.querySelectorAll("tr").length).toBe(2);
326
+ expect(result).toBeNull();
327
+ });
328
+ it("applyPrepend bails entirely on partial render failure", () => {
329
+ const fx = makeFixture(2);
330
+ const ctx = fx.applier.ctx;
331
+ const origRender = ctx.renderItem;
332
+ let calls = 0;
333
+ ctx.renderItem = (item, idx, statics) => {
334
+ calls++;
335
+ if (calls === 2)
336
+ return "<!--bad-->";
337
+ return origRender(item, idx, statics);
338
+ };
339
+ const items = [
340
+ { _k: "row-x", "0": "row-x", "1": "vx" },
341
+ { _k: "row-y", "0": "row-y", "1": "vy" },
342
+ ];
343
+ const result = fx.applier.apply(fx.wrapper, makeTargetedOp([["p", items]]));
344
+ ctx.renderItem = origRender;
345
+ expect(fx.container.querySelectorAll("tr").length).toBe(2);
346
+ expect(result).toBeNull();
347
+ });
348
+ it("staticsContainKeyAttribute rejects longer-named attributes (data-keystone)", () => {
349
+ // Plain `s.includes('data-key=')` returned true here because
350
+ // `data-keystone=` contains `data-key=`-as-substring. The boundary
351
+ // check fixes it: `data-key\s*=` requires `=` after optional
352
+ // whitespace, so `data-keystone=` doesn't match.
353
+ const fx = makeFixture(1);
354
+ const result = fx.applier.canApplyTargeted(fx.wrapper, {
355
+ d: [{ _k: "x", "0": "value" }],
356
+ s: ['<tr data-keystone="', '"><td>', "</td></tr>"],
357
+ }, RANGE_PATH);
358
+ expect(result.ok).toBe(false);
359
+ });
360
+ it("staticsContainKeyAttribute accepts data-key as a real attribute", () => {
361
+ const fx = makeFixture(1);
362
+ const result = fx.applier.canApplyTargeted(fx.wrapper, {
363
+ d: [{ _k: "row-0", "0": "v" }],
364
+ s: ['<tr data-key="', '"><td>', "</td></tr>"],
365
+ }, RANGE_PATH);
366
+ expect(result.ok).toBe(true);
367
+ });
368
+ it("preserves focus on an input inside the updated row when morphdomOptions provided", () => {
369
+ const fx = makeFixture(3);
370
+ const formStatics = [
371
+ '<tr data-key="',
372
+ '"><td><input name="',
373
+ '" value="',
374
+ '" /></td></tr>',
375
+ ];
376
+ const items = [
377
+ { _k: "row-0", "0": "row-0", "1": "name0", "2": "v0" },
378
+ { _k: "row-1", "0": "row-1", "1": "name1", "2": "v1" },
379
+ ];
380
+ const reslt = fx.renderer.applyUpdate({
381
+ s: ["<div><table><tbody>", "</tbody></table></div>"],
382
+ [RANGE_PATH]: { d: items, s: formStatics, m: { idKey: "0" } },
383
+ });
384
+ document.body.innerHTML = reslt.html;
385
+ const wrapper = document.body.firstElementChild;
386
+ const container = wrapper.querySelector("tbody");
387
+ fx.applier.invalidate();
388
+ fx.itemState.clear();
389
+ for (const it of items)
390
+ fx.itemState.set(it._k, it);
391
+ fx.itemState.set("row-1", {
392
+ _k: "row-1",
393
+ "0": "row-1",
394
+ "1": "name1",
395
+ "2": "v1-updated",
396
+ });
397
+ const input = container.querySelector('[data-key="row-1"] input');
398
+ input.focus();
399
+ expect(document.activeElement).toBe(input);
400
+ const morphdomOpts = {
401
+ childrenOnly: false,
402
+ onBeforeElUpdated: (fromEl, toEl) => {
403
+ if (fromEl === input) {
404
+ for (const a of Array.from(toEl.attributes)) {
405
+ const attr = a;
406
+ if (attr.name !== "value") {
407
+ fromEl.setAttribute(attr.name, attr.value);
408
+ }
409
+ }
410
+ return false;
411
+ }
412
+ return true;
413
+ },
414
+ };
415
+ fx.applier.apply(wrapper, {
416
+ rangePath: RANGE_PATH,
417
+ ops: [["u", "row-1", { "2": "v1-updated" }]],
418
+ statics: formStatics,
419
+ idKey: "0",
420
+ }, morphdomOpts);
421
+ expect(document.activeElement).toBe(input);
422
+ });
423
+ });
424
+ describe("RangeDomApplier - i (insert after)", () => {
425
+ it("inserts a single new row after the anchor", () => {
426
+ const fx = makeFixture(3);
427
+ const newItem = { _k: "row-new", "0": "row-new", "1": "val-new" };
428
+ fx.itemState.set("row-new", newItem);
429
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["i", "row-1", newItem]]));
430
+ const rows = Array.from(fx.container.querySelectorAll("tr"));
431
+ expect(rows.length).toBe(4);
432
+ expect(rows[2].getAttribute("data-key")).toBe("row-new");
433
+ });
434
+ it("fires lvt-mounted on the inserted row + descendants", () => {
435
+ const fx = makeFixture(3);
436
+ const itemHtml = `<tr data-key="row-new" lvt-mounted="/* */"><td lvt-mounted="/* */">val-new</td></tr>`;
437
+ const ctx = fx.applier.ctx;
438
+ ctx.renderItem = () => itemHtml;
439
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["i", "row-1", { _k: "row-new" }]]));
440
+ expect(fx.hookCalls.filter((c) => c.hook === "lvt-mounted").length).toBe(2);
441
+ });
442
+ });
443
+ describe("RangeDomApplier - a (append)", () => {
444
+ it("appends rows to the end", () => {
445
+ const fx = makeFixture(2);
446
+ const items = [
447
+ { _k: "row-a", "0": "row-a", "1": "va" },
448
+ { _k: "row-b", "0": "row-b", "1": "vb" },
449
+ ];
450
+ items.forEach((it) => fx.itemState.set(it._k, it));
451
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["a", items]]));
452
+ const rows = Array.from(fx.container.querySelectorAll("tr"));
453
+ expect(rows.length).toBe(4);
454
+ expect(rows[2].getAttribute("data-key")).toBe("row-a");
455
+ expect(rows[3].getAttribute("data-key")).toBe("row-b");
456
+ });
457
+ });
458
+ describe("RangeDomApplier - p (prepend)", () => {
459
+ it("prepends rows to the start", () => {
460
+ const fx = makeFixture(2);
461
+ const items = [
462
+ { _k: "row-x", "0": "row-x", "1": "vx" },
463
+ { _k: "row-y", "0": "row-y", "1": "vy" },
464
+ ];
465
+ items.forEach((it) => fx.itemState.set(it._k, it));
466
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["p", items]]));
467
+ const rows = Array.from(fx.container.querySelectorAll("tr"));
468
+ expect(rows.length).toBe(4);
469
+ expect(rows[0].getAttribute("data-key")).toBe("row-x");
470
+ expect(rows[1].getAttribute("data-key")).toBe("row-y");
471
+ });
472
+ });
473
+ describe("RangeDomApplier - o (reorder)", () => {
474
+ it("reorders existing rows in-place via DocumentFragment", () => {
475
+ const fx = makeFixture(4);
476
+ const beforeRefs = Array.from(fx.container.children);
477
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["o", ["row-3", "row-1", "row-0", "row-2"]]]));
478
+ const after = Array.from(fx.container.children);
479
+ expect(after.map((r) => r.getAttribute("data-key"))).toEqual([
480
+ "row-3",
481
+ "row-1",
482
+ "row-0",
483
+ "row-2",
484
+ ]);
485
+ // Same element identities — no re-creation
486
+ expect(after.every((el) => beforeRefs.includes(el))).toBe(true);
487
+ });
488
+ it("ignores keys not present in the container", () => {
489
+ const fx = makeFixture(3);
490
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["o", ["row-2", "ghost", "row-0", "row-1"]]]));
491
+ const after = Array.from(fx.container.children).map((r) => r.getAttribute("data-key"));
492
+ expect(after).toEqual(["row-2", "row-0", "row-1"]);
493
+ });
494
+ it("fires lvt-destroyed on dropped children (partial newKeyOrder)", () => {
495
+ const fx = makeFixture(4);
496
+ // Tag two of the rows with lvt-destroyed so we can assert hooks fire.
497
+ fx.container
498
+ .querySelector('[data-key="row-1"]')
499
+ .setAttribute("lvt-destroyed", "/* hook1 */");
500
+ fx.container
501
+ .querySelector('[data-key="row-3"]')
502
+ .setAttribute("lvt-destroyed", "/* hook3 */");
503
+ fx.hookCalls.length = 0;
504
+ // newKeyOrder excludes row-1 and row-3 → both should be destroyed.
505
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["o", ["row-2", "row-0"]]]));
506
+ const destroyedKeys = fx.hookCalls
507
+ .filter((c) => c.hook === "lvt-destroyed")
508
+ .map((c) => c.key)
509
+ .sort();
510
+ expect(destroyedKeys).toEqual(["row-1", "row-3"]);
511
+ const after = Array.from(fx.container.children).map((r) => r.getAttribute("data-key"));
512
+ expect(after).toEqual(["row-2", "row-0"]);
513
+ });
514
+ });
515
+ describe("RangeDomApplier - skip mechanism with morphdom", () => {
516
+ it("morphdom preserves the live container's children when skip marker present", async () => {
517
+ const morphdom = (await Promise.resolve().then(() => __importStar(require("morphdom")))).default;
518
+ const fx = makeFixture(50);
519
+ // Snapshot row identities before any change
520
+ fx.itemState.delete("row-25");
521
+ fx.applier.apply(fx.wrapper, makeTargetedOp([["r", "row-25"]]));
522
+ fx.container.setAttribute(range_dom_applier_1.TARGETED_APPLIED_ATTR, "");
523
+ const liveRowsAfterApply = Array.from(fx.container.children);
524
+ expect(liveRowsAfterApply.length).toBe(49);
525
+ // Build a tempWrapper that mimics what reconstructFromTree+placeholder
526
+ // produces: the rebuilt container is empty + tagged with the skip marker.
527
+ const tempWrapper = document.createElement(fx.wrapper.tagName);
528
+ tempWrapper.innerHTML =
529
+ "<table><tbody data-lvt-targeted-skip=\"0\"></tbody></table>";
530
+ let beforeElUpdatedCallsInRange = 0;
531
+ morphdom(fx.wrapper, tempWrapper, {
532
+ childrenOnly: true,
533
+ getNodeKey: (node) => {
534
+ if (node.nodeType === 1) {
535
+ return (node.getAttribute("data-key") ||
536
+ node.getAttribute("data-lvt-key") ||
537
+ undefined);
538
+ }
539
+ },
540
+ onBeforeElUpdated: (fromEl, toEl) => {
541
+ if (toEl.nodeType === Node.ELEMENT_NODE &&
542
+ toEl.hasAttribute(range_dom_applier_1.TARGETED_SKIP_ATTR)) {
543
+ return false;
544
+ }
545
+ if (fromEl.nodeType === 1 &&
546
+ fromEl.hasAttribute("data-key")) {
547
+ beforeElUpdatedCallsInRange++;
548
+ }
549
+ return true;
550
+ },
551
+ });
552
+ // Children survived intact — morphdom did NOT remove them despite
553
+ // toEl having an empty container.
554
+ const liveRowsAfterMorph = Array.from(fx.container.children);
555
+ expect(liveRowsAfterMorph.length).toBe(49);
556
+ // Same element identities — no replacement, no rebuild.
557
+ expect(liveRowsAfterMorph.every((row, i) => row === liveRowsAfterApply[i])).toBe(true);
558
+ // Critical: morphdom never invoked onBeforeElUpdated on any of the
559
+ // 49 keyed rows — the subtree was short-circuited. This is the
560
+ // savings vs. the full-rebuild path (which would call it 49 times,
561
+ // each with attribute diffing + descendant walk).
562
+ expect(beforeElUpdatedCallsInRange).toBe(0);
563
+ });
564
+ });
565
+ describe("RangeDomApplier - cleanupMarkers", () => {
566
+ it("strips both data-lvt-targeted-applied and data-lvt-targeted-skip", () => {
567
+ const fx = makeFixture(2);
568
+ fx.container.setAttribute(range_dom_applier_1.TARGETED_APPLIED_ATTR, "");
569
+ fx.container.setAttribute(range_dom_applier_1.TARGETED_SKIP_ATTR, "8");
570
+ fx.applier.cleanupMarkers(fx.wrapper);
571
+ expect(fx.container.hasAttribute(range_dom_applier_1.TARGETED_APPLIED_ATTR)).toBe(false);
572
+ expect(fx.container.hasAttribute(range_dom_applier_1.TARGETED_SKIP_ATTR)).toBe(false);
573
+ });
574
+ it("strips marker even when set on the wrapper itself", () => {
575
+ const fx = makeFixture(1);
576
+ fx.wrapper.setAttribute(range_dom_applier_1.TARGETED_APPLIED_ATTR, "");
577
+ fx.applier.cleanupMarkers(fx.wrapper);
578
+ expect(fx.wrapper.hasAttribute(range_dom_applier_1.TARGETED_APPLIED_ATTR)).toBe(false);
579
+ });
580
+ });
581
+ //# sourceMappingURL=range-dom-applier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-dom-applier.test.js","sourceRoot":"","sources":["../../tests/range-dom-applier.test.ts"],"names":[],"mappings":"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"}