@next-core/runtime 1.62.2 → 1.63.0

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.
@@ -235,9 +235,10 @@ class RendererContext {
235
235
  current = current.sibling;
236
236
  }
237
237
 
238
- // Unmount previous bricks, including their descendants
239
- const removeBricks = getContainedBricks(oldNode);
238
+ // Unmount previous brick and abstract nodes, including their descendants
239
+ const [removeBricks, removeAbstracts] = getContainedBrickAndAbstractNodes(oldNode);
240
240
  (0, _assertClassBrand2.default)(_RendererContext_brand, this, _unmountBricks).call(this, removeBricks);
241
+ (0, _assertClassBrand2.default)(_RendererContext_brand, this, _unmountAbstracts).call(this, removeAbstracts);
241
242
  (0, _mount.mountTree)(renderRoot);
242
243
 
243
244
  // Connect back
@@ -248,6 +249,11 @@ class RendererContext {
248
249
  }
249
250
  node.sibling = oldNode.sibling;
250
251
 
252
+ // Clean up old node
253
+ delete oldNode.child;
254
+ delete oldNode.sibling;
255
+ delete oldNode.return;
256
+
251
257
  // Resume `return`
252
258
  current = node;
253
259
  while (current) {
@@ -286,7 +292,7 @@ class RendererContext {
286
292
  }
287
293
  portal.insertBefore(portalFragment, insertPortalBeforeChild);
288
294
  }
289
- const newBricks = getContainedBricks(node);
295
+ const [newBricks] = getContainedBrickAndAbstractNodes(node);
290
296
  (0, _assertClassBrand2.default)(_RendererContext_brand, this, _initializeRerenderBricks).call(this, newBricks);
291
297
  }
292
298
  dispose() {
@@ -429,6 +435,12 @@ function _unmountBricks(bricks) {
429
435
  (0, _bindListeners.listenerFactory)(handlers, brick.runtimeContext, brick)(unmountEvent);
430
436
  }
431
437
  }
