@next-core/runtime 1.62.1 → 1.62.3

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.
@@ -20,7 +20,6 @@ var _memoizedLifeCycle = /*#__PURE__*/new WeakMap();
20
20
  var _observers = /*#__PURE__*/new WeakMap();
21
21
  var _mediaListener = /*#__PURE__*/new WeakMap();
22
22
  var _arbitraryLifeCycle = /*#__PURE__*/new WeakMap();
23
- var _memoized = /*#__PURE__*/new WeakMap();
24
23
  var _initialMenuRequestNode = /*#__PURE__*/new WeakMap();
25
24
  var _memoizedMenuRequestNodeMap = /*#__PURE__*/new WeakMap();
26
25
  var _incrementalRenderStates = /*#__PURE__*/new WeakMap();
@@ -54,7 +53,6 @@ export class RendererContext {
54
53
  _classPrivateFieldInitSpec(this, _observers, new Map());
55
54
  _classPrivateFieldInitSpec(this, _mediaListener, void 0);
56
55
  _classPrivateFieldInitSpec(this, _arbitraryLifeCycle, new Map());
57
- _classPrivateFieldInitSpec(this, _memoized, void 0);
58
56
  _classPrivateFieldInitSpec(this, _initialMenuRequestNode, void 0);
59
57
  _classPrivateFieldInitSpec(this, _memoizedMenuRequestNodeMap, new WeakMap());
60
58
  _classPrivateFieldInitSpec(this, _incrementalRenderStates, new Map());
@@ -189,69 +187,28 @@ export class RendererContext {
189
187
  _classPrivateFieldGet(_arbitraryLifeCycle, this).set(lifeCycle, new Set([fn]));
190
188
  }
191
189
  }
