marko 6.0.0-next.3.26 → 6.0.0-next.3.28

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.
@@ -1,2 +1,3 @@
1
1
  export declare const RENDERER_REGISTER_ID: string;
2
2
  export declare const SET_SCOPE_REGISTER_ID: string;
3
+ export declare const RENDER_BODY_ID: string;
@@ -2,6 +2,8 @@ import type { Renderer as ClientRenderer } from "../dom/renderer";
2
2
  export type Falsy = undefined | null | false | 0 | "";
3
3
  export type CommentWalker = TreeWalker & Record<string, Comment>;
4
4
  export interface BranchScope extends Scope {
5
+ ___startNode: ChildNode;
6
+ ___endNode: ChildNode;
5
7
  ___parentBranch: BranchScope | undefined;
6
8
  ___branchDepth: number;
7
9
  ___destroyed: 1 | undefined;
@@ -12,8 +14,6 @@ export interface Scope {
12
14
  $global: Record<string, unknown>;
13
15
  _: Scope | undefined;
14
16
  ___args: unknown;
15
- ___startNode: Node & ChildNode;
16
- ___endNode: Node & ChildNode;
17
17
  ___pending: 1 | 0 | undefined;
18
18
  ___renderer: ClientRenderer | undefined;
19
19
  ___abortControllers: Record<string | number, AbortController | void> | undefined;
@@ -86,7 +86,7 @@ export interface TemplateInput extends Input {
86
86
  $global?: $Global;
87
87
  }
88
88
  export interface Template {
89
- mount(input: Input, reference: ParentNode & Node, position?: InsertPosition): TemplateInstance;
89
+ mount(input: Input, reference: Node, position?: InsertPosition): TemplateInstance;
90
90
  render(input?: Input): RenderResult;
91
91
  }
92
92
  export interface TemplateInstance {
package/dist/debug/dom.js CHANGED
@@ -174,64 +174,6 @@ function triggerMacroTask() {
174
174
  port2.postMessage(0);
175
175
  }
176
176
 
177
- // src/dom/scope.ts
178
- var pendingScopes = [];
179
- var debugID = 0;
180
- function createScope($global) {
181
- const scope = {
182
- ___pending: 1,
183
- $global
184
- };
185
- if (true) {
186
- scope.___debugId = "client-" + debugID++;
187
- }
188
- pendingScopes.push(scope);
189
- return scope;
190
- }
191
- function finishPendingScopes() {
192
- for (const scope of pendingScopes) {
193
- scope.___pending = 0;
194
- }
195
- pendingScopes = [];
196
- }
197
- var emptyBranch = createScope({});
198
- function getEmptyBranch(marker) {
199
- emptyBranch.___startNode = emptyBranch.___endNode = marker;
200
- return emptyBranch;
201
- }
202
- function destroyBranch(branch) {
203
- branch.___parentBranch?.___branchScopes?.delete(branch);
204
- destroyNestedBranches(branch);
205
- }
206
- function destroyNestedBranches(branch) {
207
- branch.___destroyed = 1;
208
- branch.___branchScopes?.forEach(destroyNestedBranches);
209
- branch.___abortScopes?.forEach((scope) => {
210
- for (const id in scope.___abortControllers) {
211
- scope.___abortControllers[id]?.abort();
212
- }
213
- });
214
- }
215
- function removeAndDestroyBranch(branch) {
216
- destroyBranch(branch);
217
- let current = branch.___startNode;
218
- const stop = branch.___endNode.nextSibling;
219
- while (current !== stop) {
220
- const next = current.nextSibling;
221
- current.remove();
222
- current = next;
223
- }
224
- }
225
- function insertBranchBefore(branch, parent, nextSibling) {
226
- let current = branch.___startNode;
227
- const stop = branch.___endNode.nextSibling;
228
- while (current !== stop) {
229
- const next = current.nextSibling;
230
- parent.insertBefore(current, nextSibling);
231
- current = next;
232
- }
233
- }
234
-
235
177
  // src/common/helpers.ts
236
178
  function classValue(value2) {
237
179
  return toDelimitedString(value2, " ", stringifyClassObject);
@@ -287,173 +229,6 @@ function normalizeDynamicRenderer(value2) {
287
229
  if (value2) return value2.content || value2.default || value2;
288
230
  }
289
231
 
290
- // src/dom/reconcile.ts
291
- var WRONG_POS = 2147483647;
292
- function reconcile(parent, oldBranches, newBranches, afterReference) {
293
- let oldStart = 0;
294
- let newStart = 0;
295
- let oldEnd = oldBranches.length - 1;
296
- let newEnd = newBranches.length - 1;
297
- let oldStartBranch = oldBranches[oldStart];
298
- let newStartBranch = newBranches[newStart];
299
- let oldEndBranch = oldBranches[oldEnd];
300
- let newEndBranch = newBranches[newEnd];
301
- let i;
302
- let j;
303
- let k;
304
- let nextSibling;
305
- let oldBranch;
306
- let newBranch;
307
- outer: {
308
- while (oldStartBranch === newStartBranch) {
309
- ++oldStart;
310
- ++newStart;
311
- if (oldStart > oldEnd || newStart > newEnd) {
312
- break outer;
313
- }
314
- oldStartBranch = oldBranches[oldStart];
315
- newStartBranch = newBranches[newStart];
316
- }
317
- while (oldEndBranch === newEndBranch) {
318
- --oldEnd;
319
- --newEnd;
320
- if (oldStart > oldEnd || newStart > newEnd) {
321
- break outer;
322
- }
323
- oldEndBranch = oldBranches[oldEnd];
324
- newEndBranch = newBranches[newEnd];
325
- }
326
- }
327
- if (oldStart > oldEnd) {
328
- if (newStart <= newEnd) {
329
- k = newEnd + 1;
330
- nextSibling = k < newBranches.length ? newBranches[k].___startNode : afterReference;
331
- do {
332
- insertBranchBefore(newBranches[newStart++], parent, nextSibling);
333
- } while (newStart <= newEnd);
334
- }
335
- } else if (newStart > newEnd) {
336
- do {
337
- removeAndDestroyBranch(oldBranches[oldStart++]);
338
- } while (oldStart <= oldEnd);
339
- } else {
340
- const oldLength = oldEnd - oldStart + 1;
341
- const newLength = newEnd - newStart + 1;
342
- const aNullable = oldBranches;
343
- const sources = new Array(newLength);
344
- for (i = 0; i < newLength; ++i) {
345
- sources[i] = -1;
346
- }
347
- let pos = 0;
348
- let synced = 0;
349
- const keyIndex = /* @__PURE__ */ new Map();
350
- for (j = newStart; j <= newEnd; ++j) {
351
- keyIndex.set(newBranches[j], j);
352
- }
353
- for (i = oldStart; i <= oldEnd && synced < newLength; ++i) {
354
- oldBranch = oldBranches[i];
355
- j = keyIndex.get(oldBranch);
356
- if (j !== void 0) {
357
- pos = pos > j ? WRONG_POS : j;
358
- ++synced;
359
- newBranch = newBranches[j];
360
- sources[j - newStart] = i;
361
- aNullable[i] = null;
362
- }
363
- }
364
- if (oldLength === oldBranches.length && synced === 0) {
365
- for (; newStart < newLength; ++newStart) {
366
- insertBranchBefore(newBranches[newStart], parent, afterReference);
367
- }
368
- for (; oldStart < oldLength; ++oldStart) {
369
- removeAndDestroyBranch(oldBranches[oldStart]);
370
- }
371
- } else {
372
- i = oldLength - synced;
373
- while (i > 0) {
374
- oldBranch = aNullable[oldStart++];
375
- if (oldBranch !== null) {
376
- removeAndDestroyBranch(oldBranch);
377
- i--;
378
- }
379
- }
380
- if (pos === WRONG_POS) {
381
- const seq = longestIncreasingSubsequence(sources);
382
- j = seq.length - 1;
383
- k = newBranches.length;
384
- for (i = newLength - 1; i >= 0; --i) {
385
- if (sources[i] === -1) {
386
- pos = i + newStart;
387
- newBranch = newBranches[pos++];
388
- nextSibling = pos < k ? newBranches[pos].___startNode : afterReference;
389
- insertBranchBefore(newBranch, parent, nextSibling);
390
- } else {
391
- if (j < 0 || i !== seq[j]) {
392
- pos = i + newStart;
393
- newBranch = newBranches[pos++];
394
- nextSibling = pos < k ? newBranches[pos].___startNode : afterReference;
395
- insertBranchBefore(newBranch, parent, nextSibling);
396
- } else {
397
- --j;
398
- }
399
- }
400
- }
401
- } else if (synced !== newLength) {
402
- k = newBranches.length;
403
- for (i = newLength - 1; i >= 0; --i) {
404
- if (sources[i] === -1) {
405
- pos = i + newStart;
406
- newBranch = newBranches[pos++];
407
- nextSibling = pos < k ? newBranches[pos].___startNode : afterReference;
408
- insertBranchBefore(newBranch, parent, nextSibling);
409
- }
410
- }
411
- }
412
- }
413
- }
414
- }
415
- function longestIncreasingSubsequence(a) {
416
- const p = a.slice();
417
- const result = [];
418
- result.push(0);
419
- let u;
420
- let v;
421
- for (let i = 0, il = a.length; i < il; ++i) {
422
- if (a[i] === -1) {
423
- continue;
424
- }
425
- const j = result[result.length - 1];
426
- if (a[j] < a[i]) {
427
- p[i] = j;
428
- result.push(i);
429
- continue;
430
- }
431
- u = 0;
432
- v = result.length - 1;
433
- while (u < v) {
434
- const c = (u + v) / 2 | 0;
435
- if (a[result[c]] < a[i]) {
436
- u = c + 1;
437
- } else {
438
- v = c;
439
- }
440
- }
441
- if (a[i] < a[result[u]]) {
442
- if (u > 0) {
443
- p[i] = result[u - 1];
444
- }
445
- result[u] = i;
446
- }
447
- }
448
- u = result.length;
449
- v = result[u - 1];
450
- while (u-- > 0) {
451
- result[u] = v;
452
- v = p[v];
453
- }
454
- return result;
455
- }
456
-
457
232
  // src/dom/event.ts
458
233
  var elementHandlersByEvent = /* @__PURE__ */ new Map();
459
234
  var defaultDelegator = createDelegator();
@@ -482,7 +257,7 @@ function createDelegator() {
482
257
  };
483
258
  }
484
259
  function handleDelegated(ev) {
485
- let target = ev.target;
260
+ let target = !rendering && ev.target;
486
261
  if (target) {
487
262
  const handlersByElement = elementHandlersByEvent.get(ev.type);
488
263
  handlersByElement.get(target)?.(ev, target);
@@ -555,15 +330,20 @@ var Render = class {
555
330
  const commentPrefix = data2.i;
556
331
  const commentPrefixLen = commentPrefix.length;
557
332
  const closestBranchMarkers = /* @__PURE__ */ new Map();
333
+ const visitNodes = new Set(visits);
334
+ let lastEndNode;
558
335
  data2.v = [];
559
- const branchEnd = (branchId, visit, curNode) => {
336
+ const branchEnd = (branchId, visit, reference) => {
560
337
  const branch = scopeLookup[branchId] ||= {};
561
- let endNode = curNode;
562
- while ((endNode = endNode.previousSibling).nodeType === 8) ;
563
- branch.___endNode = endNode;
338
+ let endNode = reference;
339
+ while (visitNodes.has(endNode = endNode.previousSibling)) ;
340
+ if (endNode === lastEndNode) {
341
+ endNode = reference.parentNode.insertBefore(new Text(), reference);
342
+ }
343
+ branch.___endNode = lastEndNode = endNode;
564
344
  branch.___startNode ||= endNode;
565
345
  for (const [markerScopeId, markerNode] of closestBranchMarkers) {
566
- if (branch.___startNode.compareDocumentPosition(markerNode) & 4 && curNode.compareDocumentPosition(markerNode) & 2) {
346
+ if (branch.___startNode.compareDocumentPosition(markerNode) & 4 && reference.compareDocumentPosition(markerNode) & 2) {
567
347
  parentBranchIds.set(markerScopeId, branchId);
568
348
  closestBranchMarkers.delete(markerScopeId);
569
349
  }
@@ -1009,7 +789,6 @@ function toValueProp(it) {
1009
789
  }
1010
790
 
1011
791
  // src/dom/parse-html.ts
1012
- var fallback = /* @__PURE__ */ new Text();
1013
792
  var parser = /* @__PURE__ */ document.createElement("template");
1014
793
  function parseHTML(html2) {
1015
794
  parser.innerHTML = html2;
@@ -1028,7 +807,7 @@ function parseHTMLOrSingleNode(html2) {
1028
807
  fragment.appendChild(content);
1029
808
  return fragment;
1030
809
  }
1031
- return fallback;
810
+ return new Text();
1032
811
  }
1033
812
 
1034
813
  // src/dom/dom.ts
@@ -1202,21 +981,17 @@ function attrsEvents(scope, nodeAccessor) {
1202
981
  on(el, name, events[name]);
1203
982
  }
1204
983
  }
1205
- function html(scope, value2, index) {
1206
- const firstChild = scope[index];
1207
- const lastChild = scope[index + "-"] || firstChild;
1208
- const parentNode = firstChild.parentNode;
1209
- const afterReference = lastChild.nextSibling;
1210
- const newContent = parseHTML(value2 || value2 === 0 ? value2 + "" : "<!>");
1211
- scope[index] = newContent.firstChild;
1212
- scope[index + "-" /* DynamicPlaceholderLastChild */] = newContent.lastChild;
1213
- parentNode.insertBefore(newContent, firstChild);
1214
- let current = firstChild;
1215
- while (current !== afterReference) {
1216
- const next = current.nextSibling;
1217
- current.remove();
1218
- current = next;
1219
- }
984
+ function html(scope, value2, accessor) {
985
+ const firstChild = scope[accessor];
986
+ const lastChild = scope[accessor + "-" /* DynamicPlaceholderLastChild */] || firstChild;
987
+ const newContent = parseHTML(
988
+ value2 || value2 === 0 ? value2 + "" : "<!>"
989
+ // TODO: is the comment needed
990
+ );
991
+ scope[accessor] = newContent.firstChild;
992
+ scope[accessor + "-" /* DynamicPlaceholderLastChild */] = newContent.lastChild;
993
+ firstChild.parentNode.insertBefore(newContent, firstChild);
994
+ removeChildNodes(firstChild, lastChild);
1220
995
  }
1221
996
  function props(scope, nodeIndex, index) {
1222
997
  const nextProps = scope[index];
@@ -1256,6 +1031,234 @@ function lifecycle(scope, index, thisObj) {
1256
1031
  ).onabort = () => thisObj.onDestroy?.();
1257
1032
  }
1258
1033
  }
1034
+ function removeChildNodes(startNode, endNode) {
1035
+ const stop = endNode.nextSibling;
1036
+ let current = startNode;
1037
+ while (current !== stop) {
1038
+ const next = current.nextSibling;
1039
+ current.remove();
1040
+ current = next;
1041
+ }
1042
+ }
1043
+
1044
+ // src/dom/scope.ts
1045
+ var pendingScopes = [];
1046
+ var debugID = 0;
1047
+ function createScope($global) {
1048
+ const scope = {
1049
+ ___pending: 1,
1050
+ $global
1051
+ };
1052
+ if (true) {
1053
+ scope.___debugId = "client-" + debugID++;
1054
+ }
1055
+ pendingScopes.push(scope);
1056
+ return scope;
1057
+ }
1058
+ function finishPendingScopes() {
1059
+ for (const scope of pendingScopes) {
1060
+ scope.___pending = 0;
1061
+ }
1062
+ pendingScopes = [];
1063
+ }
1064
+ var emptyBranch = createScope({});
1065
+ function getEmptyBranch(marker) {
1066
+ emptyBranch.___startNode = emptyBranch.___endNode = marker;
1067
+ return emptyBranch;
1068
+ }
1069
+ function destroyBranch(branch) {
1070
+ branch.___parentBranch?.___branchScopes?.delete(branch);
1071
+ destroyNestedBranches(branch);
1072
+ }
1073
+ function destroyNestedBranches(branch) {
1074
+ branch.___destroyed = 1;
1075
+ branch.___branchScopes?.forEach(destroyNestedBranches);
1076
+ branch.___abortScopes?.forEach((scope) => {
1077
+ for (const id in scope.___abortControllers) {
1078
+ scope.___abortControllers[id]?.abort();
1079
+ }
1080
+ });
1081
+ }
1082
+ function removeAndDestroyBranch(branch) {
1083
+ destroyBranch(branch);
1084
+ removeChildNodes(branch.___startNode, branch.___endNode);
1085
+ }
1086
+ function insertBranchBefore(branch, parentNode, nextSibling) {
1087
+ let current = branch.___startNode;
1088
+ const stop = branch.___endNode.nextSibling;
1089
+ while (current !== stop) {
1090
+ const next = current.nextSibling;
1091
+ parentNode.insertBefore(current, nextSibling);
1092
+ current = next;
1093
+ }
1094
+ }
1095
+
1096
+ // src/dom/reconcile.ts
1097
+ var WRONG_POS = 2147483647;
1098
+ function reconcile(parent, oldBranches, newBranches, afterReference) {
1099
+ let oldStart = 0;
1100
+ let newStart = 0;
1101
+ let oldEnd = oldBranches.length - 1;
1102
+ let newEnd = newBranches.length - 1;
1103
+ let oldStartBranch = oldBranches[oldStart];
1104
+ let newStartBranch = newBranches[newStart];
1105
+ let oldEndBranch = oldBranches[oldEnd];
1106
+ let newEndBranch = newBranches[newEnd];
1107
+ let i;
1108
+ let j;
1109
+ let k;
1110
+ let nextSibling;
1111
+ let oldBranch;
1112
+ let newBranch;
1113
+ outer: {
1114
+ while (oldStartBranch === newStartBranch) {
1115
+ ++oldStart;
1116
+ ++newStart;
1117
+ if (oldStart > oldEnd || newStart > newEnd) {
1118
+ break outer;
1119
+ }
1120
+ oldStartBranch = oldBranches[oldStart];
1121
+ newStartBranch = newBranches[newStart];
1122
+ }
1123
+ while (oldEndBranch === newEndBranch) {
1124
+ --oldEnd;
1125
+ --newEnd;
1126
+ if (oldStart > oldEnd || newStart > newEnd) {
1127
+ break outer;
1128
+ }
1129
+ oldEndBranch = oldBranches[oldEnd];
1130
+ newEndBranch = newBranches[newEnd];
1131
+ }
1132
+ }
1133
+ if (oldStart > oldEnd) {
1134
+ if (newStart <= newEnd) {
1135
+ k = newEnd + 1;
1136
+ nextSibling = k < newBranches.length ? newBranches[k].___startNode : afterReference;
1137
+ do {
1138
+ insertBranchBefore(newBranches[newStart++], parent, nextSibling);
1139
+ } while (newStart <= newEnd);
1140
+ }
1141
+ } else if (newStart > newEnd) {
1142
+ do {
1143
+ removeAndDestroyBranch(oldBranches[oldStart++]);
1144
+ } while (oldStart <= oldEnd);
1145
+ } else {
1146
+ const oldLength = oldEnd - oldStart + 1;
1147
+ const newLength = newEnd - newStart + 1;
1148
+ const aNullable = oldBranches;
1149
+ const sources = new Array(newLength);
1150
+ for (i = 0; i < newLength; ++i) {
1151
+ sources[i] = -1;
1152
+ }
1153
+ let pos = 0;
1154
+ let synced = 0;
1155
+ const keyIndex = /* @__PURE__ */ new Map();
1156
+ for (j = newStart; j <= newEnd; ++j) {
1157
+ keyIndex.set(newBranches[j], j);
1158
+ }
1159
+ for (i = oldStart; i <= oldEnd && synced < newLength; ++i) {
1160
+ oldBranch = oldBranches[i];
1161
+ j = keyIndex.get(oldBranch);
1162
+ if (j !== void 0) {
1163
+ pos = pos > j ? WRONG_POS : j;
1164
+ ++synced;
1165
+ newBranch = newBranches[j];
1166
+ sources[j - newStart] = i;
1167
+ aNullable[i] = null;
1168
+ }
1169
+ }
1170
+ if (oldLength === oldBranches.length && synced === 0) {
1171
+ for (; newStart < newLength; ++newStart) {
1172
+ insertBranchBefore(newBranches[newStart], parent, afterReference);
1173
+ }
1174
+ for (; oldStart < oldLength; ++oldStart) {
1175
+ removeAndDestroyBranch(oldBranches[oldStart]);
1176
+ }
1177
+ } else {
1178
+ i = oldLength - synced;
1179
+ while (i > 0) {
1180
+ oldBranch = aNullable[oldStart++];
1181
+ if (oldBranch !== null) {
1182
+ removeAndDestroyBranch(oldBranch);
1183
+ i--;
1184
+ }
1185
+ }
1186
+ if (pos === WRONG_POS) {
1187
+ const seq = longestIncreasingSubsequence(sources);
1188
+ j = seq.length - 1;
1189
+ k = newBranches.length;
1190
+ for (i = newLength - 1; i >= 0; --i) {
1191
+ if (sources[i] === -1) {
1192
+ pos = i + newStart;
1193
+ newBranch = newBranches[pos++];
1194
+ nextSibling = pos < k ? newBranches[pos].___startNode : afterReference;
1195
+ insertBranchBefore(newBranch, parent, nextSibling);
1196
+ } else {
1197
+ if (j < 0 || i !== seq[j]) {
1198
+ pos = i + newStart;
1199
+ newBranch = newBranches[pos++];
1200
+ nextSibling = pos < k ? newBranches[pos].___startNode : afterReference;
1201
+ insertBranchBefore(newBranch, parent, nextSibling);
1202
+ } else {
1203
+ --j;
1204
+ }
1205
+ }
1206
+ }
1207
+ } else if (synced !== newLength) {
1208
+ k = newBranches.length;
1209
+ for (i = newLength - 1; i >= 0; --i) {
1210
+ if (sources[i] === -1) {
1211
+ pos = i + newStart;
1212
+ newBranch = newBranches[pos++];
1213
+ nextSibling = pos < k ? newBranches[pos].___startNode : afterReference;
1214
+ insertBranchBefore(newBranch, parent, nextSibling);
1215
+ }
1216
+ }
1217
+ }
1218
+ }
1219
+ }
1220
+ }
1221
+ function longestIncreasingSubsequence(a) {
1222
+ const p = a.slice();
1223
+ const result = [];
1224
+ result.push(0);
1225
+ let u;
1226
+ let v;
1227
+ for (let i = 0, il = a.length; i < il; ++i) {
1228
+ if (a[i] === -1) {
1229
+ continue;
1230
+ }
1231
+ const j = result[result.length - 1];
1232
+ if (a[j] < a[i]) {
1233
+ p[i] = j;
1234
+ result.push(i);
1235
+ continue;
1236
+ }
1237
+ u = 0;
1238
+ v = result.length - 1;
1239
+ while (u < v) {
1240
+ const c = (u + v) / 2 | 0;
1241
+ if (a[result[c]] < a[i]) {
1242
+ u = c + 1;
1243
+ } else {
1244
+ v = c;
1245
+ }
1246
+ }
1247
+ if (a[i] < a[result[u]]) {
1248
+ if (u > 0) {
1249
+ p[i] = result[u - 1];
1250
+ }
1251
+ result[u] = i;
1252
+ }
1253
+ }
1254
+ u = result.length;
1255
+ v = result[u - 1];
1256
+ while (u-- > 0) {
1257
+ result[u] = v;
1258
+ v = p[v];
1259
+ }
1260
+ return result;
1261
+ }
1259
1262
 
1260
1263
  // src/dom/walker.ts
1261
1264
  var walker = /* @__PURE__ */ document.createTreeWalker(document);
@@ -1264,9 +1267,9 @@ function trimWalkString(walkString) {
1264
1267
  while (walkString.charCodeAt(--end) > 47 /* BeginChild */) ;
1265
1268
  return walkString.slice(0, end + 1);
1266
1269
  }
1267
- function walk(startNode, walkCodes, scope) {
1270
+ function walk(startNode, walkCodes, branch) {
1268
1271
  walker.currentNode = startNode;
1269
- walkInternal(walkCodes, scope, 0);
1272
+ walkInternal(walkCodes, branch, 0);
1270
1273
  walker.currentNode = document;
1271
1274
  }
1272
1275
  function walkInternal(walkCodes, scope, currentWalkIndex) {
@@ -1297,7 +1300,6 @@ function walkInternal(walkCodes, scope, currentWalkIndex) {
1297
1300
  }
1298
1301
  } else if (value2 === 47 /* BeginChild */) {
1299
1302
  const childScope = scope[true ? getDebugKey(currentScopeIndex++, "#childScope") : currentScopeIndex++] = createScope(scope.$global);
1300
- childScope.___startNode = walker.currentNode;
1301
1303
  childScope.___closestBranch = scope.___closestBranch;
1302
1304
  currentWalkIndex = walkInternal(walkCodes, childScope, currentWalkIndex);
1303
1305
  } else if (value2 === 38 /* EndChild */) {
@@ -1476,8 +1478,8 @@ function setConditionalRenderer(scope, nodeAccessor, newRenderer) {
1476
1478
  const newBranch = newRenderer ? createBranchScopeWithTagNameOrRenderer(newRenderer, scope.$global, scope) : getEmptyBranch(scope[nodeAccessor]);
1477
1479
  insertBranchBefore(
1478
1480
  newBranch,
1479
- prevBranch.___startNode.parentNode,
1480
- prevBranch.___startNode
1481
+ prevBranch.___endNode.parentNode,
1482
+ prevBranch.___endNode.nextSibling
1481
1483
  );
1482
1484
  removeAndDestroyBranch(prevBranch);
1483
1485
  scope[nodeAccessor + "!" /* ConditionalScope */] = newRenderer && newBranch;
@@ -1941,16 +1943,18 @@ function abort(ctrl) {
1941
1943
  var prefix = true ? "$compat_" : "$C_";
1942
1944
  var RENDERER_REGISTER_ID = prefix + (true ? "renderer" : "r");
1943
1945
  var SET_SCOPE_REGISTER_ID = prefix + (true ? "setScope" : "s");
1946
+ var RENDER_BODY_ID = prefix + (true ? "renderBody" : "b");
1944
1947
 
1945
1948
  // src/dom/compat.ts
1946
- var classIdToScope = /* @__PURE__ */ new Map();
1949
+ var classIdToBranch = /* @__PURE__ */ new Map();
1947
1950
  var compat = {
1948
1951
  patchConditionals,
1949
1952
  queueEffect,
1950
- init() {
1951
- register(SET_SCOPE_REGISTER_ID, (scope) => {
1952
- classIdToScope.set(scope.m5c, scope);
1953
+ init(warp10Noop) {
1954
+ register(SET_SCOPE_REGISTER_ID, (branch) => {
1955
+ classIdToBranch.set(branch.m5c, branch);
1953
1956
  });
1957
+ register(RENDER_BODY_ID, warp10Noop);
1954
1958
  },
1955
1959
  registerRenderer(fn) {
1956
1960
  register(RENDERER_REGISTER_ID, fn);
@@ -1961,12 +1965,12 @@ var compat = {
1961
1965
  isRenderer(renderer) {
1962
1966
  return renderer.___clone !== void 0;
1963
1967
  },
1964
- getStartNode(scope) {
1965
- return scope.___startNode;
1968
+ getStartNode(branch) {
1969
+ return branch.___startNode;
1966
1970
  },
1967
- setScopeNodes(scope, startNode, endNode) {
1968
- scope.___startNode = startNode;
1969
- scope.___endNode = endNode;
1971
+ setScopeNodes(branch, startNode, endNode) {
1972
+ branch.___startNode = startNode;
1973
+ branch.___endNode = endNode;
1970
1974
  },
1971
1975
  runComponentEffects() {
1972
1976
  runEffects(this.effects);
@@ -1994,12 +1998,12 @@ var compat = {
1994
1998
  return renderer;
1995
1999
  },
1996
2000
  render(out, component, renderer, args) {
1997
- let scope = component.scope;
1998
- if (!scope) {
1999
- scope = classIdToScope.get(component.id);
2000
- if (scope) {
2001
- component.scope = scope;
2002
- classIdToScope.delete(component.id);
2001
+ let branch = component.scope;
2002
+ if (!branch) {
2003
+ branch = classIdToBranch.get(component.id);
2004
+ if (branch) {
2005
+ component.scope = branch;
2006
+ classIdToBranch.delete(component.id);
2003
2007
  }
2004
2008
  }
2005
2009
  const applyArgs = renderer.___args || noop;
@@ -2012,18 +2016,18 @@ var compat = {
2012
2016
  }
2013
2017
  }
2014
2018
  component.effects = prepareEffects(() => {
2015
- if (!scope) {
2016
- scope = component.scope = createScope(out.global);
2017
- scope._ = renderer.___owner;
2018
- initBranch(renderer, scope);
2019
+ if (!branch) {
2020
+ branch = component.scope = createScope(out.global);
2021
+ branch._ = renderer.___owner;
2022
+ initBranch(renderer, branch);
2019
2023
  } else {
2020
- applyArgs(scope, MARK);
2024
+ applyArgs(branch, MARK);
2021
2025
  existing = true;
2022
2026
  }
2023
- applyArgs(scope, args);
2027
+ applyArgs(branch, args);
2024
2028
  });
2025
2029
  if (!existing) {
2026
- return scope.___startNode === scope.___endNode ? scope.___startNode : scope.___startNode.parentNode;
2030
+ return branch.___startNode === branch.___endNode ? branch.___startNode : branch.___startNode.parentNode;
2027
2031
  }
2028
2032
  }
2029
2033
  };