@next-core/runtime 1.62.1 → 1.62.2

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
  }
@@ -274,7 +231,7 @@ export class RendererContext {
274
231
  }
275
232
 
276
233
  // Unmount previous bricks, including their descendants
277
- const removeBricks = getBrickRange(prevNode, prevLast);
234
+ const removeBricks = getContainedBricks(oldNode);
278
235
  _assertClassBrand(_RendererContext_brand, this, _unmountBricks).call(this, removeBricks);
279
236
  mountTree(renderRoot);
280
237
 
@@ -284,9 +241,7 @@ export class RendererContext {
284
241
  } else {
285
242
  returnNode.child = node;
286
243
  }
287
- if (last) {
288
- last.sibling = prevLast === null || prevLast === void 0 ? void 0 : prevLast.sibling;
289
- }
244
+ node.sibling = oldNode.sibling;
290
245
 
291
246
  // Resume `return`
292
247
  current = node;
@@ -295,12 +250,13 @@ export class RendererContext {
295
250
  current = current.sibling;
296
251
  }
297
252
  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);
253
+ const entityReturnNode = getEntityReturnNode(returnNode);
254
+ if (entityReturnNode.tag === RenderTag.ROOT) {
255
+ var _entityReturnNode$con;
256
+ (_entityReturnNode$con = entityReturnNode.container) === null || _entityReturnNode$con === void 0 || _entityReturnNode$con.insertBefore(fragment, insertBeforeChild);
301
257
  } else {
302
- var _returnNode$element;
303
- (_returnNode$element = returnNode.element) === null || _returnNode$element === void 0 || _returnNode$element.insertBefore(fragment, insertBeforeChild);
258
+ var _entityReturnNode$ele;
259
+ (_entityReturnNode$ele = entityReturnNode.element) === null || _entityReturnNode$ele === void 0 || _entityReturnNode$ele.insertBefore(fragment, insertBeforeChild);
304
260
  }
305
261
  }
306
262
  if (portalFragment.hasChildNodes()) {
@@ -325,7 +281,7 @@ export class RendererContext {
325
281
  }
326
282
  portal.insertBefore(portalFragment, insertPortalBeforeChild);
327
283
  }
328
- const newBricks = getBrickRange(node, last);
284
+ const newBricks = getContainedBricks(node);
329
285
  _assertClassBrand(_RendererContext_brand, this, _initializeRerenderBricks).call(this, newBricks);
330
286
  }
331
287
  dispose() {
@@ -343,7 +299,6 @@ export class RendererContext {
343
299
  mediaEventTarget.removeEventListener("change", _classPrivateFieldGet(_mediaListener, this));
344
300
  _classPrivateFieldSet(_mediaListener, this, undefined);
345
301
  }
346
- _classPrivateFieldSet(_memoized, this, undefined);
347
302
  _classPrivateFieldGet(_arbitraryLifeCycle, this).clear();
348
303
  _classPrivateFieldGet(_incrementalRenderStates, this).clear();
349
304
  _classPrivateFieldSet(_memoizedMenuRequestNodeMap, this, undefined);
@@ -425,6 +380,8 @@ export class RendererContext {
425
380
  _assertClassBrand(_RendererContext_brand, this, _dispatchGeneralLifeCycle).call(this, "onUnmount", new CustomEvent("unmount"));
426
381
  }
427
382
  }