192
- memoize(slotId, keyPath, node, returnNode) {
193
- if (!_classPrivateFieldGet(_memoized, this)) {
194
- _classPrivateFieldSet(_memoized, this, new WeakMap());
195
- }
196
- const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
197
- let mem = _classPrivateFieldGet(_memoized, this).get(returnNode);
198
- if (!mem) {
199
- mem = new Map();
200
- _classPrivateFieldGet(_memoized, this).set(returnNode, mem);
201
- }
202
- mem.set(memKey, {
203
- node,
204
- last: getLastNode(node),
205
- lastNormal: getLastNormalNode(node),
206
- lastPortal: getLastPortalNode(node)
207
- });
208
- }
209
- reRender(slotId, keyPath, node, returnNode) {
210
- const memKey = [slotId !== null && slotId !== void 0 ? slotId : "", ...keyPath].join(".");
211
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
212
- const memoized = _classPrivateFieldGet(_memoized, this).get(returnNode).get(memKey);
213
- const {
214
- node: prevNode,
215
- last: prevLast,
216
- lastNormal: prevLastNormal,
217
- lastPortal: prevLastPortal
218
- } = memoized;
219
- let insertBeforeChild;
190
+ reRender(returnNode, node, oldNode) {
191
+ var _ref, _prevLastNormal$eleme, _findNextSiblingNode, _prevLastPortal$eleme, _findNextSiblingNode2;
192
+ const [prevLastNormal, prevLastPortal] = findLastChildNodes(oldNode);
193
+ const insertBeforeChild = (_ref = prevLastNormal ? (_prevLastNormal$eleme = prevLastNormal.element) === null || _prevLastNormal$eleme === void 0 ? void 0 : _prevLastNormal$eleme.nextSibling : (_findNextSiblingNode = findNextSiblingNode(oldNode, false)) === null || _findNextSiblingNode === void 0 ? void 0 : _findNextSiblingNode.element) !== null && _ref !== void 0 ? _ref : null;
220
194
  const insertPortalBeforeChildCandidates = [];
221
- if ((prevNode === null || prevNode === void 0 ? void 0 : prevNode.tag) === RenderTag.PLACEHOLDER) {
222
- var _getNextNormalNode$el, _getNextNormalNode, _getNextPortalNode;
223
- insertBeforeChild = (_getNextNormalNode$el = (_getNextNormalNode = getNextNormalNode(prevNode)) === null || _getNextNormalNode === void 0 ? void 0 : _getNextNormalNode.element) !== null && _getNextNormalNode$el !== void 0 ? _getNextNormalNode$el : null;
224
- // Todo(steve): handle portal bricks from useBrick.
225
- const nextSibling = (_getNextPortalNode = getNextPortalNode(prevNode)) === null || _getNextPortalNode === void 0 ? void 0 : _getNextPortalNode.element;
226
- if (nextSibling) {
227
- insertPortalBeforeChildCandidates.push(nextSibling);
228
- }
229
- } else {
230
- var _prevLastNormal$eleme, _prevLastNormal$eleme2, _prevLastPortal$eleme;
231
- insertBeforeChild = (_prevLastNormal$eleme = prevLastNormal === null || prevLastNormal === void 0 || (_prevLastNormal$eleme2 = prevLastNormal.element) === null || _prevLastNormal$eleme2 === void 0 ? void 0 : _prevLastNormal$eleme2.nextSibling) !== null && _prevLastNormal$eleme !== void 0 ? _prevLastNormal$eleme : null;
232
- let nextSibling = prevLastPortal === null || prevLastPortal === void 0 || (_prevLastPortal$eleme = prevLastPortal.element) === null || _prevLastPortal$eleme === void 0 ? void 0 : _prevLastPortal$eleme.nextSibling;
233
- while (nextSibling) {
234
- insertPortalBeforeChildCandidates.push(nextSibling);
235
- // Collect all portal bricks from useBrick, until found a normal portal
236
- // brick other than from useBrick.
237
- // Because useBrick could be removed during unmount.
238
- if (!(nextSibling instanceof HTMLElement && nextSibling.tagName === "DIV")) {
239
- break;
240
- }
241
- nextSibling = nextSibling.nextSibling;
195
+ let nextSibling = prevLastPortal ? prevLastPortal === null || prevLastPortal === void 0 || (_prevLastPortal$eleme = prevLastPortal.element) === null || _prevLastPortal$eleme === void 0 ? void 0 : _prevLastPortal$eleme.nextSibling : (_findNextSiblingNode2 = findNextSiblingNode(oldNode, true)) === null || _findNextSiblingNode2 === void 0 ? void 0 : _findNextSiblingNode2.element;
196
+ while (nextSibling) {
197
+ insertPortalBeforeChildCandidates.push(nextSibling);
198
+ // Collect all portal bricks from useBrick, until found a normal portal
199
+ // brick other than from useBrick.
200
+ // Because useBrick could be removed during unmount.
201
+ if (!(nextSibling instanceof HTMLElement && nextSibling.tagName === "DIV")) {
202
+ break;
242
203
  }
204
+ nextSibling = nextSibling.nextSibling;
243
205
  }
244
- const last = getLastNode(node);
245
- memoized.node = node;
246
- memoized.last = last;
247
- memoized.lastNormal = getLastNormalNode(node);
248
- memoized.lastPortal = getLastPortalNode(node);
249
206
 
250
207
  // Figure out the unchanged prev sibling and next sibling
251
208
  let prevSibling;
252
209
  let current = returnNode.child;
253
- while (current && current !== prevLast) {
254
- if (current.sibling === prevNode) {
210
+ while (current && current !== oldNode) {
211
+ if (current.sibling === oldNode) {
255
212
  prevSibling = current;
256
213
  break;
257
214
  }
@@ -273,9 +230,10 @@ export class RendererContext {
273
230
  current = current.sibling;
274
231
  }
275
232
 
276
- // Unmount previous bricks, including their descendants
277
- const removeBricks = getBrickRange(prevNode, prevLast);
233
+ // Unmount previous brick and abstract nodes, including their descendants
234
+ const [removeBricks, removeAbstracts] = getContainedBrickAndAbstractNodes(oldNode);
278
235
  _assertClassBrand(_RendererContext_brand, this, _unmountBricks).call(this, removeBricks);
236
+ _assertClassBrand(_RendererContext_brand, this, _unmountAbstracts).call(this, removeAbstracts);
279
237
  mountTree(renderRoot);
280
238
 
281
239
  // Connect back
@@ -284,9 +242,12 @@ export class RendererContext {
284
242
  } else {
285
243
  returnNode.child = node;
286
244
  }
287
- if (last) {
288
- last.sibling = prevLast === null || prevLast === void 0 ? void 0 : prevLast.sibling;
289
- }
245
+ node.sibling = oldNode.sibling;
246
+
247
+ // Clean up old node
248
+ delete oldNode.child;
249
+ delete oldNode.sibling;
250
+ delete oldNode.return;
290
251
 
291
252
  // Resume `return`
292
253
  current = node;
@@ -295,12 +256,13 @@ export class RendererContext {
295
256
  current = current.sibling;
296
257
  }
297
258
  if (fragment.hasChildNodes()) {
298
- if (returnNode.tag === RenderTag.ROOT) {
299
- var _returnNode$container;
300
- (_returnNode$container = returnNode.container) === null || _returnNode$container === void 0 || _returnNode$container.insertBefore(fragment, insertBeforeChild);
259
+ const entityReturnNode = getEntityReturnNode(returnNode);
260
+ if (entityReturnNode.tag === RenderTag.ROOT) {
261
+ var _entityReturnNode$con;
262
+ (_entityReturnNode$con = entityReturnNode.container) === null || _entityReturnNode$con === void 0 || _entityReturnNode$con.insertBefore(fragment, insertBeforeChild);
301
263
  } else {
302
- var _returnNode$element;
303
- (_returnNode$element = returnNode.element) === null || _returnNode$element === void 0 || _returnNode$element.insertBefore(fragment, insertBeforeChild);
264
+ var _entityReturnNode$ele;
265
+ (_entityReturnNode$ele = entityReturnNode.element) === null || _entityReturnNode$ele === void 0 || _entityReturnNode$ele.insertBefore(fragment, insertBeforeChild);
304
266
  }
305
267
  }
306
268
  if (portalFragment.hasChildNodes()) {
@@ -325,7 +287,7 @@ export class RendererContext {
325
287
  }
326
288
  portal.insertBefore(portalFragment, insertPortalBeforeChild);
327
289
  }
328
- const newBricks = getBrickRange(node, last);
290
+ const [newBricks] = getContainedBrickAndAbstractNodes(node);
329
291
  _assertClassBrand(_RendererContext_brand, this, _initializeRerenderBricks).call(this, newBricks);
330
292
  }
331
293
  dispose() {
@@ -343,7 +305,6 @@ export class RendererContext {
343
305
  mediaEventTarget.removeEventListener("change", _classPrivateFieldGet(_mediaListener, this));
344
306
  _classPrivateFieldSet(_mediaListener, this, undefined);
345
307
  }
346
- _classPrivateFieldSet(_memoized, this, undefined);
347
308
  _classPrivateFieldGet(_arbitraryLifeCycle, this).clear();
348
309
  _classPrivateFieldGet(_incrementalRenderStates, this).clear();
349
310
  _classPrivateFieldSet(_memoizedMenuRequestNodeMap, this, undefined);
@@ -425,6 +386,8 @@ export class RendererContext {
425
386
  _assertClassBrand(_RendererContext_brand, this, _dispatchGeneralLifeCycle).call(this, "onUnmount", new CustomEvent("unmount"));
426
387
  }
427
388
  }
389
+
390
+ /** Find the last normal and portal child nodes of the given node. */
428
391
  function _unmountBricks(bricks) {
429
392
  const lifeCycleTypes = [...commonLifeCycles, ...(this.scope === "page" ? pageOnlyLifeCycles : [])];
430
393
  const unmountList = [];
@@ -466,6 +429,12 @@ function _unmountBricks(bricks) {
466
429
  listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);
467
430
  }
468
431
  }
432
+ function _unmountAbstracts(abstracts) {
433
+ for (const item of abstracts) {
434
+ var _item$disposes;
435
+ (_item$disposes = item.disposes) === null || _item$disposes === void 0 || _item$disposes.forEach(dispose => dispose());
436
+ }
437
+ }
469
438
  function _initializeRerenderBricks(bricks) {
470
439
  const mountEvent = new CustomEvent("mount");
471
440
  for (const {
@@ -526,96 +495,128 @@ function _addObserver(brick, conf) {
526
495
  }
527
496
  list.push(observer);
528
497
  }
529
- function getLastNode(node) {
530
- let last = node;
531
- while ((_last = last) !== null && _last !== void 0 && _last.sibling) {
532
- var _last;
533
- last = last.sibling;
534
- }
535
- return last;
536
- }
537
- function getLastNormalNode(node) {
538
- return getSpecifiedNormalNode(node, false);
539
- }
540
- function getNextNormalNode(node) {
541
- return getSpecifiedNormalNode(node, true);
542
- }
543
- function getSpecifiedNormalNode(node, next) {
544
- let last;
498
+ function findLastChildNodes(node) {
499
+ let lastNormal;
500
+ let lastPortal;
545
501
  let current = node;
502
+ let level = 0;
546
503
  while (current) {
547
- if (current.tag === RenderTag.BRICK && !current.portal) {
548
- if (next) {
549
- return current;
504
+ if (current.tag === RenderTag.BRICK) {
505
+ if (current.portal) {
506
+ lastPortal = current;
507
+ } else {
508
+ lastNormal = current;
509
+ }
510
+ } else if (current.child && current.tag === RenderTag.ABSTRACT) {
511
+ // Only traverse down abstract nodes
512
+ current = current.child;
513
+ level++;
514
+ continue;
515
+ }
516
+ // Level > 0 means we are traversing down abstract nodes.
517
+ // But we do not traverse sibling nodes of the given node.
518
+ if (level <= 0) {
519
+ break;
520
+ }
521
+ if (current.sibling) {
522
+ current = current.sibling;
523
+ } else {
524
+ var _currentReturn;
525
+ // After traversing down abstract nodes, we need to traverse up to find the next sibling.
526
+ let currentReturn = current.return;
527
+ level--;
528
+ while (currentReturn) {
529
+ if (currentReturn.sibling) {
530
+ break;
531
+ }
532
+ currentReturn = currentReturn.return;
533
+ level--;
534
+ }
535
+ if (level <= 0) {
536
+ // Do not traverse up more than the given node.
537
+ break;
550
538
  }
551
- last = current;
539
+ current = (_currentReturn = currentReturn) === null || _currentReturn === void 0 ? void 0 : _currentReturn.sibling;
552
540
  }
553
- current = current.sibling;
554
541
  }
555
- return last;
542
+ return [lastNormal, lastPortal];
556
543
  }
557
- function getLastPortalNode(node) {
558
- return getSpecifiedPortalNode(node, false);
559
- }
560
- function getNextPortalNode(node) {
561
- return getSpecifiedPortalNode(node, true);
562
- }
563
- function getSpecifiedPortalNode(node, next) {
564
- let last;
544
+
545
+ /** Find the normal or portal sibling node next to the given node (in DOM). */
546
+ function findNextSiblingNode(node, portal) {
565
547
  let current = node;
566
548
  while (current) {
567
- if (current.tag === RenderTag.BRICK && current.portal) {
568
- if (next) {
569
- return current;
570
- }
571
- last = current;
549
+ if (current !== node && current.tag === RenderTag.BRICK && (portal ? current.portal : !current.portal)) {
550
+ return current;
572
551
  }
573
- if (current.child) {
552
+ if (current !== node && current.child && current.tag === RenderTag.ABSTRACT) {
553
+ // Traverse down sibling abstract nodes
574
554
  current = current.child;
575
555
  } else if (current.sibling) {
576
556
  current = current.sibling;
577
557
  } else {
578
- var _currentReturn;
558
+ var _currentReturn2;
559
+ // Traverse up abstract nodes to find the next sibling in DOM
579
560
  let currentReturn = current.return;
580
561
  while (currentReturn) {
562
+ if (currentReturn.tag !== RenderTag.ABSTRACT) {
563
+ // End the loop when encounter a non-abstract return node,
564
+ // it means we can't find the target sibling node.
565
+ return;
566
+ }
581
567
  if (currentReturn.sibling) {
582
568
  break;
583
569
  }
584
570
  currentReturn = currentReturn.return;
585
571
  }
586
- current = (_currentReturn = currentReturn) === null || _currentReturn === void 0 ? void 0 : _currentReturn.sibling;
572
+ current = (_currentReturn2 = currentReturn) === null || _currentReturn2 === void 0 ? void 0 : _currentReturn2.sibling;
587
573
  }
588
574
  }
589
- return last;
590
575
  }
591
- function getBrickRange(from, to) {
592
- const range = new Set();
593
- let current = from;
576
+ function getContainedBrickAndAbstractNodes(node) {
577
+ const bricks = new Set();
578
+ const abstracts = new Set();
579
+ let current = node;
594
580
  while (current) {
595
581
  if (current.tag === RenderTag.BRICK) {
596
- range.add(current);
582
+ bricks.add(current);
583
+ } else if (current.tag === RenderTag.ABSTRACT) {
584
+ abstracts.add(current);
597
585
  }
598
586
  if (current.child) {
599
587
  current = current.child;
600
- } else if (current === to) {
588
+ } else if (current === node) {
589
+ // End the loop when encounter the original node.
601
590
  break;
602
591
  } else if (current.sibling) {
603
592
  current = current.sibling;
604
593
  } else {
605
- var _currentReturn2;
594
+ var _currentReturn3;
606
595
  let currentReturn = current.return;
607
- while (currentReturn && currentReturn !== to) {
596
+ while (currentReturn) {
597
+ if (currentReturn === node) {
598
+ // End the loop when encounter the original node.
599
+ return [bricks, abstracts];
600
+ }
608
601
  if (currentReturn.sibling) {
609
602
  break;
610
603
  }
611
604
  currentReturn = currentReturn.return;
612
605
  }
613
- if (currentReturn === to) {
614
- break;
615
- }
616
- current = (_currentReturn2 = currentReturn) === null || _currentReturn2 === void 0 ? void 0 : _currentReturn2.sibling;
606
+ current = (_currentReturn3 = currentReturn) === null || _currentReturn3 === void 0 ? void 0 : _currentReturn3.sibling;
607
+ }
608
+ }
609
+ return [bricks, abstracts];
610
+ }
611
+ function getEntityReturnNode(node) {
612
+ let current = node;
613
+ while (current.tag === RenderTag.ABSTRACT) {
614
+ current = current.return;
615
+ // istanbul ignore next
616
+ if (!current) {
617
+ throw new Error("Cannot find render root node. This is a bug of Brick Next, please report it.");
617
618
  }
618
619
  }
619
- return range;
620
+ return current;
620
621
  }
621
622
  //# sourceMappingURL=RendererContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RendererContext.js","names":["isEmpty","remove","listenerFactory","getHistory","getReadOnlyProxy","mediaEventTarget","mountTree","RenderTag","unbindTemplateProxy","hooks","commonLifeCycles","pageOnlyLifeCycles","_routeHelper","WeakMap","_memoizedLifeCycle","_observers","_mediaListener","_arbitraryLifeCycle","_memoized","_initialMenuRequestNode","_memoizedMenuRequestNodeMap","_incrementalRenderStates","_RendererContext_brand","WeakSet","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","_classPrivateFieldSet","routeHelper","renderId","setInitialMenuRequestNode","menuRequestNode","memoizeMenuRequestNode","routes","_classPrivateFieldGet","set","getMenuRequests","menuRequests","current","request","push","child","_current","sibling","return","reMergeMenuRequestNodes","parentMenuRequestNode","arguments","length","undefined","node","get","previousSibling","mergeMenus","reBailout","output","bailout","reCatch","error","returnNode","catch","didPerformIncrementalRender","location","prevLocation","finalResult","shouldIgnoreRoutes","parentRoutes","callback","values","reverse","parentRoute","includes","result","slice","performIncrementalRender","slotConf","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","useResolves","console","registerArbitraryLifeCycle","fn","arbitraryCallbacks","add","Set","memoize","slotId","keyPath","memKey","join","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","reRender","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","insertPortalBeforeChildCandidates","tag","PLACEHOLDER","_getNextNormalNode$el","_getNextNormalNode","_getNextPortalNode","getNextNormalNode","element","nextSibling","getNextPortalNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","HTMLElement","tagName","prevSibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","ROOT","container","createPortal","removeBricks","getBrickRange","_assertClassBrand","_unmountBricks","call","hasChildNodes","_returnNode$container","insertBefore","_returnNode$element","_root","root","Error","portal","insertPortalBeforeChild","candidate","contains","newBricks","_initializeRerenderBricks","dispose","list","Object","observer","disconnect","clear","removeEventListener","dispatchBeforePageLoad","_dispatchGeneralLifeCycle","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","anchor","substring","initializeScrollIntoView","conf","_addObserver","initializeMediaChange","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","messageDispatcher","channel","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","_brick$disposes","observers","delete","$$tplStateStore","disposes","forEach","unmountEvent","mountEvent","type","process","env","NODE_ENV","_conf$threshold","threshold","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","observe","_last","getSpecifiedNormalNode","next","BRICK","getSpecifiedPortalNode","_currentReturn","currentReturn","from","to","range","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n RouteConf,\n ScrollIntoViewConf,\n SlotConfOfRoutes,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport type { Action, Location } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderNode,\n RenderReturnNode,\n RenderRoot,\n} from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\nimport type { RenderOutput } from \"./Renderer.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\ntype LocationChangeCallback = (\n location: Location<NextHistoryState>,\n prevLocation: Location<NextHistoryState>\n) => Promise<boolean>;\n\ninterface IncrementalRenderState {\n parentRoutes: RouteConf[];\n callback: LocationChangeCallback;\n}\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n routeHelper?: RouteHelper;\n renderId?: string;\n}\n\nexport interface RouteHelper {\n bailout: (output: RenderOutput) => true | undefined;\n mergeMenus: (menuRequests: Promise<StaticMenuConf>[]) => Promise<void>;\n /**\n * Will always resolve when the routing is not the current bootstrap.\n * Otherwise, will throw an error when not bailout.\n *\n * @returns undefined when bailout, or failed output otherwise\n */\n catch: (\n error: unknown,\n returnNode: RenderReturnNode,\n isCurrentBootstrap?: boolean,\n isReCatch?: boolean\n ) => Promise<\n | undefined\n | {\n failed: true;\n output: RenderOutput;\n }\n >;\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n public readonly renderId: string | undefined;\n\n #routeHelper: RouteHelper | undefined;\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n this.#routeHelper = options?.routeHelper;\n this.renderId = options?.renderId;\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #memoized?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderChildNode;\n last?: RenderChildNode;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n\n #initialMenuRequestNode?: MenuRequestNode;\n #memoizedMenuRequestNodeMap?: WeakMap<\n RouteConf[],\n MenuRequestNode | undefined\n > = new WeakMap<RouteConf[], MenuRequestNode | undefined>();\n\n setInitialMenuRequestNode(menuRequestNode: MenuRequestNode) {\n this.#initialMenuRequestNode = menuRequestNode;\n }\n\n memoizeMenuRequestNode(\n routes: RouteConf[],\n menuRequestNode: MenuRequestNode\n ) {\n this.#memoizedMenuRequestNodeMap!.set(routes, menuRequestNode);\n }\n\n getMenuRequests() {\n const menuRequests: Promise<StaticMenuConf>[] = [];\n let current = this.#initialMenuRequestNode;\n while (current) {\n if (current.request) {\n menuRequests.push(current.request);\n }\n if (current.child) {\n current = current.child;\n } else {\n while (current && !current.sibling) {\n current = current.return;\n }\n current = current?.sibling;\n }\n }\n return menuRequests;\n }\n\n async reMergeMenuRequestNodes(\n parentMenuRequestNode: MenuRequestNode,\n routes: RouteConf[],\n menuRequestNode: MenuRequestNode = {}\n ) {\n const node = this.#memoizedMenuRequestNodeMap!.get(routes);\n this.#memoizedMenuRequestNodeMap!.set(routes, menuRequestNode);\n\n let current = parentMenuRequestNode.child;\n let previousSibling: MenuRequestNode | undefined;\n\n while (current) {\n if (current === node) {\n break;\n }\n previousSibling = current;\n current = current.sibling;\n }\n\n if (previousSibling) {\n previousSibling.sibling = menuRequestNode;\n menuRequestNode.sibling = node?.sibling;\n } else {\n parentMenuRequestNode.child = menuRequestNode;\n }\n\n await this.#routeHelper!.mergeMenus(this.getMenuRequests());\n }\n\n reBailout(output: RenderOutput) {\n return this.#routeHelper!.bailout(output);\n }\n\n /**\n * Will always resolve when the routing is not the current bootstrap.\n * Otherwise, will throw an error when not bailout.\n *\n * @returns undefined when bailout, or failed output otherwise\n */\n reCatch(error: unknown, returnNode: RenderReturnNode) {\n return this.#routeHelper!.catch(error, returnNode, false, true);\n }\n\n #incrementalRenderStates = new Map<\n SlotConfOfRoutes,\n IncrementalRenderState\n >();\n\n async didPerformIncrementalRender(\n location: Location<NextHistoryState>,\n prevLocation: Location<NextHistoryState>\n ) {\n let finalResult = false;\n const shouldIgnoreRoutes: RouteConf[] = [];\n // Perform incremental rendering from inside out.\n // This allows nested incremental sub-routes.\n for (const { parentRoutes, callback } of [\n ...this.#incrementalRenderStates.values(),\n ].reverse()) {\n const parentRoute = parentRoutes[parentRoutes.length - 1];\n if (shouldIgnoreRoutes.includes(parentRoute)) {\n // Do not re-render parent routes if any of its children has performed incremental rendering.\n // In the meantime, allow sibling-routes to perform incremental rendering.\n continue;\n }\n const result = await callback(location, prevLocation);\n // When result is true, it means the incremental rendering is performed.\n if (result) {\n shouldIgnoreRoutes.push(...parentRoutes.slice(0, -1));\n }\n // Mark incremental rendering as performed at final if result is true or null.\n if (result !== false) {\n finalResult = true;\n }\n }\n return finalResult;\n }\n\n /**\n * When `callback` resolved to `true` which means incremental rendering is performed,\n * ignore normal rendering.\n */\n performIncrementalRender(\n slotConf: SlotConfOfRoutes,\n parentRoutes: RouteConf[],\n callback: LocationChangeCallback\n ) {\n // Override stale incremental render callbacks\n this.#incrementalRenderStates.set(slotConf, { parentRoutes, callback });\n }\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n // Also remove the element\n brick.element?.remove();\n // Dispose context listeners\n brick.disposes?.forEach((dispose) => dispose());\n delete brick.disposes;\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n memoize(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderChildNode | undefined,\n returnNode: RenderReturnNode\n ) {\n if (!this.#memoized) {\n this.#memoized = new WeakMap();\n }\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n let mem = this.#memoized.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoized.set(returnNode, mem);\n }\n\n mem.set(memKey, {\n node,\n last: getLastNode(node),\n lastNormal: getLastNormalNode(node),\n lastPortal: getLastPortalNode(node),\n });\n }\n\n reRender(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderChildNode | undefined,\n returnNode: RenderReturnNode\n ) {\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoized!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n let insertBeforeChild: ChildNode | null;\n const insertPortalBeforeChildCandidates: ChildNode[] = [];\n if (prevNode?.tag === RenderTag.PLACEHOLDER) {\n insertBeforeChild = getNextNormalNode(prevNode)?.element ?? null;\n // Todo(steve): handle portal bricks from useBrick.\n const nextSibling = getNextPortalNode(prevNode)?.element;\n if (nextSibling) {\n insertPortalBeforeChildCandidates.push(nextSibling);\n }\n } else {\n insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n let nextSibling = prevLastPortal?.element?.nextSibling;\n while (nextSibling) {\n insertPortalBeforeChildCandidates.push(nextSibling);\n // Collect all portal bricks from useBrick, until found a normal portal\n // brick other than from useBrick.\n // Because useBrick could be removed during unmount.\n if (\n !(nextSibling instanceof HTMLElement && nextSibling.tagName === \"DIV\")\n ) {\n break;\n }\n nextSibling = nextSibling.nextSibling;\n }\n }\n\n const last = getLastNode(node);\n memoized.node = node;\n memoized.last = last;\n memoized.lastNormal = getLastNormalNode(node);\n memoized.lastPortal = getLastPortalNode(node);\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderChildNode | undefined;\n let current = returnNode.child;\n while (current && current !== prevLast) {\n if (current.sibling === prevNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous bricks, including their descendants\n const removeBricks = getBrickRange(prevNode, prevLast);\n this.#unmountBricks(removeBricks);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n if (last) {\n last.sibling = prevLast?.sibling;\n }\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (fragment.hasChildNodes()) {\n if (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n }\n\n if (portalFragment.hasChildNodes()) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n // istanbul ignore next\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\n \"Cannot find render root node. This is a bug of Brick Next, please report it.\"\n );\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n let insertPortalBeforeChild: ChildNode | null = null;\n for (const candidate of insertPortalBeforeChildCandidates) {\n // Those candidates from useBrick could be removed during unmount.\n // So we need to check if they are still in the portal.\n if (portal.contains(candidate)) {\n insertPortalBeforeChild = candidate;\n break;\n }\n }\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const newBricks = getBrickRange(node, last);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#memoized = undefined;\n this.#arbitraryLifeCycle.clear();\n this.#incrementalRenderStates.clear();\n this.#memoizedMenuRequestNodeMap = undefined;\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\nfunction getLastNode(\n node: RenderChildNode | undefined\n): RenderChildNode | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderChildNode | undefined\n): RenderBrick | undefined {\n return getSpecifiedNormalNode(node, false);\n}\n\nfunction getNextNormalNode(\n node: RenderChildNode | undefined\n): RenderBrick | undefined {\n return getSpecifiedNormalNode(node, true);\n}\n\nfunction getSpecifiedNormalNode(\n node: RenderChildNode | undefined,\n next: boolean\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.tag === RenderTag.BRICK && !current.portal) {\n if (next) {\n return current;\n }\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderChildNode | undefined\n): RenderBrick | undefined {\n return getSpecifiedPortalNode(node, false);\n}\n\nfunction getNextPortalNode(\n node: RenderChildNode | undefined\n): RenderBrick | undefined {\n return getSpecifiedPortalNode(node, true);\n}\n\nfunction getSpecifiedPortalNode(\n node: RenderChildNode | undefined,\n next: boolean\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.tag === RenderTag.BRICK && current.portal) {\n if (next) {\n return current;\n }\n last = current;\n }\n if (current.child) {\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return last;\n}\n\nfunction getBrickRange(\n from: RenderChildNode | undefined,\n to: RenderChildNode | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n range.add(current);\n }\n if (current.child) {\n current = current.child;\n } else if (current === to) {\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn && currentReturn !== to) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n if (currentReturn === to) {\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"RendererContext.js","names":["isEmpty","remove","listenerFactory","getHistory","getReadOnlyProxy","mediaEventTarget","mountTree","RenderTag","unbindTemplateProxy","hooks","commonLifeCycles","pageOnlyLifeCycles","_routeHelper","WeakMap","_memoizedLifeCycle","_observers","_mediaListener","_arbitraryLifeCycle","_initialMenuRequestNode","_memoizedMenuRequestNodeMap","_incrementalRenderStates","_RendererContext_brand","WeakSet","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","_classPrivateFieldSet","routeHelper","renderId","setInitialMenuRequestNode","menuRequestNode","memoizeMenuRequestNode","routes","_classPrivateFieldGet","set","getMenuRequests","menuRequests","current","request","push","child","_current","sibling","return","reMergeMenuRequestNodes","parentMenuRequestNode","arguments","length","undefined","node","get","previousSibling","mergeMenus","reBailout","output","bailout","reCatch","error","returnNode","catch","didPerformIncrementalRender","location","prevLocation","finalResult","shouldIgnoreRoutes","parentRoutes","callback","values","reverse","parentRoute","includes","result","slice","performIncrementalRender","slotConf","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","useResolves","console","registerArbitraryLifeCycle","fn","arbitraryCallbacks","add","Set","reRender","oldNode","_ref","_prevLastNormal$eleme","_findNextSiblingNode","_prevLastPortal$eleme","_findNextSiblingNode2","prevLastNormal","prevLastPortal","findLastChildNodes","insertBeforeChild","element","nextSibling","findNextSiblingNode","insertPortalBeforeChildCandidates","HTMLElement","tagName","prevSibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","ROOT","container","createPortal","removeBricks","removeAbstracts","getContainedBrickAndAbstractNodes","_assertClassBrand","_unmountBricks","call","_unmountAbstracts","hasChildNodes","entityReturnNode","getEntityReturnNode","_entityReturnNode$con","insertBefore","_entityReturnNode$ele","_root","root","Error","portal","insertPortalBeforeChild","candidate","contains","newBricks","_initializeRerenderBricks","dispose","list","Object","observer","disconnect","clear","removeEventListener","dispatchBeforePageLoad","_dispatchGeneralLifeCycle","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","anchor","substring","initializeScrollIntoView","conf","_addObserver","initializeMediaChange","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","messageDispatcher","channel","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","_brick$disposes","observers","delete","$$tplStateStore","disposes","forEach","unmountEvent","abstracts","_item$disposes","mountEvent","type","process","env","NODE_ENV","_conf$threshold","threshold","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","observe","lastNormal","lastPortal","level","BRICK","ABSTRACT","_currentReturn","currentReturn","_currentReturn2","_currentReturn3"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n RouteConf,\n ScrollIntoViewConf,\n SlotConfOfRoutes,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport type { Action, Location } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type {\n MenuRequestNode,\n RenderAbstract,\n RenderBrick,\n RenderChildNode,\n RenderNode,\n RenderReturnNode,\n RenderRoot,\n} from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\nimport type { RenderOutput } from \"./Renderer.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\n};\n\ntype LocationChangeCallback = (\n location: Location<NextHistoryState>,\n prevLocation: Location<NextHistoryState>\n) => Promise<boolean>;\n\ninterface IncrementalRenderState {\n parentRoutes: RouteConf[];\n callback: LocationChangeCallback;\n}\n\nconst commonLifeCycles = [\n \"onMount\",\n \"onUnmount\",\n \"onMediaChange\",\n \"onScrollIntoView\",\n \"onMessage\",\n \"onMessageClose\",\n] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\n\nexport interface RendererContextOptions {\n unknownBricks?: \"silent\" | \"throw\";\n routeHelper?: RouteHelper;\n renderId?: string;\n}\n\nexport interface RouteHelper {\n bailout: (output: RenderOutput) => true | undefined;\n mergeMenus: (menuRequests: Promise<StaticMenuConf>[]) => Promise<void>;\n /**\n * Will always resolve when the routing is not the current bootstrap.\n * Otherwise, will throw an error when not bailout.\n *\n * @returns undefined when bailout, or failed output otherwise\n */\n catch: (\n error: unknown,\n returnNode: RenderReturnNode,\n isCurrentBootstrap?: boolean,\n isReCatch?: boolean\n ) => Promise<\n | undefined\n | {\n failed: true;\n output: RenderOutput;\n }\n >;\n}\n\nexport class RendererContext {\n /**\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n public readonly scope: \"page\" | \"fragment\";\n\n public readonly unknownBricks: \"silent\" | \"throw\";\n\n public readonly renderId: string | undefined;\n\n #routeHelper: RouteHelper | undefined;\n\n constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\n this.#routeHelper = options?.routeHelper;\n this.renderId = options?.renderId;\n }\n\n #memoizedLifeCycle: MemoizedLifeCycle<\n Required<\n Pick<\n BrickLifeCycle,\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onScrollIntoView\"\n | \"onMount\"\n | \"onUnmount\"\n | \"onMessage\"\n | \"onMessageClose\"\n >\n >\n > = {\n onBeforePageLoad: [],\n onPageLoad: [],\n onPageLeave: [],\n onBeforePageLeave: [],\n onAnchorLoad: [],\n onAnchorUnload: [],\n onMediaChange: [],\n onScrollIntoView: [],\n onMount: [],\n onUnmount: [],\n onMessage: [],\n onMessageClose: [],\n };\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\n\n #arbitraryLifeCycle = new Map<string, Set<() => void>>();\n\n #initialMenuRequestNode?: MenuRequestNode;\n #memoizedMenuRequestNodeMap?: WeakMap<\n RouteConf[],\n MenuRequestNode | undefined\n > = new WeakMap<RouteConf[], MenuRequestNode | undefined>();\n\n setInitialMenuRequestNode(menuRequestNode: MenuRequestNode) {\n this.#initialMenuRequestNode = menuRequestNode;\n }\n\n memoizeMenuRequestNode(\n routes: RouteConf[],\n menuRequestNode: MenuRequestNode\n ) {\n this.#memoizedMenuRequestNodeMap!.set(routes, menuRequestNode);\n }\n\n getMenuRequests() {\n const menuRequests: Promise<StaticMenuConf>[] = [];\n let current = this.#initialMenuRequestNode;\n while (current) {\n if (current.request) {\n menuRequests.push(current.request);\n }\n if (current.child) {\n current = current.child;\n } else {\n while (current && !current.sibling) {\n current = current.return;\n }\n current = current?.sibling;\n }\n }\n return menuRequests;\n }\n\n async reMergeMenuRequestNodes(\n parentMenuRequestNode: MenuRequestNode,\n routes: RouteConf[],\n menuRequestNode: MenuRequestNode = {}\n ) {\n const node = this.#memoizedMenuRequestNodeMap!.get(routes);\n this.#memoizedMenuRequestNodeMap!.set(routes, menuRequestNode);\n\n let current = parentMenuRequestNode.child;\n let previousSibling: MenuRequestNode | undefined;\n\n while (current) {\n if (current === node) {\n break;\n }\n previousSibling = current;\n current = current.sibling;\n }\n\n if (previousSibling) {\n previousSibling.sibling = menuRequestNode;\n menuRequestNode.sibling = node?.sibling;\n } else {\n parentMenuRequestNode.child = menuRequestNode;\n }\n\n await this.#routeHelper!.mergeMenus(this.getMenuRequests());\n }\n\n reBailout(output: RenderOutput) {\n return this.#routeHelper!.bailout(output);\n }\n\n /**\n * Will always resolve when the routing is not the current bootstrap.\n * Otherwise, will throw an error when not bailout.\n *\n * @returns undefined when bailout, or failed output otherwise\n */\n reCatch(error: unknown, returnNode: RenderReturnNode) {\n return this.#routeHelper!.catch(error, returnNode, false, true);\n }\n\n #incrementalRenderStates = new Map<\n SlotConfOfRoutes,\n IncrementalRenderState\n >();\n\n async didPerformIncrementalRender(\n location: Location<NextHistoryState>,\n prevLocation: Location<NextHistoryState>\n ) {\n let finalResult = false;\n const shouldIgnoreRoutes: RouteConf[] = [];\n // Perform incremental rendering from inside out.\n // This allows nested incremental sub-routes.\n for (const { parentRoutes, callback } of [\n ...this.#incrementalRenderStates.values(),\n ].reverse()) {\n const parentRoute = parentRoutes[parentRoutes.length - 1];\n if (shouldIgnoreRoutes.includes(parentRoute)) {\n // Do not re-render parent routes if any of its children has performed incremental rendering.\n // In the meantime, allow sibling-routes to perform incremental rendering.\n continue;\n }\n const result = await callback(location, prevLocation);\n // When result is true, it means the incremental rendering is performed.\n if (result) {\n shouldIgnoreRoutes.push(...parentRoutes.slice(0, -1));\n }\n // Mark incremental rendering as performed at final if result is true or null.\n if (result !== false) {\n finalResult = true;\n }\n }\n return finalResult;\n }\n\n /**\n * When `callback` resolved to `true` which means incremental rendering is performed,\n * ignore normal rendering.\n */\n performIncrementalRender(\n slotConf: SlotConfOfRoutes,\n parentRoutes: RouteConf[],\n callback: LocationChangeCallback\n ) {\n // Override stale incremental render callbacks\n this.#incrementalRenderStates.set(slotConf, { parentRoutes, callback });\n }\n\n registerBrickLifeCycle(\n brick: RenderBrick,\n lifeCycle: BrickLifeCycle | undefined\n ): void {\n if (!lifeCycle) {\n return;\n }\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n for (const key of lifeCycleTypes) {\n const handlers = (lifeCycle as BrickLifeCycle)[key as \"onPageLoad\"];\n if (handlers) {\n this.#memoizedLifeCycle[key as \"onPageLoad\"].push({\n brick,\n handlers: handlers as BrickEventHandler | BrickEventHandler[],\n });\n }\n }\n // istanbul ignore next\n if (!isEmpty((lifeCycle as { useResolves?: unknown }).useResolves)) {\n // eslint-disable-next-line no-console\n console.error(\"`lifeCycle.useResolves` is dropped in v3:\", lifeCycle);\n }\n }\n\n registerArbitraryLifeCycle(lifeCycle: string, fn: () => void): void {\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(lifeCycle);\n if (arbitraryCallbacks) {\n arbitraryCallbacks.add(fn);\n } else {\n this.#arbitraryLifeCycle.set(lifeCycle, new Set([fn]));\n }\n }\n\n #unmountBricks(bricks: Set<RenderBrick>): void {\n const lifeCycleTypes = [\n ...commonLifeCycles,\n ...(this.scope === \"page\" ? pageOnlyLifeCycles : []),\n ];\n const unmountList: {\n brick: RenderBrick;\n handlers: BrickEventHandler | BrickEventHandler[];\n }[] = [];\n\n // Clear life cycle handlers, record `onUnmount` at the same time\n for (const key of lifeCycleTypes) {\n const removed = remove(\n this.#memoizedLifeCycle[key as \"onPageLoad\"],\n (item) => bricks.has(item.brick)\n );\n if (key === \"onUnmount\") {\n unmountList.push(...removed);\n }\n }\n\n // Clear intersection observers\n for (const brick of bricks) {\n const observers = this.#observers.get(brick);\n if (observers?.length) {\n for (const observer of observers) {\n observer.disconnect();\n }\n observers.length = 0;\n this.#observers.delete(brick);\n }\n\n unbindTemplateProxy(brick);\n delete brick.element?.$$tplStateStore;\n // Also remove the element\n brick.element?.remove();\n // Dispose context listeners\n brick.disposes?.forEach((dispose) => dispose());\n delete brick.disposes;\n }\n\n // Dispatch unmount events\n const unmountEvent = new CustomEvent(\"unmount\");\n for (const { brick, handlers } of unmountList) {\n listenerFactory(handlers, brick.runtimeContext, brick)(unmountEvent);\n }\n }\n\n #unmountAbstracts(abstracts: Set<RenderAbstract>) {\n for (const item of abstracts) {\n item.disposes?.forEach((dispose) => dispose());\n }\n }\n\n #initializeRerenderBricks(bricks: Set<RenderBrick>): void {\n const mountEvent = new CustomEvent(\"mount\");\n for (const { brick, handlers } of this.#memoizedLifeCycle.onMount) {\n if (bricks.has(brick)) {\n listenerFactory(handlers, brick.runtimeContext, brick)(mountEvent);\n }\n }\n\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n if (bricks.has(brick)) {\n this.#addObserver(brick, conf);\n }\n }\n }\n\n reRender(\n returnNode: RenderReturnNode,\n node: RenderChildNode,\n oldNode: RenderChildNode\n ) {\n const [prevLastNormal, prevLastPortal] = findLastChildNodes(oldNode);\n const insertBeforeChild =\n (prevLastNormal\n ? prevLastNormal.element?.nextSibling\n : findNextSiblingNode(oldNode, false)?.element) ?? null;\n const insertPortalBeforeChildCandidates: ChildNode[] = [];\n let nextSibling = prevLastPortal\n ? prevLastPortal?.element?.nextSibling\n : findNextSiblingNode(oldNode, true)?.element;\n while (nextSibling) {\n insertPortalBeforeChildCandidates.push(nextSibling);\n // Collect all portal bricks from useBrick, until found a normal portal\n // brick other than from useBrick.\n // Because useBrick could be removed during unmount.\n if (\n !(nextSibling instanceof HTMLElement && nextSibling.tagName === \"DIV\")\n ) {\n break;\n }\n nextSibling = nextSibling.nextSibling;\n }\n\n // Figure out the unchanged prev sibling and next sibling\n let prevSibling: RenderChildNode | undefined;\n let current = returnNode.child;\n while (current && current !== oldNode) {\n if (current.sibling === oldNode) {\n prevSibling = current;\n break;\n }\n current = current.sibling;\n }\n\n const fragment = document.createDocumentFragment();\n const portalFragment = document.createDocumentFragment();\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: fragment,\n createPortal: portalFragment,\n child: node,\n };\n\n // Override `return`\n current = node;\n while (current) {\n current.return = renderRoot;\n current = current.sibling;\n }\n\n // Unmount previous brick and abstract nodes, including their descendants\n const [removeBricks, removeAbstracts] =\n getContainedBrickAndAbstractNodes(oldNode);\n this.#unmountBricks(removeBricks);\n this.#unmountAbstracts(removeAbstracts);\n\n mountTree(renderRoot);\n\n // Connect back\n if (prevSibling) {\n prevSibling.sibling = node;\n } else {\n returnNode.child = node;\n }\n node.sibling = oldNode.sibling;\n\n // Clean up old node\n delete oldNode.child;\n delete oldNode.sibling;\n delete (oldNode as Partial<RenderChildNode>).return;\n\n // Resume `return`\n current = node;\n while (current) {\n current.return = returnNode;\n current = current.sibling;\n }\n\n if (fragment.hasChildNodes()) {\n const entityReturnNode = getEntityReturnNode(returnNode);\n if (entityReturnNode.tag === RenderTag.ROOT) {\n entityReturnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n entityReturnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n }\n\n if (portalFragment.hasChildNodes()) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n // istanbul ignore next\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\n \"Cannot find render root node. This is a bug of Brick Next, please report it.\"\n );\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\n let insertPortalBeforeChild: ChildNode | null = null;\n for (const candidate of insertPortalBeforeChildCandidates) {\n // Those candidates from useBrick could be removed during unmount.\n // So we need to check if they are still in the portal.\n if (portal.contains(candidate)) {\n insertPortalBeforeChild = candidate;\n break;\n }\n }\n portal.insertBefore(portalFragment, insertPortalBeforeChild);\n }\n\n const [newBricks] = getContainedBrickAndAbstractNodes(node);\n this.#initializeRerenderBricks(newBricks);\n }\n\n dispose(): void {\n for (const list of Object.values(this.#memoizedLifeCycle)) {\n list.length = 0;\n }\n for (const list of this.#observers.values()) {\n for (const observer of list) {\n observer.disconnect();\n }\n list.length = 0;\n }\n this.#observers.clear();\n if (this.#mediaListener) {\n mediaEventTarget.removeEventListener(\"change\", this.#mediaListener);\n this.#mediaListener = undefined;\n }\n this.#arbitraryLifeCycle.clear();\n this.#incrementalRenderStates.clear();\n this.#memoizedMenuRequestNodeMap = undefined;\n }\n\n // Note: no `onScrollIntoView` and `onMessage`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMessageClose\"\n | \"onMount\"\n | \"onUnmount\",\n event: Event\n ): void {\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n this.scope === \"fragment\" &&\n pageOnlyLifeCycles.includes(type as \"onPageLoad\")\n ) {\n throw new Error(\n `\\`lifeCycle.${type}\\` cannot be used in ${this.scope}.\\nThis is a bug of Brick Next, please report it.`\n );\n }\n for (const { brick, handlers } of this.#memoizedLifeCycle[type]) {\n listenerFactory(handlers, brick.runtimeContext, brick)(event);\n }\n const arbitraryCallbacks = this.#arbitraryLifeCycle.get(type);\n if (arbitraryCallbacks) {\n for (const fn of arbitraryCallbacks) {\n fn();\n }\n }\n }\n\n dispatchBeforePageLoad(): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLoad\",\n new CustomEvent(\"page.beforeLoad\")\n );\n }\n\n dispatchPageLoad(): void {\n const event = new CustomEvent(\"page.load\");\n this.#dispatchGeneralLifeCycle(\"onPageLoad\", event);\n // Currently only for e2e testing\n window.dispatchEvent(event);\n }\n\n dispatchBeforePageLeave(detail: {\n location?: NextLocation;\n action?: Action;\n }): void {\n this.#dispatchGeneralLifeCycle(\n \"onBeforePageLeave\",\n new CustomEvent(\"page.beforeLeave\", { detail })\n );\n }\n\n dispatchPageLeave(): void {\n this.#dispatchGeneralLifeCycle(\n \"onPageLeave\",\n new CustomEvent(\"page.leave\")\n );\n }\n\n dispatchAnchorLoad(): void {\n const { hash } = getHistory().location;\n if (hash && hash !== \"#\") {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorLoad\",\n new CustomEvent(\"anchor.load\", {\n detail: {\n hash,\n anchor: hash.substring(1),\n },\n })\n );\n } else {\n this.#dispatchGeneralLifeCycle(\n \"onAnchorUnload\",\n new CustomEvent(\"anchor.unload\")\n );\n }\n }\n\n initializeScrollIntoView(): void {\n for (const { brick, handlers: conf } of this.#memoizedLifeCycle\n .onScrollIntoView) {\n this.#addObserver(brick, conf);\n }\n }\n\n #addObserver(brick: RenderBrick, conf: ScrollIntoViewConf) {\n const threshold = conf.threshold ?? 0.1;\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (entry.intersectionRatio >= threshold) {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"scroll.into.view\"));\n observer.disconnect();\n }\n }\n });\n },\n {\n threshold,\n }\n );\n observer.observe(brick.element!);\n let list = this.#observers.get(brick);\n if (!list) {\n list = [];\n this.#observers.set(brick, list);\n }\n list.push(observer);\n }\n\n initializeMediaChange(): void {\n this.#mediaListener = (event) => {\n this.#dispatchGeneralLifeCycle(\n \"onMediaChange\",\n new CustomEvent(\"media.change\", {\n detail: getReadOnlyProxy((event as CustomEvent<Media>).detail),\n })\n );\n };\n mediaEventTarget.addEventListener(\"change\", this.#mediaListener);\n }\n\n initializeMessageDispatcher(): void {\n for (const { brick, handlers: confList } of this.#memoizedLifeCycle\n .onMessage) {\n for (const conf of ([] as MessageConf[]).concat(confList)) {\n hooks?.messageDispatcher?.onMessage(conf.channel, (detail) => {\n listenerFactory(\n conf.handlers,\n brick.runtimeContext,\n brick\n )(new CustomEvent(\"message.push\", { detail }));\n });\n }\n }\n\n hooks?.messageDispatcher?.onClose(() => {\n this.#dispatchGeneralLifeCycle(\n \"onMessageClose\",\n new CustomEvent(\"message.close\")\n );\n });\n }\n\n dispatchOnMount(): void {\n this.#dispatchGeneralLifeCycle(\"onMount\", new CustomEvent(\"mount\"));\n }\n\n dispatchOnUnmount(): void {\n this.#dispatchGeneralLifeCycle(\"onUnmount\", new CustomEvent(\"unmount\"));\n }\n}\n\n/** Find the last normal and portal child nodes of the given node. */\nfunction findLastChildNodes(\n node: RenderChildNode | undefined\n): [lastNormal: RenderBrick | undefined, lastPortal: RenderBrick | undefined] {\n let lastNormal: RenderBrick | undefined;\n let lastPortal: RenderBrick | undefined;\n let current: RenderChildNode | undefined = node;\n let level = 0;\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n if (current.portal) {\n lastPortal = current;\n } else {\n lastNormal = current;\n }\n } else if (current.child && current.tag === RenderTag.ABSTRACT) {\n // Only traverse down abstract nodes\n current = current.child;\n level++;\n continue;\n }\n // Level > 0 means we are traversing down abstract nodes.\n // But we do not traverse sibling nodes of the given node.\n if (level <= 0) {\n break;\n }\n if (current.sibling) {\n current = current.sibling;\n } else {\n // After traversing down abstract nodes, we need to traverse up to find the next sibling.\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n level--;\n while (currentReturn) {\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n level--;\n }\n if (level <= 0) {\n // Do not traverse up more than the given node.\n break;\n }\n current = currentReturn?.sibling;\n }\n }\n return [lastNormal, lastPortal];\n}\n\n/** Find the normal or portal sibling node next to the given node (in DOM). */\nfunction findNextSiblingNode(\n node: RenderChildNode | undefined,\n portal: boolean\n): RenderBrick | undefined {\n let current = node;\n while (current) {\n if (\n current !== node &&\n current.tag === RenderTag.BRICK &&\n (portal ? current.portal : !current.portal)\n ) {\n return current;\n }\n if (\n current !== node &&\n current.child &&\n current.tag === RenderTag.ABSTRACT\n ) {\n // Traverse down sibling abstract nodes\n current = current.child;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n // Traverse up abstract nodes to find the next sibling in DOM\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn.tag !== RenderTag.ABSTRACT) {\n // End the loop when encounter a non-abstract return node,\n // it means we can't find the target sibling node.\n return;\n }\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n}\n\nfunction getContainedBrickAndAbstractNodes(\n node: RenderChildNode\n): [bricks: Set<RenderBrick>, abstracts: Set<RenderAbstract>] {\n const bricks = new Set<RenderBrick>();\n const abstracts = new Set<RenderAbstract>();\n let current: RenderNode | undefined = node;\n while (current) {\n if (current.tag === RenderTag.BRICK) {\n bricks.add(current);\n } else if (current.tag === RenderTag.ABSTRACT) {\n abstracts.add(current);\n }\n if (current.child) {\n current = current.child;\n } else if (current === node) {\n // End the loop when encounter the original node.\n break;\n } else if (current.sibling) {\n current = current.sibling;\n } else {\n let currentReturn: RenderReturnNode | null | undefined = current.return;\n while (currentReturn) {\n if (currentReturn === node) {\n // End the loop when encounter the original node.\n return [bricks, abstracts];\n }\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return [bricks, abstracts];\n}\n\nfunction getEntityReturnNode(node: RenderReturnNode): RenderRoot | RenderBrick {\n let current = node;\n while (current.tag === RenderTag.ABSTRACT) {\n current = current.return;\n // istanbul ignore next\n if (!current) {\n throw new Error(\n \"Cannot find render root node. This is a bug of Brick Next, please report it.\"\n );\n }\n }\n return current;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  export let RenderTag = /*#__PURE__*/function (RenderTag) {
2
2
  RenderTag[RenderTag["ROOT"] = 1] = "ROOT";
3
3
  RenderTag[RenderTag["BRICK"] = 2] = "BRICK";
4
- RenderTag[RenderTag["PLACEHOLDER"] = 3] = "PLACEHOLDER";
4
+ RenderTag[RenderTag["ABSTRACT"] = 3] = "ABSTRACT";
5
5
  return RenderTag;
6
6
  }({});
7
7
  //# sourceMappingURL=enums.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","names":["RenderTag"],"sources":["../../../src/internal/enums.ts"],"sourcesContent":["export enum RenderTag {\n ROOT = 1,\n BRICK = 2,\n PLACEHOLDER = 3,\n}\n"],"mappings":"AAAA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"enums.js","names":["RenderTag"],"sources":["../../../src/internal/enums.ts"],"sourcesContent":["export enum RenderTag {\n ROOT = 1,\n BRICK = 2,\n ABSTRACT = 3,\n}\n"],"mappings":"AAAA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA","ignoreList":[]}