@next-core/runtime 1.58.3 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/CustomTemplates.js +7 -11
- package/dist/cjs/CustomTemplates.js.map +1 -1
- package/dist/cjs/ModalStack.js +1 -2
- package/dist/cjs/ModalStack.js.map +1 -1
- package/dist/cjs/StoryboardFunctionRegistry.js +1 -2
- package/dist/cjs/StoryboardFunctionRegistry.js.map +1 -1
- package/dist/cjs/createRoot.js +4 -4
- package/dist/cjs/createRoot.js.map +1 -1
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js +4 -5
- package/dist/cjs/internal/CustomTemplates/bindTemplateProxy.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +4 -7
- package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/replaceSlotWithSlottedBricks.js +4 -5
- package/dist/cjs/internal/CustomTemplates/replaceSlotWithSlottedBricks.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js +18 -21
- package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js +4 -7
- package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
- package/dist/cjs/internal/CustomTemplates/utils.js +3 -3
- package/dist/cjs/internal/CustomTemplates/utils.js.map +1 -1
- package/dist/cjs/internal/ErrorNode.js +11 -8
- package/dist/cjs/internal/ErrorNode.js.map +1 -1
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js +3 -3
- package/dist/cjs/internal/FormRenderer/expandFormRenderer.js.map +1 -1
- package/dist/cjs/internal/FormRenderer/utils.js +2 -2
- package/dist/cjs/internal/FormRenderer/utils.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +13 -18
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/RendererContext.js +8 -10
- package/dist/cjs/internal/RendererContext.js.map +1 -1
- package/dist/cjs/internal/Router.js +13 -6
- package/dist/cjs/internal/Router.js.map +1 -1
- package/dist/cjs/internal/Runtime.js +16 -15
- package/dist/cjs/internal/Runtime.js.map +1 -1
- package/dist/cjs/internal/bindListeners.js +2 -3
- package/dist/cjs/internal/bindListeners.js.map +1 -1
- package/dist/cjs/internal/compute/evaluate.js +4 -4
- package/dist/cjs/internal/compute/evaluate.js.map +1 -1
- package/dist/cjs/internal/compute/getStorageItem.js +1 -2
- package/dist/cjs/internal/compute/getStorageItem.js.map +1 -1
- package/dist/cjs/internal/compute/listenOnTrackingContext.js +1 -2
- package/dist/cjs/internal/compute/listenOnTrackingContext.js.map +1 -1
- package/dist/cjs/internal/data/resolveDataStore.js +2 -4
- package/dist/cjs/internal/data/resolveDataStore.js.map +1 -1
- package/dist/cjs/internal/i18n.js +3 -0
- package/dist/cjs/internal/i18n.js.map +1 -1
- package/dist/cjs/internal/matchStoryboard.js +2 -2
- package/dist/cjs/internal/matchStoryboard.js.map +1 -1
- package/dist/cjs/internal/poll.js +3 -3
- package/dist/cjs/internal/poll.js.map +1 -1
- package/dist/cjs/internal/secret_internals.js +6 -7
- package/dist/cjs/internal/secret_internals.js.map +1 -1
- package/dist/cjs/internal/setupRootRuntimeContext.js +2 -3
- package/dist/cjs/internal/setupRootRuntimeContext.js.map +1 -1
- package/dist/cjs/isNetworkError.js +12 -0
- package/dist/cjs/isNetworkError.js.map +1 -0
- package/dist/cjs/setWatermark.js +4 -4
- package/dist/cjs/setWatermark.js.map +1 -1
- package/dist/cjs/shouldReloadForError.js +25 -0
- package/dist/cjs/shouldReloadForError.js.map +1 -0
- package/dist/cjs/themeAndMode.js +1 -2
- package/dist/cjs/themeAndMode.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/ErrorNode.js +8 -4
- package/dist/esm/internal/ErrorNode.js.map +1 -1
- package/dist/esm/internal/Router.js +14 -7
- package/dist/esm/internal/Router.js.map +1 -1
- package/dist/esm/internal/Runtime.js.map +1 -1
- package/dist/esm/internal/i18n.js +3 -0
- package/dist/esm/internal/i18n.js.map +1 -1
- package/dist/esm/isNetworkError.js +6 -0
- package/dist/esm/isNetworkError.js.map +1 -0
- package/dist/esm/shouldReloadForError.js +19 -0
- package/dist/esm/shouldReloadForError.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/internal/ErrorNode.d.ts +2 -2
- package/dist/types/internal/Runtime.d.ts +2 -1
- package/dist/types/internal/i18n.d.ts +1 -0
- package/dist/types/isNetworkError.d.ts +1 -0
- package/dist/types/shouldReloadForError.d.ts +2 -0
- package/package.json +10 -10
|
@@ -124,7 +124,7 @@ async function renderRoutes(returnNode, routes, _runtimeContext, rendererContext
|
|
|
124
124
|
async function renderBricks(returnNode, bricks, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, tplStack, keyPath, initialTracker) {
|
|
125
125
|
(0, _setupRootRuntimeContext.setupRootRuntimeContext)(bricks, runtimeContext, true);
|
|
126
126
|
const output = getEmptyRenderOutput();
|
|
127
|
-
const kPath = keyPath
|
|
127
|
+
const kPath = keyPath ?? [];
|
|
128
128
|
// 多个构件并行异步转换,但转换的结果按原顺序串行合并。
|
|
129
129
|
const rendered = await Promise.all(bricks.map((brickConf, index) => renderBrick(returnNode, brickConf, runtimeContext, rendererContext, parentRoutes, menuRequestReturnNode, slotId, kPath.concat(index), tplStack && new Map(tplStack), initialTracker)));
|
|
130
130
|
rendered.forEach((item, index) => {
|
|
@@ -222,7 +222,6 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
222
222
|
}
|
|
223
223
|
const brickName = brickConf.brick;
|
|
224
224
|
if (brickName.startsWith(":")) {
|
|
225
|
-
var _brickConf$lifeCycle;
|
|
226
225
|
ensureValidControlBrick(brickName);
|
|
227
226
|
const {
|
|
228
227
|
dataSource
|
|
@@ -276,7 +275,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
276
275
|
tplStateStoreScope,
|
|
277
276
|
formStateStoreScope
|
|
278
277
|
}) => {
|
|
279
|
-
var _ref
|
|
278
|
+
var _ref;
|
|
280
279
|
let changedAfterInitial = false;
|
|
281
280
|
const tracker = {
|
|
282
281
|
disposes: [],
|
|
@@ -311,11 +310,11 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
311
310
|
throw new Error(`Maximum rerender stack overflowed (iid: ${brickConf.iid})`);
|
|
312
311
|
}
|
|
313
312
|
}
|
|
314
|
-
(_ref
|
|
313
|
+
(_ref = rawOutput).node ?? (_ref.node = {
|
|
315
314
|
tag: _enums.RenderTag.PLACEHOLDER,
|
|
316
315
|
return: returnNode,
|
|
317
316
|
tracking
|
|
318
|
-
};
|
|
317
|
+
});
|
|
319
318
|
return rawOutput;
|
|
320
319
|
};
|
|
321
320
|
const controlledOutput = await renderControlNode({
|
|
@@ -325,9 +324,8 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
325
324
|
const {
|
|
326
325
|
onMount,
|
|
327
326
|
onUnmount
|
|
328
|
-
} =
|
|
327
|
+
} = brickConf.lifeCycle ?? {};
|
|
329
328
|
if (tracking) {
|
|
330
|
-
var _runtimeBrick$dispose;
|
|
331
329
|
controlledOutput.hasTrackingControls = true;
|
|
332
330
|
let renderId = 0;
|
|
333
331
|
const listener = async () => {
|
|
@@ -368,7 +366,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
368
366
|
trailing: true
|
|
369
367
|
});
|
|
370
368
|
const runtimeBrick = returnNode.tag === _enums.RenderTag.BRICK ? returnNode : null;
|
|
371
|
-
const disposes = runtimeBrick ?
|
|
369
|
+
const disposes = runtimeBrick ? runtimeBrick.disposes ?? (runtimeBrick.disposes = []) : [];
|
|
372
370
|
if (contextNames) {
|
|
373
371
|
for (const contextName of contextNames) {
|
|
374
372
|
disposes.push(runtimeContext.ctxStore.onChange(contextName, debouncedListener));
|
|
@@ -408,8 +406,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
408
406
|
}
|
|
409
407
|
const tplTagName = (0, _utils.getTagNameOfCustomTemplate)(brickName, (_runtimeContext$app = runtimeContext.app) === null || _runtimeContext$app === void 0 ? void 0 : _runtimeContext$app.id);
|
|
410
408
|
if (tplTagName) {
|
|
411
|
-
|
|
412
|
-
const tplCount = (_tplStack$get = tplStack.get(tplTagName)) !== null && _tplStack$get !== void 0 ? _tplStack$get : 0;
|
|
409
|
+
const tplCount = tplStack.get(tplTagName) ?? 0;
|
|
413
410
|
if (tplCount >= 10) {
|
|
414
411
|
throw new Error(`Maximum custom template stack overflowed: "${tplTagName}"`);
|
|
415
412
|
}
|
|
@@ -424,16 +421,15 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
424
421
|
let formData;
|
|
425
422
|
let confProps;
|
|
426
423
|
if (brickName === _constants2.FORM_RENDERER) {
|
|
427
|
-
var _brickConf$properties
|
|
424
|
+
var _brickConf$properties;
|
|
428
425
|
({
|
|
429
426
|
formData,
|
|
430
427
|
...confProps
|
|
431
|
-
} =
|
|
432
|
-
if ((_brickConf$
|
|
428
|
+
} = brickConf.properties ?? {});
|
|
429
|
+
if ((_brickConf$properties = brickConf.properties) !== null && _brickConf$properties !== void 0 && _brickConf$properties.compute) {
|
|
433
430
|
formData = await (0, _computeRealValue.asyncComputeRealValue)(formData, runtimeContext);
|
|
434
431
|
}
|
|
435
432
|
} else {
|
|
436
|
-
var _confProps;
|
|
437
433
|
if (runtimeContext.inUseBrick) {
|
|
438
434
|
// Keep v2 behavior for `useBrick`: treat `transform` as `properties`.
|
|
439
435
|
const transform = brickConf.transform;
|
|
@@ -447,7 +443,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
447
443
|
}
|
|
448
444
|
}
|
|
449
445
|
}
|
|
450
|
-
|
|
446
|
+
confProps ?? (confProps = brickConf.properties);
|
|
451
447
|
}
|
|
452
448
|
const trackingContextList = [];
|
|
453
449
|
const asyncPropertyEntries = (0, _computeRealProperties.asyncComputeRealPropertyEntries)(confProps, runtimeContext, trackingContextList);
|
|
@@ -459,8 +455,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
459
455
|
if (isScript || brickName === "link") {
|
|
460
456
|
const props = await (0, _computeRealProperties.constructAsyncProperties)(asyncPropertyEntries);
|
|
461
457
|
if (isScript ? props.src : props.rel === "stylesheet" && props.href) {
|
|
462
|
-
|
|
463
|
-
const prefix = (_window$PUBLIC_ROOT = window.PUBLIC_ROOT) !== null && _window$PUBLIC_ROOT !== void 0 ? _window$PUBLIC_ROOT : "";
|
|
458
|
+
const prefix = window.PUBLIC_ROOT ?? "";
|
|
464
459
|
if (isScript) {
|
|
465
460
|
const {
|
|
466
461
|
src,
|
|
@@ -771,7 +766,7 @@ function childrenToSlots(children, originalSlots) {
|
|
|
771
766
|
slot: sl,
|
|
772
767
|
...child
|
|
773
768
|
} of children) {
|
|
774
|
-
const slot = sl
|
|
769
|
+
const slot = sl ?? "";
|
|
775
770
|
if (!(0, _general.hasOwnProperty)(newSlots, slot)) {
|
|
776
771
|
newSlots[slot] = {
|
|
777
772
|
type: "bricks",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_storyboard","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_registerFormRenderer","_evaluate","_matchStoryboard","_bindListeners","_setupRootRuntimeContext","_routeMatchedMap","_ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","matchRoutes","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","setMatchedRoute","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","blockingList","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","usedProcessors","strictCollectMemberUsage","size","catchLoad","loadProcessorsImperatively","join","unknownBricks","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","setupRootRuntimeContext","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","legacyRenderBrick","errorBoundary","ErrorNode","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","forEachIndex","symbolForTPlExternalForEachIndex","forEachSize","symbolForTPlExternalForEachSize","strict","isStrictMode","length","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","contextNames","stateNames","getTracks","tracking","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","trackAfterInitial","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","tplStateStoreScope","formStateStoreScope","_ref","_ref$node","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","RenderTag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","_runtimeBrick$dispose","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","tplTagName","getTagNameOfCustomTemplate","app","id","_tplStack$get","tplCount","set","includes","customElements","FORM_RENDERER","registerFormRenderer","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","_brickConf$properties2","properties","compute","_confProps","inUseBrick","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","ref","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","matchHomepage","every","prevMatch","newMatch","matchRoute","isEqual","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","flushStableLoadBricks","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} 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, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\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 output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"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 } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\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 // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\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 hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\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 const { contextNames, stateNames } = getTracks(dataSource);\n const tracking = !!(contextNames || stateNames);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\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 getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n tracking,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (tracking) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\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 catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\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 if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\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 // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\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 asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\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 delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\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 routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\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: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\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 forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\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\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\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 { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\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\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Renderer.js","names":["_loader","require","_cook","_general","_storyboard","_lodash","_checkIf","_computeRealProperties","_resolveData","_computeRealValue","_listenOnTrackingContext","_matchRoutes","_constants","_expandCustomTemplate","_utils","_CustomTemplates","_Runtime","_enums","_getTracks","_isStrictMode","_constants2","_expandFormRenderer","_registerFormRenderer","_evaluate","_matchStoryboard","_bindListeners","_setupRootRuntimeContext","_routeMatchedMap","_ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","matchRoutes","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","setMatchedRoute","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","hooks","checkPermissions","preCheckPermissionsForBrickOrRoute","value","asyncComputeRealValue","preLoadBricks","Array","isArray","blockingList","loadBricksImperatively","getBrickPackages","type","redirectTo","redirect","resolved","resolveData","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","usedProcessors","strictCollectMemberUsage","size","catchLoad","loadProcessorsImperatively","join","unknownBricks","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","setupRootRuntimeContext","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","legacyRenderBrick","errorBoundary","ErrorNode","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","symbolForTplStateStoreId","formStateStoreId","symbolForFormStateStoreId","hasOwnProperty","symbolForTPlExternalForEachItem","forEachItem","forEachIndex","symbolForTPlExternalForEachIndex","forEachSize","symbolForTPlExternalForEachSize","strict","isStrictMode","length","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","getTracks","tracking","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","trackAfterInitial","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","tplStateStoreScope","formStateStoreScope","_ref","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","tag","RenderTag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","renderId","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","tplTagName","getTagNameOfCustomTemplate","app","id","tplCount","set","includes","customElements","FORM_RENDERER","registerFormRenderer","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","compute","inUseBrick","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","ref","loadProperties","listenOnTrackingContext","registerBrickLifeCycle","expandedBrickConf","expandCustomTemplate","expandFormRenderer","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","matchHomepage","every","prevMatch","newMatch","matchRoute","isEqual","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","isTrackAll","isPreEvaluated","getPreEvaluatedRaw","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","flushStableLoadBricks","waitForAll","menuConf","warn","rest","last","sibling","assign","originalSlots","newSlots","process","env","NODE_ENV","sl","promise","name","unknownPolicy","catch","e"],"sources":["../../../src/internal/Renderer.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickConfInTemplate,\n ContextConf,\n MenuConf,\n RouteConf,\n RouteConfOfBricks,\n SlotConfOfBricks,\n SlotsConf,\n StaticMenuConf,\n} from \"@next-core/types\";\nimport {\n enqueueStableLoadBricks,\n flushStableLoadBricks,\n loadBricksImperatively,\n loadProcessorsImperatively,\n loadScript,\n loadStyle,\n} from \"@next-core/loader\";\nimport { isTrackAll } from \"@next-core/cook\";\nimport { hasOwnProperty } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport { debounce, isEqual } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { resolveData } from \"./data/resolveData.js\";\nimport { asyncComputeRealValue } from \"./compute/computeRealValue.js\";\nimport {\n TrackingContextItem,\n listenOnTrackingContext,\n trackAfterInitial,\n type InitialTracker,\n} from \"./compute/listenOnTrackingContext.js\";\nimport { RendererContext } from \"./RendererContext.js\";\nimport { matchRoute, matchRoutes } from \"./matchRoutes.js\";\nimport {\n symbolForAsyncComputedPropsFromHost,\n symbolForTPlExternalForEachIndex,\n symbolForTPlExternalForEachItem,\n symbolForTPlExternalForEachSize,\n symbolForTplStateStoreId,\n} from \"./CustomTemplates/constants.js\";\nimport { expandCustomTemplate } from \"./CustomTemplates/expandCustomTemplate.js\";\nimport type {\n MenuRequestNode,\n RenderBrick,\n RenderChildNode,\n RenderReturnNode,\n RuntimeBrickConfWithSymbols,\n RuntimeContext,\n} 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, hooks } from \"./Runtime.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { getTracks } from \"./compute/getTracks.js\";\nimport { isStrictMode, warnAboutStrictMode } from \"../isStrictMode.js\";\nimport {\n FORM_RENDERER,\n RuntimeBrickConfOfFormSymbols,\n symbolForFormStateStoreId,\n} from \"./FormRenderer/constants.js\";\nimport { expandFormRenderer } from \"./FormRenderer/expandFormRenderer.js\";\nimport { registerFormRenderer } from \"./FormRenderer/registerFormRenderer.js\";\nimport { isPreEvaluated } from \"./compute/evaluate.js\";\nimport { getPreEvaluatedRaw } from \"./compute/evaluate.js\";\nimport { RuntimeBrickConfOfTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { matchHomepage } from \"./matchStoryboard.js\";\nimport type { DataStore, DataStoreType } from \"./data/DataStore.js\";\nimport { listenerFactory } from \"./bindListeners.js\";\nimport type { MatchResult } from \"./matchPath.js\";\nimport { setupRootRuntimeContext } from \"./setupRootRuntimeContext.js\";\nimport { setMatchedRoute } from \"./routeMatchedMap.js\";\nimport { ErrorNode } from \"./ErrorNode.js\";\n\nexport interface RenderOutput {\n node?: RenderChildNode;\n unauthenticated?: boolean;\n redirect?: {\n path: string;\n state?: NextHistoryState;\n };\n route?: RouteConf;\n path?: string;\n blockingList: (Promise<unknown> | undefined)[];\n menuRequestNode?: MenuRequestNode;\n hasTrackingControls?: boolean;\n}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\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 output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"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 } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n undefined,\n initialTracker\n );\n }\n\n mergeRenderOutput(output, newOutput);\n appendMenuRequestNode(menuRequestNode, newOutput.menuRequestNode);\n }\n }\n }\n\n return output;\n}\n\nexport async function renderBricks(\n returnNode: RenderReturnNode,\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n tplStack?: Map<string, number>,\n keyPath?: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n const kPath = keyPath ?? [];\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf, index) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n kPath.concat(index),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n kPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport async function renderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n keyPath: number[] = [],\n tplStack = new Map<string, number>(),\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n try {\n return await legacyRenderBrick(\n returnNode,\n brickConf,\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n } catch (error) {\n if (brickConf.errorBoundary) {\n // eslint-disable-next-line no-console\n console.error(\"Error caught by error boundary:\", error);\n return {\n node: await ErrorNode(error, returnNode),\n blockingList: [],\n };\n } else {\n throw error;\n }\n }\n}\n\nasync function legacyRenderBrick(\n returnNode: RenderReturnNode,\n brickConf: RuntimeBrickConfWithSymbols,\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n keyPath: number[],\n tplStack: Map<string, number>,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\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 // Translate `if: \"<%= ... %>\"` to `brick: \":if\", dataSource: \"<%= ... %>\"`.\n // In other words, translate tracking if expressions to tracking control nodes of `:if`.\n const { if: brickIf, permissionsPreCheck, ...restBrickConf } = brickConf;\n if (isGeneralizedTrackAll(brickIf)) {\n return renderBrick(\n returnNode,\n {\n brick: \":if\",\n dataSource: brickIf,\n // `permissionsPreCheck` maybe required before computing `if`.\n permissionsPreCheck,\n slots: {\n \"\": {\n type: \"bricks\",\n bricks: [restBrickConf],\n },\n },\n // These symbols have to be copied to the new brick conf.\n ...Object.getOwnPropertySymbols(brickConf).reduce(\n (acc, symbol) => ({\n ...acc,\n [symbol]: brickConf[symbol as typeof symbolForTplStateStoreId],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\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 hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\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 const { contextNames, stateNames } = getTracks(dataSource);\n const tracking = !!(contextNames || stateNames);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\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 getEmptyRenderOutput();\n }\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n return getEmptyRenderOutput();\n }\n return renderForEach(\n returnNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n case \":if\":\n case \":switch\": {\n return renderBricks(\n returnNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n keyPath,\n tracker\n );\n }\n }\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n rawOutput!.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n tracking,\n };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (tracking) {\n controlledOutput.hasTrackingControls = true;\n let renderId = 0;\n const listener = async () => {\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (renderId === currentRenderId) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n slotId,\n keyPath,\n reControlledOutput.node,\n returnNode\n );\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.BRICK ? returnNode : null;\n const disposes = runtimeBrick ? (runtimeBrick.disposes ??= []) : [];\n if (contextNames) {\n for (const contextName of contextNames) {\n disposes.push(\n runtimeContext.ctxStore.onChange(contextName, debouncedListener)\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n disposes.push(tplStateStore.onChange(contextName, debouncedListener));\n }\n }\n }\n\n if (onMount) {\n rendererContext.registerArbitraryLifeCycle(\"onMount\", () => {\n listenerFactory(\n onMount,\n runtimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: false } }));\n });\n }\n\n if (onUnmount) {\n rendererContext.registerArbitraryLifeCycle(\"onUnmount\", () => {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: false } }));\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 catchLoad(\n loadBricksImperatively([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n );\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 if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\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 // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\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 asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\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 delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\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 routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(([childSlotId, slotConf], index) => {\n if (slotConf.type !== \"routes\") {\n return renderBricks(\n brick,\n (slotConf as SlotConfOfBricks).bricks,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n tplStack,\n undefined,\n initialTracker\n );\n }\n\n const parentRoute = parentRoutes[parentRoutes.length - 1] as\n | RouteConfOfBricks\n | undefined;\n if (parentRoute?.incrementalSubRoutes) {\n routeSlotFromIndexToSlotId.set(index, childSlotId);\n rendererContext.performIncrementalRender(\n slotConf,\n parentRoutes,\n async (location, prevLocation) => {\n const { homepage } = childRuntimeContext.app;\n const { pathname } = location;\n // Ignore if any one of homepage and parent routes not matched.\n if (\n !matchHomepage(homepage, pathname) ||\n !parentRoutes.every((route) => {\n let prevMatch: MatchResult | null;\n let newMatch: MatchResult | null;\n return (\n (prevMatch = matchRoute(\n route,\n homepage,\n prevLocation.pathname\n )) &&\n (newMatch = matchRoute(route, homepage, pathname)) &&\n (route !== parentRoute ||\n isEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n const [\n scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n ] = createScopedRuntimeContext({\n ...childRuntimeContext,\n location,\n query: new URLSearchParams(location.search),\n });\n\n let failed = false;\n let incrementalOutput: RenderOutput;\n let scopedStores: DataStore<\"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n incrementalOutput = await renderRoutes(\n brick,\n slotConf.routes,\n scopedRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n true\n );\n\n // Do not ignore incremental rendering even if all sub-routes are missed.\n // Since parent route is matched.\n if (incrementalOutput.route) {\n // Bailout if redirect or unauthenticated is set\n if (rendererContext.reBailout(incrementalOutput)) {\n return true;\n }\n\n scopedStores = [\n ...tplStateStoreScope,\n ...formStateStoreScope,\n ];\n await postAsyncRender(\n incrementalOutput,\n scopedRuntimeContext,\n [scopedRuntimeContext.ctxStore, ...scopedStores]\n );\n }\n\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(error, brick);\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n }\n\n rendererContext.reRender(\n childSlotId,\n [],\n incrementalOutput.node,\n brick\n );\n\n if (!failed) {\n scopedRuntimeContext.ctxStore.mountAsyncData(\n incrementalOutput.route\n );\n for (const store of scopedStores) {\n store.mountAsyncData();\n }\n }\n\n // Even if all sub-routes missed, treat the incremental rendering as performed.\n return true;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item, index) => {\n if (routeSlotFromIndexToSlotId.has(index)) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n routeSlotFromIndexToSlotId.get(index),\n [],\n item.node,\n brick\n );\n }\n mergeRenderOutput(childrenOutput, item);\n mergeSiblingRenderMenuRequest(childrenOutput, item);\n });\n if (childrenOutput.node) {\n brick.child = childrenOutput.node;\n }\n mergeRenderOutput(output, {\n ...childrenOutput,\n node: undefined,\n });\n\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = childrenOutput.menuRequestNode)\n );\n };\n blockingList.push(loadChildren());\n\n await Promise.all(blockingList);\n\n return output;\n}\n\nfunction isGeneralizedTrackAll(brickIf: unknown): boolean {\n return typeof brickIf === \"string\"\n ? isTrackAll(brickIf)\n : isPreEvaluated(brickIf) &&\n // istanbul ignore next: covered by e2e tests\n isTrackAll(getPreEvaluatedRaw(brickIf));\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: RenderReturnNode,\n dataSource: unknown[],\n bricks: BrickConf[],\n runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId: string | undefined,\n tplStack: Map<string, number>,\n keyPath: number[],\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const output = getEmptyRenderOutput();\n\n const size = dataSource.length;\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 forEachIndex: i,\n forEachSize: size,\n },\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath.concat(i * size + j),\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item, index) => {\n if (item.hasTrackingControls) {\n // Memoize a render node before it's been merged.\n rendererContext.memoize(\n slotId,\n keyPath.concat(index),\n item.node,\n returnNode\n );\n }\n mergeRenderOutput(output, item);\n });\n\n return output;\n}\n\nexport function getDataStores(runtimeContext: RuntimeContext) {\n return [\n runtimeContext.ctxStore,\n ...runtimeContext.tplStateStoreMap.values(),\n ...runtimeContext.formStateStoreMap.values(),\n ];\n}\n\nexport function postAsyncRender(\n output: RenderOutput,\n runtimeContext: RuntimeContext,\n stores: DataStore<DataStoreType>[]\n) {\n flushStableLoadBricks();\n\n return Promise.all([\n ...output.blockingList,\n ...stores.map((store) => store.waitForAll()),\n ...runtimeContext.pendingPermissionsPreCheck,\n ]);\n}\n\nexport function createScopedRuntimeContext(\n runtimeContext: RuntimeContext\n): [\n scopedRuntimeContext: RuntimeContext,\n tplStateStoreScope: DataStore<\"STATE\">[],\n formStateStoreScope: DataStore<\"FORM_STATE\">[],\n] {\n const tplStateStoreScope: DataStore<\"STATE\">[] = [];\n const formStateStoreScope: DataStore<\"FORM_STATE\">[] = [];\n const scopedRuntimeContext: RuntimeContext = {\n ...runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n };\n return [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope];\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { blockingList, node, menuRequestNode, hasTrackingControls, ...rest } =\n newOutput;\n output.blockingList.push(...blockingList);\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\nfunction mergeSiblingRenderMenuRequest(\n output: RenderOutput,\n newOutput: RenderOutput\n) {\n const menuRequestNode = newOutput.menuRequestNode;\n if (menuRequestNode) {\n if (output.menuRequestNode) {\n let last = output.menuRequestNode;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n output.menuRequestNode = menuRequestNode;\n }\n }\n}\n\nfunction appendMenuRequestNode(\n menuRequestReturnNode: MenuRequestNode,\n menuRequestNode: MenuRequestNode | undefined\n) {\n if (!menuRequestNode) {\n return;\n }\n if (menuRequestReturnNode.child) {\n let last = menuRequestReturnNode.child;\n while (last.sibling) {\n last = last.sibling;\n }\n last.sibling = menuRequestNode;\n } else {\n menuRequestReturnNode.child = menuRequestNode;\n }\n}\n\nfunction getEmptyRenderOutput(): RenderOutput {\n return { blockingList: [] };\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 { slot: sl, ...child } of children) {\n const slot = sl ?? \"\";\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\nfunction catchLoad(\n promise: Promise<unknown>,\n type: \"brick\" | \"processors\" | \"script\" | \"stylesheet\",\n name: string,\n unknownPolicy: RendererContext[\"unknownBricks\"]\n) {\n return unknownPolicy === \"silent\"\n ? promise.catch((e) => {\n // eslint-disable-next-line no-console\n console.error(`Load %s \"%s\" failed:`, type, name, e);\n })\n : promise;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -34,7 +34,6 @@ var _incrementalRenderStates = /*#__PURE__*/new WeakMap();
|
|
|
34
34
|
var _RendererContext_brand = /*#__PURE__*/new WeakSet();
|
|
35
35
|
class RendererContext {
|
|
36
36
|
constructor(scope, options) {
|
|
37
|
-
var _options$unknownBrick;
|
|
38
37
|
(0, _classPrivateMethodInitSpec2.default)(this, _RendererContext_brand);
|
|
39
38
|
/**
|
|
40
39
|
* - page: render as whole page, triggering page life cycles.
|
|
@@ -66,7 +65,7 @@ class RendererContext {
|
|
|
66
65
|
(0, _classPrivateFieldInitSpec2.default)(this, _memoizedMenuRequestNodeMap, new WeakMap());
|
|
67
66
|
(0, _classPrivateFieldInitSpec2.default)(this, _incrementalRenderStates, new Map());
|
|
68
67
|
this.scope = scope;
|
|
69
|
-
this.unknownBricks = (
|
|
68
|
+
this.unknownBricks = (options === null || options === void 0 ? void 0 : options.unknownBricks) ?? "throw";
|
|
70
69
|
(0, _classPrivateFieldSet2.default)(_routeHelper, this, options === null || options === void 0 ? void 0 : options.routeHelper);
|
|
71
70
|
this.renderId = options === null || options === void 0 ? void 0 : options.renderId;
|
|
72
71
|
}
|
|
@@ -199,7 +198,7 @@ class RendererContext {
|
|
|
199
198
|
if (!(0, _classPrivateFieldGet2.default)(_memoized, this)) {
|
|
200
199
|
(0, _classPrivateFieldSet2.default)(_memoized, this, new WeakMap());
|
|
201
200
|
}
|
|
202
|
-
const memKey = [slotId
|
|
201
|
+
const memKey = [slotId ?? "", ...keyPath].join(".");
|
|
203
202
|
let mem = (0, _classPrivateFieldGet2.default)(_memoized, this).get(returnNode);
|
|
204
203
|
if (!mem) {
|
|
205
204
|
mem = new Map();
|
|
@@ -213,7 +212,7 @@ class RendererContext {
|
|
|
213
212
|
});
|
|
214
213
|
}
|
|
215
214
|
reRender(slotId, keyPath, node, returnNode) {
|
|
216
|
-
const memKey = [slotId
|
|
215
|
+
const memKey = [slotId ?? "", ...keyPath].join(".");
|
|
217
216
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
218
217
|
const memoized = (0, _classPrivateFieldGet2.default)(_memoized, this).get(returnNode).get(memKey);
|
|
219
218
|
const {
|
|
@@ -225,16 +224,16 @@ class RendererContext {
|
|
|
225
224
|
let insertBeforeChild;
|
|
226
225
|
const insertPortalBeforeChildCandidates = [];
|
|
227
226
|
if ((prevNode === null || prevNode === void 0 ? void 0 : prevNode.tag) === _enums.RenderTag.PLACEHOLDER) {
|
|
228
|
-
var _getNextNormalNode
|
|
229
|
-
insertBeforeChild = (
|
|
227
|
+
var _getNextNormalNode, _getNextPortalNode;
|
|
228
|
+
insertBeforeChild = ((_getNextNormalNode = getNextNormalNode(prevNode)) === null || _getNextNormalNode === void 0 ? void 0 : _getNextNormalNode.element) ?? null;
|
|
230
229
|
// Todo(steve): handle portal bricks from useBrick.
|
|
231
230
|
const nextSibling = (_getNextPortalNode = getNextPortalNode(prevNode)) === null || _getNextPortalNode === void 0 ? void 0 : _getNextPortalNode.element;
|
|
232
231
|
if (nextSibling) {
|
|
233
232
|
insertPortalBeforeChildCandidates.push(nextSibling);
|
|
234
233
|
}
|
|
235
234
|
} else {
|
|
236
|
-
var _prevLastNormal$eleme,
|
|
237
|
-
insertBeforeChild = (
|
|
235
|
+
var _prevLastNormal$eleme, _prevLastPortal$eleme;
|
|
236
|
+
insertBeforeChild = (prevLastNormal === null || prevLastNormal === void 0 || (_prevLastNormal$eleme = prevLastNormal.element) === null || _prevLastNormal$eleme === void 0 ? void 0 : _prevLastNormal$eleme.nextSibling) ?? null;
|
|
238
237
|
let nextSibling = prevLastPortal === null || prevLastPortal === void 0 || (_prevLastPortal$eleme = prevLastPortal.element) === null || _prevLastPortal$eleme === void 0 ? void 0 : _prevLastPortal$eleme.nextSibling;
|
|
239
238
|
while (nextSibling) {
|
|
240
239
|
insertPortalBeforeChildCandidates.push(nextSibling);
|
|
@@ -511,8 +510,7 @@ function _dispatchGeneralLifeCycle(type, event) {
|
|
|
511
510
|
}
|
|
512
511
|
}
|
|
513
512
|
function _addObserver(brick, conf) {
|
|
514
|
-
|
|
515
|
-
const threshold = (_conf$threshold = conf.threshold) !== null && _conf$threshold !== void 0 ? _conf$threshold : 0.1;
|
|
513
|
+
const threshold = conf.threshold ?? 0.1;
|
|
516
514
|
const observer = new IntersectionObserver((entries, observer) => {
|
|
517
515
|
entries.forEach(entry => {
|
|
518
516
|
if (entry.isIntersecting) {
|