@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.
@@ -1 +1 @@
1
- {"version":3,"file":"secret_internals.js","names":["_loader","require","_lodash","_Runtime","_Renderer","_RendererContext","_mount","_enums","_computeRealValue","_isStrictMode","_CustomTemplates","_registerAppI18n","_Notification","_Dialog","renderUseBrick","useBrick","data","_runtimeContext$tplSt","_output$node","tplStateStoreScope","runtimeContext","_internalApiGetRuntimeContext","pendingPermissionsPreCheck","tplStateStoreMap","Map","rendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","createPortal","transform","strict","isStrictMode","warnAboutStrictMode","output","renderBrick","properties","flushStableLoadBricks","Promise","all","blockingList","map","store","waitForAll","node","portal","Error","child","tagName","type","mountUseBrick","element","portalRoot","document","querySelector","createElement","appendChild","mountTree","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","unmountUseBrick","mountResult","unmountTree","remove","dispatchOnUnmount","dispose","initializePlayground","_internalApiSetBootstrapData","loadNotificationService","loadDialogService","legacyDoTransform","to","options","computeRealValue","noInject","loadBricks","_internalApiLoadBricks","exports","updateStoryboard","appId","storyboardPatch","storyboard","_internalApiGetStoryboardInBootstrapData","Object","assign","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","registerAppI18n","updateStoryboardByRoute","newRoute","match","getKey","route","path","exact","replaceRoute","routes","key","routeKey","unshift","updateStoryboardByTemplate","newTemplate","settings","tplName","name","customTemplates","define","bricks","proxy","state","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","brick","pick","updateStoryboardBySnippet","snippetData","_snippetData$bricks","snippetId","length","updateSnippetPreviewSettings","previewRouteIndex","findIndex","newPreviewRoute","menu","splice"],"sources":["../../../src/internal/secret_internals.ts"],"sourcesContent":["import type {\n BootstrapData,\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport { pick } from \"lodash\";\nimport {\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n _internalApiLoadBricks,\n _internalApiSetBootstrapData,\n} from \"./Runtime.js\";\nimport { renderBrick } from \"./Renderer.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\n\nexport interface RenderUseBrickResult {\n tagName: string | null;\n renderRoot: RenderRoot;\n rendererContext: RendererContext;\n}\n\nexport async function renderUseBrick(\n useBrick: UseSingleBrickConf,\n data: unknown\n): Promise<RenderUseBrickResult> {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const runtimeContext: RuntimeContext = {\n ..._internalApiGetRuntimeContext()!,\n data,\n pendingPermissionsPreCheck: [],\n tplStateStoreScope,\n };\n\n runtimeContext.tplStateStoreMap ??= new Map();\n\n const rendererContext = new RendererContext(\"fragment\");\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n // Will set during `mountUseBrick`\n createPortal: null!,\n };\n\n const transform = (useBrick as { transform?: Record<string, unknown> })\n .transform;\n const strict = isStrictMode();\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n useBrick\n );\n }\n\n const output = await renderBrick(\n renderRoot,\n strict\n ? useBrick\n : {\n ...useBrick,\n properties: {\n ...useBrick.properties,\n ...transform,\n },\n },\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n // Wait for local tpl state stores belong to current `useBrick` only.\n ...tplStateStoreScope.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n\n if (output.node?.portal) {\n throw new Error(\"The root brick of useBrick cannot be a portal brick\");\n }\n\n renderRoot.child = output.node;\n\n const tagName = output.node ? output.node.type : null;\n\n return { tagName, renderRoot, rendererContext };\n}\n\nexport interface MountUseBrickResult {\n portal?: HTMLElement;\n}\n\nexport function mountUseBrick(\n { renderRoot, rendererContext }: RenderUseBrickResult,\n element: HTMLElement\n): MountUseBrickResult {\n let portal: HTMLElement | undefined;\n renderRoot.createPortal = () => {\n const portalRoot = document.querySelector(\n \"#portal-mount-point\"\n ) as HTMLElement;\n portal = document.createElement(\"div\");\n portalRoot.appendChild(portal);\n return portal;\n };\n\n mountTree(renderRoot, element);\n\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n\n return {\n portal,\n };\n}\n\nexport function unmountUseBrick(\n { rendererContext }: RenderUseBrickResult,\n mountResult: MountUseBrickResult\n): void {\n // if (mountResult.mainBrick) {\n // mountResult.mainBrick.unmount();\n // }\n if (mountResult.portal) {\n unmountTree(mountResult.portal);\n mountResult.portal.remove();\n }\n rendererContext.dispatchOnUnmount();\n rendererContext.dispose();\n}\n\nexport function initializePlayground(data: BootstrapData) {\n _internalApiSetBootstrapData(data);\n // Todo: allow configuration of notification bricks.\n loadNotificationService(\"shoelace.show-notification\");\n loadDialogService(\"shoelace.show-dialog\");\n}\n\nexport function legacyDoTransform(\n data: unknown,\n to: unknown,\n options?: unknown\n) {\n if (options) {\n throw new Error(\"Legacy doTransform does not support options in v3\");\n }\n return computeRealValue(\n to,\n {\n ..._internalApiGetRuntimeContext()!,\n data,\n },\n {\n noInject: true,\n }\n );\n}\n\nexport const loadBricks = _internalApiLoadBricks;\n\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\n $$fulfilling: null,\n $$fulfilled: true,\n $$registerCustomTemplateProcessed: false,\n });\n registerAppI18n(storyboard);\n}\n\nexport function updateStoryboardByRoute(appId: string, newRoute: RouteConf) {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n let match = false;\n const getKey = (route: RouteConf): string => `${route.path}.${route.exact}`;\n const replaceRoute = (routes: RouteConf[], key: string): RouteConf[] => {\n return routes.map((route) => {\n const routeKey = getKey(route);\n if (route.type === \"routes\") {\n route.routes = replaceRoute(route.routes, key);\n return route;\n } else if (routeKey === key) {\n match = true;\n return newRoute;\n } else {\n return route;\n }\n });\n };\n storyboard.routes = replaceRoute(storyboard.routes, getKey(newRoute));\n if (!match) {\n storyboard.routes.unshift(newRoute);\n }\n}\n\nexport function updateStoryboardByTemplate(\n appId: string,\n newTemplate: CustomTemplate,\n settings: unknown\n): void {\n const tplName = `${appId}.${newTemplate.name}`;\n // customTemplateRegistry.delete(tplName);\n customTemplates.define(tplName, {\n bricks: newTemplate.bricks,\n proxy: newTemplate.proxy,\n state: newTemplate.state,\n });\n updateTemplatePreviewSettings(appId, newTemplate.name, settings);\n}\n\nexport function updateTemplatePreviewSettings(\n appId: string,\n templateId: string,\n settings?: unknown\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/template-preview/${templateId}`,\n [\n {\n brick: templateId,\n ...pick(settings, \"properties\", \"events\", \"lifeCycle\", \"context\"),\n },\n ]\n );\n}\n\nexport function updateStoryboardBySnippet(\n appId: string,\n snippetData: {\n snippetId: string;\n bricks?: BrickConf[];\n }\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/snippet-preview/${snippetData.snippetId}`,\n snippetData.bricks?.length ? snippetData.bricks : [{ brick: \"span\" }]\n );\n}\n\nexport const updateSnippetPreviewSettings = updateStoryboardBySnippet;\n\nfunction _updatePreviewSettings(\n appId: string,\n path: string,\n bricks: BrickConf[]\n) {\n const { routes } = _internalApiGetStoryboardInBootstrapData(appId)!;\n const previewRouteIndex = routes.findIndex((route) => route.path === path);\n const newPreviewRoute: RouteConf = {\n path,\n bricks,\n menu: false,\n exact: true,\n };\n if (previewRouteIndex === -1) {\n routes.unshift(newPreviewRoute);\n } else {\n routes.splice(previewRouteIndex, 1, newPreviewRoute);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"secret_internals.js","names":["_loader","require","_lodash","_Runtime","_Renderer","_RendererContext","_mount","_enums","_computeRealValue","_isStrictMode","_CustomTemplates","_registerAppI18n","_Notification","_Dialog","renderUseBrick","useBrick","data","_runtimeContext$tplSt","_output$node","tplStateStoreScope","runtimeContext","_internalApiGetRuntimeContext","pendingPermissionsPreCheck","tplStateStoreMap","Map","rendererContext","RendererContext","renderRoot","tag","RenderTag","ROOT","createPortal","transform","strict","isStrictMode","warnAboutStrictMode","output","renderBrick","properties","flushStableLoadBricks","Promise","all","blockingList","map","store","waitForAll","node","portal","Error","child","tagName","type","mountUseBrick","element","portalRoot","document","querySelector","createElement","appendChild","mountTree","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","unmountUseBrick","mountResult","unmountTree","remove","dispatchOnUnmount","dispose","initializePlayground","_internalApiSetBootstrapData","loadNotificationService","loadDialogService","legacyDoTransform","to","options","computeRealValue","noInject","loadBricks","_internalApiLoadBricks","exports","updateStoryboard","appId","storyboardPatch","storyboard","_internalApiGetStoryboardInBootstrapData","Object","assign","$$fulfilling","$$fulfilled","$$registerCustomTemplateProcessed","registerAppI18n","updateStoryboardByRoute","newRoute","match","getKey","route","path","exact","replaceRoute","routes","key","routeKey","unshift","updateStoryboardByTemplate","newTemplate","settings","tplName","name","customTemplates","define","bricks","proxy","state","updateTemplatePreviewSettings","templateId","_updatePreviewSettings","brick","pick","updateStoryboardBySnippet","snippetData","_snippetData$bricks","snippetId","length","updateSnippetPreviewSettings","previewRouteIndex","findIndex","newPreviewRoute","menu","splice"],"sources":["../../../src/internal/secret_internals.ts"],"sourcesContent":["import type {\n BootstrapData,\n BrickConf,\n CustomTemplate,\n RouteConf,\n Storyboard,\n UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport { pick } from \"lodash\";\nimport {\n _internalApiGetRuntimeContext,\n _internalApiGetStoryboardInBootstrapData,\n _internalApiLoadBricks,\n _internalApiSetBootstrapData,\n} from \"./Runtime.js\";\nimport { renderBrick } from \"./Renderer.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./interfaces.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { computeRealValue } from \"./compute/computeRealValue.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport { registerAppI18n } from \"./registerAppI18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\n\nexport interface RenderUseBrickResult {\n tagName: string | null;\n renderRoot: RenderRoot;\n rendererContext: RendererContext;\n}\n\nexport async function renderUseBrick(\n useBrick: UseSingleBrickConf,\n data: unknown\n): Promise<RenderUseBrickResult> {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const runtimeContext: RuntimeContext = {\n ..._internalApiGetRuntimeContext()!,\n data,\n pendingPermissionsPreCheck: [],\n tplStateStoreScope,\n };\n\n runtimeContext.tplStateStoreMap ??= new Map();\n\n const rendererContext = new RendererContext(\"fragment\");\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n // Will set during `mountUseBrick`\n createPortal: null!,\n };\n\n const transform = (useBrick as { transform?: Record<string, unknown> })\n .transform;\n const strict = isStrictMode();\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n useBrick\n );\n }\n\n const output = await renderBrick(\n renderRoot,\n strict\n ? useBrick\n : {\n ...useBrick,\n properties: {\n ...useBrick.properties,\n ...transform,\n },\n },\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n // Wait for local tpl state stores belong to current `useBrick` only.\n ...tplStateStoreScope.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n\n if (output.node?.portal) {\n throw new Error(\"The root brick of useBrick cannot be a portal brick\");\n }\n\n renderRoot.child = output.node;\n\n const tagName = output.node ? output.node.type : null;\n\n return { tagName, renderRoot, rendererContext };\n}\n\nexport interface MountUseBrickResult {\n portal?: HTMLElement;\n}\n\nexport function mountUseBrick(\n { renderRoot, rendererContext }: RenderUseBrickResult,\n element: HTMLElement\n): MountUseBrickResult {\n let portal: HTMLElement | undefined;\n renderRoot.createPortal = () => {\n const portalRoot = document.querySelector(\n \"#portal-mount-point\"\n ) as HTMLElement;\n portal = document.createElement(\"div\");\n portalRoot.appendChild(portal);\n return portal;\n };\n\n mountTree(renderRoot, element);\n\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n\n return {\n portal,\n };\n}\n\nexport function unmountUseBrick(\n { rendererContext }: RenderUseBrickResult,\n mountResult: MountUseBrickResult\n): void {\n // if (mountResult.mainBrick) {\n // mountResult.mainBrick.unmount();\n // }\n if (mountResult.portal) {\n unmountTree(mountResult.portal);\n mountResult.portal.remove();\n }\n rendererContext.dispatchOnUnmount();\n rendererContext.dispose();\n}\n\nexport function initializePlayground(data: Partial<BootstrapData>) {\n _internalApiSetBootstrapData(data);\n // Todo: allow configuration of notification bricks.\n loadNotificationService(\"shoelace.show-notification\");\n loadDialogService(\"shoelace.show-dialog\");\n}\n\nexport function legacyDoTransform(\n data: unknown,\n to: unknown,\n options?: unknown\n) {\n if (options) {\n throw new Error(\"Legacy doTransform does not support options in v3\");\n }\n return computeRealValue(\n to,\n {\n ..._internalApiGetRuntimeContext()!,\n data,\n },\n {\n noInject: true,\n }\n );\n}\n\nexport const loadBricks = _internalApiLoadBricks;\n\nexport function updateStoryboard(\n appId: string,\n storyboardPatch: Partial<Storyboard>\n): void {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n Object.assign(storyboard, {\n ...storyboardPatch,\n $$fulfilling: null,\n $$fulfilled: true,\n $$registerCustomTemplateProcessed: false,\n });\n registerAppI18n(storyboard);\n}\n\nexport function updateStoryboardByRoute(appId: string, newRoute: RouteConf) {\n const storyboard = _internalApiGetStoryboardInBootstrapData(appId)!;\n let match = false;\n const getKey = (route: RouteConf): string => `${route.path}.${route.exact}`;\n const replaceRoute = (routes: RouteConf[], key: string): RouteConf[] => {\n return routes.map((route) => {\n const routeKey = getKey(route);\n if (route.type === \"routes\") {\n route.routes = replaceRoute(route.routes, key);\n return route;\n } else if (routeKey === key) {\n match = true;\n return newRoute;\n } else {\n return route;\n }\n });\n };\n storyboard.routes = replaceRoute(storyboard.routes, getKey(newRoute));\n if (!match) {\n storyboard.routes.unshift(newRoute);\n }\n}\n\nexport function updateStoryboardByTemplate(\n appId: string,\n newTemplate: CustomTemplate,\n settings: unknown\n): void {\n const tplName = `${appId}.${newTemplate.name}`;\n // customTemplateRegistry.delete(tplName);\n customTemplates.define(tplName, {\n bricks: newTemplate.bricks,\n proxy: newTemplate.proxy,\n state: newTemplate.state,\n });\n updateTemplatePreviewSettings(appId, newTemplate.name, settings);\n}\n\nexport function updateTemplatePreviewSettings(\n appId: string,\n templateId: string,\n settings?: unknown\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/template-preview/${templateId}`,\n [\n {\n brick: templateId,\n ...pick(settings, \"properties\", \"events\", \"lifeCycle\", \"context\"),\n },\n ]\n );\n}\n\nexport function updateStoryboardBySnippet(\n appId: string,\n snippetData: {\n snippetId: string;\n bricks?: BrickConf[];\n }\n): void {\n _updatePreviewSettings(\n appId,\n `\\${APP.homepage}/_dev_only_/snippet-preview/${snippetData.snippetId}`,\n snippetData.bricks?.length ? snippetData.bricks : [{ brick: \"span\" }]\n );\n}\n\nexport const updateSnippetPreviewSettings = updateStoryboardBySnippet;\n\nfunction _updatePreviewSettings(\n appId: string,\n path: string,\n bricks: BrickConf[]\n) {\n const { routes } = _internalApiGetStoryboardInBootstrapData(appId)!;\n const previewRouteIndex = routes.findIndex((route) => route.path === path);\n const newPreviewRoute: RouteConf = {\n path,\n bricks,\n menu: false,\n exact: true,\n };\n if (previewRouteIndex === -1) {\n routes.unshift(newPreviewRoute);\n } else {\n routes.splice(previewRouteIndex, 1, newPreviewRoute);\n }\n}\n"],"mappings":"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"}
@@ -2,14 +2,19 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import { flushStableLoadBricks } from "@next-core/loader";
3
3
  import { renderBricks } from "./internal/Renderer.js";
4
4
  import { RendererContext } from "./internal/RendererContext.js";
5
+ import { DataStore } from "./internal/data/DataStore.js";
5
6
  import { mountTree, unmountTree } from "./internal/mount.js";
6
7
  import { httpErrorToString } from "./handleHttpError.js";
7
8
  import { applyMode, applyTheme, setMode, setTheme } from "./themeAndMode.js";
8
9
  import { RenderTag } from "./internal/enums.js";
10
+ import { registerStoryboardFunctions } from "./internal/compute/StoryboardFunctions.js";
11
+ import { registerAppI18n } from "./internal/registerAppI18n.js";
12
+ import { registerCustomTemplates } from "./internal/registerCustomTemplates.js";
9
13
  export function unstable_createRoot(container) {
10
14
  var {
11
15
  portal: _portal,
12
- scope = "fragment"
16
+ scope = "fragment",
17
+ unknownBricks
13
18
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
19
  var portal = _portal;
15
20
  var createPortal;
@@ -27,35 +32,68 @@ export function unstable_createRoot(container) {
27
32
  }
28
33
  var unmounted = false;
29
34
  var rendererContext;
35
+ var clearI18nBundles;
30
36
  return {
31
37
  render(brick) {
32
38
  var _arguments = arguments;
33
39
  return _asyncToGenerator(function* () {
34
40
  var {
35
- theme
41
+ theme,
42
+ context,
43
+ functions,
44
+ templates,
45
+ i18n: i18nData
36
46
  } = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : {};
37
47
  if (unmounted) {
38
48
  throw new Error("The root is unmounted and cannot be rendered any more");
39
49
  }
40
50
  var bricks = [].concat(brick);
41
51
  var runtimeContext = {
52
+ ctxStore: new DataStore("CTX"),
42
53
  pendingPermissionsPreCheck: [],
43
54
  tplStateStoreMap: new Map()
44
55
  };
45
56
  var previousRendererContext = rendererContext;
46
- rendererContext = new RendererContext(scope);
57
+ rendererContext = new RendererContext(scope, {
58
+ unknownBricks
59
+ });
47
60
  var renderRoot = {
48
61
  tag: RenderTag.ROOT,
49
62
  container,
50
63
  createPortal
51
64
  };
65
+ if (scope === "page") {
66
+ var _clearI18nBundles;
67
+ var demoApp = {
68
+ id: "demo",
69
+ homepage: "/demo"
70
+ };
71
+ runtimeContext.app = demoApp;
72
+ var demoStoryboard = {
73
+ app: demoApp,
74
+ meta: {
75
+ i18n: i18nData,
76
+ customTemplates: templates
77
+ }
78
+ };
79
+
80
+ // Register i18n.
81
+ (_clearI18nBundles = clearI18nBundles) === null || _clearI18nBundles === void 0 ? void 0 : _clearI18nBundles();
82
+ clearI18nBundles = registerAppI18n(demoStoryboard);
83
+
84
+ // Register custom templates.
85
+ registerCustomTemplates(demoStoryboard);
86
+
87
+ // Register functions.
88
+ registerStoryboardFunctions(functions, demoApp);
89
+ }
90
+ runtimeContext.ctxStore.define(context, runtimeContext);
52
91
  var failed = false;
53
92
  var output;
54
93
  try {
55
94
  output = yield renderBricks(renderRoot, bricks, runtimeContext, rendererContext);
56
- output.blockingList.push(...[...runtimeContext.tplStateStoreMap.values()].map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck);
57
95
  flushStableLoadBricks();
58
- yield Promise.all(output.blockingList);
96
+ yield Promise.all([...output.blockingList, runtimeContext.ctxStore.waitForAll(), ...[...runtimeContext.tplStateStoreMap.values()].map(store => store.waitForAll()), ...runtimeContext.pendingPermissionsPreCheck]);
59
97
  } catch (error) {
60
98
  failed = true;
61
99
  output = {
@@ -73,6 +111,7 @@ export function unstable_createRoot(container) {
73
111
  };
74
112
  }
75
113
  renderRoot.child = output.node;
114
+ previousRendererContext === null || previousRendererContext === void 0 ? void 0 : previousRendererContext.dispatchOnUnmount();
76
115
  previousRendererContext === null || previousRendererContext === void 0 ? void 0 : previousRendererContext.dispose();
77
116
  unmountTree(container);
78
117
  if (portal) {
@@ -1 +1 @@
1
- {"version":3,"file":"createRoot.js","names":["flushStableLoadBricks","renderBricks","RendererContext","mountTree","unmountTree","httpErrorToString","applyMode","applyTheme","setMode","setTheme","RenderTag","unstable_createRoot","container","portal","_portal","scope","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","render","brick","_arguments","_asyncToGenerator","theme","Error","bricks","concat","runtimeContext","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","renderRoot","tag","ROOT","failed","output","blockingList","push","values","map","store","waitForAll","Promise","all","error","node","BRICK","type","properties","textContent","return","menuRequests","child","dispose","dispatchBeforePageLoad","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":["flushStableLoadBricks","renderBricks","RendererContext","DataStore","mountTree","unmountTree","httpErrorToString","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","unstable_createRoot","container","portal","_portal","scope","unknownBricks","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","render","brick","_arguments","_asyncToGenerator","theme","context","functions","templates","i18n","i18nData","Error","bricks","concat","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","previousRendererContext","renderRoot","tag","ROOT","_clearI18nBundles","demoApp","id","homepage","app","demoStoryboard","meta","customTemplates","define","failed","output","Promise","all","blockingList","waitForAll","values","map","store","error","node","BRICK","type","properties","textContent","return","menuRequests","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","unmount","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { flushStableLoadBricks } from \"@next-core/loader\";\nimport { RenderOutput, renderBricks } from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { httpErrorToString } from \"./handleHttpError.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement,\n { portal: _portal, scope = \"fragment\", unknownBricks }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n context,\n functions,\n templates,\n i18n: i18nData,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\"),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n } as Partial<RuntimeContext> as RuntimeContext;\n\n const previousRendererContext = rendererContext;\n rendererContext = new RendererContext(scope, { unknownBricks });\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n const demoApp = {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = demoApp;\n const demoStoryboard = {\n app: demoApp,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, demoApp);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext\n );\n\n flushStableLoadBricks();\n\n await Promise.all([\n ...output.blockingList,\n runtimeContext.ctxStore.waitForAll(),\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n } catch (error) {\n failed = true;\n output = {\n node: {\n tag: RenderTag.BRICK,\n type: \"div\",\n properties: {\n textContent: httpErrorToString(error),\n },\n return: renderRoot,\n runtimeContext: null!,\n },\n blockingList: [],\n menuRequests: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -247,7 +247,11 @@ function _renderBrick() {
247
247
  }
248
248
  tplStack.set(tplTagName, tplCount + 1);
249
249
  } else if (brickName.includes("-") && !customElements.get(brickName)) {
250
- output.blockingList.push(enqueueStableLoadBricks([brickName], getBrickPackages()));
250
+ var promise = enqueueStableLoadBricks([brickName], getBrickPackages());
251
+ output.blockingList.push(rendererContext.unknownBricks === "silent" ? promise.catch(e => {
252
+ // eslint-disable-next-line no-console
253
+ console.error("Load brick \"".concat(brickName, "\" failed:"), e);
254
+ }) : promise);
251
255
  }
252
256
  var brick = {
253
257
  tag: RenderTag.BRICK,
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","preCheckPermissionsForBrickOrRoute","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_runtimeContext$app","length","undefined","brick","template","tplStateStoreId","forEachItem","Array","isArray","strict","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","tag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","_ref3","properties","computedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref4","_ref5","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_objectWithoutProperties","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n output.blockingList.push(\n enqueueStableLoadBricks([brickName], getBrickPackages())\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","loadBricksImperatively","hasOwnProperty","debounce","asyncCheckBrickIf","asyncComputeRealProperties","resolveData","asyncComputeRealValue","preCheckPermissionsForBrickOrRoute","listenOnTrackingContext","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachItem","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","renderRoutes","_x","_x2","_x3","_x4","_x5","_renderRoutes","apply","arguments","_asyncToGenerator","returnNode","routes","_runtimeContext","rendererContext","slotId","matched","output","blockingList","menuRequests","unauthenticated","route","runtimeContext","_objectSpread","match","ctxStore","define","context","pendingPermissionsPreCheck","push","type","redirectTo","redirect","resolved","transform","console","error","Error","concat","path","loadMenu","menu","newOutput","mergeRenderOutput","renderBricks","bricks","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_renderBricks","tplStack","noMemoize","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoizeControlNode","node","_x13","_x14","_x15","_x16","_x17","_x18","_renderBrick","key","_runtimeContext$app","length","undefined","brick","template","tplStateStoreId","forEachItem","Array","isArray","strict","brickName","startsWith","ensureValidControlBrick","dataSource","renderControlNode","_ref","_slots$slot","computedDataSource","slot","String","slots","childrenToSlots","children","renderForEach","controlledOutput","contextNames","stateNames","renderId","listener","_ref2","currentRenderId","tplStateStoreMap","values","store","waitForAll","rerenderControlNode","debouncedListener","contextName","onChange","tplStateStore","test","get","tplTagName","app","id","_tplStack$get","tplCount","set","includes","customElements","promise","unknownBricks","catch","e","tag","BRICK","return","events","portal","iid","ref","trackingContextList","loadProperties","_ref3","properties","computedPropsFromHost","_brick$properties","computed","propName","propValue","Object","entries","asyncProperties","registerBrickLifeCycle","lifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","_ref4","_ref5","childSlotId","slotConf","childrenOutput","child","_x19","_x20","_x21","_x22","_x23","_x24","_x25","_renderForEach","i","j","flat","menuConf","warn","rest","_objectWithoutProperties","_excluded","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","_child$slot"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n loadBricksImperatively,\n} from \"@next-core/loader\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { debounce } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport { asyncComputeRealProperties } from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport { preCheckPermissionsForBrickOrRoute } from \"./checkPermissions.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoutes } from \"./matchRoutes.js\";\nimport {\n RuntimeBrickConfWithTplSymbols,\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachItem,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type { RenderBrick, RenderNode, RuntimeContext } from \"./interfaces.js\";\nimport {\n getTagNameOfCustomTemplate,\n getTplStateStore,\n} from \"./CustomTemplates/utils.js\";\nimport { customTemplates } from \"../CustomTemplates.js\";\nimport type { NextHistoryState } from \"./historyExtended.js\";\nimport { getBrickPackages } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\n\nexport interface RenderOutput {\n node?: RenderBrick;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequests: (Promise<StaticMenuConf | undefined> | undefined)[];\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n runtimeContext.ctxStore.define(route.context, runtimeContext);\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(route, runtimeContext)\n );\n switch (route.type) {\n case \"redirect\": {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n break;\n }\n case \"routes\": {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n break;\n }\n default: {\n output.menuRequests.push(loadMenu(route.menu, runtimeContext));\n const newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n slotId\n );\n mergeRenderOutput(output, newOutput);\n }\n }\n }\n }\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n tplStack?: Map<string, number>,\n noMemoize?: boolean\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n slotId,\n index,\n tplStack && new Map(tplStack)\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (!noMemoize && item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoizeControlNode(slotId, index, item.node, returnNode);\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderNode,\n brickConf: RuntimeBrickConfWithTplSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId?: string,\n key?: number,\n tplStack = new Map<string, number>()\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n if (!brickConf.brick) {\n if ((brickConf as { template?: string }).template) {\n // eslint-disable-next-line no-console\n console.error(\"Legacy templates are dropped in v3:\", brickConf);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Invalid brick:\", brickConf);\n }\n return output;\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEachItem`\n // from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n }\n\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n const strict = isStrictMode(runtimeContext);\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n preCheckPermissionsForBrickOrRoute(brickConf, runtimeContext)\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n\n const renderControlNode = async () => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return output;\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n slotId,\n tplStack,\n true\n );\n }\n }\n };\n\n const controlledOutput = await renderControlNode();\n\n const { contextNames, stateNames } = getTracks(dataSource);\n if (contextNames || stateNames) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const output = await renderControlNode();\n output.blockingList.push(\n ...[...runtimeContext.tplStateStoreMap.values()].map((store) =>\n store.waitForAll()\n ),\n ...runtimeContext.pendingPermissionsPreCheck\n );\n await Promise.all(output.blockingList);\n // Ignore stale renders\n if (renderId === currentRenderId) {\n rendererContext.rerenderControlNode(\n slotId,\n key as number,\n output.node,\n returnNode\n );\n }\n };\n const debouncedListener = debounce(listener);\n if (contextNames) {\n for (const contextName of contextNames) {\n runtimeContext.ctxStore.onChange(contextName, debouncedListener);\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n tplStateStore.onChange(contextName, debouncedListener);\n }\n }\n }\n\n return controlledOutput;\n }\n\n // Widgets need to be defined before rendering.\n if (/\\.tpl-/.test(brickName) && !customTemplates.get(brickName)) {\n await loadBricksImperatively([brickName], getBrickPackages());\n }\n\n const tplTagName = getTagNameOfCustomTemplate(\n brickName,\n runtimeContext.app?.id\n );\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n const promise = enqueueStableLoadBricks([brickName], getBrickPackages());\n output.blockingList.push(\n rendererContext.unknownBricks === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load brick \"${brickName}\" failed:`, e);\n })\n : promise\n );\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n const trackingContextList: TrackingContextItem[] = [];\n const loadProperties = async () => {\n brick.properties = await asyncComputeRealProperties(\n brickConf.properties,\n runtimeContext,\n trackingContextList\n );\n const computedPropsFromHost =\n brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n brick.properties ??= {};\n const computed = await computedPropsFromHost;\n for (const [propName, propValue] of Object.entries(computed)) {\n brick.properties[propName] = propValue;\n }\n }\n listenOnTrackingContext(brick, trackingContextList);\n return brick.properties;\n };\n const asyncProperties = loadProperties();\n blockingList.push(asyncProperties);\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncProperties\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf]) =>\n slotConf.type !== \"routes\"\n ? renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n childSlotId,\n tplStack\n )\n : renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n childSlotId\n )\n )\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n };\n for (const item of rendered) {\n mergeRenderOutput(childrenOutput, item);\n }\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\ntype ValidControlBrick = \":forEach\" | \":if\" | \":switch\";\n\nfunction ensureValidControlBrick(\n brick: string\n): asserts brick is ValidControlBrick {\n if (brick !== \":forEach\" && brick !== \":if\" && brick !== \":switch\") {\n throw new Error(`Unknown storyboard control node: \"${brick}\"`);\n }\n}\n\nasync function renderForEach(\n returnNode: RenderNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n slotId: string | undefined,\n tplStack?: Map<string, number>\n): Promise<RenderOutput> {\n const output: RenderOutput = {\n blockingList: [],\n menuRequests: [],\n };\n\n const rendered = await Promise.all(\n dataSource.map((item, i) =>\n Promise.all(\n bricks.map((brickConf, j) =>\n renderBrick(\n returnNode,\n brickConf,\n {\n ...runtimeContext,\n forEachItem: item,\n },\n rendererContext,\n slotId,\n i * j,\n tplStack && new Map(tplStack)\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n for (const item of rendered.flat()) {\n mergeRenderOutput(output, item);\n }\n return output;\n}\n\nfunction loadMenu(\n menuConf: MenuConf | undefined,\n runtimeContext: RuntimeContext\n) {\n if (!menuConf) {\n return;\n }\n\n // istanbul ignore next\n if ((menuConf as { type?: \"brick\" }).type === \"brick\") {\n // eslint-disable-next-line no-console\n console.error(\"Set menu with brick is dropped in v3:\", menuConf);\n throw new Error(\"Set menu with brick is dropped in v3\");\n }\n\n // istanbul ignore next\n if (menuConf.type === \"resolve\") {\n // eslint-disable-next-line no-console\n console.warn(\"Set menu with resolve is not supported in v3 yet:\", menuConf);\n return;\n }\n\n return asyncComputeRealValue(\n menuConf,\n runtimeContext\n ) as Promise<StaticMenuConf>;\n}\n\nfunction mergeRenderOutput(\n output: RenderOutput,\n newOutput: RenderOutput\n): void {\n const { blockingList, node, menuRequests, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\n output.menuRequests.push(...menuRequests);\n\n if (node) {\n if (output.node) {\n let last = output.node;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = node;\n } else {\n output.node = node;\n }\n }\n\n Object.assign(output, rest);\n}\n\nexport function childrenToSlots(\n children: BrickConf[] | undefined,\n originalSlots: SlotsConf | undefined\n) {\n let newSlots = originalSlots;\n // istanbul ignore next\n if (\n process.env.NODE_ENV === \"development\" &&\n children &&\n !Array.isArray(children)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Specified brick children but not array:\",\n `<${typeof children}>`,\n children\n );\n }\n if (Array.isArray(children) && !newSlots) {\n newSlots = {};\n for (const child of children) {\n const slot = child.slot ?? \"\";\n if (!hasOwnProperty(newSlots, slot)) {\n newSlots[slot] = {\n type: \"bricks\",\n bricks: [],\n };\n }\n (newSlots[slot] as SlotConfOfBricks).bricks.push(child);\n }\n }\n return newSlots;\n}\n"],"mappings":"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"}
@@ -28,13 +28,15 @@ export class RendererContext {
28
28
  * - fragment: render as fragment, not triggering page life cycles.
29
29
  */
30
30
 
31
- constructor(scope) {
31
+ constructor(scope, options) {
32
+ var _options$unknownBrick;
32
33
  _classPrivateMethodInitSpec(this, _addObserver);
33
34
  // Note: no `onScrollIntoView`
34
35
  _classPrivateMethodInitSpec(this, _dispatchGeneralLifeCycle);
35
36
  _classPrivateMethodInitSpec(this, _initializeRerenderBricks);
36
37
  _classPrivateMethodInitSpec(this, _unmountBricks);
37
38
  _defineProperty(this, "scope", void 0);
39
+ _defineProperty(this, "unknownBricks", void 0);
38
40
  _classPrivateFieldInitSpec(this, _memoizedLifeCycle, {
39
41
  writable: true,
40
42
  value: {
@@ -64,6 +66,7 @@ export class RendererContext {
64
66
  value: void 0
65
67
  });
66
68
  this.scope = scope;
69
+ this.unknownBricks = (_options$unknownBrick = options === null || options === void 0 ? void 0 : options.unknownBricks) !== null && _options$unknownBrick !== void 0 ? _options$unknownBrick : "throw";
67
70
  }
68
71
  registerBrickLifeCycle(brick, lifeCycle) {
69
72
  if (!lifeCycle) {