@next-core/runtime 1.4.1 → 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 +44 -5
- 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/cjs/internal/registerAppI18n.js +7 -0
- package/dist/cjs/internal/registerAppI18n.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/esm/createRoot.js +44 -5
- 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/esm/internal/registerAppI18n.js +7 -0
- package/dist/esm/internal/registerAppI18n.js.map +1 -1
- package/dist/esm/internal/secret_internals.js.map +1 -1
- package/dist/types/createRoot.d.ts +16 -6
- package/dist/types/internal/RendererContext.d.ts +5 -1
- package/dist/types/internal/registerAppI18n.d.ts +2 -2
- package/dist/types/internal/secret_internals.d.ts +1 -1
- package/package.json +2 -2
package/dist/cjs/createRoot.js
CHANGED
|
@@ -7,13 +7,18 @@ exports.unstable_createRoot = unstable_createRoot;
|
|
|
7
7
|
var _loader = require("@next-core/loader");
|
|
8
8
|
var _Renderer = require("./internal/Renderer.js");
|
|
9
9
|
var _RendererContext = require("./internal/RendererContext.js");
|
|
10
|
+
var _DataStore = require("./internal/data/DataStore.js");
|
|
10
11
|
var _mount = require("./internal/mount.js");
|
|
11
12
|
var _handleHttpError = require("./handleHttpError.js");
|
|
12
13
|
var _themeAndMode = require("./themeAndMode.js");
|
|
13
14
|
var _enums = require("./internal/enums.js");
|
|
15
|
+
var _StoryboardFunctions = require("./internal/compute/StoryboardFunctions.js");
|
|
16
|
+
var _registerAppI18n = require("./internal/registerAppI18n.js");
|
|
17
|
+
var _registerCustomTemplates = require("./internal/registerCustomTemplates.js");
|
|
14
18
|
function unstable_createRoot(container, {
|
|
15
19
|
portal: _portal,
|
|
16
|
-
scope = "fragment"
|
|
20
|
+
scope = "fragment",
|
|
21
|
+
unknownBricks
|
|
17
22
|
} = {}) {
|
|
18
23
|
let portal = _portal;
|
|
19
24
|
let createPortal;
|
|
@@ -31,32 +36,65 @@ function unstable_createRoot(container, {
|
|
|
31
36
|
}
|
|
32
37
|
let unmounted = false;
|
|
33
38
|
let rendererContext;
|
|
39
|
+
let clearI18nBundles;
|
|
34
40
|
return {
|
|
35
41
|
async render(brick, {
|
|
36
|
-
theme
|
|
42
|
+
theme,
|
|
43
|
+
context,
|
|
44
|
+
functions,
|
|
45
|
+
templates,
|
|
46
|
+
i18n: i18nData
|
|
37
47
|
} = {}) {
|
|
38
48
|
if (unmounted) {
|
|
39
49
|
throw new Error("The root is unmounted and cannot be rendered any more");
|
|
40
50
|
}
|
|
41
51
|
const bricks = [].concat(brick);
|
|
42
52
|
const runtimeContext = {
|
|
53
|
+
ctxStore: new _DataStore.DataStore("CTX"),
|
|
43
54
|
pendingPermissionsPreCheck: [],
|
|
44
55
|
tplStateStoreMap: new Map()
|
|
45
56
|
};
|
|
46
57
|
const previousRendererContext = rendererContext;
|
|
47
|
-
rendererContext = new _RendererContext.RendererContext(scope
|
|
58
|
+
rendererContext = new _RendererContext.RendererContext(scope, {
|
|
59
|
+
unknownBricks
|
|
60
|
+
});
|
|
48
61
|
const renderRoot = {
|
|
49
62
|
tag: _enums.RenderTag.ROOT,
|
|
50
63
|
container,
|
|
51
64
|
createPortal
|
|
52
65
|
};
|
|
66
|
+
if (scope === "page") {
|
|
67
|
+
var _clearI18nBundles;
|
|
68
|
+
const demoApp = {
|
|
69
|
+
id: "demo",
|
|
70
|
+
homepage: "/demo"
|
|
71
|
+
};
|
|
72
|
+
runtimeContext.app = demoApp;
|
|
73
|
+
const demoStoryboard = {
|
|
74
|
+
app: demoApp,
|
|
75
|
+
meta: {
|
|
76
|
+
i18n: i18nData,
|
|
77
|
+
customTemplates: templates
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Register i18n.
|
|
82
|
+
(_clearI18nBundles = clearI18nBundles) === null || _clearI18nBundles === void 0 ? void 0 : _clearI18nBundles();
|
|
83
|
+
clearI18nBundles = (0, _registerAppI18n.registerAppI18n)(demoStoryboard);
|
|
84
|
+
|
|
85
|
+
// Register custom templates.
|
|
86
|
+
(0, _registerCustomTemplates.registerCustomTemplates)(demoStoryboard);
|
|
87
|
+
|
|
88
|
+
// Register functions.
|
|
89
|
+
(0, _StoryboardFunctions.registerStoryboardFunctions)(functions, demoApp);
|
|
90
|
+
}
|
|
91
|
+
runtimeContext.ctxStore.define(context, runtimeContext);
|
|
53
92
|
let failed = false;
|
|
54
93
|
let output;
|
|
55
94
|
try {
|
|
56
95
|
output = await (0, _Renderer.renderBricks)(renderRoot, bricks, runtimeContext, rendererContext);
|
|
57
|
-
output.blockingList.push(...[...runtimeContext.tplStateStoreMap.values()].map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck);
|
|
58
96
|
(0, _loader.flushStableLoadBricks)();
|
|
59
|
-
await Promise.all(output.blockingList);
|
|
97
|
+
await Promise.all([...output.blockingList, runtimeContext.ctxStore.waitForAll(), ...[...runtimeContext.tplStateStoreMap.values()].map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck]);
|
|
60
98
|
} catch (error) {
|
|
61
99
|
failed = true;
|
|
62
100
|
output = {
|
|
@@ -74,6 +112,7 @@ function unstable_createRoot(container, {
|
|
|
74
112
|
};
|
|
75
113
|
}
|
|
76
114
|
renderRoot.child = output.node;
|
|
115
|
+
previousRendererContext === null || previousRendererContext === void 0 ? void 0 : previousRendererContext.dispatchOnUnmount();
|
|
77
116
|
previousRendererContext === null || previousRendererContext === void 0 ? void 0 : previousRendererContext.dispose();
|
|
78
117
|
(0, _mount.unmountTree)(container);
|
|
79
118
|
if (portal) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRoot.js","names":["_loader","require","_Renderer","_RendererContext","_mount","_handleHttpError","_themeAndMode","_enums","unstable_createRoot","container","portal","_portal","scope","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","render","brick","theme","Error","bricks","concat","runtimeContext","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","failed","output","renderBricks","blockingList","push","values","map","store","waitForAll","flushStableLoadBricks","Promise","all","error","node","BRICK","type","properties","textContent","httpErrorToString","return","menuRequests","child","dispose","unmountTree","setTheme","setMode","dispatchBeforePageLoad","applyTheme","applyMode","mountTree","window","scrollTo","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type { BrickConf, SiteTheme } from \"@next-core/types\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport type { 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\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\"\n * - page: render as whole page, triggering page life cycles.\n * - fragment: render as fragment, not triggering page life cycles.\n */\n scope?: \"page\" | \"fragment\";\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\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\n return {\n async render(\n brick: BrickConf | BrickConf[],\n { theme }: 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 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 let failed = false;\n let output: RenderOutput;\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext\n );\n\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n\n flushStableLoadBricks();\n\n await Promise.all(output.blockingList);\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?.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":";;;;;;;;;;;;;AAOA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,kBAAA,GAAAP,OAAA;AASA,MAAMQ,gBAAgB,GAAG,CACvB,SAAS,EACT,WAAW,EACX,eAAe,EACf,kBAAkB,CACV;AAEV,MAAMC,kBAAkB,GAAG,CACzB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,gBAAgB,CACR;AAAC,IAAAC,kBAAA,oBAAAC,OAAA;AAAA,IAAAC,UAAA,oBAAAD,OAAA;AAAA,IAAAE,cAAA,oBAAAF,OAAA;AAAA,IAAAG,qBAAA,oBAAAH,OAAA;AAAA,IAAAI,cAAA,oBAAAC,OAAA;AAAA,IAAAC,yBAAA,oBAAAD,OAAA;AAAA,IAAAE,yBAAA,oBAAAF,OAAA;AAAA,IAAAG,YAAA,oBAAAH,OAAA;AAMJ,MAAMI,eAAe,CAAC;EAC3B;AACF;AACA;AACA;;EAKEC,WAAWA,CAACC,KAA0B,EAAEC,OAAgC,EAAE;IAAA,IAAAC,qBAAA;IAAA,IAAAC,4BAAA,CAAAC,OAAA,QAAAP,YAAA;IA6R1E;IAAA,IAAAM,4BAAA,CAAAC,OAAA,QAAAR,yBAAA;IAAA,IAAAO,4BAAA,CAAAC,OAAA,QAAAT,yBAAA;IAAA,IAAAQ,4BAAA,CAAAC,OAAA,QAAAX,cAAA;IAAA,IAAAY,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAE,2BAAA,CAAAF,OAAA,QAAAhB,kBAAA;MAAAmB,QAAA;MAAAC,KAAA,EArQI;QACFC,gBAAgB,EAAE,EAAE;QACpBC,UAAU,EAAE,EAAE;QACdC,WAAW,EAAE,EAAE;QACfC,iBAAiB,EAAE,EAAE;QACrBC,YAAY,EAAE,EAAE;QAChBC,cAAc,EAAE,EAAE;QAClBC,aAAa,EAAE,EAAE;QACjBC,gBAAgB,EAAE,EAAE;QACpBC,OAAO,EAAE,EAAE;QACXC,SAAS,EAAE;MACb;IAAC;IACD;IAAA,IAAAZ,2BAAA,CAAAF,OAAA,QAAAd,UAAA;MAAAiB,QAAA;MAAAC,KAAA,EACa,IAAIW,GAAG;IAAuC;IAAA,IAAAb,2BAAA,CAAAF,OAAA,QAAAb,cAAA;MAAAgB,QAAA;MAAAC,KAAA;IAAA;IAAA,IAAAF,2BAAA,CAAAF,OAAA,QAAAZ,qBAAA;MAAAe,QAAA;MAAAC,KAAA;IAAA;IApCzD,IAAI,CAACR,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACoB,aAAa,IAAAlB,qBAAA,GAAGD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEmB,aAAa,cAAAlB,qBAAA,cAAAA,qBAAA,GAAI,OAAO;EACxD;EAkDAmB,sBAAsBA,CACpBC,KAAkB,EAClBC,SAAyD,EACnD;IACN,IAAI,CAACA,SAAS,EAAE;MACd;IACF;IACA,MAAMC,cAAc,GAAG,CACrB,GAAGtC,gBAAgB,EACnB,IAAI,IAAI,CAACc,KAAK,KAAK,MAAM,GAAGb,kBAAkB,GAAG,EAAE,CAAC,CACrD;IACD,KAAK,MAAMsC,GAAG,IAAID,cAAc,EAAE;MAChC,MAAME,QAAQ,GAAIH,SAAS,CAAoBE,GAAG,CAAiB;MACnE,IAAIC,QAAQ,EAAE;QACZ,IAAAC,sBAAA,CAAAvB,OAAA,MAAI,EAAAhB,kBAAA,EAAoBqC,GAAG,CAAiB,CAACG,IAAI,CAAC;UAChDN,KAAK;UACLI,QAAQ,EAAEA;QACZ,CAAC,CAAC;MACJ;IACF;IACA;IACA,IAAI,CAAC,IAAAG,eAAO,EAAEN,SAAS,CAA+BO,WAAW,CAAC,EAAE;MAClE;MACAC,OAAO,CAACC,KAAK,CAAC,2CAA2C,EAAET,SAAS,CAAC;IACvE;EACF;EAgEAU,kBAAkBA,CAChBC,MAA0B,EAC1BT,GAAW,EACXU,IAA6B,EAC7BC,UAAsB,EACtB;IACA,IAAI,KAAAT,sBAAA,CAAAvB,OAAA,EAAC,IAAI,EAAAZ,qBAAA,CAAsB,EAAE;MAC/B,IAAA6C,sBAAA,CAAAjC,OAAA,MAAI,EAAAZ,qBAAA,EAAyB,IAAIH,OAAO,EAAE;IAC5C;IACA,MAAMiD,MAAM,GAAI,GAAEJ,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAG,IAAGT,GAAI,EAAC;IACvC,IAAIc,GAAG,GAAG,IAAAZ,sBAAA,CAAAvB,OAAA,MAAI,EAAAZ,qBAAA,EAAuBgD,GAAG,CAACJ,UAAU,CAAC;IACpD,IAAI,CAACG,GAAG,EAAE;MACRA,GAAG,GAAG,IAAIpB,GAAG,EAAE;MACf,IAAAQ,sBAAA,CAAAvB,OAAA,MAAI,EAAAZ,qBAAA,EAAuBiD,GAAG,CAACL,UAAU,EAAEG,GAAG,CAAC;IACjD;IAEAA,GAAG,CAACE,GAAG,CAACH,MAAM,EAAE;MACdH,IAAI;MACJO,IAAI,EAAEC,WAAW,CAACR,IAAI,CAAC;MACvBS,UAAU,EAAEC,iBAAiB,CAACV,IAAI,CAAC;MACnCW,UAAU,EAAEC,iBAAiB,CAACZ,IAAI;IACpC,CAAC,CAAC;EACJ;EAEAa,mBAAmBA,CACjBd,MAA0B,EAC1BT,GAAW,EACXU,IAA6B,EAC7BC,UAAsB,EACtB;IAAA,IAAAa,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA;IACA,MAAMd,MAAM,GAAI,GAAEJ,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAG,IAAGT,GAAI,EAAC;IACvC;IACA,MAAM4B,QAAQ,GAAG,IAAA1B,sBAAA,CAAAvB,OAAA,MAAI,EAAAZ,qBAAA,EAAwBgD,GAAG,CAACJ,UAAU,CAAC,CAAEI,GAAG,CAACF,MAAM,CAAE;IAC1E,MAAM;MACJH,IAAI,EAAEmB,QAAQ;MACdZ,IAAI,EAAEa,QAAQ;MACdX,UAAU,EAAEY,cAAc;MAC1BV,UAAU,EAAEW;IACd,CAAC,GAAGJ,QAAQ;IAEZ,MAAMK,iBAAiB,IAAAT,qBAAA,GAAGO,cAAc,aAAdA,cAAc,wBAAAN,sBAAA,GAAdM,cAAc,CAAEG,OAAO,cAAAT,sBAAA,uBAAvBA,sBAAA,CAAyBU,WAAW,cAAAX,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IACtE,MAAMY,uBAAuB,IAAAV,qBAAA,GAC3BM,cAAc,aAAdA,cAAc,wBAAAL,sBAAA,GAAdK,cAAc,CAAEE,OAAO,cAAAP,sBAAA,uBAAvBA,sBAAA,CAAyBQ,WAAW,cAAAT,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IAE9C,MAAMT,IAAI,GAAGC,WAAW,CAACR,IAAI,CAAC;IAC9BkB,QAAQ,CAAClB,IAAI,GAAGA,IAAI;IACpBkB,QAAQ,CAACX,IAAI,GAAGA,IAAI;IACpBW,QAAQ,CAACT,UAAU,GAAGC,iBAAiB,CAACV,IAAI,CAAC;IAC7CkB,QAAQ,CAACP,UAAU,GAAGC,iBAAiB,CAACZ,IAAI,CAAC;;IAE7C;IACA,IAAI2B,WAAoC;IACxC,IAAIC,OAAO,GAAG3B,UAAU,CAAC4B,KAAK;IAC9B,OAAOD,OAAO,IAAIA,OAAO,KAAKR,QAAQ,EAAE;MACtC,IAAIQ,OAAO,CAACE,OAAO,KAAKX,QAAQ,EAAE;QAChCQ,WAAW,GAAGC,OAAO;QACrB;MACF;MACAA,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;IAEA,MAAMC,QAAQ,GAAGC,QAAQ,CAACC,sBAAsB,EAAE;IAClD,MAAMC,cAAc,GAAGF,QAAQ,CAACC,sBAAsB,EAAE;IACxD,MAAME,UAAsB,GAAG;MAC7BC,GAAG,EAAEC,gBAAS,CAACC,IAAI;MACnBC,SAAS,EAAER,QAAQ;MACnBS,YAAY,EAAEN,cAAc;MAC5BL,KAAK,EAAE7B;IACT,CAAC;;IAED;IACA4B,OAAO,GAAG5B,IAAI;IACd,OAAO4B,OAAO,EAAE;MACdA,OAAO,CAACa,MAAM,GAAGN,UAAU;MAC3BP,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;;IAEA;IACA,MAAMY,YAAY,GAAGC,aAAa,CAACxB,QAAQ,EAAEC,QAAQ,CAAC;IACtD,IAAAwB,uBAAA,CAAA3E,OAAA,MAAI,EAAAX,cAAA,EAAAuF,eAAA,EAAAC,IAAA,CAAJ,IAAI,EAAgBJ,YAAY;IAEhC,IAAAK,gBAAS,EAACZ,UAAU,CAAC;;IAErB;IACA,IAAIR,WAAW,EAAE;MACfA,WAAW,CAACG,OAAO,GAAG9B,IAAI;IAC5B,CAAC,MAAM;MACLC,UAAU,CAAC4B,KAAK,GAAG7B,IAAI;IACzB;IACA,IAAIO,IAAI,EAAE;MACRA,IAAI,CAACuB,OAAO,GAAGV,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEU,OAAO;IAClC;;IAEA;IACAF,OAAO,GAAG5B,IAAI;IACd,OAAO4B,OAAO,EAAE;MACdA,OAAO,CAACa,MAAM,GAAGxC,UAAU;MAC3B2B,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B;IAEA,IAAI7B,UAAU,CAACmC,GAAG,KAAKC,gBAAS,CAACC,IAAI,EAAE;MAAA,IAAAU,qBAAA;MACrC,CAAAA,qBAAA,GAAA/C,UAAU,CAACsC,SAAS,cAAAS,qBAAA,uBAApBA,qBAAA,CAAsBC,YAAY,CAAClB,QAAQ,EAAER,iBAAiB,CAAC;IACjE,CAAC,MAAM;MAAA,IAAA2B,mBAAA;MACL,CAAAA,mBAAA,GAAAjD,UAAU,CAACuB,OAAO,cAAA0B,mBAAA,uBAAlBA,mBAAA,CAAoBD,YAAY,CAAClB,QAAQ,EAAER,iBAAiB,CAAC;IAC/D;IAEA,IAAIW,cAAc,CAACiB,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;MAAA,IAAAC,KAAA;MACxC,IAAIC,IAA4B,GAAGtD,IAAI;MACvC,OAAOsD,IAAI,IAAIA,IAAI,CAACb,MAAM,EAAE;QAC1Ba,IAAI,GAAGA,IAAI,CAACb,MAAM;MACpB;MACA,IAAI,EAAAY,KAAA,GAAAC,IAAI,cAAAD,KAAA,uBAAJA,KAAA,CAAMjB,GAAG,MAAKC,gBAAS,CAACC,IAAI,EAAE;QAChC,MAAM,IAAIiB,KAAK,CAAC,8BAA8B,CAAC;MACjD;MACA,MAAMC,MAAM,GACV,OAAOF,IAAI,CAACd,YAAY,KAAK,UAAU,GACnCc,IAAI,CAACd,YAAY,EAAE,GACnBc,IAAI,CAACd,YAAY;MACvBgB,MAAM,CAACP,YAAY,CAACf,cAAc,EAAER,uBAAuB,CAAC;IAC9D;IAEA,MAAM+B,SAAS,GAAGd,aAAa,CAAC3C,IAAI,EAAEO,IAAI,CAAC;IAC3C,IAAAqC,uBAAA,CAAA3E,OAAA,MAAI,EAAAT,yBAAA,EAAAkG,0BAAA,EAAAZ,IAAA,CAAJ,IAAI,EAA2BW,SAAS;EAC1C;EAEAE,OAAOA,CAAA,EAAS;IACd,KAAK,MAAMC,IAAI,IAAIC,MAAM,CAACC,MAAM,KAAAtE,sBAAA,CAAAvB,OAAA,EAAC,IAAI,EAAAhB,kBAAA,EAAoB,EAAE;MACzD2G,IAAI,CAACR,MAAM,GAAG,CAAC;IACjB;IACA,KAAK,MAAMQ,IAAI,IAAI,IAAApE,sBAAA,CAAAvB,OAAA,MAAI,EAAAd,UAAA,EAAY2G,MAAM,EAAE,EAAE;MAC3C,KAAK,MAAMC,QAAQ,IAAIH,IAAI,EAAE;QAC3BG,QAAQ,CAACC,UAAU,EAAE;MACvB;MACAJ,IAAI,CAACR,MAAM,GAAG,CAAC;IACjB;IACA,IAAA5D,sBAAA,CAAAvB,OAAA,MAAI,EAAAd,UAAA,EAAY8G,KAAK,EAAE;IACvB,QAAAzE,sBAAA,CAAAvB,OAAA,EAAI,IAAI,EAAAb,cAAA,GAAiB;MACvB8G,4BAAgB,CAACC,mBAAmB,CAAC,QAAQ,MAAA3E,sBAAA,CAAAvB,OAAA,EAAE,IAAI,EAAAb,cAAA,EAAgB;MACnE,IAAA8C,sBAAA,CAAAjC,OAAA,MAAI,EAAAb,cAAA,EAAkBgH,SAAS;IACjC;IACA,IAAAlE,sBAAA,CAAAjC,OAAA,MAAI,EAAAZ,qBAAA,EAAyB+G,SAAS;EACxC;EA+BAC,sBAAsBA,CAAA,EAAS;IAC7B,IAAAzB,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,kBAAkB,EAClB,IAAIyB,WAAW,CAAC,iBAAiB,CAAC;EAEtC;EAEAC,gBAAgBA,CAAA,EAAS;IACvB,MAAMC,KAAK,GAAG,IAAIF,WAAW,CAAC,WAAW,CAAC;IAC1C,IAAA3B,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EAA2B,YAAY,EAAE2B,KAAK;IAClD;IACAC,MAAM,CAACC,aAAa,CAACF,KAAK,CAAC;EAC7B;EAEAG,uBAAuBA,CAACC,MAGvB,EAAQ;IACP,IAAAjC,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,mBAAmB,EACnB,IAAIyB,WAAW,CAAC,kBAAkB,EAAE;MAAEM;IAAO,CAAC,CAAC;EAEnD;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAAlC,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,aAAa,EACb,IAAIyB,WAAW,CAAC,YAAY,CAAC;EAEjC;EAEAQ,kBAAkBA,CAAA,EAAS;IACzB,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAAC,mBAAU,GAAE,CAACC,QAAQ;IACtC,IAAIF,IAAI,IAAIA,IAAI,KAAK,GAAG,EAAE;MACxB,IAAApC,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,cAAc,EACd,IAAIyB,WAAW,CAAC,aAAa,EAAE;QAC7BM,MAAM,EAAE;UACNG,IAAI;UACJG,MAAM,EAAEH,IAAI,CAACI,SAAS,CAAC,CAAC;QAC1B;MACF,CAAC,CAAC;IAEN,CAAC,MAAM;MACL,IAAAxC,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,gBAAgB,EAChB,IAAIyB,WAAW,CAAC,eAAe,CAAC;IAEpC;EACF;EAEAc,wBAAwBA,CAAA,EAAS;IAC/B,KAAK,MAAM;MAAElG,KAAK;MAAEI,QAAQ,EAAE+F;IAAK,CAAC,IAAI,IAAA9F,sBAAA,CAAAvB,OAAA,MAAI,EAAAhB,kBAAA,EACzC4B,gBAAgB,EAAE;MACnB,IAAA+D,uBAAA,CAAA3E,OAAA,MAAI,EAAAP,YAAA,EAAA6H,aAAA,EAAAzC,IAAA,CAAJ,IAAI,EAAc3D,KAAK,EAAEmG,IAAI;IAC/B;EACF;EAgCAE,qBAAqBA,CAAA,EAAS;IAC5B,IAAAtF,sBAAA,CAAAjC,OAAA,MAAI,EAAAb,cAAA,EAAmBqH,KAAK,IAAK;MAC/B,IAAA7B,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EACF,eAAe,EACf,IAAIyB,WAAW,CAAC,cAAc,EAAE;QAC9BM,MAAM,EAAE,IAAAY,gCAAgB,EAAEhB,KAAK,CAAwBI,MAAM;MAC/D,CAAC,CAAC;IAEN,CAAC;IACDX,4BAAgB,CAACwB,gBAAgB,CAAC,QAAQ,MAAAlG,sBAAA,CAAAvB,OAAA,EAAE,IAAI,EAAAb,cAAA,EAAgB;EAClE;EAEAuI,eAAeA,CAAA,EAAS;IACtB,IAAA/C,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EAA2B,SAAS,EAAE,IAAIyB,WAAW,CAAC,OAAO,CAAC;EACpE;EAEAqB,iBAAiBA,CAAA,EAAS;IACxB,IAAAhD,uBAAA,CAAA3E,OAAA,MAAI,EAAAR,yBAAA,EAAA6G,0BAAA,EAAAxB,IAAA,CAAJ,IAAI,EAA2B,WAAW,EAAE,IAAIyB,WAAW,CAAC,SAAS,CAAC;EACxE;AACF;AAACsB,OAAA,CAAAlI,eAAA,GAAAA,eAAA;AAAA,SAAAkF,gBArVgBiD,MAAwB,EAAQ;EAC7C,MAAMzG,cAAc,GAAG,CACrB,GAAGtC,gBAAgB,EACnB,IAAI,IAAI,CAACc,KAAK,KAAK,MAAM,GAAGb,kBAAkB,GAAG,EAAE,CAAC,CACrD;EACD,MAAM+I,WAGH,GAAG,EAAE;;EAER;EACA,KAAK,MAAMzG,GAAG,IAAID,cAAc,EAAE;IAChC,MAAM2G,OAAO,GAAG,IAAAC,cAAM,EACpB,IAAAzG,sBAAA,CAAAvB,OAAA,MAAI,EAAAhB,kBAAA,EAAoBqC,GAAG,CAAiB,EAC3C4G,IAAI,IAAKJ,MAAM,CAACK,GAAG,CAACD,IAAI,CAAC/G,KAAK,CAAC,CACjC;IACD,IAAIG,GAAG,KAAK,WAAW,EAAE;MACvByG,WAAW,CAACtG,IAAI,CAAC,GAAGuG,OAAO,CAAC;IAC9B;EACF;;EAEA;EACA,KAAK,MAAM7G,KAAK,IAAI2G,MAAM,EAAE;IAAA,IAAAM,cAAA,EAAAC,eAAA;IAC1B,MAAMC,SAAS,GAAG,IAAA9G,sBAAA,CAAAvB,OAAA,MAAI,EAAAd,UAAA,EAAYkD,GAAG,CAAClB,KAAK,CAAC;IAC5C,IAAImH,SAAS,aAATA,SAAS,eAATA,SAAS,CAAElD,MAAM,EAAE;MACrB,KAAK,MAAMW,QAAQ,IAAIuC,SAAS,EAAE;QAChCvC,QAAQ,CAACC,UAAU,EAAE;MACvB;MACAsC,SAAS,CAAClD,MAAM,GAAG,CAAC;MACpB,IAAA5D,sBAAA,CAAAvB,OAAA,MAAI,EAAAd,UAAA,EAAYoJ,MAAM,CAACpH,KAAK,CAAC;IAC/B;IAEA,IAAAqH,sCAAmB,EAACrH,KAAK,CAAC;IAC1B,CAAAiH,cAAA,GAAOjH,KAAK,CAACqC,OAAO,cAAA4E,cAAA,qBAApB,OAAOA,cAAA,CAAeK,eAAe;;IAErC;IACA,CAAAJ,eAAA,GAAAlH,KAAK,CAACqC,OAAO,cAAA6E,eAAA,uBAAbA,eAAA,CAAeJ,MAAM,EAAE;EACzB;;EAEA;EACA,MAAMS,YAAY,GAAG,IAAInC,WAAW,CAAC,SAAS,CAAC;EAC/C,KAAK,MAAM;IAAEpF,KAAK;IAAEI;EAAS,CAAC,IAAIwG,WAAW,EAAE;IAC7C,IAAAY,8BAAe,EAACpH,QAAQ,EAAEJ,KAAK,CAACyH,cAAc,EAAEzH,KAAK,CAAC,CAACuH,YAAY,CAAC;EACtE;AACF;AAAC,SAAAhD,2BAEyBoC,MAAwB,EAAQ;EACxD,MAAMe,UAAU,GAAG,IAAItC,WAAW,CAAC,OAAO,CAAC;EAC3C,KAAK,MAAM;IAAEpF,KAAK;IAAEI;EAAS,CAAC,IAAI,IAAAC,sBAAA,CAAAvB,OAAA,MAAI,EAAAhB,kBAAA,EAAoB6B,OAAO,EAAE;IACjE,IAAIgH,MAAM,CAACK,GAAG,CAAChH,KAAK,CAAC,EAAE;MACrB,IAAAwH,8BAAe,EAACpH,QAAQ,EAAEJ,KAAK,CAACyH,cAAc,EAAEzH,KAAK,CAAC,CAAC0H,UAAU,CAAC;IACpE;EACF;EAEA,KAAK,MAAM;IAAE1H,KAAK;IAAEI,QAAQ,EAAE+F;EAAK,CAAC,IAAI,IAAA9F,sBAAA,CAAAvB,OAAA,MAAI,EAAAhB,kBAAA,EACzC4B,gBAAgB,EAAE;IACnB,IAAIiH,MAAM,CAACK,GAAG,CAAChH,KAAK,CAAC,EAAE;MACrB,IAAAyD,uBAAA,CAAA3E,OAAA,MAAI,EAAAP,YAAA,EAAA6H,aAAA,EAAAzC,IAAA,CAAJ,IAAI,EAAc3D,KAAK,EAAEmG,IAAI;IAC/B;EACF;AACF;AAAC,SAAAhB,2BAmJCwC,IASe,EACfrC,KAAkB,EACZ;EACN;EACA,IACEsC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,IACtC,IAAI,CAACpJ,KAAK,KAAK,UAAU,IACzBb,kBAAkB,CAACkK,QAAQ,CAACJ,IAAI,CAAiB,EACjD;IACA,MAAM,IAAIvD,KAAK,CACZ,eAAcuD,IAAK,wBAAuB,IAAI,CAACjJ,KAAM,mDAAkD,CACzG;EACH;EACA,KAAK,MAAM;IAAEsB,KAAK;IAAEI;EAAS,CAAC,IAAI,IAAAC,sBAAA,CAAAvB,OAAA,MAAI,EAAAhB,kBAAA,EAAoB6J,IAAI,CAAC,EAAE;IAC/D,IAAAH,8BAAe,EAACpH,QAAQ,EAAEJ,KAAK,CAACyH,cAAc,EAAEzH,KAAK,CAAC,CAACsF,KAAK,CAAC;EAC/D;AACF;AAAC,SAAAc,cA4DYpG,KAAkB,EAAEmG,IAAwB,EAAE;EAAA,IAAA6B,eAAA;EACzD,MAAMC,SAAS,IAAAD,eAAA,GAAG7B,IAAI,CAAC8B,SAAS,cAAAD,eAAA,cAAAA,eAAA,GAAI,GAAG;EACvC,MAAMpD,QAAQ,GAAG,IAAIsD,oBAAoB,CACvC,CAACC,OAAO,EAAEvD,QAAQ,KAAK;IACrBuD,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,IAAIA,KAAK,CAACC,cAAc,EAAE;QACxB,IAAID,KAAK,CAACE,iBAAiB,IAAIN,SAAS,EAAE;UACxC,IAAAT,8BAAe,EACbrB,IAAI,CAAC/F,QAAQ,EACbJ,KAAK,CAACyH,cAAc,EACpBzH,KAAK,CACN,CAAC,IAAIoF,WAAW,CAAC,kBAAkB,CAAC,CAAC;UACtCR,QAAQ,CAACC,UAAU,EAAE;QACvB;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EACD;IACEoD;EACF,CAAC,CACF;EACDrD,QAAQ,CAAC4D,OAAO,CAACxI,KAAK,CAACqC,OAAO,CAAE;EAChC,IAAIoC,IAAI,GAAG,IAAApE,sBAAA,CAAAvB,OAAA,MAAI,EAAAd,UAAA,EAAYkD,GAAG,CAAClB,KAAK,CAAC;EACrC,IAAI,CAACyE,IAAI,EAAE;IACTA,IAAI,GAAG,EAAE;IACT,IAAApE,sBAAA,CAAAvB,OAAA,MAAI,EAAAd,UAAA,EAAYmD,GAAG,CAACnB,KAAK,EAAEyE,IAAI,CAAC;EAClC;EACAA,IAAI,CAACnE,IAAI,CAACsE,QAAQ,CAAC;AACrB;AAuBF,SAASvD,WAAWA,CAACR,IAA6B,EAA2B;EAC3E,IAAIO,IAAI,GAAGP,IAAI;EACf,QAAA4H,KAAA,GAAOrH,IAAI,cAAAqH,KAAA,eAAJA,KAAA,CAAM9F,OAAO,EAAE;IAAA,IAAA8F,KAAA;IACpBrH,IAAI,GAAGA,IAAI,CAACuB,OAAO;EACrB;EACA,OAAOvB,IAAI;AACb;AAEA,SAASG,iBAAiBA,CACxBV,IAA6B,EACJ;EACzB,IAAIO,IAA6B;EACjC,IAAIqB,OAAO,GAAG5B,IAAI;EAClB,OAAO4B,OAAO,EAAE;IACd,IAAI,CAACA,OAAO,CAAC4B,MAAM,EAAE;MACnBjD,IAAI,GAAGqB,OAAO;IAChB;IACAA,OAAO,GAAGA,OAAO,CAACE,OAAO;EAC3B;EACA,OAAOvB,IAAI;AACb;AAEA,SAASK,iBAAiBA,CACxBZ,IAA6B,EACJ;EACzB,IAAIO,IAA6B;EACjC,IAAIqB,OAAO,GAAG5B,IAAI;EAClB,OAAO4B,OAAO,EAAE;IACd,IAAIA,OAAO,CAAC4B,MAAM,EAAE;MAClBjD,IAAI,GAAGqB,OAAO;IAChB;IACA,IAAIA,OAAO,CAACC,KAAK,EAAE;MACjBD,OAAO,GAAGA,OAAO,CAACC,KAAK;IACzB,CAAC,MAAM,IAAID,OAAO,CAACE,OAAO,EAAE;MAC1BF,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B,CAAC,MAAM;MAAA,IAAA+F,cAAA;MACL,IAAIC,aAA4C,GAAGlG,OAAO,CAACa,MAAM;MACjE,OAAOqF,aAAa,EAAE;QACpB,IAAIA,aAAa,CAAChG,OAAO,EAAE;UACzB;QACF;QACAgG,aAAa,GAAGA,aAAa,CAACrF,MAAM;MACtC;MACAb,OAAO,IAAAiG,cAAA,GAAGC,aAAa,cAAAD,cAAA,uBAAbA,cAAA,CAAe/F,OAAO;IAClC;EACF;EACA,OAAOvB,IAAI;AACb;AAEA,SAASoC,aAAaA,CACpBoF,IAA6B,EAC7BC,EAA2B,EACT;EAClB,MAAMC,KAAK,GAAG,IAAIC,GAAG,EAAe;EACpC,IAAItG,OAAO,GAAGmG,IAAI;EAClB,OAAOnG,OAAO,EAAE;IACdqG,KAAK,CAACE,GAAG,CAACvG,OAAO,CAAC;IAClB,IAAIA,OAAO,CAACC,KAAK,EAAE;MACjBD,OAAO,GAAGA,OAAO,CAACC,KAAK;IACzB,CAAC,MAAM,IAAID,OAAO,KAAKoG,EAAE,EAAE;MACzB;IACF,CAAC,MAAM,IAAIpG,OAAO,CAACE,OAAO,EAAE;MAC1BF,OAAO,GAAGA,OAAO,CAACE,OAAO;IAC3B,CAAC,MAAM;MAAA,IAAAsG,eAAA;MACL,IAAIN,aAA4C,GAAGlG,OAAO,CAACa,MAAM;MACjE,OAAOqF,aAAa,IAAIA,aAAa,KAAKE,EAAE,EAAE;QAC5C,IAAIF,aAAa,CAAChG,OAAO,EAAE;UACzB;QACF;QACAgG,aAAa,GAAGA,aAAa,CAACrF,MAAM;MACtC;MACA,IAAIqF,aAAa,KAAKE,EAAE,EAAE;QACxB;MACF;MACApG,OAAO,IAAAwG,eAAA,GAAGN,aAAa,cAAAM,eAAA,uBAAbA,eAAA,CAAetG,OAAO;IAClC;EACF;EACA,OAAOmG,KAAK;AACd"}
|
|
@@ -14,9 +14,16 @@ function registerAppI18n({
|
|
|
14
14
|
// Prefix to avoid conflict between brick package's i18n namespace.
|
|
15
15
|
const i18nNamespace = getI18nNamespace("app", app.id);
|
|
16
16
|
// Support any language in `meta.i18n`.
|
|
17
|
+
const languages = [];
|
|
17
18
|
Object.entries(meta.i18n).forEach(([lang, resources]) => {
|
|
18
19
|
_i18n.i18n.addResourceBundle(lang, i18nNamespace, resources);
|
|
20
|
+
languages.push(lang);
|
|
19
21
|
});
|
|
22
|
+
return () => {
|
|
23
|
+
for (const lang of languages) {
|
|
24
|
+
_i18n.i18n.removeResourceBundle(lang, i18nNamespace);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
function getI18nNamespace(type, id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerAppI18n.js","names":["_i18n","require","registerAppI18n","app","meta","i18n","i18nNamespace","getI18nNamespace","id","Object","entries","forEach","lang","resources","addResourceBundle","type"],"sources":["../../../src/internal/registerAppI18n.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport {
|
|
1
|
+
{"version":3,"file":"registerAppI18n.js","names":["_i18n","require","registerAppI18n","app","meta","i18n","i18nNamespace","getI18nNamespace","id","languages","Object","entries","forEach","lang","resources","addResourceBundle","push","removeResourceBundle","type"],"sources":["../../../src/internal/registerAppI18n.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\nimport { Storyboard } from \"@next-core/types\";\n\nexport function registerAppI18n({ app, meta }: Storyboard) {\n if (meta?.i18n) {\n // Prefix to avoid conflict between brick package's i18n namespace.\n const i18nNamespace = getI18nNamespace(\"app\", app.id);\n // Support any language in `meta.i18n`.\n const languages: string[] = [];\n Object.entries(meta.i18n).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, i18nNamespace, resources);\n languages.push(lang);\n });\n return () => {\n for (const lang of languages) {\n i18n.removeResourceBundle(lang, i18nNamespace);\n }\n };\n }\n}\n\nexport function getI18nNamespace(\n type: \"app\" | \"widget\" | \"menu\",\n id: string\n): string {\n return `${type}/${id}`;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGO,SAASC,eAAeA,CAAC;EAAEC,GAAG;EAAEC;AAAiB,CAAC,EAAE;EACzD,IAAIA,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEC,IAAI,EAAE;IACd;IACA,MAAMC,aAAa,GAAGC,gBAAgB,CAAC,KAAK,EAAEJ,GAAG,CAACK,EAAE,CAAC;IACrD;IACA,MAAMC,SAAmB,GAAG,EAAE;IAC9BC,MAAM,CAACC,OAAO,CAACP,IAAI,CAACC,IAAI,CAAC,CAACO,OAAO,CAAC,CAAC,CAACC,IAAI,EAAEC,SAAS,CAAC,KAAK;MACvDT,UAAI,CAACU,iBAAiB,CAACF,IAAI,EAAEP,aAAa,EAAEQ,SAAS,CAAC;MACtDL,SAAS,CAACO,IAAI,CAACH,IAAI,CAAC;IACtB,CAAC,CAAC;IACF,OAAO,MAAM;MACX,KAAK,MAAMA,IAAI,IAAIJ,SAAS,EAAE;QAC5BJ,UAAI,CAACY,oBAAoB,CAACJ,IAAI,EAAEP,aAAa,CAAC;MAChD;IACF,CAAC;EACH;AACF;AAEO,SAASC,gBAAgBA,CAC9BW,IAA+B,EAC/BV,EAAU,EACF;EACR,OAAQ,GAAEU,IAAK,IAAGV,EAAG,EAAC;AACxB"}
|