@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.
@@ -50,6 +50,7 @@ var _renderId = /*#__PURE__*/new WeakMap();
50
50
  var _currentApp = /*#__PURE__*/new WeakMap();
51
51
  var _previousApp = /*#__PURE__*/new WeakMap();
52
52
  var _navConfig = /*#__PURE__*/new WeakMap();
53
+ var _bootstrapFailed = /*#__PURE__*/new WeakMap();
53
54
  var _Router_brand = /*#__PURE__*/new WeakSet();
54
55
  class Router {
55
56
  constructor(storyboards) {
@@ -65,6 +66,7 @@ class Router {
65
66
  (0, _classPrivateFieldInitSpec2.default)(this, _currentApp, void 0);
66
67
  (0, _classPrivateFieldInitSpec2.default)(this, _previousApp, void 0);
67
68
  (0, _classPrivateFieldInitSpec2.default)(this, _navConfig, void 0);
69
+ (0, _classPrivateFieldInitSpec2.default)(this, _bootstrapFailed, false);
68
70
  (0, _classPrivateFieldSet2.default)(_storyboards, this, storyboards);
69
71
  const _history = (0, _history3.getHistory)();
70
72
  window.addEventListener("beforeunload", event => {
@@ -206,7 +208,9 @@ async function _preRender({
206
208
  // Ignore rendering if notify is `false`.
207
209
  ignoreRendering = true;
208
210
  }
209
- if (!ignoreRendering && !((_location$state2 = location.state) !== null && _location$state2 !== void 0 && _location$state2.noIncremental)) {
211
+
212
+ // Note: dot not perform incremental render when bootstrap failed.
213
+ if (!ignoreRendering && !((_location$state2 = location.state) !== null && _location$state2 !== void 0 && _location$state2.noIncremental) && !(0, _classPrivateFieldGet6.default)(_bootstrapFailed, this)) {
210
214
  var _classPrivateFieldGet3;
211
215
  ignoreRendering = await ((_classPrivateFieldGet3 = (0, _classPrivateFieldGet6.default)(_rendererContext, this)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.didPerformIncrementalRender(location, prevLocation));
212
216
  }
@@ -409,6 +413,9 @@ async function _render(location, isBootstrap) {
409
413
  } catch (error) {
410
414
  // eslint-disable-next-line no-console
411
415
  console.error("Router failed:", error);
416
+ if (isBootstrap) {
417
+ (0, _classPrivateFieldSet2.default)(_bootstrapFailed, this, true);
418
+ }
412
419
  const result = await routeHelper.catch(error, renderRoot, isBootstrap);
413
420
  if (!result) {
414
421
  return;
@@ -419,6 +426,7 @@ async function _render(location, isBootstrap) {
419
426
  } = result);
420
427
  }
421
428
  renderRoot.child = output.node;
429
+ (0, _classPrivateFieldSet2.default)(_bootstrapFailed, this, false);
422
430
  cleanUpPreviousRender();
423
431
  if (output.route && output.route.type !== "routes" || failed) {
424
432
  if (!failed) {
@@ -1 +1 @@
1
- {"version":3,"file":"Router.js","names":["_history2","require","_http","_cook","_lodash","_history3","_Renderer","_DataStore","_resolveData","_mount","_matchStoryboard","_StoryboardFunctions","_RendererContext","_themeAndMode","_Runtime","_getPageInfo","_markAsComputed","_handleHttpError","_abortController","_setLoginStateCookie","_registerCustomTemplates","_fulfilStoryboard","_enums","_insertPreviewRoutes","_devtools","_setUIVersion","_setAppVariable","_setWatermark","_routeMatchedMap","_ErrorNode","_storyboards","WeakMap","_rendering","_nextRender","_runtimeContext","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_Router_brand","WeakSet","Router","constructor","storyboards","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","Set","_classPrivateFieldSet2","history","getHistory","window","addEventListener","event","message","_assertClassBrand2","_getBlockMessageBeforePageLave","call","preventDefault","returnValue","block","location","action","getRenderId","_classPrivateFieldGet6","getRuntimeContext","getRecentApps","currentApp","previousApp","getNavConfig","bootstrap","initAbortController","nextPrevLocation","listen","prevLocation","_queuedRender","catch","handleHttpError","exports","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","_prevLocation$state","_location$state","_location$state2","_classPrivateFieldGet4","ignoreRendering","omittedLocationProps","key","notify","locationsAreEqual","noIncremental","_classPrivateFieldGet3","didPerformIncrementalRender","abortPendingRequest","dispatchPageLeave","storyboard","matchStoryboard","isOutsideApp","reload","devtoolsHookEmit","_render","isBootstrap","_hooks$flowApi","_hooks$pageView","_classPrivateFieldGet5","_storyboard$app","renderId","uniqueId","resetAllComputedMarks","clearResolveCache","hooks","flowApi","clearCollectWidgetContract","finishPageView","pageView","create","app","currentAppId","id","BOOTSTRAP_UNION_FILE","setAppVariable","appId","version","currentVersion","fulfilStoryboard","setWatermark","appChanged","clearExpressionASTCache","clearFunctionASTCache","flags","getRuntime","getFeatureFlags","prevRendererContext","redirectTo","status","add","redirectToLogin","setLoginStateCookie","main","document","querySelector","portal","renderRoot","tag","RenderTag","ROOT","container","createPortal","cleanUpPreviousRender","_hooks$messageDispatc","unmountTree","item","dispatchOnUnmount","dispose","clear","messageDispatcher","reset","dispatchEvent","CustomEvent","setTheme","getLocalAppsTheme","theme","setMode","_hooks$checkInstalled","_hooks$auth","_hooks$checkPermissio","_storyboard$meta","_hooks$flowApi2","_storyboard$meta2","checkInstalledApps","preCheckInstalledApps","_internalApiGetAppInBootstrapData","routeHelper","bailout","output","unauthenticated","redirect","path","mergeMenus","menuRequests","menuConfs","Promise","all","mergeMenuConfs","returnNode","isCurrentBootstrap","isReCatch","isUnauthenticatedError","NO_AUTH_GUARD","HttpAbortError","noAuthGuardLoginPath","getMiscSettings","failed","node","ErrorNode","blockingList","rendererContext","RendererContext","runtimeContext","query","URLSearchParams","sys","auth","getAuth","getPageInfo","settings","brand","getBrandSettings","ctxStore","DataStore","pendingPermissionsPreCheck","checkPermissions","preCheckPermissions","tplStateStoreMap","Map","formStateStoreMap","registerCustomTemplates","registerStoryboardFunctions","meta","functions","collectContract","contracts","stores","clearMatchedRoutes","rootMenuRequestNode","renderRoutes","insertPreviewRoutes","routes","getDataStores","postAsyncRender","child","menuRequestNode","setInitialMenuRequestNode","getMenuRequests","result","route","type","dispatchBeforePageLoad","applyTheme","applyMode","setUIVersion","uiVersion","mountTree","scrollTo","dispatchPageLoad","dispatchAnchorLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","pageTitle","title","isLoggedIn","PageNotFoundError","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":["_history2","require","_http","_cook","_lodash","_history3","_Renderer","_DataStore","_resolveData","_mount","_matchStoryboard","_StoryboardFunctions","_RendererContext","_themeAndMode","_Runtime","_getPageInfo","_markAsComputed","_handleHttpError","_abortController","_setLoginStateCookie","_registerCustomTemplates","_fulfilStoryboard","_enums","_insertPreviewRoutes","_devtools","_setUIVersion","_setAppVariable","_setWatermark","_routeMatchedMap","_ErrorNode","_storyboards","WeakMap","_rendering","_nextRender","_runtimeContext","_rendererContext","_rendererContextTrashCan","_redirectCount","_renderId","_currentApp","_previousApp","_navConfig","_bootstrapFailed","_Router_brand","WeakSet","Router","constructor","storyboards","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","Set","_classPrivateFieldSet2","history","getHistory","window","addEventListener","event","message","_assertClassBrand2","_getBlockMessageBeforePageLave","call","preventDefault","returnValue","block","location","action","getRenderId","_classPrivateFieldGet6","getRuntimeContext","getRecentApps","currentApp","previousApp","getNavConfig","bootstrap","initAbortController","nextPrevLocation","listen","prevLocation","_queuedRender","catch","handleHttpError","exports","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","_prevLocation$state","_location$state","_location$state2","_classPrivateFieldGet4","ignoreRendering","omittedLocationProps","key","notify","locationsAreEqual","noIncremental","_classPrivateFieldGet3","didPerformIncrementalRender","abortPendingRequest","dispatchPageLeave","storyboard","matchStoryboard","isOutsideApp","reload","devtoolsHookEmit","_render","isBootstrap","_hooks$flowApi","_hooks$pageView","_classPrivateFieldGet5","_storyboard$app","renderId","uniqueId","resetAllComputedMarks","clearResolveCache","hooks","flowApi","clearCollectWidgetContract","finishPageView","pageView","create","app","currentAppId","id","BOOTSTRAP_UNION_FILE","setAppVariable","appId","version","currentVersion","fulfilStoryboard","setWatermark","appChanged","clearExpressionASTCache","clearFunctionASTCache","flags","getRuntime","getFeatureFlags","prevRendererContext","redirectTo","status","add","redirectToLogin","setLoginStateCookie","main","document","querySelector","portal","renderRoot","tag","RenderTag","ROOT","container","createPortal","cleanUpPreviousRender","_hooks$messageDispatc","unmountTree","item","dispatchOnUnmount","dispose","clear","messageDispatcher","reset","dispatchEvent","CustomEvent","setTheme","getLocalAppsTheme","theme","setMode","_hooks$checkInstalled","_hooks$auth","_hooks$checkPermissio","_storyboard$meta","_hooks$flowApi2","_storyboard$meta2","checkInstalledApps","preCheckInstalledApps","_internalApiGetAppInBootstrapData","routeHelper","bailout","output","unauthenticated","redirect","path","mergeMenus","menuRequests","menuConfs","Promise","all","mergeMenuConfs","returnNode","isCurrentBootstrap","isReCatch","isUnauthenticatedError","NO_AUTH_GUARD","HttpAbortError","noAuthGuardLoginPath","getMiscSettings","failed","node","ErrorNode","blockingList","rendererContext","RendererContext","runtimeContext","query","URLSearchParams","sys","auth","getAuth","getPageInfo","settings","brand","getBrandSettings","ctxStore","DataStore","pendingPermissionsPreCheck","checkPermissions","preCheckPermissions","tplStateStoreMap","Map","formStateStoreMap","registerCustomTemplates","registerStoryboardFunctions","meta","functions","collectContract","contracts","stores","clearMatchedRoutes","rootMenuRequestNode","renderRoutes","insertPreviewRoutes","routes","getDataStores","postAsyncRender","child","menuRequestNode","setInitialMenuRequestNode","getMenuRequests","result","route","type","dispatchBeforePageLoad","applyTheme","applyMode","setUIVersion","uiVersion","mountTree","scrollTo","dispatchPageLoad","dispatchAnchorLoad","dispatchOnMount","initializeScrollIntoView","initializeMediaChange","initializeMessageDispatcher","store","mountAsyncData","pageTitle","title","isLoggedIn","PageNotFoundError","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":[]}
@@ -8,6 +8,7 @@ exports.DataStore = void 0;
8
8
  var _general = require("@next-core/utils/general");
9
9
  var _storyboard = require("@next-core/utils/storyboard");
10
10
  var _eventTarget = _interopRequireDefault(require("@ungap/event-target"));
11
+ var _lodash = require("lodash");
11
12
  var _bindListeners = require("../bindListeners.js");
12
13
  var _checkIf = require("../compute/checkIf.js");
13
14
  var _computeRealValue = require("../compute/computeRealValue.js");
@@ -30,6 +31,7 @@ class DataStore {
30
31
  batchUpdateContextsNames = [];
31
32
  rendererContext;
32
33
  routeMap = new WeakMap();
34
+ routeStackMap = new WeakMap();
33
35
 
34
36
  // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整
35
37
  constructor(type, hostBrick, rendererContext, stateStoreId) {
@@ -203,6 +205,16 @@ class DataStore {
203
205
  define(dataConfs, runtimeContext, asyncHostPropertyEntries, routePath) {
204
206
  if (Array.isArray(dataConfs) && dataConfs.length > 0) {
205
207
  const pending = (0, _resolveDataStore.resolveDataStore)(dataConfs, dataConf => this.resolve(dataConf, runtimeContext, asyncHostPropertyEntries, routePath), this.type, (0, _isStrictMode.isStrictMode)(runtimeContext));
208
+ if (Array.isArray(routePath)) {
209
+ for (const route of routePath) {
210
+ const stack = this.routeStackMap.get(route);
211
+ if (stack) {
212
+ stack.add(pending);
213
+ } else {
214
+ this.routeStackMap.set(route, new Set([pending]));
215
+ }
216
+ }
217
+ }
206
218
  this.pendingStack.push(pending);
207
219
  }
208
220
  }
@@ -225,16 +237,6 @@ class DataStore {
225
237
  }
226
238
  }
227
239
  async waitForAll() {
228
- // Silent each pending contexts, since the error is handled by batched `pendingResult`
229
- for (const {
230
- pendingContexts
231
- } of this.pendingStack) {
232
- for (const p of pendingContexts.values()) {
233
- p.catch(() => {
234
- /* No-op */
235
- });
236
- }
237
- }
238
240
  for (const {
239
241
  pendingResult
240
242
  } of this.pendingStack) {
@@ -381,13 +383,25 @@ class DataStore {
381
383
  }
382
384
  return true;
383
385
  }
386
+
387
+ /**
388
+ * For sub-routes to be incrementally rendered,
389
+ * dispose their data and pending tasks.
390
+ */
384
391
  disposeDataInRoutes(routes) {
392
+ //
385
393
  for (const route of routes) {
386
394
  const names = this.routeMap.get(route);
387
395
  if (names !== undefined) {
388
396
  for (const name of names) {
389
397
  this.data.delete(name);
390
398
  }
399
+ this.routeMap.delete(route);
400
+ }
401
+ const stack = this.routeStackMap.get(route);
402
+ if (stack !== undefined) {
403
+ (0, _lodash.pull)(this.pendingStack, ...stack);
404
+ this.routeStackMap.delete(route);
391
405
  }
392
406
  }
393
407
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["_general","require","_storyboard","_eventTarget","_interopRequireDefault","_bindListeners","_checkIf","_computeRealValue","_resolveData","_resolveDataStore","_handleHttpError","_computeRealProperties","_Runtime","_realTimeDataInspect","_isStrictMode","supportContextResolveTriggerBrickLifeCycle","DataStore","type","data","Map","changeEventType","pendingStack","hostBrick","stateStoreId","batchUpdate","batchUpdateContextsNames","rendererContext","routeMap","WeakMap","constructor","getAllValues","Object","fromEntries","entries","map","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","realTimeDataInspectRoot","tplStateStoreId","callRealTimeDataInspectHooks","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","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","_internalApiGetRenderId","load","cache","then","val","finishLoad","err","handleHttpError","callbackFactory","eventCallbackFactory","isObject","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","resolveDataStore","dataConf","isStrictMode","onChange","dataName","listener","_this$data$get2","addEventListener","removeEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","has","asyncMounted","asyncCheckIf","expose","computePropertyValue","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","hasOwnProperty","track","strictCollectMemberUsage","if","size","resolveConf","transform","options","_this$rendererContext2","resolveData","lazy","asyncComputeRealValue","newData","EventTarget","trigger","_this$rendererContext3","registerArbitraryLifeCycle","listenerFactory","dep","batchAddListener","checkIf","computeRealValue","e","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event","exports"],"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":["_general","require","_storyboard","_eventTarget","_interopRequireDefault","_lodash","_bindListeners","_checkIf","_computeRealValue","_resolveData","_resolveDataStore","_handleHttpError","_computeRealProperties","_Runtime","_realTimeDataInspect","_isStrictMode","supportContextResolveTriggerBrickLifeCycle","DataStore","type","data","Map","changeEventType","pendingStack","hostBrick","stateStoreId","batchUpdate","batchUpdateContextsNames","rendererContext","routeMap","WeakMap","routeStackMap","constructor","getAllValues","Object","fromEntries","entries","map","name","value","getValue","_this$data$get","get","notifyRealTimeDataChange","realTimeDataInspectRoot","tplStateStoreId","callRealTimeDataInspectHooks","changeType","detail","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","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","_internalApiGetRenderId","load","cache","then","val","finishLoad","err","handleHttpError","callbackFactory","eventCallbackFactory","isObject","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","resolveDataStore","dataConf","isStrictMode","route","stack","add","set","onChange","dataName","listener","_this$data$get2","addEventListener","removeEventListener","waitFor","dataNames","pendingContexts","all","ctx","p","waitForAll","pendingResult","mountAsyncData","_this$routeMap$get","async","has","asyncMounted","asyncCheckIf","expose","computePropertyValue","trackConditionalResolve","resolvePolicy","undefined","hasFallbackValue","hasOwnProperty","track","strictCollectMemberUsage","if","size","resolveConf","transform","options","_this$rendererContext2","resolveData","lazy","asyncComputeRealValue","newData","EventTarget","trigger","_this$rendererContext3","registerArbitraryLifeCycle","listenerFactory","dep","batchAddListener","checkIf","computeRealValue","e","names","disposeDataInRoutes","routes","delete","pull","contextConf","event","exports"],"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":[]}
@@ -17,12 +17,17 @@ function resolveDataStore(contextConfs, resolveContext, keyword = "CTX", strict)
17
17
  const hasNonStaticUsage = Array.from(dependencyMap.values()).some(stats => stats.hasNonStaticUsage);
18
18
  const processed = new WeakSet();
19
19
  const deferredContexts = new Map();
20
- const pendingContexts = new Map([...new Set(contextConfs.map(contextConf => contextConf.name))].map(contextName => [contextName, new Promise((resolve, reject) => {
21
- deferredContexts.set(contextName, {
22
- resolve,
23
- reject
20
+ const pendingContexts = new Map([...new Set(contextConfs.map(contextConf => contextConf.name))].map(contextName => {
21
+ const promise = new Promise((resolve, reject) => {
22
+ deferredContexts.set(contextName, {
23
+ resolve,
24
+ reject
25
+ });
24
26
  });
25
- })]));
27
+ // The pending context will be caught by the renderer.
28
+ promise.catch(() => {});
29
+ return [contextName, promise];
30
+ }));
26
31
  const wrapResolve = async contextConf => {
27
32
  processed.add(contextConf);
28
33
  const resolved = await resolveContext(contextConf);
@@ -80,6 +85,8 @@ function resolveDataStore(contextConfs, resolveContext, keyword = "CTX", strict)
80
85
  }
81
86
  throw error;
82
87
  });
88
+ // The pending result will be caught by the renderer.
89
+ pendingResult.catch(() => {});
83
90
  return {
84
91
  pendingResult,
85
92
  pendingContexts
@@ -1 +1 @@
1
- {"version":3,"file":"resolveDataStore.js","names":["_storyboard","require","resolveDataStore","contextConfs","resolveContext","keyword","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","collectMemberUsage","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":["_storyboard","require","resolveDataStore","contextConfs","resolveContext","keyword","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","collectMemberUsage","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":[]}