@next-core/runtime 1.55.3 → 1.55.5

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.
@@ -222,10 +222,32 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
222
222
  const {
223
223
  dataSource
224
224
  } = brickConf;
225
- const lowerLevelRenderControlNode = async runtimeContext => {
225
+ const {
226
+ contextNames,
227
+ stateNames
228
+ } = (0, _getTracks.getTracks)(dataSource);
229
+ let changedAfterInitial;
230
+ const initialDisposes = [];
231
+ const initialChangeListener = () => {
232
+ changedAfterInitial = true;
233
+ };
234
+ const lowerLevelRenderControlNode = async (runtimeContext, isInitial) => {
226
235
  var _slots$slot;
227
236
  // First, compute the `dataSource`
228
237
  const computedDataSource = await (0, _computeRealValue.asyncComputeRealValue)(dataSource, runtimeContext);
238
+ if (isInitial && (contextNames || stateNames)) {
239
+ if (contextNames) {
240
+ for (const contextName of contextNames) {
241
+ initialDisposes.push(runtimeContext.ctxStore.onChange(contextName, initialChangeListener));
242
+ }
243
+ }
244
+ if (stateNames) {
245
+ for (const contextName of stateNames) {
246
+ const tplStateStore = (0, _utils.getTplStateStore)(runtimeContext, "STATE", `: "${dataSource}"`);
247
+ initialDisposes.push(tplStateStore.onChange(contextName, initialChangeListener));
248
+ }
249
+ }
250
+ }
229
251
 
230
252
  // Then, get the matched slot.
231
253
  const slot = brickName === ":forEach" ? "" : brickName === ":switch" ? String(computedDataSource) : computedDataSource ? "" : "else";
@@ -253,23 +275,23 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
253
275
  }
254
276
  }
255
277
  };
256
- const renderControlNode = async runtimeContext => {
257
- const rawOutput = await lowerLevelRenderControlNode(runtimeContext);
278
+ const renderControlNode = async (runtimeContext, isInitial) => {
279
+ const rawOutput = await lowerLevelRenderControlNode(runtimeContext, isInitial);
258
280
  rawOutput.node ?? (rawOutput.node = {
259
281
  tag: _enums.RenderTag.PLACEHOLDER,
260
282
  return: returnNode
261
283
  });
262
284
  return rawOutput;
263
285
  };
264
- const controlledOutput = await renderControlNode(runtimeContext);
286
+ let controlledOutput = await renderControlNode(runtimeContext, true);
287
+ initialDisposes.forEach(dispose => dispose());
288
+ if (changedAfterInitial) {
289
+ controlledOutput = await renderControlNode(runtimeContext);
290
+ }
265
291
  const {
266
292
  onMount,
267
293
  onUnmount
268
294
  } = brickConf.lifeCycle ?? {};
269
- const {
270
- contextNames,
271
- stateNames
272
- } = (0, _getTracks.getTracks)(dataSource);
273
295
  if (contextNames || stateNames) {
274
296
  controlledOutput.hasTrackingControls = true;
275
297
  let renderId = 0;
@@ -307,15 +329,17 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
307
329
  leading: true,
308
330
  trailing: true
309
331
  });
332
+ const runtimeBrick = returnNode.tag === _enums.RenderTag.BRICK ? returnNode : null;
333
+ const disposes = runtimeBrick ? runtimeBrick.disposes ?? (runtimeBrick.disposes = []) : [];
310
334
  if (contextNames) {
311
335
  for (const contextName of contextNames) {
312
- runtimeContext.ctxStore.onChange(contextName, debouncedListener);
336
+ disposes.push(runtimeContext.ctxStore.onChange(contextName, debouncedListener));
313
337
  }
314
338
  }
315
339
  if (stateNames) {
316
340
  for (const contextName of stateNames) {
317
341
  const tplStateStore = (0, _utils.getTplStateStore)(runtimeContext, "STATE", `: "${dataSource}"`);
318
- tplStateStore.onChange(contextName, debouncedListener);
342
+ disposes.push(tplStateStore.onChange(contextName, debouncedListener));
319
343
  }
320
344
  }
