@next-core/runtime 1.24.2 → 1.24.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Runtime.js","names":["i18n","initializeI18n","loadBricksImperatively","deepFreeze","isObject","moment","createHistory","matchStoryboard","Router","NS","locales","loadNotificationService","loadDialogService","injectedBrickPackages","hasInstalledApp","listenDevtoolsEagerly","getV2RuntimeFromDll","runtime","bootstrapData","router","hooks","createRuntime","options","Error","locale","language","on","Runtime","getRuntimeV3","getRuntimeV2Factory","v2Kit","getRuntimeV2","Proxy","getRuntime","get","key","arguments","length","undefined","Reflect","_initialized","WeakMap","_bootstrapped","constructor","_classPrivateFieldInitSpec","writable","value","initialize","data","_classPrivateFieldGet","_classPrivateFieldSet","normalizeBootstrapData","notification","dialog","getPreseBricks","loadBricks","bootstrap","_this","_asyncToGenerator","storyboards","getRecentApps","_router$getRecentApps","_router","getCurrentApp","_router2","currentApp","appId","matchVersion","getFeatureFlags","_bootstrapData","_router3","_objectSpread","settings","featureFlags","config","getMiscSettings","_bootstrapData2","_router4","misc","getBrandSettings","_bootstrapData3","base_title","brand","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData$deskto","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData$siteSo","_bootstrapData6","siteSort","toggleLaunchpadEffect","open","document","body","classList","toggle","applyPageTitle","pageTitle","baseTitle","title","concat","getNavConfig","_router5","bricks","getBrickPackages","_bootstrapData$settin","_bootstrapData7","presetBricks","Array","isArray","_loop","app","ns","id","Object","entries","forEach","_ref","lang","resources","addResourceBundle","localeName","getFixedT","name","keys","removeResourceBundle","brickPackages","_ref2","_ref3","_bootstrapData$brickP","_bootstrapData8","window","STANDALONE_BRICK_PACKAGES","_internalApiGetRenderId","_router6","getRenderId","_internalApiMatchStoryboard","pathname","_bootstrapData$storyb","_bootstrapData9","_internalApiGetRuntimeContext","_router7","getRuntimeContext","_internalApiGetStoryboardInBootstrapData","_bootstrapData10","find","storyboard","_internalApiGetAppInBootstrapData","_internalApiGetStoryb","_test_only_setBootstrapData","process","env","NODE_ENV"],"sources":["../../../src/internal/Runtime.ts"],"sourcesContent":["import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): void;\n onClose(listener: () => void): void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = this.getPreseBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n document.title = pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle;\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n\n getPreseBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n };\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (Array.isArray(data.storyboards)) {\n for (const { app } of data.storyboards) {\n if (app.locales) {\n // Prefix to avoid conflict between brick package's i18n namespace.\n const ns = `tmp/${app.id}`;\n // Support any languages in `app.locales`.\n Object.entries(app.locales).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, ns, resources);\n });\n // Use `app.name` as the fallback `app.localeName`.\n app.localeName = i18n.getFixedT(null, ns)(\"name\", app.name) as string;\n // Remove the temporary i18n resource bundles.\n Object.keys(app.locales).forEach((lang) => {\n i18n.removeResourceBundle(lang, ns);\n });\n } else {\n app.localeName = app.name;\n }\n }\n }\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nexport function getBrickPackages() {\n return (\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[]) ??\n []\n );\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Runtime.js","names":["i18n","initializeI18n","loadBricksImperatively","deepFreeze","isObject","moment","createHistory","matchStoryboard","Router","NS","locales","loadNotificationService","loadDialogService","injectedBrickPackages","hasInstalledApp","listenDevtoolsEagerly","getV2RuntimeFromDll","runtime","bootstrapData","router","hooks","createRuntime","options","Error","locale","language","on","Runtime","getRuntimeV3","getRuntimeV2Factory","v2Kit","getRuntimeV2","Proxy","getRuntime","get","key","arguments","length","undefined","Reflect","_initialized","WeakMap","_bootstrapped","_getPresetBricks","WeakSet","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","writable","value","initialize","data","_classPrivateFieldGet","_classPrivateFieldSet","normalizeBootstrapData","notification","dialog","_classPrivateMethodGet","_getPresetBricks2","call","loadBricks","bootstrap","_this","_asyncToGenerator","storyboards","getRecentApps","_router$getRecentApps","_router","getCurrentApp","_router2","currentApp","appId","matchVersion","getFeatureFlags","_bootstrapData","_router3","_objectSpread","settings","featureFlags","config","getMiscSettings","_bootstrapData2","_router4","misc","getBrandSettings","_bootstrapData3","base_title","brand","getLaunchpadSettings","_bootstrapData4","columns","rows","launchpad","getDesktops","_bootstrapData$deskto","_bootstrapData5","desktops","getLaunchpadSiteMap","_bootstrapData$siteSo","_bootstrapData6","siteSort","toggleLaunchpadEffect","open","document","body","classList","toggle","applyPageTitle","pageTitle","baseTitle","title","concat","getNavConfig","_router5","bricks","getBrickPackages","_bootstrapData$settin","_bootstrapData10","presetBricks","Array","isArray","_loop","app","ns","id","Object","entries","forEach","_ref","lang","resources","addResourceBundle","localeName","getFixedT","name","keys","removeResourceBundle","brickPackages","_ref2","_ref3","_bootstrapData$brickP","_bootstrapData7","window","STANDALONE_BRICK_PACKAGES","_internalApiGetRenderId","_router6","getRenderId","_internalApiMatchStoryboard","pathname","_bootstrapData$storyb","_bootstrapData8","_internalApiGetRuntimeContext","_router7","getRuntimeContext","_internalApiGetStoryboardInBootstrapData","_bootstrapData9","find","storyboard","_internalApiGetAppInBootstrapData","_internalApiGetStoryb","_test_only_setBootstrapData","process","env","NODE_ENV"],"sources":["../../../src/internal/Runtime.ts"],"sourcesContent":["import type {\n RuntimeStoryboard,\n BootstrapSettings,\n FeatureFlags,\n BootstrapData,\n Contract,\n Storyboard,\n BrickConf,\n RouteConf,\n ResolveConf,\n BrickPackage,\n} from \"@next-core/types\";\nimport { i18n, initializeI18n } from \"@next-core/i18n\";\nimport { loadBricksImperatively } from \"@next-core/loader\";\nimport { deepFreeze, isObject } from \"@next-core/utils/general\";\nimport type { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport moment from \"moment\";\nimport \"moment/locale/zh-cn.js\";\nimport { createHistory } from \"../history.js\";\nimport { matchStoryboard } from \"./matchStoryboard.js\";\nimport { Router } from \"./Router.js\";\nimport { NS, locales } from \"./i18n.js\";\nimport { loadNotificationService } from \"../Notification.js\";\nimport { loadDialogService } from \"../Dialog.js\";\nimport { injectedBrickPackages } from \"./injected.js\";\nimport { type AppForCheck, hasInstalledApp } from \"./hasInstalledApp.js\";\nimport type { RuntimeContext } from \"./interfaces.js\";\nimport { listenDevtoolsEagerly } from \"./devtools.js\";\nimport { getV2RuntimeFromDll } from \"../getV2RuntimeFromDll.js\";\n\nlet runtime: Runtime;\n\n// Allow inject bootstrap data in a runtime other than Brick Next.\nlet bootstrapData: BootstrapData | undefined;\nlet router: Router | undefined;\n\nexport interface RuntimeOptions {\n hooks?: RuntimeHooks;\n}\n\nexport interface ImagesFactory {\n get(name: string): string;\n}\n\nexport interface PageViewInfo {\n status: \"ok\" | \"failed\" | \"redirected\" | \"not-found\";\n path?: string;\n pageTitle?: string;\n}\n\nexport interface RuntimeHooks {\n auth?: {\n getAuth(): object;\n isLoggedIn(): boolean;\n authenticate?(...args: unknown[]): unknown;\n logout?(...args: unknown[]): unknown;\n };\n fulfilStoryboard?: (storyboard: RuntimeStoryboard) => Promise<void>;\n validatePermissions?: typeof PermissionApi_validatePermissions;\n checkPermissions?: {\n checkPermissions(...actions: string[]): boolean;\n preCheckPermissions(storyboard: Storyboard): Promise<void> | undefined;\n preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n ): Promise<void> | undefined;\n };\n checkInstalledApps?: {\n preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n ): void;\n waitForCheckingApps(appIds: string[]): Promise<void>;\n getCheckedApp(appId: string): AppForCheck | undefined;\n };\n flowApi?: {\n FLOW_API_PROVIDER: string;\n registerFlowApiProvider(): void;\n isFlowApiProvider(provider: string): boolean;\n getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string\n ): Promise<unknown[]>;\n collectContract(contracts: Contract[] | undefined): void;\n collectWidgetContract(contracts: Contract[] | undefined): void;\n clearCollectWidgetContract(): void;\n };\n menu?: {\n getMenuById(menuId: string): unknown;\n fetchMenuById(\n menuId: string,\n runtimeContext: RuntimeContext,\n runtimeHelpers: RuntimeHooksMenuHelpers\n ): Promise<unknown>;\n };\n images?: {\n imagesFactory(\n appId: string,\n isBuildPush?: boolean,\n version?: string\n ): ImagesFactory;\n widgetImagesFactory(\n widgetId: string,\n widgetVersion?: string\n ): ImagesFactory;\n };\n messageDispatcher?: {\n subscribe(...args: unknown[]): Promise<unknown>;\n unsubscribe(...args: unknown[]): Promise<unknown>;\n onMessage(channel: string, listener: (data: unknown) => void): void;\n onClose(listener: () => void): void;\n reset(): void;\n };\n pageView?: {\n create(): (info: PageViewInfo) => void;\n };\n}\n\nexport interface RuntimeHooksMenuHelpers {\n getStoryboardByAppId(appId: string): Storyboard | undefined;\n resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext\n ): Promise<unknown>;\n asyncComputeRealValue(\n value: unknown,\n runtimeContext: RuntimeContext,\n options?: { ignoreSymbols?: boolean; noInject?: boolean }\n ): Promise<unknown>;\n}\n\nexport let hooks: RuntimeHooks | undefined;\n\nexport function createRuntime(options?: RuntimeOptions) {\n if (runtime) {\n throw new Error(\"Cannot create multiple runtimes\");\n }\n listenDevtoolsEagerly();\n hooks = options?.hooks;\n initializeI18n(NS, locales);\n moment.locale(i18n.language);\n i18n.on(\"languageChanged\", () => {\n moment.locale(i18n.language);\n });\n createHistory();\n runtime = new Runtime();\n return runtime;\n}\n\nfunction getRuntimeV3() {\n return runtime;\n}\n\n// istanbul ignore next\nfunction getRuntimeV2Factory() {\n const v2Kit = getV2RuntimeFromDll();\n if (v2Kit) {\n return function getRuntimeV2() {\n return new Proxy(v2Kit.getRuntime(), {\n get(...args) {\n const key = args[1];\n switch (key) {\n case \"getCurrentApp\":\n case \"getRecentApps\":\n case \"hasInstalledApp\":\n case \"getDesktops\":\n case \"getLaunchpadSettings\":\n case \"getLaunchpadSiteMap\":\n case \"toggleLaunchpadEffect\":\n case \"applyPageTitle\":\n case \"getNavConfig\":\n case \"getFeatureFlags\":\n case \"getMiscSettings\":\n case \"getBrandSettings\":\n return Reflect.get(...args);\n }\n },\n }) as unknown as Runtime;\n };\n }\n}\n\n// istanbul ignore next\nexport const getRuntime = getRuntimeV2Factory() || getRuntimeV3;\n\nexport class Runtime {\n #initialized = false;\n #bootstrapped = false;\n\n initialize(data: BootstrapData) {\n if (this.#initialized) {\n throw new Error(\"The runtime cannot be initialized more than once\");\n }\n this.#initialized = true;\n normalizeBootstrapData(data);\n bootstrapData = data;\n const { notification, dialog } = this.#getPresetBricks();\n if (notification !== false) {\n loadNotificationService(\n notification ?? \"basic.show-notification\",\n this.loadBricks\n );\n }\n if (dialog !== false) {\n loadDialogService(dialog ?? \"basic.show-dialog\", this.loadBricks);\n }\n }\n\n async bootstrap(data?: BootstrapData) {\n if (data) {\n this.initialize(data);\n }\n if (this.#bootstrapped) {\n throw new Error(\"The runtime cannot be bootstrapped more than once\");\n }\n this.#bootstrapped = true;\n router = new Router(bootstrapData!.storyboards!);\n await router.bootstrap();\n }\n\n getRecentApps() {\n return router?.getRecentApps() ?? {};\n }\n\n getCurrentApp() {\n return router?.getRecentApps().currentApp;\n }\n\n hasInstalledApp(appId: string, matchVersion?: string): boolean {\n return hasInstalledApp(appId, matchVersion);\n }\n\n getFeatureFlags(): FeatureFlags {\n return {\n ...bootstrapData?.settings?.featureFlags,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.featureFlags,\n \"migrate-to-brick-next-v3\": true,\n };\n }\n\n getMiscSettings() {\n return {\n ...bootstrapData?.settings?.misc,\n ...(\n router?.getRecentApps().currentApp?.config\n ?.settings as BootstrapSettings\n )?.misc,\n };\n }\n\n getBrandSettings(): Record<string, string> {\n return {\n base_title: \"DevOps 管理专家\",\n ...(bootstrapData?.settings?.brand as Record<string, string>),\n };\n }\n\n getLaunchpadSettings() {\n return {\n columns: 7,\n rows: 4,\n ...bootstrapData?.settings?.launchpad,\n };\n }\n\n getDesktops(): unknown[] {\n return bootstrapData?.desktops ?? [];\n }\n\n getLaunchpadSiteMap(): unknown[] {\n return bootstrapData?.siteSort ?? [];\n }\n\n toggleLaunchpadEffect(open: boolean): void {\n document.body.classList.toggle(\"launchpad-open\", open);\n }\n\n applyPageTitle(pageTitle: string): void {\n const baseTitle = this.getBrandSettings().base_title;\n document.title = pageTitle ? `${pageTitle} - ${baseTitle}` : baseTitle;\n }\n\n getNavConfig() {\n return router?.getNavConfig();\n }\n\n loadBricks(bricks: string[] | Set<string>) {\n return loadBricksImperatively(bricks, getBrickPackages());\n }\n\n #getPresetBricks() {\n return (bootstrapData?.settings?.presetBricks ?? {}) as {\n notification?: string | false;\n dialog?: string | false;\n };\n }\n}\n\nfunction normalizeBootstrapData(data: BootstrapData) {\n if (Array.isArray(data.storyboards)) {\n for (const { app } of data.storyboards) {\n if (app.locales) {\n // Prefix to avoid conflict between brick package's i18n namespace.\n const ns = `tmp/${app.id}`;\n // Support any languages in `app.locales`.\n Object.entries(app.locales).forEach(([lang, resources]) => {\n i18n.addResourceBundle(lang, ns, resources);\n });\n // Use `app.name` as the fallback `app.localeName`.\n app.localeName = i18n.getFixedT(null, ns)(\"name\", app.name) as string;\n // Remove the temporary i18n resource bundles.\n Object.keys(app.locales).forEach((lang) => {\n i18n.removeResourceBundle(lang, ns);\n });\n } else {\n app.localeName = app.name;\n }\n }\n }\n if (isObject(data.settings)) {\n deepFreeze(data.settings);\n }\n if (data.brickPackages) {\n deepFreeze(data.brickPackages);\n }\n}\n\nexport function getBrickPackages() {\n return (\n bootstrapData?.brickPackages ??\n injectedBrickPackages ??\n (window.STANDALONE_BRICK_PACKAGES as BrickPackage[]) ??\n []\n );\n}\n\nexport function _internalApiGetRenderId(): string | undefined {\n return router?.getRenderId();\n}\n\nexport function _internalApiMatchStoryboard(\n pathname: string\n): RuntimeStoryboard | undefined {\n return matchStoryboard(bootstrapData?.storyboards ?? [], pathname);\n}\n\nexport function _internalApiGetRuntimeContext() {\n return router?.getRuntimeContext();\n}\n\nexport function _internalApiGetStoryboardInBootstrapData(appId: string) {\n return bootstrapData?.storyboards?.find(\n (storyboard) => storyboard.app.id === appId\n );\n}\n\nexport function _internalApiGetAppInBootstrapData(appId: string) {\n return _internalApiGetStoryboardInBootstrapData(appId)?.app;\n}\n\nexport let _test_only_setBootstrapData: (data: BootstrapData) => void;\n\n// istanbul ignore next\nif (process.env.NODE_ENV === \"test\") {\n _test_only_setBootstrapData = (data) => {\n bootstrapData = data as BootstrapData;\n };\n}\n"],"mappings":"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"}
@@ -11,6 +11,7 @@ import { resolveData } from "./resolveData.js";
11
11
  import { resolveDataStore } from "./resolveDataStore.js";
12
12
  import { handleHttpError } from "../../handleHttpError.js";
13
13
  import { computePropertyValue } from "../compute/computeRealProperties.js";
14
+ import { _internalApiGetRenderId } from "../Runtime.js";
14
15
  var supportContextResolveTriggerBrickLifeCycle = ["onBeforePageLoad", "onPageLoad", "onBeforePageLeave", "onPageLeave", "onAnchorLoad", "onAnchorUnload"];
15
16
  export class DataStore {
16
17
  // 把 `rendererContext` 放在参数列表的最后,并作为可选,以减少测试文件的调整
@@ -107,6 +108,15 @@ export class DataStore {
107
108
  promise = item.loading;
108
109
  }
109
110
  }
111
+ var shouldDismiss = error => {
112
+ var _this$rendererContext;
113
+ // If render twice immediately, flow API contracts maybe cleared before
114
+ // the second rendering, while the page load handlers of the first
115
+ // rendering can't be cancelled, which throws `FlowApiNotFoundError`.
116
+ // So we ignore error reporting for this case.
117
+ var renderId;
118
+ return (error === null || error === void 0 ? void 0 : error.name) === "FlowApiNotFoundError" && !!(renderId = (_this$rendererContext = this.rendererContext) === null || _this$rendererContext === void 0 ? void 0 : _this$rendererContext.renderId) && renderId !== _internalApiGetRenderId();
119
+ };
110
120
  if (!promise) {
111
121
  promise = item.loading = item.load(_objectSpread({
112
122
  cache: method === "load" ? "default" : "reload"
@@ -120,7 +130,7 @@ export class DataStore {
120
130
  }));
121
131
  }, err => {
122
132
  // Let users override error handling.
123
- if (!(callback !== null && callback !== void 0 && callback.error)) {
133
+ if (!shouldDismiss(err) && !(callback !== null && callback !== void 0 && callback.error)) {
124
134
  handleHttpError(err);
125
135
  }
126
136
  });
@@ -133,7 +143,9 @@ export class DataStore {
133
143
  });
134
144
  callbackFactory("finally")();
135
145
  }, err => {
136
- callbackFactory("error")(err);
146
+ if (!shouldDismiss(err) && callback.error) {
147
+ callbackFactory("error")(err);
148
+ }
137
149
  callbackFactory("finally")();
138
150
  });
139
151
  }