438
+ function _unmountAbstracts(abstracts) {
439
+ for (const item of abstracts) {
440
+ var _item$disposes;
441
+ (_item$disposes = item.disposes) === null || _item$disposes === void 0 || _item$disposes.forEach(dispose => dispose());
442
+ }
443
+ }
432
444
  function _initializeRerenderBricks(bricks) {
433
445
  const mountEvent = new CustomEvent("mount");
434
446
  for (const {
@@ -566,12 +578,15 @@ function findNextSiblingNode(node, portal) {
566
578
  }
567
579
  }
568
580
  }
569
- function getContainedBricks(node) {
570
- const range = new Set();
581
+ function getContainedBrickAndAbstractNodes(node) {
582
+ const bricks = new Set();
583
+ const abstracts = new Set();
571
584
  let current = node;
572
585
  while (current) {
573
586
  if (current.tag === _enums.RenderTag.BRICK) {
574
- range.add(current);
587
+ bricks.add(current);
588
+ } else if (current.tag === _enums.RenderTag.ABSTRACT) {
589
+ abstracts.add(current);
575
590
  }
576
591
  if (current.child) {
577
592
  current = current.child;
@@ -586,7 +601,7 @@ function getContainedBricks(node) {
586
601
  while (currentReturn) {
587
602
  if (currentReturn === node) {
588
603
  // End the loop when encounter the original node.
589
- return range;
604
+ return [bricks, abstracts];
590
605
  }
591
606
  if (currentReturn.sibling) {
592
607
  break;
@@ -596,12 +611,16 @@ function getContainedBricks(node) {
596
611
  current = (_currentReturn3 = currentReturn) === null || _currentReturn3 === void 0 ? void 0 : _currentReturn3.sibling;
597
612
  }
598
613
  }
599
- return range;
614
+ return [bricks, abstracts];
600
615
  }
601
616
  function getEntityReturnNode(node) {
602
617
  let current = node;
603
618
  while (current.tag === _enums.RenderTag.ABSTRACT) {
604
619
  current = current.return;
620
+ // istanbul ignore next
621
+ if (!current) {
622
+ throw new Error("Cannot find render root node. This is a bug of Brick Next, please report it.");
623
+ }
605
624
  }
606
625
  return current;
607
626
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","_Runtime","commonLifeCycles","pageOnlyLifeCycles","_routeHelper","WeakMap","_memoizedLifeCycle","_observers","_mediaListener","_arbitraryLifeCycle","_initialMenuRequestNode","_memoizedMenuRequestNodeMap","_incrementalRenderStates","_RendererContext_brand","WeakSet","RendererContext","constructor","scope","options","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","_classPrivateFieldSet2","routeHelper","renderId","setInitialMenuRequestNode","menuRequestNode","memoizeMenuRequestNode","routes","_classPrivateFieldGet2","set","getMenuRequests","menuRequests","current","request","push","child","_current","sibling","return","reMergeMenuRequestNodes","parentMenuRequestNode","node","get","previousSibling","mergeMenus","reBailout","output","bailout","reCatch","error","returnNode","catch","didPerformIncrementalRender","location","prevLocation","finalResult","shouldIgnoreRoutes","parentRoutes","callback","values","reverse","parentRoute","length","includes","result","slice","performIncrementalRender","slotConf","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","isEmpty","useResolves","console","registerArbitraryLifeCycle","fn","arbitraryCallbacks","add","Set","reRender","oldNode","_prevLastNormal$eleme","_findNextSiblingNode","_prevLastPortal$eleme","_findNextSiblingNode2","prevLastNormal","prevLastPortal","findLastChildNodes","insertBeforeChild","element","nextSibling","findNextSiblingNode","insertPortalBeforeChildCandidates","HTMLElement","tagName","prevSibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","RenderTag","ROOT","container","createPortal","removeBricks","getContainedBricks","_assertClassBrand2","_unmountBricks","call","mountTree","hasChildNodes","entityReturnNode","getEntityReturnNode","_entityReturnNode$con","insertBefore","_entityReturnNode$ele","_root","root","Error","portal","insertPortalBeforeChild","candidate","contains","newBricks","_initializeRerenderBricks","dispose","list","Object","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","anchor","substring","initializeScrollIntoView","conf","_addObserver","initializeMediaChange","getReadOnlyProxy","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","hooks","messageDispatcher","channel","listenerFactory","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","_brick$disposes","observers","delete","unbindTemplateProxy","$$tplStateStore","disposes","forEach","unmountEvent","mountEvent","type","process","env","NODE_ENV","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
+ {"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","_Runtime","commonLifeCycles","pageOnlyLifeCycles","_routeHelper","WeakMap","_memoizedLifeCycle","_observers","_mediaListener","_arbitraryLifeCycle","_initialMenuRequestNode","_memoizedMenuRequestNodeMap","_incrementalRenderStates","_RendererContext_brand","WeakSet","RendererContext","constructor","scope","options","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","_classPrivateFieldSet2","routeHelper","renderId","setInitialMenuRequestNode","menuRequestNode","memoizeMenuRequestNode","routes","_classPrivateFieldGet2","set","getMenuRequests","menuRequests","current","request","push","child","_current","sibling","return","reMergeMenuRequestNodes","parentMenuRequestNode","node","get","previousSibling","mergeMenus","reBailout","output","bailout","reCatch","error","returnNode","catch","didPerformIncrementalRender","location","prevLocation","finalResult","shouldIgnoreRoutes","parentRoutes","callback","values","reverse","parentRoute","length","includes","result","slice","performIncrementalRender","slotConf","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","isEmpty","useResolves","console","registerArbitraryLifeCycle","fn","arbitraryCallbacks","add","Set","reRender","oldNode","_prevLastNormal$eleme","_findNextSiblingNode","_prevLastPortal$eleme","_findNextSiblingNode2","prevLastNormal","prevLastPortal","findLastChildNodes","insertBeforeChild","element","nextSibling","findNextSiblingNode","insertPortalBeforeChildCandidates","HTMLElement","tagName","prevSibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","RenderTag","ROOT","container","createPortal","removeBricks","removeAbstracts","getContainedBrickAndAbstractNodes","_assertClassBrand2","_unmountBricks","call","_unmountAbstracts","mountTree","hasChildNodes","entityReturnNode","getEntityReturnNode","_entityReturnNode$con","insertBefore","_entityReturnNode$ele","_root","root","Error","portal","insertPortalBeforeChild","candidate","contains","newBricks","_initializeRerenderBricks","dispose","list","Object","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","anchor","substring","initializeScrollIntoView","conf","_addObserver","initializeMediaChange","getReadOnlyProxy","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc2","confList","concat","_hooks$messageDispatc","hooks","messageDispatcher","channel","listenerFactory","runtimeContext","onClose","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","_brick$disposes","observers","delete","unbindTemplateProxy","$$tplStateStore","disposes","forEach","unmountEvent","abstracts","_item$disposes","mountEvent","type","process","env","NODE_ENV","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 +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}\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":[]}
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 iid?: string;\n disposes?: (() => void)[];\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":[]}
@@ -1,4 +1,5 @@
1
1
  import { i18n } from "@next-core/i18n";
2
+ import { replaceUseChildren } from "@next-core/utils/storyboard";
2
3
  import { uniqueId } from "lodash";
3
4
  import { getDataStores, postAsyncRender, renderBricks } from "./internal/Renderer.js";
4
5
  import { RendererContext } from "./internal/RendererContext.js";
@@ -16,6 +17,7 @@ export function unstable_createRoot(container) {
16
17
  portal: _portal,
17
18
  scope = "fragment",
18
19
  unknownBricks,
20
+ supportsUseChildren,
19
21
  unsafe_penetrate
20
22
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
21
23
  let portal = _portal;
@@ -52,6 +54,14 @@ export function unstable_createRoot(container) {
52
54
  throw new Error("The root is unmounted and cannot be rendered any more");
53
55
  }
54
56
  const bricks = [].concat(brick);
57
+ if (supportsUseChildren) {
58
+ replaceUseChildren(bricks);
59
+ for (const template of templates !== null && templates !== void 0 ? templates : []) {
60
+ if (Array.isArray(template.bricks)) {
61
+ replaceUseChildren(template.bricks);
62
+ }
63
+ }
64
+ }
55
65
  const previousRendererContext = rendererContext;
56
66
  const renderId = uniqueId("render-id-");
57
67
  rendererContext = new RendererContext(scope, {
@@ -1 +1 @@
1
- {"version":3,"file":"createRoot.js","names":["i18n","uniqueId","getDataStores","postAsyncRender","renderBricks","RendererContext","DataStore","mountTree","unmountTree","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","setUIVersion","ErrorNode","unstable_createRoot","container","portal","_portal","scope","unknownBricks","unsafe_penetrate","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","theme","uiVersion","language","context","functions","templates","i18nData","url","app","Error","bricks","concat","previousRendererContext","renderId","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","urlObj","URL","query","searchParams","location","pathname","search","hash","state","renderRoot","tag","ROOT","_clearI18nBundles","changeLanguage","id","homepage","demoStoryboard","meta","customTemplates","define","failed","output","stores","error","node","blockingList","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n\n /**\n * Set unsafe_penetrate to true to allow accessing global variables\n * from an isolated root.\n *\n * It is unsafe, use it at your own risk.\n */\n unsafe_penetrate?: boolean;\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n {\n portal: _portal,\n scope = \"fragment\",\n unknownBricks,\n unsafe_penetrate,\n }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n unsafe_penetrate,\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createRoot.js","names":["i18n","replaceUseChildren","uniqueId","getDataStores","postAsyncRender","renderBricks","RendererContext","DataStore","mountTree","unmountTree","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","setUIVersion","ErrorNode","unstable_createRoot","container","portal","_portal","scope","unknownBricks","supportsUseChildren","unsafe_penetrate","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","theme","uiVersion","language","context","functions","templates","i18nData","url","app","Error","bricks","concat","template","Array","isArray","previousRendererContext","renderId","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","urlObj","URL","query","searchParams","location","pathname","search","hash","state","renderRoot","tag","ROOT","_clearI18nBundles","changeLanguage","id","homepage","demoStoryboard","meta","customTemplates","define","failed","output","stores","error","node","blockingList","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { replaceUseChildren } from \"@next-core/utils/storyboard\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n\n /**\n * Whether the root supports `useChildren`.\n */\n supportsUseChildren?: boolean;\n\n /**\n * Set unsafe_penetrate to true to allow accessing global variables\n * from an isolated root.\n *\n * It is unsafe, use it at your own risk.\n */\n unsafe_penetrate?: boolean;\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n {\n portal: _portal,\n scope = \"fragment\",\n unknownBricks,\n supportsUseChildren,\n unsafe_penetrate,\n }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n if (supportsUseChildren) {\n replaceUseChildren(bricks);\n\n for (const template of templates ?? []) {\n if (Array.isArray(template.bricks)) {\n replaceUseChildren(template.bricks);\n }\n }\n }\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n unsafe_penetrate,\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -162,6 +162,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
162
162
  if (isGeneralizedTrackAll(brickIf)) {
163
163
  return renderBrick(returnNode, {
164
164
  brick: ":if",
165
+ iid: brickConf.iid,
165
166
  dataSource: brickIf,
166
167
  // `permissionsPreCheck` maybe required before computing `if`.
167
168
  permissionsPreCheck,
@@ -239,11 +240,12 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
239
240
  // Then, get the bricks in that matched slot.
240
241
  const bricks = slots && hasOwnProperty(slots, slot) && ((_slots$slot = slots[slot]) === null || _slots$slot === void 0 ? void 0 : _slots$slot.bricks);
241
242
  const output = getEmptyRenderOutput();
242
- const controlNode = {
243
+ const abstractNode = {
243
244
  tag: RenderTag.ABSTRACT,
244
- return: returnNode
245
+ return: returnNode,
246
+ iid: brickConf.iid
245
247
  };
246
- output.node = controlNode;
248
+ output.node = abstractNode;
247
249
  if (!Array.isArray(bricks)) {
248
250
  return output;
249
251
  }
@@ -254,17 +256,17 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
254
256
  if (!Array.isArray(computedDataSource)) {
255
257
  break;
256
258
  }
257
- childrenOutput = await renderForEach(controlNode, computedDataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
259
+ childrenOutput = await renderForEach(abstractNode, computedDataSource, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
258
260
  break;
259
261
  }
260
262
  case ":if":
261
263
  case ":switch":
262
264
  {
263
- childrenOutput = await renderBricks(controlNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
265
+ childrenOutput = await renderBricks(abstractNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, tracker);
264
266
  }
265
267
  }
266
268
  if (childrenOutput) {
267
- controlNode.child = childrenOutput.node;
269
+ abstractNode.child = childrenOutput.node;
268
270
  mergeRenderOutput(output, {
269
271
  ...childrenOutput,
270
272
  node: undefined
@@ -364,7 +366,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
364
366
  leading: true,
365
367
  trailing: true
366
368
  });
367
- const runtimeBrick = returnNode.tag === RenderTag.BRICK ? returnNode : null;
369
+ const runtimeBrick = returnNode.tag === RenderTag.ROOT ? null : returnNode;
368
370
  const disposes = runtimeBrick ? (_runtimeBrick$dispose = runtimeBrick.disposes) !== null && _runtimeBrick$dispose !== void 0 ? _runtimeBrick$dispose : runtimeBrick.disposes = [] : [];
369
371
  if (contextNames) {
370
372
  for (const contextName of contextNames) {
@@ -537,11 +539,11 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
537
539
  return renderBricks(brick, slotConf.bricks, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, tplStack, initialTracker);
538
540
  }
539
541
  let lastOutput = getEmptyRenderOutput();
540
- const controlNode = {
542
+ const abstractNode = {
541
543
  tag: RenderTag.ABSTRACT,
542
544
  return: brick
543
545
  };
544
- lastOutput.node = controlNode;
546
+ lastOutput.node = abstractNode;
545
547
  const parentRoute = parentRoutes[parentRoutes.length - 1];
546
548
  if (parentRoute !== null && parentRoute !== void 0 && parentRoute.incrementalSubRoutes) {
547
549
  routeSlotFromIndexToSlotId.set(index, childSlotId);
@@ -619,8 +621,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
619
621
  return true;
620
622
  });
621
623
  }
622
- const routesOutput = await renderRoutes(controlNode, slotConf.routes, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, undefined, initialTracker);
623
- controlNode.child = routesOutput.node;
624
+ const routesOutput = await renderRoutes(abstractNode, slotConf.routes, childRuntimeContext, rendererContext, parentRoutes, menuRequestReturnNode, childSlotId, undefined, initialTracker);
625
+ abstractNode.child = routesOutput.node;
624
626
  mergeRenderOutput(output, {
625
627
  ...routesOutput,
626
628
  node: undefined