321
345
  }
@@ -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","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","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","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","lowerLevelRenderControlNode","_slots$slot","computedDataSource","slot","String","childrenToSlots","children","renderForEach","renderControlNode","rawOutput","tag","RenderTag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","contextNames","stateNames","getTracks","renderId","listener","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","leading","trailing","contextName","onChange","tplStateStore","getTplStateStore","registerArbitraryLifeCycle","test","customTemplates","get","catchLoad","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","tplCount","set","includes","customElements","FORM_RENDERER","registerFormRenderer","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","compute","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","BRICK","events","portal","ref","usedProcessors","strictCollectMemberUsage","size","loadProcessorsImperatively","join","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","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} 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): 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 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 );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId\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): 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 )\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): 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 );\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): 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 as any)[symbol],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack\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 { 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 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\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext\n ) => {\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 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 );\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 );\n }\n }\n };\n\n const renderControlNode = async (runtimeContext: RuntimeContext) => {\n const rawOutput = await lowerLevelRenderControlNode(runtimeContext);\n rawOutput.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput;\n };\n\n const controlledOutput = await renderControlNode(runtimeContext);\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\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 [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput =\n await renderControlNode(scopedRuntimeContext);\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(\n reControlledOutput,\n scopedRuntimeContext,\n scopedStores\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 scopedStores) {\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 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 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 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 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 );\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 // When result is null, it means the incremental rendering is tried but routes missed.\n // In this case, we should continue to re-render the parent routes.\n return incrementalOutput.route ? true : null;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId\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): 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 )\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 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\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","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","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","length","strict","isStrictMode","warnAboutStrictMode","asyncCheckBrickIf","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","getTracks","changedAfterInitial","initialDisposes","initialChangeListener","lowerLevelRenderControlNode","isInitial","_slots$slot","computedDataSource","contextName","onChange","tplStateStore","getTplStateStore","slot","String","childrenToSlots","children","renderForEach","renderControlNode","rawOutput","tag","RenderTag","PLACEHOLDER","controlledOutput","dispose","onMount","onUnmount","lifeCycle","renderId","listener","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","listenerFactory","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","debounce","leading","trailing","runtimeBrick","BRICK","disposes","registerArbitraryLifeCycle","test","customTemplates","get","catchLoad","unknownBricks","tplTagName","getTagNameOfCustomTemplate","app","id","tplCount","set","includes","customElements","FORM_RENDERER","registerFormRenderer","enqueueStableLoadBricks","formData","confProps","_brickConf$properties","properties","compute","trackingContextList","asyncPropertyEntries","asyncComputeRealPropertyEntries","computedPropsFromHost","symbolForAsyncComputedPropsFromHost","isScript","props","constructAsyncProperties","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","loadScript","loadStyle","events","portal","ref","usedProcessors","strictCollectMemberUsage","size","loadProcessorsImperatively","join","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","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} 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): 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 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 );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId\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): 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 )\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): 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 );\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): 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 as any)[symbol],\n }),\n {} as RuntimeBrickConfOfTplSymbols & RuntimeBrickConfOfFormSymbols\n ),\n },\n _runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n keyPath,\n tplStack\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 { 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 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\n let changedAfterInitial;\n const initialDisposes: (() => void)[] = [];\n const initialChangeListener = () => {\n changedAfterInitial = true;\n };\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n isInitial?: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (isInitial && (contextNames || stateNames)) {\n if (contextNames) {\n for (const contextName of contextNames) {\n initialDisposes.push(\n runtimeContext.ctxStore.onChange(\n contextName,\n initialChangeListener\n )\n );\n }\n }\n if (stateNames) {\n for (const contextName of stateNames) {\n const tplStateStore = getTplStateStore(\n runtimeContext,\n \"STATE\",\n `: \"${dataSource}\"`\n );\n initialDisposes.push(\n tplStateStore.onChange(contextName, initialChangeListener)\n );\n }\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 );\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 );\n }\n }\n };\n\n const renderControlNode = async (\n runtimeContext: RuntimeContext,\n isInitial?: boolean\n ) => {\n const rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n isInitial\n );\n rawOutput.node ??= {\n tag: RenderTag.PLACEHOLDER,\n return: returnNode,\n };\n return rawOutput;\n };\n\n let controlledOutput = await renderControlNode(runtimeContext, true);\n\n initialDisposes.forEach((dispose) => dispose());\n if (changedAfterInitial) {\n controlledOutput = await renderControlNode(runtimeContext);\n }\n\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (contextNames || stateNames) {\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 =\n await renderControlNode(scopedRuntimeContext);\n\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(\n reControlledOutput,\n scopedRuntimeContext,\n scopedStores\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 scopedStores) {\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 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 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 );\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 // When result is null, it means the incremental rendering is tried but routes missed.\n // In this case, we should continue to re-render the parent routes.\n return incrementalOutput.route ? true : null;\n }\n );\n }\n\n return renderRoutes(\n brick,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId\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): 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 )\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 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\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":[]}
@@ -297,14 +297,16 @@ class RendererContext {
297
297
  current.return = returnNode;
298
298
  current = current.sibling;
299
299
  }
300
- if (returnNode.tag === _enums.RenderTag.ROOT) {
301
- var _returnNode$container;
302
- (_returnNode$container = returnNode.container) === null || _returnNode$container === void 0 || _returnNode$container.insertBefore(fragment, insertBeforeChild);
303
- } else {
304
- var _returnNode$element;
305
- (_returnNode$element = returnNode.element) === null || _returnNode$element === void 0 || _returnNode$element.insertBefore(fragment, insertBeforeChild);
300
+ if (fragment.hasChildNodes()) {
301
+ if (returnNode.tag === _enums.RenderTag.ROOT) {
302
+ var _returnNode$container;
303
+ (_returnNode$container = returnNode.container) === null || _returnNode$container === void 0 || _returnNode$container.insertBefore(fragment, insertBeforeChild);
304
+ } else {
305
+ var _returnNode$element;
306
+ (_returnNode$element = returnNode.element) === null || _returnNode$element === void 0 || _returnNode$element.insertBefore(fragment, insertBeforeChild);
307
+ }
306
308
  }
307
- if (portalFragment.childNodes.length > 0) {
309
+ if (portalFragment.hasChildNodes()) {
308
310
  var _root;
309
311
  let root = node;
310
312
  while (root && root.return) {
@@ -441,7 +443,7 @@ function _unmountBricks(bricks) {
441
443
 
442
444
  // Clear intersection observers
443
445
  for (const brick of bricks) {
444
- var _brick$element, _brick$element2;
446
+ var _brick$element, _brick$element2, _brick$disposes;
445
447
  const observers = (0, _classPrivateFieldGet2.default)(_observers, this).get(brick);
446
448
  if (observers !== null && observers !== void 0 && observers.length) {
447
449
  for (const observer of observers) {
@@ -452,9 +454,11 @@ function _unmountBricks(bricks) {
452
454
  }
453
455
  (0, _bindTemplateProxy.unbindTemplateProxy)(brick);
454
456
  (_brick$element = brick.element) === null || _brick$element === void 0 || delete _brick$element.$$tplStateStore;
455
-
456
457
  // Also remove the element
457
458
  (_brick$element2 = brick.element) === null || _brick$element2 === void 0 || _brick$element2.remove();
459
+ // Dispose context listeners
460
+ (_brick$disposes = brick.disposes) === null || _brick$disposes === void 0 || _brick$disposes.forEach(dispose => dispose());
461
+ delete brick.disposes;
458
462
  }
459
463
 
460
464
  // Dispatch unmount events