383
+
384
+ /** Find the last normal and portal child nodes of the given node. */
428
385
  function _unmountBricks(bricks) {
429
386
  const lifeCycleTypes = [...commonLifeCycles, ...(this.scope === "page" ? pageOnlyLifeCycles : [])];
430
387
  const unmountList = [];
@@ -526,96 +483,121 @@ function _addObserver(brick, conf) {
526
483
  }
527
484
  list.push(observer);
528
485
  }
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;
486
+ function findLastChildNodes(node) {
487
+ let lastNormal;
488
+ let lastPortal;
545
489
  let current = node;
490
+ let level = 0;
546
491
  while (current) {
547
- if (current.tag === RenderTag.BRICK && !current.portal) {
548
- if (next) {
549
- return current;
492
+ if (current.tag === RenderTag.BRICK) {
493
+ if (current.portal) {
494
+ lastPortal = current;
495
+ } else {
496
+ lastNormal = current;
550
497
  }
551
- last = current;
498
+ } else if (current.child && current.tag === RenderTag.ABSTRACT) {
499
+ // Only traverse down abstract nodes
500
+ current = current.child;
501
+ level++;
502
+ continue;
503
+ }
504
+ // Level > 0 means we are traversing down abstract nodes.
505
+ // But we do not traverse sibling nodes of the given node.
506
+ if (level <= 0) {
507
+ break;
508
+ }
509
+ if (current.sibling) {
510
+ current = current.sibling;
511
+ } else {
512
+ var _currentReturn;
513
+ // After traversing down abstract nodes, we need to traverse up to find the next sibling.
514
+ let currentReturn = current.return;
515
+ level--;
516
+ while (currentReturn) {
517
+ if (currentReturn.sibling) {
518
+ break;
519
+ }
520
+ currentReturn = currentReturn.return;
521
+ level--;
522
+ }
523
+ if (level <= 0) {
524
+ // Do not traverse up more than the given node.
525
+ break;
526
+ }
527
+ current = (_currentReturn = currentReturn) === null || _currentReturn === void 0 ? void 0 : _currentReturn.sibling;
552
528
  }
553
- current = current.sibling;
554
529
  }
555
- return last;
530
+ return [lastNormal, lastPortal];
556
531
  }
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;
532
+
533
+ /** Find the normal or portal sibling node next to the given node (in DOM). */
534
+ function findNextSiblingNode(node, portal) {
565
535
  let current = node;
566
536
  while (current) {
567
- if (current.tag === RenderTag.BRICK && current.portal) {
568
- if (next) {
569
- return current;
570
- }
571
- last = current;
537
+ if (current !== node && current.tag === RenderTag.BRICK && (portal ? current.portal : !current.portal)) {
538
+ return current;
572
539
  }
573
- if (current.child) {
540
+ if (current !== node && current.child && current.tag === RenderTag.ABSTRACT) {
541
+ // Traverse down sibling abstract nodes
574
542
  current = current.child;
575
543
  } else if (current.sibling) {
576
544
  current = current.sibling;
577
545
  } else {
578
- var _currentReturn;
546
+ var _currentReturn2;
547
+ // Traverse up abstract nodes to find the next sibling in DOM
579
548
  let currentReturn = current.return;
580
549
  while (currentReturn) {
550
+ if (currentReturn.tag !== RenderTag.ABSTRACT) {
551
+ // End the loop when encounter a non-abstract return node,
552
+ // it means we can't find the target sibling node.
553
+ return;
554
+ }
581
555
  if (currentReturn.sibling) {
582
556
  break;
583
557
  }
584
558
  currentReturn = currentReturn.return;
585
559
  }
586
- current = (_currentReturn = currentReturn) === null || _currentReturn === void 0 ? void 0 : _currentReturn.sibling;
560
+ current = (_currentReturn2 = currentReturn) === null || _currentReturn2 === void 0 ? void 0 : _currentReturn2.sibling;
587
561
  }
588
562
  }
589
- return last;
590
563
  }
591
- function getBrickRange(from, to) {
564
+ function getContainedBricks(node) {
592
565
  const range = new Set();
593
- let current = from;
566
+ let current = node;
594
567
  while (current) {
595
568
  if (current.tag === RenderTag.BRICK) {
596
569
  range.add(current);
597
570
  }
598
571
  if (current.child) {
599
572
  current = current.child;
600
- } else if (current === to) {
573
+ } else if (current === node) {
574
+ // End the loop when encounter the original node.
601
575
  break;
602
576
  } else if (current.sibling) {
603
577
  current = current.sibling;
604
578
  } else {
605
- var _currentReturn2;
579
+ var _currentReturn3;
606
580
  let currentReturn = current.return;
607
- while (currentReturn && currentReturn !== to) {
581
+ while (currentReturn) {
582
+ if (currentReturn === node) {
583
+ // End the loop when encounter the original node.
584
+ return range;
585
+ }
608
586
  if (currentReturn.sibling) {
609
587
  break;
610
588
  }
611
589
  currentReturn = currentReturn.return;
612
590
  }
613
- if (currentReturn === to) {
614
- break;
615
- }
616
- current = (_currentReturn2 = currentReturn) === null || _currentReturn2 === void 0 ? void 0 : _currentReturn2.sibling;
591
+ current = (_currentReturn3 = currentReturn) === null || _currentReturn3 === void 0 ? void 0 : _currentReturn3.sibling;
617
592
  }
618
593
  }
619
594
  return range;
620
595
  }
596
+ function getEntityReturnNode(node) {
597
+ let current = node;
598
+ while (current.tag === RenderTag.ABSTRACT) {
599
+ current = current.return;
600
+ }
601
+ return current;
602
+ }
621
603
  //# 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","getContainedBricks","_assertClassBrand","_unmountBricks","call","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","mountEvent","type","process","env","NODE_ENV","_conf$threshold","threshold","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","observe","lastNormal","lastPortal","level","BRICK","ABSTRACT","_currentReturn","currentReturn","_currentReturn2","range","_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 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 #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 bricks, including their descendants\n const removeBricks = getContainedBricks(oldNode);\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 node.sibling = oldNode.sibling;\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 = getContainedBricks(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 getContainedBricks(node: RenderChildNode) {\n const range = new Set<RenderBrick>();\n let current: RenderNode | undefined = node;\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 === 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 range;\n }\n if (currentReturn.sibling) {\n break;\n }\n currentReturn = currentReturn.return;\n }\n current = currentReturn?.sibling;\n }\n }\n return range;\n}\n\nfunction getEntityReturnNode(node: RenderReturnNode): RenderRoot | RenderBrick {\n let current = node;\n while (current.tag === RenderTag.ABSTRACT) {\n current = current.return;\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":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/internal/interfaces.ts"],"sourcesContent":["import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport type {\n BrickEventHandler,\n BrickEventsMap,\n CustomTemplate,\n RouteConf,\n RuntimeSnippet,\n CustomTemplateProxy,\n CustomTemplateProxyBasicProperty,\n CustomTemplateProxySlot,\n SlotsConfOfBricks,\n Storyboard,\n StaticMenuConf,\n UseProviderResolveConf,\n MicroApp,\n} from \"@next-core/types\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { RuntimeBrickConfOfFormSymbols } from \"./FormRenderer/constants.js\";\n\nexport interface RuntimeContext extends LegacyCompatibleRuntimeContext {\n ctxStore: DataStore<\"CTX\">;\n tplStateStoreMap: Map<string, DataStore<\"STATE\">>;\n pendingPermissionsPreCheck: (Promise<unknown> | undefined)[];\n tplStateStoreId?: string;\n // `useBrick` has a local tpl state store scope\n tplStateStoreScope?: DataStore<\"STATE\">[];\n forEachItem?: unknown;\n forEachIndex?: number;\n forEachSize?: number;\n appendI18nNamespace?: string;\n\n formStateStoreMap: Map<string, DataStore<\"FORM_STATE\">>;\n formStateStoreId?: string;\n formStateStoreScope?: DataStore<\"FORM_STATE\">[];\n inUseBrick?: boolean;\n\n unsafe_penetrate?: boolean;\n}\n\nexport type AsyncPropertyEntry = [\n name: string,\n value: Promise<unknown>,\n ignoreUndefined?: boolean,\n];\n\nexport interface ElementHolder {\n element?: HTMLElement | null;\n}\n\nexport interface RenderRoot extends BaseRenderNode {\n tag: RenderTag.ROOT;\n container?: HTMLElement | DocumentFragment;\n createPortal:\n | HTMLElement\n | DocumentFragment\n | (() => HTMLElement | DocumentFragment);\n}\n\nexport interface RenderBrick extends BaseRenderNode, RuntimeBrick {\n tag: RenderTag.BRICK;\n return: RenderReturnNode;\n hasTrackingControls?: boolean;\n}\n\nexport interface RenderPlaceholder extends BaseRenderNode {\n tag: RenderTag.PLACEHOLDER;\n return: RenderReturnNode;\n tracking?: boolean;\n}\n\nexport interface BaseRenderNode {\n tag: RenderTag;\n child?: RenderChildNode;\n sibling?: RenderChildNode;\n return?: RenderReturnNode | null;\n childElements?: HTMLElement[];\n}\n\nexport type RenderNode = RenderRoot | RenderBrick | RenderPlaceholder;\n\nexport type RenderChildNode = RenderBrick | RenderPlaceholder;\nexport type RenderReturnNode = RenderRoot | RenderBrick;\n\nexport interface RuntimeBrick {\n type: string;\n properties?: Record<string, unknown>;\n events?: BrickEventsMap;\n slotId?: string;\n element?: RuntimeBrickElement | null;\n iid?: string;\n runtimeContext: RuntimeContext;\n tplHostMetadata?: TemplateHostMetadata;\n portal?: boolean;\n ref?: string;\n disposes?: (() => void)[];\n}\n\nexport type MetaInfoOfEventListener = [\n string,\n // For compatibility of devtools, leave the second argument there.\n null | undefined,\n BrickEventHandler,\n];\n\nexport type RememberedEventListener = [string, EventListener];\n\nexport interface RuntimeBrickElement extends HTMLElement {\n $$typeof?: \"brick\" | \"provider\" | \"custom-template\" | \"native\" | \"invalid\";\n /** Meta info of listeners, for devtools only */\n $$eventListeners?: MetaInfoOfEventListener[];\n /** Remembered listeners for unbinding */\n $$listeners?: RememberedEventListener[];\n /** Remembered proxy listeners for unbinding */\n $$proxyListeners?: RememberedEventListener[];\n /** Find element by ref in a custom template */\n $$getElementByRef?: (ref: string) => HTMLElement | null | undefined;\n $$tplStateStore?: DataStore<\"STATE\">;\n}\n\nexport interface TemplateHostMetadata {\n internalBricksByRef: Map<string, RuntimeBrick>;\n tplStateStoreId: string;\n proxy?: CustomTemplateProxy;\n}\n\nexport type TemplateHostBrick = RuntimeBrick & {\n tplHostMetadata: TemplateHostMetadata;\n};\n\nexport interface TemplateHostContext {\n reversedProxies: ReversedProxies;\n asyncHostPropertyEntries: AsyncPropertyEntry[];\n externalSlots?: SlotsConfOfBricks;\n tplStateStoreId: string;\n hostBrick: TemplateHostBrick;\n usedSlots: Set<string>;\n}\n\ninterface ReversedProxies {\n properties: Map<string, ReversedPropertyProxy[]>;\n slots: Map<string, ReversedSlotProxy[]>;\n}\n\ninterface ReversedPropertyProxy {\n from: string;\n to: CustomTemplateProxyBasicProperty;\n}\n\ninterface ReversedSlotProxy {\n from: string;\n to: CustomTemplateProxySlot;\n}\n\nexport type RuntimeBrickConfWithSymbols = RuntimeBrickConfWithTplSymbols &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface DataValueOption {\n tplStateStoreId?: string;\n routeId?: string;\n}\n\nexport type PreviewStoryboardPatch =\n | CustomTemplate\n | RouteConf\n | RuntimeSnippet;\n\nexport interface PreviewOption {\n appId: string;\n formId?: string;\n updateStoryboardType?: \"route\" | \"template\" | \"snippet\";\n collectUsedContracts?(storyboard: Storyboard): string[] | Promise<string[]>;\n}\n\nexport interface MenuRequestNode {\n child?: MenuRequestNode;\n sibling?: MenuRequestNode;\n return?: MenuRequestNode;\n request?: Promise<StaticMenuConf>;\n}\n\nexport interface DebugDataValue {\n resolve?: UseProviderResolveConf;\n value?: unknown;\n}\n\nexport interface RuntimeDataVale\n extends Pick<LegacyCompatibleRuntimeContext, \"match\" | \"sys\" | \"query\"> {\n location: {\n href: string;\n origin: string;\n hostname: string;\n host: string;\n };\n app?: MicroApp;\n}\n\nexport interface RuntimeDataValueOption {\n routeId?: string;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/internal/interfaces.ts"],"sourcesContent":["import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport type {\n BrickEventHandler,\n BrickEventsMap,\n CustomTemplate,\n RouteConf,\n RuntimeSnippet,\n CustomTemplateProxy,\n CustomTemplateProxyBasicProperty,\n CustomTemplateProxySlot,\n SlotsConfOfBricks,\n Storyboard,\n StaticMenuConf,\n UseProviderResolveConf,\n MicroApp,\n} from \"@next-core/types\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { RuntimeBrickConfOfFormSymbols } from \"./FormRenderer/constants.js\";\n\nexport interface RuntimeContext extends LegacyCompatibleRuntimeContext {\n ctxStore: DataStore<\"CTX\">;\n tplStateStoreMap: Map<string, DataStore<\"STATE\">>;\n pendingPermissionsPreCheck: (Promise<unknown> | undefined)[];\n tplStateStoreId?: string;\n // `useBrick` has a local tpl state store scope\n tplStateStoreScope?: DataStore<\"STATE\">[];\n forEachItem?: unknown;\n forEachIndex?: number;\n forEachSize?: number;\n appendI18nNamespace?: string;\n\n formStateStoreMap: Map<string, DataStore<\"FORM_STATE\">>;\n formStateStoreId?: string;\n formStateStoreScope?: DataStore<\"FORM_STATE\">[];\n inUseBrick?: boolean;\n\n unsafe_penetrate?: boolean;\n}\n\nexport type AsyncPropertyEntry = [\n name: string,\n value: Promise<unknown>,\n ignoreUndefined?: boolean,\n];\n\nexport interface ElementHolder {\n element?: HTMLElement | null;\n}\n\nexport interface RenderRoot extends BaseRenderNode {\n tag: RenderTag.ROOT;\n container?: HTMLElement | DocumentFragment;\n createPortal:\n | HTMLElement\n | DocumentFragment\n | (() => HTMLElement | DocumentFragment);\n}\n\nexport interface RenderBrick extends BaseRenderNode, RuntimeBrick {\n tag: RenderTag.BRICK;\n return: RenderReturnNode;\n}\n\nexport interface RenderAbstract extends BaseRenderNode {\n tag: RenderTag.ABSTRACT;\n return: RenderReturnNode;\n}\n\nexport interface BaseRenderNode {\n tag: RenderTag;\n child?: RenderChildNode;\n sibling?: RenderChildNode;\n return?: RenderReturnNode | null;\n childElements?: HTMLElement[];\n}\n\nexport type RenderNode = RenderRoot | RenderBrick | RenderAbstract;\nexport type RenderChildNode = RenderBrick | RenderAbstract;\nexport type RenderReturnNode = RenderNode;\n\nexport interface RuntimeBrick {\n type: string;\n properties?: Record<string, unknown>;\n events?: BrickEventsMap;\n slotId?: string;\n element?: RuntimeBrickElement | null;\n iid?: string;\n runtimeContext: RuntimeContext;\n tplHostMetadata?: TemplateHostMetadata;\n portal?: boolean;\n ref?: string;\n disposes?: (() => void)[];\n}\n\nexport type MetaInfoOfEventListener = [\n string,\n // For compatibility of devtools, leave the second argument there.\n null | undefined,\n BrickEventHandler,\n];\n\nexport type RememberedEventListener = [string, EventListener];\n\nexport interface RuntimeBrickElement extends HTMLElement {\n $$typeof?: \"brick\" | \"provider\" | \"custom-template\" | \"native\" | \"invalid\";\n /** Meta info of listeners, for devtools only */\n $$eventListeners?: MetaInfoOfEventListener[];\n /** Remembered listeners for unbinding */\n $$listeners?: RememberedEventListener[];\n /** Remembered proxy listeners for unbinding */\n $$proxyListeners?: RememberedEventListener[];\n /** Find element by ref in a custom template */\n $$getElementByRef?: (ref: string) => HTMLElement | null | undefined;\n $$tplStateStore?: DataStore<\"STATE\">;\n}\n\nexport interface TemplateHostMetadata {\n internalBricksByRef: Map<string, RuntimeBrick>;\n tplStateStoreId: string;\n proxy?: CustomTemplateProxy;\n}\n\nexport type TemplateHostBrick = RuntimeBrick & {\n tplHostMetadata: TemplateHostMetadata;\n};\n\nexport interface TemplateHostContext {\n reversedProxies: ReversedProxies;\n asyncHostPropertyEntries: AsyncPropertyEntry[];\n externalSlots?: SlotsConfOfBricks;\n tplStateStoreId: string;\n hostBrick: TemplateHostBrick;\n usedSlots: Set<string>;\n}\n\ninterface ReversedProxies {\n properties: Map<string, ReversedPropertyProxy[]>;\n slots: Map<string, ReversedSlotProxy[]>;\n}\n\ninterface ReversedPropertyProxy {\n from: string;\n to: CustomTemplateProxyBasicProperty;\n}\n\ninterface ReversedSlotProxy {\n from: string;\n to: CustomTemplateProxySlot;\n}\n\nexport type RuntimeBrickConfWithSymbols = RuntimeBrickConfWithTplSymbols &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface DataValueOption {\n tplStateStoreId?: string;\n routeId?: string;\n}\n\nexport type PreviewStoryboardPatch =\n | CustomTemplate\n | RouteConf\n | RuntimeSnippet;\n\nexport interface PreviewOption {\n appId: string;\n formId?: string;\n updateStoryboardType?: \"route\" | \"template\" | \"snippet\";\n collectUsedContracts?(storyboard: Storyboard): string[] | Promise<string[]>;\n}\n\nexport interface MenuRequestNode {\n child?: MenuRequestNode;\n sibling?: MenuRequestNode;\n return?: MenuRequestNode;\n request?: Promise<StaticMenuConf>;\n}\n\nexport interface DebugDataValue {\n resolve?: UseProviderResolveConf;\n value?: unknown;\n}\n\nexport interface RuntimeDataVale\n extends Pick<LegacyCompatibleRuntimeContext, \"match\" | \"sys\" | \"query\"> {\n location: {\n href: string;\n origin: string;\n hostname: string;\n host: string;\n };\n app?: MicroApp;\n}\n\nexport interface RuntimeDataValueOption {\n routeId?: string;\n}\n"],"mappings":"","ignoreList":[]}