@@ -251,7 +263,10 @@ export class DataStore {
251
263
  if (yield asyncCheckIf(dataConf.resolve, runtimeContext)) {
252
264
  load = /*#__PURE__*/function () {
253
265
  var _ref2 = _asyncToGenerator(function* (options) {
254
- return (yield resolveData(resolveConf, runtimeContext, options)).value;
266
+ var _this3$rendererContex;
267
+ return (yield resolveData(resolveConf, runtimeContext, _objectSpread(_objectSpread({}, options), {}, {
268
+ renderId: (_this3$rendererContex = _this3.rendererContext) === null || _this3$rendererContex === void 0 ? void 0 : _this3$rendererContex.renderId
269
+ }))).value;
255
270
  });
256
271
  return function load(_x) {
257
272
  return _ref2.apply(this, arguments);
@@ -291,8 +306,8 @@ export class DataStore {
291
306
  trigger
292
307
  } = dataConf.resolve;
293
308
  if (trigger && supportContextResolveTriggerBrickLifeCycle.includes(trigger)) {
294
- var _this3$rendererContex;
295
- (_this3$rendererContex = _this3.rendererContext) === null || _this3$rendererContex === void 0 || _this3$rendererContex.registerArbitraryLifeCycle(trigger, () => {
309
+ var _this3$rendererContex2;
310
+ (_this3$rendererContex2 = _this3.rendererContext) === null || _this3$rendererContex2 === void 0 || _this3$rendererContex2.registerArbitraryLifeCycle(trigger, () => {
296
311
  _this3.updateValue(dataConf.name, undefined, "load");
297
312
  });
298
313
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","eventCallbackFactory","listenerFactory","asyncCheckIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","detail","callback","callbackRuntimeContext","concat","load","promise","loaded","Promise","resolve","loading","_objectSpread","cache","then","val","err","error","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","waitFor","dataNames","_this","_asyncToGenerator","_loop","pendingContexts","all","ctx","p","waitForAll","_this2","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","routeMap","has","asyncMounted","_this3","expose","resolvePolicy","undefined","resolveConf","transform","_ref2","options","_x","apply","arguments","lazy","newData","trigger","_this3$rendererContex","registerArbitraryLifeCycle","track","dep","batchAddListener","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf } 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\";\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 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 public batchUpdate = false;\n public 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 ) {\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 }\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 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.load) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which has no 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 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 item.loaded = true;\n item.value = val;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n },\n (err) => {\n // Let users override error handling.\n if (!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 callbackFactory(\"error\")(err);\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 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 );\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): void {\n this.data\n .get(dataName)\n ?.eventTarget.addEventListener(this.changeEventType, listener);\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 item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\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 resolvePolicy: \"eager\" | \"lazy\" | \"async\" = \"eager\";\n if (value === undefined) {\n if (dataConf.resolve) {\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n if (await asyncCheckIf(dataConf.resolve, runtimeContext)) {\n load = async (options) =>\n (\n (await resolveData(resolveConf, runtimeContext, options)) as {\n value: unknown;\n }\n ).value;\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 (!hasOwnProperty(dataConf, \"value\")) {\n return false;\n }\n }\n if (\n (!load || 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 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 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 load ? dataConf.resolve : 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 if (load) {\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 if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\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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"}
1
+ {"version":3,"file":"DataStore.js","names":["hasOwnProperty","isObject","strictCollectMemberUsage","EventTarget","eventCallbackFactory","listenerFactory","asyncCheckIf","asyncComputeRealValue","computeRealValue","resolveData","resolveDataStore","handleHttpError","computePropertyValue","_internalApiGetRenderId","supportContextResolveTriggerBrickLifeCycle","DataStore","constructor","type","hostBrick","rendererContext","_defineProperty","Map","WeakMap","changeEventType","getAllValues","Object","fromEntries","data","entries","map","_ref","name","value","getValue","_this$data$get","get","getAffectListByContext","affectNames","forEach","key","deps","isInDeps","some","item","includes","push","shift","Set","updateValues","values","method","argsFactory","batchUpdate","batchUpdateContextsNames","length","Error","updateContexts","affectContexts","affectDepsContextNames","arg","updateContextItem","updateValue","filter","affectContextItem","triggerEvent","contexts","_context$eventTarget","context","eventTarget","dispatchEvent","CustomEvent","detail","callback","callbackRuntimeContext","concat","load","promise","loaded","Promise","resolve","loading","shouldDismiss","error","_this$rendererContext","renderId","_objectSpread","cache","then","val","err","callbackFactory","assign","console","warn","define","dataConfs","runtimeContext","asyncHostPropertyEntries","routePath","Array","isArray","pending","dataConf","pendingStack","onChange","dataName","listener","_this$data$get2","addEventListener","waitFor","dataNames","_this","_asyncToGenerator","_loop","pendingContexts","all","ctx","p","waitForAll","_this2","catch","pendingResult","mountAsyncData","route","_this$routeMap$get","async","routeMap","has","asyncMounted","_this3","expose","resolvePolicy","undefined","resolveConf","transform","_ref2","options","_this3$rendererContex","_x","apply","arguments","lazy","newData","trigger","_this3$rendererContex2","registerArbitraryLifeCycle","track","dep","batchAddListener","set","names","add","disposeDataInRoutes","routes","delete","contextConf","event"],"sources":["../../../../src/internal/data/DataStore.ts"],"sourcesContent":["import type {\n BatchUpdateContextItem,\n BrickEventHandlerCallback,\n ContextConf,\n ContextResolveTriggerBrickLifeCycle,\n RouteConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport EventTarget from \"@ungap/event-target\";\nimport { eventCallbackFactory, listenerFactory } from \"../bindListeners.js\";\nimport { asyncCheckIf } 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\";\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 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 public batchUpdate = false;\n public 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 ) {\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 }\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 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.load) {\n throw new Error(\n `You can not ${method} \"${this.type}.${name}\" which has no 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 item.loaded = true;\n item.value = val;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: item.value,\n })\n );\n },\n (err) => {\n // Let users override error handling.\n if (!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 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 );\n this.pendingStack.push(pending);\n }\n }\n\n onChange(dataName: string, listener: EventListener): void {\n this.data\n .get(dataName)\n ?.eventTarget.addEventListener(this.changeEventType, listener);\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 item.loaded = true;\n item.value = value;\n item.eventTarget.dispatchEvent(\n new CustomEvent(this.changeEventType, {\n detail: value,\n })\n );\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 resolvePolicy: \"eager\" | \"lazy\" | \"async\" = \"eager\";\n if (value === undefined) {\n if (dataConf.resolve) {\n const resolveConf = {\n transform: \"value\",\n ...dataConf.resolve,\n };\n if (await asyncCheckIf(dataConf.resolve, runtimeContext)) {\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 // `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 (!hasOwnProperty(dataConf, \"value\")) {\n return false;\n }\n }\n if (\n (!load || 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 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 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 load ? dataConf.resolve : 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 if (load) {\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 if (this.data.has(dataConf.name)) {\n throw new Error(\n `${this.type} '${dataConf.name}' has already been declared`\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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"}
@@ -2,7 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  import { asyncComputeRealValue } from "../compute/computeRealValue.js";
4
4
  import { getProviderBrick } from "./getProviderBrick.js";
5
- import { hooks } from "../Runtime.js";
5
+ import { _internalApiGetRenderId, hooks } from "../Runtime.js";
6
6
  import { markAsComputed } from "../compute/markAsComputed.js";
7
7
  import { get } from "lodash";
8
8
  import { isStrictMode, warnAboutStrictMode } from "../../isStrictMode.js";
@@ -35,7 +35,12 @@ function _resolveData() {
35
35
  }
36
36
  }
37
37
  var [providerBrick, actualArgs] = yield Promise.all([getProviderBrick(useProvider), asyncComputeRealValue(args, runtimeContext)]);
38
- var promise = resolveByProvider(providerBrick, useProvider, method, actualArgs, options, args);
38
+
39
+ // `clearResolveCache` maybe cleared during the above promise being
40
+ // fulfilled, so we manually mark it as stale for this case.
41
+ var renderId = options === null || options === void 0 ? void 0 : options.renderId;
42
+ var stale = !!renderId && renderId !== _internalApiGetRenderId();
43
+ var promise = resolveByProvider(providerBrick, useProvider, method, actualArgs, options, args, stale);
39
44
  var {
40
45
  transform
41
46
  } = resolveConf;
@@ -72,11 +77,11 @@ function _resolveData() {
72
77
  export function clearResolveCache() {
73
78
  cache.clear();
74
79
  }
75
- export function resolveByProvider(_x4, _x5, _x6, _x7, _x8, _x9) {
80
+ export function resolveByProvider(_x4, _x5, _x6, _x7, _x8, _x9, _x10) {
76
81
  return _resolveByProvider.apply(this, arguments);
77
82
  }
78
83
  function _resolveByProvider() {
79
- _resolveByProvider = _asyncToGenerator(function* (brick, useProvider, method, args, options, originalArgs) {
84
+ _resolveByProvider = _asyncToGenerator(function* (brick, useProvider, method, args, options, originalArgs, stale) {
80
85
  var cacheKey;
81
86
  try {
82
87
  // `args` may contain circular references, which makes
@@ -106,7 +111,9 @@ function _resolveByProvider() {
106
111
  var finalArgs = hooks !== null && hooks !== void 0 && (_hooks$flowApi = hooks.flowApi) !== null && _hooks$flowApi !== void 0 && _hooks$flowApi.isFlowApiProvider(useProvider) ? yield hooks.flowApi.getArgsOfFlowApi(useProvider, args, method) : args;
107
112
  return brick.resolve(...finalArgs);
108
113
  })();
109
- cache.set(cacheKey, promise);
114
+ if (!stale) {
115
+ cache.set(cacheKey, promise);
116
+ }
110
117
  }
111
118
  return promise;
112
119
  });
@@ -1 +1 @@
1
- {"version":3,"file":"resolveData.js","names":["asyncComputeRealValue","getProviderBrick","hooks","markAsComputed","get","isStrictMode","warnAboutStrictMode","cache","Map","resolveData","_x","_x2","_x3","_resolveData","apply","arguments","_asyncToGenerator","resolveConf","runtimeContext","options","useProvider","method","args","onReject","provider","legacyProvider","field","legacyField","Error","concat","hasLegacyField","undefined","strict","providerBrick","actualArgs","Promise","all","promise","resolveByProvider","transform","data","value","error","isHandleRejectByTransform","_objectSpread","clearResolveCache","clear","_x4","_x5","_x6","_x7","_x8","_x9","_resolveByProvider","brick","originalArgs","cacheKey","JSON","stringify","e","_hooks$flowApi","finalArgs","flowApi","isFlowApiProvider","getArgsOfFlowApi","resolve","set"],"sources":["../../../../src/internal/data/resolveData.ts"],"sourcesContent":["import type {\n HandleReject,\n HandleRejectByTransform,\n ResolveConf,\n} from \"@next-core/types\";\nimport { asyncComputeRealValue } from \"../compute/computeRealValue.js\";\nimport { getProviderBrick } from \"./getProviderBrick.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { hooks } from \"../Runtime.js\";\nimport { markAsComputed } from \"../compute/markAsComputed.js\";\nimport { get } from \"lodash\";\nimport { isStrictMode, warnAboutStrictMode } from \"../../isStrictMode.js\";\n\nconst cache = new Map<string, Promise<unknown>>();\n\nexport interface ResolveOptions {\n /**\n * Cache mode of resolve.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/Request/cache\n *\n * - `default`: Looks for a matching cache.\n * - `reload`: Without looking for a matching cache.\n */\n cache?: \"default\" | \"reload\";\n}\n\nexport async function resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext,\n options?: ResolveOptions\n) {\n const { useProvider, method = \"resolve\", args = [], onReject } = resolveConf;\n\n const { provider: legacyProvider, field: legacyField } = resolveConf as {\n provider?: string;\n field?: string | string[];\n };\n if (legacyProvider && !useProvider) {\n throw new Error(\n `You're using \"provider: ${legacyProvider}\" which is dropped in v3, please use \"useProvider\" instead`\n );\n }\n\n const hasLegacyField = legacyField !== null && legacyField !== undefined;\n if (hasLegacyField) {\n const strict = isStrictMode();\n warnAboutStrictMode(strict, \"`resolve.field`\");\n // istanbul ignore next\n if (strict) {\n throw new Error(\"Using deprecated `resolve.field`\");\n }\n }\n\n const [providerBrick, actualArgs] = await Promise.all([\n getProviderBrick(useProvider) as unknown as Promise<\n Record<string, Function>\n >,\n asyncComputeRealValue(args, runtimeContext) as Promise<unknown[]>,\n ]);\n\n const promise = resolveByProvider(\n providerBrick,\n useProvider,\n method,\n actualArgs,\n options,\n args\n );\n\n let { transform } = resolveConf;\n let data: unknown;\n\n try {\n const value = await promise;\n data = hasLegacyField ? get(value, legacyField) : value;\n // The fetched data and its inner objects should never be *injected* again.\n markAsComputed(data);\n } catch (error) {\n if (isHandleRejectByTransform(onReject)) {\n transform = onReject.transform;\n data = error;\n } else {\n throw error;\n }\n }\n\n if (!transform) {\n return data;\n }\n\n // Keep backward compatibility of string transform.\n if (typeof transform === \"string\") {\n return { [transform]: data };\n }\n\n return asyncComputeRealValue(transform, { ...runtimeContext, data });\n}\n\nexport function clearResolveCache() {\n cache.clear();\n}\n\nexport async function resolveByProvider(\n brick: Record<string, Function>,\n useProvider: string,\n method: string,\n args: unknown[],\n options?: ResolveOptions,\n originalArgs?: unknown[]\n) {\n let cacheKey: string;\n try {\n // `args` may contain circular references, which makes\n // JSON stringify failed, thus we fallback to original args.\n cacheKey = JSON.stringify({\n useProvider,\n method,\n args,\n });\n } catch (e) {\n if (!originalArgs) {\n throw e;\n }\n cacheKey = JSON.stringify({\n useProvider,\n method,\n originalArgs,\n });\n }\n\n let promise: Promise<unknown> | undefined;\n if (options?.cache !== \"reload\") {\n promise = cache.get(cacheKey);\n }\n if (!promise) {\n promise = (async () => {\n const finalArgs = hooks?.flowApi?.isFlowApiProvider(useProvider)\n ? await hooks.flowApi.getArgsOfFlowApi(useProvider, args, method)\n : args;\n return brick.resolve(...finalArgs);\n })();\n\n cache.set(cacheKey, promise);\n }\n\n return promise;\n}\n\nfunction isHandleRejectByTransform(\n onReject: HandleReject | undefined\n): onReject is HandleRejectByTransform {\n return !!(onReject as HandleRejectByTransform)?.transform;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"resolveData.js","names":["asyncComputeRealValue","getProviderBrick","_internalApiGetRenderId","hooks","markAsComputed","get","isStrictMode","warnAboutStrictMode","cache","Map","resolveData","_x","_x2","_x3","_resolveData","apply","arguments","_asyncToGenerator","resolveConf","runtimeContext","options","useProvider","method","args","onReject","provider","legacyProvider","field","legacyField","Error","concat","hasLegacyField","undefined","strict","providerBrick","actualArgs","Promise","all","renderId","stale","promise","resolveByProvider","transform","data","value","error","isHandleRejectByTransform","_objectSpread","clearResolveCache","clear","_x4","_x5","_x6","_x7","_x8","_x9","_x10","_resolveByProvider","brick","originalArgs","cacheKey","JSON","stringify","e","_hooks$flowApi","finalArgs","flowApi","isFlowApiProvider","getArgsOfFlowApi","resolve","set"],"sources":["../../../../src/internal/data/resolveData.ts"],"sourcesContent":["import type {\n HandleReject,\n HandleRejectByTransform,\n ResolveConf,\n} from \"@next-core/types\";\nimport { asyncComputeRealValue } from \"../compute/computeRealValue.js\";\nimport { getProviderBrick } from \"./getProviderBrick.js\";\nimport type { RuntimeContext } from \"../interfaces.js\";\nimport { _internalApiGetRenderId, hooks } from \"../Runtime.js\";\nimport { markAsComputed } from \"../compute/markAsComputed.js\";\nimport { get } from \"lodash\";\nimport { isStrictMode, warnAboutStrictMode } from \"../../isStrictMode.js\";\n\nconst cache = new Map<string, Promise<unknown>>();\n\nexport interface ResolveOptions {\n /**\n * Cache mode of resolve.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/Request/cache\n *\n * - `default`: Looks for a matching cache.\n * - `reload`: Without looking for a matching cache.\n */\n cache?: \"default\" | \"reload\";\n renderId?: string;\n}\n\nexport async function resolveData(\n resolveConf: ResolveConf,\n runtimeContext: RuntimeContext,\n options?: ResolveOptions\n) {\n const { useProvider, method = \"resolve\", args = [], onReject } = resolveConf;\n\n const { provider: legacyProvider, field: legacyField } = resolveConf as {\n provider?: string;\n field?: string | string[];\n };\n if (legacyProvider && !useProvider) {\n throw new Error(\n `You're using \"provider: ${legacyProvider}\" which is dropped in v3, please use \"useProvider\" instead`\n );\n }\n\n const hasLegacyField = legacyField !== null && legacyField !== undefined;\n if (hasLegacyField) {\n const strict = isStrictMode();\n warnAboutStrictMode(strict, \"`resolve.field`\");\n // istanbul ignore next\n if (strict) {\n throw new Error(\"Using deprecated `resolve.field`\");\n }\n }\n\n const [providerBrick, actualArgs] = await Promise.all([\n getProviderBrick(useProvider) as unknown as Promise<\n Record<string, Function>\n >,\n asyncComputeRealValue(args, runtimeContext) as Promise<unknown[]>,\n ]);\n\n // `clearResolveCache` maybe cleared during the above promise being\n // fulfilled, so we manually mark it as stale for this case.\n const renderId = options?.renderId;\n const stale = !!renderId && renderId !== _internalApiGetRenderId();\n\n const promise = resolveByProvider(\n providerBrick,\n useProvider,\n method,\n actualArgs,\n options,\n args,\n stale\n );\n\n let { transform } = resolveConf;\n let data: unknown;\n\n try {\n const value = await promise;\n data = hasLegacyField ? get(value, legacyField) : value;\n // The fetched data and its inner objects should never be *injected* again.\n markAsComputed(data);\n } catch (error) {\n if (isHandleRejectByTransform(onReject)) {\n transform = onReject.transform;\n data = error;\n } else {\n throw error;\n }\n }\n\n if (!transform) {\n return data;\n }\n\n // Keep backward compatibility of string transform.\n if (typeof transform === \"string\") {\n return { [transform]: data };\n }\n\n return asyncComputeRealValue(transform, { ...runtimeContext, data });\n}\n\nexport function clearResolveCache() {\n cache.clear();\n}\n\nexport async function resolveByProvider(\n brick: Record<string, Function>,\n useProvider: string,\n method: string,\n args: unknown[],\n options?: ResolveOptions,\n originalArgs?: unknown[],\n stale?: boolean\n) {\n let cacheKey: string;\n try {\n // `args` may contain circular references, which makes\n // JSON stringify failed, thus we fallback to original args.\n cacheKey = JSON.stringify({\n useProvider,\n method,\n args,\n });\n } catch (e) {\n if (!originalArgs) {\n throw e;\n }\n cacheKey = JSON.stringify({\n useProvider,\n method,\n originalArgs,\n });\n }\n\n let promise: Promise<unknown> | undefined;\n if (options?.cache !== \"reload\") {\n promise = cache.get(cacheKey);\n }\n if (!promise) {\n promise = (async () => {\n const finalArgs = hooks?.flowApi?.isFlowApiProvider(useProvider)\n ? await hooks.flowApi.getArgsOfFlowApi(useProvider, args, method)\n : args;\n return brick.resolve(...finalArgs);\n })();\n\n if (!stale) {\n cache.set(cacheKey, promise);\n }\n }\n\n return promise;\n}\n\nfunction isHandleRejectByTransform(\n onReject: HandleReject | undefined\n): onReject is HandleRejectByTransform {\n return !!(onReject as HandleRejectByTransform)?.transform;\n}\n"],"mappings":"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"}
@@ -7,6 +7,7 @@ type LocationChangeCallback = (location: Location<NextHistoryState>) => Promise<
7
7
  export interface RendererContextOptions {
8
8
  unknownBricks?: "silent" | "throw";
9
9
  routeHelper?: RouteHelper;
10
+ renderId?: string;
10
11
  }
11
12
  export interface RouteHelper {
12
13
  bailout: (output: RenderOutput) => true | undefined;
@@ -24,6 +25,7 @@ export declare class RendererContext {
24
25
  */
25
26
  readonly scope: "page" | "fragment";
26
27
  readonly unknownBricks: "silent" | "throw";
28
+ readonly renderId: string | undefined;
27
29
  constructor(scope: "page" | "fragment", options?: RendererContextOptions);
28
30
  setInitialMenuRequests(menuRequests: Promise<StaticMenuConf>[]): void;
29
31
  memoizeMenuRequests(route: RouteConf, menuRequests: Promise<StaticMenuConf>[]): void;
@@ -96,10 +96,6 @@ export declare class Runtime {
96
96
  breadcrumb?: import("@next-core/types").BreadcrumbItemConf[] | undefined;
97
97
  } | undefined;
98
98
  loadBricks(bricks: string[] | Set<string>): Promise<void>;
99
- getPreseBricks(): {
100
- notification?: string | false | undefined;
101
- dialog?: string | false | undefined;
102
- };
103
99
  }
104
100
  export declare function getBrickPackages(): BrickPackage[];
105
101
  export declare function _internalApiGetRenderId(): string | undefined;
@@ -10,7 +10,8 @@ export interface ResolveOptions {
10
10
  * - `reload`: Without looking for a matching cache.
11
11
  */
12
12
  cache?: "default" | "reload";
13
+ renderId?: string;
13
14
  }
14
15
  export declare function resolveData(resolveConf: ResolveConf, runtimeContext: RuntimeContext, options?: ResolveOptions): Promise<unknown>;
15
16
  export declare function clearResolveCache(): void;
16
- export declare function resolveByProvider(brick: Record<string, Function>, useProvider: string, method: string, args: unknown[], options?: ResolveOptions, originalArgs?: unknown[]): Promise<unknown>;
17
+ export declare function resolveByProvider(brick: Record<string, Function>, useProvider: string, method: string, args: unknown[], options?: ResolveOptions, originalArgs?: unknown[], stale?: boolean): Promise<unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/runtime",
3
- "version": "1.24.2",
3
+ "version": "1.24.4",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -65,5 +65,5 @@
65
65
  "@next-core/build-next-libs": "^1.0.8",
66
66
  "@next-core/test-next": "^1.0.11"
67
67
  },
68
- "gitHead": "0d88ad2099a63ef9b296285f65541eddc5b37485"
68
+ "gitHead": "7cc3fa67889c894bac3384a1908c3bd26054a18c"
69
69
  }