@next-core/runtime 1.56.2 → 1.57.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.
Files changed (30) hide show
  1. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js +15 -5
  2. package/dist/cjs/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  3. package/dist/cjs/internal/CustomTemplates/replaceSlotWithSlottedBricks.js +42 -0
  4. package/dist/cjs/internal/CustomTemplates/replaceSlotWithSlottedBricks.js.map +1 -0
  5. package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js +5 -1
  6. package/dist/cjs/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
  7. package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js +13 -4
  8. package/dist/cjs/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
  9. package/dist/cjs/internal/Renderer.js +5 -2
  10. package/dist/cjs/internal/Renderer.js.map +1 -1
  11. package/dist/cjs/internal/data/DataStore.js +0 -1
  12. package/dist/cjs/internal/data/DataStore.js.map +1 -1
  13. package/dist/cjs/internal/interfaces.js.map +1 -1
  14. package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js +15 -5
  15. package/dist/esm/internal/CustomTemplates/expandCustomTemplate.js.map +1 -1
  16. package/dist/esm/internal/CustomTemplates/replaceSlotWithSlottedBricks.js +36 -0
  17. package/dist/esm/internal/CustomTemplates/replaceSlotWithSlottedBricks.js.map +1 -0
  18. package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js +5 -2
  19. package/dist/esm/internal/CustomTemplates/setupTemplateProxy.js.map +1 -1
  20. package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js +13 -4
  21. package/dist/esm/internal/CustomTemplates/setupUseBrickInTemplate.js.map +1 -1
  22. package/dist/esm/internal/Renderer.js +5 -2
  23. package/dist/esm/internal/Renderer.js.map +1 -1
  24. package/dist/esm/internal/data/DataStore.js +0 -1
  25. package/dist/esm/internal/data/DataStore.js.map +1 -1
  26. package/dist/esm/internal/interfaces.js.map +1 -1
  27. package/dist/types/internal/CustomTemplates/replaceSlotWithSlottedBricks.d.ts +3 -0
  28. package/dist/types/internal/CustomTemplates/setupTemplateProxy.d.ts +3 -2
  29. package/dist/types/internal/interfaces.d.ts +1 -0
  30. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","trackAfterInitial","matchRoute","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","registerFormRenderer","isPreEvaluated","getPreEvaluatedRaw","matchHomepage","listenerFactory","setupRootRuntimeContext","setMatchedRoute","ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","blockingList","type","redirectTo","redirect","resolved","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","arguments","length","legacyRenderBrick","errorBoundary","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_ref","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","dispose","tag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","renderId","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","catchLoad","unknownBricks","tplTagName","app","id","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","properties","compute","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","events","portal","ref","usedProcessors","size","join","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref2","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","every","prevMatch","newMatch","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","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 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 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 { 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 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 const renderControlNode = async (\n runtimeContext: RuntimeContext,\n type: \"initial\" | \"rerender\"\n ) => {\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 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 };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode(runtimeContext, \"initial\");\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 = await renderControlNode(\n scopedRuntimeContext,\n \"rerender\"\n );\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 // 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 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":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","resolveData","asyncComputeRealValue","listenOnTrackingContext","trackAfterInitial","matchRoute","matchRoutes","symbolForAsyncComputedPropsFromHost","symbolForTPlExternalForEachIndex","symbolForTPlExternalForEachItem","symbolForTPlExternalForEachSize","symbolForTplStateStoreId","expandCustomTemplate","getTagNameOfCustomTemplate","getTplStateStore","customTemplates","getBrickPackages","hooks","RenderTag","getTracks","isStrictMode","warnAboutStrictMode","FORM_RENDERER","symbolForFormStateStoreId","expandFormRenderer","registerFormRenderer","isPreEvaluated","getPreEvaluatedRaw","matchHomepage","listenerFactory","setupRootRuntimeContext","setMatchedRoute","ErrorNode","renderRoutes","returnNode","routes","_runtimeContext","rendererContext","parentRoutes","menuRequestReturnNode","slotId","isIncremental","initialTracker","matched","output","getEmptyRenderOutput","menuRequestNode","return","unauthenticated","_hooks$checkPermissio","route","path","match","runtimeContext","iid","ctxStore","disposeDataInRoutes","routePath","concat","define","context","undefined","pendingPermissionsPreCheck","push","checkPermissions","preCheckPermissionsForBrickOrRoute","value","preLoadBricks","Array","isArray","blockingList","type","redirectTo","redirect","resolved","transform","console","error","Error","menuRequest","loadMenu","menu","request","memoizeMenuRequestNode","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","keyPath","kPath","rendered","Promise","all","map","brickConf","index","renderBrick","Map","forEach","item","hasTrackingControls","memoize","node","arguments","length","legacyRenderBrick","errorBoundary","_hooks$checkPermissio2","_runtimeContext$app","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","ensureValidControlBrick","contextNames","stateNames","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","renderForEach","renderControlNode","_ref","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","dispose","tag","PLACEHOLDER","controlledOutput","onMount","onUnmount","lifeCycle","renderId","currentRenderId","scopedRuntimeContext","tplStateStoreScope","formStateStoreScope","createScopedRuntimeContext","reControlledOutput","scopedStores","postAsyncRender","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","BRICK","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","catchLoad","unknownBricks","tplTagName","app","id","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","properties","compute","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","prefix","window","PUBLIC_ROOT","attrs","events","portal","ref","usedProcessors","size","join","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref2","childSlotId","slotConf","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","pathname","every","prevMatch","newMatch","params","query","URLSearchParams","search","failed","incrementalOutput","reBailout","reMergeMenuRequestNodes","result","reCatch","childrenOutput","has","mergeSiblingRenderMenuRequest","child","i","j","flat","getDataStores","tplStateStoreMap","values","formStateStoreMap","stores","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 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 { 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 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 const renderControlNode = async (\n runtimeContext: RuntimeContext,\n type: \"initial\" | \"rerender\"\n ) => {\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 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 };\n return rawOutput!;\n };\n\n const controlledOutput = await renderControlNode(runtimeContext, \"initial\");\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 = await renderControlNode(\n scopedRuntimeContext,\n \"rerender\"\n );\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 // 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":[]}
@@ -385,7 +385,6 @@ export class DataStore {
385
385
  * dispose their data and pending tasks.
386
386
  */
387
387
  disposeDataInRoutes(routes) {
388
- //
389
388
  for (const route of routes) {
390
389
  const names = this.routeMap.get(route);
391
390
  if (names !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","pull","eventCallbackFactory","listenerFactory","asyncCheckIf","checkIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","callRealTimeDataInspectHooks","realTimeDataInspectRoot","isStrictMode","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","stateStoreId","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","tplStateStoreId","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","callback","callbackRuntimeContext","useResolve","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","load","cache","then","val","finishLoad","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","route","stack","routeStackMap","add","set","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","removeEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","pendingResult","mountAsyncData","_this$routeMap$get","async","routeMap","has","asyncMounted","expose","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","track","if","size","resolveConf","transform","options","_this$rendererContext2","lazy","newData","trigger","_this$rendererContext3","registerArbitraryLifeCycle","dep","batchAddListener","e","names","disposeDataInRoutes","routes","delete","contextConf","event"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { pull } from \"lodash\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\nimport { isStrictMode } from \"../../isStrictMode.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\ntype PendingStackItem = ReturnType<typeof resolveDataStore>;\n\nexport class DataStore<T extends DataStoreType = \"CTX\"> {\n private readonly type: T;\n private readonly data = new Map<string, DataStoreItem>();\n private readonly changeEventType: string;\n private readonly pendingStack: Array<PendingStackItem> = [];\n public readonly hostBrick?: RuntimeBrick;\n private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n private routeStackMap = new WeakMap<RouteConf, Set<PendingStackItem>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\n if (isObject(item.value)) {\n Object.assign(item.value, value);\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `Non-object current value of \"${this.type}.${name}\" for \"context.assign\", try \"context.replace\" instead.`\n );\n item.value = value;\n }\n }\n\n if (this.batchUpdate) return;\n\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n }\n\n private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type,\n isStrictMode(runtimeContext)\n );\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const stack = this.routeStackMap.get(route);\n if (stack) {\n stack.add(pending);\n } else {\n this.routeStackMap.set(route, new Set([pending]));\n }\n }\n }\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): () => void {\n const eventTarget = this.data.get(dataName)?.eventTarget;\n eventTarget?.addEventListener(this.changeEventType, listener);\n return () => {\n eventTarget?.removeEventListener(this.changeEventType, listener);\n };\n }\n\n async waitFor(dataNames: string[] | Set<string>): Promise<void> {\n for (const { pendingContexts } of this.pendingStack) {\n await Promise.all(\n [...dataNames].map((ctx) => {\n const p = pendingContexts.get(ctx);\n return p;\n })\n );\n }\n }\n\n async waitForAll(): Promise<void> {\n for (const { pendingResult } of this.pendingStack) {\n await pendingResult;\n }\n }\n\n /**\n * After mount, dispatch the change event when an async data is loaded.\n *\n * If param `route` is present, handle data defined in that route (or its descendants) only.\n */\n mountAsyncData(route?: RouteConf) {\n this.data.forEach((item) => {\n if (item.async && (!route || this.routeMap.get(route)?.has(item.name))) {\n // istanbul ignore next\n if (item.asyncMounted) {\n // eslint-disable-next-line no-console\n console.error(\n `Async data \"${item.name}\" already mounted. This is a bug of Brick Next, please report it.`\n );\n return;\n }\n item.asyncMounted = true;\n // An async data always has `loading`\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n item.loading!.then((value) => {\n this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n /**\n * For sub-routes to be incrementally rendered,\n * dispose their data and pending tasks.\n */\n disposeDataInRoutes(routes: RouteConf[]) {\n //\n for (const route of routes) {\n const names = this.routeMap.get(route);\n if (names !== undefined) {\n for (const name of names) {\n this.data.delete(name);\n }\n this.routeMap.delete(route);\n }\n const stack = this.routeStackMap.get(route);\n if (stack !== undefined) {\n pull(this.pendingStack, ...stack);\n this.routeStackMap.delete(route);\n }\n }\n }\n\n private batchAddListener(\n listener: EventListener,\n contextConf: ContextConf\n ): EventListener {\n return (event: Event | CustomEvent): void => {\n if (\n this.batchUpdate &&\n this.batchUpdateContextsNames.includes(contextConf.name)\n ) {\n return;\n }\n listener(event);\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","pull","eventCallbackFactory","listenerFactory","asyncCheckIf","checkIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","callRealTimeDataInspectHooks","realTimeDataInspectRoot","isStrictMode","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","stateStoreId","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","tplStateStoreId","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","callback","callbackRuntimeContext","useResolve","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","load","cache","then","val","finishLoad","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","route","stack","routeStackMap","add","set","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","removeEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","pendingResult","mountAsyncData","_this$routeMap$get","async","routeMap","has","asyncMounted","expose","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","track","if","size","resolveConf","transform","options","_this$rendererContext2","lazy","newData","trigger","_this$rendererContext3","registerArbitraryLifeCycle","dep","batchAddListener","e","names","disposeDataInRoutes","routes","delete","contextConf","event"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { pull } from \"lodash\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\nimport { isStrictMode } from \"../../isStrictMode.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\ntype PendingStackItem = ReturnType<typeof resolveDataStore>;\n\nexport class DataStore<T extends DataStoreType = \"CTX\"> {\n private readonly type: T;\n private readonly data = new Map<string, DataStoreItem>();\n private readonly changeEventType: string;\n private readonly pendingStack: Array<PendingStackItem> = [];\n public readonly hostBrick?: RuntimeBrick;\n private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n private routeStackMap = new WeakMap<RouteConf, Set<PendingStackItem>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\n if (isObject(item.value)) {\n Object.assign(item.value, value);\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `Non-object current value of \"${this.type}.${name}\" for \"context.assign\", try \"context.replace\" instead.`\n );\n item.value = value;\n }\n }\n\n if (this.batchUpdate) return;\n\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n }\n\n private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type,\n isStrictMode(runtimeContext)\n );\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const stack = this.routeStackMap.get(route);\n if (stack) {\n stack.add(pending);\n } else {\n this.routeStackMap.set(route, new Set([pending]));\n }\n }\n }\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): () => void {\n const eventTarget = this.data.get(dataName)?.eventTarget;\n eventTarget?.addEventListener(this.changeEventType, listener);\n return () => {\n eventTarget?.removeEventListener(this.changeEventType, listener);\n };\n }\n\n async waitFor(dataNames: string[] | Set<string>): Promise<void> {\n for (const { pendingContexts } of this.pendingStack) {\n await Promise.all(\n [...dataNames].map((ctx) => {\n const p = pendingContexts.get(ctx);\n return p;\n })\n );\n }\n }\n\n async waitForAll(): Promise<void> {\n for (const { pendingResult } of this.pendingStack) {\n await pendingResult;\n }\n }\n\n /**\n * After mount, dispatch the change event when an async data is loaded.\n *\n * If param `route` is present, handle data defined in that route (or its descendants) only.\n */\n mountAsyncData(route?: RouteConf) {\n this.data.forEach((item) => {\n if (item.async && (!route || this.routeMap.get(route)?.has(item.name))) {\n // istanbul ignore next\n if (item.asyncMounted) {\n // eslint-disable-next-line no-console\n console.error(\n `Async data \"${item.name}\" already mounted. This is a bug of Brick Next, please report it.`\n );\n return;\n }\n item.asyncMounted = true;\n // An async data always has `loading`\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n item.loading!.then((value) => {\n this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n /**\n * For sub-routes to be incrementally rendered,\n * dispose their data and pending tasks.\n */\n disposeDataInRoutes(routes: RouteConf[]) {\n for (const route of routes) {\n const names = this.routeMap.get(route);\n if (names !== undefined) {\n for (const name of names) {\n this.data.delete(name);\n }\n this.routeMap.delete(route);\n }\n const stack = this.routeStackMap.get(route);\n if (stack !== undefined) {\n pull(this.pendingStack, ...stack);\n this.routeStackMap.delete(route);\n }\n }\n }\n\n private batchAddListener(\n listener: EventListener,\n contextConf: ContextConf\n ): EventListener {\n return (event: Event | CustomEvent): void => {\n if (\n this.batchUpdate &&\n this.batchUpdateContextsNames.includes(contextConf.name)\n ) {\n return;\n }\n listener(event);\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/internal/interfaces.ts"],"sourcesContent":["import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport type {\n BrickEventHandler,\n BrickEventsMap,\n CustomTemplate,\n RouteConf,\n RuntimeSnippet,\n CustomTemplateProxy,\n CustomTemplateProxyBasicProperty,\n CustomTemplateProxySlot,\n SlotsConfOfBricks,\n Storyboard,\n StaticMenuConf,\n UseProviderResolveConf,\n MicroApp,\n} from \"@next-core/types\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { RuntimeBrickConfOfFormSymbols } from \"./FormRenderer/constants.js\";\n\nexport interface RuntimeContext extends LegacyCompatibleRuntimeContext {\n ctxStore: DataStore<\"CTX\">;\n tplStateStoreMap: Map<string, DataStore<\"STATE\">>;\n pendingPermissionsPreCheck: (Promise<unknown> | undefined)[];\n tplStateStoreId?: string;\n // `useBrick` has a local tpl state store scope\n tplStateStoreScope?: DataStore<\"STATE\">[];\n forEachItem?: unknown;\n forEachIndex?: number;\n forEachSize?: number;\n appendI18nNamespace?: string;\n\n formStateStoreMap: Map<string, DataStore<\"FORM_STATE\">>;\n formStateStoreId?: string;\n formStateStoreScope?: DataStore<\"FORM_STATE\">[];\n}\n\nexport type AsyncPropertyEntry = [\n name: string,\n value: Promise<unknown>,\n ignoreUndefined?: boolean,\n];\n\nexport interface ElementHolder {\n element?: HTMLElement | null;\n}\n\nexport interface RenderRoot extends BaseRenderNode {\n tag: RenderTag.ROOT;\n container?: HTMLElement | DocumentFragment;\n createPortal:\n | HTMLElement\n | DocumentFragment\n | (() => HTMLElement | DocumentFragment);\n}\n\nexport interface RenderBrick extends BaseRenderNode, RuntimeBrick {\n tag: RenderTag.BRICK;\n return: RenderReturnNode;\n hasTrackingControls?: boolean;\n}\n\nexport interface RenderPlaceholder extends BaseRenderNode {\n tag: RenderTag.PLACEHOLDER;\n return: RenderReturnNode;\n}\n\nexport interface BaseRenderNode {\n tag: RenderTag;\n child?: RenderChildNode;\n sibling?: RenderChildNode;\n return?: RenderReturnNode | null;\n childElements?: HTMLElement[];\n}\n\nexport type RenderNode = RenderRoot | RenderBrick | RenderPlaceholder;\n\nexport type RenderChildNode = RenderBrick | RenderPlaceholder;\nexport type RenderReturnNode = RenderRoot | RenderBrick;\n\nexport interface RuntimeBrick {\n type: string;\n properties?: Record<string, unknown>;\n events?: BrickEventsMap;\n slotId?: string;\n element?: RuntimeBrickElement | null;\n iid?: string;\n runtimeContext: RuntimeContext;\n tplHostMetadata?: TemplateHostMetadata;\n portal?: boolean;\n ref?: string;\n disposes?: (() => void)[];\n}\n\nexport type MetaInfoOfEventListener = [\n string,\n // For compatibility of devtools, leave the second argument there.\n null | undefined,\n BrickEventHandler,\n];\n\nexport type RememberedEventListener = [string, EventListener];\n\nexport interface RuntimeBrickElement extends HTMLElement {\n $$typeof?: \"brick\" | \"provider\" | \"custom-template\" | \"native\" | \"invalid\";\n /** Meta info of listeners, for devtools only */\n $$eventListeners?: MetaInfoOfEventListener[];\n /** Remembered listeners for unbinding */\n $$listeners?: RememberedEventListener[];\n /** Remembered proxy listeners for unbinding */\n $$proxyListeners?: RememberedEventListener[];\n /** Find element by ref in a custom template */\n $$getElementByRef?: (ref: string) => HTMLElement | null | undefined;\n $$tplStateStore?: DataStore<\"STATE\">;\n}\n\nexport interface TemplateHostMetadata {\n internalBricksByRef: Map<string, RuntimeBrick>;\n tplStateStoreId: string;\n proxy?: CustomTemplateProxy;\n}\n\nexport type TemplateHostBrick = RuntimeBrick & {\n tplHostMetadata: TemplateHostMetadata;\n};\n\nexport interface TemplateHostContext {\n reversedProxies: ReversedProxies;\n asyncHostPropertyEntries: AsyncPropertyEntry[];\n externalSlots?: SlotsConfOfBricks;\n tplStateStoreId: string;\n hostBrick: TemplateHostBrick;\n}\n\ninterface ReversedProxies {\n properties: Map<string, ReversedPropertyProxy[]>;\n slots: Map<string, ReversedSlotProxy[]>;\n}\n\ninterface ReversedPropertyProxy {\n from: string;\n to: CustomTemplateProxyBasicProperty;\n}\n\ninterface ReversedSlotProxy {\n from: string;\n to: CustomTemplateProxySlot;\n}\n\nexport type RuntimeBrickConfWithSymbols = RuntimeBrickConfWithTplSymbols &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface DataValueOption {\n tplStateStoreId?: string;\n routeId?: string;\n}\n\nexport type PreviewStoryboardPatch =\n | CustomTemplate\n | RouteConf\n | RuntimeSnippet;\n\nexport interface PreviewOption {\n appId: string;\n formId?: string;\n updateStoryboardType?: \"route\" | \"template\" | \"snippet\";\n collectUsedContracts?(storyboard: Storyboard): string[] | Promise<string[]>;\n}\n\nexport interface MenuRequestNode {\n child?: MenuRequestNode;\n sibling?: MenuRequestNode;\n return?: MenuRequestNode;\n request?: Promise<StaticMenuConf>;\n}\n\nexport interface DebugDataValue {\n resolve?: UseProviderResolveConf;\n value?: unknown;\n}\n\nexport interface RuntimeDataVale\n extends Pick<LegacyCompatibleRuntimeContext, \"match\" | \"sys\" | \"query\"> {\n location: {\n href: string;\n origin: string;\n hostname: string;\n host: string;\n };\n app?: MicroApp;\n}\n\nexport interface RuntimeDataValueOption {\n routeId?: string;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/internal/interfaces.ts"],"sourcesContent":["import type { LegacyCompatibleRuntimeContext } from \"@next-core/inject\";\nimport type {\n BrickEventHandler,\n BrickEventsMap,\n CustomTemplate,\n RouteConf,\n RuntimeSnippet,\n CustomTemplateProxy,\n CustomTemplateProxyBasicProperty,\n CustomTemplateProxySlot,\n SlotsConfOfBricks,\n Storyboard,\n StaticMenuConf,\n UseProviderResolveConf,\n MicroApp,\n} from \"@next-core/types\";\nimport type { DataStore } from \"./data/DataStore.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { RuntimeBrickConfWithTplSymbols } from \"./CustomTemplates/constants.js\";\nimport { RuntimeBrickConfOfFormSymbols } from \"./FormRenderer/constants.js\";\n\nexport interface RuntimeContext extends LegacyCompatibleRuntimeContext {\n ctxStore: DataStore<\"CTX\">;\n tplStateStoreMap: Map<string, DataStore<\"STATE\">>;\n pendingPermissionsPreCheck: (Promise<unknown> | undefined)[];\n tplStateStoreId?: string;\n // `useBrick` has a local tpl state store scope\n tplStateStoreScope?: DataStore<\"STATE\">[];\n forEachItem?: unknown;\n forEachIndex?: number;\n forEachSize?: number;\n appendI18nNamespace?: string;\n\n formStateStoreMap: Map<string, DataStore<\"FORM_STATE\">>;\n formStateStoreId?: string;\n formStateStoreScope?: DataStore<\"FORM_STATE\">[];\n}\n\nexport type AsyncPropertyEntry = [\n name: string,\n value: Promise<unknown>,\n ignoreUndefined?: boolean,\n];\n\nexport interface ElementHolder {\n element?: HTMLElement | null;\n}\n\nexport interface RenderRoot extends BaseRenderNode {\n tag: RenderTag.ROOT;\n container?: HTMLElement | DocumentFragment;\n createPortal:\n | HTMLElement\n | DocumentFragment\n | (() => HTMLElement | DocumentFragment);\n}\n\nexport interface RenderBrick extends BaseRenderNode, RuntimeBrick {\n tag: RenderTag.BRICK;\n return: RenderReturnNode;\n hasTrackingControls?: boolean;\n}\n\nexport interface RenderPlaceholder extends BaseRenderNode {\n tag: RenderTag.PLACEHOLDER;\n return: RenderReturnNode;\n}\n\nexport interface BaseRenderNode {\n tag: RenderTag;\n child?: RenderChildNode;\n sibling?: RenderChildNode;\n return?: RenderReturnNode | null;\n childElements?: HTMLElement[];\n}\n\nexport type RenderNode = RenderRoot | RenderBrick | RenderPlaceholder;\n\nexport type RenderChildNode = RenderBrick | RenderPlaceholder;\nexport type RenderReturnNode = RenderRoot | RenderBrick;\n\nexport interface RuntimeBrick {\n type: string;\n properties?: Record<string, unknown>;\n events?: BrickEventsMap;\n slotId?: string;\n element?: RuntimeBrickElement | null;\n iid?: string;\n runtimeContext: RuntimeContext;\n tplHostMetadata?: TemplateHostMetadata;\n portal?: boolean;\n ref?: string;\n disposes?: (() => void)[];\n}\n\nexport type MetaInfoOfEventListener = [\n string,\n // For compatibility of devtools, leave the second argument there.\n null | undefined,\n BrickEventHandler,\n];\n\nexport type RememberedEventListener = [string, EventListener];\n\nexport interface RuntimeBrickElement extends HTMLElement {\n $$typeof?: \"brick\" | \"provider\" | \"custom-template\" | \"native\" | \"invalid\";\n /** Meta info of listeners, for devtools only */\n $$eventListeners?: MetaInfoOfEventListener[];\n /** Remembered listeners for unbinding */\n $$listeners?: RememberedEventListener[];\n /** Remembered proxy listeners for unbinding */\n $$proxyListeners?: RememberedEventListener[];\n /** Find element by ref in a custom template */\n $$getElementByRef?: (ref: string) => HTMLElement | null | undefined;\n $$tplStateStore?: DataStore<\"STATE\">;\n}\n\nexport interface TemplateHostMetadata {\n internalBricksByRef: Map<string, RuntimeBrick>;\n tplStateStoreId: string;\n proxy?: CustomTemplateProxy;\n}\n\nexport type TemplateHostBrick = RuntimeBrick & {\n tplHostMetadata: TemplateHostMetadata;\n};\n\nexport interface TemplateHostContext {\n reversedProxies: ReversedProxies;\n asyncHostPropertyEntries: AsyncPropertyEntry[];\n externalSlots?: SlotsConfOfBricks;\n tplStateStoreId: string;\n hostBrick: TemplateHostBrick;\n usedSlots: Set<string>;\n}\n\ninterface ReversedProxies {\n properties: Map<string, ReversedPropertyProxy[]>;\n slots: Map<string, ReversedSlotProxy[]>;\n}\n\ninterface ReversedPropertyProxy {\n from: string;\n to: CustomTemplateProxyBasicProperty;\n}\n\ninterface ReversedSlotProxy {\n from: string;\n to: CustomTemplateProxySlot;\n}\n\nexport type RuntimeBrickConfWithSymbols = RuntimeBrickConfWithTplSymbols &\n RuntimeBrickConfOfFormSymbols;\n\nexport interface DataValueOption {\n tplStateStoreId?: string;\n routeId?: string;\n}\n\nexport type PreviewStoryboardPatch =\n | CustomTemplate\n | RouteConf\n | RuntimeSnippet;\n\nexport interface PreviewOption {\n appId: string;\n formId?: string;\n updateStoryboardType?: \"route\" | \"template\" | \"snippet\";\n collectUsedContracts?(storyboard: Storyboard): string[] | Promise<string[]>;\n}\n\nexport interface MenuRequestNode {\n child?: MenuRequestNode;\n sibling?: MenuRequestNode;\n return?: MenuRequestNode;\n request?: Promise<StaticMenuConf>;\n}\n\nexport interface DebugDataValue {\n resolve?: UseProviderResolveConf;\n value?: unknown;\n}\n\nexport interface RuntimeDataVale\n extends Pick<LegacyCompatibleRuntimeContext, \"match\" | \"sys\" | \"query\"> {\n location: {\n href: string;\n origin: string;\n hostname: string;\n host: string;\n };\n app?: MicroApp;\n}\n\nexport interface RuntimeDataValueOption {\n routeId?: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import type { BrickConf, UseSingleBrickConf } from "@next-core/types";
2
+ import type { TemplateHostContext } from "../interfaces.js";
3
+ export declare function replaceSlotWithSlottedBricks<T extends BrickConf | UseSingleBrickConf>(brickConf: T, hostContext: TemplateHostContext, expand: (item: T, hostContext: TemplateHostContext) => T | T[]): T[];
@@ -1,7 +1,8 @@
1
- import type { SlotsConfOfBricks } from "@next-core/types";
1
+ import type { BrickConf, SlotsConfOfBricks } from "@next-core/types";
2
2
  import { symbolForAsyncComputedPropsFromHost, symbolForTplStateStoreId } from "./constants.js";
3
3
  import type { AsyncPropertyEntry, TemplateHostContext } from "../interfaces.js";
4
- export declare function setupTemplateProxy(hostContext: TemplateHostContext, ref: string | undefined, slots: SlotsConfOfBricks): {
4
+ export declare function setupTemplateProxy(hostContext: TemplateHostContext, ref: string | undefined, slots: SlotsConfOfBricks, slotted: boolean): {
5
5
  [symbolForAsyncComputedPropsFromHost]: AsyncPropertyEntry[] | undefined;
6
6
  [symbolForTplStateStoreId]: string;
7
7
  };
8
+ export declare function setupTemplateExternalBricksWithForEach(bricks: BrickConf[], forEachItem: unknown, forEachIndex: number, forEachSize: number): BrickConf[];
@@ -95,6 +95,7 @@ export interface TemplateHostContext {
95
95
  externalSlots?: SlotsConfOfBricks;
96
96
  tplStateStoreId: string;
97
97
  hostBrick: TemplateHostBrick;
98
+ usedSlots: Set<string>;
98
99
  }
99
100
  interface ReversedProxies {
100
101
  properties: Map<string, ReversedPropertyProxy[]>;