@next-core/runtime 1.21.0 → 1.21.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.
Files changed (42) hide show
  1. package/dist/cjs/createRoot.js +4 -6
  2. package/dist/cjs/createRoot.js.map +1 -1
  3. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js +1 -1
  4. package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  5. package/dist/cjs/internal/Renderer.js +159 -59
  6. package/dist/cjs/internal/Renderer.js.map +1 -1
  7. package/dist/cjs/internal/RendererContext.js +87 -11
  8. package/dist/cjs/internal/RendererContext.js.map +1 -1
  9. package/dist/cjs/internal/Router.js +109 -77
  10. package/dist/cjs/internal/Router.js.map +1 -1
  11. package/dist/cjs/internal/data/DataStore.js +53 -7
  12. package/dist/cjs/internal/data/DataStore.js.map +1 -1
  13. package/dist/cjs/internal/matchRoutes.js +9 -5
  14. package/dist/cjs/internal/matchRoutes.js.map +1 -1
  15. package/dist/cjs/internal/matchStoryboard.js +8 -3
  16. package/dist/cjs/internal/matchStoryboard.js.map +1 -1
  17. package/dist/cjs/internal/secret_internals.js +11 -18
  18. package/dist/cjs/internal/secret_internals.js.map +1 -1
  19. package/dist/esm/createRoot.js +5 -7
  20. package/dist/esm/createRoot.js.map +1 -1
  21. package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js +1 -1
  22. package/dist/esm/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
  23. package/dist/esm/internal/Renderer.js +167 -69
  24. package/dist/esm/internal/Renderer.js.map +1 -1
  25. package/dist/esm/internal/RendererContext.js +94 -11
  26. package/dist/esm/internal/RendererContext.js.map +1 -1
  27. package/dist/esm/internal/Router.js +148 -103
  28. package/dist/esm/internal/Router.js.map +1 -1
  29. package/dist/esm/internal/data/DataStore.js +51 -6
  30. package/dist/esm/internal/data/DataStore.js.map +1 -1
  31. package/dist/esm/internal/matchRoutes.js +8 -5
  32. package/dist/esm/internal/matchRoutes.js.map +1 -1
  33. package/dist/esm/internal/matchStoryboard.js +7 -3
  34. package/dist/esm/internal/matchStoryboard.js.map +1 -1
  35. package/dist/esm/internal/secret_internals.js +13 -20
  36. package/dist/esm/internal/secret_internals.js.map +1 -1
  37. package/dist/types/internal/Renderer.d.ts +12 -4
  38. package/dist/types/internal/RendererContext.d.ts +31 -5
  39. package/dist/types/internal/data/DataStore.d.ts +13 -4
  40. package/dist/types/internal/matchRoutes.d.ts +6 -0
  41. package/dist/types/internal/matchStoryboard.d.ts +1 -0
  42. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"RendererContext.js","names":["isEmpty","remove","listenerFactory","getHistory","getReadOnlyProxy","mediaEventTarget","mountTree","RenderTag","unbindTemplateProxy","hooks","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_arbitraryLifeCycle","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet","push","useResolves","console","error","registerArbitraryLifeCycle","fn","arbitraryCallbacks","get","add","set","Set","memoizeControlNode","slotId","keyPath","node","returnNode","_classPrivateFieldSet","memKey","join","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","rerenderControlNode","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet","_unmountBricks2","call","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc","_loop","_loop2","_hooks$messageDispatc2","messageDispatcher","channel","runtimeContext","concat","confList","onClose","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","observers","delete","$$tplStateStore","unmountEvent","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n MessageConf,\n ScrollIntoViewConf,\n} from \"@next-core/types\";\nimport type { Action } from \"history\";\nimport { isEmpty, remove } from \"lodash\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport { NextLocation, getHistory } from \"../history.js\";\nimport { getReadOnlyProxy } from \"./proxyFactories.js\";\nimport { Media, mediaEventTarget } from \"./mediaQuery.js\";\nimport type { RenderBrick, RenderNode, RenderRoot } from \"./interfaces.js\";\nimport { mountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { unbindTemplateProxy } from \"./CustomTemplates/bindTemplateProxy.js\";\nimport { hooks } from \"./Runtime.js\";\n\ntype MemoizedLifeCycle<T> = {\n [Key in keyof T]: {\n brick: RenderBrick;\n handlers: T[Key];\n }[];\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}\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 constructor(scope: \"page\" | \"fragment\", options?: RendererContextOptions) {\n this.scope = scope;\n this.unknownBricks = options?.unknownBricks ?? \"throw\";\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 #memoizedControlNodes?: WeakMap<\n RenderNode,\n Map<\n string,\n {\n node?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\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\n // Also remove the element\n brick.element?.remove();\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 memoizeControlNode(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n let mem = this.#memoizedControlNodes.get(returnNode);\n if (!mem) {\n mem = new Map();\n this.#memoizedControlNodes.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 rerenderControlNode(\n slotId: string | undefined,\n keyPath: number[],\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = [slotId ?? \"\", ...keyPath].join(\".\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const memoized = this.#memoizedControlNodes!.get(returnNode)!.get(memKey)!;\n const {\n node: prevNode,\n last: prevLast,\n lastNormal: prevLastNormal,\n lastPortal: prevLastPortal,\n } = memoized;\n\n const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\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: RenderBrick | 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 (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\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.#memoizedControlNodes = undefined;\n this.#arbitraryLifeCycle.clear();\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(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\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: RenderNode | 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: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\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: RenderNode | 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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"}
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","_allMenuRequests","_memoizedMenuRequestMap","_locationChangeCallbacks","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","onMessage","onMessageClose","Map","unknownBricks","_classPrivateFieldSet","routeHelper","setInitialMenuRequests","menuRequests","memoizeMenuRequests","route","_classPrivateFieldGet","set","reMergeMenuRequests","routes","currentRoute","_this","_asyncToGenerator","previousMenuRequest","previousRoute","get","mergedMenuRequests","previousIndex","indexOf","length","push","splice","delete","mergeMenus","reBailout","output","bailout","reCatch","error","returnNode","catch","didPerformIncrementalRender","location","_this2","results","Promise","all","map","callback","some","result","performIncrementalRender","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","useResolves","console","registerArbitraryLifeCycle","fn","arbitraryCallbacks","add","Set","memoize","slotId","keyPath","node","memKey","join","mem","last","getLastNode","lastNormal","getLastNormalNode","lastPortal","getLastPortalNode","reRender","_prevLastNormal$eleme","_prevLastNormal$eleme2","_prevLastPortal$eleme","_prevLastPortal$eleme2","memoized","prevNode","prevLast","prevLastNormal","prevLastPortal","insertBeforeChild","element","nextSibling","insertPortalBeforeChild","prevSibling","current","child","sibling","fragment","document","createDocumentFragment","portalFragment","renderRoot","tag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet","_unmountBricks2","call","_returnNode$container","insertBefore","_returnNode$element","childNodes","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","addEventListener","initializeMessageDispatcher","_hooks$messageDispatc","_loop","_loop2","_hooks$messageDispatc2","messageDispatcher","channel","runtimeContext","concat","confList","onClose","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","observers","$$tplStateStore","unmountEvent","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_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 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 { RenderBrick, RenderNode, RenderRoot } 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) => Promise<boolean>;\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}\n\nexport interface RouteHelper {\n bailout: (output: RenderOutput) => true | undefined;\n mergeMenus: (menuRequests: Promise<StaticMenuConf>[]) => Promise<void>;\n catch: (\n error: unknown,\n returnNode: RenderNode\n ) =>\n | undefined\n | {\n failed: true;\n output: RenderOutput;\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 #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 }\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?: RenderBrick;\n last?: RenderBrick;\n lastNormal?: RenderBrick | undefined;\n lastPortal?: RenderBrick | undefined;\n }\n >\n >;\n #allMenuRequests?: Promise<StaticMenuConf>[];\n #memoizedMenuRequestMap?: WeakMap<RouteConf, Promise<StaticMenuConf>>;\n\n setInitialMenuRequests(menuRequests: Promise<StaticMenuConf>[]) {\n this.#allMenuRequests = menuRequests;\n }\n\n memoizeMenuRequests(\n route: RouteConf,\n menuRequests: Promise<StaticMenuConf>[]\n ) {\n if (!this.#memoizedMenuRequestMap) {\n this.#memoizedMenuRequestMap = new WeakMap();\n }\n this.#memoizedMenuRequestMap.set(route, menuRequests[0]);\n }\n\n async reMergeMenuRequests(\n routes: RouteConf[],\n currentRoute: RouteConf | undefined,\n menuRequests: Promise<StaticMenuConf>[]\n ) {\n let previousMenuRequest: Promise<StaticMenuConf> | undefined;\n let previousRoute: RouteConf | undefined;\n for (const route of routes) {\n previousMenuRequest = this.#memoizedMenuRequestMap!.get(route);\n if (previousMenuRequest) {\n previousRoute = route;\n break;\n }\n }\n const mergedMenuRequests = this.#allMenuRequests!;\n const previousIndex = previousMenuRequest\n ? mergedMenuRequests.indexOf(previousMenuRequest)\n : -1;\n if (previousIndex === -1) {\n if (!menuRequests.length) {\n return;\n }\n mergedMenuRequests.push(...menuRequests);\n } else {\n mergedMenuRequests.splice(\n previousIndex,\n mergedMenuRequests.length - previousIndex,\n ...menuRequests\n );\n }\n if (previousRoute && previousRoute !== currentRoute) {\n this.#memoizedMenuRequestMap!.delete(previousRoute);\n }\n await this.#routeHelper!.mergeMenus(mergedMenuRequests);\n }\n\n reBailout(output: RenderOutput) {\n return this.#routeHelper!.bailout(output);\n }\n\n reCatch(error: unknown, returnNode: RenderNode) {\n return this.#routeHelper!.catch(error, returnNode);\n }\n\n #locationChangeCallbacks: LocationChangeCallback[] = [];\n\n async didPerformIncrementalRender(location: Location<NextHistoryState>) {\n const results = await Promise.all(\n this.#locationChangeCallbacks.map((callback) => callback(location))\n );\n return results.some((result) => result);\n }\n\n /**\n * When `callback` resolved to `true` which means incremental rendering is performed,\n * ignore normal rendering.\n */\n performIncrementalRender(callback: LocationChangeCallback) {\n this.#locationChangeCallbacks.push(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\n // Also remove the element\n brick.element?.remove();\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: RenderBrick | undefined,\n returnNode: RenderNode\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: RenderBrick | undefined,\n returnNode: RenderNode\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 const insertBeforeChild = prevLastNormal?.element?.nextSibling ?? null;\n const insertPortalBeforeChild =\n prevLastPortal?.element?.nextSibling ?? null;\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: RenderBrick | 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 (returnNode.tag === RenderTag.ROOT) {\n returnNode.container?.insertBefore(fragment, insertBeforeChild);\n } else {\n returnNode.element?.insertBefore(fragment, insertBeforeChild);\n }\n\n if (portalFragment.childNodes.length > 0) {\n let root: RenderNode | undefined = node;\n while (root && root.return) {\n root = root.return;\n }\n if (root?.tag !== RenderTag.ROOT) {\n throw new Error(\"Cannot find render root node\");\n }\n const portal =\n typeof root.createPortal === \"function\"\n ? root.createPortal()\n : root.createPortal;\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.#allMenuRequests = undefined;\n this.#memoizedMenuRequestMap = undefined;\n this.#arbitraryLifeCycle.clear();\n this.#locationChangeCallbacks.length = 0;\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(node: RenderBrick | undefined): RenderBrick | undefined {\n let last = node;\n while (last?.sibling) {\n last = last.sibling;\n }\n return last;\n}\n\nfunction getLastNormalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (!current.portal) {\n last = current;\n }\n current = current.sibling;\n }\n return last;\n}\n\nfunction getLastPortalNode(\n node: RenderBrick | undefined\n): RenderBrick | undefined {\n let last: RenderBrick | undefined;\n let current = node;\n while (current) {\n if (current.portal) {\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: RenderNode | 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: RenderBrick | undefined,\n to: RenderBrick | undefined\n): Set<RenderBrick> {\n const range = new Set<RenderBrick>();\n let current = from;\n while (current) {\n range.add(current);\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: RenderNode | 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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"}
@@ -1,16 +1,15 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  import _classPrivateMethodInitSpec from "@babel/runtime/helpers/classPrivateMethodInitSpec";
4
4
  import _classPrivateFieldInitSpec from "@babel/runtime/helpers/classPrivateFieldInitSpec";
5
5
  import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet";
6
6
  import _classPrivateMethodGet from "@babel/runtime/helpers/classPrivateMethodGet";
7
7
  import _classPrivateFieldSet from "@babel/runtime/helpers/classPrivateFieldSet";
8
8
  import { locationsAreEqual } from "history";
9
- import { flushStableLoadBricks } from "@next-core/loader";
10
9
  import { HttpAbortError } from "@next-core/http";
11
10
  import { uniqueId } from "lodash";
12
11
  import { getHistory } from "../history.js";
13
- import { renderRoutes } from "./Renderer.js";
12
+ import { getDataStores, postAsyncRender, renderRoutes } from "./Renderer.js";
14
13
  import { DataStore } from "./data/DataStore.js";
15
14
  import { clearResolveCache } from "./data/resolveData.js";
16
15
  import { mountTree, unmountTree } from "./mount.js";
@@ -134,65 +133,82 @@ export class Router {
134
133
  return _classPrivateFieldGet(this, _navConfig);
135
134
  }
136
135
  bootstrap() {
136
+ var _this = this;
137
137
  initAbortController();
138
138
  var history = getHistory();
139
139
  _classPrivateFieldSet(this, _prevLocation, history.location);
140
- history.listen((location, action) => {
141
- var _classPrivateFieldGet2, _location$state, _classPrivateFieldGet3;
142
- var ignoreRendering = false;
143
- var omittedLocationProps = {
144
- hash: undefined,
145
- state: undefined
146
- };
147
- // Omit the "key" when checking whether locations are equal in certain situations.
148
- if (
149
- // When current location is triggered by browser action of hash link.
150
- location.key === undefined ||
151
- // When current location is triggered by browser action of non-push-or-replace,
152
- // such as goBack or goForward,
153
- action === "POP" && (
154
- // and the previous location was triggered by hash link,
155
- _classPrivateFieldGet(this, _prevLocation).key === undefined ||
156
- // or the previous location specified notify false.
157
- ((_classPrivateFieldGet2 = _classPrivateFieldGet(this, _prevLocation).state) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.notify) === false)) {
158
- omittedLocationProps.key = undefined;
159
- }
160
- if (locationsAreEqual(_objectSpread(_objectSpread({}, _classPrivateFieldGet(this, _prevLocation)), omittedLocationProps), _objectSpread(_objectSpread({}, location), omittedLocationProps)) || action !== "POP" && ((_location$state = location.state) === null || _location$state === void 0 ? void 0 : _location$state.notify) === false) {
161
- // Ignore rendering if location not changed except hash, state and optional key.
162
- // Ignore rendering if notify is `false`.
163
- ignoreRendering = true;
164
- }
165
- if (ignoreRendering) {
166
- _classPrivateFieldSet(this, _prevLocation, location);
167
- return;
168
- }
169
- abortPendingRequest();
170
- _classPrivateFieldSet(this, _prevLocation, location);
171
- (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _rendererContext)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.dispatchPageLeave();
172
- if (action === "POP") {
173
- var storyboard = matchStoryboard(_classPrivateFieldGet(this, _storyboards), location.pathname);
174
- // When a browser action of goBack or goForward is performing,
175
- // force reload when the target page is a page of an outside app.
176
- if (isOutsideApp(storyboard)) {
177
- window.location.reload();
140
+ var renderId = 0;
141
+ history.listen( /*#__PURE__*/function () {
142
+ var _ref = _asyncToGenerator(function* (location, action) {
143
+ var _classPrivateFieldGet2, _location$state, _classPrivateFieldGet4;
144
+ var currentRenderId = ++renderId;
145
+ var ignoreRendering;
146
+ var omittedLocationProps = {
147
+ hash: undefined,
148
+ state: undefined
149
+ };
150
+ // Omit the "key" when checking whether locations are equal in certain situations.
151
+ if (
152
+ // When current location is triggered by browser action of hash link.
153
+ location.key === undefined ||
154
+ // When current location is triggered by browser action of non-push-or-replace,
155
+ // such as goBack or goForward,
156
+ action === "POP" && (
157
+ // and the previous location was triggered by hash link,
158
+ _classPrivateFieldGet(_this, _prevLocation).key === undefined ||
159
+ // or the previous location specified notify false.
160
+ ((_classPrivateFieldGet2 = _classPrivateFieldGet(_this, _prevLocation).state) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.notify) === false)) {
161
+ omittedLocationProps.key = undefined;
162
+ }
163
+ if (locationsAreEqual(_objectSpread(_objectSpread({}, _classPrivateFieldGet(_this, _prevLocation)), omittedLocationProps), _objectSpread(_objectSpread({}, location), omittedLocationProps)) || action !== "POP" && ((_location$state = location.state) === null || _location$state === void 0 ? void 0 : _location$state.notify) === false) {
164
+ // Ignore rendering if location not changed except hash, state and optional key.
165
+ // Ignore rendering if notify is `false`.
166
+ ignoreRendering = true;
167
+ }
168
+ if (!ignoreRendering) {
169
+ var _classPrivateFieldGet3;
170
+ ignoreRendering = yield (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _rendererContext)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.didPerformIncrementalRender(location);
171
+ }
172
+
173
+ // Ignore stale renders
174
+ if (renderId !== currentRenderId) {
178
175
  return;
179
176
  }
180
- }
181
- if (_classPrivateFieldGet(this, _rendering)) {
182
- _classPrivateFieldSet(this, _nextLocation, location);
183
- } else {
184
- // devtoolsHookEmit("locationChange");
185
- _classPrivateMethodGet(this, _queuedRender, _queuedRender2).call(this, location).catch(handleHttpError);
186
- }
187
- });
177
+ if (ignoreRendering) {
178
+ _classPrivateFieldSet(_this, _prevLocation, location);
179
+ return;
180
+ }
181
+ abortPendingRequest();
182
+ _classPrivateFieldSet(_this, _prevLocation, location);
183
+ (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _rendererContext)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.dispatchPageLeave();
184
+ if (action === "POP") {
185
+ var storyboard = matchStoryboard(_classPrivateFieldGet(_this, _storyboards), location.pathname);
186
+ // When a browser action of goBack or goForward is performing,
187
+ // force reload when the target page is a page of an outside app.
188
+ if (isOutsideApp(storyboard)) {
189
+ window.location.reload();
190
+ return;
191
+ }
192
+ }
193
+ if (_classPrivateFieldGet(_this, _rendering)) {
194
+ _classPrivateFieldSet(_this, _nextLocation, location);
195
+ } else {
196
+ // devtoolsHookEmit("locationChange");
197
+ _classPrivateMethodGet(_this, _queuedRender, _queuedRender2).call(_this, location).catch(handleHttpError);
198
+ }
199
+ });
200
+ return function (_x, _x2) {
201
+ return _ref.apply(this, arguments);
202
+ };
203
+ }());
188
204
  return _classPrivateMethodGet(this, _queuedRender, _queuedRender2).call(this, history.location);
189
205
  }
190
206
  }
191
207
  function _getBlockMessageBeforePageLave2(detail) {
192
- var _classPrivateFieldGet4;
208
+ var _classPrivateFieldGet5;
193
209
  var history = getHistory();
194
210
  var previousMessage = history.getBlockMessage();
195
- (_classPrivateFieldGet4 = _classPrivateFieldGet(this, _rendererContext)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.dispatchBeforePageLeave(detail);
211
+ (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _rendererContext)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.dispatchBeforePageLeave(detail);
196
212
  var message = history.getBlockMessage();
197
213
  if (!previousMessage && message) {
198
214
  // Auto unblock only if new block was introduced by `onBeforePageLeave`.
@@ -215,7 +231,7 @@ function _safeRedirect2(to, state, from) {
215
231
  }
216
232
  getHistory().replace(to, state);
217
233
  }
218
- function _queuedRender2(_x) {
234
+ function _queuedRender2(_x3) {
219
235
  return _queuedRender3.apply(this, arguments);
220
236
  }
221
237
  function _queuedRender3() {
@@ -234,12 +250,14 @@ function _queuedRender3() {
234
250
  });
235
251
  return _queuedRender3.apply(this, arguments);
236
252
  }
237
- function _render2(_x2) {
253
+ function _render2(_x4) {
238
254
  return _render3.apply(this, arguments);
239
255
  }
240
256
  function _render3() {
241
257
  _render3 = _asyncToGenerator(function* (location) {
242
- var _hooks$flowApi, _classPrivateFieldGet5;
258
+ var _hooks$flowApi,
259
+ _classPrivateFieldGet6,
260
+ _this2 = this;
243
261
  _classPrivateFieldSet(this, _renderId, uniqueId("render-id-1"));
244
262
  resetAllComputedMarks();
245
263
  clearResolveCache();
@@ -248,7 +266,7 @@ function _render3() {
248
266
  history.unblock();
249
267
  var renderStartTime = performance.now();
250
268
  var storyboard = matchStoryboard(_classPrivateFieldGet(this, _storyboards), location.pathname);
251
- var previousApp = (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _runtimeContext)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.app;
269
+ var previousApp = (_classPrivateFieldGet6 = _classPrivateFieldGet(this, _runtimeContext)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.app;
252
270
  if (storyboard !== null && storyboard !== void 0 && storyboard.app) {
253
271
  yield fulfilStoryboard(storyboard);
254
272
  }
@@ -309,7 +327,58 @@ function _render3() {
309
327
  if (currentApp) {
310
328
  var _hooks$checkInstalled, _hooks$auth, _hooks$checkPermissio, _storyboard$meta, _hooks$flowApi2, _storyboard$meta2;
311
329
  hooks === null || hooks === void 0 || (_hooks$checkInstalled = hooks.checkInstalledApps) === null || _hooks$checkInstalled === void 0 ? void 0 : _hooks$checkInstalled.preCheckInstalledApps(storyboard, appId => !!_internalApiGetAppInBootstrapData(appId));
312
- var rendererContext = _classPrivateFieldSet(this, _rendererContext, new RendererContext("page"));
330
+ var routeHelper = {
331
+ bailout: output => {
332
+ if (output.unauthenticated) {
333
+ redirectToLogin();
334
+ return true;
335
+ }
336
+ if (output.redirect) {
337
+ redirectTo(output.redirect.path, output.redirect.state);
338
+ return true;
339
+ }
340
+ // Reset redirect count if no redirect is set.
341
+ _classPrivateFieldSet(this, _redirectCount, 0);
342
+ },
343
+ mergeMenus: function () {
344
+ var _ref2 = _asyncToGenerator(function* (menuRequests) {
345
+ var menuConfs = yield Promise.all(menuRequests);
346
+ _classPrivateFieldSet(_this2, _navConfig, mergeMenuConfs(menuConfs));
347
+ });
348
+ return function mergeMenus(_x5) {
349
+ return _ref2.apply(this, arguments);
350
+ };
351
+ }(),
352
+ catch: (error, returnNode) => {
353
+ if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {
354
+ redirectToLogin();
355
+ return;
356
+ } else if (error instanceof HttpAbortError) {
357
+ _classPrivateFieldGet(this, _rendererContextTrashCan).add(prevRendererContext);
358
+ return;
359
+ } else {
360
+ return {
361
+ failed: true,
362
+ output: {
363
+ node: {
364
+ tag: RenderTag.BRICK,
365
+ type: "div",
366
+ properties: {
367
+ textContent: httpErrorToString(error)
368
+ },
369
+ runtimeContext: null,
370
+ return: returnNode
371
+ },
372
+ blockingList: [],
373
+ menuRequests: []
374
+ }
375
+ };
376
+ }
377
+ }
378
+ };
379
+ var rendererContext = _classPrivateFieldSet(this, _rendererContext, new RendererContext("page", {
380
+ routeHelper
381
+ }));
313
382
  var runtimeContext = _classPrivateFieldSet(this, _runtimeContext, {
314
383
  app: currentApp,
315
384
  location,
@@ -333,47 +402,25 @@ function _render3() {
333
402
  var output;
334
403
  var stores = [];
335
404
  try {
336
- output = yield renderRoutes(renderRoot, insertPreviewRoutes(storyboard.routes), runtimeContext, rendererContext);
337
- if (output.unauthenticated) {
338
- redirectToLogin();
339
- return;
340
- }
341
- if (output.redirect) {
342
- redirectTo(output.redirect.path, output.redirect.state);
405
+ output = yield renderRoutes(renderRoot, insertPreviewRoutes(storyboard.routes), runtimeContext, rendererContext, []);
406
+ if (routeHelper.bailout(output)) {
343
407
  return;
344
408
  }
345
- // Reset redirect count if no redirect is set.
346
- _classPrivateFieldSet(this, _redirectCount, 0);
347
- flushStableLoadBricks();
348
- stores = [runtimeContext.ctxStore, ...runtimeContext.tplStateStoreMap.values(), ...runtimeContext.formStateStoreMap.values()];
349
- yield Promise.all([...output.blockingList, ...stores.map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck]);
350
- var menuConfs = yield Promise.all(output.menuRequests);
351
- _classPrivateFieldSet(this, _navConfig, mergeMenuConfs(menuConfs));
409
+ stores = getDataStores(runtimeContext);
410
+ yield postAsyncRender(output, runtimeContext, stores);
411
+ yield routeHelper.mergeMenus(output.menuRequests);
412
+ rendererContext.setInitialMenuRequests(output.menuRequests);
352
413
  } catch (error) {
353
414
  // eslint-disable-next-line no-console
354
415
  console.error("Router failed:", error);
355
- if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {
356
- redirectToLogin();
416
+ var result = routeHelper.catch(error, renderRoot);
417
+ if (!result) {
357
418
  return;
358
- } else if (error instanceof HttpAbortError) {
359
- _classPrivateFieldGet(this, _rendererContextTrashCan).add(prevRendererContext);
360
- return;
361
- } else {
362
- failed = true;
363
- output = {
364
- node: {
365
- tag: RenderTag.BRICK,
366
- type: "div",
367
- properties: {
368
- textContent: httpErrorToString(error)
369
- },
370
- runtimeContext: null,
371
- return: renderRoot
372
- },
373
- blockingList: [],
374
- menuRequests: []
375
- };
376
419
  }
420
+ ({
421
+ failed,
422
+ output
423
+ } = result);
377
424
  }
378
425
  renderRoot.child = output.node;
379
426
  cleanUpPreviousRender();
@@ -390,15 +437,15 @@ function _render3() {
390
437
  // See https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md
391
438
  window.scrollTo(0, 0);
392
439
  if (!failed) {
393
- for (var store of stores) {
394
- store.handleAsyncAfterMount();
395
- }
396
440
  rendererContext.dispatchPageLoad();
397
441
  rendererContext.dispatchAnchorLoad();
398
442
  rendererContext.dispatchOnMount();
399
443
  rendererContext.initializeScrollIntoView();
400
444
  rendererContext.initializeMediaChange();
401
445
  rendererContext.initializeMessageDispatcher();
446
+ for (var store of stores) {
447
+ store.mountAsyncData();
448
+ }
402
449
  }
403
450
  var renderTime = performance.now() - renderStartTime;
404
451
  window.dispatchEvent(new CustomEvent("route.render", {
@@ -440,16 +487,14 @@ function mergeMenuConfs(menuConfs) {
440
487
  breadcrumb: []
441
488
  };
442
489
  for (var menuConf of menuConfs) {
443
- if (menuConf) {
444
- var {
445
- breadcrumb
446
- } = menuConf;
447
- if (breadcrumb) {
448
- if (breadcrumb.overwrite) {
449
- navConfig.breadcrumb = breadcrumb.items;
450
- } else {
451
- navConfig.breadcrumb.push(...breadcrumb.items);
452
- }
490
+ var {
491
+ breadcrumb
492
+ } = menuConf;
493
+ if (breadcrumb) {
494
+ if (breadcrumb.overwrite) {
495
+ navConfig.breadcrumb = breadcrumb.items;
496
+ } else {
497
+ navConfig.breadcrumb.push(...breadcrumb.items);
453
498
  }
454
499
  }
455
500
  }