@next-core/runtime 1.71.1 → 1.71.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/createRoot.js +6 -1
- package/dist/cjs/createRoot.js.map +1 -1
- package/dist/cjs/internal/Renderer.js +1 -0
- package/dist/cjs/internal/Renderer.js.map +1 -1
- package/dist/cjs/internal/compute/setRealProperties.js +5 -1
- package/dist/cjs/internal/compute/setRealProperties.js.map +1 -1
- package/dist/cjs/internal/data/resolveData.js +5 -5
- package/dist/cjs/internal/data/resolveData.js.map +1 -1
- package/dist/esm/createRoot.js +6 -1
- package/dist/esm/createRoot.js.map +1 -1
- package/dist/esm/internal/Renderer.js +2 -1
- package/dist/esm/internal/Renderer.js.map +1 -1
- package/dist/esm/internal/compute/setRealProperties.js +5 -1
- package/dist/esm/internal/compute/setRealProperties.js.map +1 -1
- package/dist/esm/internal/data/resolveData.js +5 -5
- package/dist/esm/internal/data/resolveData.js.map +1 -1
- package/dist/types/internal/data/resolveData.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveData.js","names":["_computeRealValue","require","_getProviderBrick","_Runtime","_markAsComputed","_lodash","_isStrictMode","cache","Map","resolveData","resolveConf","runtimeContext","resolveOptions","_hooks$flowApi","useProvider","method","args","params","options","filename","onReject","provider","legacyProvider","field","legacyField","Error","hasLegacyField","undefined","strict","isStrictMode","warnAboutStrictMode","contractConf","Array","isArray","hooks","flowApi","isFlowApiProvider","providerBrick","actualArgs","actualContractConf","Promise","all","getProviderBrick","asyncComputeRealValue","renderId","
|
|
1
|
+
{"version":3,"file":"resolveData.js","names":["_computeRealValue","require","_getProviderBrick","_Runtime","_markAsComputed","_lodash","_isStrictMode","cache","Map","resolveData","resolveConf","runtimeContext","resolveOptions","_hooks$flowApi","useProvider","method","args","params","options","filename","onReject","provider","legacyProvider","field","legacyField","Error","hasLegacyField","undefined","strict","isStrictMode","warnAboutStrictMode","contractConf","Array","isArray","hooks","flowApi","isFlowApiProvider","providerBrick","actualArgs","actualContractConf","Promise","all","getProviderBrick","asyncComputeRealValue","renderId","isStale","_internalApiGetRenderId","promise","resolveByProvider","transform","data","value","get","markAsComputed","error","isHandleRejectByTransform","clearResolveCache","clear","brick","originalArgs","cacheKey","JSON","stringify","e","_hooks$flowApi2","finalArgs","getArgsOfFlowApi","set"],"sources":["../../../../src/internal/data/resolveData.ts"],"sourcesContent":["import type {\n HandleReject,\n HandleRejectByTransform,\n ResolveConf,\n UseProviderContractConf,\n} from \"@next-core/types\";\nimport { asyncComputeRealValue } from \"../compute/computeRealValue.js\";\nimport { getProviderBrick } from \"./getProviderBrick.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { _internalApiGetRenderId, hooks } from \"../Runtime.js\";\nimport { markAsComputed } from \"../compute/markAsComputed.js\";\nimport { get } from \"lodash\";\nimport { isStrictMode, warnAboutStrictMode } from \"../../isStrictMode.js\";\n\nconst cache = new Map<string, Promise<unknown>>();\n\nexport interface ResolveOptions {\n /**\n * Cache mode of resolve.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/Request/cache\n *\n * - `default`: Looks for a matching cache.\n * - `reload`: Without looking for a matching cache.\n */\n cache?: \"default\" | \"reload\";\n renderId?: string;\n}\n\nexport async function resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext,\n resolveOptions?: ResolveOptions\n) {\n const {\n useProvider,\n method = \"resolve\",\n args,\n params,\n options,\n filename,\n onReject,\n } = resolveConf;\n\n const { provider: legacyProvider, field: legacyField } = resolveConf as {\n provider?: string;\n field?: string | string[];\n };\n if (legacyProvider && !useProvider) {\n throw new Error(\n `You're using \"provider: ${legacyProvider}\" which is dropped in v3, please use \"useProvider\" instead`\n );\n }\n\n const hasLegacyField = legacyField !== null && legacyField !== undefined;\n if (hasLegacyField) {\n const strict = isStrictMode();\n warnAboutStrictMode(strict, \"`resolve.field`\");\n // istanbul ignore next\n if (strict) {\n throw new Error(\"Using deprecated `resolve.field`\");\n }\n }\n\n const contractConf =\n !Array.isArray(args) &&\n params &&\n hooks?.flowApi?.isFlowApiProvider(useProvider)\n ? ({ params, options, filename } as UseProviderContractConf)\n : null;\n\n const [providerBrick, actualArgs, actualContractConf] = await Promise.all([\n getProviderBrick(useProvider) as unknown as Promise<\n Record<string, Function>\n >,\n asyncComputeRealValue(args, runtimeContext) as Promise<\n unknown[] | undefined\n >,\n asyncComputeRealValue(\n contractConf,\n runtimeContext\n ) as Promise<UseProviderContractConf | null>,\n ]);\n\n // `clearResolveCache` maybe called during the above promise being\n // fulfilled, so we manually mark it as stale for this case.\n const renderId = resolveOptions?.renderId;\n const isStale = () => !!renderId && renderId !== _internalApiGetRenderId();\n\n const promise = resolveByProvider(\n providerBrick,\n useProvider,\n method,\n actualContractConf?.params ? actualContractConf : (actualArgs ?? []),\n resolveOptions,\n args,\n isStale\n );\n\n let { transform } = resolveConf;\n let data: unknown;\n\n try {\n const value = await promise;\n data = hasLegacyField ? get(value, legacyField) : value;\n // The fetched data and its inner objects should never be *injected* again.\n markAsComputed(data);\n } catch (error) {\n if (isHandleRejectByTransform(onReject)) {\n transform = onReject.transform;\n data = error;\n } else {\n throw error;\n }\n }\n\n if (!transform) {\n return data;\n }\n\n // Keep backward compatibility of string transform.\n if (typeof transform === \"string\") {\n return { [transform]: data };\n }\n\n return asyncComputeRealValue(transform, { ...runtimeContext, data });\n}\n\nexport function clearResolveCache() {\n cache.clear();\n}\n\nexport async function resolveByProvider(\n brick: Record<string, Function>,\n useProvider: string,\n method: string,\n args: unknown[] | UseProviderContractConf,\n options?: ResolveOptions,\n originalArgs?: unknown[],\n isStale?: () => boolean\n) {\n let cacheKey: string;\n try {\n // `args` may contain circular references, which makes\n // JSON stringify failed, thus we fallback to original args.\n cacheKey = JSON.stringify({\n useProvider,\n method,\n args,\n });\n } catch (e) {\n if (!originalArgs) {\n throw e;\n }\n cacheKey = JSON.stringify({\n useProvider,\n method,\n originalArgs,\n });\n }\n\n let promise: Promise<unknown> | undefined;\n if (options?.cache !== \"reload\") {\n promise = cache.get(cacheKey);\n }\n if (!promise) {\n promise = (async () => {\n const finalArgs = hooks?.flowApi?.isFlowApiProvider(useProvider)\n ? await hooks.flowApi.getArgsOfFlowApi(useProvider, args, method)\n : (args as unknown[]);\n return brick[method](...finalArgs);\n })();\n\n if (!isStale?.()) {\n cache.set(cacheKey, promise);\n }\n }\n\n return promise;\n}\n\nfunction isHandleRejectByTransform(\n onReject: HandleReject | undefined\n): onReject is HandleRejectByTransform {\n return !!(onReject as HandleRejectByTransform)?.transform;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/esm/createRoot.js
CHANGED
|
@@ -14,6 +14,7 @@ import { setUIVersion } from "./setUIVersion.js";
|
|
|
14
14
|
import { ErrorNode } from "./internal/ErrorNode.js";
|
|
15
15
|
import { isolatedFunctionRegistry, registerIsolatedFunctions } from "./internal/compute/IsolatedFunctions.js";
|
|
16
16
|
import { isolatedTemplateRegistryMap, registerIsolatedTemplates } from "./internal/IsolatedTemplates.js";
|
|
17
|
+
import { hooks } from "./internal/Runtime.js";
|
|
17
18
|
export function unstable_createRoot(container) {
|
|
18
19
|
let {
|
|
19
20
|
portal: _portal,
|
|
@@ -42,6 +43,7 @@ export function unstable_createRoot(container) {
|
|
|
42
43
|
const isolatedRoot = scope === "page" ? undefined : Symbol("IsolatedRoot");
|
|
43
44
|
return {
|
|
44
45
|
async render(brick) {
|
|
46
|
+
var _hooks$auth;
|
|
45
47
|
let {
|
|
46
48
|
theme,
|
|
47
49
|
uiVersion,
|
|
@@ -77,7 +79,10 @@ export function unstable_createRoot(container) {
|
|
|
77
79
|
tplStateStoreMap: new Map(),
|
|
78
80
|
formStateStoreMap: new Map(),
|
|
79
81
|
isolatedRoot,
|
|
80
|
-
unsafe_penetrate
|
|
82
|
+
unsafe_penetrate,
|
|
83
|
+
sys: {
|
|
84
|
+
...(hooks === null || hooks === void 0 || (_hooks$auth = hooks.auth) === null || _hooks$auth === void 0 ? void 0 : _hooks$auth.getAuth())
|
|
85
|
+
}
|
|
81
86
|
};
|
|
82
87
|
if (url) {
|
|
83
88
|
const urlObj = new URL(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRoot.js","names":["i18n","replaceUseChildren","uniqueId","getDataStores","postAsyncRender","renderBricks","RendererContext","DataStore","mountTree","unmountTree","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","setUIVersion","ErrorNode","isolatedFunctionRegistry","registerIsolatedFunctions","isolatedTemplateRegistryMap","registerIsolatedTemplates","unstable_createRoot","container","portal","_portal","scope","unknownBricks","supportsUseChildren","unsafe_penetrate","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","isolatedRoot","Symbol","render","brick","theme","uiVersion","language","context","functions","templates","i18nData","url","app","Error","bricks","concat","template","Array","isArray","previousRendererContext","renderId","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","urlObj","URL","query","searchParams","location","pathname","search","hash","state","renderRoot","tag","ROOT","_clearI18nBundles","changeLanguage","id","homepage","demoStoryboard","meta","customTemplates","define","failed","output","stores","error","node","blockingList","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","delete","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { replaceUseChildren } from \"@next-core/utils/storyboard\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\nimport {\n isolatedFunctionRegistry,\n registerIsolatedFunctions,\n} from \"./internal/compute/IsolatedFunctions.js\";\nimport {\n isolatedTemplateRegistryMap,\n registerIsolatedTemplates,\n} from \"./internal/IsolatedTemplates.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n\n /**\n * Whether the root supports `useChildren`.\n */\n supportsUseChildren?: boolean;\n\n /**\n * Set unsafe_penetrate to true to allow accessing global variables\n * from an isolated root.\n *\n * It is unsafe, use it at your own risk.\n */\n unsafe_penetrate?: boolean;\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n {\n portal: _portal,\n scope = \"fragment\",\n unknownBricks,\n supportsUseChildren,\n unsafe_penetrate,\n }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n const isolatedRoot = scope === \"page\" ? undefined : Symbol(\"IsolatedRoot\");\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n if (supportsUseChildren) {\n replaceUseChildren(bricks);\n\n for (const template of templates ?? []) {\n if (Array.isArray(template.bricks)) {\n replaceUseChildren(template.bricks);\n }\n }\n }\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n isolatedRoot,\n unsafe_penetrate,\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n } else {\n registerIsolatedTemplates(isolatedRoot!, templates);\n registerIsolatedFunctions(isolatedRoot!, functions);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n if (isolatedRoot) {\n isolatedFunctionRegistry.delete(isolatedRoot);\n isolatedTemplateRegistryMap.delete(isolatedRoot);\n }\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"AAUA,SAASA,IAAI,QAAQ,iBAAiB;AACtC,SAASC,kBAAkB,QAAQ,6BAA6B;AAChE,SAASC,QAAQ,QAAQ,QAAQ;AACjC,SAEEC,aAAa,EACbC,eAAe,EACfC,YAAY,QACP,wBAAwB;AAC/B,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,SAASC,SAAS,QAAQ,8BAA8B;AAExD,SAASC,SAAS,EAAEC,WAAW,QAAQ,qBAAqB;AAC5D,SAASC,SAAS,EAAEC,UAAU,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,mBAAmB;AAC5E,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,SAASC,2BAA2B,QAAQ,2CAA2C;AACvF,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,SAASC,uBAAuB,QAAQ,uCAAuC;AAC/E,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SACEC,wBAAwB,EACxBC,yBAAyB,QACpB,yCAAyC;AAChD,SACEC,2BAA2B,EAC3BC,yBAAyB,QACpB,iCAAiC;AA4CxC,OAAO,SAASC,mBAAmBA,CACjCC,SAAyC,EAQzC;EAAA,IAPA;IACEC,MAAM,EAAEC,OAAO;IACfC,KAAK,GAAG,UAAU;IAClBC,aAAa;IACbC,mBAAmB;IACnBC;EACiB,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEzB,IAAIN,MAAM,GAAGC,OAAO;EACpB,IAAIQ,YAAwC;EAC5C,IAAIR,OAAO,EAAE;IACXQ,YAAY,GAAGR,OAAO;EACxB,CAAC,MAAM;IACL;IACAQ,YAAY,GAAGA,CAAA,KAAM;MACnBT,MAAM,GAAGU,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACtCX,MAAM,CAACY,KAAK,CAACC,QAAQ,GAAG,UAAU;MAClCb,MAAM,CAACY,KAAK,CAACE,KAAK,GAAGd,MAAM,CAACY,KAAK,CAACG,MAAM,GAAG,GAAG;MAC9CL,QAAQ,CAACM,IAAI,CAACC,MAAM,CAACjB,MAAM,CAAC;MAC5B,OAAOA,MAAM;IACf,CAAC;EACH;EACA,IAAIkB,SAAS,GAAG,KAAK;EACrB,IAAIC,eAA4C;EAChD,IAAIC,gBAAsC;EAC1C,MAAMC,YAAY,GAAGnB,KAAK,KAAK,MAAM,GAAGM,SAAS,GAAGc,MAAM,CAAC,cAAc,CAAC;EAE1E,OAAO;IACL,MAAMC,MAAMA,CACVC,KAA8B,EAY9B;MAAA,IAXA;QACEC,KAAK;QACLC,SAAS;QACTC,QAAQ;QACRC,OAAO;QACPC,SAAS;QACTC,SAAS;QACTxD,IAAI,EAAEyD,QAAQ;QACdC,GAAG;QACHC;MACa,CAAC,GAAA3B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;MAErB,IAAIY,SAAS,EAAE;QACb,MAAM,IAAIgB,KAAK,CACb,uDACF,CAAC;MACH;MACA,MAAMC,MAAM,GAAI,EAAE,CAAiBC,MAAM,CAACZ,KAAK,CAAC;MAEhD,IAAIpB,mBAAmB,EAAE;QACvB7B,kBAAkB,CAAC4D,MAAM,CAAC;QAE1B,KAAK,MAAME,QAAQ,IAAIP,SAAS,aAATA,SAAS,cAATA,SAAS,GAAI,EAAE,EAAE;UACtC,IAAIQ,KAAK,CAACC,OAAO,CAACF,QAAQ,CAACF,MAAM,CAAC,EAAE;YAClC5D,kBAAkB,CAAC8D,QAAQ,CAACF,MAAM,CAAC;UACrC;QACF;MACF;MAEA,MAAMK,uBAAuB,GAAGrB,eAAe;MAC/C,MAAMsB,QAAQ,GAAGjE,QAAQ,CAAC,YAAY,CAAC;MACvC2C,eAAe,GAAG,IAAIvC,eAAe,CAACsB,KAAK,EAAE;QAAEC,aAAa;QAAEsC;MAAS,CAAC,CAAC;MAEzE,MAAMC,cAAc,GAAG;QACrBC,QAAQ,EAAE,IAAI9D,SAAS,CAAC,KAAK,EAAE2B,SAAS,EAAEW,eAAe,CAAC;QAC1DyB,0BAA0B,EAAE,EAAE;QAC9BC,gBAAgB,EAAE,IAAIC,GAAG,CAA6B,CAAC;QACvDC,iBAAiB,EAAE,IAAID,GAAG,CAAkC,CAAC;QAC7DzB,YAAY;QACZhB;MACF,CAA8C;MAE9C,IAAI2B,GAAG,EAAE;QACP,MAAMgB,MAAM,GAAG,IAAIC,GAAG,CAACjB,GAAG,CAAC;QAC3BU,cAAc,CAACQ,KAAK,GAAGF,MAAM,CAACG,YAAY;QAC1CT,cAAc,CAACU,QAAQ,GAAG;UACxBC,QAAQ,EAAEL,MAAM,CAACK,QAAQ;UACzBC,MAAM,EAAEN,MAAM,CAACM,MAAM;UACrBC,IAAI,EAAEP,MAAM,CAACO,IAAI;UACjBC,KAAK,EAAEhD;QACT,CAAC;MACH;MAEA,MAAMiD,UAAsB,GAAG;QAC7BC,GAAG,EAAEtE,SAAS,CAACuE,IAAI;QACnB5D,SAAS;QACTU;MACF,CAAC;MAED,IAAIP,KAAK,KAAK,MAAM,EAAE;QAAA,IAAA0D,iBAAA;QACpBzE,QAAQ,CAACsC,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,OAAO,CAAC;QAC1BvC,OAAO,CAAC,SAAS,CAAC;QAClBM,YAAY,CAACkC,SAAS,CAAC;QACvB,IAAIC,QAAQ,EAAE;UACZ,MAAMrD,IAAI,CAACuF,cAAc,CAAClC,QAAQ,CAAC;QACrC;QAEAM,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAHA,GAAG,GAAK;UACN6B,EAAE,EAAE,MAAM;UACVC,QAAQ,EAAE;QACZ,CAAC;QACDrB,cAAc,CAACT,GAAG,GAAGA,GAAG;QACxB,MAAM+B,cAAc,GAAG;UACrB/B,GAAG;UACHgC,IAAI,EAAE;YACJ3F,IAAI,EAAEyD,QAAQ;YACdmC,eAAe,EAAEpC;UACnB;QACF,CAAe;;QAEf;QACA,CAAA8B,iBAAA,GAAAxC,gBAAgB,cAAAwC,iBAAA,eAAhBA,iBAAA,CAAmB,CAAC;QACpBxC,gBAAgB,GAAG9B,eAAe,CAAC0E,cAAc,CAAC;;QAElD;QACAzE,uBAAuB,CAACyE,cAAc,CAAC;;QAEvC;QACA3E,2BAA2B,CAACwC,SAAS,EAAEI,GAAG,CAAC;MAC7C,CAAC,MAAM;QACLpC,yBAAyB,CAACwB,YAAY,EAAGS,SAAS,CAAC;QACnDnC,yBAAyB,CAAC0B,YAAY,EAAGQ,SAAS,CAAC;MACrD;MAEAa,cAAc,CAACC,QAAQ,CAACwB,MAAM,CAACvC,OAAO,EAAEc,cAAc,CAAC;MAEvD,IAAI0B,MAAM,GAAG,KAAK;MAClB,IAAIC,MAAoB;MACxB,IAAIC,MAAmD,GAAG,EAAE;MAE5D,IAAI;QACFD,MAAM,GAAG,MAAM1F,YAAY,CACzB8E,UAAU,EACVtB,MAAM,EACNO,cAAc,EACdvB,eAAe,EACf,EAAE,EACF,CAAC,CACH,CAAC;QAEDmD,MAAM,GAAG7F,aAAa,CAACiE,cAAc,CAAC;QACtC,MAAMhE,eAAe,CAAC2F,MAAM,EAAE3B,cAAc,EAAE4B,MAAM,CAAC;MACvD,CAAC,CAAC,OAAOC,KAAK,EAAE;QACdH,MAAM,GAAG,IAAI;QACbC,MAAM,GAAG;UACPG,IAAI,EAAE,MAAM/E,SAAS,CAAC8E,KAAK,EAAEd,UAAU,EAAEvD,KAAK,KAAK,MAAM,CAAC;UAC1DuE,YAAY,EAAE;QAChB,CAAC;MACH;MAEAhB,UAAU,CAACiB,KAAK,GAAGL,MAAM,CAACG,IAAI;MAE9BhC,uBAAuB,aAAvBA,uBAAuB,eAAvBA,uBAAuB,CAAEmC,iBAAiB,CAAC,CAAC;MAC5CnC,uBAAuB,aAAvBA,uBAAuB,eAAvBA,uBAAuB,CAAEoC,OAAO,CAAC,CAAC;MAClC7F,WAAW,CAACgB,SAAS,CAAC;MACtB,IAAIC,MAAM,EAAE;QACVjB,WAAW,CAACiB,MAAM,CAAC;MACrB;MAEA,IAAIE,KAAK,KAAK,MAAM,EAAE;QACpB,IAAI,CAACkE,MAAM,EAAE;UACXjD,eAAe,CAAC0D,sBAAsB,CAAC,CAAC;QAC1C;QAEA5F,UAAU,CAAC,CAAC;QACZD,SAAS,CAAC,CAAC;MACb;MAEAF,SAAS,CAAC2E,UAAU,CAAC;MAErB,IAAIvD,KAAK,KAAK,MAAM,EAAE;QACpB4E,MAAM,CAACC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;MACvB;MAEA,IAAI,CAACX,MAAM,EAAE;QACX,KAAK,MAAMY,KAAK,IAAIV,MAAM,EAAE;UAC1BU,KAAK,CAACC,cAAc,CAAC,CAAC;QACxB;QAEA,IAAI/E,KAAK,KAAK,MAAM,EAAE;UACpBiB,eAAe,CAAC+D,gBAAgB,CAAC,CAAC;UAClC;QACF;QACA/D,eAAe,CAACgE,eAAe,CAAC,CAAC;QACjChE,eAAe,CAACiE,wBAAwB,CAAC,CAAC;QAC1CjE,eAAe,CAACkE,qBAAqB,CAAC,CAAC;QACvClE,eAAe,CAACmE,2BAA2B,CAAC,CAAC;MAC/C;IACF,CAAC;IACDC,OAAOA,CAAA,EAAG;MACR,IAAIrE,SAAS,EAAE;QACb;MACF;MACAA,SAAS,GAAG,IAAI;MAChB,IAAIG,YAAY,EAAE;QAChB3B,wBAAwB,CAAC8F,MAAM,CAACnE,YAAY,CAAC;QAC7CzB,2BAA2B,CAAC4F,MAAM,CAACnE,YAAY,CAAC;MAClD;MACAtC,WAAW,CAACgB,SAAS,CAAC;MACtB,IAAIC,MAAM,EAAE;QACVjB,WAAW,CAACiB,MAAM,CAAC;QACnB;QACA,IAAI,CAACC,OAAO,EAAE;UACZD,MAAM,CAACyF,MAAM,CAAC,CAAC;QACjB;MACF;IACF;EACF,CAAC;AACH","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"createRoot.js","names":["i18n","replaceUseChildren","uniqueId","getDataStores","postAsyncRender","renderBricks","RendererContext","DataStore","mountTree","unmountTree","applyMode","applyTheme","setMode","setTheme","RenderTag","registerStoryboardFunctions","registerAppI18n","registerCustomTemplates","setUIVersion","ErrorNode","isolatedFunctionRegistry","registerIsolatedFunctions","isolatedTemplateRegistryMap","registerIsolatedTemplates","hooks","unstable_createRoot","container","portal","_portal","scope","unknownBricks","supportsUseChildren","unsafe_penetrate","arguments","length","undefined","createPortal","document","createElement","style","position","width","height","body","append","unmounted","rendererContext","clearI18nBundles","isolatedRoot","Symbol","render","brick","_hooks$auth","theme","uiVersion","language","context","functions","templates","i18nData","url","app","Error","bricks","concat","template","Array","isArray","previousRendererContext","renderId","runtimeContext","ctxStore","pendingPermissionsPreCheck","tplStateStoreMap","Map","formStateStoreMap","sys","auth","getAuth","urlObj","URL","query","searchParams","location","pathname","search","hash","state","renderRoot","tag","ROOT","_clearI18nBundles","changeLanguage","id","homepage","demoStoryboard","meta","customTemplates","define","failed","output","stores","error","node","blockingList","child","dispatchOnUnmount","dispose","dispatchBeforePageLoad","window","scrollTo","store","mountAsyncData","dispatchPageLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","unmount","delete","remove"],"sources":["../../src/createRoot.ts"],"sourcesContent":["import type {\n BrickConf,\n ContextConf,\n CustomTemplate,\n MetaI18n,\n MicroApp,\n SiteTheme,\n Storyboard,\n StoryboardFunction,\n} from \"@next-core/types\";\nimport { i18n } from \"@next-core/i18n\";\nimport { replaceUseChildren } from \"@next-core/utils/storyboard\";\nimport { uniqueId } from \"lodash\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderBricks,\n} from \"./internal/Renderer.js\";\nimport { RendererContext } from \"./internal/RendererContext.js\";\nimport { DataStore } from \"./internal/data/DataStore.js\";\nimport type { RenderRoot, RuntimeContext } from \"./internal/interfaces.js\";\nimport { mountTree, unmountTree } from \"./internal/mount.js\";\nimport { applyMode, applyTheme, setMode, setTheme } from \"./themeAndMode.js\";\nimport { RenderTag } from \"./internal/enums.js\";\nimport { registerStoryboardFunctions } from \"./internal/compute/StoryboardFunctions.js\";\nimport { registerAppI18n } from \"./internal/registerAppI18n.js\";\nimport { registerCustomTemplates } from \"./internal/registerCustomTemplates.js\";\nimport { setUIVersion } from \"./setUIVersion.js\";\nimport { ErrorNode } from \"./internal/ErrorNode.js\";\nimport {\n isolatedFunctionRegistry,\n registerIsolatedFunctions,\n} from \"./internal/compute/IsolatedFunctions.js\";\nimport {\n isolatedTemplateRegistryMap,\n registerIsolatedTemplates,\n} from \"./internal/IsolatedTemplates.js\";\nimport { hooks } from \"./internal/Runtime.js\";\n\nexport interface CreateRootOptions {\n portal?: HTMLElement;\n /**\n * Defaults to \"fragment\", only set it to \"page\" when the root is in a standalone iframe.\n * - page: render as whole page, triggering page life cycles, and enable register of functions/templates/i18n.\n * - fragment: render as fragment, not triggering page life cycles, and disable register of functions/templates/i18n.\n */\n scope?: \"page\" | \"fragment\";\n\n /**\n * Whether to throw error when encountering unknown bricks.\n *\n * Defaults to \"throw\".\n */\n unknownBricks?: \"silent\" | \"throw\";\n\n /**\n * Whether the root supports `useChildren`.\n */\n supportsUseChildren?: boolean;\n\n /**\n * Set unsafe_penetrate to true to allow accessing global variables\n * from an isolated root.\n *\n * It is unsafe, use it at your own risk.\n */\n unsafe_penetrate?: boolean;\n}\n\nexport interface RenderOptions {\n theme?: SiteTheme;\n uiVersion?: string;\n language?: string;\n context?: ContextConf[];\n functions?: StoryboardFunction[];\n templates?: CustomTemplate[];\n i18n?: MetaI18n;\n url?: string;\n app?: MicroApp;\n}\n\nexport function unstable_createRoot(\n container: HTMLElement | DocumentFragment,\n {\n portal: _portal,\n scope = \"fragment\",\n unknownBricks,\n supportsUseChildren,\n unsafe_penetrate,\n }: CreateRootOptions = {}\n) {\n let portal = _portal;\n let createPortal: RenderRoot[\"createPortal\"];\n if (_portal) {\n createPortal = _portal;\n } else {\n // Create portal container when necessary.\n createPortal = () => {\n portal = document.createElement(\"div\");\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\n };\n }\n let unmounted = false;\n let rendererContext: RendererContext | undefined;\n let clearI18nBundles: Function | undefined;\n const isolatedRoot = scope === \"page\" ? undefined : Symbol(\"IsolatedRoot\");\n\n return {\n async render(\n brick: BrickConf | BrickConf[],\n {\n theme,\n uiVersion,\n language,\n context,\n functions,\n templates,\n i18n: i18nData,\n url,\n app,\n }: RenderOptions = {}\n ) {\n if (unmounted) {\n throw new Error(\n \"The root is unmounted and cannot be rendered any more\"\n );\n }\n const bricks = ([] as BrickConf[]).concat(brick);\n\n if (supportsUseChildren) {\n replaceUseChildren(bricks);\n\n for (const template of templates ?? []) {\n if (Array.isArray(template.bricks)) {\n replaceUseChildren(template.bricks);\n }\n }\n }\n\n const previousRendererContext = rendererContext;\n const renderId = uniqueId(\"render-id-\");\n rendererContext = new RendererContext(scope, { unknownBricks, renderId });\n\n const runtimeContext = {\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n isolatedRoot,\n unsafe_penetrate,\n sys: {\n ...hooks?.auth?.getAuth(),\n },\n } as Partial<RuntimeContext> as RuntimeContext;\n\n if (url) {\n const urlObj = new URL(url);\n runtimeContext.query = urlObj.searchParams;\n runtimeContext.location = {\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n state: undefined,\n };\n }\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container,\n createPortal,\n };\n\n if (scope === \"page\") {\n setTheme(theme ?? \"light\");\n setMode(\"default\");\n setUIVersion(uiVersion);\n if (language) {\n await i18n.changeLanguage(language);\n }\n\n app ??= {\n id: \"demo\",\n homepage: \"/demo\",\n } as MicroApp;\n runtimeContext.app = app;\n const demoStoryboard = {\n app,\n meta: {\n i18n: i18nData,\n customTemplates: templates,\n },\n } as Storyboard;\n\n // Register i18n.\n clearI18nBundles?.();\n clearI18nBundles = registerAppI18n(demoStoryboard);\n\n // Register custom templates.\n registerCustomTemplates(demoStoryboard);\n\n // Register functions.\n registerStoryboardFunctions(functions, app);\n } else {\n registerIsolatedTemplates(isolatedRoot!, templates);\n registerIsolatedFunctions(isolatedRoot!, functions);\n }\n\n runtimeContext.ctxStore.define(context, runtimeContext);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n output = await renderBricks(\n renderRoot,\n bricks,\n runtimeContext,\n rendererContext,\n [],\n {}\n );\n\n stores = getDataStores(runtimeContext);\n await postAsyncRender(output, runtimeContext, stores);\n } catch (error) {\n failed = true;\n output = {\n node: await ErrorNode(error, renderRoot, scope === \"page\"),\n blockingList: [],\n };\n }\n\n renderRoot.child = output.node;\n\n previousRendererContext?.dispatchOnUnmount();\n previousRendererContext?.dispose();\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n }\n\n if (scope === \"page\") {\n if (!failed) {\n rendererContext.dispatchBeforePageLoad();\n }\n\n applyTheme();\n applyMode();\n }\n\n mountTree(renderRoot);\n\n if (scope === \"page\") {\n window.scrollTo(0, 0);\n }\n\n if (!failed) {\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n if (scope === \"page\") {\n rendererContext.dispatchPageLoad();\n // rendererContext.dispatchAnchorLoad();\n }\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n }\n },\n unmount() {\n if (unmounted) {\n return;\n }\n unmounted = true;\n if (isolatedRoot) {\n isolatedFunctionRegistry.delete(isolatedRoot);\n isolatedTemplateRegistryMap.delete(isolatedRoot);\n }\n unmountTree(container);\n if (portal) {\n unmountTree(portal);\n // Only remove the portal from its parent when it's dynamic created.\n if (!_portal) {\n portal.remove();\n }\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ import { strictCollectMemberUsage } from "@next-core/utils/storyboard";
|
|
|
5
5
|
import { debounce, isEqual, omitBy } from "lodash";
|
|
6
6
|
import { asyncCheckBrickIf } from "./compute/checkIf.js";
|
|
7
7
|
import { asyncComputeRealPropertyEntries, constructAsyncProperties } from "./compute/computeRealProperties.js";
|
|
8
|
-
import { resolveData } from "./data/resolveData.js";
|
|
8
|
+
import { clearResolveCache, resolveData } from "./data/resolveData.js";
|
|
9
9
|
import { asyncComputeRealValue } from "./compute/computeRealValue.js";
|
|
10
10
|
import { listenOnTrackingContext, trackAfterInitial } from "./compute/listenOnTrackingContext.js";
|
|
11
11
|
import { matchRoute, matchRoutes } from "./matchRoutes.js";
|
|
@@ -566,6 +566,7 @@ async function legacyRenderBrick(returnNode, brickConf, _runtimeContext, rendere
|
|
|
566
566
|
})) {
|
|
567
567
|
return false;
|
|
568
568
|
}
|
|
569
|
+
clearResolveCache();
|
|
569
570
|
const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] = createScopedRuntimeContext({
|
|
570
571
|
...childRuntimeContext,
|
|
571
572
|
location,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.js","names":["enqueueStableLoadBricks","flushStableLoadBricks","loadBricksImperatively","loadProcessorsImperatively","loadScript","loadStyle","isTrackAll","hasOwnProperty","strictCollectMemberUsage","debounce","isEqual","omitBy","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","usedProcessors","size","catchLoad","join","unknownBricks","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","rendered","Promise","all","map","brickConf","renderBrick","Map","forEach","item","arguments","length","legacyRenderBrick","errorBoundary","node","_hooks$checkPermissio2","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","contextNames","stateNames","tracking","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","abstractNode","tag","ABSTRACT","childrenOutput","renderForEach","child","renderControlNode","_ref","tplStateStoreScope","formStateStoreScope","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","controlledOutput","onMount","onUnmount","lifeCycle","_runtimeBrick$dispose","renderId","mounted","disposed","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","ROOT","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","tplTagName","_tplStack$get","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","_brickConf$properties2","properties","compute","inUseBrick","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","BRICK","events","portal","ref","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref2","index","childSlotId","slotConf","lastOutput","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","app","pathname","every","prevMatch","newMatch","isRouteParamsEqual","params","query","URLSearchParams","search","failed","incrementalOutput","newControlNode","reBailout","result","reCatch","reMergeMenuRequestNodes","routesOutput","mergeSiblingRenderMenuRequest","i","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","a","b","omitNumericKeys","v","k","Number","c","d"],"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, omitBy } 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 RenderAbstract,\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}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n 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 initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item) => {\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 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 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 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 iid: brickConf.iid,\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 tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n const tracking = !!(contextNames || stateNames);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n const output = getEmptyRenderOutput();\n const abstractNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: returnNode,\n iid: brickConf.iid,\n };\n output.node = abstractNode;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n let childrenOutput: RenderOutput | undefined;\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n break;\n }\n childrenOutput = await renderForEach(\n abstractNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n tracker\n );\n break;\n }\n case \":if\":\n case \":switch\": {\n childrenOutput = await renderBricks(\n abstractNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n tracker\n );\n }\n }\n\n if (childrenOutput) {\n abstractNode.child = childrenOutput.node;\n mergeRenderOutput(output, { ...childrenOutput, node: undefined });\n }\n\n return output;\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n return rawOutput!;\n };\n\n let controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (tracking) {\n let renderId = 0;\n const listener = async () => {\n // TODO(steve): start listeners when mounting, and handle changes between rendering and mounting.\n if (!returnNode.mounted || returnNode.disposed) {\n return;\n }\n\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (\n renderId === currentRenderId &&\n returnNode.mounted &&\n !returnNode.disposed\n ) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n returnNode,\n reControlledOutput.node!,\n controlledOutput.node!\n );\n controlledOutput = reControlledOutput;\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.ROOT ? null : returnNode;\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(brickName, runtimeContext);\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(async ([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 initialTracker\n );\n }\n\n let lastOutput = getEmptyRenderOutput();\n const abstractNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: brick,\n };\n lastOutput.node = abstractNode;\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 isRouteParamsEqual(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 const newOutput = getEmptyRenderOutput();\n const newControlNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: brick,\n };\n newOutput.node = newControlNode;\n\n try {\n incrementalOutput = await renderRoutes(\n newControlNode,\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 } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(\n error,\n newControlNode\n );\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n }\n\n // istanbul ignore next: covered by e2e tests\n if (brick.disposed) {\n return true;\n }\n\n newControlNode.child = incrementalOutput.node;\n mergeRenderOutput(newOutput, {\n ...incrementalOutput,\n node: undefined,\n });\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n\n rendererContext.reRender(brick, newControlNode, lastOutput.node!);\n\n lastOutput = newOutput;\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 const routesOutput = await renderRoutes(\n abstractNode,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n\n abstractNode.child = routesOutput.node;\n mergeRenderOutput(output, { ...routesOutput, node: undefined });\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = routesOutput.menuRequestNode)\n );\n\n return lastOutput;\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item) => {\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 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) =>\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 tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item) => {\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 const { blockingList, node, menuRequestNode, ...rest } = 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\nfunction isRouteParamsEqual(\n a: Record<string, string>,\n b: Record<string, string>\n) {\n if (isEqual(a, b)) {\n return true;\n }\n const omitNumericKeys = (v: unknown, k: string) => {\n return String(Number(k)) === k;\n };\n const c = omitBy(a, omitNumericKeys);\n const d = omitBy(b, omitNumericKeys);\n return isEqual(c, d);\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","omitBy","asyncCheckBrickIf","asyncComputeRealPropertyEntries","constructAsyncProperties","clearResolveCache","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","usedProcessors","size","catchLoad","join","unknownBricks","newOutput","renderBricks","bricks","mergeRenderOutput","appendMenuRequestNode","tplStack","rendered","Promise","all","map","brickConf","renderBrick","Map","forEach","item","arguments","length","legacyRenderBrick","errorBoundary","node","_hooks$checkPermissio2","brick","template","if","brickIf","permissionsPreCheck","restBrickConf","isGeneralizedTrackAll","dataSource","slots","Object","getOwnPropertySymbols","reduce","acc","symbol","tplStateStoreId","formStateStoreId","forEachItem","forEachIndex","forEachSize","strict","brickName","startsWith","_brickConf$lifeCycle","ensureValidControlBrick","contextNames","stateNames","tracking","lowerLevelRenderControlNode","tracker","trackDataSource","_slots$slot","computedDataSource","propValue","slot","String","childrenToSlots","children","abstractNode","tag","ABSTRACT","childrenOutput","renderForEach","child","renderControlNode","_ref","tplStateStoreScope","formStateStoreScope","changedAfterInitial","disposes","listener","rerenderCount","rawOutput","uninitialized","scopedStores","postAsyncRender","dispose","controlledOutput","onMount","onUnmount","lifeCycle","_runtimeBrick$dispose","renderId","mounted","disposed","currentRenderId","scopedRuntimeContext","createScopedRuntimeContext","reControlledOutput","CustomEvent","detail","rerender","reRender","store","mountAsyncData","debouncedListener","leading","trailing","runtimeBrick","ROOT","contextName","onChange","tplStateStore","registerArbitraryLifeCycle","test","get","tplTagName","_tplStack$get","tplCount","set","includes","customElements","formData","confProps","_brickConf$properties","_brickConf$properties2","properties","compute","inUseBrick","trackingContextList","asyncPropertyEntries","computedPropsFromHost","isScript","props","src","rel","href","_window$PUBLIC_ROOT","prefix","window","PUBLIC_ROOT","attrs","BRICK","events","portal","ref","loadProperties","registerBrickLifeCycle","expandedBrickConf","childRuntimeContext","loadChildren","routeSlotFromIndexToSlotId","entries","_ref2","index","childSlotId","slotConf","lastOutput","parentRoute","incrementalSubRoutes","performIncrementalRender","location","prevLocation","homepage","app","pathname","every","prevMatch","newMatch","isRouteParamsEqual","params","query","URLSearchParams","search","failed","incrementalOutput","newControlNode","reBailout","result","reCatch","reMergeMenuRequestNodes","routesOutput","mergeSiblingRenderMenuRequest","i","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","a","b","omitNumericKeys","v","k","Number","c","d"],"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, omitBy } from \"lodash\";\nimport { asyncCheckBrickIf } from \"./compute/checkIf.js\";\nimport {\n asyncComputeRealPropertyEntries,\n constructAsyncProperties,\n} from \"./compute/computeRealProperties.js\";\nimport { clearResolveCache, 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 RenderAbstract,\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}\n\nexport async function renderRoutes(\n returnNode: RenderReturnNode,\n routes: RouteConf[],\n _runtimeContext: RuntimeContext,\n rendererContext: RendererContext,\n parentRoutes: RouteConf[],\n menuRequestReturnNode: MenuRequestNode,\n slotId?: string,\n isIncremental?: boolean,\n initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n const matched = await matchRoutes(routes, _runtimeContext);\n const output = getEmptyRenderOutput();\n const menuRequestNode: MenuRequestNode = (output.menuRequestNode = {\n return: menuRequestReturnNode,\n });\n switch (matched) {\n case \"missed\":\n break;\n case \"unauthenticated\":\n output.unauthenticated = true;\n break;\n default: {\n const route = (output.route = matched.route);\n output.path = matched.match.path;\n const runtimeContext = {\n ..._runtimeContext,\n match: matched.match,\n };\n\n if (route.iid) {\n setMatchedRoute(route.iid, matched.match);\n }\n\n if (isIncremental) {\n runtimeContext.ctxStore.disposeDataInRoutes(routes);\n }\n const routePath = parentRoutes.concat(route);\n runtimeContext.ctxStore.define(\n route.context,\n runtimeContext,\n undefined,\n routePath\n );\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n route,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n // Currently, this is only used for brick size-checking: these bricks\n // will be loaded before page rendering, but they will NOT be rendered.\n const { preLoadBricks } = route as { preLoadBricks?: string[] };\n if (Array.isArray(preLoadBricks)) {\n output.blockingList.push(\n loadBricksImperatively(preLoadBricks, getBrickPackages())\n );\n }\n\n if (route.type === \"redirect\") {\n let redirectTo: unknown;\n if (typeof route.redirect === \"string\") {\n redirectTo = await asyncComputeRealValue(\n route.redirect,\n runtimeContext\n );\n } else {\n const resolved = (await resolveData(\n {\n transform: \"redirect\",\n ...route.redirect,\n },\n runtimeContext\n )) as { redirect?: unknown };\n redirectTo = resolved.redirect;\n }\n if (typeof redirectTo !== \"string\") {\n // eslint-disable-next-line no-console\n console.error(\"Unexpected redirect result:\", redirectTo);\n throw new Error(\n `Unexpected type of redirect result: ${typeof redirectTo}`\n );\n }\n output.redirect = { path: redirectTo };\n } else {\n const menuRequest = loadMenu(route.menu, runtimeContext);\n if (menuRequest) {\n menuRequestNode.request = menuRequest;\n }\n\n if (!isIncremental) {\n rendererContext.memoizeMenuRequestNode(routes, menuRequestNode);\n }\n\n const usedProcessors = strictCollectMemberUsage(\n route.context,\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n let newOutput: RenderOutput;\n if (route.type === \"routes\") {\n newOutput = await renderRoutes(\n returnNode,\n route.routes,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n initialTracker\n );\n } else {\n newOutput = await renderBricks(\n returnNode,\n route.bricks,\n runtimeContext,\n rendererContext,\n routePath,\n menuRequestNode,\n slotId,\n undefined,\n 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 initialTracker?: InitialTracker\n): Promise<RenderOutput> {\n setupRootRuntimeContext(bricks, runtimeContext, true);\n const output = getEmptyRenderOutput();\n // 多个构件并行异步转换,但转换的结果按原顺序串行合并。\n const rendered = await Promise.all(\n bricks.map((brickConf) =>\n renderBrick(\n returnNode,\n brickConf,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack && new Map(tplStack),\n initialTracker\n )\n )\n );\n\n rendered.forEach((item) => {\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 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 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 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 iid: brickConf.iid,\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 tplStack,\n initialTracker\n );\n }\n\n const tplStateStoreId = brickConf[symbolForTplStateStoreId];\n const formStateStoreId = brickConf[symbolForFormStateStoreId];\n const runtimeContext = {\n ..._runtimeContext,\n tplStateStoreId,\n formStateStoreId,\n };\n\n if (hasOwnProperty(brickConf, symbolForTPlExternalForEachItem)) {\n // The external bricks of a template should restore their `forEach*` from their host.\n runtimeContext.forEachItem = brickConf[symbolForTPlExternalForEachItem];\n runtimeContext.forEachIndex = brickConf[symbolForTPlExternalForEachIndex];\n runtimeContext.forEachSize = brickConf[symbolForTPlExternalForEachSize];\n }\n\n const strict = isStrictMode(runtimeContext);\n const { context } = brickConf as { context?: ContextConf[] };\n // istanbul ignore next\n if (Array.isArray(context) && context.length > 0) {\n warnAboutStrictMode(\n strict,\n \"Defining context on bricks\",\n \"check your brick:\",\n brickConf\n );\n if (!strict) {\n runtimeContext.ctxStore.define(context, runtimeContext);\n }\n }\n\n runtimeContext.pendingPermissionsPreCheck.push(\n hooks?.checkPermissions?.preCheckPermissionsForBrickOrRoute(\n brickConf,\n (value) => asyncComputeRealValue(value, runtimeContext)\n )\n );\n\n if (!(await asyncCheckBrickIf(brickConf, runtimeContext))) {\n return output;\n }\n\n const brickName = brickConf.brick;\n if (brickName.startsWith(\":\")) {\n ensureValidControlBrick(brickName);\n\n const { dataSource } = brickConf;\n const { contextNames, stateNames } = getTracks(dataSource);\n const tracking = !!(contextNames || stateNames);\n\n const lowerLevelRenderControlNode = async (\n runtimeContext: RuntimeContext,\n tracker: InitialTracker,\n trackDataSource: boolean\n ) => {\n // First, compute the `dataSource`\n const computedDataSource = await asyncComputeRealValue(\n dataSource,\n runtimeContext\n );\n\n if (trackDataSource) {\n trackAfterInitial(\n runtimeContext,\n [{ contextNames, stateNames, propValue: dataSource }],\n tracker\n );\n }\n\n // Then, get the matched slot.\n const slot =\n brickName === \":forEach\"\n ? \"\"\n : brickName === \":switch\"\n ? String(computedDataSource)\n : computedDataSource\n ? \"\"\n : \"else\";\n\n // Don't forget to transpile children to slots.\n const slots = childrenToSlots(brickConf.children, brickConf.slots);\n\n // Then, get the bricks in that matched slot.\n const bricks =\n slots &&\n hasOwnProperty(slots, slot) &&\n (slots[slot] as SlotConfOfBricks)?.bricks;\n\n const output = getEmptyRenderOutput();\n const abstractNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: returnNode,\n iid: brickConf.iid,\n };\n output.node = abstractNode;\n\n if (!Array.isArray(bricks)) {\n return output;\n }\n\n let childrenOutput: RenderOutput | undefined;\n\n switch (brickName) {\n case \":forEach\": {\n if (!Array.isArray(computedDataSource)) {\n break;\n }\n childrenOutput = await renderForEach(\n abstractNode,\n computedDataSource,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n tracker\n );\n break;\n }\n case \":if\":\n case \":switch\": {\n childrenOutput = await renderBricks(\n abstractNode,\n bricks,\n runtimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n slotId,\n tplStack,\n tracker\n );\n }\n }\n\n if (childrenOutput) {\n abstractNode.child = childrenOutput.node;\n mergeRenderOutput(output, { ...childrenOutput, node: undefined });\n }\n\n return output;\n };\n\n type RenderControlNodeOptions =\n | {\n type: \"initial\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope?: undefined;\n formStateStoreScope?: undefined;\n }\n | {\n type: \"rerender\";\n runtimeContext: RuntimeContext;\n tplStateStoreScope: DataStore<\"STATE\">[];\n formStateStoreScope: DataStore<\"FORM_STATE\">[];\n };\n\n const renderControlNode = async ({\n type,\n runtimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n }: RenderControlNodeOptions) => {\n let changedAfterInitial = false;\n const tracker: InitialTracker = {\n disposes: [],\n listener: () => {\n changedAfterInitial = true;\n },\n };\n let rerenderCount = 0;\n let rawOutput: RenderOutput;\n let uninitialized = true;\n\n // When perform an incremental sub-route render, for control nodes,\n // context maybe changed just after their data source being computed,\n // as well as props of their children bricks being computed, and before\n // bricks being mounted. Thus these changes may not take any effects.\n // So we need to track the context changes after the initial render,\n // and perform re-renders for these control nodes if necessary.\n while (uninitialized || changedAfterInitial) {\n changedAfterInitial = false;\n rawOutput = await lowerLevelRenderControlNode(\n runtimeContext,\n tracker,\n uninitialized && type === \"initial\"\n );\n\n // Changes may happen during `postAsyncRender`.\n if (!changedAfterInitial && type === \"rerender\") {\n const scopedStores = [...tplStateStoreScope, ...formStateStoreScope];\n await postAsyncRender(rawOutput, runtimeContext, [\n runtimeContext.ctxStore,\n ...scopedStores,\n ]);\n }\n\n tracker.disposes.forEach((dispose) => dispose());\n tracker.disposes.length = 0;\n uninitialized = false;\n // istanbul ignore next\n if (++rerenderCount > 10) {\n throw new Error(\n `Maximum rerender stack overflowed (iid: ${brickConf.iid})`\n );\n }\n }\n\n return rawOutput!;\n };\n\n let controlledOutput = await renderControlNode({\n type: \"initial\",\n runtimeContext,\n });\n const { onMount, onUnmount } = brickConf.lifeCycle ?? {};\n\n if (tracking) {\n let renderId = 0;\n const listener = async () => {\n // TODO(steve): start listeners when mounting, and handle changes between rendering and mounting.\n if (!returnNode.mounted || returnNode.disposed) {\n return;\n }\n\n const currentRenderId = ++renderId;\n const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =\n createScopedRuntimeContext(runtimeContext);\n\n const reControlledOutput = await renderControlNode({\n type: \"rerender\",\n runtimeContext: scopedRuntimeContext,\n tplStateStoreScope,\n formStateStoreScope,\n });\n\n // Ignore stale renders\n if (\n renderId === currentRenderId &&\n returnNode.mounted &&\n !returnNode.disposed\n ) {\n if (onUnmount) {\n listenerFactory(\n onUnmount,\n runtimeContext\n )(new CustomEvent(\"unmount\", { detail: { rerender: true } }));\n }\n\n rendererContext.reRender(\n returnNode,\n reControlledOutput.node!,\n controlledOutput.node!\n );\n controlledOutput = reControlledOutput;\n\n if (onMount) {\n listenerFactory(\n onMount,\n scopedRuntimeContext\n )(new CustomEvent(\"mount\", { detail: { rerender: true } }));\n }\n\n for (const store of [...tplStateStoreScope, ...formStateStoreScope]) {\n store.mountAsyncData();\n }\n }\n };\n // Enable leading invocation, to keep tracking orders.\n const debouncedListener = debounce(listener, 0, {\n leading: true,\n trailing: true,\n });\n const runtimeBrick =\n returnNode.tag === RenderTag.ROOT ? null : returnNode;\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(brickName, runtimeContext);\n\n if (tplTagName) {\n const tplCount = tplStack.get(tplTagName) ?? 0;\n if (tplCount >= 10) {\n throw new Error(\n `Maximum custom template stack overflowed: \"${tplTagName}\"`\n );\n }\n tplStack.set(tplTagName, tplCount + 1);\n } else if (brickName.includes(\"-\") && !customElements.get(brickName)) {\n if (brickName === FORM_RENDERER) {\n registerFormRenderer();\n } else {\n output.blockingList.push(\n catchLoad(\n enqueueStableLoadBricks([brickName], getBrickPackages()),\n \"brick\",\n brickName,\n rendererContext.unknownBricks\n )\n );\n }\n }\n\n let formData: unknown;\n let confProps: Record<string, unknown> | undefined;\n if (brickName === FORM_RENDERER) {\n ({ formData, ...confProps } = brickConf.properties ?? {});\n\n if (brickConf.properties?.compute) {\n formData = await asyncComputeRealValue(formData, runtimeContext);\n }\n } else {\n if (runtimeContext.inUseBrick) {\n // Keep v2 behavior for `useBrick`: treat `transform` as `properties`.\n const transform = (brickConf as { transform?: Record<string, unknown> })\n .transform;\n if (transform) {\n warnAboutStrictMode(\n strict,\n \"`useBrick.transform`\",\n 'please use \"properties\" instead, check your useBrick:',\n brickConf\n );\n\n if (!strict) {\n confProps = {\n ...brickConf.properties,\n ...transform,\n };\n }\n }\n }\n confProps ??= brickConf.properties;\n }\n\n const trackingContextList: TrackingContextItem[] = [];\n const asyncPropertyEntries = asyncComputeRealPropertyEntries(\n confProps,\n runtimeContext,\n trackingContextList\n );\n\n const computedPropsFromHost = brickConf[symbolForAsyncComputedPropsFromHost];\n if (computedPropsFromHost) {\n asyncPropertyEntries.push(...computedPropsFromHost);\n }\n\n const isScript = brickName === \"script\";\n if (isScript || brickName === \"link\") {\n const props = await constructAsyncProperties(asyncPropertyEntries);\n if (isScript ? props.src : props.rel === \"stylesheet\" && props.href) {\n const prefix = window.PUBLIC_ROOT ?? \"\";\n if (isScript) {\n const { src, ...attrs } = props;\n await catchLoad(\n loadScript(src as string, prefix, attrs),\n \"script\",\n src as string,\n \"silent\"\n );\n } else {\n const { href, ...attrs } = props;\n await catchLoad(\n loadStyle(href as string, prefix, attrs),\n \"stylesheet\",\n href as string,\n \"silent\"\n );\n }\n return output;\n }\n }\n\n const brick: RenderBrick = {\n tag: RenderTag.BRICK,\n type: tplTagName || brickName,\n return: returnNode,\n slotId,\n events: brickConf.events,\n runtimeContext,\n portal: brickConf.portal,\n iid: brickConf.iid,\n ref: (brickConf as BrickConfInTemplate).ref,\n };\n\n output.node = brick;\n\n // 在最终挂载前,先加载所有可能用到的 processors。\n const usedProcessors = strictCollectMemberUsage(\n [brickConf.events, brickConf.lifeCycle],\n \"PROCESSORS\",\n 2\n );\n if (usedProcessors.size > 0) {\n output.blockingList.push(\n catchLoad(\n loadProcessorsImperatively(usedProcessors, getBrickPackages()),\n \"processors\",\n [...usedProcessors].join(\", \"),\n rendererContext.unknownBricks\n )\n );\n }\n\n // 加载构件属性和加载子构件等任务,可以并行。\n const blockingList: Promise<unknown>[] = [];\n\n // Note: properties here has already been initialized.\n trackAfterInitial(runtimeContext, trackingContextList, initialTracker);\n\n const loadProperties = async () => {\n brick.properties = await constructAsyncProperties(asyncPropertyEntries);\n listenOnTrackingContext(brick, trackingContextList);\n };\n blockingList.push(loadProperties());\n\n rendererContext.registerBrickLifeCycle(brick, brickConf.lifeCycle);\n\n let expandedBrickConf = brickConf;\n if (tplTagName) {\n expandedBrickConf = expandCustomTemplate(\n tplTagName,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n } else if (brickName === FORM_RENDERER) {\n expandedBrickConf = expandFormRenderer(\n formData,\n brickConf,\n brick,\n asyncPropertyEntries,\n rendererContext\n );\n }\n\n if (expandedBrickConf.portal) {\n // A portal brick has no slotId.\n brick.slotId = undefined;\n }\n\n let childRuntimeContext: RuntimeContext;\n if (tplTagName) {\n // There is a boundary for `forEachItem` between template internals and externals.\n childRuntimeContext = {\n ...runtimeContext,\n };\n delete childRuntimeContext.forEachItem;\n delete childRuntimeContext.forEachIndex;\n delete childRuntimeContext.forEachSize;\n } else {\n childRuntimeContext = runtimeContext;\n }\n\n const loadChildren = async () => {\n const slots = childrenToSlots(\n expandedBrickConf.children,\n expandedBrickConf.slots\n );\n if (!slots) {\n return;\n }\n const routeSlotFromIndexToSlotId = new Map<number, string>();\n const rendered = await Promise.all(\n Object.entries(slots).map(async ([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 initialTracker\n );\n }\n\n let lastOutput = getEmptyRenderOutput();\n const abstractNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: brick,\n };\n lastOutput.node = abstractNode;\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 isRouteParamsEqual(prevMatch.params, newMatch.params))\n );\n })\n ) {\n return false;\n }\n\n clearResolveCache();\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 const newOutput = getEmptyRenderOutput();\n const newControlNode: RenderAbstract = {\n tag: RenderTag.ABSTRACT,\n return: brick,\n };\n newOutput.node = newControlNode;\n\n try {\n incrementalOutput = await renderRoutes(\n newControlNode,\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 } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Incremental sub-router failed:\", error);\n\n const result = await rendererContext.reCatch(\n error,\n newControlNode\n );\n if (!result) {\n return true;\n }\n ({ failed, output: incrementalOutput } = result);\n }\n\n // istanbul ignore next: covered by e2e tests\n if (brick.disposed) {\n return true;\n }\n\n newControlNode.child = incrementalOutput.node;\n mergeRenderOutput(newOutput, {\n ...incrementalOutput,\n node: undefined,\n });\n // Assert: no errors will be throw\n await rendererContext.reMergeMenuRequestNodes(\n menuRequestReturnNode,\n slotConf.routes,\n incrementalOutput.menuRequestNode\n );\n\n rendererContext.reRender(brick, newControlNode, lastOutput.node!);\n\n lastOutput = newOutput;\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 const routesOutput = await renderRoutes(\n abstractNode,\n slotConf.routes,\n childRuntimeContext,\n rendererContext,\n parentRoutes,\n menuRequestReturnNode,\n childSlotId,\n undefined,\n initialTracker\n );\n\n abstractNode.child = routesOutput.node;\n mergeRenderOutput(output, { ...routesOutput, node: undefined });\n appendMenuRequestNode(\n menuRequestReturnNode,\n (output.menuRequestNode = routesOutput.menuRequestNode)\n );\n\n return lastOutput;\n })\n );\n\n const childrenOutput: RenderOutput = {\n ...output,\n node: undefined,\n blockingList: [],\n menuRequestNode: undefined,\n };\n rendered.forEach((item) => {\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 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) =>\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 tplStack && new Map(tplStack),\n initialTracker\n )\n )\n )\n )\n );\n\n // 多层构件并行异步转换,但转换的结果按原顺序串行合并。\n rendered.flat().forEach((item) => {\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 const { blockingList, node, menuRequestNode, ...rest } = 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\nfunction isRouteParamsEqual(\n a: Record<string, string>,\n b: Record<string, string>\n) {\n if (isEqual(a, b)) {\n return true;\n }\n const omitNumericKeys = (v: unknown, k: string) => {\n return String(Number(k)) === k;\n };\n const c = omitBy(a, omitNumericKeys);\n const d = omitBy(b, omitNumericKeys);\n return isEqual(c, d);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,7 +20,11 @@ export function setRealProperties(brick, realProps) {
|
|
|
20
20
|
// `innerHTML` is dangerous, use `textContent` instead.
|
|
21
21
|
throw new Error(`set \`${propName}\` is prohibited`);
|
|
22
22
|
default:
|
|
23
|
-
|
|
23
|
+
if (propName.startsWith("data-")) {
|
|
24
|
+
brick.setAttribute(propName, String(propValue));
|
|
25
|
+
} else {
|
|
26
|
+
brick[propName] = propValue;
|
|
27
|
+
}
|
|
24
28
|
}
|
|
25
29
|
}
|
|
26
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setRealProperties.js","names":["setRealProperties","brick","realProps","propName","propValue","Object","entries","k","v","setValueForStyle","style","Error","
|
|
1
|
+
{"version":3,"file":"setRealProperties.js","names":["setRealProperties","brick","realProps","propName","propValue","Object","entries","k","v","setValueForStyle","style","Error","startsWith","setAttribute","String","key","value","setProperty","cssFloat"],"sources":["../../../../src/internal/compute/setRealProperties.ts"],"sourcesContent":["export function setRealProperties(\n brick: HTMLElement,\n realProps: Record<string, unknown> | undefined\n): void {\n if (!realProps) {\n return;\n }\n for (const [propName, propValue] of Object.entries(realProps)) {\n switch (propName) {\n case \"style\":\n case \"dataset\":\n for (const [k, v] of Object.entries(\n propValue as Record<string, unknown>\n )) {\n if (propName === \"style\") {\n setValueForStyle(brick.style, k, v);\n } else {\n (brick[propName] as unknown as Record<string, unknown>)[k] = v;\n }\n }\n break;\n case \"constructor\":\n case \"__proto__\":\n case \"innerHTML\":\n // `innerHTML` is dangerous, use `textContent` instead.\n throw new Error(`set \\`${propName}\\` is prohibited`);\n default:\n if (propName.startsWith(\"data-\")) {\n brick.setAttribute(propName, String(propValue));\n } else {\n (brick as unknown as Record<string, unknown>)[propName] = propValue;\n }\n }\n }\n}\n\nexport function setValueForStyle(\n style: CSSStyleDeclaration,\n key: string,\n value: unknown\n) {\n if (key.startsWith(\"--\")) {\n style.setProperty(key, value as string);\n } else if (key === \"float\") {\n style.cssFloat = value as string;\n } else {\n (style as unknown as Record<string, unknown>)[key] = value;\n }\n}\n"],"mappings":"AAAA,OAAO,SAASA,iBAAiBA,CAC/BC,KAAkB,EAClBC,SAA8C,EACxC;EACN,IAAI,CAACA,SAAS,EAAE;IACd;EACF;EACA,KAAK,MAAM,CAACC,QAAQ,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,SAAS,CAAC,EAAE;IAC7D,QAAQC,QAAQ;MACd,KAAK,OAAO;MACZ,KAAK,SAAS;QACZ,KAAK,MAAM,CAACI,CAAC,EAAEC,CAAC,CAAC,IAAIH,MAAM,CAACC,OAAO,CACjCF,SACF,CAAC,EAAE;UACD,IAAID,QAAQ,KAAK,OAAO,EAAE;YACxBM,gBAAgB,CAACR,KAAK,CAACS,KAAK,EAAEH,CAAC,EAAEC,CAAC,CAAC;UACrC,CAAC,MAAM;YACJP,KAAK,CAACE,QAAQ,CAAC,CAAwCI,CAAC,CAAC,GAAGC,CAAC;UAChE;QACF;QACA;MACF,KAAK,aAAa;MAClB,KAAK,WAAW;MAChB,KAAK,WAAW;QACd;QACA,MAAM,IAAIG,KAAK,CAAC,SAASR,QAAQ,kBAAkB,CAAC;MACtD;QACE,IAAIA,QAAQ,CAACS,UAAU,CAAC,OAAO,CAAC,EAAE;UAChCX,KAAK,CAACY,YAAY,CAACV,QAAQ,EAAEW,MAAM,CAACV,SAAS,CAAC,CAAC;QACjD,CAAC,MAAM;UACJH,KAAK,CAAwCE,QAAQ,CAAC,GAAGC,SAAS;QACrE;IACJ;EACF;AACF;AAEA,OAAO,SAASK,gBAAgBA,CAC9BC,KAA0B,EAC1BK,GAAW,EACXC,KAAc,EACd;EACA,IAAID,GAAG,CAACH,UAAU,CAAC,IAAI,CAAC,EAAE;IACxBF,KAAK,CAACO,WAAW,CAACF,GAAG,EAAEC,KAAe,CAAC;EACzC,CAAC,MAAM,IAAID,GAAG,KAAK,OAAO,EAAE;IAC1BL,KAAK,CAACQ,QAAQ,GAAGF,KAAe;EAClC,CAAC,MAAM;IACJN,KAAK,CAAwCK,GAAG,CAAC,GAAGC,KAAK;EAC5D;AACF","ignoreList":[]}
|