@next-core/runtime 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/createRoot.js +5 -2
- package/dist/cjs/createRoot.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +5 -1
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/RendererContext.js +4 -1
- package/dist/cjs/internal/RendererContext.js.map +1 -1
- package/dist/esm/createRoot.js +5 -2
- package/dist/esm/createRoot.js.map +1 -1
- package/dist/esm/internal/Renderer.js +5 -1
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/RendererContext.js +4 -1
- package/dist/esm/internal/RendererContext.js.map +1 -1
- package/dist/types/createRoot.d.ts +7 -1
- package/dist/types/internal/RendererContext.d.ts +5 -1
- package/package.json +2 -2
package/dist/cjs/createRoot.js
CHANGED
|
@@ -17,7 +17,8 @@ var _registerAppI18n = require("./internal/registerAppI18n.js");
|
|
|
17
17
|
var _registerCustomTemplates = require("./internal/registerCustomTemplates.js");
|
|
18
18
|
function unstable_createRoot(container, {
|
|
19
19
|
portal: _portal,
|
|
20
|
-
scope = "fragment"
|
|
20
|
+
scope = "fragment",
|
|
21
|
+
unknownBricks
|
|
21
22
|
} = {}) {
|
|
22
23
|
let portal = _portal;
|
|
23
24
|
let createPortal;
|
|
@@ -54,7 +55,9 @@ function unstable_createRoot(container, {
|
|
|
54
55
|
tplStateStoreMap: new Map()
|
|
55
56
|
};
|
|
56
57
|
const previousRendererContext = rendererContext;
|
|
57
|
-
rendererContext = new _RendererContext.RendererContext(scope
|
|
58
|
+
rendererContext = new _RendererContext.RendererContext(scope, {
|
|
59
|
+
unknownBricks
|
|
60
|
+
});
|
|
58
61
|
const renderRoot = {
|
|
59
62
|
tag: _enums.RenderTag.ROOT,
|
|
60
63
|
container,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRoot.js","names":["_loader","require","_Renderer","_RendererContext","_DataStore","_mount","_handleHttpError","_themeAndMode","_enums","_StoryboardFunctions","_registerAppI18n","_registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","runtimeContext","ctxStore","DataStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","registerAppI18n","registerCustomTemplates","registerStoryboardFunctions","define","failed","output","renderBricks","flushStableLoadBricks","Promise","all","blockingList","waitForAll","values","map","store","error","node","BRICK","type","properties","textContent","httpErrorToString","return","menuRequests","child","dispatchOnUnmount","dispose","unmountTree","setTheme","setMode","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","window","scrollTo","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","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 { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } 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 { httpErrorToString } from \"./handleHttpError.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\";\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\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement,\n { portal: _portal, scope = \"fragment\" }: 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 context,\n functions,\n templates,\n i18n: i18nData,\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 const runtimeContext = {\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope);\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\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, demoApp);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n runtimeContext.ctxStore.waitForAll(),\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\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 setTheme(theme ?? \"light\");\n setMode(\"default\");\n\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 if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\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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"}
|
|
1
|
+
{"version":3,"file":"createRoot.js","names":["_loader","require","_Renderer","_RendererContext","_DataStore","_mount","_handleHttpError","_themeAndMode","_enums","_StoryboardFunctions","_registerAppI18n","_registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","unknownBricks","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","runtimeContext","ctxStore","DataStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","registerAppI18n","registerCustomTemplates","registerStoryboardFunctions","define","failed","output","renderBricks","flushStableLoadBricks","Promise","all","blockingList","waitForAll","values","map","store","error","node","BRICK","type","properties","textContent","httpErrorToString","return","menuRequests","child","dispatchOnUnmount","dispose","unmountTree","setTheme","setMode","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","window","scrollTo","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","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 { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } 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 { httpErrorToString } from \"./handleHttpError.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\";\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\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement,\n { portal: _portal, scope = \"fragment\", unknownBricks }: 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 context,\n functions,\n templates,\n i18n: i18nData,\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 const runtimeContext = {\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope, { unknownBricks });\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\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, demoApp);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n runtimeContext.ctxStore.waitForAll(),\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\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 setTheme(theme ?? \"light\");\n setMode(\"default\");\n\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 if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\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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"}
|
|
@@ -228,7 +228,11 @@ async function renderBrick(returnNode, brickConf, _runtimeContext, rendererConte
|
|
|
228
228
|
}
|
|
229
229
|
tplStack.set(tplTagName, tplCount + 1);
|
|
230
230
|
} else if (brickName.includes("-") && !customElements.get(brickName)) {
|
|
231
|
-
|
|
231
|
+
const promise = (0, _loader.enqueueStableLoadBricks)([brickName], (0, _Runtime.getBrickPackages)());
|
|
232
|
+
output.blockingList.push(rendererContext.unknownBricks === "silent" ? promise.catch(e => {
|
|
233
|
+
// eslint-disable-next-line no-console
|
|
234
|
+
console.error(`Load brick "${brickName}" failed:`, e);
|
|
235
|
+
}) : promise);
|
|
232
236
|
}
|
|
233
237
|
const brick = {
|
|
234
238
|
tag: _enums.RenderTag.BRICK,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["_loader","require","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_checkPermissions","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","preCheckPermissionsForBrickOrRoute","type","redirectTo","redirect","asyncComputeRealValue","resolved","resolveData","transform","console","error","Error","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","key","_runtimeContext$app","brick","template","tplStateStoreId","symbolForTplStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","Array","isArray","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","loadBricksImperatively","getBrickPackages","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","enqueueStableLoadBricks","tag","RenderTag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","properties","asyncComputeRealProperties","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","listenOnTrackingContext","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","expandCustomTemplate","undefined","childRuntimeContext","loadChildren","childSlotId","slotConf","childrenOutput","child","i","j","flat","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n output.blockingList.push(\n enqueueStableLoadBricks([brickName], getBrickPackages())\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["_loader","require","_general","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_checkPermissions","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","matchRoutes","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","match","ctxStore","define","context","pendingPermissionsPreCheck","push","preCheckPermissionsForBrickOrRoute","type","redirectTo","redirect","asyncComputeRealValue","resolved","resolveData","transform","console","error","Error","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","key","_runtimeContext$app","brick","template","tplStateStoreId","symbolForTplStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","Array","isArray","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","debounce","contextName","onChange","tplStateStore","getTplStateStore","test","customTemplates","get","loadBricksImperatively","getBrickPackages","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","promise","enqueueStableLoadBricks","unknownBricks","catch","e","tag","RenderTag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","properties","asyncComputeRealProperties","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","listenOnTrackingContext","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","expandCustomTemplate","undefined","childRuntimeContext","loadChildren","childSlotId","slotConf","childrenOutput","child","i","j","flat","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n const promise = enqueueStableLoadBricks([brickName], getBrickPackages());\n output.blockingList.push(\n rendererContext.unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
|
|
@@ -35,13 +35,15 @@ class RendererContext {
|
|
|
35
35
|
* - fragment: render as fragment, not triggering page life cycles.
|
|
36
36
|
*/
|
|
37
37
|
|
|
38
|
-
constructor(scope) {
|
|
38
|
+
constructor(scope, options) {
|
|
39
|
+
var _options$unknownBrick;
|
|
39
40
|
(0, _classPrivateMethodInitSpec2.default)(this, _addObserver);
|
|
40
41
|
// Note: no `onScrollIntoView`
|
|
41
42
|
(0, _classPrivateMethodInitSpec2.default)(this, _dispatchGeneralLifeCycle);
|
|
42
43
|
(0, _classPrivateMethodInitSpec2.default)(this, _initializeRerenderBricks);
|
|
43
44
|
(0, _classPrivateMethodInitSpec2.default)(this, _unmountBricks);
|
|
44
45
|
(0, _defineProperty2.default)(this, "scope", void 0);
|
|
46
|
+
(0, _defineProperty2.default)(this, "unknownBricks", void 0);
|
|
45
47
|
(0, _classPrivateFieldInitSpec2.default)(this, _memoizedLifeCycle, {
|
|
46
48
|
writable: true,
|
|
47
49
|
value: {
|
|
@@ -71,6 +73,7 @@ class RendererContext {
|
|
|
71
73
|
value: void 0
|
|
72
74
|
});
|
|
73
75
|
this.scope = scope;
|
|
76
|
+
this.unknownBricks = (_options$unknownBrick = options === null || options === void 0 ? void 0 : options.unknownBricks) !== null && _options$unknownBrick !== void 0 ? _options$unknownBrick : "throw";
|
|
74
77
|
}
|
|
75
78
|
registerBrickLifeCycle(brick, lifeCycle) {
|
|
76
79
|
if (!lifeCycle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RendererContext.js","names":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","Map","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet2","push","isEmpty","useResolves","console","error","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet2","memKey","mem","get","set","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","RenderTag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet2","_unmountBricks2","call","mountTree","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","getReadOnlyProxy","addEventListener","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","observers","delete","unbindTemplateProxy","$$tplStateStore","unmountEvent","listenerFactory","runtimeContext","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","Set","add","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n ScrollIntoViewConf,\n UseBrickLifeCycle,\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\";\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] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\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 constructor(scope: \"page\" | \"fragment\") {\n this.scope = scope;\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 // Omitted:\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 };\n // #observers: IntersectionObserver[] = [];\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\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 | UseBrickLifeCycle | 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 #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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\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 }\n\n // Note: no `onScrollIntoView`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMount\"\n | \"onUnmount\",\n event: CustomEvent\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 }\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 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":["_lodash","require","_bindListeners","_history","_proxyFactories","_mediaQuery","_mount","_enums","_bindTemplateProxy","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","options","_options$unknownBrick","_classPrivateMethodInitSpec2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet2","push","isEmpty","useResolves","console","error","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet2","memKey","mem","get","set","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","RenderTag","ROOT","container","createPortal","return","removeBricks","getBrickRange","_classPrivateMethodGet2","_unmountBricks2","call","mountTree","_returnNode$container","insertBefore","_returnNode$element","childNodes","length","_root","root","Error","portal","newBricks","_initializeRerenderBricks2","dispose","list","Object","values","observer","disconnect","clear","mediaEventTarget","removeEventListener","undefined","dispatchBeforePageLoad","_dispatchGeneralLifeCycle2","CustomEvent","dispatchPageLoad","event","window","dispatchEvent","dispatchBeforePageLeave","detail","dispatchPageLeave","dispatchAnchorLoad","hash","getHistory","location","anchor","substring","initializeScrollIntoView","conf","_addObserver2","initializeMediaChange","getReadOnlyProxy","addEventListener","dispatchOnMount","dispatchOnUnmount","exports","bricks","unmountList","removed","remove","item","has","_brick$element","_brick$element2","observers","delete","unbindTemplateProxy","$$tplStateStore","unmountEvent","listenerFactory","runtimeContext","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","Set","add","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n ScrollIntoViewConf,\n UseBrickLifeCycle,\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\";\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] 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 // Omitted:\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 };\n // #observers: IntersectionObserver[] = [];\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\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 | UseBrickLifeCycle | 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 #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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\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 }\n\n // Note: no `onScrollIntoView`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMount\"\n | \"onUnmount\",\n event: CustomEvent\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 }\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 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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"}
|
package/dist/esm/createRoot.js
CHANGED
|
@@ -13,7 +13,8 @@ import { registerCustomTemplates } from "./internal/registerCustomTemplates.js";
|
|
|
13
13
|
export function unstable_createRoot(container) {
|
|
14
14
|
var {
|
|
15
15
|
portal: _portal,
|
|
16
|
-
scope = "fragment"
|
|
16
|
+
scope = "fragment",
|
|
17
|
+
unknownBricks
|
|
17
18
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
18
19
|
var portal = _portal;
|
|
19
20
|
var createPortal;
|
|
@@ -53,7 +54,9 @@ export function unstable_createRoot(container) {
|
|
|
53
54
|
tplStateStoreMap: new Map()
|
|
54
55
|
};
|
|
55
56
|
var previousRendererContext = rendererContext;
|
|
56
|
-
rendererContext = new RendererContext(scope
|
|
57
|
+
rendererContext = new RendererContext(scope, {
|
|
58
|
+
unknownBricks
|
|
59
|
+
});
|
|
57
60
|
var renderRoot = {
|
|
58
61
|
tag: RenderTag.ROOT,
|
|
59
62
|
container,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRoot.js","names":["flushStableLoadBricks","renderBricks","RendererContext","DataStore","mountTree","unmountTree","httpErrorToString","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","_arguments","_asyncToGenerator","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","renderRoot","tag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","define","failed","output","Promise","all","blockingList","waitForAll","values","map","store","error","node","BRICK","type","properties","textContent","return","menuRequests","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","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 { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } 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 { httpErrorToString } from \"./handleHttpError.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\";\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\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement,\n { portal: _portal, scope = \"fragment\" }: 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 context,\n functions,\n templates,\n i18n: i18nData,\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 const runtimeContext = {\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope);\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\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, demoApp);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n runtimeContext.ctxStore.waitForAll(),\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\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 setTheme(theme ?? \"light\");\n setMode(\"default\");\n\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 if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\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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"}
|
|
1
|
+
{"version":3,"file":"createRoot.js","names":["flushStableLoadBricks","renderBricks","RendererContext","DataStore","mountTree","unmountTree","httpErrorToString","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","unknownBricks","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","_arguments","_asyncToGenerator","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","renderRoot","tag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","define","failed","output","Promise","all","blockingList","waitForAll","values","map","store","error","node","BRICK","type","properties","textContent","return","menuRequests","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","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 { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } 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 { httpErrorToString } from \"./handleHttpError.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\";\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\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement,\n { portal: _portal, scope = \"fragment\", unknownBricks }: 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 context,\n functions,\n templates,\n i18n: i18nData,\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 const runtimeContext = {\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope, { unknownBricks });\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\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, demoApp);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n runtimeContext.ctxStore.waitForAll(),\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\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 setTheme(theme ?? \"light\");\n setMode(\"default\");\n\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 if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\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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"}
|
|
@@ -247,7 +247,11 @@ function _renderBrick() {
|
|
|
247
247
|
}
|
|
248
248
|
tplStack.set(tplTagName, tplCount + 1);
|
|
249
249
|
} else if (brickName.includes("-") && !customElements.get(brickName)) {
|
|
250
|
-
|
|
250
|
+
var promise = enqueueStableLoadBricks([brickName], getBrickPackages());
|
|
251
|
+
output.blockingList.push(rendererContext.unknownBricks === "silent" ? promise.catch(e => {
|
|
252
|
+
// eslint-disable-next-line no-console
|
|
253
|
+
console.error("Load brick \"".concat(brickName, "\" failed:"), e);
|
|
254
|
+
}) : promise);
|
|
251
255
|
}
|
|
252
256
|
var brick = {
|
|
253
257
|
tag: RenderTag.BRICK,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","preCheckPermissionsForBrickOrRoute","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_runtimeContext$app","length","undefined","brick","template","tplStateStoreId","forEachItem","Array","isArray","strict","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","tag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","_ref3","properties","computedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref4","_ref5","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_objectWithoutProperties","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n output.blockingList.push(\n enqueueStableLoadBricks([brickName], getBrickPackages())\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","preCheckPermissionsForBrickOrRoute","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_runtimeContext$app","length","undefined","brick","template","tplStateStoreId","forEachItem","Array","isArray","strict","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","promise","unknownBricks","catch","e","tag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","_ref3","properties","computedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref4","_ref5","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_objectWithoutProperties","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n const promise = enqueueStableLoadBricks([brickName], getBrickPackages());\n output.blockingList.push(\n rendererContext.unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
|
|
@@ -28,13 +28,15 @@ export class RendererContext {
|
|
|
28
28
|
* - fragment: render as fragment, not triggering page life cycles.
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
-
constructor(scope) {
|
|
31
|
+
constructor(scope, options) {
|
|
32
|
+
var _options$unknownBrick;
|
|
32
33
|
_classPrivateMethodInitSpec(this, _addObserver);
|
|
33
34
|
// Note: no `onScrollIntoView`
|
|
34
35
|
_classPrivateMethodInitSpec(this, _dispatchGeneralLifeCycle);
|
|
35
36
|
_classPrivateMethodInitSpec(this, _initializeRerenderBricks);
|
|
36
37
|
_classPrivateMethodInitSpec(this, _unmountBricks);
|
|
37
38
|
_defineProperty(this, "scope", void 0);
|
|
39
|
+
_defineProperty(this, "unknownBricks", void 0);
|
|
38
40
|
_classPrivateFieldInitSpec(this, _memoizedLifeCycle, {
|
|
39
41
|
writable: true,
|
|
40
42
|
value: {
|
|
@@ -64,6 +66,7 @@ export class RendererContext {
|
|
|
64
66
|
value: void 0
|
|
65
67
|
});
|
|
66
68
|
this.scope = scope;
|
|
69
|
+
this.unknownBricks = (_options$unknownBrick = options === null || options === void 0 ? void 0 : options.unknownBricks) !== null && _options$unknownBrick !== void 0 ? _options$unknownBrick : "throw";
|
|
67
70
|
}
|
|
68
71
|
registerBrickLifeCycle(brick, lifeCycle) {
|
|
69
72
|
if (!lifeCycle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RendererContext.js","names":["isEmpty","remove","listenerFactory","getHistory","getReadOnlyProxy","mediaEventTarget","mountTree","RenderTag","unbindTemplateProxy","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_memoizedControlNodes","_unmountBricks","WeakSet","_initializeRerenderBricks","_dispatchGeneralLifeCycle","_addObserver","RendererContext","constructor","scope","_classPrivateMethodInitSpec","_defineProperty","_classPrivateFieldInitSpec","writable","value","onBeforePageLoad","onPageLoad","onPageLeave","onBeforePageLeave","onAnchorLoad","onAnchorUnload","onMediaChange","onScrollIntoView","onMount","onUnmount","Map","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet","push","useResolves","console","error","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet","memKey","concat","mem","get","set","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","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","observers","delete","$$tplStateStore","unmountEvent","runtimeContext","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","Set","add","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n ScrollIntoViewConf,\n UseBrickLifeCycle,\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\";\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] as const;\n\nconst pageOnlyLifeCycles = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onPageLeave\",\n \"onBeforePageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as const;\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 constructor(scope: \"page\" | \"fragment\") {\n this.scope = scope;\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 // Omitted:\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 };\n // #observers: IntersectionObserver[] = [];\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\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 | UseBrickLifeCycle | 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 #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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\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 }\n\n // Note: no `onScrollIntoView`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMount\"\n | \"onUnmount\",\n event: CustomEvent\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 }\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 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","commonLifeCycles","pageOnlyLifeCycles","_memoizedLifeCycle","WeakMap","_observers","_mediaListener","_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","Map","unknownBricks","registerBrickLifeCycle","brick","lifeCycle","lifeCycleTypes","key","handlers","_classPrivateFieldGet","push","useResolves","console","error","memoizeControlNode","slotId","node","returnNode","_classPrivateFieldSet","memKey","concat","mem","get","set","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","dispatchOnMount","dispatchOnUnmount","bricks","unmountList","removed","item","has","_brick$element","_brick$element2","observers","delete","$$tplStateStore","unmountEvent","runtimeContext","mountEvent","type","process","env","NODE_ENV","includes","_conf$threshold","threshold","IntersectionObserver","entries","forEach","entry","isIntersecting","intersectionRatio","observe","_last","_currentReturn","currentReturn","from","to","range","Set","add","_currentReturn2"],"sources":["../../../src/internal/RendererContext.ts"],"sourcesContent":["import type {\n BrickEventHandler,\n BrickLifeCycle,\n ScrollIntoViewConf,\n UseBrickLifeCycle,\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\";\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] 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 // Omitted:\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 };\n // #observers: IntersectionObserver[] = [];\n #observers = new Map<RenderBrick, IntersectionObserver[]>();\n #mediaListener: EventListener | undefined;\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 | UseBrickLifeCycle | 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 #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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n if (!this.#memoizedControlNodes) {\n this.#memoizedControlNodes = new WeakMap();\n }\n const memKey = `${slotId ?? \"\"}.${key}`;\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 key: number,\n node: RenderBrick | undefined,\n returnNode: RenderNode\n ) {\n const memKey = `${slotId ?? \"\"}.${key}`;\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 }\n\n // Note: no `onScrollIntoView`\n #dispatchGeneralLifeCycle(\n type:\n | \"onBeforePageLoad\"\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onBeforePageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMediaChange\"\n | \"onMount\"\n | \"onUnmount\",\n event: CustomEvent\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 }\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 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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"}
|
|
@@ -7,6 +7,12 @@ export interface CreateRootOptions {
|
|
|
7
7
|
* - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.
|
|
8
8
|
*/
|
|
9
9
|
scope?: "page" | "fragment";
|
|
10
|
+
/**
|
|
11
|
+
* Whether to throw error when encountering unknown bricks.
|
|
12
|
+
*
|
|
13
|
+
* Defaults to "throw".
|
|
14
|
+
*/
|
|
15
|
+
unknownBricks?: "silent" | "throw";
|
|
10
16
|
}
|
|
11
17
|
export interface RenderOptions {
|
|
12
18
|
theme?: SiteTheme;
|
|
@@ -15,7 +21,7 @@ export interface RenderOptions {
|
|
|
15
21
|
templates?: CustomTemplate[];
|
|
16
22
|
i18n?: MetaI18n;
|
|
17
23
|
}
|
|
18
|
-
export declare function unstable_createRoot(container: HTMLElement, { portal: _portal, scope }?: CreateRootOptions): {
|
|
24
|
+
export declare function unstable_createRoot(container: HTMLElement, { portal: _portal, scope, unknownBricks }?: CreateRootOptions): {
|
|
19
25
|
render(brick: BrickConf | BrickConf[], { theme, context, functions, templates, i18n: i18nData, }?: RenderOptions): Promise<void>;
|
|
20
26
|
unmount(): void;
|
|
21
27
|
};
|
|
@@ -2,6 +2,9 @@ import type { BrickLifeCycle, UseBrickLifeCycle } from "@next-core/types";
|
|
|
2
2
|
import type { Action } from "history";
|
|
3
3
|
import { NextLocation } from "../history.js";
|
|
4
4
|
import type { RenderBrick, RenderNode } from "./interfaces.js";
|
|
5
|
+
export interface RendererContextOptions {
|
|
6
|
+
unknownBricks?: "silent" | "throw";
|
|
7
|
+
}
|
|
5
8
|
export declare class RendererContext {
|
|
6
9
|
#private;
|
|
7
10
|
/**
|
|
@@ -9,7 +12,8 @@ export declare class RendererContext {
|
|
|
9
12
|
* - fragment: render as fragment, not triggering page life cycles.
|
|
10
13
|
*/
|
|
11
14
|
readonly scope: "page" | "fragment";
|
|
12
|
-
|
|
15
|
+
readonly unknownBricks: "silent" | "throw";
|
|
16
|
+
constructor(scope: "page" | "fragment", options?: RendererContextOptions);
|
|
13
17
|
registerBrickLifeCycle(brick: RenderBrick, lifeCycle: BrickLifeCycle | UseBrickLifeCycle | undefined): void;
|
|
14
18
|
memoizeControlNode(slotId: string | undefined, key: number, node: RenderBrick | undefined, returnNode: RenderNode): void;
|
|
15
19
|
rerenderControlNode(slotId: string | undefined, key: number, node: RenderBrick | undefined, returnNode: RenderNode): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/runtime",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/master/packages/runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"@next-core/build-next-libs": "^1.0.3",
|
|
68
68
|
"@next-core/test-next": "^1.0.4"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "0ee94b4fbcae1737e3270d57f490e617e9c72c7d"
|
|
71
71
|
}
|