@next-core/runtime 1.56.1 → 1.56.2

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.
@@ -43,6 +43,7 @@ var _renderId = /*#__PURE__*/new WeakMap();
43
43
  var _currentApp = /*#__PURE__*/new WeakMap();
44
44
  var _previousApp = /*#__PURE__*/new WeakMap();
45
45
  var _navConfig = /*#__PURE__*/new WeakMap();
46
+ var _bootstrapFailed = /*#__PURE__*/new WeakMap();
46
47
  var _Router_brand = /*#__PURE__*/new WeakSet();
47
48
  export class Router {
48
49
  constructor(storyboards) {
@@ -58,6 +59,7 @@ export class Router {
58
59
  _classPrivateFieldInitSpec(this, _currentApp, void 0);
59
60
  _classPrivateFieldInitSpec(this, _previousApp, void 0);
60
61
  _classPrivateFieldInitSpec(this, _navConfig, void 0);
62
+ _classPrivateFieldInitSpec(this, _bootstrapFailed, false);
61
63
  _classPrivateFieldSet(_storyboards, this, storyboards);
62
64
  const _history = getHistory();
63
65
  window.addEventListener("beforeunload", event => {
@@ -199,7 +201,9 @@ async function _preRender(_ref) {
199
201
  // Ignore rendering if notify is `false`.
200
202
  ignoreRendering = true;
201
203
  }
202
- if (!ignoreRendering && !((_location$state2 = location.state) !== null && _location$state2 !== void 0 && _location$state2.noIncremental)) {
204
+
205
+ // Note: dot not perform incremental render when bootstrap failed.
206
+ if (!ignoreRendering && !((_location$state2 = location.state) !== null && _location$state2 !== void 0 && _location$state2.noIncremental) && !_classPrivateFieldGet(_bootstrapFailed, this)) {
203
207
  var _classPrivateFieldGet3;
204
208
  ignoreRendering = await ((_classPrivateFieldGet3 = _classPrivateFieldGet(_rendererContext, this)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.didPerformIncrementalRender(location, prevLocation));
205
209
  }
@@ -402,6 +406,9 @@ async function _render(location, isBootstrap) {
402
406
  } catch (error) {
403
407
  // eslint-disable-next-line no-console
404
408
  console.error("Router failed:", error);
409
+ if (isBootstrap) {
410
+ _classPrivateFieldSet(_bootstrapFailed, this, true);
411
+ }
405
412
  const result = await routeHelper.catch(error, renderRoot, isBootstrap);
406
413
  if (!result) {
407
414
  return;
@@ -412,6 +419,7 @@ async function _render(location, isBootstrap) {
412
419
  } = result);
413
420
  }
414
421
  renderRoot.child = output.node;
422
+ _classPrivateFieldSet(_bootstrapFailed, this, false);
415
423
  cleanUpPreviousRender();
416
424
  if (output.route && output.route.type !== "routes" || failed) {
417
425
  if (!failed) {
@@ -1 +1 @@
1
- {"version":3,"file":"Router.js","names":["locationsAreEqual","HttpAbortError","clearExpressionASTCache","clearFunctionASTCache","uniqueId","getHistory","getDataStores","postAsyncRender","renderRoutes","DataStore","clearResolveCache","mountTree","unmountTree","isOutsideApp","matchStoryboard","registerStoryboardFunctions","RendererContext","applyMode","applyTheme","getLocalAppsTheme","setMode","setTheme","_internalApiGetAppInBootstrapData","getRuntime","hooks","getPageInfo","resetAllComputedMarks","handleHttpError","isUnauthenticatedError","abortPendingRequest","initAbortController","setLoginStateCookie","registerCustomTemplates","fulfilStoryboard","RenderTag","insertPreviewRoutes","devtoolsHookEmit","setUIVersion","setAppVariable","setWatermark","clearMatchedRoutes","ErrorNode","PageNotFoundError","_storyboards","WeakMap","_rendering","_nextRender","_runtimeContext","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_Router_brand","WeakSet","Router","constructor","storyboards","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","Set","_classPrivateFieldSet","history","window","addEventListener","event","message","_assertClassBrand","_getBlockMessageBeforePageLave","call","preventDefault","returnValue","block","location","action","getRenderId","_classPrivateFieldGet","getRuntimeContext","getRecentApps","currentApp","previousApp","getNavConfig","bootstrap","nextPrevLocation","listen","prevLocation","_queuedRender","catch","detail","_classPrivateFieldGet2","previousMessage","getBlockMessage","dispatchBeforePageLeave","unblock","_safeRedirect","to","state","from","_this$redirectCount","_this$redirectCount2","pathname","search","hash","process","env","NODE_ENV","console","error","Error","replace","next","_preRender","nextRender","undefined","_ref","_prevLocation$state","_location$state","_location$state2","_classPrivateFieldGet4","ignoreRendering","omittedLocationProps","key","notify","noIncremental","_classPrivateFieldGet3","didPerformIncrementalRender","dispatchPageLeave","storyboard","reload","_render","isBootstrap","_hooks$flowApi","_hooks$pageView","_classPrivateFieldGet5","_storyboard$app","renderId","flowApi","clearCollectWidgetContract","finishPageView","pageView","create","app","currentAppId","id","BOOTSTRAP_UNION_FILE","appId","version","currentVersion","appChanged","flags","getFeatureFlags","prevRendererContext","redirectTo","status","add","redirectToLogin","main","document","querySelector","portal","renderRoot","tag","ROOT","container","createPortal","cleanUpPreviousRender","_hooks$messageDispatc","item","dispatchOnUnmount","dispose","clear","messageDispatcher","reset","dispatchEvent","CustomEvent","theme","_hooks$checkInstalled","_hooks$auth","_hooks$checkPermissio","_storyboard$meta","_hooks$flowApi2","_storyboard$meta2","checkInstalledApps","preCheckInstalledApps","routeHelper","bailout","output","unauthenticated","redirect","path","mergeMenus","menuRequests","menuConfs","Promise","all","mergeMenuConfs","returnNode","isCurrentBootstrap","isReCatch","NO_AUTH_GUARD","noAuthGuardLoginPath","getMiscSettings","failed","node","blockingList","rendererContext","runtimeContext","query","URLSearchParams","sys","auth","getAuth","settings","brand","getBrandSettings","ctxStore","pendingPermissionsPreCheck","checkPermissions","preCheckPermissions","tplStateStoreMap","Map","formStateStoreMap","meta","functions","collectContract","contracts","stores","rootMenuRequestNode","routes","child","menuRequestNode","setInitialMenuRequestNode","getMenuRequests","result","route","type","dispatchBeforePageLoad","uiVersion","scrollTo","dispatchPageLoad","dispatchAnchorLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","pageTitle","title","isLoggedIn","navConfig","breadcrumb","menuConf","overwrite","items","push"],"sources":["../../../src/internal/Router.ts"],"sourcesContent":["import { Action, locationsAreEqual } from \"history\";\nimport type {\n BreadcrumbItemConf,\n MicroApp,\n StaticMenuConf,\n Storyboard,\n} from \"@next-core/types\";\nimport { HttpAbortError } from \"@next-core/http\";\nimport {\n clearExpressionASTCache,\n clearFunctionASTCache,\n} from \"@next-core/cook\";\nimport { uniqueId } from \"lodash\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderRoutes,\n} from \"./Renderer.js\";\nimport { DataStore } from \"./data/DataStore.js\";\nimport { clearResolveCache } from \"./data/resolveData.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { isOutsideApp, matchStoryboard } from \"./matchStoryboard.js\";\nimport { registerStoryboardFunctions } from \"./compute/StoryboardFunctions.js\";\nimport { RendererContext, RouteHelper } from \"./RendererContext.js\";\nimport {\n applyMode,\n applyTheme,\n getLocalAppsTheme,\n setMode,\n setTheme,\n} from \"../themeAndMode.js\";\nimport {\n _internalApiGetAppInBootstrapData,\n getRuntime,\n hooks,\n} from \"./Runtime.js\";\nimport { getPageInfo } from \"../getPageInfo.js\";\nimport type {\n MenuRequestNode,\n RenderRoot,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport { resetAllComputedMarks } from \"./compute/markAsComputed.js\";\nimport { handleHttpError, isUnauthenticatedError } from \"../handleHttpError.js\";\nimport { abortPendingRequest, initAbortController } from \"./abortController.js\";\nimport { setLoginStateCookie } from \"../setLoginStateCookie.js\";\nimport { registerCustomTemplates } from \"./registerCustomTemplates.js\";\nimport { fulfilStoryboard } from \"./fulfilStoryboard.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { insertPreviewRoutes } from \"./insertPreviewRoutes.js\";\nimport { devtoolsHookEmit } from \"./devtools.js\";\nimport { setUIVersion } from \"../setUIVersion.js\";\nimport { setAppVariable } from \"../setAppVariable.js\";\nimport { setWatermark } from \"../setWatermark.js\";\nimport { clearMatchedRoutes } from \"./routeMatchedMap.js\";\nimport { ErrorNode, PageNotFoundError } from \"./ErrorNode.js\";\n\ntype RenderTask = InitialRenderTask | SubsequentRenderTask;\n\ninterface InitialRenderTask {\n location: NextLocation;\n prevLocation?: undefined;\n action?: undefined;\n}\n\ninterface SubsequentRenderTask {\n location: NextLocation;\n prevLocation: NextLocation;\n action: Action;\n}\n\nexport class Router {\n readonly #storyboards: Storyboard[];\n #rendering = false;\n #nextRender?: RenderTask;\n #runtimeContext?: RuntimeContext;\n #rendererContext?: RendererContext;\n #rendererContextTrashCan = new Set<RendererContext | undefined>();\n #redirectCount = 0;\n #renderId?: string;\n #currentApp?: MicroApp;\n #previousApp?: MicroApp;\n #navConfig?: {\n breadcrumb?: BreadcrumbItemConf[];\n };\n\n constructor(storyboards: Storyboard[]) {\n this.#storyboards = storyboards;\n\n const history = getHistory();\n window.addEventListener(\"beforeunload\", (event) => {\n const message = this.#getBlockMessageBeforePageLave({});\n // See examples in https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload\n if (message) {\n // Cancel the event\n // If you prevent default behavior in Mozilla Firefox prompt will always be shown\n event.preventDefault();\n // Chrome requires returnValue to be set\n event.returnValue = \"\";\n } else {\n // the absence of a returnValue property on the event will guarantee the browser unload happens\n delete event.returnValue;\n }\n });\n\n history.block((location, action) =>\n this.#getBlockMessageBeforePageLave({ location, action })\n );\n }\n\n getRenderId() {\n return this.#renderId;\n }\n\n // istanbul ignore next\n getRuntimeContext() {\n return this.#runtimeContext;\n }\n\n getRecentApps() {\n return {\n currentApp: this.#currentApp,\n previousApp: this.#previousApp,\n };\n }\n\n getNavConfig() {\n return this.#navConfig;\n }\n\n #getBlockMessageBeforePageLave(detail: {\n location?: NextLocation;\n action?: Action;\n }): string | undefined {\n const history = getHistory();\n const previousMessage = history.getBlockMessage();\n this.#rendererContext?.dispatchBeforePageLeave(detail);\n const message = history.getBlockMessage();\n if (!previousMessage && message) {\n // Auto unblock only if new block was introduced by `onBeforePageLeave`.\n history.unblock();\n }\n return message;\n }\n\n #safeRedirect(\n to: string,\n state: NextHistoryState | undefined,\n from: NextLocation\n ): void {\n if (this.#redirectCount++ > 10) {\n const message = `Infinite redirect detected: from \"${from.pathname}${from.search}${from.hash}\" to \"${to}\"`;\n // istanbul ignore else: error cannot be caught in test\n if (process.env.NODE_ENV === \"test\") {\n // eslint-disable-next-line no-console\n console.error(message);\n return;\n } else {\n throw new Error(message);\n }\n }\n getHistory().replace(to, state);\n }\n\n bootstrap() {\n initAbortController();\n const history = getHistory();\n let nextPrevLocation = history.location;\n history.listen((location, action) => {\n const prevLocation = nextPrevLocation;\n nextPrevLocation = location;\n if (this.#rendering) {\n this.#nextRender = { location, prevLocation, action };\n } else {\n this.#queuedRender({\n location,\n prevLocation,\n action,\n }).catch(handleHttpError);\n }\n });\n return this.#queuedRender({ location: history.location });\n }\n\n async #queuedRender(next: RenderTask) {\n this.#rendering = true;\n try {\n await this.#preRender(next);\n } finally {\n this.#rendering = false;\n if (this.#nextRender) {\n const nextRender = this.#nextRender;\n this.#nextRender = undefined;\n await this.#queuedRender(nextRender);\n }\n }\n }\n\n async #preRender({ location, prevLocation, action }: RenderTask) {\n if (prevLocation) {\n let ignoreRendering: boolean | undefined;\n const omittedLocationProps: Partial<NextLocation> = {\n hash: undefined,\n state: undefined,\n };\n // Omit the \"key\" when checking whether locations are equal in certain situations.\n if (\n // When current location is triggered by browser action of hash link.\n location.key === undefined ||\n // When current location is triggered by browser action of non-push-or-replace,\n // such as goBack or goForward,\n (action === \"POP\" &&\n // and the previous location was triggered by hash link,\n (prevLocation.key === undefined ||\n // or the previous location specified notify false.\n prevLocation.state?.notify === false))\n ) {\n omittedLocationProps.key = undefined;\n }\n if (\n locationsAreEqual(\n { ...prevLocation, ...omittedLocationProps },\n { ...location, ...omittedLocationProps }\n ) ||\n (action !== \"POP\" && location.state?.notify === false)\n ) {\n // Ignore rendering if location not changed except hash, state and optional key.\n // Ignore rendering if notify is `false`.\n ignoreRendering = true;\n }\n\n if (!ignoreRendering && !location.state?.noIncremental) {\n ignoreRendering =\n await this.#rendererContext?.didPerformIncrementalRender(\n location,\n prevLocation\n );\n }\n\n if (ignoreRendering) {\n return;\n }\n\n abortPendingRequest();\n this.#rendererContext?.dispatchPageLeave();\n\n if (action === \"POP\") {\n const storyboard = matchStoryboard(\n this.#storyboards,\n location.pathname\n );\n // When a browser action of goBack or goForward is performing,\n // force reload when the target page is a page of an outside app.\n if (isOutsideApp(storyboard)) {\n window.location.reload();\n return;\n }\n }\n\n devtoolsHookEmit(\"locationChange\");\n }\n\n return this.#render(location, !prevLocation);\n }\n\n async #render(location: NextLocation, isBootstrap: boolean): Promise<void> {\n const renderId = (this.#renderId = uniqueId(\"render-id-\"));\n\n resetAllComputedMarks();\n clearResolveCache();\n hooks?.flowApi?.clearCollectWidgetContract();\n\n const history = getHistory();\n history.unblock();\n\n // const renderStartTime = performance.now();\n const finishPageView = hooks?.pageView?.create();\n\n const storyboard = matchStoryboard(this.#storyboards, location.pathname);\n\n const previousApp = this.#runtimeContext?.app;\n const currentAppId = storyboard?.app?.id;\n // dynamically change the value of the APP variable, if it's union app\n if (\n window.BOOTSTRAP_UNION_FILE &&\n currentAppId &&\n currentAppId !== previousApp?.id\n ) {\n setAppVariable({\n appId: currentAppId,\n version: storyboard.app.currentVersion!,\n });\n }\n\n if (storyboard?.app) {\n await fulfilStoryboard(storyboard);\n }\n\n const currentApp = (this.#currentApp = storyboard?.app);\n\n setWatermark();\n\n // Storyboard maybe re-assigned, e.g. when open launchpad.\n const appChanged =\n previousApp && currentApp\n ? previousApp.id !== currentApp.id\n : previousApp !== currentApp;\n\n clearExpressionASTCache();\n if (appChanged) {\n clearFunctionASTCache();\n }\n\n // TODO: handle favicon\n\n // Set `Router::#currentApp` before calling `getFeatureFlags()`\n const flags = getRuntime().getFeatureFlags();\n const prevRendererContext = this.#rendererContext;\n\n const redirectTo = (to: string, state?: NextHistoryState): void => {\n finishPageView?.({\n status: \"redirected\",\n });\n this.#rendererContextTrashCan.add(prevRendererContext);\n this.#safeRedirect(to, state, location);\n };\n\n const redirectToLogin = (): void => {\n const to = flags[\"sso-enabled\"] ? \"/sso-auth/login\" : \"/auth/login\";\n setLoginStateCookie(location);\n redirectTo(to, { from: location });\n };\n\n const main = document.querySelector(\"#main-mount-point\") as HTMLElement;\n const portal = document.querySelector(\"#portal-mount-point\") as HTMLElement;\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: main,\n createPortal: portal,\n };\n\n const cleanUpPreviousRender = (): void => {\n unmountTree(main);\n unmountTree(portal);\n\n // Note: redirects can lead to multiple trash renderer contexts.\n this.#rendererContextTrashCan.add(prevRendererContext);\n for (const item of this.#rendererContextTrashCan) {\n if (item) {\n item.dispatchOnUnmount();\n item.dispose();\n }\n }\n this.#rendererContextTrashCan.clear();\n hooks?.messageDispatcher?.reset();\n\n if (appChanged) {\n this.#previousApp = previousApp;\n window.dispatchEvent(\n new CustomEvent(\"app.change\", {\n detail: {\n previousApp,\n currentApp,\n },\n })\n );\n }\n };\n\n setTheme(\n (currentApp &&\n (getLocalAppsTheme()[currentApp.id] || currentApp.theme)) ||\n \"light\"\n );\n setMode(\"default\");\n\n if (currentApp) {\n hooks?.checkInstalledApps?.preCheckInstalledApps(\n storyboard,\n (appId) => !!_internalApiGetAppInBootstrapData(appId)\n );\n\n const routeHelper: RouteHelper = {\n bailout: (output) => {\n if (output.unauthenticated) {\n redirectToLogin();\n return true;\n }\n if (output.redirect) {\n redirectTo(output.redirect.path, output.redirect.state);\n return true;\n }\n // Reset redirect count if no redirect is set.\n this.#redirectCount = 0;\n },\n mergeMenus: async (menuRequests) => {\n const menuConfs = await Promise.all(menuRequests);\n this.#navConfig = mergeMenuConfs(menuConfs);\n window.dispatchEvent(\n new CustomEvent(\"navConfig.change\", { detail: this.#navConfig })\n );\n },\n catch: async (error, returnNode, isCurrentBootstrap, isReCatch) => {\n if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {\n redirectToLogin();\n return;\n } else if (error instanceof HttpAbortError) {\n this.#rendererContextTrashCan.add(prevRendererContext);\n return;\n } else {\n const noAuthGuardLoginPath =\n getRuntime().getMiscSettings().noAuthGuardLoginPath;\n if (isUnauthenticatedError(error) && noAuthGuardLoginPath) {\n redirectTo(noAuthGuardLoginPath as string, { from: location });\n return;\n }\n if (isCurrentBootstrap) {\n throw error;\n }\n return {\n failed: true,\n output: {\n node: await ErrorNode(error, returnNode, !isReCatch),\n blockingList: [],\n },\n };\n }\n },\n };\n\n const rendererContext = (this.#rendererContext = new RendererContext(\n \"page\",\n { routeHelper, renderId }\n ));\n\n const runtimeContext: RuntimeContext = (this.#runtimeContext = {\n app: currentApp,\n location,\n query: new URLSearchParams(location.search),\n flags,\n sys: {\n ...hooks?.auth?.getAuth(),\n ...getPageInfo(),\n settings: {\n brand: getRuntime().getBrandSettings(),\n },\n },\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [\n hooks?.checkPermissions?.preCheckPermissions(storyboard),\n ],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n });\n\n this.#navConfig = undefined;\n\n registerCustomTemplates(storyboard);\n registerStoryboardFunctions(storyboard.meta?.functions, currentApp);\n hooks?.flowApi?.collectContract(storyboard.meta?.contracts);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n clearMatchedRoutes();\n const rootMenuRequestNode: MenuRequestNode = {};\n output = await renderRoutes(\n renderRoot,\n insertPreviewRoutes(storyboard.routes),\n runtimeContext,\n rendererContext,\n [],\n rootMenuRequestNode\n );\n if (routeHelper.bailout(output)) {\n return;\n }\n\n stores = getDataStores(runtimeContext);\n\n await postAsyncRender(output, runtimeContext, stores);\n\n rootMenuRequestNode.child = output.menuRequestNode;\n rendererContext.setInitialMenuRequestNode(rootMenuRequestNode);\n await routeHelper.mergeMenus(rendererContext.getMenuRequests());\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Router failed:\", error);\n const result = await routeHelper.catch(error, renderRoot, isBootstrap);\n if (!result) {\n return;\n }\n ({ failed, output } = result);\n }\n renderRoot.child = output.node;\n\n cleanUpPreviousRender();\n\n if ((output.route && output.route.type !== \"routes\") || failed) {\n if (!failed) {\n // There is a window to set theme and mode by `lifeCycle.onBeforePageLoad`.\n rendererContext.dispatchBeforePageLoad();\n }\n applyTheme();\n applyMode();\n\n setUIVersion(currentApp?.uiVersion);\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n // See https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\n window.scrollTo(0, 0);\n\n if (!failed) {\n rendererContext.dispatchPageLoad();\n rendererContext.dispatchAnchorLoad();\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n finishPageView?.({\n status: \"ok\",\n path: output.path,\n pageTitle: document.title,\n });\n } else {\n finishPageView?.({ status: \"failed\" });\n }\n devtoolsHookEmit(\"rendered\");\n\n return;\n }\n } else if (\n !window.NO_AUTH_GUARD &&\n hooks?.auth &&\n !hooks.auth.isLoggedIn()\n ) {\n // Todo(steve): refine after api-gateway supports fetching storyboards before logged in.\n // Redirect to login if no storyboard is matched.\n redirectToLogin();\n return;\n } else {\n cleanUpPreviousRender();\n }\n\n applyTheme();\n applyMode();\n\n const node = await ErrorNode(\n new PageNotFoundError(currentApp ? \"page not found\" : \"app not found\"),\n renderRoot,\n true\n );\n renderRoot.child = node;\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n window.scrollTo(0, 0);\n finishPageView?.({ status: \"not-found\" });\n devtoolsHookEmit(\"rendered\");\n }\n}\n\nfunction mergeMenuConfs(menuConfs: StaticMenuConf[]) {\n const navConfig = {\n breadcrumb: [] as BreadcrumbItemConf[],\n };\n for (const menuConf of menuConfs) {\n const { breadcrumb } = menuConf;\n if (breadcrumb) {\n if (breadcrumb.overwrite) {\n navConfig.breadcrumb = breadcrumb.items;\n } else {\n navConfig.breadcrumb.push(...breadcrumb.items);\n }\n }\n }\n return navConfig;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Router.js","names":["locationsAreEqual","HttpAbortError","clearExpressionASTCache","clearFunctionASTCache","uniqueId","getHistory","getDataStores","postAsyncRender","renderRoutes","DataStore","clearResolveCache","mountTree","unmountTree","isOutsideApp","matchStoryboard","registerStoryboardFunctions","RendererContext","applyMode","applyTheme","getLocalAppsTheme","setMode","setTheme","_internalApiGetAppInBootstrapData","getRuntime","hooks","getPageInfo","resetAllComputedMarks","handleHttpError","isUnauthenticatedError","abortPendingRequest","initAbortController","setLoginStateCookie","registerCustomTemplates","fulfilStoryboard","RenderTag","insertPreviewRoutes","devtoolsHookEmit","setUIVersion","setAppVariable","setWatermark","clearMatchedRoutes","ErrorNode","PageNotFoundError","_storyboards","WeakMap","_rendering","_nextRender","_runtimeContext","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_bootstrapFailed","_Router_brand","WeakSet","Router","constructor","storyboards","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","Set","_classPrivateFieldSet","history","window","addEventListener","event","message","_assertClassBrand","_getBlockMessageBeforePageLave","call","preventDefault","returnValue","block","location","action","getRenderId","_classPrivateFieldGet","getRuntimeContext","getRecentApps","currentApp","previousApp","getNavConfig","bootstrap","nextPrevLocation","listen","prevLocation","_queuedRender","catch","detail","_classPrivateFieldGet2","previousMessage","getBlockMessage","dispatchBeforePageLeave","unblock","_safeRedirect","to","state","from","_this$redirectCount","_this$redirectCount2","pathname","search","hash","process","env","NODE_ENV","console","error","Error","replace","next","_preRender","nextRender","undefined","_ref","_prevLocation$state","_location$state","_location$state2","_classPrivateFieldGet4","ignoreRendering","omittedLocationProps","key","notify","noIncremental","_classPrivateFieldGet3","didPerformIncrementalRender","dispatchPageLeave","storyboard","reload","_render","isBootstrap","_hooks$flowApi","_hooks$pageView","_classPrivateFieldGet5","_storyboard$app","renderId","flowApi","clearCollectWidgetContract","finishPageView","pageView","create","app","currentAppId","id","BOOTSTRAP_UNION_FILE","appId","version","currentVersion","appChanged","flags","getFeatureFlags","prevRendererContext","redirectTo","status","add","redirectToLogin","main","document","querySelector","portal","renderRoot","tag","ROOT","container","createPortal","cleanUpPreviousRender","_hooks$messageDispatc","item","dispatchOnUnmount","dispose","clear","messageDispatcher","reset","dispatchEvent","CustomEvent","theme","_hooks$checkInstalled","_hooks$auth","_hooks$checkPermissio","_storyboard$meta","_hooks$flowApi2","_storyboard$meta2","checkInstalledApps","preCheckInstalledApps","routeHelper","bailout","output","unauthenticated","redirect","path","mergeMenus","menuRequests","menuConfs","Promise","all","mergeMenuConfs","returnNode","isCurrentBootstrap","isReCatch","NO_AUTH_GUARD","noAuthGuardLoginPath","getMiscSettings","failed","node","blockingList","rendererContext","runtimeContext","query","URLSearchParams","sys","auth","getAuth","settings","brand","getBrandSettings","ctxStore","pendingPermissionsPreCheck","checkPermissions","preCheckPermissions","tplStateStoreMap","Map","formStateStoreMap","meta","functions","collectContract","contracts","stores","rootMenuRequestNode","routes","child","menuRequestNode","setInitialMenuRequestNode","getMenuRequests","result","route","type","dispatchBeforePageLoad","uiVersion","scrollTo","dispatchPageLoad","dispatchAnchorLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","pageTitle","title","isLoggedIn","navConfig","breadcrumb","menuConf","overwrite","items","push"],"sources":["../../../src/internal/Router.ts"],"sourcesContent":["import { Action, locationsAreEqual } from \"history\";\nimport type {\n BreadcrumbItemConf,\n MicroApp,\n StaticMenuConf,\n Storyboard,\n} from \"@next-core/types\";\nimport { HttpAbortError } from \"@next-core/http\";\nimport {\n clearExpressionASTCache,\n clearFunctionASTCache,\n} from \"@next-core/cook\";\nimport { uniqueId } from \"lodash\";\nimport { NextHistoryState, NextLocation, getHistory } from \"../history.js\";\nimport {\n RenderOutput,\n getDataStores,\n postAsyncRender,\n renderRoutes,\n} from \"./Renderer.js\";\nimport { DataStore } from \"./data/DataStore.js\";\nimport { clearResolveCache } from \"./data/resolveData.js\";\nimport { mountTree, unmountTree } from \"./mount.js\";\nimport { isOutsideApp, matchStoryboard } from \"./matchStoryboard.js\";\nimport { registerStoryboardFunctions } from \"./compute/StoryboardFunctions.js\";\nimport { RendererContext, RouteHelper } from \"./RendererContext.js\";\nimport {\n applyMode,\n applyTheme,\n getLocalAppsTheme,\n setMode,\n setTheme,\n} from \"../themeAndMode.js\";\nimport {\n _internalApiGetAppInBootstrapData,\n getRuntime,\n hooks,\n} from \"./Runtime.js\";\nimport { getPageInfo } from \"../getPageInfo.js\";\nimport type {\n MenuRequestNode,\n RenderRoot,\n RuntimeContext,\n} from \"./interfaces.js\";\nimport { resetAllComputedMarks } from \"./compute/markAsComputed.js\";\nimport { handleHttpError, isUnauthenticatedError } from \"../handleHttpError.js\";\nimport { abortPendingRequest, initAbortController } from \"./abortController.js\";\nimport { setLoginStateCookie } from \"../setLoginStateCookie.js\";\nimport { registerCustomTemplates } from \"./registerCustomTemplates.js\";\nimport { fulfilStoryboard } from \"./fulfilStoryboard.js\";\nimport { RenderTag } from \"./enums.js\";\nimport { insertPreviewRoutes } from \"./insertPreviewRoutes.js\";\nimport { devtoolsHookEmit } from \"./devtools.js\";\nimport { setUIVersion } from \"../setUIVersion.js\";\nimport { setAppVariable } from \"../setAppVariable.js\";\nimport { setWatermark } from \"../setWatermark.js\";\nimport { clearMatchedRoutes } from \"./routeMatchedMap.js\";\nimport { ErrorNode, PageNotFoundError } from \"./ErrorNode.js\";\n\ntype RenderTask = InitialRenderTask | SubsequentRenderTask;\n\ninterface InitialRenderTask {\n location: NextLocation;\n prevLocation?: undefined;\n action?: undefined;\n}\n\ninterface SubsequentRenderTask {\n location: NextLocation;\n prevLocation: NextLocation;\n action: Action;\n}\n\nexport class Router {\n readonly #storyboards: Storyboard[];\n #rendering = false;\n #nextRender?: RenderTask;\n #runtimeContext?: RuntimeContext;\n #rendererContext?: RendererContext;\n #rendererContextTrashCan = new Set<RendererContext | undefined>();\n #redirectCount = 0;\n #renderId?: string;\n #currentApp?: MicroApp;\n #previousApp?: MicroApp;\n #navConfig?: {\n breadcrumb?: BreadcrumbItemConf[];\n };\n #bootstrapFailed = false;\n\n constructor(storyboards: Storyboard[]) {\n this.#storyboards = storyboards;\n\n const history = getHistory();\n window.addEventListener(\"beforeunload\", (event) => {\n const message = this.#getBlockMessageBeforePageLave({});\n // See examples in https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload\n if (message) {\n // Cancel the event\n // If you prevent default behavior in Mozilla Firefox prompt will always be shown\n event.preventDefault();\n // Chrome requires returnValue to be set\n event.returnValue = \"\";\n } else {\n // the absence of a returnValue property on the event will guarantee the browser unload happens\n delete event.returnValue;\n }\n });\n\n history.block((location, action) =>\n this.#getBlockMessageBeforePageLave({ location, action })\n );\n }\n\n getRenderId() {\n return this.#renderId;\n }\n\n // istanbul ignore next\n getRuntimeContext() {\n return this.#runtimeContext;\n }\n\n getRecentApps() {\n return {\n currentApp: this.#currentApp,\n previousApp: this.#previousApp,\n };\n }\n\n getNavConfig() {\n return this.#navConfig;\n }\n\n #getBlockMessageBeforePageLave(detail: {\n location?: NextLocation;\n action?: Action;\n }): string | undefined {\n const history = getHistory();\n const previousMessage = history.getBlockMessage();\n this.#rendererContext?.dispatchBeforePageLeave(detail);\n const message = history.getBlockMessage();\n if (!previousMessage && message) {\n // Auto unblock only if new block was introduced by `onBeforePageLeave`.\n history.unblock();\n }\n return message;\n }\n\n #safeRedirect(\n to: string,\n state: NextHistoryState | undefined,\n from: NextLocation\n ): void {\n if (this.#redirectCount++ > 10) {\n const message = `Infinite redirect detected: from \"${from.pathname}${from.search}${from.hash}\" to \"${to}\"`;\n // istanbul ignore else: error cannot be caught in test\n if (process.env.NODE_ENV === \"test\") {\n // eslint-disable-next-line no-console\n console.error(message);\n return;\n } else {\n throw new Error(message);\n }\n }\n getHistory().replace(to, state);\n }\n\n bootstrap() {\n initAbortController();\n const history = getHistory();\n let nextPrevLocation = history.location;\n history.listen((location, action) => {\n const prevLocation = nextPrevLocation;\n nextPrevLocation = location;\n if (this.#rendering) {\n this.#nextRender = { location, prevLocation, action };\n } else {\n this.#queuedRender({\n location,\n prevLocation,\n action,\n }).catch(handleHttpError);\n }\n });\n return this.#queuedRender({ location: history.location });\n }\n\n async #queuedRender(next: RenderTask) {\n this.#rendering = true;\n try {\n await this.#preRender(next);\n } finally {\n this.#rendering = false;\n if (this.#nextRender) {\n const nextRender = this.#nextRender;\n this.#nextRender = undefined;\n await this.#queuedRender(nextRender);\n }\n }\n }\n\n async #preRender({ location, prevLocation, action }: RenderTask) {\n if (prevLocation) {\n let ignoreRendering: boolean | undefined;\n const omittedLocationProps: Partial<NextLocation> = {\n hash: undefined,\n state: undefined,\n };\n // Omit the \"key\" when checking whether locations are equal in certain situations.\n if (\n // When current location is triggered by browser action of hash link.\n location.key === undefined ||\n // When current location is triggered by browser action of non-push-or-replace,\n // such as goBack or goForward,\n (action === \"POP\" &&\n // and the previous location was triggered by hash link,\n (prevLocation.key === undefined ||\n // or the previous location specified notify false.\n prevLocation.state?.notify === false))\n ) {\n omittedLocationProps.key = undefined;\n }\n if (\n locationsAreEqual(\n { ...prevLocation, ...omittedLocationProps },\n { ...location, ...omittedLocationProps }\n ) ||\n (action !== \"POP\" && location.state?.notify === false)\n ) {\n // Ignore rendering if location not changed except hash, state and optional key.\n // Ignore rendering if notify is `false`.\n ignoreRendering = true;\n }\n\n // Note: dot not perform incremental render when bootstrap failed.\n if (\n !ignoreRendering &&\n !location.state?.noIncremental &&\n !this.#bootstrapFailed\n ) {\n ignoreRendering =\n await this.#rendererContext?.didPerformIncrementalRender(\n location,\n prevLocation\n );\n }\n\n if (ignoreRendering) {\n return;\n }\n\n abortPendingRequest();\n this.#rendererContext?.dispatchPageLeave();\n\n if (action === \"POP\") {\n const storyboard = matchStoryboard(\n this.#storyboards,\n location.pathname\n );\n // When a browser action of goBack or goForward is performing,\n // force reload when the target page is a page of an outside app.\n if (isOutsideApp(storyboard)) {\n window.location.reload();\n return;\n }\n }\n\n devtoolsHookEmit(\"locationChange\");\n }\n\n return this.#render(location, !prevLocation);\n }\n\n async #render(location: NextLocation, isBootstrap: boolean): Promise<void> {\n const renderId = (this.#renderId = uniqueId(\"render-id-\"));\n\n resetAllComputedMarks();\n clearResolveCache();\n hooks?.flowApi?.clearCollectWidgetContract();\n\n const history = getHistory();\n history.unblock();\n\n // const renderStartTime = performance.now();\n const finishPageView = hooks?.pageView?.create();\n\n const storyboard = matchStoryboard(this.#storyboards, location.pathname);\n\n const previousApp = this.#runtimeContext?.app;\n const currentAppId = storyboard?.app?.id;\n // dynamically change the value of the APP variable, if it's union app\n if (\n window.BOOTSTRAP_UNION_FILE &&\n currentAppId &&\n currentAppId !== previousApp?.id\n ) {\n setAppVariable({\n appId: currentAppId,\n version: storyboard.app.currentVersion!,\n });\n }\n\n if (storyboard?.app) {\n await fulfilStoryboard(storyboard);\n }\n\n const currentApp = (this.#currentApp = storyboard?.app);\n\n setWatermark();\n\n // Storyboard maybe re-assigned, e.g. when open launchpad.\n const appChanged =\n previousApp && currentApp\n ? previousApp.id !== currentApp.id\n : previousApp !== currentApp;\n\n clearExpressionASTCache();\n if (appChanged) {\n clearFunctionASTCache();\n }\n\n // TODO: handle favicon\n\n // Set `Router::#currentApp` before calling `getFeatureFlags()`\n const flags = getRuntime().getFeatureFlags();\n const prevRendererContext = this.#rendererContext;\n\n const redirectTo = (to: string, state?: NextHistoryState): void => {\n finishPageView?.({\n status: \"redirected\",\n });\n this.#rendererContextTrashCan.add(prevRendererContext);\n this.#safeRedirect(to, state, location);\n };\n\n const redirectToLogin = (): void => {\n const to = flags[\"sso-enabled\"] ? \"/sso-auth/login\" : \"/auth/login\";\n setLoginStateCookie(location);\n redirectTo(to, { from: location });\n };\n\n const main = document.querySelector(\"#main-mount-point\") as HTMLElement;\n const portal = document.querySelector(\"#portal-mount-point\") as HTMLElement;\n\n const renderRoot: RenderRoot = {\n tag: RenderTag.ROOT,\n container: main,\n createPortal: portal,\n };\n\n const cleanUpPreviousRender = (): void => {\n unmountTree(main);\n unmountTree(portal);\n\n // Note: redirects can lead to multiple trash renderer contexts.\n this.#rendererContextTrashCan.add(prevRendererContext);\n for (const item of this.#rendererContextTrashCan) {\n if (item) {\n item.dispatchOnUnmount();\n item.dispose();\n }\n }\n this.#rendererContextTrashCan.clear();\n hooks?.messageDispatcher?.reset();\n\n if (appChanged) {\n this.#previousApp = previousApp;\n window.dispatchEvent(\n new CustomEvent(\"app.change\", {\n detail: {\n previousApp,\n currentApp,\n },\n })\n );\n }\n };\n\n setTheme(\n (currentApp &&\n (getLocalAppsTheme()[currentApp.id] || currentApp.theme)) ||\n \"light\"\n );\n setMode(\"default\");\n\n if (currentApp) {\n hooks?.checkInstalledApps?.preCheckInstalledApps(\n storyboard,\n (appId) => !!_internalApiGetAppInBootstrapData(appId)\n );\n\n const routeHelper: RouteHelper = {\n bailout: (output) => {\n if (output.unauthenticated) {\n redirectToLogin();\n return true;\n }\n if (output.redirect) {\n redirectTo(output.redirect.path, output.redirect.state);\n return true;\n }\n // Reset redirect count if no redirect is set.\n this.#redirectCount = 0;\n },\n mergeMenus: async (menuRequests) => {\n const menuConfs = await Promise.all(menuRequests);\n this.#navConfig = mergeMenuConfs(menuConfs);\n window.dispatchEvent(\n new CustomEvent(\"navConfig.change\", { detail: this.#navConfig })\n );\n },\n catch: async (error, returnNode, isCurrentBootstrap, isReCatch) => {\n if (isUnauthenticatedError(error) && !window.NO_AUTH_GUARD) {\n redirectToLogin();\n return;\n } else if (error instanceof HttpAbortError) {\n this.#rendererContextTrashCan.add(prevRendererContext);\n return;\n } else {\n const noAuthGuardLoginPath =\n getRuntime().getMiscSettings().noAuthGuardLoginPath;\n if (isUnauthenticatedError(error) && noAuthGuardLoginPath) {\n redirectTo(noAuthGuardLoginPath as string, { from: location });\n return;\n }\n if (isCurrentBootstrap) {\n throw error;\n }\n return {\n failed: true,\n output: {\n node: await ErrorNode(error, returnNode, !isReCatch),\n blockingList: [],\n },\n };\n }\n },\n };\n\n const rendererContext = (this.#rendererContext = new RendererContext(\n \"page\",\n { routeHelper, renderId }\n ));\n\n const runtimeContext: RuntimeContext = (this.#runtimeContext = {\n app: currentApp,\n location,\n query: new URLSearchParams(location.search),\n flags,\n sys: {\n ...hooks?.auth?.getAuth(),\n ...getPageInfo(),\n settings: {\n brand: getRuntime().getBrandSettings(),\n },\n },\n ctxStore: new DataStore(\"CTX\", undefined, rendererContext),\n pendingPermissionsPreCheck: [\n hooks?.checkPermissions?.preCheckPermissions(storyboard),\n ],\n tplStateStoreMap: new Map<string, DataStore<\"STATE\">>(),\n formStateStoreMap: new Map<string, DataStore<\"FORM_STATE\">>(),\n });\n\n this.#navConfig = undefined;\n\n registerCustomTemplates(storyboard);\n registerStoryboardFunctions(storyboard.meta?.functions, currentApp);\n hooks?.flowApi?.collectContract(storyboard.meta?.contracts);\n\n let failed = false;\n let output: RenderOutput;\n let stores: DataStore<\"CTX\" | \"STATE\" | \"FORM_STATE\">[] = [];\n\n try {\n clearMatchedRoutes();\n const rootMenuRequestNode: MenuRequestNode = {};\n output = await renderRoutes(\n renderRoot,\n insertPreviewRoutes(storyboard.routes),\n runtimeContext,\n rendererContext,\n [],\n rootMenuRequestNode\n );\n if (routeHelper.bailout(output)) {\n return;\n }\n\n stores = getDataStores(runtimeContext);\n\n await postAsyncRender(output, runtimeContext, stores);\n\n rootMenuRequestNode.child = output.menuRequestNode;\n rendererContext.setInitialMenuRequestNode(rootMenuRequestNode);\n await routeHelper.mergeMenus(rendererContext.getMenuRequests());\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Router failed:\", error);\n if (isBootstrap) {\n this.#bootstrapFailed = true;\n }\n const result = await routeHelper.catch(error, renderRoot, isBootstrap);\n if (!result) {\n return;\n }\n ({ failed, output } = result);\n }\n renderRoot.child = output.node;\n this.#bootstrapFailed = false;\n\n cleanUpPreviousRender();\n\n if ((output.route && output.route.type !== \"routes\") || failed) {\n if (!failed) {\n // There is a window to set theme and mode by `lifeCycle.onBeforePageLoad`.\n rendererContext.dispatchBeforePageLoad();\n }\n applyTheme();\n applyMode();\n\n setUIVersion(currentApp?.uiVersion);\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n // See https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\n window.scrollTo(0, 0);\n\n if (!failed) {\n rendererContext.dispatchPageLoad();\n rendererContext.dispatchAnchorLoad();\n rendererContext.dispatchOnMount();\n rendererContext.initializeScrollIntoView();\n rendererContext.initializeMediaChange();\n rendererContext.initializeMessageDispatcher();\n\n for (const store of stores) {\n store.mountAsyncData();\n }\n\n finishPageView?.({\n status: \"ok\",\n path: output.path,\n pageTitle: document.title,\n });\n } else {\n finishPageView?.({ status: \"failed\" });\n }\n devtoolsHookEmit(\"rendered\");\n\n return;\n }\n } else if (\n !window.NO_AUTH_GUARD &&\n hooks?.auth &&\n !hooks.auth.isLoggedIn()\n ) {\n // Todo(steve): refine after api-gateway supports fetching storyboards before logged in.\n // Redirect to login if no storyboard is matched.\n redirectToLogin();\n return;\n } else {\n cleanUpPreviousRender();\n }\n\n applyTheme();\n applyMode();\n\n const node = await ErrorNode(\n new PageNotFoundError(currentApp ? \"page not found\" : \"app not found\"),\n renderRoot,\n true\n );\n renderRoot.child = node;\n\n mountTree(renderRoot);\n\n // Scroll to top after each rendering.\n window.scrollTo(0, 0);\n finishPageView?.({ status: \"not-found\" });\n devtoolsHookEmit(\"rendered\");\n }\n}\n\nfunction mergeMenuConfs(menuConfs: StaticMenuConf[]) {\n const navConfig = {\n breadcrumb: [] as BreadcrumbItemConf[],\n };\n for (const menuConf of menuConfs) {\n const { breadcrumb } = menuConf;\n if (breadcrumb) {\n if (breadcrumb.overwrite) {\n navConfig.breadcrumb = breadcrumb.items;\n } else {\n navConfig.breadcrumb.push(...breadcrumb.items);\n }\n }\n }\n return navConfig;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { hasOwnProperty, isObject } from "@next-core/utils/general";
3
3
  import { strictCollectMemberUsage } from "@next-core/utils/storyboard";
4
4
  import EventTarget from "@ungap/event-target";
5
+ import { pull } from "lodash";
5
6
  import { eventCallbackFactory, listenerFactory } from "../bindListeners.js";
6
7
  import { asyncCheckIf, checkIf } from "../compute/checkIf.js";
7
8
  import { asyncComputeRealValue, computeRealValue } from "../compute/computeRealValue.js";
@@ -26,6 +27,7 @@ export class DataStore {
26
27
  _defineProperty(this, "batchUpdateContextsNames", []);
27
28
  _defineProperty(this, "rendererContext", void 0);
28
29
  _defineProperty(this, "routeMap", new WeakMap());
30
+ _defineProperty(this, "routeStackMap", new WeakMap());
29
31
  this.type = type;
30
32
  this.changeEventType = this.type === "FORM_STATE" ? "formstate.change" : this.type === "STATE" ? "state.change" : "context.change";
31
33
  this.hostBrick = hostBrick;
@@ -199,6 +201,16 @@ export class DataStore {
199
201
  define(dataConfs, runtimeContext, asyncHostPropertyEntries, routePath) {
200
202
  if (Array.isArray(dataConfs) && dataConfs.length > 0) {
201
203
  const pending = resolveDataStore(dataConfs, dataConf => this.resolve(dataConf, runtimeContext, asyncHostPropertyEntries, routePath), this.type, isStrictMode(runtimeContext));
204
+ if (Array.isArray(routePath)) {
205
+ for (const route of routePath) {
206
+ const stack = this.routeStackMap.get(route);
207
+ if (stack) {
208
+ stack.add(pending);
209
+ } else {
210
+ this.routeStackMap.set(route, new Set([pending]));
211
+ }
212
+ }
213
+ }
202
214
  this.pendingStack.push(pending);
203
215
  }
204
216
  }
@@ -221,16 +233,6 @@ export class DataStore {
221
233
  }
222
234
  }
223
235
  async waitForAll() {
224
- // Silent each pending contexts, since the error is handled by batched `pendingResult`
225
- for (const {
226
- pendingContexts
227
- } of this.pendingStack) {
228
- for (const p of pendingContexts.values()) {
229
- p.catch(() => {
230
- /* No-op */
231
- });
232
- }
233
- }
234
236
  for (const {
235
237
  pendingResult
236
238
  } of this.pendingStack) {
@@ -377,13 +379,25 @@ export class DataStore {
377
379
  }
378
380
  return true;
379
381
  }
382
+
383
+ /**
384
+ * For sub-routes to be incrementally rendered,
385
+ * dispose their data and pending tasks.
386
+ */
380
387
  disposeDataInRoutes(routes) {
388
+ //
381
389
  for (const route of routes) {
382
390
  const names = this.routeMap.get(route);
383
391
  if (names !== undefined) {
384
392
  for (const name of names) {
385
393
  this.data.delete(name);
386
394
  }
395
+ this.routeMap.delete(route);
396
+ }
397
+ const stack = this.routeStackMap.get(route);
398
+ if (stack !== undefined) {
399
+ pull(this.pendingStack, ...stack);
400
+ this.routeStackMap.delete(route);
387
401
  }
388
402
  }
389
403
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","eventCallbackFactory","listenerFactory","asyncCheckIf","checkIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","callRealTimeDataInspectHooks","realTimeDataInspectRoot","isStrictMode","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","stateStoreId","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","tplStateStoreId","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","callback","callbackRuntimeContext","useResolve","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","load","cache","then","val","finishLoad","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","removeEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","routeMap","has","asyncMounted","expose","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","track","if","size","resolveConf","transform","options","_this$rendererContext2","lazy","newData","trigger","_this$rendererContext3","registerArbitraryLifeCycle","dep","batchAddListener","e","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\nimport { isStrictMode } from \"../../isStrictMode.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\nexport class DataStore<T extends DataStoreType = \"CTX\"> {\n private readonly type: T;\n private readonly data = new Map<string, DataStoreItem>();\n private readonly changeEventType: string;\n private readonly pendingStack: Array<ReturnType<typeof resolveDataStore>> =\n [];\n public readonly hostBrick?: RuntimeBrick;\n private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\n if (isObject(item.value)) {\n Object.assign(item.value, value);\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `Non-object current value of \"${this.type}.${name}\" for \"context.assign\", try \"context.replace\" instead.`\n );\n item.value = value;\n }\n }\n\n if (this.batchUpdate) return;\n\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n }\n\n private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type,\n isStrictMode(runtimeContext)\n );\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): () => void {\n const eventTarget = this.data.get(dataName)?.eventTarget;\n eventTarget?.addEventListener(this.changeEventType, listener);\n return () => {\n eventTarget?.removeEventListener(this.changeEventType, listener);\n };\n }\n\n async waitFor(dataNames: string[] | Set<string>): Promise<void> {\n for (const { pendingContexts } of this.pendingStack) {\n await Promise.all(\n [...dataNames].map((ctx) => {\n const p = pendingContexts.get(ctx);\n return p;\n })\n );\n }\n }\n\n async waitForAll(): Promise<void> {\n // Silent each pending contexts, since the error is handled by batched `pendingResult`\n for (const { pendingContexts } of this.pendingStack) {\n for (const p of pendingContexts.values()) {\n p.catch(() => {\n /* No-op */\n });\n }\n }\n for (const { pendingResult } of this.pendingStack) {\n await pendingResult;\n }\n }\n\n /**\n * After mount, dispatch the change event when an async data is loaded.\n *\n * If param `route` is present, handle data defined in that route (or its descendants) only.\n */\n mountAsyncData(route?: RouteConf) {\n this.data.forEach((item) => {\n if (item.async && (!route || this.routeMap.get(route)?.has(item.name))) {\n // istanbul ignore next\n if (item.asyncMounted) {\n // eslint-disable-next-line no-console\n console.error(\n `Async data \"${item.name}\" already mounted. This is a bug of Brick Next, please report it.`\n );\n return;\n }\n item.asyncMounted = true;\n // An async data always has `loading`\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n item.loading!.then((value) => {\n this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n disposeDataInRoutes(routes: RouteConf[]) {\n for (const route of routes) {\n const names = this.routeMap.get(route);\n if (names !== undefined) {\n for (const name of names) {\n this.data.delete(name);\n }\n }\n }\n }\n\n private batchAddListener(\n listener: EventListener,\n contextConf: ContextConf\n ): EventListener {\n return (event: Event | CustomEvent): void => {\n if (\n this.batchUpdate &&\n this.batchUpdateContextsNames.includes(contextConf.name)\n ) {\n return;\n }\n listener(event);\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","pull","eventCallbackFactory","listenerFactory","asyncCheckIf","checkIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","callRealTimeDataInspectHooks","realTimeDataInspectRoot","isStrictMode","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","stateStoreId","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","tplStateStoreId","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","callback","callbackRuntimeContext","useResolve","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","load","cache","then","val","finishLoad","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","route","stack","routeStackMap","add","set","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","removeEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","pendingResult","mountAsyncData","_this$routeMap$get","async","routeMap","has","asyncMounted","expose","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","track","if","size","resolveConf","transform","options","_this$rendererContext2","lazy","newData","trigger","_this$rendererContext3","registerArbitraryLifeCycle","dep","batchAddListener","e","names","disposeDataInRoutes","routes","delete","contextConf","event"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { pull } from \"lodash\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf, checkIf } from \"../compute/checkIf.js\";\nimport {\n asyncComputeRealValue,\n computeRealValue,\n} from \"../compute/computeRealValue.js\";\nimport { ResolveOptions, resolveData } from \"./resolveData.js\";\nimport { resolveDataStore } from \"./resolveDataStore.js\";\nimport type {\n AsyncPropertyEntry,\n RuntimeBrick,\n RuntimeContext,\n} from \"../interfaces.js\";\nimport { handleHttpError } from \"../../handleHttpError.js\";\nimport type { RendererContext } from \"../RendererContext.js\";\nimport { computePropertyValue } from \"../compute/computeRealProperties.js\";\nimport { _internalApiGetRenderId } from \"../Runtime.js\";\nimport {\n callRealTimeDataInspectHooks,\n realTimeDataInspectRoot,\n} from \"./realTimeDataInspect.js\";\nimport { isStrictMode } from \"../../isStrictMode.js\";\n\nconst supportContextResolveTriggerBrickLifeCycle = [\n \"onBeforePageLoad\",\n \"onPageLoad\",\n \"onBeforePageLeave\",\n \"onPageLeave\",\n \"onAnchorLoad\",\n \"onAnchorUnload\",\n] as ContextResolveTriggerBrickLifeCycle[];\n\nexport type DataStoreType = \"CTX\" | \"STATE\" | \"FORM_STATE\";\n\nexport interface DataStoreItem {\n name: string;\n value: unknown;\n eventTarget: EventTarget;\n useResolve?: boolean;\n loaded?: boolean;\n loading?: Promise<unknown>;\n load?: (options?: ResolveOptions) => Promise<unknown>;\n async?: boolean;\n asyncMounted?: boolean;\n deps: string[];\n}\n\ntype PendingStackItem = ReturnType<typeof resolveDataStore>;\n\nexport class DataStore<T extends DataStoreType = \"CTX\"> {\n private readonly type: T;\n private readonly data = new Map<string, DataStoreItem>();\n private readonly changeEventType: string;\n private readonly pendingStack: Array<PendingStackItem> = [];\n public readonly hostBrick?: RuntimeBrick;\n private readonly stateStoreId?: string;\n private batchUpdate = false;\n private batchUpdateContextsNames: string[] = [];\n private readonly rendererContext?: RendererContext;\n private routeMap = new WeakMap<RouteConf, Set<string>>();\n private routeStackMap = new WeakMap<RouteConf, Set<PendingStackItem>>();\n\n // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整\n constructor(\n type: T,\n hostBrick?: RuntimeBrick,\n rendererContext?: RendererContext,\n stateStoreId?: string\n ) {\n this.type = type;\n this.changeEventType =\n this.type === \"FORM_STATE\"\n ? \"formstate.change\"\n : this.type === \"STATE\"\n ? \"state.change\"\n : \"context.change\";\n this.hostBrick = hostBrick;\n this.rendererContext = rendererContext;\n this.stateStoreId = stateStoreId;\n }\n\n getAllValues(): Record<string, unknown> {\n return Object.fromEntries(\n [...this.data.entries()].map(([name, { value }]) => [name, value])\n );\n }\n\n getValue(name: string): unknown {\n return this.data.get(name)?.value;\n }\n\n private notifyRealTimeDataChange(name: string, value: unknown) {\n if (realTimeDataInspectRoot) {\n const { tplStateStoreId } = realTimeDataInspectRoot;\n if (\n tplStateStoreId\n ? this.type === \"STATE\" && this.stateStoreId === tplStateStoreId\n : this.type === \"CTX\"\n ) {\n callRealTimeDataInspectHooks({\n changeType: \"update\",\n tplStateStoreId,\n detail: {\n name,\n value,\n },\n });\n }\n }\n }\n\n private getAffectListByContext(name: string): string[] {\n const affectNames = [name];\n this.data.forEach((value, key) => {\n if (value.deps) {\n const isInDeps = value.deps.some((item) => affectNames.includes(item));\n isInDeps &&\n affectNames.push(key) &&\n affectNames.push(...this.getAffectListByContext(key));\n }\n });\n affectNames.shift();\n return [...new Set(affectNames)];\n }\n\n updateValues(\n values: BatchUpdateContextItem[],\n method: \"assign\" | \"replace\",\n argsFactory: (arg: unknown[]) => BatchUpdateContextItem\n ): void {\n this.batchUpdate = true;\n this.batchUpdateContextsNames = values.map((item) => item.name);\n if (\n [...new Set(this.batchUpdateContextsNames)].length !==\n this.batchUpdateContextsNames.length\n ) {\n throw new Error(`Batch update not allow to update same item`);\n }\n\n const updateContexts: Record<string, DataStoreItem> = {};\n const affectContexts: Record<string, DataStoreItem> = {};\n const affectDepsContextNames: string[] = [];\n\n values.forEach((arg) => {\n const { name, value } = argsFactory([arg]);\n const updateContextItem = this.data.get(name);\n affectDepsContextNames.push(...this.getAffectListByContext(name));\n updateContextItem && (updateContexts[name] = updateContextItem);\n this.updateValue(name as string, value, method);\n });\n\n affectDepsContextNames\n .filter((item) => !updateContexts[item])\n .forEach((name) => {\n const affectContextItem = this.data.get(name);\n affectContextItem && (affectContexts[name] = affectContextItem);\n });\n\n const triggerEvent = (contexts: Record<string, DataStoreItem>): void => {\n for (const key in contexts) {\n const context = contexts[key];\n context.eventTarget?.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: context.value,\n })\n );\n }\n };\n\n triggerEvent(updateContexts);\n triggerEvent(affectContexts);\n\n this.batchUpdate = false;\n\n return;\n }\n\n updateValue(\n name: string,\n value: unknown,\n method: \"assign\" | \"replace\" | \"refresh\" | \"load\",\n callback?: BrickEventHandlerCallback,\n callbackRuntimeContext?: RuntimeContext\n ): void {\n const item = this.data.get(name);\n if (!item) {\n throw new Error(`${this.type} '${name}' is not defined`);\n }\n\n if (method === \"refresh\" || method === \"load\") {\n if (!item.useResolve) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which is not using resolve`\n );\n }\n\n let promise: Promise<unknown> | undefined;\n if (method === \"load\") {\n // Try to reuse previous request when calling `load`.\n if (item.loaded) {\n promise = Promise.resolve(item.value);\n } else if (item.loading) {\n promise = item.loading;\n }\n }\n\n const shouldDismiss = (error: unknown) => {\n // If render twice immediately, flow API contracts maybe cleared before\n // the second rendering, while the page load handlers of the first\n // rendering can't be cancelled, which throws `FlowApiNotFoundError`.\n // So we ignore error reporting for this case.\n let renderId: string | undefined;\n return (\n (error as Error)?.name === \"FlowApiNotFoundError\" &&\n !!(renderId = this.rendererContext?.renderId) &&\n renderId !== _internalApiGetRenderId()\n );\n };\n\n if (!promise) {\n promise = item.loading = item.load!({\n cache: method === \"load\" ? \"default\" : \"reload\",\n ...(value as ResolveOptions),\n });\n // Do not use the chained promise, since the callbacks need the original promise.\n promise.then(\n (val) => {\n this.finishLoad(item, val);\n },\n (err) => {\n // Let users override error handling.\n if (item.useResolve && !shouldDismiss(err) && !callback?.error) {\n handleHttpError(err);\n }\n }\n );\n }\n\n if (callback) {\n const callbackFactory = eventCallbackFactory(\n callback,\n callbackRuntimeContext!\n );\n\n promise.then(\n (val) => {\n callbackFactory(\"success\")({ value: val });\n callbackFactory(\"finally\")();\n },\n (err) => {\n if (!shouldDismiss(err) && callback.error) {\n callbackFactory(\"error\")(err);\n }\n callbackFactory(\"finally\")();\n }\n );\n }\n\n return;\n }\n\n if (method === \"replace\") {\n item.value = value;\n } else {\n if (isObject(item.value)) {\n Object.assign(item.value, value);\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `Non-object current value of \"${this.type}.${name}\" for \"context.assign\", try \"context.replace\" instead.`\n );\n item.value = value;\n }\n }\n\n if (this.batchUpdate) return;\n\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n }\n\n private finishLoad(item: DataStoreItem, value: unknown) {\n if (!item.useResolve) {\n // This happens when a tracked conditional resolve switches from\n // resolve to fallback after an dep update triggered refresh but\n // before it's been resolved.\n return;\n }\n item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\n }\n\n define(\n dataConfs: ContextConf[] | undefined,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): void {\n if (Array.isArray(dataConfs) && dataConfs.length > 0) {\n const pending = resolveDataStore(\n dataConfs,\n (dataConf: ContextConf) =>\n this.resolve(\n dataConf,\n runtimeContext,\n asyncHostPropertyEntries,\n routePath\n ),\n this.type,\n isStrictMode(runtimeContext)\n );\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const stack = this.routeStackMap.get(route);\n if (stack) {\n stack.add(pending);\n } else {\n this.routeStackMap.set(route, new Set([pending]));\n }\n }\n }\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): () => void {\n const eventTarget = this.data.get(dataName)?.eventTarget;\n eventTarget?.addEventListener(this.changeEventType, listener);\n return () => {\n eventTarget?.removeEventListener(this.changeEventType, listener);\n };\n }\n\n async waitFor(dataNames: string[] | Set<string>): Promise<void> {\n for (const { pendingContexts } of this.pendingStack) {\n await Promise.all(\n [...dataNames].map((ctx) => {\n const p = pendingContexts.get(ctx);\n return p;\n })\n );\n }\n }\n\n async waitForAll(): Promise<void> {\n for (const { pendingResult } of this.pendingStack) {\n await pendingResult;\n }\n }\n\n /**\n * After mount, dispatch the change event when an async data is loaded.\n *\n * If param `route` is present, handle data defined in that route (or its descendants) only.\n */\n mountAsyncData(route?: RouteConf) {\n this.data.forEach((item) => {\n if (item.async && (!route || this.routeMap.get(route)?.has(item.name))) {\n // istanbul ignore next\n if (item.asyncMounted) {\n // eslint-disable-next-line no-console\n console.error(\n `Async data \"${item.name}\" already mounted. This is a bug of Brick Next, please report it.`\n );\n return;\n }\n item.asyncMounted = true;\n // An async data always has `loading`\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n item.loading!.then((value) => {\n this.finishLoad(item, value);\n });\n }\n });\n }\n\n private async resolve(\n dataConf: ContextConf,\n runtimeContext: RuntimeContext,\n asyncHostPropertyEntries?: AsyncPropertyEntry[],\n routePath?: RouteConf[]\n ): Promise<boolean> {\n if (!(await asyncCheckIf(dataConf, runtimeContext))) {\n return false;\n }\n let value: unknown;\n if (\n asyncHostPropertyEntries &&\n (this.type === \"STATE\" ? dataConf.expose : this.type === \"FORM_STATE\")\n ) {\n value = await computePropertyValue(\n asyncHostPropertyEntries,\n dataConf.name\n );\n }\n let load: DataStoreItem[\"load\"];\n let loading: Promise<unknown> | undefined;\n let useResolve: boolean | undefined;\n let trackConditionalResolve: boolean | undefined;\n let resolvePolicy: \"eager\" | \"lazy\" | \"async\" | undefined;\n if (value === undefined) {\n if (dataConf.resolve) {\n const hasFallbackValue = hasOwnProperty(dataConf, \"value\");\n // Track conditional resolve only if all matches:\n // - Track enabled\n // - Has fallback value\n // - Referencing other data in `resolve.if`\n trackConditionalResolve =\n dataConf.track &&\n hasFallbackValue &&\n hasOwnProperty(dataConf.resolve, \"if\") &&\n strictCollectMemberUsage(dataConf.resolve.if, this.type).size > 0;\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n useResolve = await asyncCheckIf(dataConf.resolve, runtimeContext);\n if (useResolve || trackConditionalResolve) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, {\n ...options,\n renderId: this.rendererContext?.renderId,\n })) as {\n value: unknown;\n }\n ).value;\n }\n if (useResolve) {\n // `async` take precedence over `lazy`\n resolvePolicy = dataConf.resolve.async\n ? \"async\"\n : dataConf.resolve.lazy\n ? \"lazy\"\n : \"eager\";\n if (resolvePolicy === \"eager\") {\n value = await load!();\n } else if (resolvePolicy === \"async\") {\n loading = load!();\n }\n } else if (!hasFallbackValue) {\n return false;\n }\n }\n if (\n (!useResolve || resolvePolicy !== \"eager\") &&\n dataConf.value !== undefined\n ) {\n // If the context has no resolve, just use its `value`.\n // Or if the resolve is ignored or lazy, use its `value` as a fallback.\n value = await asyncComputeRealValue(dataConf.value, runtimeContext);\n }\n }\n\n if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\n );\n }\n\n const newData: DataStoreItem = {\n name: dataConf.name,\n value,\n // This is required for tracking context, even if no `onChange` is specified.\n eventTarget: new EventTarget(),\n useResolve,\n load,\n loaded: resolvePolicy === \"eager\",\n loading,\n async: resolvePolicy === \"async\",\n deps: [],\n };\n\n if (resolvePolicy === \"lazy\") {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { trigger } = dataConf.resolve!;\n if (\n trigger &&\n supportContextResolveTriggerBrickLifeCycle.includes(trigger)\n ) {\n this.rendererContext?.registerArbitraryLifeCycle(trigger, () => {\n this.updateValue(dataConf.name, undefined, \"load\");\n });\n }\n }\n\n if (dataConf.onChange) {\n newData.eventTarget.addEventListener(\n this.changeEventType,\n listenerFactory(dataConf.onChange, runtimeContext)\n );\n }\n\n if (dataConf.track) {\n const deps = strictCollectMemberUsage(\n trackConditionalResolve\n ? [dataConf.resolve, dataConf.value]\n : load\n ? dataConf.resolve\n : dataConf.value,\n this.type\n );\n !load && (newData.deps = [...deps]);\n for (const dep of deps) {\n this.onChange(\n dep,\n this.batchAddListener(() => {\n newData.useResolve = trackConditionalResolve\n ? checkIf(dataConf.resolve!, runtimeContext)\n : !!load;\n if (newData.useResolve) {\n this.updateValue(dataConf.name, { cache: \"default\" }, \"refresh\");\n } else {\n this.updateValue(\n dataConf.name,\n computeRealValue(dataConf.value, runtimeContext),\n \"replace\"\n );\n }\n }, dataConf)\n );\n }\n }\n\n newData.eventTarget.addEventListener(this.changeEventType, (e) => {\n this.notifyRealTimeDataChange(dataConf.name, (e as CustomEvent).detail);\n });\n\n this.data.set(dataConf.name, newData);\n\n if (Array.isArray(routePath)) {\n for (const route of routePath) {\n const names = this.routeMap.get(route);\n if (names) {\n names.add(dataConf.name);\n } else {\n this.routeMap.set(route, new Set([dataConf.name]));\n }\n }\n }\n\n return true;\n }\n\n /**\n * For sub-routes to be incrementally rendered,\n * dispose their data and pending tasks.\n */\n disposeDataInRoutes(routes: RouteConf[]) {\n //\n for (const route of routes) {\n const names = this.routeMap.get(route);\n if (names !== undefined) {\n for (const name of names) {\n this.data.delete(name);\n }\n this.routeMap.delete(route);\n }\n const stack = this.routeStackMap.get(route);\n if (stack !== undefined) {\n pull(this.pendingStack, ...stack);\n this.routeStackMap.delete(route);\n }\n }\n }\n\n private batchAddListener(\n listener: EventListener,\n contextConf: ContextConf\n ): EventListener {\n return (event: Event | CustomEvent): void => {\n if (\n this.batchUpdate &&\n this.batchUpdateContextsNames.includes(contextConf.name)\n ) {\n return;\n }\n listener(event);\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -12,12 +12,17 @@ export function resolveDataStore(contextConfs, resolveContext) {
12
12
  const hasNonStaticUsage = Array.from(dependencyMap.values()).some(stats => stats.hasNonStaticUsage);
13
13
  const processed = new WeakSet();
14
14
  const deferredContexts = new Map();
15
- const pendingContexts = new Map([...new Set(contextConfs.map(contextConf => contextConf.name))].map(contextName => [contextName, new Promise((resolve, reject) => {
16
- deferredContexts.set(contextName, {
17
- resolve,
18
- reject
15
+ const pendingContexts = new Map([...new Set(contextConfs.map(contextConf => contextConf.name))].map(contextName => {
16
+ const promise = new Promise((resolve, reject) => {
17
+ deferredContexts.set(contextName, {
18
+ resolve,
19
+ reject
20
+ });
19
21
  });
20
- })]));
22
+ // The pending context will be caught by the renderer.
23
+ promise.catch(() => {});
24
+ return [contextName, promise];
25
+ }));
21
26
  const wrapResolve = async contextConf => {
22
27
  processed.add(contextConf);
23
28
  const resolved = await resolveContext(contextConf);
@@ -75,6 +80,8 @@ export function resolveDataStore(contextConfs, resolveContext) {
75
80
  }
76
81
  throw error;
77
82
  });
83
+ // The pending result will be caught by the renderer.
84
+ pendingResult.catch(() => {});
78
85
  return {
79
86
  pendingResult,
80
87
  pendingContexts
@@ -1 +1 @@
1
- {"version":3,"file":"resolveDataStore.js","names":["collectMemberUsage","resolveDataStore","contextConfs","resolveContext","keyword","arguments","length","undefined","strict","dependencyMap","getDependencyMapOfContext","pendingDeps","Map","contextName","Array","from","keys","map","contextConf","name","set","get","hasNonStaticUsage","values","some","stats","processed","WeakSet","deferredContexts","pendingContexts","Set","Promise","resolve","reject","wrapResolve","add","resolved","delete","left","Error","scheduleNext","scheduleAsSerial","readyContexts","entries","filter","predicateNextResolveFactory","entry","has","all","pendingResult","then","size","detectCircularContexts","deferred","catch","error","index","usedProperties","dep","depsMap","data","if","value","legacyTplStats","prop","duplicatedMap","next","processedAtLeastOne","ReferenceError","join"],"sources":["../../../../src/internal/data/resolveDataStore.ts"],"sourcesContent":["import { ContextConf } from \"@next-core/types\";\nimport { collectMemberUsage, MemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface DeferredContext {\n resolve(): void;\n reject(e: unknown): void;\n}\n\nexport function resolveDataStore(\n contextConfs: ContextConf[],\n resolveContext: (contextConf: ContextConf) => Promise<boolean>,\n keyword = \"CTX\",\n strict?: boolean\n): {\n pendingResult: Promise<void>;\n pendingContexts: Map<string, Promise<void>>;\n} {\n const dependencyMap = getDependencyMapOfContext(\n contextConfs,\n keyword,\n strict\n );\n // There maybe multiple context confs for a specific name, since there are conditional contexts.\n // This is a map of how many pending context confs for each context name.\n const pendingDeps = new Map<string, number>();\n for (const contextName of Array.from(dependencyMap.keys()).map(\n (contextConf) => contextConf.name\n )) {\n pendingDeps.set(contextName, (pendingDeps.get(contextName) ?? 0) + 1);\n }\n const hasNonStaticUsage = Array.from(dependencyMap.values()).some(\n (stats) => stats.hasNonStaticUsage\n );\n const processed = new WeakSet<ContextConf>();\n\n const deferredContexts = new Map<string, DeferredContext>();\n const pendingContexts = new Map(\n [...new Set(contextConfs.map((contextConf) => contextConf.name))].map(\n (contextName) => [\n contextName,\n new Promise<void>((resolve, reject) => {\n deferredContexts.set(contextName, { resolve, reject });\n }),\n ]\n )\n );\n\n const wrapResolve = async (contextConf: ContextConf): Promise<void> => {\n processed.add(contextConf);\n const resolved = await resolveContext(contextConf);\n dependencyMap.delete(contextConf);\n const left = pendingDeps.get(contextConf.name) ?? 0;\n if (resolved) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n if (left === 0) {\n throw new Error(`Duplicated context defined: ${contextConf.name}`);\n }\n } else {\n // Assert: left >= 1\n if (left === 1) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n } else {\n pendingDeps.set(contextConf.name, left - 1);\n }\n }\n await scheduleNext();\n };\n\n let scheduleAsSerial = hasNonStaticUsage;\n\n async function scheduleNext(): Promise<void> {\n const readyContexts = Array.from(dependencyMap.entries())\n .filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial))\n .map((entry) => entry[0])\n .filter((contextConf) => !processed.has(contextConf));\n await Promise.all(readyContexts.map(wrapResolve));\n }\n\n const pendingResult = scheduleNext()\n .then(async () => {\n // If there are still contexts left, it implies one of these situations:\n // - Circular contexts.\n // Such as: a depends on b, while b depends on a.\n // - Related contexts are all ignored.\n // Such as: a depends on b,\n // while both them are ignore by a falsy result of `if`.\n if (dependencyMap.size > 0) {\n // This will throw if circular contexts detected.\n detectCircularContexts(dependencyMap, keyword);\n scheduleAsSerial = true;\n await scheduleNext();\n }\n // There maybe ignored contexts which are still not fulfilled.\n // We treat them as RESOLVED.\n for (const deferred of deferredContexts.values()) {\n deferred.resolve();\n }\n })\n .catch((error) => {\n // There maybe contexts left not fulfilled, when an error occurred.\n // We treat them as REJECTED.\n for (const deferred of deferredContexts.values()) {\n deferred.reject(error);\n }\n throw error;\n });\n return { pendingResult, pendingContexts };\n}\n\nfunction predicateNextResolveFactory(\n pendingDeps: Map<string, number>,\n scheduleAsSerial: boolean\n): (entry: [ContextConf, MemberUsage], index: number) => boolean {\n return (entry, index) =>\n // When contexts contain computed CTX accesses, it implies a dynamic dependency map.\n // So make them process sequentially, keep the same behavior as before.\n scheduleAsSerial\n ? index === 0\n : // A context is ready when it has no pending dependencies.\n ![...entry[1].usedProperties].some((dep) => pendingDeps.has(dep));\n}\n\nexport function getDependencyMapOfContext(\n contextConfs: ContextConf[],\n keyword = \"CTX\",\n strict?: boolean\n): Map<ContextConf, MemberUsage> {\n const depsMap = new Map<ContextConf, MemberUsage>();\n for (const contextConf of contextConfs) {\n const data = [contextConf.if, contextConf.value, contextConf.resolve];\n const stats = collectMemberUsage(data, keyword);\n if (!strict && keyword === \"STATE\") {\n const legacyTplStats = collectMemberUsage(data, \"TPL\");\n // Merge stats with legacyTplStats\n for (const prop of legacyTplStats.usedProperties) {\n stats.usedProperties.add(prop);\n }\n if (legacyTplStats.hasNonStaticUsage) {\n stats.hasNonStaticUsage = true;\n }\n }\n depsMap.set(contextConf, stats);\n }\n return depsMap;\n}\n\nfunction detectCircularContexts(\n dependencyMap: Map<ContextConf, MemberUsage>,\n keyword: string\n): void {\n const duplicatedMap = new Map(dependencyMap);\n const pendingDeps = new Set<string>(\n Array.from(duplicatedMap.keys()).map((contextConf) => contextConf.name)\n );\n const next = (): void => {\n let processedAtLeastOne = false;\n for (const [contextConf, stats] of duplicatedMap.entries()) {\n if (![...stats.usedProperties].some((dep) => pendingDeps.has(dep))) {\n duplicatedMap.delete(contextConf);\n pendingDeps.delete(contextConf.name);\n processedAtLeastOne = true;\n }\n }\n if (processedAtLeastOne) {\n next();\n }\n };\n next();\n\n if (duplicatedMap.size > 0) {\n throw new ReferenceError(\n `Circular ${keyword} detected: ${Array.from(duplicatedMap.keys())\n .map((contextConf) => contextConf.name)\n .join(\", \")}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"resolveDataStore.js","names":["collectMemberUsage","resolveDataStore","contextConfs","resolveContext","keyword","arguments","length","undefined","strict","dependencyMap","getDependencyMapOfContext","pendingDeps","Map","contextName","Array","from","keys","map","contextConf","name","set","get","hasNonStaticUsage","values","some","stats","processed","WeakSet","deferredContexts","pendingContexts","Set","promise","Promise","resolve","reject","catch","wrapResolve","add","resolved","delete","left","Error","scheduleNext","scheduleAsSerial","readyContexts","entries","filter","predicateNextResolveFactory","entry","has","all","pendingResult","then","size","detectCircularContexts","deferred","error","index","usedProperties","dep","depsMap","data","if","value","legacyTplStats","prop","duplicatedMap","next","processedAtLeastOne","ReferenceError","join"],"sources":["../../../../src/internal/data/resolveDataStore.ts"],"sourcesContent":["import { ContextConf } from \"@next-core/types\";\nimport { collectMemberUsage, MemberUsage } from \"@next-core/utils/storyboard\";\n\nexport interface DeferredContext {\n resolve(): void;\n reject(e: unknown): void;\n}\n\nexport function resolveDataStore(\n contextConfs: ContextConf[],\n resolveContext: (contextConf: ContextConf) => Promise<boolean>,\n keyword = \"CTX\",\n strict?: boolean\n): {\n pendingResult: Promise<void>;\n pendingContexts: Map<string, Promise<void>>;\n} {\n const dependencyMap = getDependencyMapOfContext(\n contextConfs,\n keyword,\n strict\n );\n // There maybe multiple context confs for a specific name, since there are conditional contexts.\n // This is a map of how many pending context confs for each context name.\n const pendingDeps = new Map<string, number>();\n for (const contextName of Array.from(dependencyMap.keys()).map(\n (contextConf) => contextConf.name\n )) {\n pendingDeps.set(contextName, (pendingDeps.get(contextName) ?? 0) + 1);\n }\n const hasNonStaticUsage = Array.from(dependencyMap.values()).some(\n (stats) => stats.hasNonStaticUsage\n );\n const processed = new WeakSet<ContextConf>();\n\n const deferredContexts = new Map<string, DeferredContext>();\n const pendingContexts = new Map(\n [...new Set(contextConfs.map((contextConf) => contextConf.name))].map(\n (contextName) => {\n const promise = new Promise<void>((resolve, reject) => {\n deferredContexts.set(contextName, { resolve, reject });\n });\n // The pending context will be caught by the renderer.\n promise.catch(() => {});\n return [contextName, promise];\n }\n )\n );\n\n const wrapResolve = async (contextConf: ContextConf): Promise<void> => {\n processed.add(contextConf);\n const resolved = await resolveContext(contextConf);\n dependencyMap.delete(contextConf);\n const left = pendingDeps.get(contextConf.name) ?? 0;\n if (resolved) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n if (left === 0) {\n throw new Error(`Duplicated context defined: ${contextConf.name}`);\n }\n } else {\n // Assert: left >= 1\n if (left === 1) {\n // Assert: contextConf.name exists in deferredContexts\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n deferredContexts.get(contextConf.name)!.resolve();\n pendingDeps.delete(contextConf.name);\n } else {\n pendingDeps.set(contextConf.name, left - 1);\n }\n }\n await scheduleNext();\n };\n\n let scheduleAsSerial = hasNonStaticUsage;\n\n async function scheduleNext(): Promise<void> {\n const readyContexts = Array.from(dependencyMap.entries())\n .filter(predicateNextResolveFactory(pendingDeps, scheduleAsSerial))\n .map((entry) => entry[0])\n .filter((contextConf) => !processed.has(contextConf));\n await Promise.all(readyContexts.map(wrapResolve));\n }\n\n const pendingResult = scheduleNext()\n .then(async () => {\n // If there are still contexts left, it implies one of these situations:\n // - Circular contexts.\n // Such as: a depends on b, while b depends on a.\n // - Related contexts are all ignored.\n // Such as: a depends on b,\n // while both them are ignore by a falsy result of `if`.\n if (dependencyMap.size > 0) {\n // This will throw if circular contexts detected.\n detectCircularContexts(dependencyMap, keyword);\n scheduleAsSerial = true;\n await scheduleNext();\n }\n // There maybe ignored contexts which are still not fulfilled.\n // We treat them as RESOLVED.\n for (const deferred of deferredContexts.values()) {\n deferred.resolve();\n }\n })\n .catch((error) => {\n // There maybe contexts left not fulfilled, when an error occurred.\n // We treat them as REJECTED.\n for (const deferred of deferredContexts.values()) {\n deferred.reject(error);\n }\n throw error;\n });\n // The pending result will be caught by the renderer.\n pendingResult.catch(() => {});\n return { pendingResult, pendingContexts };\n}\n\nfunction predicateNextResolveFactory(\n pendingDeps: Map<string, number>,\n scheduleAsSerial: boolean\n): (entry: [ContextConf, MemberUsage], index: number) => boolean {\n return (entry, index) =>\n // When contexts contain computed CTX accesses, it implies a dynamic dependency map.\n // So make them process sequentially, keep the same behavior as before.\n scheduleAsSerial\n ? index === 0\n : // A context is ready when it has no pending dependencies.\n ![...entry[1].usedProperties].some((dep) => pendingDeps.has(dep));\n}\n\nexport function getDependencyMapOfContext(\n contextConfs: ContextConf[],\n keyword = \"CTX\",\n strict?: boolean\n): Map<ContextConf, MemberUsage> {\n const depsMap = new Map<ContextConf, MemberUsage>();\n for (const contextConf of contextConfs) {\n const data = [contextConf.if, contextConf.value, contextConf.resolve];\n const stats = collectMemberUsage(data, keyword);\n if (!strict && keyword === \"STATE\") {\n const legacyTplStats = collectMemberUsage(data, \"TPL\");\n // Merge stats with legacyTplStats\n for (const prop of legacyTplStats.usedProperties) {\n stats.usedProperties.add(prop);\n }\n if (legacyTplStats.hasNonStaticUsage) {\n stats.hasNonStaticUsage = true;\n }\n }\n depsMap.set(contextConf, stats);\n }\n return depsMap;\n}\n\nfunction detectCircularContexts(\n dependencyMap: Map<ContextConf, MemberUsage>,\n keyword: string\n): void {\n const duplicatedMap = new Map(dependencyMap);\n const pendingDeps = new Set<string>(\n Array.from(duplicatedMap.keys()).map((contextConf) => contextConf.name)\n );\n const next = (): void => {\n let processedAtLeastOne = false;\n for (const [contextConf, stats] of duplicatedMap.entries()) {\n if (![...stats.usedProperties].some((dep) => pendingDeps.has(dep))) {\n duplicatedMap.delete(contextConf);\n pendingDeps.delete(contextConf.name);\n processedAtLeastOne = true;\n }\n }\n if (processedAtLeastOne) {\n next();\n }\n };\n next();\n\n if (duplicatedMap.size > 0) {\n throw new ReferenceError(\n `Circular ${keyword} detected: ${Array.from(duplicatedMap.keys())\n .map((contextConf) => contextConf.name)\n .join(\", \")}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -27,6 +27,7 @@ export declare class DataStore<T extends DataStoreType = "CTX"> {
27
27
  private batchUpdateContextsNames;
28
28
  private readonly rendererContext?;
29
29
  private routeMap;
30
+ private routeStackMap;
30
31
  constructor(type: T, hostBrick?: RuntimeBrick, rendererContext?: RendererContext, stateStoreId?: string);
31
32
  getAllValues(): Record<string, unknown>;
32
33
  getValue(name: string): unknown;
@@ -46,6 +47,10 @@ export declare class DataStore<T extends DataStoreType = "CTX"> {
46
47
  */
47
48
  mountAsyncData(route?: RouteConf): void;
48
49
  private resolve;
50
+ /**
51
+ * For sub-routes to be incrementally rendered,
52
+ * dispose their data and pending tasks.
53
+ */
49
54
  disposeDataInRoutes(routes: RouteConf[]): void;
50
55
  private batchAddListener;
51
56
  }