@zk-tech/base-ui-configuration-service 0.0.1-alpha.3 → 0.0.1-alpha.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.
package/dist/index.cjs CHANGED
@@ -758,13 +758,13 @@ var PageRouteManager = class extends BaseUiManager {
758
758
  return this.observableData.configs.find((item) => reactRouterDom.matchPath(item.path, path));
759
759
  }
760
760
  render(options) {
761
- return /* @__PURE__ */ React.createElement(PageRoute, { layout: options.layout });
761
+ return /* @__PURE__ */ React3__default.default.createElement(PageRoute, { layout: options.layout });
762
762
  }
763
763
  renderOutlet(options) {
764
- return /* @__PURE__ */ React.createElement(KeepAliveOutlet, { ...options });
764
+ return /* @__PURE__ */ React3__default.default.createElement(KeepAliveOutlet, { ...options });
765
765
  }
766
766
  renderSingleOutlet(options) {
767
- return /* @__PURE__ */ React.createElement(KeepAliveSingleOutlet, { ...options });
767
+ return /* @__PURE__ */ React3__default.default.createElement(KeepAliveSingleOutlet, { ...options });
768
768
  }
769
769
  _middlewareChange(props) {
770
770
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/base/middleware/action-point-runner.ts","../src/base/middleware/middleware.ts","../src/base/base-ui-configuration-service.tsx","../src/base/setting/setting.ts","../src/base/context.ts","../src/base/ui-manager/base-ui-manager.ts","../src/base/hooks/use-observer-selector.ts","../src/utils/sort.ts","../src/utils/merged-array.ts","../src/utils/runner-builder.ts","../src/utils/evaluate.ts","../src/feature/page-route/page-route-manager.interface.ts","../src/utils/init-await-lock.ts","../src/utils/is-equal.ts","../src/utils/query-stringify.ts","../src/components/lazy-load/index.tsx","../src/feature/page-route/component/page-route.module.scss","../src/feature/page-route/component/page-route.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/repeater.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/index.tsx","../src/feature/page-route/component/keep-alive-outlet/utils/cache.ts","../src/feature/page-route/component/keep-alive-outlet/utils/outlets.ts","../src/feature/page-route/component/keep-alive-outlet/index.tsx","../src/feature/page-route/component/keep-alive-outlet/single.tsx","../src/feature/page-route/page-route-manager.tsx","../src/feature/page-route/hooks/use-keep-alive-effect.ts","../src/feature/page-route/hooks/use-page-container-width.ts","../src/feature/page-route/utils/navigate.ts","../src/feature/page-route/hooks/use-navigate-factory.ts","../src/feature/block-content/block-content-manager.interface.ts","../src/feature/block-content/component/block-content.module.scss","../src/feature/block-content/component/block-content.tsx","../src/feature/block-content/block-content-manager.tsx"],"names":["Emitter","lvAssertNotHere","BaseUiConfigurationService","Disposable","IContainerService","proxy","merge","createContext","snapshot","useSnapshot","useMemo","OrderLevel","KeepAliveStatus","SharedMutex","lvAssertNever","ReactErrorBoundary","navigate","useNavigate","useContext","useEffect","Route","Routes","Navigate","memo","useRef","startTransition","Suspense","matchPath","useLocation","useOutlet","useState","OutletWrapper","useMemoizedFn","lvAssert","compile","useLayoutEffect","createPath","parsePath","React","clsx","lvAssertNotNil"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { IUseMiddlewareOptions } from './middleware.interface';\n\ntype IActionPointInfo = IUseMiddlewareOptions<any, any>['actionInfo'];\n\ntype INextFunction = (...args: any[]) => any;\n\n/**\n * 停止中间件队列执行的方法\n *\n * @public\n */\nexport type IStopAction = () => void;\n\n/**\n * 中间件执行信息\n * - 方法名\n * - 中间件类型\n * - 执行状态\n * - 耗时\n */\ntype DebugInfo = [string, string, string, number];\n\n/**\n * @internal\n */\nexport class ActionPointRunner<T> extends Function {\n private _rawArguments: any;\n\n constructor(\n private readonly middlewares: ((...args: any[]) => any)[],\n private readonly point: IActionPointInfo,\n private readonly _uiConfig: T,\n ) {\n super();\n const closure: any = (...args: any[]) => closure.run(...args);\n closure.middlewares = middlewares;\n closure.point = point ?? {\n name: '',\n from: '',\n trigger: '',\n path: [],\n };\n closure._uiConfig = _uiConfig;\n return Object.setPrototypeOf(closure, new.target.prototype);\n }\n\n get isStop(): boolean {\n return this._isStop;\n }\n\n private _isStop: boolean = false;\n private index = 0;\n\n run(...args: unknown[]) {\n this._rawArguments = args;\n this.index = -1;\n\n let data;\n while (this.hasNext() && !this._isStop) {\n data = this.getNext()();\n }\n return data;\n }\n\n hasNext() {\n return this.index < this.middlewares.length - 1;\n }\n\n private getNext(skip = false): INextFunction {\n let next: INextFunction = () => {\n /* do nothing*/\n };\n if (this.hasNext()) {\n this.index += 1;\n const handler = this.middlewares[this.index];\n next = () => {\n return handler({\n stop: () => {\n this._isStop = true;\n },\n uiConfig: this._uiConfig,\n actionInfo: this.point,\n triggerArgs: this._rawArguments,\n });\n };\n }\n return next;\n }\n}\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\n\nimport {\n type IUseMiddlewareProps,\n type IMiddlewareManager,\n type IBuildRunnerProps,\n type IMiddlewareChange,\n} from './middleware.interface';\nimport type { Event } from '@zk-tech/bedrock/event';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport type { IDisposable } from '@zk-tech/bedrock/dispose';\nimport { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport { ActionPointRunner } from './action-point-runner';\n\nexport class MiddlewareManager implements IMiddlewareManager<any, any> {\n private readonly _registerById: Map<string, IUseMiddlewareProps<any, any>> = new Map();\n /** caller <-> middleware handler 的映射表 */\n private readonly _registerByCaller: Map<string, string[]> = new Map();\n\n private readonly _onMiddlewareChange = new Emitter();\n private readonly _disposeMap: Map<string, IDisposable> = new Map();\n public onMiddlewareChange: Event<[IMiddlewareChange<any>]> = this._onMiddlewareChange.event;\n\n buildRunner(options: IBuildRunnerProps<any, any>): ActionPointRunner<any> {\n const caller = this._getCaller(options);\n const handlers = (this._registerByCaller.get(caller) ?? [])\n .map((id) => this._registerById.get(id)?.handler)\n .filter((item) => item);\n if (options.handler) {\n handlers.push(options.handler);\n }\n\n return new ActionPointRunner(\n // @ts-ignore type error\n handlers,\n {\n from: options.trigger,\n name: options.uiConfig.id,\n trigger: options.method,\n },\n options.uiConfig,\n );\n }\n\n use<T>(props: IUseMiddlewareProps<any, any>) {\n const existed = this._registerById.get(props.id);\n if (existed) {\n // 由于支持 merge props 成本有点高(需要考虑参数回收) ROI 不高直接报错。\n // 需要更新不如直接走移除重新注册来得方便.\n lvAssertNotHere('config had been existed');\n }\n\n this._registerById.set(props.id, props);\n\n props.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: props.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n this._registerByCaller.set(caller, []);\n }\n const target = this._registerByCaller.get(caller)!;\n target.push(props.id);\n });\n\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n\n // bind middleware trigger\n const dispose = props.freshTrigger(() => {\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n });\n this._disposeMap.set(props.id, dispose);\n }\n\n unUse(id: string): void {\n const target = this._registerById.get(id);\n if (!target) {\n return;\n }\n\n target.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: target.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n return;\n }\n const triggers = this._registerByCaller.get(caller)!;\n this._registerByCaller.set(\n caller,\n triggers.filter((_item) => _item === target.id),\n );\n });\n\n this._onMiddlewareChange.fire({\n trigger: target.trigger,\n method: target.triggerMethod,\n });\n\n const dispose = this._disposeMap.get(id);\n dispose?.dispose();\n this._disposeMap.delete(id);\n }\n\n private _getCaller({ trigger, method }: { trigger: string; method: string | number | symbol }) {\n return `${trigger}-${method.toString()}`;\n }\n}\n","import type { Event } from '@zk-tech/bedrock/event';\nimport { Disposable } from '@zk-tech/bedrock/dispose';\nimport { IContainerService } from '@zk-tech/bedrock/di';\n\nimport type { IUiManagerSymbol, IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBaseSetting } from './setting/setting.interface';\nimport { MiddlewareManager } from './middleware/middleware';\nimport { type IMiddlewareManager, type IUseMiddlewareProps } from './middleware/middleware.interface';\n\nexport abstract class BaseUiConfigurationService<\n ISetting extends IBaseSetting,\n UIManagerSymbol extends IUiManagerSymbol,\n MixinConfig extends Record<UIManagerSymbol, any[]>,\n ISymbolAllManager extends Record<UIManagerSymbol, IBaseUiManager<any>>,\n> extends Disposable {\n readonly _serviceBrand: undefined;\n\n public get setting(): ISetting {\n return this._setting;\n }\n\n public middleware!: IMiddlewareManager<UIManagerSymbol, MixinConfig>;\n\n abstract uiManager: ISymbolAllManager;\n\n constructor(\n private readonly _setting: ISetting,\n @IContainerService protected readonly _containerService: IContainerService,\n ) {\n super();\n }\n\n public abstract render(): React.ReactNode;\n protected abstract _initAllManager(): void;\n\n registerConfig(config: Partial<MixinConfig>) {\n for (const key of Object.keys(config)) {\n // @ts-ignore type error\n this.uiManager[key].registerConfig(config[key]);\n }\n }\n\n useMiddleware(props: IUseMiddlewareProps<UIManagerSymbol, MixinConfig>) {\n return this.middleware.use(props);\n }\n\n protected _bootstrap() {\n // @ts-ignore type error\n this.middleware = this._containerService.createInstance(MiddlewareManager);\n // 初始化顶部栏,左侧栏,路由层面的UI Manager\n this._initAllManager();\n }\n}\n","import { proxy } from 'valtio';\nimport { merge } from 'lodash-es';\n\nimport { type IBaseSetting } from './setting.interface';\n\nexport abstract class BaseSetting<T extends IBaseSetting> {\n public observableData: T;\n\n constructor(options: { setting: Partial<T> }) {\n const defaultConfig: IBaseSetting = {\n namespace: 'base',\n visible: true,\n debugMode: false,\n };\n\n this.observableData = proxy(merge(defaultConfig, options.setting) as T);\n }\n\n get namespace() {\n return this.observableData.namespace;\n }\n\n get debugMode() {\n return this.observableData.debugMode;\n }\n\n get visible() {\n return this.observableData.visible;\n }\n}\n","import { createContext } from 'react';\nimport { BaseUiConfigurationService } from '@/base/base-ui-configuration-service';\n\nexport type IContext<T extends BaseUiConfigurationService<any, any, any, any>> = {\n // 内部模块使用,允许拿到 public 方法,所以不引用 interface 了.\n uiConfigurationService: T;\n};\n\n// @ts-ignore 由业务时序来保证一定有值,这里忽略报错\nexport const GlobalContext = createContext<IContext>();\n","import { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport type { IMiddlewareChange, IMiddlewareManager } from '@/base/middleware/middleware.interface';\nimport type { IUiManagerSymbol, IBaseUiManager } from './base-ui-manager.interface';\n\nexport abstract class BaseUiManager<\n TConfigSymbol extends IUiManagerSymbol,\n TConfig extends Record<string, any>,\n> implements IBaseUiManager<TConfig>\n{\n // feat: 修复旧框架跳转新框架闪动\n constructor(protected readonly _middlewareManager: IMiddlewareManager<TConfigSymbol, any>) {\n this._listenerMiddlewareChange();\n }\n\n abstract registerConfig(configs: TConfig[]): void;\n\n public unRegisterConfig(id: string): void {\n lvAssertNotHere(\n 'There is no such scenario yet, and no support capability is provided for the time being. If necessary, please contact infrastructure support',\n );\n }\n\n abstract render(...params: any[]): React.ReactNode;\n abstract _middlewareChange(props: IMiddlewareChange<TConfigSymbol>): void;\n\n private _listenerMiddlewareChange() {\n this._middlewareManager.onMiddlewareChange((props: any) => {\n this._middlewareChange(props);\n });\n }\n}\n","import { useMemo } from 'react';\nimport { useSnapshot } from 'valtio';\n\n/** 空对象占位,当 selectionTarget 为空时传入 useSnapshot,保证 hooks 始终按相同顺序调用 */\nconst EMPTY_OBJECT = {} as object;\n\n/**\n * 使用 valtio 实现的 selector hook:从 proxy 对象中选择数据,当选择的数据变化时触发组件重渲染。\n *\n * @param selectionTarget 传给 selector 用以 pick 数据的 proxy 对象\n * @param selector 定义如何从 target 中选取/派生数值\n * @param options.deps 添加到 useMemo 的额外依赖,selector 依赖外部变量时传入\n */\nexport function useObserverSelector<S, T>(\n selectionTarget: S,\n selector: (selectionTarget: NonNullable<S>) => T,\n options: {\n /** 添加依赖项到 useMemo 中 */\n deps?: readonly unknown[];\n } = {},\n): S extends object ? T : T | undefined {\n const { deps = [] } = options;\n\n // 始终无条件调用 hooks,符合 React rules of hooks;空时用占位对象\n const target =\n selectionTarget != null && typeof selectionTarget === 'object'\n ? (selectionTarget as object)\n : EMPTY_OBJECT;\n const snapshot = useSnapshot(target);\n\n const selectedValue = useMemo(() => {\n if (selectionTarget == null || typeof selectionTarget !== 'object') {\n return undefined as S extends object ? T : T | undefined;\n }\n return selector(snapshot as NonNullable<S>);\n }, [selectionTarget, snapshot, ...deps]);\n\n return selectedValue as S extends object ? T : T | undefined;\n}\n","export enum OrderLevel {\n high = 'high',\n default = 'default',\n low = 'low',\n}\n\ninterface IOrderType {\n /**\n * 在 order 之上的排序规则\n * 严格按照:high > default > low 顺序排序\n * */\n orderLevel?: OrderLevel;\n\n /** 排序设置,默认为 0 */\n order?: number;\n}\n\n/**\n * 通用的排序函数,主要分作两类排序规则\n * 优先使用 orderLevel 分组,后使用 order 排序\n * 主要为了处理一些希望固定展示头部和底部的场景,而出现 order 争抢的 case\n */\nexport function sortListBySettings<T extends IOrderType>({\n list,\n filter = (item) => item,\n}: {\n list: Array<T>;\n filter?: (item: T) => T;\n}): Array<T> {\n return list\n .sort((a: T, b: T) => {\n const typeSort: {\n [key in Exclude<IOrderType['orderLevel'], undefined>]: number;\n } = { high: 2, default: 1, low: 0 };\n const { orderLevel: aType = 'default', order: aPriority = 0 } = a;\n const { orderLevel: bType = 'default', order: bPriority = 0 } = b;\n\n if (aType !== bType) {\n return typeSort[bType] - typeSort[aType];\n }\n\n return bPriority - aPriority;\n })\n .map(filter);\n}\n","/**\n * @description 将传入的UI配置数组,通过打平整合到一个对象中\n * @example\n * input: [{ pageRoute: [xxx] }, {pageRoute: [xxx2]}]\n * output: { pageRoute: [xxx, xxx2] }\n */\nexport const mergeUiConfigs = <T extends Record<string, Array<any>>>(configs: Array<Partial<T>>) => {\n const uiConfigs: Partial<T> = {};\n configs.map((configObj) => {\n for (const [key, config] of Object.entries(configObj)) {\n if (!Array.isArray(config)) {\n continue;\n }\n if (key in uiConfigs) {\n uiConfigs[key]?.push(...config);\n } else {\n Object.assign(uiConfigs, {\n [key]: config,\n });\n }\n }\n });\n return uiConfigs;\n};\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\nimport type { IMiddlewareManager } from '@/base/middleware/middleware.interface';\n\n// import type { IUiConfigMap } from '@/ui-manager/ui-mixin-config.interface';\n\nexport function runnerBuilder({\n middleware,\n trigger,\n method,\n handler,\n uiConfig,\n}: {\n middleware: IMiddlewareManager<any, any>;\n trigger: IUiManagerSymbol;\n method: string;\n handler?: (...args: any[]) => any;\n uiConfig: any;\n}) {\n const runner = middleware.buildRunner({\n trigger,\n method,\n handler,\n uiConfig,\n });\n return runner;\n}\n","/**\n * 用于带默认值执行 config 的回调方法\n * @param config - config 的回调\n * @param defaultValue - 默认值\n * @param args - 参数\n * @internal\n * @privateRemarks\n * config类型改成 T | ((...params: any[]) =\\> T),ts认为不一定是callable\n * https://github.com/microsoft/TypeScript/issues/37663\n * 我们需要这个函数能成功的类型推断T\n * 但是config设成any可能会产生错误,这里的类型推断只能由config产生\n * 例如 evaluate\\<TooltipConfig| string | undefined\\>(tooltipConfig, undefined);\n * 为什么写<T>是因为defaultValue是undefined\n * 所以当T没有写,就会错误的由defaultValue推断T\n * 还有一种可能是T写了就变成了强制类型转换,也会出错\n * 即使改成issue里面说的方法,也没有办法限制defaultValue类型\n */\nexport function evaluate<T>(config: any, defaultValue: T, ...args: any[]): T {\n if (typeof config === 'function') {\n return config(...args) ?? defaultValue;\n }\n return config ?? defaultValue;\n}\n","import React from 'react';\nimport type { NavigateOptions } from 'react-router-dom';\nimport type { Event } from '@zk-tech/bedrock/event';\n\nimport type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IPageRouteConfig } from './page-route-config.interface';\n\nexport const PageRouteManagerSymbol = 'PageRoute';\n\nexport interface IPageRouteObservableData {\n currentRoute: string | undefined;\n configs: IPageRouteConfig[];\n keepAliveStatusMap: Record<string, IKeepAliveEventData>;\n // 历史路由路径\n historyRoutes: string[];\n containerWidth: number;\n}\n\nexport interface IGeneratePathOptions {\n params?: Record<string, string>;\n query?: Record<string, string> | string;\n}\n\nexport interface INavigateOptions extends IGeneratePathOptions, NavigateOptions {}\n\nexport enum KeepAliveStatus {\n /** 激活态 */\n Activated = 'Activated',\n /** 失活态 */\n InActivated = 'InActivated',\n}\n\nexport interface IKeepAliveEventData {\n /** 当前激活状态对应的路由路径 */\n pathName: string;\n /** 当前激活状态对应的路由ID */\n routeId: string;\n /** 当前激活状态 */\n status: KeepAliveStatus;\n /** 当前激活状态的路由携带的信息 */\n locationState: any;\n}\n\nexport type IPageRouteRenderOptions = {\n layout: React.ReactNode;\n};\n\nexport type IPageRouteOutletOptions = {\n routesConfig: IPageRouteConfig[];\n};\n\nexport interface IPageRouteManager extends IBaseUiManager<IPageRouteConfig> {\n observableData: IPageRouteObservableData;\n\n render: (options: IPageRouteRenderOptions) => React.ReactNode;\n\n renderOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 用于单向的路由跳转场景 */\n renderSingleOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 当前激活的路由信息 */\n currentKeepAliveData: IKeepAliveEventData | undefined;\n\n /** 等待待跳转的路由 */\n pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n\n currentRoute: IPageRouteConfig | undefined;\n\n /** 触发路由改变的回调 */\n onWouldRouteChange: Event<[string | number, options?: NavigateOptions]>;\n\n notifyPageRendered: (config: string | IPageRouteConfig) => void;\n\n onPageRendered: Event<[IPageRouteConfig]>;\n\n onPageContainerWidthChange: Event<[]>;\n\n /** 路由配置发生变化时触发的事件 */\n onRouteConfigChange: Event<[IPageRouteConfig[]]>;\n\n getRouteConfigByPath: (path: string) => IPageRouteConfig | undefined;\n\n /** 更新当前路由 */\n updatePageRoute: (path: string) => void;\n\n /** 生成路径 */\n generatePath: (id: string, options?: IGeneratePathOptions | undefined) => string;\n\n /** 路由到具体地址 */\n navigate: (id: string, options?: INavigateOptions) => void;\n\n /** 返回到上级页面\n * @param {number} 默认是-1 即返回上一级页面\n * */\n navigateBack: (to?: number) => void;\n\n /** 使用keep-alive之后,可监听keep-alive看当前那一个路由组件被激活了 */\n onKeepAliveChange: Event<[IKeepAliveEventData]>;\n\n /** 由外部去触发当前需要激活那一个路由 */\n activateKeepAliveRoute: (activatePathName: string, locationState: any) => void;\n\n updateContainerWidth: (width: number) => void;\n\n /** 初始化完 pageRouteManager 可以进行navigate了 */\n initDone: VoidFunction;\n}\n","import { SharedMutex } from '@zk-tech/bedrock/lock';\n\n/**\n * @description\n * 初始化门闩:在 initDone 前拦截行为,initDone 后放行。\n * 使用 SharedMutex 作为一次性锁。\n */\nexport class InitAwaitLock {\n private readonly _mutex = new SharedMutex();\n\n constructor() {\n // 使用 void 忽略 Promise,锁会在同步流程中生效\n void this._mutex.lock();\n }\n\n /**\n * @description 是否已经完成初始化\n */\n get hasBeenDone(): boolean {\n return !this._mutex.isLocked();\n }\n\n /**\n * @description 标记初始化完成并放行\n */\n public initDone(): void {\n if (this.hasBeenDone) {\n return;\n }\n this._mutex.unLock();\n }\n}\n","/**\n * 比较两个字符串是否相等\n * @param val\n * @param otherVal\n * @returns {boolean}\n */\nexport const isEqualStr = (val: string, otherVal: string) => val === otherVal;\n","import { lvAssertNever, lvAssertNotHere } from '@zk-tech/bedrock/assert';\n\nexport const queryStringify = (parseObj: Record<string, string>) => {\n if (typeof parseObj !== 'object') {\n lvAssertNever(parseObj);\n }\n return Object.entries(parseObj)\n .map((item) => `${item[0]}=${item[1]}`)\n .join('&');\n};\n","import type { FC, ComponentType, LazyExoticComponent } from 'react';\nimport { lazy, Suspense } from 'react';\nimport { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary';\n\nimport { retryWrapper } from '@/utils/retry';\nimport type { ErrorBoundaryProps, SuspenseBoundaryProps } from './interface';\n\nexport const lazyRetry: typeof lazy = (factory) => {\n return lazy(retryWrapper(factory, { delayMs: 1000, numTry: 5 }));\n};\n\ntype LazyPreloadResult<T extends ComponentType<any>> = LazyExoticComponent<T> & { preload: () => void };\n\ntype Factory<T extends ComponentType<any>> = () => Promise<{\n default: T;\n}>;\n\ntype LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => LazyPreloadResult<T>;\n\nexport const lazyPreload: LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => {\n const Component = lazy(factory) as LazyPreloadResult<T>;\n Component.preload = factory;\n return Component;\n};\n\n/**\n * 组件内部不再自动上报错误到slardar,业务需根据需要在 `onError` 回调中上报slardar\n * @constructor\n */\nexport const ErrorBoundary: FC<ErrorBoundaryProps> = ({ children, fallback, onError }) => {\n return (\n <ReactErrorBoundary fallback={fallback ?? <div />} onError={onError}>\n {children}\n </ReactErrorBoundary>\n );\n};\n\nexport const SuspenseBoundary: FC<SuspenseBoundaryProps> = ({\n children,\n fallback = null,\n errorFallback,\n onError,\n}) => (\n <ErrorBoundary fallback={errorFallback ?? fallback} onError={onError}>\n <Suspense fallback={fallback}>{children}</Suspense>\n </ErrorBoundary>\n);\n\nexport type { SuspenseBoundaryProps, ErrorBoundaryProps };\n",".root {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL3BhZ2Utcm91dGUvY29tcG9uZW50Iiwic291cmNlcyI6WyJwYWdlLXJvdXRlLm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUVBIiwic291cmNlc0NvbnRlbnQiOlsiLnJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iXX0= */","import { type FC, useContext, useEffect, useMemo } from 'react';\nimport { Routes, Route, useNavigate, Navigate } from 'react-router-dom';\nimport { ErrorBoundary } from '@/components/lazy-load';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\n\nimport { GlobalContext } from '@/base/context';\nimport {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n} from '@/feature/page-route/page-route-manager.interface';\nimport Styles from './page-route.module.scss';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype IPageRoute = {\n layout: React.ReactNode;\n};\n\nexport const PageRoute: FC<IPageRoute> = ({ layout }) => {\n const navigate = useNavigate();\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const baseRoute = useObserverSelector(uiConfigurationService.setting, (manager) => {\n return {\n namespace: manager.namespace,\n baseRoute: manager.baseRoute,\n redirectRouteIdWhen404: manager.redirectRouteIdWhen404,\n };\n });\n\n const routeConfig = useObserverSelector(\n uiConfigurationService.uiManager[PageRouteManagerSymbol],\n (manager) => {\n return manager.observableData.configs;\n },\n );\n\n // 分别订阅 setting 和 routeManager 的 observableData\n const redirectRouteId = useObserverSelector(uiConfigurationService.setting, (setting) => {\n return setting?.observableData?.redirectRouteIdWhen404;\n });\n\n const redirectRoute = useMemo(() => {\n if (!redirectRouteId) return undefined;\n return routeConfig.find(({ id }) => id === redirectRouteId);\n }, [redirectRouteId, routeConfig]);\n\n useEffect(() => {\n const routeManager = uiConfigurationService.uiManager[PageRouteManagerSymbol] as IPageRouteManager;\n const { pendingNavigateOptions } = routeManager;\n if (pendingNavigateOptions) {\n navigate(pendingNavigateOptions.path, pendingNavigateOptions.options);\n }\n const dispose = routeManager.onWouldRouteChange((to, options) => {\n if (typeof to === 'string') {\n navigate(to, options);\n } else {\n navigate(to);\n }\n });\n routeManager.initDone();\n\n return () => {\n dispose.dispose();\n };\n }, []);\n\n const config = useMemo(\n () =>\n routeConfig.map((item) => (\n <Route\n key={`${item.id}-${item._updateTime}`}\n path={item.path}\n index={item.index}\n element={\n <ErrorBoundary fallback={item.errorElement ?? <div />}>\n {item.content ? item.content() : item.skeleton?.() ?? null}\n </ErrorBoundary>\n }\n />\n )),\n [routeConfig],\n );\n\n return (\n <div id={baseRoute.namespace} className={Styles.root}>\n <Routes>\n <Route element={layout}>{config}</Route>\n {redirectRoute ? <Route path=\"*\" element={<Navigate to={redirectRoute.path} replace />} /> : null}\n </Routes>\n </div>\n );\n};\n","import { memo, startTransition, useRef } from 'react';\nimport type { FC, ReactNode } from 'react';\n\nexport const Repeater: FC<{\n mode: 'visible' | 'hidden';\n children: ReactNode;\n}> = memo((props) => {\n const { mode, children } = props;\n const resolveRef = useRef<() => void>();\n\n if (mode === 'hidden') {\n startTransition(() => {\n throw new Promise<void>((resolve) => (resolveRef.current = resolve));\n });\n }\n\n if (resolveRef.current) {\n startTransition(() => {\n resolveRef.current?.();\n resolveRef.current = void 0;\n });\n }\n\n return <>{children}</>;\n});\n","import { Suspense, memo } from 'react';\nimport type { FC, ReactNode, SuspenseProps } from 'react';\nimport { Repeater } from './repeater';\n\ninterface OffscreenProps extends SuspenseProps {\n mode: 'visible' | 'hidden';\n fallback?: ReactNode;\n}\n\nexport const Offscreen: FC<OffscreenProps> = memo((props) => {\n const { mode, children, fallback } = props;\n\n return (\n <Suspense fallback={fallback}>\n <Repeater mode={mode}>{children}</Repeater>\n </Suspense>\n );\n});\n","import { matchPath } from 'react-router-dom';\n\nimport { evaluate } from '@/utils/evaluate';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\n/**\n * 是否需要支持路由缓存\n * @param routesConfig 路由配置项\n * @param pathName 当前路由路径\n * @returns 是否可以缓存该路由组件\n */\nexport const isNeedCache = (routesConfig: IPageRouteConfig[], pathName: string, updateTime?: number) => {\n for (const route of routesConfig) {\n const isMatch = matchPath(route.path, pathName);\n if (isMatch) {\n const needCache = evaluate<boolean>(route.isNeedCache, false);\n const hasContentRendered = Boolean(evaluate<React.ReactNode | null>(route.content, null));\n const updated = !updateTime ? true : updateTime === route._updateTime;\n return needCache && hasContentRendered && updated;\n }\n }\n return false;\n};\n","import type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\nimport { isEqualStr } from '@/utils';\nimport type { IKeepAliveOutlet } from '../interface';\nimport { isNeedCache } from './cache';\n\n/**\n * @desc 从outlets中过滤出不符合条件的路由组件进行卸载操作\n * 不符合条件:\n * 1. 不属于当前激活态的缓存数据\n * 2. 且不需要缓存的数据给清空卸载掉\n */\nexport const getValidOutlets = (\n routesConfig: IPageRouteConfig[],\n pathname: string,\n outlets: IKeepAliveOutlet[],\n) => {\n outlets.forEach((outletData) => {\n // const isBusiness = businessHostPrefixList.some((prefix) => location.href.startsWith(prefix));\n const needRefresh = !(\n outletData.isCacheItem && isNeedCache(routesConfig, outletData.pathname, outletData?.updateTime)\n );\n if (needRefresh) {\n outletData.outlet = null;\n }\n });\n const newOutlets = outlets.filter((item) => item.outlet);\n return newOutlets;\n};\n","import { useState, useRef, useEffect, type ReactNode, useContext } from 'react';\nimport { useOutlet, useLocation, matchPath, useNavigationType } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const initRef = useRef(true);\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n const calcOutlets = (tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n };\n const [outlets, setOutlets] = useState<IKeepAliveOutlet[]>(\n // eslint-disable-next-line no-nested-ternary\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions\n ? []\n : initRef.current\n ? calcOutlets([])\n : [],\n );\n initRef.current = false;\n\n useEffect(() => {\n setOutlets(calcOutlets);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname, routesConfig]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import { useState, useRef, useEffect, type ReactNode, useContext, useMemo } from 'react';\nimport { useOutlet, useLocation } from 'react-router-dom';\nimport { useMemoizedFn } from 'ahooks';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveSingleOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n\n const calcOutlets = useMemoizedFn((tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n });\n\n const outlets = useMemo(() => {\n if (uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions) {\n return [];\n }\n\n return calcOutlets([]);\n }, [\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions,\n location.pathname,\n routesConfig,\n calcOutlets,\n ]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import { proxy, snapshot } from 'valtio';\nimport { InitAwaitLock } from '@/utils/init-await-lock';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport { lvAssert } from '@zk-tech/bedrock/assert';\nimport { matchPath } from 'react-router-dom';\nimport { compile } from 'path-to-regexp';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { type IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { isEqualStr, queryStringify } from '@/utils';\nimport { type IPageRouteConfig } from './page-route-config.interface';\nimport {\n KeepAliveStatus,\n PageRouteManagerSymbol,\n type IGeneratePathOptions,\n type IKeepAliveEventData,\n type INavigateOptions,\n type IPageRouteManager,\n type IPageRouteObservableData,\n type IPageRouteRenderOptions,\n type IPageRouteOutletOptions,\n} from './page-route-manager.interface';\n\nimport { PageRoute } from './component/page-route';\nimport KeepAliveOutlet from './component/keep-alive-outlet';\nimport KeepAliveSingleOutlet from './component/keep-alive-outlet/single';\n\nimport type { IMiddlewareChange } from '@/base/middleware/middleware.interface';\nimport { runnerBuilder } from '@/utils/runner-builder';\n\nexport class PageRouteManager\n extends BaseUiManager<any, IPageRouteConfig>\n implements IBaseUiManager<IPageRouteConfig>, IPageRouteManager\n{\n public observableData: IPageRouteObservableData = proxy({\n currentRoute: undefined,\n configs: [],\n keepAliveStatusMap: {},\n historyRoutes: [],\n containerWidth: 0,\n });\n\n private readonly _locker: InitAwaitLock = new InitAwaitLock();\n private _pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n private readonly _onWouldRouteChange = new Emitter<[string | number, options?: INavigateOptions]>();\n public onWouldRouteChange = this._onWouldRouteChange.event;\n private readonly _onKeepAliveChange = new Emitter<[IKeepAliveEventData]>();\n public onKeepAliveChange = this._onKeepAliveChange.event;\n private readonly _onPageRendered = new Emitter<[IPageRouteConfig]>();\n public onPageRendered = this._onPageRendered.event;\n\n private readonly _onPageContainerWidthChange = new Emitter<[]>();\n public onPageContainerWidthChange = this._onPageContainerWidthChange.event;\n\n // fix: 修复个人页刷新打开埋点参数上报错误\n private readonly _onRouteConfigChange = new Emitter<[IPageRouteConfig[]]>();\n public onRouteConfigChange = this._onRouteConfigChange.event;\n\n get pendingNavigateOptions() {\n return this._pendingNavigateOptions;\n }\n\n get currentRoute(): IPageRouteConfig | undefined {\n return this.getRouteConfigByPath(this.observableData.currentRoute);\n }\n\n registerConfig(configs: IPageRouteConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config, {\n _updateTime: Date.now(),\n });\n } else {\n // create\n this.observableData.configs.push(\n merge({}, config, {\n _updateTime: 0,\n }),\n );\n }\n });\n // 触发路由配置变化事件\n this._onRouteConfigChange.fire(snapshot(this.observableData.configs) as IPageRouteConfig[]);\n }\n\n public updatePageRoute(path: string) {\n const routesLength = this.observableData.historyRoutes.length;\n if (this.observableData.historyRoutes[routesLength - 1] !== path) {\n this.observableData.historyRoutes.push(path);\n }\n\n // 之前有路由,先触发上一次的 unactive\n const preRoute = this.getRouteConfigByPath(this.observableData.currentRoute);\n const setRoute = this.getRouteConfigByPath(path);\n if (preRoute?.id !== setRoute?.id) {\n if (preRoute) {\n preRoute?.onActiveChange?.({ active: false });\n }\n setRoute?.onActiveChange?.({ active: true });\n }\n\n this.observableData.currentRoute = path;\n }\n\n public navigate(id: string, options?: INavigateOptions) {\n const path = this.generatePath(id, options);\n\n // 空白也是可能的路径\n if (!path) {\n lvAssert(path);\n }\n\n const runner = runnerBuilder({\n middleware: this._middlewareManager,\n trigger: PageRouteManagerSymbol,\n method: 'shouldInterceptNavigate',\n uiConfig: { id, path },\n });\n const interceptRes = runner.run();\n\n if (runner.isStop || interceptRes) {\n return;\n }\n\n this._navigateByPath(path, options);\n }\n\n private _navigateByPath(path: string, options?: INavigateOptions) {\n if (!this._locker.hasBeenDone) {\n this._pendingNavigateOptions = {\n path,\n options,\n };\n } else {\n this._onWouldRouteChange.fire(path, options);\n }\n }\n\n public updateContainerWidth(width: number) {\n this.observableData.containerWidth = width;\n }\n\n public initDone() {\n if (this._locker.hasBeenDone) {\n return;\n }\n this._pendingNavigateOptions = undefined;\n this._locker.initDone();\n }\n\n public navigateBack(to = -1) {\n this._onWouldRouteChange.fire(to);\n }\n\n public generatePath(id: string, options?: IGeneratePathOptions | undefined): string {\n const target = this.observableData.configs.find((item) => item.id === id);\n if (!target) {\n lvAssert(target);\n }\n\n const compiler = compile(target.path);\n let result = compiler(options?.params ?? {});\n const query = typeof options?.query === 'string' ? options.query : queryStringify(options?.query ?? {});\n if (query.length !== 0) {\n result += query.includes('?') ? query : `?${query}`;\n }\n return result;\n }\n\n public activateKeepAliveRoute(activatePathName: string, locationState: any) {\n if (\n activatePathName === this.currentKeepAliveData?.pathName &&\n Object.values(this.observableData.keepAliveStatusMap).length > 0\n ) {\n return;\n }\n const allAlivePathName = Object.keys(this.observableData.keepAliveStatusMap);\n // 1. 将其他的失活\n for (const alivePathName of allAlivePathName) {\n if (isEqualStr(alivePathName, activatePathName)) {\n continue;\n }\n this._updateKeepAliveStatus(alivePathName, KeepAliveStatus.InActivated);\n }\n // 2. 将当前的激活\n this._updateKeepAliveStatus(activatePathName, KeepAliveStatus.Activated, locationState);\n }\n\n private _updateKeepAliveStatus(pathName: string, status: KeepAliveStatus, locationState?: any) {\n const lastStatusVal = this.observableData.keepAliveStatusMap[pathName];\n const lastStatus = lastStatusVal?.status;\n const matchRoteConfig = this.observableData.configs.find((item) => matchPath(item.path, pathName));\n const newStatusVal = {\n pathName,\n status,\n routeId: matchRoteConfig?.id ?? 'NOT_FOUND',\n locationState,\n };\n this.observableData.keepAliveStatusMap[pathName] = newStatusVal;\n if (status !== lastStatus) {\n this._onKeepAliveChange.fire(newStatusVal);\n }\n }\n\n public get currentKeepAliveData() {\n const { keepAliveStatusMap, currentRoute = '' } = this.observableData;\n return Object.values(keepAliveStatusMap).find((item) => item.status === KeepAliveStatus.Activated);\n }\n\n public notifyPageRendered(config: string | IPageRouteConfig): void {\n if (typeof config === 'string') {\n const routeConfig = this.getRouteConfigByPath(config);\n this._onPageRendered.fire(routeConfig ? (snapshot(routeConfig) as IPageRouteConfig) : routeConfig!);\n } else {\n this._onPageRendered.fire(config);\n }\n }\n\n public getRouteConfigByPath(path: string | undefined): IPageRouteConfig | undefined {\n if (!path) {\n return undefined;\n }\n\n return this.observableData.configs.find((item) => matchPath(item.path, path));\n }\n\n public render(options: IPageRouteRenderOptions): React.ReactNode {\n return <PageRoute layout={options.layout} />;\n }\n\n public renderOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveOutlet {...options} />;\n }\n\n public renderSingleOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveSingleOutlet {...options} />;\n }\n\n _middlewareChange(props: IMiddlewareChange<'PageRoute'>): void {\n // throw new Error('Method not implemented.');\n }\n}\n","import {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n KeepAliveStatus,\n type IKeepAliveEventData,\n} from '@/feature/page-route/page-route-manager.interface';\nimport { useContext, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype TEffectCallback = () => VoidFunction | void;\n\n/**\n * 用于keep-alive路由组件的显隐的触发钩子\n * 由于使用了keep-alive路由的组件,无法使用useEffect来表示组件是否可见,因此增加该hook来\n * 帮助外部来判断当前组件是否可见,用法和useEffect类似,传入一个函数,该函数会在初始化时候的路由组件\n * 被激活的时候触发,且该函数返回的函数会在失活的时候被触发\n * @example\n * ```\n * useKeepAliveEffect(() => {\n * console.log('我被激活啦!')\n * return () => {\n * console.log('我被失活啦!')\n * }\n * })\n * ```\n */\nexport const useKeepAliveEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n\nexport const useKeepAliveLayoutEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useLayoutEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n","import { useContext } from 'react';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\n\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\nexport const usePageContainerWidth = () => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n return useObserverSelector(uiConfigurationService.uiManager[PageRouteManagerSymbol], (manager) => {\n return manager.observableData.containerWidth;\n });\n};\n","import { createPath, matchPath, parsePath, type NavigateOptions, type To } from 'react-router-dom';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { PageRouteManagerSymbol } from '../page-route-manager.interface';\n\n/** 导航至某一个页面 */\nexport function navigate(\n platformUiConfiguration: ITempUiConfigurationServiceContext['uiConfigurationService'],\n to: To | number,\n options?: NavigateOptions,\n) {\n const pageRouteManager = platformUiConfiguration.uiManager[PageRouteManagerSymbol];\n\n switch (true) {\n case typeof to === 'string' || typeof to === 'object':\n if (typeof to === 'object') {\n to = createPath(to);\n }\n const path = parsePath(to);\n const routesConfig = pageRouteManager.observableData.configs;\n const matchItem = routesConfig.find((item) => matchPath(item.path, path?.pathname ?? ''));\n if (!matchItem) {\n return;\n }\n // 匹配到的路由参数\n const matchRes = Object.entries(matchPath(matchItem.path, path?.pathname ?? '')?.params ?? {}).reduce<\n Record<string, string>\n >((pre, cur) => {\n const [key, value] = cur;\n if (!key || !value) {\n return pre;\n }\n pre[key] = value;\n return pre;\n }, {});\n\n pageRouteManager.navigate(matchItem.id, {\n query: path.search,\n params: matchRes,\n ...options,\n });\n break;\n case typeof to === 'number':\n pageRouteManager.navigateBack(to);\n\n break;\n default:\n }\n}\n","import type { NavigateFunction, NavigateOptions, To } from 'react-router-dom';\nimport { navigate } from '../utils/navigate';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { useMemoizedFn } from 'ahooks';\n\nexport const useNavigateFactory = (\n uiConfigurationService: ITempUiConfigurationServiceContext['uiConfigurationService'],\n): NavigateFunction => {\n const useNavigate = useMemoizedFn((to: To | number, options?: NavigateOptions) => {\n navigate(uiConfigurationService, to, options);\n });\n return useNavigate;\n};\n","import type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBlockContentConfig } from './block-content-config.interface';\n\nexport const BlockContentManagerSymbol = 'BlockContent';\n\nexport interface IBlockContentObservableData {\n forceUpdate: number;\n activeId: string | undefined;\n configs: IBlockContentConfig[];\n}\n\nexport interface IBlockContentManager extends IBaseUiManager<IBlockContentConfig> {\n observableData: IBlockContentObservableData;\n\n // onRouteChange: Event;\n\n changeActiveId: (activeId: string) => void;\n}\n",".container {\n flex: 1;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL2Jsb2NrLWNvbnRlbnQvY29tcG9uZW50Iiwic291cmNlcyI6WyJibG9jay1jb250ZW50Lm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udGFpbmVyIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiJdfQ== */","import React, { useContext, useRef } from 'react';\nimport clsx from 'clsx';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { evaluate } from '@/utils/evaluate';\n\nimport { GlobalContext } from '@/base/context';\nimport { BlockContentManagerSymbol } from '@/feature/block-content/block-content-manager.interface';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/block-content/type';\n\nimport style from './block-content.module.scss';\n\nconst BlockContentComponent: React.FC = React.memo(() => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const activeBlockContentConfig = useObserverSelector(\n uiConfigurationService.uiManager[BlockContentManagerSymbol],\n (manager) => {\n const { activeId, configs } = manager.observableData;\n return configs.find((item) => item.id === activeId);\n },\n );\n\n // 监听是否注册完按钮,ready则开始计算宽高\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={containerRef}\n className={clsx(style.container, evaluate(activeBlockContentConfig?.className, ''))}\n >\n {evaluate(activeBlockContentConfig?.content, null)}\n </div>\n );\n});\n\nexport const BlockContent = BlockContentComponent;\n","import { proxy } from 'valtio';\nimport { lvAssertNotNil } from '@zk-tech/bedrock/assert';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { BlockContent } from './component/block-content';\nimport { type IBlockContentConfig } from './block-content-config.interface';\nimport {\n type IBlockContentManager,\n type IBlockContentObservableData,\n} from './block-content-manager.interface';\n\nexport class BlockContentManager\n extends BaseUiManager<any, IBlockContentConfig>\n implements IBlockContentManager\n{\n public observableData: IBlockContentObservableData = proxy({\n forceUpdate: 0,\n activeId: undefined,\n configs: [],\n });\n\n registerConfig(configs: IBlockContentConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config);\n } else {\n // create\n lvAssertNotNil(\n config.id,\n `The \"id\" attribute is required when registering \"UiManagerName.BlockContent\"`,\n );\n this.observableData.configs.push(config);\n }\n });\n\n // _autoUpdateActiveBlock\n if (\n !(\n this.observableData.activeId &&\n this.observableData.configs.find((item) => item.id === this.observableData.activeId)\n )\n ) {\n // 如果当前没有任何激活的 block, 或者当前激活的block已经是非法态,那么默认兜底选中首个配置\n this.observableData.activeId = this.observableData.configs[0]?.id;\n }\n }\n\n changeActiveId(activeId: string | undefined): void {\n this.observableData.activeId = activeId;\n }\n\n render() {\n return <BlockContent />;\n }\n\n _middlewareChange() {\n this.observableData.forceUpdate++;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/base/middleware/action-point-runner.ts","../src/base/middleware/middleware.ts","../src/base/base-ui-configuration-service.tsx","../src/base/setting/setting.ts","../src/base/context.ts","../src/base/ui-manager/base-ui-manager.ts","../src/base/hooks/use-observer-selector.ts","../src/utils/sort.ts","../src/utils/merged-array.ts","../src/utils/runner-builder.ts","../src/utils/evaluate.ts","../src/feature/page-route/page-route-manager.interface.ts","../src/utils/init-await-lock.ts","../src/utils/is-equal.ts","../src/utils/query-stringify.ts","../src/components/lazy-load/index.tsx","../src/feature/page-route/component/page-route.module.scss","../src/feature/page-route/component/page-route.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/repeater.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/index.tsx","../src/feature/page-route/component/keep-alive-outlet/utils/cache.ts","../src/feature/page-route/component/keep-alive-outlet/utils/outlets.ts","../src/feature/page-route/component/keep-alive-outlet/index.tsx","../src/feature/page-route/component/keep-alive-outlet/single.tsx","../src/feature/page-route/page-route-manager.tsx","../src/feature/page-route/hooks/use-keep-alive-effect.ts","../src/feature/page-route/hooks/use-page-container-width.ts","../src/feature/page-route/utils/navigate.ts","../src/feature/page-route/hooks/use-navigate-factory.ts","../src/feature/block-content/block-content-manager.interface.ts","../src/feature/block-content/component/block-content.module.scss","../src/feature/block-content/component/block-content.tsx","../src/feature/block-content/block-content-manager.tsx"],"names":["Emitter","lvAssertNotHere","BaseUiConfigurationService","Disposable","IContainerService","proxy","merge","createContext","snapshot","useSnapshot","useMemo","OrderLevel","KeepAliveStatus","SharedMutex","lvAssertNever","ReactErrorBoundary","navigate","useNavigate","useContext","useEffect","Route","Routes","Navigate","memo","useRef","startTransition","Suspense","matchPath","useLocation","useOutlet","useState","OutletWrapper","useMemoizedFn","lvAssert","compile","React","useLayoutEffect","createPath","parsePath","clsx","lvAssertNotNil"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,IAAM,iBAAA,GAAN,cAAmC,QAAA,CAAS;AAAA,EAGjD,WAAA,CACmB,WAAA,EACA,KAAA,EACA,SAAA,EACjB;AACA,IAAA,KAAA,EAAM;AAJW,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAmBnB,IAAA,IAAA,CAAQ,OAAA,GAAmB,KAAA;AAC3B,IAAA,IAAA,CAAQ,KAAA,GAAQ,CAAA;AAjBd,IAAA,MAAM,UAAe,CAAA,GAAI,IAAA,KAAgB,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5D,IAAA,OAAA,CAAQ,WAAA,GAAc,WAAA;AACtB,IAAA,OAAA,CAAQ,QAAQ,KAAA,IAAS;AAAA,MACvB,IAAA,EAAM,EAAA;AAAA,MACN,IAAA,EAAM,EAAA;AAAA,MACN,OAAA,EAAS,EAAA;AAAA,MACT,MAAM;AAAC,KACT;AACA,IAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AACpB,IAAA,OAAO,MAAA,CAAO,cAAA,CAAe,OAAA,EAAS,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAC5D;AAAA,EAEA,IAAI,MAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAKA,OAAO,IAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,KAAA,GAAQ,EAAA;AAEb,IAAA,IAAI,IAAA;AACJ,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,IAAK,CAAC,KAAK,OAAA,EAAS;AACtC,MAAA,IAAA,GAAO,IAAA,CAAK,SAAQ,EAAE;AAAA,IACxB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAU;AACR,IAAA,OAAO,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA;AAAA,EAChD;AAAA,EAEQ,OAAA,CAAQ,OAAO,KAAA,EAAsB;AAC3C,IAAA,IAAI,OAAsB,MAAM;AAAA,IAEhC,CAAA;AACA,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AACd,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AAC3C,MAAA,IAAA,GAAO,MAAM;AACX,QAAA,OAAO,OAAA,CAAQ;AAAA,UACb,MAAM,MAAM;AACV,YAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,UACjB,CAAA;AAAA,UACA,UAAU,IAAA,CAAK,SAAA;AAAA,UACf,YAAY,IAAA,CAAK,KAAA;AAAA,UACjB,aAAa,IAAA,CAAK;AAAA,SACnB,CAAA;AAAA,MACH,CAAA;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;;;AC1EO,IAAM,oBAAN,MAAgE;AAAA,EAAhE,WAAA,GAAA;AACL,IAAA,IAAA,CAAiB,aAAA,uBAAgE,GAAA,EAAI;AAErF;AAAA,IAAA,IAAA,CAAiB,iBAAA,uBAA+C,GAAA,EAAI;AAEpE,IAAA,IAAA,CAAiB,mBAAA,GAAsB,IAAIA,aAAA,EAAQ;AACnD,IAAA,IAAA,CAAiB,WAAA,uBAA4C,GAAA,EAAI;AACjE,IAAA,IAAA,CAAO,kBAAA,GAAsD,KAAK,mBAAA,CAAoB,KAAA;AAAA,EAAA;AAAA,EAEtF,YAAY,OAAA,EAA8D;AACxE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AACtC,IAAA,MAAM,QAAA,GAAA,CAAY,KAAK,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA,IAAK,IACrD,GAAA,CAAI,CAAC,OAAO,IAAA,CAAK,aAAA,CAAc,IAAI,EAAE,CAAA,EAAG,OAAO,CAAA,CAC/C,MAAA,CAAO,CAAC,IAAA,KAAS,IAAI,CAAA;AACxB,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAO,IAAI,iBAAA;AAAA;AAAA,MAET,QAAA;AAAA,MACA;AAAA,QACE,MAAM,OAAA,CAAQ,OAAA;AAAA,QACd,IAAA,EAAM,QAAQ,QAAA,CAAS,EAAA;AAAA,QACvB,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEA,IAAO,KAAA,EAAsC;AAC3C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,MAAM,EAAE,CAAA;AAC/C,IAAA,IAAI,OAAA,EAAS;AAGX,MAAAC,sBAAA,CAAgB,yBAAyB,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,KAAK,CAAA;AAEtC,IAAA,KAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,KAAS;AACpC,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,EAAE,SAAS,KAAA,CAAM,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,CAAA;AACvE,MAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA,EAAG;AACvC,QAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA;AAAA,MACvC;AACA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA;AAChD,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,IACtB,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK;AAAA,MAC5B,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,QAAQ,KAAA,CAAM;AAAA,KACf,CAAA;AAGD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,YAAA,CAAa,MAAM;AACvC,MAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK;AAAA,QAC5B,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,QAAQ,KAAA,CAAM;AAAA,OACf,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,EAAA,EAAkB;AACtB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,KAAS;AACrC,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,EAAE,SAAS,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,CAAA;AACxE,MAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA,EAAG;AACvC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA;AAClD,MAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA;AAAA,QACrB,MAAA;AAAA,QACA,SAAS,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,KAAU,OAAO,EAAE;AAAA,OAChD;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK;AAAA,MAC5B,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,QAAQ,MAAA,CAAO;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AACvC,IAAA,OAAA,EAAS,OAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,EAAE,CAAA;AAAA,EAC5B;AAAA,EAEQ,UAAA,CAAW,EAAE,OAAA,EAAS,MAAA,EAAO,EAA0D;AAC7F,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,EACxC;AACF;;;ACpGsBC,kCAAA,GAAf,yCAKGC,kBAAA,CAAW;AAAA,EAWnB,WAAA,CACmB,UACqB,iBAAA,EACtC;AACA,IAAA,KAAA,EAAM;AAHW,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACqB,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA;AAAA,EAGxC;AAAA,EAbA,IAAW,OAAA,GAAoB;AAC7B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAgBA,eAAe,MAAA,EAA8B;AAC3C,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AAErC,MAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAE,cAAA,CAAe,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,cAAc,KAAA,EAA0D;AACtE,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAAA,EAClC;AAAA,EAEU,UAAA,GAAa;AAErB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,iBAAA,CAAkB,cAAA,CAAe,iBAAiB,CAAA;AAEzE,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AACF;AA3CsBD,kCAAA,GAAf,eAAA,CAAA;AAAA,EAkBF,eAAA,CAAA,CAAA,EAAAE,oBAAA;AAAA,CAAA,EAlBiBF,kCAAA,CAAA;ACJf,IAAe,cAAf,MAAmD;AAAA,EAGxD,YAAY,OAAA,EAAkC;AAC5C,IAAA,MAAM,aAAA,GAA8B;AAAA,MAClC,SAAA,EAAW,MAAA;AAAA,MACX,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,IAAA,CAAK,iBAAiBG,YAAA,CAAMC,cAAA,CAAM,aAAA,EAAe,OAAA,CAAQ,OAAO,CAAM,CAAA;AAAA,EACxE;AAAA,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,KAAK,cAAA,CAAe,SAAA;AAAA,EAC7B;AAAA,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,KAAK,cAAA,CAAe,SAAA;AAAA,EAC7B;AAAA,EAEA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAO,KAAK,cAAA,CAAe,OAAA;AAAA,EAC7B;AACF;ACpBO,IAAM,gBAAgBC,oBAAA;ACLtB,IAAe,gBAAf,MAIP;AAAA;AAAA,EAEE,YAA+B,kBAAA,EAA4D;AAA5D,IAAA,IAAA,CAAA,kBAAA,GAAA,kBAAA;AAC7B,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAAA,EACjC;AAAA,EAIO,iBAAiB,EAAA,EAAkB;AACxC,IAAAN,sBAAAA;AAAA,MACE;AAAA,KACF;AAAA,EACF;AAAA,EAKQ,yBAAA,GAA4B;AAClC,IAAA,IAAA,CAAK,kBAAA,CAAmB,kBAAA,CAAmB,CAAC,KAAA,KAAe;AACzD,MAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH;AACF;AC1BA,IAAM,eAAe,EAAC;AASf,SAAS,mBAAA,CACd,eAAA,EACA,QAAA,EACA,OAAA,GAGI,EAAC,EACiC;AACtC,EAAA,MAAM,EAAE,IAAA,GAAO,EAAC,EAAE,GAAI,OAAA;AAGtB,EAAA,MAAM,SACJ,eAAA,IAAmB,IAAA,IAAQ,OAAO,eAAA,KAAoB,WACjD,eAAA,GACD,YAAA;AACN,EAAA,MAAMO,SAAAA,GAAWC,mBAAY,MAAM,CAAA;AAEnC,EAAA,MAAM,aAAA,GAAgBC,eAAQ,MAAM;AAClC,IAAA,IAAI,eAAA,IAAmB,IAAA,IAAQ,OAAO,eAAA,KAAoB,QAAA,EAAU;AAClE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,SAASF,SAA0B,CAAA;AAAA,EAC5C,GAAG,CAAC,eAAA,EAAiBA,SAAAA,EAAU,GAAG,IAAI,CAAC,CAAA;AAEvC,EAAA,OAAO,aAAA;AACT;;;ACtCO,IAAK,UAAA,qBAAAG,WAAAA,KAAL;AACL,EAAAA,YAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,YAAA,KAAA,CAAA,GAAM,KAAA;AAHI,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAsBL,SAAS,kBAAA,CAAyC;AAAA,EACvD,IAAA;AAAA,EACA,MAAA,GAAS,CAAC,IAAA,KAAS;AACrB,CAAA,EAGa;AACX,EAAA,OAAO,IAAA,CACJ,IAAA,CAAK,CAAC,CAAA,EAAM,CAAA,KAAS;AACpB,IAAA,MAAM,WAEF,EAAE,IAAA,EAAM,GAAG,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,EAAE;AAClC,IAAA,MAAM,EAAE,UAAA,EAAY,KAAA,GAAQ,WAAW,KAAA,EAAO,SAAA,GAAY,GAAE,GAAI,CAAA;AAChE,IAAA,MAAM,EAAE,UAAA,EAAY,KAAA,GAAQ,WAAW,KAAA,EAAO,SAAA,GAAY,GAAE,GAAI,CAAA;AAEhE,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,OAAO,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA,CAAS,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,SAAA,GAAY,SAAA;AAAA,EACrB,CAAC,CAAA,CACA,GAAA,CAAI,MAAM,CAAA;AACf;;;ACtCO,IAAM,cAAA,GAAiB,CAAuC,OAAA,KAA+B;AAClG,EAAA,MAAM,YAAwB,EAAC;AAC/B,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,SAAA,KAAc;AACzB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACrD,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,SAAA,CAAU,GAAG,CAAA,EAAG,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,OAAO,SAAA,EAAW;AAAA,UACvB,CAAC,GAAG,GAAG;AAAA,SACR,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,SAAA;AACT;;;AClBO,SAAS,aAAA,CAAc;AAAA,EAC5B,UAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,MAAA,GAAS,WAAW,WAAA,CAAY;AAAA,IACpC,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO,MAAA;AACT;;;ACRO,SAAS,QAAA,CAAY,MAAA,EAAa,YAAA,EAAA,GAAoB,IAAA,EAAgB;AAC3E,EAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAChC,IAAA,OAAO,MAAA,CAAO,GAAG,IAAI,CAAA,IAAK,YAAA;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA,IAAU,YAAA;AACnB;ACfO,IAAM,sBAAA,GAAyB;AAkB/B,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AAEL,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AAEZ,EAAAA,iBAAA,aAAA,CAAA,GAAc,aAAA;AAJJ,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AClBL,IAAM,gBAAN,MAAoB;AAAA,EAGzB,WAAA,GAAc;AAFd,IAAA,IAAA,CAAiB,MAAA,GAAS,IAAIC,gBAAA,EAAY;AAIxC,IAAA,KAAK,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAA,GAAuB;AACzB,IAAA,OAAO,CAAC,IAAA,CAAK,MAAA,CAAO,QAAA,EAAS;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAiB;AACtB,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAO,MAAA,EAAO;AAAA,EACrB;AACF,CAAA;;;ACzBO,IAAM,UAAA,GAAa,CAAC,GAAA,EAAa,QAAA,KAAqB,GAAA,KAAQ,QAAA;ACJ9D,IAAM,cAAA,GAAiB,CAAC,QAAA,KAAqC;AAClE,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAAC,oBAAA,CAAc,QAAQ,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,OAAO,OAAA,CAAQ,QAAQ,EAC3B,GAAA,CAAI,CAAC,SAAS,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,IAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,CAAA,CACrC,KAAK,GAAG,CAAA;AACb,CAAA;ACoBO,IAAM,gBAAwC,CAAC,EAAE,QAAA,EAAU,QAAA,EAAU,SAAQ,KAAM;AACxF,EAAA,uBACE,KAAA,CAAA,aAAA,CAACC,oCAAmB,QAAA,EAAU,QAAA,wCAAa,KAAA,EAAA,IAAI,CAAA,EAAI,WAChD,QACH,CAAA;AAEJ,CAAA;;;ACnCA,IAAA,yBAAA,GAAA,EAAA;;;ACiBO,IAAM,SAAA,GAA4B,CAAC,EAAE,MAAA,EAAO,KAAM;AACvD,EAAA,MAAMC,YAAWC,0BAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIC,iBAAA,CAA+C,aAAa,CAAA;AAE/F,EAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,sBAAA,CAAuB,OAAA,EAAS,CAAC,OAAA,KAAY;AACjF,IAAA,OAAO;AAAA,MACL,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,wBAAwB,OAAA,CAAQ;AAAA,KAClC;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAc,mBAAA;AAAA,IAClB,sBAAA,CAAuB,UAAU,sBAAsB,CAAA;AAAA,IACvD,CAAC,OAAA,KAAY;AACX,MAAA,OAAO,QAAQ,cAAA,CAAe,OAAA;AAAA,IAChC;AAAA,GACF;AAGA,EAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,sBAAA,CAAuB,OAAA,EAAS,CAAC,OAAA,KAAY;AACvF,IAAA,OAAO,SAAS,cAAA,EAAgB,sBAAA;AAAA,EAClC,CAAC,CAAA;AAED,EAAA,MAAM,aAAA,GAAgBR,eAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,iBAAiB,OAAO,MAAA;AAC7B,IAAA,OAAO,YAAY,IAAA,CAAK,CAAC,EAAE,EAAA,EAAG,KAAM,OAAO,eAAe,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,eAAA,EAAiB,WAAW,CAAC,CAAA;AAEjC,EAAAS,gBAAA,CAAU,MAAM;AACd,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA;AAC5E,IAAA,MAAM,EAAE,wBAAuB,GAAI,YAAA;AACnC,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAAH,SAAAA,CAAS,sBAAA,CAAuB,IAAA,EAAM,sBAAA,CAAuB,OAAO,CAAA;AAAA,IACtE;AACA,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,kBAAA,CAAmB,CAAC,IAAI,OAAA,KAAY;AAC/D,MAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AAC1B,QAAAA,SAAAA,CAAS,IAAI,OAAO,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAAA,UAAS,EAAE,CAAA;AAAA,MACb;AAAA,IACF,CAAC,CAAA;AACD,IAAA,YAAA,CAAa,QAAA,EAAS;AAEtB,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,IAClB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASN,cAAAA;AAAA,IACb,MACE,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,qBACf,KAAA,CAAA,aAAA;AAAA,MAACU,oBAAA;AAAA,MAAA;AAAA,QACC,KAAK,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,CAAA;AAAA,QACnC,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,yBACE,KAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAU,IAAA,CAAK,gCAAgB,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,IAAI,CAAA,EAAA,EAChD,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,QAAA,QAAgB,IACxD;AAAA;AAAA,KAGL,CAAA;AAAA,IACH,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,SAAA,CAAU,WAAW,SAAA,EAAW,yBAAA,CAAO,IAAA,EAAA,kBAC9C,KAAA,CAAA,aAAA,CAACC,qBAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAACD,oBAAA,EAAA,EAAM,OAAA,EAAS,UAAS,MAAO,CAAA,EAC/B,aAAA,mBAAgB,KAAA,CAAA,aAAA,CAACA,oBAAA,EAAA,EAAM,IAAA,EAAK,GAAA,EAAI,OAAA,sCAAUE,uBAAA,EAAA,EAAS,EAAA,EAAI,aAAA,CAAc,IAAA,EAAM,OAAA,EAAO,IAAA,EAAC,CAAA,EAAI,CAAA,GAAK,IAC/F,CACF,CAAA;AAEJ,CAAA;ACxFO,IAAM,QAAA,GAGRC,WAAA,CAAK,CAAC,KAAA,KAAU;AACnB,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,KAAA;AAC3B,EAAA,MAAM,aAAaC,aAAA,EAAmB;AAEtC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAAC,sBAAA,CAAgB,MAAM;AACpB,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAa,UAAA,CAAW,UAAU,OAAQ,CAAA;AAAA,IACrE,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAAA,sBAAA,CAAgB,MAAM;AACpB,MAAA,UAAA,CAAW,OAAA,IAAU;AACrB,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,iEAAU,QAAS,CAAA;AACrB,CAAC,CAAA;;;ACfM,IAAM,SAAA,GAAgCF,WAAAA,CAAK,CAAC,KAAA,KAAU;AAC3D,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAS,GAAI,KAAA;AAErC,EAAA,uBACE,KAAA,CAAA,aAAA,CAACG,iBAAA,EAAS,QAAA,EAAA,sCACP,QAAA,EAAA,EAAS,IAAA,EAAA,EAAa,QAAS,CAClC,CAAA;AAEJ,CAAC,CAAA;ACNM,IAAM,WAAA,GAAc,CAAC,YAAA,EAAkC,QAAA,EAAkB,UAAA,KAAwB;AACtG,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,IAAA,MAAM,OAAA,GAAUC,wBAAA,CAAU,KAAA,CAAM,IAAA,EAAM,QAAQ,CAAA;AAC9C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,SAAA,GAAY,QAAA,CAAkB,KAAA,CAAM,WAAA,EAAa,KAAK,CAAA;AAC5D,MAAA,MAAM,qBAAqB,OAAA,CAAQ,QAAA,CAAiC,KAAA,CAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AACxF,MAAA,MAAM,OAAA,GAAU,CAAC,UAAA,GAAa,IAAA,GAAO,eAAe,KAAA,CAAM,WAAA;AAC1D,MAAA,OAAO,aAAa,kBAAA,IAAsB,OAAA;AAAA,IAC5C;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT,CAAA;;;ACVO,IAAM,eAAA,GAAkB,CAC7B,YAAA,EACA,QAAA,EACA,OAAA,KACG;AACH,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,UAAA,KAAe;AAE9B,IAAA,MAAM,WAAA,GAAc,EAClB,UAAA,CAAW,WAAA,IAAe,YAAY,YAAA,EAAc,UAAA,CAAW,QAAA,EAAU,UAAA,EAAY,UAAU,CAAA,CAAA;AAEjG,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,UAAA,CAAW,MAAA,GAAS,IAAA;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,aAAa,OAAA,CAAQ,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,MAAM,CAAA;AACvD,EAAA,OAAO,UAAA;AACT,CAAA;;;ACTA,IAAM,gBAKD,CAAC,EAAE,SAAS,UAAA,EAAY,IAAA,EAAM,UAAS,KAAM;AAChD,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIT,iBAAAA,CAA+C,aAAa,CAAA;AAE/F,EAAAC,iBAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,kBAAA,CAAmB,IAAI,CAAA;AAAA,EAClF,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,UAAU,CAAC,CAAA;AAE9B,EAAA,iEAAU,QAAS,CAAA;AACrB,CAAA;AAMe,SAAR,eAAA,CAAiC,EAAE,QAAA,EAAU,YAAA,EAAa,EAAoB;AACnF,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAID,iBAAAA,CAA+C,aAAa,CAAA;AAC/F,EAAA,MAAM,WAAWU,0BAAA,EAAY;AAC7B,EAAA,MAAM,SAASC,wBAAA,EAAU;AACzB,EAAA,MAAM,OAAA,GAAUL,cAAO,IAAI,CAAA;AAC3B,EAAA,MAAM,yBAAA,GAA4B,CAAC,QAAA,KAAqB;AACtD,IAAA,sBAAA,CAAuB,UAAU,sBAAsB,CAAA,CAAE,sBAAA,CAAuB,QAAA,EAAU,SAAS,KAAK,CAAA;AAAA,EAC1G,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,WAAA,KAAoC;AAEvD,IAAA,yBAAA,CAA0B,SAAS,QAAQ,CAAA;AAE3C,IAAA,MAAM,gBAAA,GAAmB,eAAA,CAAgB,YAAA,EAAc,QAAA,CAAS,UAAU,WAAW,CAAA;AAErF,IAAA,IAAI,MAAA,GAAS,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,KAAM,WAAW,CAAA,CAAE,QAAA,EAAU,QAAA,CAAS,QAAQ,CAAC,CAAA;AACnF,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,YAAA,EAAc,QAAA,CAAS,QAAQ,CAAA;AAC/D,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,CAAO,CAAC,MAAM,OAAA,KAAY;AACxD,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,CAAC,QAAQ,WAAA,EAAa;AACxB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OACE,WAAA,CAAY,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,QAAA,CAAS,QAAQ,CAAA,EAAG,UAAA,KAAe,OAAA,CAAQ,WAAA;AAAA,IAE5F,GAAG,IAAI,CAAA;AAEP,IAAA,IAAI,MAAA,IAAU,eAAe,UAAA,EAAY;AACvC,MAAA,OAAO,gBAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,oBAAA;AAAA,QACrE,QAAA,CAAS;AAAA,OACX;AACA,MAAA,MAAA,GAAS;AAAA,QACP,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,YAAY,KAAA,EAAO,WAAA;AAAA,QACnB,WAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,gBAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIM,eAAA;AAAA;AAAA,IAE5B,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,sBAAA,GACrD,EAAC,GACD,OAAA,CAAQ,OAAA,GACN,WAAA,CAAY,EAAE,IACd;AAAC,GACT;AACA,EAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAElB,EAAAX,iBAAU,MAAM;AACd,IAAA,UAAA,CAAW,WAAW,CAAA;AAAA,EAExB,CAAA,EAAG,CAAC,QAAA,CAAS,QAAA,EAAU,YAAY,CAAC,CAAA;AAEpC,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EACG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,IAAA,MAAM,iBAAiB,UAAA,CAAW,CAAA,CAAE,UAAU,QAAA,CAAS,QAAQ,IAAI,SAAA,GAAY,QAAA;AAC/E,IAAA,uBACE,KAAA,CAAA,aAAA,CAAC,aAAU,GAAA,EAAK,CAAA,CAAE,KAAK,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,QAAA,IAAY,IAAA,EAAA,kBACjE,KAAA,CAAA,aAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,MAAM,QAAA,CAAS,QAAA;AAAA,QACf,SAAS,cAAA,KAAmB;AAAA,OAAA;AAAA,MAE3B,CAAA,CAAE;AAAA,KAEP,CAAA;AAAA,EAEJ,CAAC,CACH,CAAA;AAEJ;ACnGA,IAAMY,iBAKD,CAAC,EAAE,SAAS,UAAA,EAAY,IAAA,EAAM,UAAS,KAAM;AAChD,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIb,iBAAAA,CAA+C,aAAa,CAAA;AAE/F,EAAAC,iBAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,kBAAA,CAAmB,IAAI,CAAA;AAAA,EAClF,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,UAAU,CAAC,CAAA;AAE9B,EAAA,iEAAU,QAAS,CAAA;AACrB,CAAA;AAMe,SAAR,qBAAA,CAAuC,EAAE,QAAA,EAAU,YAAA,EAAa,EAAoB;AACzF,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAID,iBAAAA,CAA+C,aAAa,CAAA;AAC/F,EAAA,MAAM,WAAWU,0BAAAA,EAAY;AAC7B,EAAA,MAAM,SAASC,wBAAAA,EAAU;AACzB,EAAA,MAAM,yBAAA,GAA4B,CAAC,QAAA,KAAqB;AACtD,IAAA,sBAAA,CAAuB,UAAU,sBAAsB,CAAA,CAAE,sBAAA,CAAuB,QAAA,EAAU,SAAS,KAAK,CAAA;AAAA,EAC1G,CAAA;AAEA,EAAA,MAAM,WAAA,GAAcG,oBAAA,CAAc,CAAC,WAAA,KAAoC;AAErE,IAAA,yBAAA,CAA0B,SAAS,QAAQ,CAAA;AAE3C,IAAA,MAAM,gBAAA,GAAmB,eAAA,CAAgB,YAAA,EAAc,QAAA,CAAS,UAAU,WAAW,CAAA;AAErF,IAAA,IAAI,MAAA,GAAS,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,KAAM,WAAW,CAAA,CAAE,QAAA,EAAU,QAAA,CAAS,QAAQ,CAAC,CAAA;AACnF,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,YAAA,EAAc,QAAA,CAAS,QAAQ,CAAA;AAC/D,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,CAAO,CAAC,MAAM,OAAA,KAAY;AACxD,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,CAAC,QAAQ,WAAA,EAAa;AACxB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OACE,WAAA,CAAY,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,QAAA,CAAS,QAAQ,CAAA,EAAG,UAAA,KAAe,OAAA,CAAQ,WAAA;AAAA,IAE5F,GAAG,IAAI,CAAA;AAEP,IAAA,IAAI,MAAA,IAAU,eAAe,UAAA,EAAY;AACvC,MAAA,OAAO,gBAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,oBAAA;AAAA,QACrE,QAAA,CAAS;AAAA,OACX;AACA,MAAA,MAAA,GAAS;AAAA,QACP,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,YAAY,KAAA,EAAO,WAAA;AAAA,QACnB,WAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,gBAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAAUtB,eAAQ,MAAM;AAC5B,IAAA,IAAI,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,sBAAA,EAAwB;AACnF,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO,WAAA,CAAY,EAAE,CAAA;AAAA,EACvB,CAAA,EAAG;AAAA,IACD,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,CAAE,sBAAA;AAAA,IACzD,QAAA,CAAS,QAAA;AAAA,IACT,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EACG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,IAAA,MAAM,iBAAiB,UAAA,CAAW,CAAA,CAAE,UAAU,QAAA,CAAS,QAAQ,IAAI,SAAA,GAAY,QAAA;AAC/E,IAAA,uBACE,KAAA,CAAA,aAAA,CAAC,aAAU,GAAA,EAAK,CAAA,CAAE,KAAK,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,QAAA,IAAY,IAAA,EAAA,kBACjE,KAAA,CAAA,aAAA;AAAA,MAACqB,cAAAA;AAAA,MAAA;AAAA,QACC,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,MAAM,QAAA,CAAS,QAAA;AAAA,QACf,SAAS,cAAA,KAAmB;AAAA,OAAA;AAAA,MAE3B,CAAA,CAAE;AAAA,KAEP,CAAA;AAAA,EAEJ,CAAC,CACH,CAAA;AAEJ;;;ACvFO,IAAM,gBAAA,GAAN,cACG,aAAA,CAEV;AAAA,EAHO,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAIL,IAAA,IAAA,CAAO,iBAA2C1B,YAAAA,CAAM;AAAA,MACtD,YAAA,EAAc,MAAA;AAAA,MACd,SAAS,EAAC;AAAA,MACV,oBAAoB,EAAC;AAAA,MACrB,eAAe,EAAC;AAAA,MAChB,cAAA,EAAgB;AAAA,KACjB,CAAA;AAED,IAAA,IAAA,CAAiB,OAAA,GAAyB,IAAI,aAAA,EAAc;AAO5D,IAAA,IAAA,CAAiB,mBAAA,GAAsB,IAAIL,aAAAA,EAAuD;AAClG,IAAA,IAAA,CAAO,kBAAA,GAAqB,KAAK,mBAAA,CAAoB,KAAA;AACrD,IAAA,IAAA,CAAiB,kBAAA,GAAqB,IAAIA,aAAAA,EAA+B;AACzE,IAAA,IAAA,CAAO,iBAAA,GAAoB,KAAK,kBAAA,CAAmB,KAAA;AACnD,IAAA,IAAA,CAAiB,eAAA,GAAkB,IAAIA,aAAAA,EAA4B;AACnE,IAAA,IAAA,CAAO,cAAA,GAAiB,KAAK,eAAA,CAAgB,KAAA;AAE7C,IAAA,IAAA,CAAiB,2BAAA,GAA8B,IAAIA,aAAAA,EAAY;AAC/D,IAAA,IAAA,CAAO,0BAAA,GAA6B,KAAK,2BAAA,CAA4B,KAAA;AAGrE;AAAA,IAAA,IAAA,CAAiB,oBAAA,GAAuB,IAAIA,aAAAA,EAA8B;AAC1E,IAAA,IAAA,CAAO,mBAAA,GAAsB,KAAK,oBAAA,CAAqB,KAAA;AAAA,EAAA;AAAA,EAEvD,IAAI,sBAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,uBAAA;AAAA,EACd;AAAA,EAEA,IAAI,YAAA,GAA6C;AAC/C,IAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,cAAA,CAAe,YAAY,CAAA;AAAA,EACnE;AAAA,EAEA,eAAe,OAAA,EAA6B;AAC1C,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC1B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA;AACjF,MAAA,IAAI,QAAQ,EAAA,EAAI;AAEd,QAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA,GAAIM,cAAAA,CAAM,KAAK,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA,EAAG,MAAA,EAAQ;AAAA,UACjF,WAAA,EAAa,KAAK,GAAA;AAAI,SACvB,CAAA;AAAA,MACH,CAAA,MAAO;AAEL,QAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,IAAA;AAAA,UAC1BA,cAAAA,CAAM,EAAC,EAAG,MAAA,EAAQ;AAAA,YAChB,WAAA,EAAa;AAAA,WACd;AAAA,SACH;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,qBAAqB,IAAA,CAAKE,eAAA,CAAS,IAAA,CAAK,cAAA,CAAe,OAAO,CAAuB,CAAA;AAAA,EAC5F;AAAA,EAEO,gBAAgB,IAAA,EAAc;AACnC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,MAAA;AACvD,IAAA,IAAI,KAAK,cAAA,CAAe,aAAA,CAAc,YAAA,GAAe,CAAC,MAAM,IAAA,EAAM;AAChE,MAAA,IAAA,CAAK,cAAA,CAAe,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,eAAe,YAAY,CAAA;AAC3E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,IAAI,CAAA;AAC/C,IAAA,IAAI,QAAA,EAAU,EAAA,KAAO,QAAA,EAAU,EAAA,EAAI;AACjC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,EAAU,cAAA,GAAiB,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,MAC9C;AACA,MAAA,QAAA,EAAU,cAAA,GAAiB,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAA,CAAK,eAAe,YAAA,GAAe,IAAA;AAAA,EACrC;AAAA,EAEO,QAAA,CAAS,IAAY,OAAA,EAA4B;AACtD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,EAAA,EAAI,OAAO,CAAA;AAG1C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAAyB,eAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,MAAM,SAAS,aAAA,CAAc;AAAA,MAC3B,YAAY,IAAA,CAAK,kBAAA;AAAA,MACjB,OAAA,EAAS,sBAAA;AAAA,MACT,MAAA,EAAQ,yBAAA;AAAA,MACR,QAAA,EAAU,EAAE,EAAA,EAAI,IAAA;AAAK,KACtB,CAAA;AACD,IAAA,MAAM,YAAA,GAAe,OAAO,GAAA,EAAI;AAEhC,IAAA,IAAI,MAAA,CAAO,UAAU,YAAA,EAAc;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,OAAO,CAAA;AAAA,EACpC;AAAA,EAEQ,eAAA,CAAgB,MAAc,OAAA,EAA4B;AAChE,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa;AAC7B,MAAA,IAAA,CAAK,uBAAA,GAA0B;AAAA,QAC7B,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA,EAEO,qBAAqB,KAAA,EAAe;AACzC,IAAA,IAAA,CAAK,eAAe,cAAA,GAAiB,KAAA;AAAA,EACvC;AAAA,EAEO,QAAA,GAAW;AAChB,IAAA,IAAI,IAAA,CAAK,QAAQ,WAAA,EAAa;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,uBAAA,GAA0B,MAAA;AAC/B,IAAA,IAAA,CAAK,QAAQ,QAAA,EAAS;AAAA,EACxB;AAAA,EAEO,YAAA,CAAa,KAAK,EAAA,EAAI;AAC3B,IAAA,IAAA,CAAK,mBAAA,CAAoB,KAAK,EAAE,CAAA;AAAA,EAClC;AAAA,EAEO,YAAA,CAAa,IAAY,OAAA,EAAoD;AAClF,IAAA,MAAM,MAAA,GAAS,KAAK,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,EAAE,CAAA;AACxE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAAA,eAAA,CAAS,MAAM,CAAA;AAAA,IACjB;AAEA,IAAA,MAAM,QAAA,GAAWC,oBAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AACpC,IAAA,IAAI,MAAA,GAAS,QAAA,CAAS,OAAA,EAAS,MAAA,IAAU,EAAE,CAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,EAAS,KAAA,KAAU,QAAA,GAAW,OAAA,CAAQ,KAAA,GAAQ,cAAA,CAAe,OAAA,EAAS,KAAA,IAAS,EAAE,CAAA;AACtG,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAA,IAAU,MAAM,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA,GAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,sBAAA,CAAuB,kBAA0B,aAAA,EAAoB;AAC1E,IAAA,IACE,gBAAA,KAAqB,IAAA,CAAK,oBAAA,EAAsB,QAAA,IAChD,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,kBAAkB,CAAA,CAAE,MAAA,GAAS,CAAA,EAC/D;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,eAAe,kBAAkB,CAAA;AAE3E,IAAA,KAAA,MAAW,iBAAiB,gBAAA,EAAkB;AAC5C,MAAA,IAAI,UAAA,CAAW,aAAA,EAAe,gBAAgB,CAAA,EAAG;AAC/C,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,uBAAuB,aAAA,EAAA,aAAA,mBAA0C;AAAA,IACxE;AAEA,IAAA,IAAA,CAAK,sBAAA,CAAuB,+CAA6C,aAAa,CAAA;AAAA,EACxF;AAAA,EAEQ,sBAAA,CAAuB,QAAA,EAAkB,MAAA,EAAyB,aAAA,EAAqB;AAC7F,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,cAAA,CAAe,kBAAA,CAAmB,QAAQ,CAAA;AACrE,IAAA,MAAM,aAAa,aAAA,EAAe,MAAA;AAClC,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,CAAC,IAAA,KAASP,wBAAAA,CAAU,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAC,CAAA;AACjG,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,QAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS,iBAAiB,EAAA,IAAM,WAAA;AAAA,MAChC;AAAA,KACF;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,kBAAA,CAAmB,QAAQ,CAAA,GAAI,YAAA;AACnD,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,IAAA,CAAK,kBAAA,CAAmB,KAAK,YAAY,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,IAAW,oBAAA,GAAuB;AAChC,IAAA,MAAM,EAAE,kBAAA,EAAoB,YAAA,GAAe,EAAA,KAAO,IAAA,CAAK,cAAA;AACvD,IAAA,OAAO,MAAA,CAAO,OAAO,kBAAkB,CAAA,CAAE,KAAK,CAAC,IAAA,KAAS,KAAK,MAAA,KAAA,WAAA,iBAAoC;AAAA,EACnG;AAAA,EAEO,mBAAmB,MAAA,EAAyC;AACjE,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA;AACpD,MAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,WAAA,GAAenB,eAAA,CAAS,WAAW,IAAyB,WAAY,CAAA;AAAA,IACpG,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEO,qBAAqB,IAAA,EAAwD;AAClF,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,CAAC,SAASmB,wBAAAA,CAAU,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EAC9E;AAAA,EAEO,OAAO,OAAA,EAAmD;AAC/D,IAAA,uBAAOQ,uBAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAQ,QAAQ,MAAA,EAAQ,CAAA;AAAA,EAC5C;AAAA,EAEO,aAAa,OAAA,EAAkC;AACpD,IAAA,uBAAOA,uBAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,OAAA,EAAS,CAAA;AAAA,EACvC;AAAA,EAEO,mBAAmB,OAAA,EAAkC;AAC1D,IAAA,uBAAOA,uBAAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,EAAuB,GAAG,OAAA,EAAS,CAAA;AAAA,EAC7C;AAAA,EAEA,kBAAkB,KAAA,EAA6C;AAAA,EAE/D;AACF;AC9NO,IAAM,kBAAA,GAAqB,CAAC,EAAA,KAAwB;AACzD,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIjB,iBAAAA,CAA+C,aAAa,CAAA;AAC/F,EAAA,MAAM,WAAWU,0BAAAA,EAAY;AAC7B,EAAA,MAAM,sBAAA,GAAyBJ,aAAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AACvD,EAAA,MAAM,SAAA,GAAYA,cAAmC,IAAI,CAAA;AAEzD,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAA+B;AACzD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,sBAAA,CAAuB,OAAA,EAAS;AACpD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,MAAA,KAAA,WAAA,kBAAsC;AAC7C,MAAA,SAAA,CAAU,UAAU,EAAA,IAAK;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,OAAA,IAAU;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAAL,iBAAU,MAAM;AACd,IAAA,MAAM,gBAAA,GAAmB,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA;AAEhF,IAAA,kBAAA,CAAmB,iBAAiB,oBAAoB,CAAA;AAExD,IAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,iBAAA,CAAkB,CAAC,IAAA,KAAS;AAC/D,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,IACzB,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,OAAA,EAAQ;AACpB,MAAA,SAAA,CAAU,OAAA,IAAU;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAEO,IAAM,wBAAA,GAA2B,CAAC,EAAA,KAAwB;AAC/D,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAID,iBAAAA,CAA+C,aAAa,CAAA;AAC/F,EAAA,MAAM,WAAWU,0BAAAA,EAAY;AAC7B,EAAA,MAAM,sBAAA,GAAyBJ,aAAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AACvD,EAAA,MAAM,SAAA,GAAYA,cAAmC,IAAI,CAAA;AAEzD,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAA+B;AACzD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,sBAAA,CAAuB,OAAA,EAAS;AACpD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,MAAA,KAAA,WAAA,kBAAsC;AAC7C,MAAA,SAAA,CAAU,UAAU,EAAA,IAAK;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,OAAA,IAAU;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAAY,sBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,gBAAA,GAAmB,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA;AAEhF,IAAA,kBAAA,CAAmB,iBAAiB,oBAAoB,CAAA;AAExD,IAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,iBAAA,CAAkB,CAAC,IAAA,KAAS;AAC/D,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,IACzB,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,CAAY,OAAA,EAAQ;AACpB,MAAA,SAAA,CAAU,OAAA,IAAU;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;ACzFO,IAAM,wBAAwB,MAAM;AACzC,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIlB,iBAAAA,CAA+C,aAAa,CAAA;AAE/F,EAAA,OAAO,oBAAoB,sBAAA,CAAuB,SAAA,CAAU,sBAAsB,CAAA,EAAG,CAAC,OAAA,KAAY;AAChG,IAAA,OAAO,QAAQ,cAAA,CAAe,cAAA;AAAA,EAChC,CAAC,CAAA;AACH;ACRO,SAAS,QAAA,CACd,uBAAA,EACA,EAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,gBAAA,GAAmB,uBAAA,CAAwB,SAAA,CAAU,sBAAsB,CAAA;AAEjF,EAAA,QAAQ,IAAA;AAAM,IACZ,MAAK,OAAO,EAAA,KAAO,QAAA,IAAY,OAAO,EAAA,KAAO,QAAA;AAC3C,MAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AAC1B,QAAA,EAAA,GAAKmB,0BAAW,EAAE,CAAA;AAAA,MACpB;AACA,MAAA,MAAM,IAAA,GAAOC,yBAAU,EAAE,CAAA;AACzB,MAAA,MAAM,YAAA,GAAe,iBAAiB,cAAA,CAAe,OAAA;AACrD,MAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,CAAK,CAAC,IAAA,KAASX,wBAAAA,CAAU,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,QAAA,IAAY,EAAE,CAAC,CAAA;AACxF,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,MAAA,CAAO,OAAA,CAAQA,wBAAAA,CAAU,SAAA,CAAU,MAAM,IAAA,EAAM,QAAA,IAAY,EAAE,CAAA,EAAG,UAAU,EAAE,EAAE,MAAA,CAE7F,CAAC,KAAK,GAAA,KAAQ;AACd,QAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,GAAA;AACrB,QAAA,IAAI,CAAC,GAAA,IAAO,CAAC,KAAA,EAAO;AAClB,UAAA,OAAO,GAAA;AAAA,QACT;AACA,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AACX,QAAA,OAAO,GAAA;AAAA,MACT,CAAA,EAAG,EAAE,CAAA;AAEL,MAAA,gBAAA,CAAiB,QAAA,CAAS,UAAU,EAAA,EAAI;AAAA,QACtC,OAAO,IAAA,CAAK,MAAA;AAAA,QACZ,MAAA,EAAQ,QAAA;AAAA,QACR,GAAG;AAAA,OACJ,CAAA;AACD,MAAA;AAAA,IACF,KAAK,OAAO,EAAA,KAAO,QAAA;AACjB,MAAA,gBAAA,CAAiB,aAAa,EAAE,CAAA;AAEhC,MAAA;AACF;AAEJ;AC1CO,IAAM,kBAAA,GAAqB,CAChC,sBAAA,KACqB;AACrB,EAAA,MAAMV,YAAAA,GAAce,oBAAAA,CAAc,CAAC,EAAA,EAAiB,OAAA,KAA8B;AAChF,IAAA,QAAA,CAAS,sBAAA,EAAwB,IAAI,OAAO,CAAA;AAAA,EAC9C,CAAC,CAAA;AACD,EAAA,OAAOf,YAAAA;AACT;;;ACTO,IAAM,yBAAA,GAA4B;;;ACHzC,IAAA,4BAAA,GAAA,EAAA;;;ACWA,IAAM,qBAAA,GAAkCkB,uBAAAA,CAAM,IAAA,CAAK,MAAM;AACvD,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIjB,iBAAAA,CAA+C,aAAa,CAAA;AAE/F,EAAA,MAAM,wBAAA,GAA2B,mBAAA;AAAA,IAC/B,sBAAA,CAAuB,UAAU,yBAAyB,CAAA;AAAA,IAC1D,CAAC,OAAA,KAAY;AACX,MAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAQ,GAAI,OAAA,CAAQ,cAAA;AACtC,MAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,IACpD;AAAA,GACF;AAGA,EAAA,MAAM,YAAA,GAAeM,cAAuB,IAAI,CAAA;AAEhD,EAAA,uBACEW,uBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAWI,sBAAK,4BAAA,CAAM,SAAA,EAAW,SAAS,wBAAA,EAA0B,SAAA,EAAW,EAAE,CAAC;AAAA,KAAA;AAAA,IAEjF,QAAA,CAAS,wBAAA,EAA0B,OAAA,EAAS,IAAI;AAAA,GACnD;AAEJ,CAAC,CAAA;AAEM,IAAM,YAAA,GAAe,qBAAA;;;ACvBrB,IAAM,mBAAA,GAAN,cACG,aAAA,CAEV;AAAA,EAHO,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAIL,IAAA,IAAA,CAAO,iBAA8ClC,YAAAA,CAAM;AAAA,MACzD,WAAA,EAAa,CAAA;AAAA,MACb,QAAA,EAAU,MAAA;AAAA,MACV,SAAS;AAAC,KACX,CAAA;AAAA,EAAA;AAAA,EAED,eAAe,OAAA,EAAgC;AAC7C,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC1B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA;AACjF,MAAA,IAAI,QAAQ,EAAA,EAAI;AAEd,QAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA,GAAIC,cAAAA,CAAM,KAAK,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA,EAAG,MAAM,CAAA;AAAA,MACnF,CAAA,MAAO;AAEL,QAAAkC,qBAAA;AAAA,UACE,MAAA,CAAO,EAAA;AAAA,UACP,CAAA,4EAAA;AAAA,SACF;AACA,QAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,MACzC;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,IACE,EACE,IAAA,CAAK,cAAA,CAAe,QAAA,IACpB,KAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA,CAAA,EAErF;AAEA,MAAA,IAAA,CAAK,eAAe,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAA;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,eAAe,QAAA,EAAoC;AACjD,IAAA,IAAA,CAAK,eAAe,QAAA,GAAW,QAAA;AAAA,EACjC;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,2CAAQ,YAAA,EAAA,IAAa,CAAA;AAAA,EACvB;AAAA,EAEA,iBAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,cAAA,CAAe,WAAA,EAAA;AAAA,EACtB;AACF","file":"index.cjs","sourcesContent":["import type { IUseMiddlewareOptions } from './middleware.interface';\n\ntype IActionPointInfo = IUseMiddlewareOptions<any, any>['actionInfo'];\n\ntype INextFunction = (...args: any[]) => any;\n\n/**\n * 停止中间件队列执行的方法\n *\n * @public\n */\nexport type IStopAction = () => void;\n\n/**\n * 中间件执行信息\n * - 方法名\n * - 中间件类型\n * - 执行状态\n * - 耗时\n */\ntype DebugInfo = [string, string, string, number];\n\n/**\n * @internal\n */\nexport class ActionPointRunner<T> extends Function {\n private _rawArguments: any;\n\n constructor(\n private readonly middlewares: ((...args: any[]) => any)[],\n private readonly point: IActionPointInfo,\n private readonly _uiConfig: T,\n ) {\n super();\n const closure: any = (...args: any[]) => closure.run(...args);\n closure.middlewares = middlewares;\n closure.point = point ?? {\n name: '',\n from: '',\n trigger: '',\n path: [],\n };\n closure._uiConfig = _uiConfig;\n return Object.setPrototypeOf(closure, new.target.prototype);\n }\n\n get isStop(): boolean {\n return this._isStop;\n }\n\n private _isStop: boolean = false;\n private index = 0;\n\n run(...args: unknown[]) {\n this._rawArguments = args;\n this.index = -1;\n\n let data;\n while (this.hasNext() && !this._isStop) {\n data = this.getNext()();\n }\n return data;\n }\n\n hasNext() {\n return this.index < this.middlewares.length - 1;\n }\n\n private getNext(skip = false): INextFunction {\n let next: INextFunction = () => {\n /* do nothing*/\n };\n if (this.hasNext()) {\n this.index += 1;\n const handler = this.middlewares[this.index];\n next = () => {\n return handler({\n stop: () => {\n this._isStop = true;\n },\n uiConfig: this._uiConfig,\n actionInfo: this.point,\n triggerArgs: this._rawArguments,\n });\n };\n }\n return next;\n }\n}\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\n\nimport {\n type IUseMiddlewareProps,\n type IMiddlewareManager,\n type IBuildRunnerProps,\n type IMiddlewareChange,\n} from './middleware.interface';\nimport type { Event } from '@zk-tech/bedrock/event';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport type { IDisposable } from '@zk-tech/bedrock/dispose';\nimport { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport { ActionPointRunner } from './action-point-runner';\n\nexport class MiddlewareManager implements IMiddlewareManager<any, any> {\n private readonly _registerById: Map<string, IUseMiddlewareProps<any, any>> = new Map();\n /** caller <-> middleware handler 的映射表 */\n private readonly _registerByCaller: Map<string, string[]> = new Map();\n\n private readonly _onMiddlewareChange = new Emitter();\n private readonly _disposeMap: Map<string, IDisposable> = new Map();\n public onMiddlewareChange: Event<[IMiddlewareChange<any>]> = this._onMiddlewareChange.event;\n\n buildRunner(options: IBuildRunnerProps<any, any>): ActionPointRunner<any> {\n const caller = this._getCaller(options);\n const handlers = (this._registerByCaller.get(caller) ?? [])\n .map((id) => this._registerById.get(id)?.handler)\n .filter((item) => item);\n if (options.handler) {\n handlers.push(options.handler);\n }\n\n return new ActionPointRunner(\n // @ts-ignore type error\n handlers,\n {\n from: options.trigger,\n name: options.uiConfig.id,\n trigger: options.method,\n },\n options.uiConfig,\n );\n }\n\n use<T>(props: IUseMiddlewareProps<any, any>) {\n const existed = this._registerById.get(props.id);\n if (existed) {\n // 由于支持 merge props 成本有点高(需要考虑参数回收) ROI 不高直接报错。\n // 需要更新不如直接走移除重新注册来得方便.\n lvAssertNotHere('config had been existed');\n }\n\n this._registerById.set(props.id, props);\n\n props.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: props.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n this._registerByCaller.set(caller, []);\n }\n const target = this._registerByCaller.get(caller)!;\n target.push(props.id);\n });\n\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n\n // bind middleware trigger\n const dispose = props.freshTrigger(() => {\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n });\n this._disposeMap.set(props.id, dispose);\n }\n\n unUse(id: string): void {\n const target = this._registerById.get(id);\n if (!target) {\n return;\n }\n\n target.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: target.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n return;\n }\n const triggers = this._registerByCaller.get(caller)!;\n this._registerByCaller.set(\n caller,\n triggers.filter((_item) => _item === target.id),\n );\n });\n\n this._onMiddlewareChange.fire({\n trigger: target.trigger,\n method: target.triggerMethod,\n });\n\n const dispose = this._disposeMap.get(id);\n dispose?.dispose();\n this._disposeMap.delete(id);\n }\n\n private _getCaller({ trigger, method }: { trigger: string; method: string | number | symbol }) {\n return `${trigger}-${method.toString()}`;\n }\n}\n","import type { Event } from '@zk-tech/bedrock/event';\nimport { Disposable } from '@zk-tech/bedrock/dispose';\nimport { IContainerService } from '@zk-tech/bedrock/di';\n\nimport type { IUiManagerSymbol, IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBaseSetting } from './setting/setting.interface';\nimport { MiddlewareManager } from './middleware/middleware';\nimport { type IMiddlewareManager, type IUseMiddlewareProps } from './middleware/middleware.interface';\n\nexport abstract class BaseUiConfigurationService<\n ISetting extends IBaseSetting,\n UIManagerSymbol extends IUiManagerSymbol,\n MixinConfig extends Record<UIManagerSymbol, any[]>,\n ISymbolAllManager extends Record<UIManagerSymbol, IBaseUiManager<any>>,\n> extends Disposable {\n readonly _serviceBrand: undefined;\n\n public get setting(): ISetting {\n return this._setting;\n }\n\n public middleware!: IMiddlewareManager<UIManagerSymbol, MixinConfig>;\n\n abstract uiManager: ISymbolAllManager;\n\n constructor(\n private readonly _setting: ISetting,\n @IContainerService protected readonly _containerService: IContainerService,\n ) {\n super();\n }\n\n public abstract render(): React.ReactNode;\n protected abstract _initAllManager(): void;\n\n registerConfig(config: Partial<MixinConfig>) {\n for (const key of Object.keys(config)) {\n // @ts-ignore type error\n this.uiManager[key].registerConfig(config[key]);\n }\n }\n\n useMiddleware(props: IUseMiddlewareProps<UIManagerSymbol, MixinConfig>) {\n return this.middleware.use(props);\n }\n\n protected _bootstrap() {\n // @ts-ignore type error\n this.middleware = this._containerService.createInstance(MiddlewareManager);\n // 初始化顶部栏,左侧栏,路由层面的UI Manager\n this._initAllManager();\n }\n}\n","import { proxy } from 'valtio';\nimport { merge } from 'lodash-es';\n\nimport { type IBaseSetting } from './setting.interface';\n\nexport abstract class BaseSetting<T extends IBaseSetting> {\n public observableData: T;\n\n constructor(options: { setting: Partial<T> }) {\n const defaultConfig: IBaseSetting = {\n namespace: 'base',\n visible: true,\n debugMode: false,\n };\n\n this.observableData = proxy(merge(defaultConfig, options.setting) as T);\n }\n\n get namespace() {\n return this.observableData.namespace;\n }\n\n get debugMode() {\n return this.observableData.debugMode;\n }\n\n get visible() {\n return this.observableData.visible;\n }\n}\n","import { createContext } from 'react';\nimport { BaseUiConfigurationService } from '@/base/base-ui-configuration-service';\n\nexport type IContext<T extends BaseUiConfigurationService<any, any, any, any>> = {\n // 内部模块使用,允许拿到 public 方法,所以不引用 interface 了.\n uiConfigurationService: T;\n};\n\n// @ts-ignore 由业务时序来保证一定有值,这里忽略报错\nexport const GlobalContext = createContext<IContext>();\n","import { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport type { IMiddlewareChange, IMiddlewareManager } from '@/base/middleware/middleware.interface';\nimport type { IUiManagerSymbol, IBaseUiManager } from './base-ui-manager.interface';\n\nexport abstract class BaseUiManager<\n TConfigSymbol extends IUiManagerSymbol,\n TConfig extends Record<string, any>,\n> implements IBaseUiManager<TConfig>\n{\n // feat: 修复旧框架跳转新框架闪动\n constructor(protected readonly _middlewareManager: IMiddlewareManager<TConfigSymbol, any>) {\n this._listenerMiddlewareChange();\n }\n\n abstract registerConfig(configs: TConfig[]): void;\n\n public unRegisterConfig(id: string): void {\n lvAssertNotHere(\n 'There is no such scenario yet, and no support capability is provided for the time being. If necessary, please contact infrastructure support',\n );\n }\n\n abstract render(...params: any[]): React.ReactNode;\n abstract _middlewareChange(props: IMiddlewareChange<TConfigSymbol>): void;\n\n private _listenerMiddlewareChange() {\n this._middlewareManager.onMiddlewareChange((props: any) => {\n this._middlewareChange(props);\n });\n }\n}\n","import { useMemo } from 'react';\nimport { useSnapshot } from 'valtio';\n\n/** 空对象占位,当 selectionTarget 为空时传入 useSnapshot,保证 hooks 始终按相同顺序调用 */\nconst EMPTY_OBJECT = {} as object;\n\n/**\n * 使用 valtio 实现的 selector hook:从 proxy 对象中选择数据,当选择的数据变化时触发组件重渲染。\n *\n * @param selectionTarget 传给 selector 用以 pick 数据的 proxy 对象\n * @param selector 定义如何从 target 中选取/派生数值\n * @param options.deps 添加到 useMemo 的额外依赖,selector 依赖外部变量时传入\n */\nexport function useObserverSelector<S, T>(\n selectionTarget: S,\n selector: (selectionTarget: NonNullable<S>) => T,\n options: {\n /** 添加依赖项到 useMemo 中 */\n deps?: readonly unknown[];\n } = {},\n): S extends object ? T : T | undefined {\n const { deps = [] } = options;\n\n // 始终无条件调用 hooks,符合 React rules of hooks;空时用占位对象\n const target =\n selectionTarget != null && typeof selectionTarget === 'object'\n ? (selectionTarget as object)\n : EMPTY_OBJECT;\n const snapshot = useSnapshot(target);\n\n const selectedValue = useMemo(() => {\n if (selectionTarget == null || typeof selectionTarget !== 'object') {\n return undefined as S extends object ? T : T | undefined;\n }\n return selector(snapshot as NonNullable<S>);\n }, [selectionTarget, snapshot, ...deps]);\n\n return selectedValue as S extends object ? T : T | undefined;\n}\n","export enum OrderLevel {\n high = 'high',\n default = 'default',\n low = 'low',\n}\n\ninterface IOrderType {\n /**\n * 在 order 之上的排序规则\n * 严格按照:high > default > low 顺序排序\n * */\n orderLevel?: OrderLevel;\n\n /** 排序设置,默认为 0 */\n order?: number;\n}\n\n/**\n * 通用的排序函数,主要分作两类排序规则\n * 优先使用 orderLevel 分组,后使用 order 排序\n * 主要为了处理一些希望固定展示头部和底部的场景,而出现 order 争抢的 case\n */\nexport function sortListBySettings<T extends IOrderType>({\n list,\n filter = (item) => item,\n}: {\n list: Array<T>;\n filter?: (item: T) => T;\n}): Array<T> {\n return list\n .sort((a: T, b: T) => {\n const typeSort: {\n [key in Exclude<IOrderType['orderLevel'], undefined>]: number;\n } = { high: 2, default: 1, low: 0 };\n const { orderLevel: aType = 'default', order: aPriority = 0 } = a;\n const { orderLevel: bType = 'default', order: bPriority = 0 } = b;\n\n if (aType !== bType) {\n return typeSort[bType] - typeSort[aType];\n }\n\n return bPriority - aPriority;\n })\n .map(filter);\n}\n","/**\n * @description 将传入的UI配置数组,通过打平整合到一个对象中\n * @example\n * input: [{ pageRoute: [xxx] }, {pageRoute: [xxx2]}]\n * output: { pageRoute: [xxx, xxx2] }\n */\nexport const mergeUiConfigs = <T extends Record<string, Array<any>>>(configs: Array<Partial<T>>) => {\n const uiConfigs: Partial<T> = {};\n configs.map((configObj) => {\n for (const [key, config] of Object.entries(configObj)) {\n if (!Array.isArray(config)) {\n continue;\n }\n if (key in uiConfigs) {\n uiConfigs[key]?.push(...config);\n } else {\n Object.assign(uiConfigs, {\n [key]: config,\n });\n }\n }\n });\n return uiConfigs;\n};\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\nimport type { IMiddlewareManager } from '@/base/middleware/middleware.interface';\n\n// import type { IUiConfigMap } from '@/ui-manager/ui-mixin-config.interface';\n\nexport function runnerBuilder({\n middleware,\n trigger,\n method,\n handler,\n uiConfig,\n}: {\n middleware: IMiddlewareManager<any, any>;\n trigger: IUiManagerSymbol;\n method: string;\n handler?: (...args: any[]) => any;\n uiConfig: any;\n}) {\n const runner = middleware.buildRunner({\n trigger,\n method,\n handler,\n uiConfig,\n });\n return runner;\n}\n","/**\n * 用于带默认值执行 config 的回调方法\n * @param config - config 的回调\n * @param defaultValue - 默认值\n * @param args - 参数\n * @internal\n * @privateRemarks\n * config类型改成 T | ((...params: any[]) =\\> T),ts认为不一定是callable\n * https://github.com/microsoft/TypeScript/issues/37663\n * 我们需要这个函数能成功的类型推断T\n * 但是config设成any可能会产生错误,这里的类型推断只能由config产生\n * 例如 evaluate\\<TooltipConfig| string | undefined\\>(tooltipConfig, undefined);\n * 为什么写<T>是因为defaultValue是undefined\n * 所以当T没有写,就会错误的由defaultValue推断T\n * 还有一种可能是T写了就变成了强制类型转换,也会出错\n * 即使改成issue里面说的方法,也没有办法限制defaultValue类型\n */\nexport function evaluate<T>(config: any, defaultValue: T, ...args: any[]): T {\n if (typeof config === 'function') {\n return config(...args) ?? defaultValue;\n }\n return config ?? defaultValue;\n}\n","import React from 'react';\nimport type { NavigateOptions } from 'react-router-dom';\nimport type { Event } from '@zk-tech/bedrock/event';\n\nimport type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IPageRouteConfig } from './page-route-config.interface';\n\nexport const PageRouteManagerSymbol = 'PageRoute';\n\nexport interface IPageRouteObservableData {\n currentRoute: string | undefined;\n configs: IPageRouteConfig[];\n keepAliveStatusMap: Record<string, IKeepAliveEventData>;\n // 历史路由路径\n historyRoutes: string[];\n containerWidth: number;\n}\n\nexport interface IGeneratePathOptions {\n params?: Record<string, string>;\n query?: Record<string, string> | string;\n}\n\nexport interface INavigateOptions extends IGeneratePathOptions, NavigateOptions {}\n\nexport enum KeepAliveStatus {\n /** 激活态 */\n Activated = 'Activated',\n /** 失活态 */\n InActivated = 'InActivated',\n}\n\nexport interface IKeepAliveEventData {\n /** 当前激活状态对应的路由路径 */\n pathName: string;\n /** 当前激活状态对应的路由ID */\n routeId: string;\n /** 当前激活状态 */\n status: KeepAliveStatus;\n /** 当前激活状态的路由携带的信息 */\n locationState: any;\n}\n\nexport type IPageRouteRenderOptions = {\n layout: React.ReactNode;\n};\n\nexport type IPageRouteOutletOptions = {\n routesConfig: IPageRouteConfig[];\n};\n\nexport interface IPageRouteManager extends IBaseUiManager<IPageRouteConfig> {\n observableData: IPageRouteObservableData;\n\n render: (options: IPageRouteRenderOptions) => React.ReactNode;\n\n renderOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 用于单向的路由跳转场景 */\n renderSingleOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 当前激活的路由信息 */\n currentKeepAliveData: IKeepAliveEventData | undefined;\n\n /** 等待待跳转的路由 */\n pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n\n currentRoute: IPageRouteConfig | undefined;\n\n /** 触发路由改变的回调 */\n onWouldRouteChange: Event<[string | number, options?: NavigateOptions]>;\n\n notifyPageRendered: (config: string | IPageRouteConfig) => void;\n\n onPageRendered: Event<[IPageRouteConfig]>;\n\n onPageContainerWidthChange: Event<[]>;\n\n /** 路由配置发生变化时触发的事件 */\n onRouteConfigChange: Event<[IPageRouteConfig[]]>;\n\n getRouteConfigByPath: (path: string) => IPageRouteConfig | undefined;\n\n /** 更新当前路由 */\n updatePageRoute: (path: string) => void;\n\n /** 生成路径 */\n generatePath: (id: string, options?: IGeneratePathOptions | undefined) => string;\n\n /** 路由到具体地址 */\n navigate: (id: string, options?: INavigateOptions) => void;\n\n /** 返回到上级页面\n * @param {number} 默认是-1 即返回上一级页面\n * */\n navigateBack: (to?: number) => void;\n\n /** 使用keep-alive之后,可监听keep-alive看当前那一个路由组件被激活了 */\n onKeepAliveChange: Event<[IKeepAliveEventData]>;\n\n /** 由外部去触发当前需要激活那一个路由 */\n activateKeepAliveRoute: (activatePathName: string, locationState: any) => void;\n\n updateContainerWidth: (width: number) => void;\n\n /** 初始化完 pageRouteManager 可以进行navigate了 */\n initDone: VoidFunction;\n}\n","import { SharedMutex } from '@zk-tech/bedrock/lock';\n\n/**\n * @description\n * 初始化门闩:在 initDone 前拦截行为,initDone 后放行。\n * 使用 SharedMutex 作为一次性锁。\n */\nexport class InitAwaitLock {\n private readonly _mutex = new SharedMutex();\n\n constructor() {\n // 使用 void 忽略 Promise,锁会在同步流程中生效\n void this._mutex.lock();\n }\n\n /**\n * @description 是否已经完成初始化\n */\n get hasBeenDone(): boolean {\n return !this._mutex.isLocked();\n }\n\n /**\n * @description 标记初始化完成并放行\n */\n public initDone(): void {\n if (this.hasBeenDone) {\n return;\n }\n this._mutex.unLock();\n }\n}\n","/**\n * 比较两个字符串是否相等\n * @param val\n * @param otherVal\n * @returns {boolean}\n */\nexport const isEqualStr = (val: string, otherVal: string) => val === otherVal;\n","import { lvAssertNever, lvAssertNotHere } from '@zk-tech/bedrock/assert';\n\nexport const queryStringify = (parseObj: Record<string, string>) => {\n if (typeof parseObj !== 'object') {\n lvAssertNever(parseObj);\n }\n return Object.entries(parseObj)\n .map((item) => `${item[0]}=${item[1]}`)\n .join('&');\n};\n","import type { FC, ComponentType, LazyExoticComponent } from 'react';\nimport { lazy, Suspense } from 'react';\nimport { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary';\n\nimport { retryWrapper } from '@/utils/retry';\nimport type { ErrorBoundaryProps, SuspenseBoundaryProps } from './interface';\n\nexport const lazyRetry: typeof lazy = (factory) => {\n return lazy(retryWrapper(factory, { delayMs: 1000, numTry: 5 }));\n};\n\ntype LazyPreloadResult<T extends ComponentType<any>> = LazyExoticComponent<T> & { preload: () => void };\n\ntype Factory<T extends ComponentType<any>> = () => Promise<{\n default: T;\n}>;\n\ntype LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => LazyPreloadResult<T>;\n\nexport const lazyPreload: LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => {\n const Component = lazy(factory) as LazyPreloadResult<T>;\n Component.preload = factory;\n return Component;\n};\n\n/**\n * 组件内部不再自动上报错误到slardar,业务需根据需要在 `onError` 回调中上报slardar\n * @constructor\n */\nexport const ErrorBoundary: FC<ErrorBoundaryProps> = ({ children, fallback, onError }) => {\n return (\n <ReactErrorBoundary fallback={fallback ?? <div />} onError={onError}>\n {children}\n </ReactErrorBoundary>\n );\n};\n\nexport const SuspenseBoundary: FC<SuspenseBoundaryProps> = ({\n children,\n fallback = null,\n errorFallback,\n onError,\n}) => (\n <ErrorBoundary fallback={errorFallback ?? fallback} onError={onError}>\n <Suspense fallback={fallback}>{children}</Suspense>\n </ErrorBoundary>\n);\n\nexport type { SuspenseBoundaryProps, ErrorBoundaryProps };\n",".root {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL3BhZ2Utcm91dGUvY29tcG9uZW50Iiwic291cmNlcyI6WyJwYWdlLXJvdXRlLm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUVBIiwic291cmNlc0NvbnRlbnQiOlsiLnJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iXX0= */","import { type FC, useContext, useEffect, useMemo } from 'react';\nimport { Routes, Route, useNavigate, Navigate } from 'react-router-dom';\nimport { ErrorBoundary } from '@/components/lazy-load';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\n\nimport { GlobalContext } from '@/base/context';\nimport {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n} from '@/feature/page-route/page-route-manager.interface';\nimport Styles from './page-route.module.scss';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype IPageRoute = {\n layout: React.ReactNode;\n};\n\nexport const PageRoute: FC<IPageRoute> = ({ layout }) => {\n const navigate = useNavigate();\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const baseRoute = useObserverSelector(uiConfigurationService.setting, (manager) => {\n return {\n namespace: manager.namespace,\n baseRoute: manager.baseRoute,\n redirectRouteIdWhen404: manager.redirectRouteIdWhen404,\n };\n });\n\n const routeConfig = useObserverSelector(\n uiConfigurationService.uiManager[PageRouteManagerSymbol],\n (manager) => {\n return manager.observableData.configs;\n },\n );\n\n // 分别订阅 setting 和 routeManager 的 observableData\n const redirectRouteId = useObserverSelector(uiConfigurationService.setting, (setting) => {\n return setting?.observableData?.redirectRouteIdWhen404;\n });\n\n const redirectRoute = useMemo(() => {\n if (!redirectRouteId) return undefined;\n return routeConfig.find(({ id }) => id === redirectRouteId);\n }, [redirectRouteId, routeConfig]);\n\n useEffect(() => {\n const routeManager = uiConfigurationService.uiManager[PageRouteManagerSymbol] as IPageRouteManager;\n const { pendingNavigateOptions } = routeManager;\n if (pendingNavigateOptions) {\n navigate(pendingNavigateOptions.path, pendingNavigateOptions.options);\n }\n const dispose = routeManager.onWouldRouteChange((to, options) => {\n if (typeof to === 'string') {\n navigate(to, options);\n } else {\n navigate(to);\n }\n });\n routeManager.initDone();\n\n return () => {\n dispose.dispose();\n };\n }, []);\n\n const config = useMemo(\n () =>\n routeConfig.map((item) => (\n <Route\n key={`${item.id}-${item._updateTime}`}\n path={item.path}\n index={item.index}\n element={\n <ErrorBoundary fallback={item.errorElement ?? <div />}>\n {item.content ? item.content() : item.skeleton?.() ?? null}\n </ErrorBoundary>\n }\n />\n )),\n [routeConfig],\n );\n\n return (\n <div id={baseRoute.namespace} className={Styles.root}>\n <Routes>\n <Route element={layout}>{config}</Route>\n {redirectRoute ? <Route path=\"*\" element={<Navigate to={redirectRoute.path} replace />} /> : null}\n </Routes>\n </div>\n );\n};\n","import { memo, startTransition, useRef } from 'react';\nimport type { FC, ReactNode } from 'react';\n\nexport const Repeater: FC<{\n mode: 'visible' | 'hidden';\n children: ReactNode;\n}> = memo((props) => {\n const { mode, children } = props;\n const resolveRef = useRef<() => void>();\n\n if (mode === 'hidden') {\n startTransition(() => {\n throw new Promise<void>((resolve) => (resolveRef.current = resolve));\n });\n }\n\n if (resolveRef.current) {\n startTransition(() => {\n resolveRef.current?.();\n resolveRef.current = void 0;\n });\n }\n\n return <>{children}</>;\n});\n","import { Suspense, memo } from 'react';\nimport type { FC, ReactNode, SuspenseProps } from 'react';\nimport { Repeater } from './repeater';\n\ninterface OffscreenProps extends SuspenseProps {\n mode: 'visible' | 'hidden';\n fallback?: ReactNode;\n}\n\nexport const Offscreen: FC<OffscreenProps> = memo((props) => {\n const { mode, children, fallback } = props;\n\n return (\n <Suspense fallback={fallback}>\n <Repeater mode={mode}>{children}</Repeater>\n </Suspense>\n );\n});\n","import { matchPath } from 'react-router-dom';\n\nimport { evaluate } from '@/utils/evaluate';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\n/**\n * 是否需要支持路由缓存\n * @param routesConfig 路由配置项\n * @param pathName 当前路由路径\n * @returns 是否可以缓存该路由组件\n */\nexport const isNeedCache = (routesConfig: IPageRouteConfig[], pathName: string, updateTime?: number) => {\n for (const route of routesConfig) {\n const isMatch = matchPath(route.path, pathName);\n if (isMatch) {\n const needCache = evaluate<boolean>(route.isNeedCache, false);\n const hasContentRendered = Boolean(evaluate<React.ReactNode | null>(route.content, null));\n const updated = !updateTime ? true : updateTime === route._updateTime;\n return needCache && hasContentRendered && updated;\n }\n }\n return false;\n};\n","import type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\nimport { isEqualStr } from '@/utils';\nimport type { IKeepAliveOutlet } from '../interface';\nimport { isNeedCache } from './cache';\n\n/**\n * @desc 从outlets中过滤出不符合条件的路由组件进行卸载操作\n * 不符合条件:\n * 1. 不属于当前激活态的缓存数据\n * 2. 且不需要缓存的数据给清空卸载掉\n */\nexport const getValidOutlets = (\n routesConfig: IPageRouteConfig[],\n pathname: string,\n outlets: IKeepAliveOutlet[],\n) => {\n outlets.forEach((outletData) => {\n // const isBusiness = businessHostPrefixList.some((prefix) => location.href.startsWith(prefix));\n const needRefresh = !(\n outletData.isCacheItem && isNeedCache(routesConfig, outletData.pathname, outletData?.updateTime)\n );\n if (needRefresh) {\n outletData.outlet = null;\n }\n });\n const newOutlets = outlets.filter((item) => item.outlet);\n return newOutlets;\n};\n","import { useState, useRef, useEffect, type ReactNode, useContext } from 'react';\nimport { useOutlet, useLocation, matchPath, useNavigationType } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const initRef = useRef(true);\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n const calcOutlets = (tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n };\n const [outlets, setOutlets] = useState<IKeepAliveOutlet[]>(\n // eslint-disable-next-line no-nested-ternary\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions\n ? []\n : initRef.current\n ? calcOutlets([])\n : [],\n );\n initRef.current = false;\n\n useEffect(() => {\n setOutlets(calcOutlets);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname, routesConfig]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import { useState, useRef, useEffect, type ReactNode, useContext, useMemo } from 'react';\nimport { useOutlet, useLocation } from 'react-router-dom';\nimport { useMemoizedFn } from 'ahooks';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveSingleOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n\n const calcOutlets = useMemoizedFn((tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n });\n\n const outlets = useMemo(() => {\n if (uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions) {\n return [];\n }\n\n return calcOutlets([]);\n }, [\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions,\n location.pathname,\n routesConfig,\n calcOutlets,\n ]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import React from 'react';\nimport { proxy, snapshot } from 'valtio';\nimport { InitAwaitLock } from '@/utils/init-await-lock';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport { lvAssert } from '@zk-tech/bedrock/assert';\nimport { matchPath } from 'react-router-dom';\nimport { compile } from 'path-to-regexp';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { type IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { isEqualStr, queryStringify } from '@/utils';\nimport { type IPageRouteConfig } from './page-route-config.interface';\nimport {\n KeepAliveStatus,\n PageRouteManagerSymbol,\n type IGeneratePathOptions,\n type IKeepAliveEventData,\n type INavigateOptions,\n type IPageRouteManager,\n type IPageRouteObservableData,\n type IPageRouteRenderOptions,\n type IPageRouteOutletOptions,\n} from './page-route-manager.interface';\n\nimport { PageRoute } from './component/page-route';\nimport KeepAliveOutlet from './component/keep-alive-outlet';\nimport KeepAliveSingleOutlet from './component/keep-alive-outlet/single';\n\nimport type { IMiddlewareChange } from '@/base/middleware/middleware.interface';\nimport { runnerBuilder } from '@/utils/runner-builder';\n\nexport class PageRouteManager\n extends BaseUiManager<any, IPageRouteConfig>\n implements IBaseUiManager<IPageRouteConfig>, IPageRouteManager\n{\n public observableData: IPageRouteObservableData = proxy({\n currentRoute: undefined,\n configs: [],\n keepAliveStatusMap: {},\n historyRoutes: [],\n containerWidth: 0,\n });\n\n private readonly _locker: InitAwaitLock = new InitAwaitLock();\n private _pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n private readonly _onWouldRouteChange = new Emitter<[string | number, options?: INavigateOptions]>();\n public onWouldRouteChange = this._onWouldRouteChange.event;\n private readonly _onKeepAliveChange = new Emitter<[IKeepAliveEventData]>();\n public onKeepAliveChange = this._onKeepAliveChange.event;\n private readonly _onPageRendered = new Emitter<[IPageRouteConfig]>();\n public onPageRendered = this._onPageRendered.event;\n\n private readonly _onPageContainerWidthChange = new Emitter<[]>();\n public onPageContainerWidthChange = this._onPageContainerWidthChange.event;\n\n // fix: 修复个人页刷新打开埋点参数上报错误\n private readonly _onRouteConfigChange = new Emitter<[IPageRouteConfig[]]>();\n public onRouteConfigChange = this._onRouteConfigChange.event;\n\n get pendingNavigateOptions() {\n return this._pendingNavigateOptions;\n }\n\n get currentRoute(): IPageRouteConfig | undefined {\n return this.getRouteConfigByPath(this.observableData.currentRoute);\n }\n\n registerConfig(configs: IPageRouteConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config, {\n _updateTime: Date.now(),\n });\n } else {\n // create\n this.observableData.configs.push(\n merge({}, config, {\n _updateTime: 0,\n }),\n );\n }\n });\n // 触发路由配置变化事件\n this._onRouteConfigChange.fire(snapshot(this.observableData.configs) as IPageRouteConfig[]);\n }\n\n public updatePageRoute(path: string) {\n const routesLength = this.observableData.historyRoutes.length;\n if (this.observableData.historyRoutes[routesLength - 1] !== path) {\n this.observableData.historyRoutes.push(path);\n }\n\n // 之前有路由,先触发上一次的 unactive\n const preRoute = this.getRouteConfigByPath(this.observableData.currentRoute);\n const setRoute = this.getRouteConfigByPath(path);\n if (preRoute?.id !== setRoute?.id) {\n if (preRoute) {\n preRoute?.onActiveChange?.({ active: false });\n }\n setRoute?.onActiveChange?.({ active: true });\n }\n\n this.observableData.currentRoute = path;\n }\n\n public navigate(id: string, options?: INavigateOptions) {\n const path = this.generatePath(id, options);\n\n // 空白也是可能的路径\n if (!path) {\n lvAssert(path);\n }\n\n const runner = runnerBuilder({\n middleware: this._middlewareManager,\n trigger: PageRouteManagerSymbol,\n method: 'shouldInterceptNavigate',\n uiConfig: { id, path },\n });\n const interceptRes = runner.run();\n\n if (runner.isStop || interceptRes) {\n return;\n }\n\n this._navigateByPath(path, options);\n }\n\n private _navigateByPath(path: string, options?: INavigateOptions) {\n if (!this._locker.hasBeenDone) {\n this._pendingNavigateOptions = {\n path,\n options,\n };\n } else {\n this._onWouldRouteChange.fire(path, options);\n }\n }\n\n public updateContainerWidth(width: number) {\n this.observableData.containerWidth = width;\n }\n\n public initDone() {\n if (this._locker.hasBeenDone) {\n return;\n }\n this._pendingNavigateOptions = undefined;\n this._locker.initDone();\n }\n\n public navigateBack(to = -1) {\n this._onWouldRouteChange.fire(to);\n }\n\n public generatePath(id: string, options?: IGeneratePathOptions | undefined): string {\n const target = this.observableData.configs.find((item) => item.id === id);\n if (!target) {\n lvAssert(target);\n }\n\n const compiler = compile(target.path);\n let result = compiler(options?.params ?? {});\n const query = typeof options?.query === 'string' ? options.query : queryStringify(options?.query ?? {});\n if (query.length !== 0) {\n result += query.includes('?') ? query : `?${query}`;\n }\n return result;\n }\n\n public activateKeepAliveRoute(activatePathName: string, locationState: any) {\n if (\n activatePathName === this.currentKeepAliveData?.pathName &&\n Object.values(this.observableData.keepAliveStatusMap).length > 0\n ) {\n return;\n }\n const allAlivePathName = Object.keys(this.observableData.keepAliveStatusMap);\n // 1. 将其他的失活\n for (const alivePathName of allAlivePathName) {\n if (isEqualStr(alivePathName, activatePathName)) {\n continue;\n }\n this._updateKeepAliveStatus(alivePathName, KeepAliveStatus.InActivated);\n }\n // 2. 将当前的激活\n this._updateKeepAliveStatus(activatePathName, KeepAliveStatus.Activated, locationState);\n }\n\n private _updateKeepAliveStatus(pathName: string, status: KeepAliveStatus, locationState?: any) {\n const lastStatusVal = this.observableData.keepAliveStatusMap[pathName];\n const lastStatus = lastStatusVal?.status;\n const matchRoteConfig = this.observableData.configs.find((item) => matchPath(item.path, pathName));\n const newStatusVal = {\n pathName,\n status,\n routeId: matchRoteConfig?.id ?? 'NOT_FOUND',\n locationState,\n };\n this.observableData.keepAliveStatusMap[pathName] = newStatusVal;\n if (status !== lastStatus) {\n this._onKeepAliveChange.fire(newStatusVal);\n }\n }\n\n public get currentKeepAliveData() {\n const { keepAliveStatusMap, currentRoute = '' } = this.observableData;\n return Object.values(keepAliveStatusMap).find((item) => item.status === KeepAliveStatus.Activated);\n }\n\n public notifyPageRendered(config: string | IPageRouteConfig): void {\n if (typeof config === 'string') {\n const routeConfig = this.getRouteConfigByPath(config);\n this._onPageRendered.fire(routeConfig ? (snapshot(routeConfig) as IPageRouteConfig) : routeConfig!);\n } else {\n this._onPageRendered.fire(config);\n }\n }\n\n public getRouteConfigByPath(path: string | undefined): IPageRouteConfig | undefined {\n if (!path) {\n return undefined;\n }\n\n return this.observableData.configs.find((item) => matchPath(item.path, path));\n }\n\n public render(options: IPageRouteRenderOptions): React.ReactNode {\n return <PageRoute layout={options.layout} />;\n }\n\n public renderOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveOutlet {...options} />;\n }\n\n public renderSingleOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveSingleOutlet {...options} />;\n }\n\n _middlewareChange(props: IMiddlewareChange<'PageRoute'>): void {\n // throw new Error('Method not implemented.');\n }\n}\n","import {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n KeepAliveStatus,\n type IKeepAliveEventData,\n} from '@/feature/page-route/page-route-manager.interface';\nimport { useContext, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype TEffectCallback = () => VoidFunction | void;\n\n/**\n * 用于keep-alive路由组件的显隐的触发钩子\n * 由于使用了keep-alive路由的组件,无法使用useEffect来表示组件是否可见,因此增加该hook来\n * 帮助外部来判断当前组件是否可见,用法和useEffect类似,传入一个函数,该函数会在初始化时候的路由组件\n * 被激活的时候触发,且该函数返回的函数会在失活的时候被触发\n * @example\n * ```\n * useKeepAliveEffect(() => {\n * console.log('我被激活啦!')\n * return () => {\n * console.log('我被失活啦!')\n * }\n * })\n * ```\n */\nexport const useKeepAliveEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n\nexport const useKeepAliveLayoutEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useLayoutEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n","import { useContext } from 'react';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\n\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\nexport const usePageContainerWidth = () => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n return useObserverSelector(uiConfigurationService.uiManager[PageRouteManagerSymbol], (manager) => {\n return manager.observableData.containerWidth;\n });\n};\n","import { createPath, matchPath, parsePath, type NavigateOptions, type To } from 'react-router-dom';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { PageRouteManagerSymbol } from '../page-route-manager.interface';\n\n/** 导航至某一个页面 */\nexport function navigate(\n platformUiConfiguration: ITempUiConfigurationServiceContext['uiConfigurationService'],\n to: To | number,\n options?: NavigateOptions,\n) {\n const pageRouteManager = platformUiConfiguration.uiManager[PageRouteManagerSymbol];\n\n switch (true) {\n case typeof to === 'string' || typeof to === 'object':\n if (typeof to === 'object') {\n to = createPath(to);\n }\n const path = parsePath(to);\n const routesConfig = pageRouteManager.observableData.configs;\n const matchItem = routesConfig.find((item) => matchPath(item.path, path?.pathname ?? ''));\n if (!matchItem) {\n return;\n }\n // 匹配到的路由参数\n const matchRes = Object.entries(matchPath(matchItem.path, path?.pathname ?? '')?.params ?? {}).reduce<\n Record<string, string>\n >((pre, cur) => {\n const [key, value] = cur;\n if (!key || !value) {\n return pre;\n }\n pre[key] = value;\n return pre;\n }, {});\n\n pageRouteManager.navigate(matchItem.id, {\n query: path.search,\n params: matchRes,\n ...options,\n });\n break;\n case typeof to === 'number':\n pageRouteManager.navigateBack(to);\n\n break;\n default:\n }\n}\n","import type { NavigateFunction, NavigateOptions, To } from 'react-router-dom';\nimport { navigate } from '../utils/navigate';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { useMemoizedFn } from 'ahooks';\n\nexport const useNavigateFactory = (\n uiConfigurationService: ITempUiConfigurationServiceContext['uiConfigurationService'],\n): NavigateFunction => {\n const useNavigate = useMemoizedFn((to: To | number, options?: NavigateOptions) => {\n navigate(uiConfigurationService, to, options);\n });\n return useNavigate;\n};\n","import type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBlockContentConfig } from './block-content-config.interface';\n\nexport const BlockContentManagerSymbol = 'BlockContent';\n\nexport interface IBlockContentObservableData {\n forceUpdate: number;\n activeId: string | undefined;\n configs: IBlockContentConfig[];\n}\n\nexport interface IBlockContentManager extends IBaseUiManager<IBlockContentConfig> {\n observableData: IBlockContentObservableData;\n\n // onRouteChange: Event;\n\n changeActiveId: (activeId: string) => void;\n}\n",".container {\n flex: 1;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL2Jsb2NrLWNvbnRlbnQvY29tcG9uZW50Iiwic291cmNlcyI6WyJibG9jay1jb250ZW50Lm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udGFpbmVyIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiJdfQ== */","import React, { useContext, useRef } from 'react';\nimport clsx from 'clsx';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { evaluate } from '@/utils/evaluate';\n\nimport { GlobalContext } from '@/base/context';\nimport { BlockContentManagerSymbol } from '@/feature/block-content/block-content-manager.interface';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/block-content/type';\n\nimport style from './block-content.module.scss';\n\nconst BlockContentComponent: React.FC = React.memo(() => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const activeBlockContentConfig = useObserverSelector(\n uiConfigurationService.uiManager[BlockContentManagerSymbol],\n (manager) => {\n const { activeId, configs } = manager.observableData;\n return configs.find((item) => item.id === activeId);\n },\n );\n\n // 监听是否注册完按钮,ready则开始计算宽高\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={containerRef}\n className={clsx(style.container, evaluate(activeBlockContentConfig?.className, ''))}\n >\n {evaluate(activeBlockContentConfig?.content, null)}\n </div>\n );\n});\n\nexport const BlockContent = BlockContentComponent;\n","import { proxy } from 'valtio';\nimport { lvAssertNotNil } from '@zk-tech/bedrock/assert';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { BlockContent } from './component/block-content';\nimport { type IBlockContentConfig } from './block-content-config.interface';\nimport {\n type IBlockContentManager,\n type IBlockContentObservableData,\n} from './block-content-manager.interface';\n\nexport class BlockContentManager\n extends BaseUiManager<any, IBlockContentConfig>\n implements IBlockContentManager\n{\n public observableData: IBlockContentObservableData = proxy({\n forceUpdate: 0,\n activeId: undefined,\n configs: [],\n });\n\n registerConfig(configs: IBlockContentConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config);\n } else {\n // create\n lvAssertNotNil(\n config.id,\n `The \"id\" attribute is required when registering \"UiManagerName.BlockContent\"`,\n );\n this.observableData.configs.push(config);\n }\n });\n\n // _autoUpdateActiveBlock\n if (\n !(\n this.observableData.activeId &&\n this.observableData.configs.find((item) => item.id === this.observableData.activeId)\n )\n ) {\n // 如果当前没有任何激活的 block, 或者当前激活的block已经是非法态,那么默认兜底选中首个配置\n this.observableData.activeId = this.observableData.configs[0]?.id;\n }\n }\n\n changeActiveId(activeId: string | undefined): void {\n this.observableData.activeId = activeId;\n }\n\n render() {\n return <BlockContent />;\n }\n\n _middlewareChange() {\n this.observableData.forceUpdate++;\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -393,9 +393,9 @@ declare class PageRouteManager extends BaseUiManager<any, IPageRouteConfig> impl
393
393
  get currentKeepAliveData(): IKeepAliveEventData | undefined;
394
394
  notifyPageRendered(config: string | IPageRouteConfig): void;
395
395
  getRouteConfigByPath(path: string | undefined): IPageRouteConfig | undefined;
396
- render(options: IPageRouteRenderOptions): React.ReactNode;
397
- renderOutlet(options: IPageRouteOutletOptions): React$1.JSX.Element;
398
- renderSingleOutlet(options: IPageRouteOutletOptions): React$1.JSX.Element;
396
+ render(options: IPageRouteRenderOptions): React__default.ReactNode;
397
+ renderOutlet(options: IPageRouteOutletOptions): React__default.JSX.Element;
398
+ renderSingleOutlet(options: IPageRouteOutletOptions): React__default.JSX.Element;
399
399
  _middlewareChange(props: IMiddlewareChange<'PageRoute'>): void;
400
400
  }
401
401
 
package/dist/index.d.ts CHANGED
@@ -393,9 +393,9 @@ declare class PageRouteManager extends BaseUiManager<any, IPageRouteConfig> impl
393
393
  get currentKeepAliveData(): IKeepAliveEventData | undefined;
394
394
  notifyPageRendered(config: string | IPageRouteConfig): void;
395
395
  getRouteConfigByPath(path: string | undefined): IPageRouteConfig | undefined;
396
- render(options: IPageRouteRenderOptions): React.ReactNode;
397
- renderOutlet(options: IPageRouteOutletOptions): React$1.JSX.Element;
398
- renderSingleOutlet(options: IPageRouteOutletOptions): React$1.JSX.Element;
396
+ render(options: IPageRouteRenderOptions): React__default.ReactNode;
397
+ renderOutlet(options: IPageRouteOutletOptions): React__default.JSX.Element;
398
+ renderSingleOutlet(options: IPageRouteOutletOptions): React__default.JSX.Element;
399
399
  _middlewareChange(props: IMiddlewareChange<'PageRoute'>): void;
400
400
  }
401
401
 
package/dist/index.js CHANGED
@@ -752,13 +752,13 @@ var PageRouteManager = class extends BaseUiManager {
752
752
  return this.observableData.configs.find((item) => matchPath(item.path, path));
753
753
  }
754
754
  render(options) {
755
- return /* @__PURE__ */ React.createElement(PageRoute, { layout: options.layout });
755
+ return /* @__PURE__ */ React3.createElement(PageRoute, { layout: options.layout });
756
756
  }
757
757
  renderOutlet(options) {
758
- return /* @__PURE__ */ React.createElement(KeepAliveOutlet, { ...options });
758
+ return /* @__PURE__ */ React3.createElement(KeepAliveOutlet, { ...options });
759
759
  }
760
760
  renderSingleOutlet(options) {
761
- return /* @__PURE__ */ React.createElement(KeepAliveSingleOutlet, { ...options });
761
+ return /* @__PURE__ */ React3.createElement(KeepAliveSingleOutlet, { ...options });
762
762
  }
763
763
  _middlewareChange(props) {
764
764
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/base/middleware/action-point-runner.ts","../src/base/middleware/middleware.ts","../src/base/base-ui-configuration-service.tsx","../src/base/setting/setting.ts","../src/base/context.ts","../src/base/ui-manager/base-ui-manager.ts","../src/base/hooks/use-observer-selector.ts","../src/utils/sort.ts","../src/utils/merged-array.ts","../src/utils/runner-builder.ts","../src/utils/evaluate.ts","../src/feature/page-route/page-route-manager.interface.ts","../src/utils/init-await-lock.ts","../src/utils/is-equal.ts","../src/utils/query-stringify.ts","../src/components/lazy-load/index.tsx","../src/feature/page-route/component/page-route.module.scss","../src/feature/page-route/component/page-route.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/repeater.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/index.tsx","../src/feature/page-route/component/keep-alive-outlet/utils/cache.ts","../src/feature/page-route/component/keep-alive-outlet/utils/outlets.ts","../src/feature/page-route/component/keep-alive-outlet/index.tsx","../src/feature/page-route/component/keep-alive-outlet/single.tsx","../src/feature/page-route/page-route-manager.tsx","../src/feature/page-route/hooks/use-keep-alive-effect.ts","../src/feature/page-route/hooks/use-page-container-width.ts","../src/feature/page-route/utils/navigate.ts","../src/feature/page-route/hooks/use-navigate-factory.ts","../src/feature/block-content/block-content-manager.interface.ts","../src/feature/block-content/component/block-content.module.scss","../src/feature/block-content/component/block-content.tsx","../src/feature/block-content/block-content-manager.tsx"],"names":["lvAssertNotHere","snapshot","OrderLevel","KeepAliveStatus","ReactErrorBoundary","navigate","useMemo","memo","Suspense","useContext","useEffect","useRef","OutletWrapper","useLocation","useOutlet","proxy","Emitter","merge","matchPath","useNavigate","useMemoizedFn","React"],"mappings":"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","file":"index.js","sourcesContent":["import type { IUseMiddlewareOptions } from './middleware.interface';\n\ntype IActionPointInfo = IUseMiddlewareOptions<any, any>['actionInfo'];\n\ntype INextFunction = (...args: any[]) => any;\n\n/**\n * 停止中间件队列执行的方法\n *\n * @public\n */\nexport type IStopAction = () => void;\n\n/**\n * 中间件执行信息\n * - 方法名\n * - 中间件类型\n * - 执行状态\n * - 耗时\n */\ntype DebugInfo = [string, string, string, number];\n\n/**\n * @internal\n */\nexport class ActionPointRunner<T> extends Function {\n private _rawArguments: any;\n\n constructor(\n private readonly middlewares: ((...args: any[]) => any)[],\n private readonly point: IActionPointInfo,\n private readonly _uiConfig: T,\n ) {\n super();\n const closure: any = (...args: any[]) => closure.run(...args);\n closure.middlewares = middlewares;\n closure.point = point ?? {\n name: '',\n from: '',\n trigger: '',\n path: [],\n };\n closure._uiConfig = _uiConfig;\n return Object.setPrototypeOf(closure, new.target.prototype);\n }\n\n get isStop(): boolean {\n return this._isStop;\n }\n\n private _isStop: boolean = false;\n private index = 0;\n\n run(...args: unknown[]) {\n this._rawArguments = args;\n this.index = -1;\n\n let data;\n while (this.hasNext() && !this._isStop) {\n data = this.getNext()();\n }\n return data;\n }\n\n hasNext() {\n return this.index < this.middlewares.length - 1;\n }\n\n private getNext(skip = false): INextFunction {\n let next: INextFunction = () => {\n /* do nothing*/\n };\n if (this.hasNext()) {\n this.index += 1;\n const handler = this.middlewares[this.index];\n next = () => {\n return handler({\n stop: () => {\n this._isStop = true;\n },\n uiConfig: this._uiConfig,\n actionInfo: this.point,\n triggerArgs: this._rawArguments,\n });\n };\n }\n return next;\n }\n}\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\n\nimport {\n type IUseMiddlewareProps,\n type IMiddlewareManager,\n type IBuildRunnerProps,\n type IMiddlewareChange,\n} from './middleware.interface';\nimport type { Event } from '@zk-tech/bedrock/event';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport type { IDisposable } from '@zk-tech/bedrock/dispose';\nimport { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport { ActionPointRunner } from './action-point-runner';\n\nexport class MiddlewareManager implements IMiddlewareManager<any, any> {\n private readonly _registerById: Map<string, IUseMiddlewareProps<any, any>> = new Map();\n /** caller <-> middleware handler 的映射表 */\n private readonly _registerByCaller: Map<string, string[]> = new Map();\n\n private readonly _onMiddlewareChange = new Emitter();\n private readonly _disposeMap: Map<string, IDisposable> = new Map();\n public onMiddlewareChange: Event<[IMiddlewareChange<any>]> = this._onMiddlewareChange.event;\n\n buildRunner(options: IBuildRunnerProps<any, any>): ActionPointRunner<any> {\n const caller = this._getCaller(options);\n const handlers = (this._registerByCaller.get(caller) ?? [])\n .map((id) => this._registerById.get(id)?.handler)\n .filter((item) => item);\n if (options.handler) {\n handlers.push(options.handler);\n }\n\n return new ActionPointRunner(\n // @ts-ignore type error\n handlers,\n {\n from: options.trigger,\n name: options.uiConfig.id,\n trigger: options.method,\n },\n options.uiConfig,\n );\n }\n\n use<T>(props: IUseMiddlewareProps<any, any>) {\n const existed = this._registerById.get(props.id);\n if (existed) {\n // 由于支持 merge props 成本有点高(需要考虑参数回收) ROI 不高直接报错。\n // 需要更新不如直接走移除重新注册来得方便.\n lvAssertNotHere('config had been existed');\n }\n\n this._registerById.set(props.id, props);\n\n props.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: props.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n this._registerByCaller.set(caller, []);\n }\n const target = this._registerByCaller.get(caller)!;\n target.push(props.id);\n });\n\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n\n // bind middleware trigger\n const dispose = props.freshTrigger(() => {\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n });\n this._disposeMap.set(props.id, dispose);\n }\n\n unUse(id: string): void {\n const target = this._registerById.get(id);\n if (!target) {\n return;\n }\n\n target.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: target.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n return;\n }\n const triggers = this._registerByCaller.get(caller)!;\n this._registerByCaller.set(\n caller,\n triggers.filter((_item) => _item === target.id),\n );\n });\n\n this._onMiddlewareChange.fire({\n trigger: target.trigger,\n method: target.triggerMethod,\n });\n\n const dispose = this._disposeMap.get(id);\n dispose?.dispose();\n this._disposeMap.delete(id);\n }\n\n private _getCaller({ trigger, method }: { trigger: string; method: string | number | symbol }) {\n return `${trigger}-${method.toString()}`;\n }\n}\n","import type { Event } from '@zk-tech/bedrock/event';\nimport { Disposable } from '@zk-tech/bedrock/dispose';\nimport { IContainerService } from '@zk-tech/bedrock/di';\n\nimport type { IUiManagerSymbol, IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBaseSetting } from './setting/setting.interface';\nimport { MiddlewareManager } from './middleware/middleware';\nimport { type IMiddlewareManager, type IUseMiddlewareProps } from './middleware/middleware.interface';\n\nexport abstract class BaseUiConfigurationService<\n ISetting extends IBaseSetting,\n UIManagerSymbol extends IUiManagerSymbol,\n MixinConfig extends Record<UIManagerSymbol, any[]>,\n ISymbolAllManager extends Record<UIManagerSymbol, IBaseUiManager<any>>,\n> extends Disposable {\n readonly _serviceBrand: undefined;\n\n public get setting(): ISetting {\n return this._setting;\n }\n\n public middleware!: IMiddlewareManager<UIManagerSymbol, MixinConfig>;\n\n abstract uiManager: ISymbolAllManager;\n\n constructor(\n private readonly _setting: ISetting,\n @IContainerService protected readonly _containerService: IContainerService,\n ) {\n super();\n }\n\n public abstract render(): React.ReactNode;\n protected abstract _initAllManager(): void;\n\n registerConfig(config: Partial<MixinConfig>) {\n for (const key of Object.keys(config)) {\n // @ts-ignore type error\n this.uiManager[key].registerConfig(config[key]);\n }\n }\n\n useMiddleware(props: IUseMiddlewareProps<UIManagerSymbol, MixinConfig>) {\n return this.middleware.use(props);\n }\n\n protected _bootstrap() {\n // @ts-ignore type error\n this.middleware = this._containerService.createInstance(MiddlewareManager);\n // 初始化顶部栏,左侧栏,路由层面的UI Manager\n this._initAllManager();\n }\n}\n","import { proxy } from 'valtio';\nimport { merge } from 'lodash-es';\n\nimport { type IBaseSetting } from './setting.interface';\n\nexport abstract class BaseSetting<T extends IBaseSetting> {\n public observableData: T;\n\n constructor(options: { setting: Partial<T> }) {\n const defaultConfig: IBaseSetting = {\n namespace: 'base',\n visible: true,\n debugMode: false,\n };\n\n this.observableData = proxy(merge(defaultConfig, options.setting) as T);\n }\n\n get namespace() {\n return this.observableData.namespace;\n }\n\n get debugMode() {\n return this.observableData.debugMode;\n }\n\n get visible() {\n return this.observableData.visible;\n }\n}\n","import { createContext } from 'react';\nimport { BaseUiConfigurationService } from '@/base/base-ui-configuration-service';\n\nexport type IContext<T extends BaseUiConfigurationService<any, any, any, any>> = {\n // 内部模块使用,允许拿到 public 方法,所以不引用 interface 了.\n uiConfigurationService: T;\n};\n\n// @ts-ignore 由业务时序来保证一定有值,这里忽略报错\nexport const GlobalContext = createContext<IContext>();\n","import { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport type { IMiddlewareChange, IMiddlewareManager } from '@/base/middleware/middleware.interface';\nimport type { IUiManagerSymbol, IBaseUiManager } from './base-ui-manager.interface';\n\nexport abstract class BaseUiManager<\n TConfigSymbol extends IUiManagerSymbol,\n TConfig extends Record<string, any>,\n> implements IBaseUiManager<TConfig>\n{\n // feat: 修复旧框架跳转新框架闪动\n constructor(protected readonly _middlewareManager: IMiddlewareManager<TConfigSymbol, any>) {\n this._listenerMiddlewareChange();\n }\n\n abstract registerConfig(configs: TConfig[]): void;\n\n public unRegisterConfig(id: string): void {\n lvAssertNotHere(\n 'There is no such scenario yet, and no support capability is provided for the time being. If necessary, please contact infrastructure support',\n );\n }\n\n abstract render(...params: any[]): React.ReactNode;\n abstract _middlewareChange(props: IMiddlewareChange<TConfigSymbol>): void;\n\n private _listenerMiddlewareChange() {\n this._middlewareManager.onMiddlewareChange((props: any) => {\n this._middlewareChange(props);\n });\n }\n}\n","import { useMemo } from 'react';\nimport { useSnapshot } from 'valtio';\n\n/** 空对象占位,当 selectionTarget 为空时传入 useSnapshot,保证 hooks 始终按相同顺序调用 */\nconst EMPTY_OBJECT = {} as object;\n\n/**\n * 使用 valtio 实现的 selector hook:从 proxy 对象中选择数据,当选择的数据变化时触发组件重渲染。\n *\n * @param selectionTarget 传给 selector 用以 pick 数据的 proxy 对象\n * @param selector 定义如何从 target 中选取/派生数值\n * @param options.deps 添加到 useMemo 的额外依赖,selector 依赖外部变量时传入\n */\nexport function useObserverSelector<S, T>(\n selectionTarget: S,\n selector: (selectionTarget: NonNullable<S>) => T,\n options: {\n /** 添加依赖项到 useMemo 中 */\n deps?: readonly unknown[];\n } = {},\n): S extends object ? T : T | undefined {\n const { deps = [] } = options;\n\n // 始终无条件调用 hooks,符合 React rules of hooks;空时用占位对象\n const target =\n selectionTarget != null && typeof selectionTarget === 'object'\n ? (selectionTarget as object)\n : EMPTY_OBJECT;\n const snapshot = useSnapshot(target);\n\n const selectedValue = useMemo(() => {\n if (selectionTarget == null || typeof selectionTarget !== 'object') {\n return undefined as S extends object ? T : T | undefined;\n }\n return selector(snapshot as NonNullable<S>);\n }, [selectionTarget, snapshot, ...deps]);\n\n return selectedValue as S extends object ? T : T | undefined;\n}\n","export enum OrderLevel {\n high = 'high',\n default = 'default',\n low = 'low',\n}\n\ninterface IOrderType {\n /**\n * 在 order 之上的排序规则\n * 严格按照:high > default > low 顺序排序\n * */\n orderLevel?: OrderLevel;\n\n /** 排序设置,默认为 0 */\n order?: number;\n}\n\n/**\n * 通用的排序函数,主要分作两类排序规则\n * 优先使用 orderLevel 分组,后使用 order 排序\n * 主要为了处理一些希望固定展示头部和底部的场景,而出现 order 争抢的 case\n */\nexport function sortListBySettings<T extends IOrderType>({\n list,\n filter = (item) => item,\n}: {\n list: Array<T>;\n filter?: (item: T) => T;\n}): Array<T> {\n return list\n .sort((a: T, b: T) => {\n const typeSort: {\n [key in Exclude<IOrderType['orderLevel'], undefined>]: number;\n } = { high: 2, default: 1, low: 0 };\n const { orderLevel: aType = 'default', order: aPriority = 0 } = a;\n const { orderLevel: bType = 'default', order: bPriority = 0 } = b;\n\n if (aType !== bType) {\n return typeSort[bType] - typeSort[aType];\n }\n\n return bPriority - aPriority;\n })\n .map(filter);\n}\n","/**\n * @description 将传入的UI配置数组,通过打平整合到一个对象中\n * @example\n * input: [{ pageRoute: [xxx] }, {pageRoute: [xxx2]}]\n * output: { pageRoute: [xxx, xxx2] }\n */\nexport const mergeUiConfigs = <T extends Record<string, Array<any>>>(configs: Array<Partial<T>>) => {\n const uiConfigs: Partial<T> = {};\n configs.map((configObj) => {\n for (const [key, config] of Object.entries(configObj)) {\n if (!Array.isArray(config)) {\n continue;\n }\n if (key in uiConfigs) {\n uiConfigs[key]?.push(...config);\n } else {\n Object.assign(uiConfigs, {\n [key]: config,\n });\n }\n }\n });\n return uiConfigs;\n};\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\nimport type { IMiddlewareManager } from '@/base/middleware/middleware.interface';\n\n// import type { IUiConfigMap } from '@/ui-manager/ui-mixin-config.interface';\n\nexport function runnerBuilder({\n middleware,\n trigger,\n method,\n handler,\n uiConfig,\n}: {\n middleware: IMiddlewareManager<any, any>;\n trigger: IUiManagerSymbol;\n method: string;\n handler?: (...args: any[]) => any;\n uiConfig: any;\n}) {\n const runner = middleware.buildRunner({\n trigger,\n method,\n handler,\n uiConfig,\n });\n return runner;\n}\n","/**\n * 用于带默认值执行 config 的回调方法\n * @param config - config 的回调\n * @param defaultValue - 默认值\n * @param args - 参数\n * @internal\n * @privateRemarks\n * config类型改成 T | ((...params: any[]) =\\> T),ts认为不一定是callable\n * https://github.com/microsoft/TypeScript/issues/37663\n * 我们需要这个函数能成功的类型推断T\n * 但是config设成any可能会产生错误,这里的类型推断只能由config产生\n * 例如 evaluate\\<TooltipConfig| string | undefined\\>(tooltipConfig, undefined);\n * 为什么写<T>是因为defaultValue是undefined\n * 所以当T没有写,就会错误的由defaultValue推断T\n * 还有一种可能是T写了就变成了强制类型转换,也会出错\n * 即使改成issue里面说的方法,也没有办法限制defaultValue类型\n */\nexport function evaluate<T>(config: any, defaultValue: T, ...args: any[]): T {\n if (typeof config === 'function') {\n return config(...args) ?? defaultValue;\n }\n return config ?? defaultValue;\n}\n","import React from 'react';\nimport type { NavigateOptions } from 'react-router-dom';\nimport type { Event } from '@zk-tech/bedrock/event';\n\nimport type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IPageRouteConfig } from './page-route-config.interface';\n\nexport const PageRouteManagerSymbol = 'PageRoute';\n\nexport interface IPageRouteObservableData {\n currentRoute: string | undefined;\n configs: IPageRouteConfig[];\n keepAliveStatusMap: Record<string, IKeepAliveEventData>;\n // 历史路由路径\n historyRoutes: string[];\n containerWidth: number;\n}\n\nexport interface IGeneratePathOptions {\n params?: Record<string, string>;\n query?: Record<string, string> | string;\n}\n\nexport interface INavigateOptions extends IGeneratePathOptions, NavigateOptions {}\n\nexport enum KeepAliveStatus {\n /** 激活态 */\n Activated = 'Activated',\n /** 失活态 */\n InActivated = 'InActivated',\n}\n\nexport interface IKeepAliveEventData {\n /** 当前激活状态对应的路由路径 */\n pathName: string;\n /** 当前激活状态对应的路由ID */\n routeId: string;\n /** 当前激活状态 */\n status: KeepAliveStatus;\n /** 当前激活状态的路由携带的信息 */\n locationState: any;\n}\n\nexport type IPageRouteRenderOptions = {\n layout: React.ReactNode;\n};\n\nexport type IPageRouteOutletOptions = {\n routesConfig: IPageRouteConfig[];\n};\n\nexport interface IPageRouteManager extends IBaseUiManager<IPageRouteConfig> {\n observableData: IPageRouteObservableData;\n\n render: (options: IPageRouteRenderOptions) => React.ReactNode;\n\n renderOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 用于单向的路由跳转场景 */\n renderSingleOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 当前激活的路由信息 */\n currentKeepAliveData: IKeepAliveEventData | undefined;\n\n /** 等待待跳转的路由 */\n pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n\n currentRoute: IPageRouteConfig | undefined;\n\n /** 触发路由改变的回调 */\n onWouldRouteChange: Event<[string | number, options?: NavigateOptions]>;\n\n notifyPageRendered: (config: string | IPageRouteConfig) => void;\n\n onPageRendered: Event<[IPageRouteConfig]>;\n\n onPageContainerWidthChange: Event<[]>;\n\n /** 路由配置发生变化时触发的事件 */\n onRouteConfigChange: Event<[IPageRouteConfig[]]>;\n\n getRouteConfigByPath: (path: string) => IPageRouteConfig | undefined;\n\n /** 更新当前路由 */\n updatePageRoute: (path: string) => void;\n\n /** 生成路径 */\n generatePath: (id: string, options?: IGeneratePathOptions | undefined) => string;\n\n /** 路由到具体地址 */\n navigate: (id: string, options?: INavigateOptions) => void;\n\n /** 返回到上级页面\n * @param {number} 默认是-1 即返回上一级页面\n * */\n navigateBack: (to?: number) => void;\n\n /** 使用keep-alive之后,可监听keep-alive看当前那一个路由组件被激活了 */\n onKeepAliveChange: Event<[IKeepAliveEventData]>;\n\n /** 由外部去触发当前需要激活那一个路由 */\n activateKeepAliveRoute: (activatePathName: string, locationState: any) => void;\n\n updateContainerWidth: (width: number) => void;\n\n /** 初始化完 pageRouteManager 可以进行navigate了 */\n initDone: VoidFunction;\n}\n","import { SharedMutex } from '@zk-tech/bedrock/lock';\n\n/**\n * @description\n * 初始化门闩:在 initDone 前拦截行为,initDone 后放行。\n * 使用 SharedMutex 作为一次性锁。\n */\nexport class InitAwaitLock {\n private readonly _mutex = new SharedMutex();\n\n constructor() {\n // 使用 void 忽略 Promise,锁会在同步流程中生效\n void this._mutex.lock();\n }\n\n /**\n * @description 是否已经完成初始化\n */\n get hasBeenDone(): boolean {\n return !this._mutex.isLocked();\n }\n\n /**\n * @description 标记初始化完成并放行\n */\n public initDone(): void {\n if (this.hasBeenDone) {\n return;\n }\n this._mutex.unLock();\n }\n}\n","/**\n * 比较两个字符串是否相等\n * @param val\n * @param otherVal\n * @returns {boolean}\n */\nexport const isEqualStr = (val: string, otherVal: string) => val === otherVal;\n","import { lvAssertNever, lvAssertNotHere } from '@zk-tech/bedrock/assert';\n\nexport const queryStringify = (parseObj: Record<string, string>) => {\n if (typeof parseObj !== 'object') {\n lvAssertNever(parseObj);\n }\n return Object.entries(parseObj)\n .map((item) => `${item[0]}=${item[1]}`)\n .join('&');\n};\n","import type { FC, ComponentType, LazyExoticComponent } from 'react';\nimport { lazy, Suspense } from 'react';\nimport { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary';\n\nimport { retryWrapper } from '@/utils/retry';\nimport type { ErrorBoundaryProps, SuspenseBoundaryProps } from './interface';\n\nexport const lazyRetry: typeof lazy = (factory) => {\n return lazy(retryWrapper(factory, { delayMs: 1000, numTry: 5 }));\n};\n\ntype LazyPreloadResult<T extends ComponentType<any>> = LazyExoticComponent<T> & { preload: () => void };\n\ntype Factory<T extends ComponentType<any>> = () => Promise<{\n default: T;\n}>;\n\ntype LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => LazyPreloadResult<T>;\n\nexport const lazyPreload: LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => {\n const Component = lazy(factory) as LazyPreloadResult<T>;\n Component.preload = factory;\n return Component;\n};\n\n/**\n * 组件内部不再自动上报错误到slardar,业务需根据需要在 `onError` 回调中上报slardar\n * @constructor\n */\nexport const ErrorBoundary: FC<ErrorBoundaryProps> = ({ children, fallback, onError }) => {\n return (\n <ReactErrorBoundary fallback={fallback ?? <div />} onError={onError}>\n {children}\n </ReactErrorBoundary>\n );\n};\n\nexport const SuspenseBoundary: FC<SuspenseBoundaryProps> = ({\n children,\n fallback = null,\n errorFallback,\n onError,\n}) => (\n <ErrorBoundary fallback={errorFallback ?? fallback} onError={onError}>\n <Suspense fallback={fallback}>{children}</Suspense>\n </ErrorBoundary>\n);\n\nexport type { SuspenseBoundaryProps, ErrorBoundaryProps };\n",".root {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL3BhZ2Utcm91dGUvY29tcG9uZW50Iiwic291cmNlcyI6WyJwYWdlLXJvdXRlLm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUVBIiwic291cmNlc0NvbnRlbnQiOlsiLnJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iXX0= */","import { type FC, useContext, useEffect, useMemo } from 'react';\nimport { Routes, Route, useNavigate, Navigate } from 'react-router-dom';\nimport { ErrorBoundary } from '@/components/lazy-load';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\n\nimport { GlobalContext } from '@/base/context';\nimport {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n} from '@/feature/page-route/page-route-manager.interface';\nimport Styles from './page-route.module.scss';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype IPageRoute = {\n layout: React.ReactNode;\n};\n\nexport const PageRoute: FC<IPageRoute> = ({ layout }) => {\n const navigate = useNavigate();\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const baseRoute = useObserverSelector(uiConfigurationService.setting, (manager) => {\n return {\n namespace: manager.namespace,\n baseRoute: manager.baseRoute,\n redirectRouteIdWhen404: manager.redirectRouteIdWhen404,\n };\n });\n\n const routeConfig = useObserverSelector(\n uiConfigurationService.uiManager[PageRouteManagerSymbol],\n (manager) => {\n return manager.observableData.configs;\n },\n );\n\n // 分别订阅 setting 和 routeManager 的 observableData\n const redirectRouteId = useObserverSelector(uiConfigurationService.setting, (setting) => {\n return setting?.observableData?.redirectRouteIdWhen404;\n });\n\n const redirectRoute = useMemo(() => {\n if (!redirectRouteId) return undefined;\n return routeConfig.find(({ id }) => id === redirectRouteId);\n }, [redirectRouteId, routeConfig]);\n\n useEffect(() => {\n const routeManager = uiConfigurationService.uiManager[PageRouteManagerSymbol] as IPageRouteManager;\n const { pendingNavigateOptions } = routeManager;\n if (pendingNavigateOptions) {\n navigate(pendingNavigateOptions.path, pendingNavigateOptions.options);\n }\n const dispose = routeManager.onWouldRouteChange((to, options) => {\n if (typeof to === 'string') {\n navigate(to, options);\n } else {\n navigate(to);\n }\n });\n routeManager.initDone();\n\n return () => {\n dispose.dispose();\n };\n }, []);\n\n const config = useMemo(\n () =>\n routeConfig.map((item) => (\n <Route\n key={`${item.id}-${item._updateTime}`}\n path={item.path}\n index={item.index}\n element={\n <ErrorBoundary fallback={item.errorElement ?? <div />}>\n {item.content ? item.content() : item.skeleton?.() ?? null}\n </ErrorBoundary>\n }\n />\n )),\n [routeConfig],\n );\n\n return (\n <div id={baseRoute.namespace} className={Styles.root}>\n <Routes>\n <Route element={layout}>{config}</Route>\n {redirectRoute ? <Route path=\"*\" element={<Navigate to={redirectRoute.path} replace />} /> : null}\n </Routes>\n </div>\n );\n};\n","import { memo, startTransition, useRef } from 'react';\nimport type { FC, ReactNode } from 'react';\n\nexport const Repeater: FC<{\n mode: 'visible' | 'hidden';\n children: ReactNode;\n}> = memo((props) => {\n const { mode, children } = props;\n const resolveRef = useRef<() => void>();\n\n if (mode === 'hidden') {\n startTransition(() => {\n throw new Promise<void>((resolve) => (resolveRef.current = resolve));\n });\n }\n\n if (resolveRef.current) {\n startTransition(() => {\n resolveRef.current?.();\n resolveRef.current = void 0;\n });\n }\n\n return <>{children}</>;\n});\n","import { Suspense, memo } from 'react';\nimport type { FC, ReactNode, SuspenseProps } from 'react';\nimport { Repeater } from './repeater';\n\ninterface OffscreenProps extends SuspenseProps {\n mode: 'visible' | 'hidden';\n fallback?: ReactNode;\n}\n\nexport const Offscreen: FC<OffscreenProps> = memo((props) => {\n const { mode, children, fallback } = props;\n\n return (\n <Suspense fallback={fallback}>\n <Repeater mode={mode}>{children}</Repeater>\n </Suspense>\n );\n});\n","import { matchPath } from 'react-router-dom';\n\nimport { evaluate } from '@/utils/evaluate';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\n/**\n * 是否需要支持路由缓存\n * @param routesConfig 路由配置项\n * @param pathName 当前路由路径\n * @returns 是否可以缓存该路由组件\n */\nexport const isNeedCache = (routesConfig: IPageRouteConfig[], pathName: string, updateTime?: number) => {\n for (const route of routesConfig) {\n const isMatch = matchPath(route.path, pathName);\n if (isMatch) {\n const needCache = evaluate<boolean>(route.isNeedCache, false);\n const hasContentRendered = Boolean(evaluate<React.ReactNode | null>(route.content, null));\n const updated = !updateTime ? true : updateTime === route._updateTime;\n return needCache && hasContentRendered && updated;\n }\n }\n return false;\n};\n","import type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\nimport { isEqualStr } from '@/utils';\nimport type { IKeepAliveOutlet } from '../interface';\nimport { isNeedCache } from './cache';\n\n/**\n * @desc 从outlets中过滤出不符合条件的路由组件进行卸载操作\n * 不符合条件:\n * 1. 不属于当前激活态的缓存数据\n * 2. 且不需要缓存的数据给清空卸载掉\n */\nexport const getValidOutlets = (\n routesConfig: IPageRouteConfig[],\n pathname: string,\n outlets: IKeepAliveOutlet[],\n) => {\n outlets.forEach((outletData) => {\n // const isBusiness = businessHostPrefixList.some((prefix) => location.href.startsWith(prefix));\n const needRefresh = !(\n outletData.isCacheItem && isNeedCache(routesConfig, outletData.pathname, outletData?.updateTime)\n );\n if (needRefresh) {\n outletData.outlet = null;\n }\n });\n const newOutlets = outlets.filter((item) => item.outlet);\n return newOutlets;\n};\n","import { useState, useRef, useEffect, type ReactNode, useContext } from 'react';\nimport { useOutlet, useLocation, matchPath, useNavigationType } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const initRef = useRef(true);\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n const calcOutlets = (tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n };\n const [outlets, setOutlets] = useState<IKeepAliveOutlet[]>(\n // eslint-disable-next-line no-nested-ternary\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions\n ? []\n : initRef.current\n ? calcOutlets([])\n : [],\n );\n initRef.current = false;\n\n useEffect(() => {\n setOutlets(calcOutlets);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname, routesConfig]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import { useState, useRef, useEffect, type ReactNode, useContext, useMemo } from 'react';\nimport { useOutlet, useLocation } from 'react-router-dom';\nimport { useMemoizedFn } from 'ahooks';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveSingleOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n\n const calcOutlets = useMemoizedFn((tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n });\n\n const outlets = useMemo(() => {\n if (uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions) {\n return [];\n }\n\n return calcOutlets([]);\n }, [\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions,\n location.pathname,\n routesConfig,\n calcOutlets,\n ]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import { proxy, snapshot } from 'valtio';\nimport { InitAwaitLock } from '@/utils/init-await-lock';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport { lvAssert } from '@zk-tech/bedrock/assert';\nimport { matchPath } from 'react-router-dom';\nimport { compile } from 'path-to-regexp';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { type IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { isEqualStr, queryStringify } from '@/utils';\nimport { type IPageRouteConfig } from './page-route-config.interface';\nimport {\n KeepAliveStatus,\n PageRouteManagerSymbol,\n type IGeneratePathOptions,\n type IKeepAliveEventData,\n type INavigateOptions,\n type IPageRouteManager,\n type IPageRouteObservableData,\n type IPageRouteRenderOptions,\n type IPageRouteOutletOptions,\n} from './page-route-manager.interface';\n\nimport { PageRoute } from './component/page-route';\nimport KeepAliveOutlet from './component/keep-alive-outlet';\nimport KeepAliveSingleOutlet from './component/keep-alive-outlet/single';\n\nimport type { IMiddlewareChange } from '@/base/middleware/middleware.interface';\nimport { runnerBuilder } from '@/utils/runner-builder';\n\nexport class PageRouteManager\n extends BaseUiManager<any, IPageRouteConfig>\n implements IBaseUiManager<IPageRouteConfig>, IPageRouteManager\n{\n public observableData: IPageRouteObservableData = proxy({\n currentRoute: undefined,\n configs: [],\n keepAliveStatusMap: {},\n historyRoutes: [],\n containerWidth: 0,\n });\n\n private readonly _locker: InitAwaitLock = new InitAwaitLock();\n private _pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n private readonly _onWouldRouteChange = new Emitter<[string | number, options?: INavigateOptions]>();\n public onWouldRouteChange = this._onWouldRouteChange.event;\n private readonly _onKeepAliveChange = new Emitter<[IKeepAliveEventData]>();\n public onKeepAliveChange = this._onKeepAliveChange.event;\n private readonly _onPageRendered = new Emitter<[IPageRouteConfig]>();\n public onPageRendered = this._onPageRendered.event;\n\n private readonly _onPageContainerWidthChange = new Emitter<[]>();\n public onPageContainerWidthChange = this._onPageContainerWidthChange.event;\n\n // fix: 修复个人页刷新打开埋点参数上报错误\n private readonly _onRouteConfigChange = new Emitter<[IPageRouteConfig[]]>();\n public onRouteConfigChange = this._onRouteConfigChange.event;\n\n get pendingNavigateOptions() {\n return this._pendingNavigateOptions;\n }\n\n get currentRoute(): IPageRouteConfig | undefined {\n return this.getRouteConfigByPath(this.observableData.currentRoute);\n }\n\n registerConfig(configs: IPageRouteConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config, {\n _updateTime: Date.now(),\n });\n } else {\n // create\n this.observableData.configs.push(\n merge({}, config, {\n _updateTime: 0,\n }),\n );\n }\n });\n // 触发路由配置变化事件\n this._onRouteConfigChange.fire(snapshot(this.observableData.configs) as IPageRouteConfig[]);\n }\n\n public updatePageRoute(path: string) {\n const routesLength = this.observableData.historyRoutes.length;\n if (this.observableData.historyRoutes[routesLength - 1] !== path) {\n this.observableData.historyRoutes.push(path);\n }\n\n // 之前有路由,先触发上一次的 unactive\n const preRoute = this.getRouteConfigByPath(this.observableData.currentRoute);\n const setRoute = this.getRouteConfigByPath(path);\n if (preRoute?.id !== setRoute?.id) {\n if (preRoute) {\n preRoute?.onActiveChange?.({ active: false });\n }\n setRoute?.onActiveChange?.({ active: true });\n }\n\n this.observableData.currentRoute = path;\n }\n\n public navigate(id: string, options?: INavigateOptions) {\n const path = this.generatePath(id, options);\n\n // 空白也是可能的路径\n if (!path) {\n lvAssert(path);\n }\n\n const runner = runnerBuilder({\n middleware: this._middlewareManager,\n trigger: PageRouteManagerSymbol,\n method: 'shouldInterceptNavigate',\n uiConfig: { id, path },\n });\n const interceptRes = runner.run();\n\n if (runner.isStop || interceptRes) {\n return;\n }\n\n this._navigateByPath(path, options);\n }\n\n private _navigateByPath(path: string, options?: INavigateOptions) {\n if (!this._locker.hasBeenDone) {\n this._pendingNavigateOptions = {\n path,\n options,\n };\n } else {\n this._onWouldRouteChange.fire(path, options);\n }\n }\n\n public updateContainerWidth(width: number) {\n this.observableData.containerWidth = width;\n }\n\n public initDone() {\n if (this._locker.hasBeenDone) {\n return;\n }\n this._pendingNavigateOptions = undefined;\n this._locker.initDone();\n }\n\n public navigateBack(to = -1) {\n this._onWouldRouteChange.fire(to);\n }\n\n public generatePath(id: string, options?: IGeneratePathOptions | undefined): string {\n const target = this.observableData.configs.find((item) => item.id === id);\n if (!target) {\n lvAssert(target);\n }\n\n const compiler = compile(target.path);\n let result = compiler(options?.params ?? {});\n const query = typeof options?.query === 'string' ? options.query : queryStringify(options?.query ?? {});\n if (query.length !== 0) {\n result += query.includes('?') ? query : `?${query}`;\n }\n return result;\n }\n\n public activateKeepAliveRoute(activatePathName: string, locationState: any) {\n if (\n activatePathName === this.currentKeepAliveData?.pathName &&\n Object.values(this.observableData.keepAliveStatusMap).length > 0\n ) {\n return;\n }\n const allAlivePathName = Object.keys(this.observableData.keepAliveStatusMap);\n // 1. 将其他的失活\n for (const alivePathName of allAlivePathName) {\n if (isEqualStr(alivePathName, activatePathName)) {\n continue;\n }\n this._updateKeepAliveStatus(alivePathName, KeepAliveStatus.InActivated);\n }\n // 2. 将当前的激活\n this._updateKeepAliveStatus(activatePathName, KeepAliveStatus.Activated, locationState);\n }\n\n private _updateKeepAliveStatus(pathName: string, status: KeepAliveStatus, locationState?: any) {\n const lastStatusVal = this.observableData.keepAliveStatusMap[pathName];\n const lastStatus = lastStatusVal?.status;\n const matchRoteConfig = this.observableData.configs.find((item) => matchPath(item.path, pathName));\n const newStatusVal = {\n pathName,\n status,\n routeId: matchRoteConfig?.id ?? 'NOT_FOUND',\n locationState,\n };\n this.observableData.keepAliveStatusMap[pathName] = newStatusVal;\n if (status !== lastStatus) {\n this._onKeepAliveChange.fire(newStatusVal);\n }\n }\n\n public get currentKeepAliveData() {\n const { keepAliveStatusMap, currentRoute = '' } = this.observableData;\n return Object.values(keepAliveStatusMap).find((item) => item.status === KeepAliveStatus.Activated);\n }\n\n public notifyPageRendered(config: string | IPageRouteConfig): void {\n if (typeof config === 'string') {\n const routeConfig = this.getRouteConfigByPath(config);\n this._onPageRendered.fire(routeConfig ? (snapshot(routeConfig) as IPageRouteConfig) : routeConfig!);\n } else {\n this._onPageRendered.fire(config);\n }\n }\n\n public getRouteConfigByPath(path: string | undefined): IPageRouteConfig | undefined {\n if (!path) {\n return undefined;\n }\n\n return this.observableData.configs.find((item) => matchPath(item.path, path));\n }\n\n public render(options: IPageRouteRenderOptions): React.ReactNode {\n return <PageRoute layout={options.layout} />;\n }\n\n public renderOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveOutlet {...options} />;\n }\n\n public renderSingleOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveSingleOutlet {...options} />;\n }\n\n _middlewareChange(props: IMiddlewareChange<'PageRoute'>): void {\n // throw new Error('Method not implemented.');\n }\n}\n","import {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n KeepAliveStatus,\n type IKeepAliveEventData,\n} from '@/feature/page-route/page-route-manager.interface';\nimport { useContext, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype TEffectCallback = () => VoidFunction | void;\n\n/**\n * 用于keep-alive路由组件的显隐的触发钩子\n * 由于使用了keep-alive路由的组件,无法使用useEffect来表示组件是否可见,因此增加该hook来\n * 帮助外部来判断当前组件是否可见,用法和useEffect类似,传入一个函数,该函数会在初始化时候的路由组件\n * 被激活的时候触发,且该函数返回的函数会在失活的时候被触发\n * @example\n * ```\n * useKeepAliveEffect(() => {\n * console.log('我被激活啦!')\n * return () => {\n * console.log('我被失活啦!')\n * }\n * })\n * ```\n */\nexport const useKeepAliveEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n\nexport const useKeepAliveLayoutEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useLayoutEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n","import { useContext } from 'react';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\n\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\nexport const usePageContainerWidth = () => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n return useObserverSelector(uiConfigurationService.uiManager[PageRouteManagerSymbol], (manager) => {\n return manager.observableData.containerWidth;\n });\n};\n","import { createPath, matchPath, parsePath, type NavigateOptions, type To } from 'react-router-dom';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { PageRouteManagerSymbol } from '../page-route-manager.interface';\n\n/** 导航至某一个页面 */\nexport function navigate(\n platformUiConfiguration: ITempUiConfigurationServiceContext['uiConfigurationService'],\n to: To | number,\n options?: NavigateOptions,\n) {\n const pageRouteManager = platformUiConfiguration.uiManager[PageRouteManagerSymbol];\n\n switch (true) {\n case typeof to === 'string' || typeof to === 'object':\n if (typeof to === 'object') {\n to = createPath(to);\n }\n const path = parsePath(to);\n const routesConfig = pageRouteManager.observableData.configs;\n const matchItem = routesConfig.find((item) => matchPath(item.path, path?.pathname ?? ''));\n if (!matchItem) {\n return;\n }\n // 匹配到的路由参数\n const matchRes = Object.entries(matchPath(matchItem.path, path?.pathname ?? '')?.params ?? {}).reduce<\n Record<string, string>\n >((pre, cur) => {\n const [key, value] = cur;\n if (!key || !value) {\n return pre;\n }\n pre[key] = value;\n return pre;\n }, {});\n\n pageRouteManager.navigate(matchItem.id, {\n query: path.search,\n params: matchRes,\n ...options,\n });\n break;\n case typeof to === 'number':\n pageRouteManager.navigateBack(to);\n\n break;\n default:\n }\n}\n","import type { NavigateFunction, NavigateOptions, To } from 'react-router-dom';\nimport { navigate } from '../utils/navigate';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { useMemoizedFn } from 'ahooks';\n\nexport const useNavigateFactory = (\n uiConfigurationService: ITempUiConfigurationServiceContext['uiConfigurationService'],\n): NavigateFunction => {\n const useNavigate = useMemoizedFn((to: To | number, options?: NavigateOptions) => {\n navigate(uiConfigurationService, to, options);\n });\n return useNavigate;\n};\n","import type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBlockContentConfig } from './block-content-config.interface';\n\nexport const BlockContentManagerSymbol = 'BlockContent';\n\nexport interface IBlockContentObservableData {\n forceUpdate: number;\n activeId: string | undefined;\n configs: IBlockContentConfig[];\n}\n\nexport interface IBlockContentManager extends IBaseUiManager<IBlockContentConfig> {\n observableData: IBlockContentObservableData;\n\n // onRouteChange: Event;\n\n changeActiveId: (activeId: string) => void;\n}\n",".container {\n flex: 1;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL2Jsb2NrLWNvbnRlbnQvY29tcG9uZW50Iiwic291cmNlcyI6WyJibG9jay1jb250ZW50Lm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udGFpbmVyIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiJdfQ== */","import React, { useContext, useRef } from 'react';\nimport clsx from 'clsx';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { evaluate } from '@/utils/evaluate';\n\nimport { GlobalContext } from '@/base/context';\nimport { BlockContentManagerSymbol } from '@/feature/block-content/block-content-manager.interface';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/block-content/type';\n\nimport style from './block-content.module.scss';\n\nconst BlockContentComponent: React.FC = React.memo(() => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const activeBlockContentConfig = useObserverSelector(\n uiConfigurationService.uiManager[BlockContentManagerSymbol],\n (manager) => {\n const { activeId, configs } = manager.observableData;\n return configs.find((item) => item.id === activeId);\n },\n );\n\n // 监听是否注册完按钮,ready则开始计算宽高\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={containerRef}\n className={clsx(style.container, evaluate(activeBlockContentConfig?.className, ''))}\n >\n {evaluate(activeBlockContentConfig?.content, null)}\n </div>\n );\n});\n\nexport const BlockContent = BlockContentComponent;\n","import { proxy } from 'valtio';\nimport { lvAssertNotNil } from '@zk-tech/bedrock/assert';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { BlockContent } from './component/block-content';\nimport { type IBlockContentConfig } from './block-content-config.interface';\nimport {\n type IBlockContentManager,\n type IBlockContentObservableData,\n} from './block-content-manager.interface';\n\nexport class BlockContentManager\n extends BaseUiManager<any, IBlockContentConfig>\n implements IBlockContentManager\n{\n public observableData: IBlockContentObservableData = proxy({\n forceUpdate: 0,\n activeId: undefined,\n configs: [],\n });\n\n registerConfig(configs: IBlockContentConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config);\n } else {\n // create\n lvAssertNotNil(\n config.id,\n `The \"id\" attribute is required when registering \"UiManagerName.BlockContent\"`,\n );\n this.observableData.configs.push(config);\n }\n });\n\n // _autoUpdateActiveBlock\n if (\n !(\n this.observableData.activeId &&\n this.observableData.configs.find((item) => item.id === this.observableData.activeId)\n )\n ) {\n // 如果当前没有任何激活的 block, 或者当前激活的block已经是非法态,那么默认兜底选中首个配置\n this.observableData.activeId = this.observableData.configs[0]?.id;\n }\n }\n\n changeActiveId(activeId: string | undefined): void {\n this.observableData.activeId = activeId;\n }\n\n render() {\n return <BlockContent />;\n }\n\n _middlewareChange() {\n this.observableData.forceUpdate++;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/base/middleware/action-point-runner.ts","../src/base/middleware/middleware.ts","../src/base/base-ui-configuration-service.tsx","../src/base/setting/setting.ts","../src/base/context.ts","../src/base/ui-manager/base-ui-manager.ts","../src/base/hooks/use-observer-selector.ts","../src/utils/sort.ts","../src/utils/merged-array.ts","../src/utils/runner-builder.ts","../src/utils/evaluate.ts","../src/feature/page-route/page-route-manager.interface.ts","../src/utils/init-await-lock.ts","../src/utils/is-equal.ts","../src/utils/query-stringify.ts","../src/components/lazy-load/index.tsx","../src/feature/page-route/component/page-route.module.scss","../src/feature/page-route/component/page-route.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/repeater.tsx","../src/feature/page-route/component/keep-alive-outlet/components/offscreen/index.tsx","../src/feature/page-route/component/keep-alive-outlet/utils/cache.ts","../src/feature/page-route/component/keep-alive-outlet/utils/outlets.ts","../src/feature/page-route/component/keep-alive-outlet/index.tsx","../src/feature/page-route/component/keep-alive-outlet/single.tsx","../src/feature/page-route/page-route-manager.tsx","../src/feature/page-route/hooks/use-keep-alive-effect.ts","../src/feature/page-route/hooks/use-page-container-width.ts","../src/feature/page-route/utils/navigate.ts","../src/feature/page-route/hooks/use-navigate-factory.ts","../src/feature/block-content/block-content-manager.interface.ts","../src/feature/block-content/component/block-content.module.scss","../src/feature/block-content/component/block-content.tsx","../src/feature/block-content/block-content-manager.tsx"],"names":["lvAssertNotHere","snapshot","OrderLevel","KeepAliveStatus","ReactErrorBoundary","navigate","useMemo","memo","Suspense","useContext","useEffect","useRef","OutletWrapper","useLocation","useOutlet","proxy","Emitter","merge","matchPath","React","useNavigate","useMemoizedFn"],"mappings":"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","file":"index.js","sourcesContent":["import type { IUseMiddlewareOptions } from './middleware.interface';\n\ntype IActionPointInfo = IUseMiddlewareOptions<any, any>['actionInfo'];\n\ntype INextFunction = (...args: any[]) => any;\n\n/**\n * 停止中间件队列执行的方法\n *\n * @public\n */\nexport type IStopAction = () => void;\n\n/**\n * 中间件执行信息\n * - 方法名\n * - 中间件类型\n * - 执行状态\n * - 耗时\n */\ntype DebugInfo = [string, string, string, number];\n\n/**\n * @internal\n */\nexport class ActionPointRunner<T> extends Function {\n private _rawArguments: any;\n\n constructor(\n private readonly middlewares: ((...args: any[]) => any)[],\n private readonly point: IActionPointInfo,\n private readonly _uiConfig: T,\n ) {\n super();\n const closure: any = (...args: any[]) => closure.run(...args);\n closure.middlewares = middlewares;\n closure.point = point ?? {\n name: '',\n from: '',\n trigger: '',\n path: [],\n };\n closure._uiConfig = _uiConfig;\n return Object.setPrototypeOf(closure, new.target.prototype);\n }\n\n get isStop(): boolean {\n return this._isStop;\n }\n\n private _isStop: boolean = false;\n private index = 0;\n\n run(...args: unknown[]) {\n this._rawArguments = args;\n this.index = -1;\n\n let data;\n while (this.hasNext() && !this._isStop) {\n data = this.getNext()();\n }\n return data;\n }\n\n hasNext() {\n return this.index < this.middlewares.length - 1;\n }\n\n private getNext(skip = false): INextFunction {\n let next: INextFunction = () => {\n /* do nothing*/\n };\n if (this.hasNext()) {\n this.index += 1;\n const handler = this.middlewares[this.index];\n next = () => {\n return handler({\n stop: () => {\n this._isStop = true;\n },\n uiConfig: this._uiConfig,\n actionInfo: this.point,\n triggerArgs: this._rawArguments,\n });\n };\n }\n return next;\n }\n}\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\n\nimport {\n type IUseMiddlewareProps,\n type IMiddlewareManager,\n type IBuildRunnerProps,\n type IMiddlewareChange,\n} from './middleware.interface';\nimport type { Event } from '@zk-tech/bedrock/event';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport type { IDisposable } from '@zk-tech/bedrock/dispose';\nimport { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport { ActionPointRunner } from './action-point-runner';\n\nexport class MiddlewareManager implements IMiddlewareManager<any, any> {\n private readonly _registerById: Map<string, IUseMiddlewareProps<any, any>> = new Map();\n /** caller <-> middleware handler 的映射表 */\n private readonly _registerByCaller: Map<string, string[]> = new Map();\n\n private readonly _onMiddlewareChange = new Emitter();\n private readonly _disposeMap: Map<string, IDisposable> = new Map();\n public onMiddlewareChange: Event<[IMiddlewareChange<any>]> = this._onMiddlewareChange.event;\n\n buildRunner(options: IBuildRunnerProps<any, any>): ActionPointRunner<any> {\n const caller = this._getCaller(options);\n const handlers = (this._registerByCaller.get(caller) ?? [])\n .map((id) => this._registerById.get(id)?.handler)\n .filter((item) => item);\n if (options.handler) {\n handlers.push(options.handler);\n }\n\n return new ActionPointRunner(\n // @ts-ignore type error\n handlers,\n {\n from: options.trigger,\n name: options.uiConfig.id,\n trigger: options.method,\n },\n options.uiConfig,\n );\n }\n\n use<T>(props: IUseMiddlewareProps<any, any>) {\n const existed = this._registerById.get(props.id);\n if (existed) {\n // 由于支持 merge props 成本有点高(需要考虑参数回收) ROI 不高直接报错。\n // 需要更新不如直接走移除重新注册来得方便.\n lvAssertNotHere('config had been existed');\n }\n\n this._registerById.set(props.id, props);\n\n props.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: props.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n this._registerByCaller.set(caller, []);\n }\n const target = this._registerByCaller.get(caller)!;\n target.push(props.id);\n });\n\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n\n // bind middleware trigger\n const dispose = props.freshTrigger(() => {\n this._onMiddlewareChange.fire({\n trigger: props.trigger,\n method: props.triggerMethod,\n });\n });\n this._disposeMap.set(props.id, dispose);\n }\n\n unUse(id: string): void {\n const target = this._registerById.get(id);\n if (!target) {\n return;\n }\n\n target.triggerMethod.forEach((item) => {\n const caller = this._getCaller({ trigger: target.trigger, method: item });\n if (!this._registerByCaller.has(caller)) {\n return;\n }\n const triggers = this._registerByCaller.get(caller)!;\n this._registerByCaller.set(\n caller,\n triggers.filter((_item) => _item === target.id),\n );\n });\n\n this._onMiddlewareChange.fire({\n trigger: target.trigger,\n method: target.triggerMethod,\n });\n\n const dispose = this._disposeMap.get(id);\n dispose?.dispose();\n this._disposeMap.delete(id);\n }\n\n private _getCaller({ trigger, method }: { trigger: string; method: string | number | symbol }) {\n return `${trigger}-${method.toString()}`;\n }\n}\n","import type { Event } from '@zk-tech/bedrock/event';\nimport { Disposable } from '@zk-tech/bedrock/dispose';\nimport { IContainerService } from '@zk-tech/bedrock/di';\n\nimport type { IUiManagerSymbol, IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBaseSetting } from './setting/setting.interface';\nimport { MiddlewareManager } from './middleware/middleware';\nimport { type IMiddlewareManager, type IUseMiddlewareProps } from './middleware/middleware.interface';\n\nexport abstract class BaseUiConfigurationService<\n ISetting extends IBaseSetting,\n UIManagerSymbol extends IUiManagerSymbol,\n MixinConfig extends Record<UIManagerSymbol, any[]>,\n ISymbolAllManager extends Record<UIManagerSymbol, IBaseUiManager<any>>,\n> extends Disposable {\n readonly _serviceBrand: undefined;\n\n public get setting(): ISetting {\n return this._setting;\n }\n\n public middleware!: IMiddlewareManager<UIManagerSymbol, MixinConfig>;\n\n abstract uiManager: ISymbolAllManager;\n\n constructor(\n private readonly _setting: ISetting,\n @IContainerService protected readonly _containerService: IContainerService,\n ) {\n super();\n }\n\n public abstract render(): React.ReactNode;\n protected abstract _initAllManager(): void;\n\n registerConfig(config: Partial<MixinConfig>) {\n for (const key of Object.keys(config)) {\n // @ts-ignore type error\n this.uiManager[key].registerConfig(config[key]);\n }\n }\n\n useMiddleware(props: IUseMiddlewareProps<UIManagerSymbol, MixinConfig>) {\n return this.middleware.use(props);\n }\n\n protected _bootstrap() {\n // @ts-ignore type error\n this.middleware = this._containerService.createInstance(MiddlewareManager);\n // 初始化顶部栏,左侧栏,路由层面的UI Manager\n this._initAllManager();\n }\n}\n","import { proxy } from 'valtio';\nimport { merge } from 'lodash-es';\n\nimport { type IBaseSetting } from './setting.interface';\n\nexport abstract class BaseSetting<T extends IBaseSetting> {\n public observableData: T;\n\n constructor(options: { setting: Partial<T> }) {\n const defaultConfig: IBaseSetting = {\n namespace: 'base',\n visible: true,\n debugMode: false,\n };\n\n this.observableData = proxy(merge(defaultConfig, options.setting) as T);\n }\n\n get namespace() {\n return this.observableData.namespace;\n }\n\n get debugMode() {\n return this.observableData.debugMode;\n }\n\n get visible() {\n return this.observableData.visible;\n }\n}\n","import { createContext } from 'react';\nimport { BaseUiConfigurationService } from '@/base/base-ui-configuration-service';\n\nexport type IContext<T extends BaseUiConfigurationService<any, any, any, any>> = {\n // 内部模块使用,允许拿到 public 方法,所以不引用 interface 了.\n uiConfigurationService: T;\n};\n\n// @ts-ignore 由业务时序来保证一定有值,这里忽略报错\nexport const GlobalContext = createContext<IContext>();\n","import { lvAssertNotHere } from '@zk-tech/bedrock/assert';\nimport type { IMiddlewareChange, IMiddlewareManager } from '@/base/middleware/middleware.interface';\nimport type { IUiManagerSymbol, IBaseUiManager } from './base-ui-manager.interface';\n\nexport abstract class BaseUiManager<\n TConfigSymbol extends IUiManagerSymbol,\n TConfig extends Record<string, any>,\n> implements IBaseUiManager<TConfig>\n{\n // feat: 修复旧框架跳转新框架闪动\n constructor(protected readonly _middlewareManager: IMiddlewareManager<TConfigSymbol, any>) {\n this._listenerMiddlewareChange();\n }\n\n abstract registerConfig(configs: TConfig[]): void;\n\n public unRegisterConfig(id: string): void {\n lvAssertNotHere(\n 'There is no such scenario yet, and no support capability is provided for the time being. If necessary, please contact infrastructure support',\n );\n }\n\n abstract render(...params: any[]): React.ReactNode;\n abstract _middlewareChange(props: IMiddlewareChange<TConfigSymbol>): void;\n\n private _listenerMiddlewareChange() {\n this._middlewareManager.onMiddlewareChange((props: any) => {\n this._middlewareChange(props);\n });\n }\n}\n","import { useMemo } from 'react';\nimport { useSnapshot } from 'valtio';\n\n/** 空对象占位,当 selectionTarget 为空时传入 useSnapshot,保证 hooks 始终按相同顺序调用 */\nconst EMPTY_OBJECT = {} as object;\n\n/**\n * 使用 valtio 实现的 selector hook:从 proxy 对象中选择数据,当选择的数据变化时触发组件重渲染。\n *\n * @param selectionTarget 传给 selector 用以 pick 数据的 proxy 对象\n * @param selector 定义如何从 target 中选取/派生数值\n * @param options.deps 添加到 useMemo 的额外依赖,selector 依赖外部变量时传入\n */\nexport function useObserverSelector<S, T>(\n selectionTarget: S,\n selector: (selectionTarget: NonNullable<S>) => T,\n options: {\n /** 添加依赖项到 useMemo 中 */\n deps?: readonly unknown[];\n } = {},\n): S extends object ? T : T | undefined {\n const { deps = [] } = options;\n\n // 始终无条件调用 hooks,符合 React rules of hooks;空时用占位对象\n const target =\n selectionTarget != null && typeof selectionTarget === 'object'\n ? (selectionTarget as object)\n : EMPTY_OBJECT;\n const snapshot = useSnapshot(target);\n\n const selectedValue = useMemo(() => {\n if (selectionTarget == null || typeof selectionTarget !== 'object') {\n return undefined as S extends object ? T : T | undefined;\n }\n return selector(snapshot as NonNullable<S>);\n }, [selectionTarget, snapshot, ...deps]);\n\n return selectedValue as S extends object ? T : T | undefined;\n}\n","export enum OrderLevel {\n high = 'high',\n default = 'default',\n low = 'low',\n}\n\ninterface IOrderType {\n /**\n * 在 order 之上的排序规则\n * 严格按照:high > default > low 顺序排序\n * */\n orderLevel?: OrderLevel;\n\n /** 排序设置,默认为 0 */\n order?: number;\n}\n\n/**\n * 通用的排序函数,主要分作两类排序规则\n * 优先使用 orderLevel 分组,后使用 order 排序\n * 主要为了处理一些希望固定展示头部和底部的场景,而出现 order 争抢的 case\n */\nexport function sortListBySettings<T extends IOrderType>({\n list,\n filter = (item) => item,\n}: {\n list: Array<T>;\n filter?: (item: T) => T;\n}): Array<T> {\n return list\n .sort((a: T, b: T) => {\n const typeSort: {\n [key in Exclude<IOrderType['orderLevel'], undefined>]: number;\n } = { high: 2, default: 1, low: 0 };\n const { orderLevel: aType = 'default', order: aPriority = 0 } = a;\n const { orderLevel: bType = 'default', order: bPriority = 0 } = b;\n\n if (aType !== bType) {\n return typeSort[bType] - typeSort[aType];\n }\n\n return bPriority - aPriority;\n })\n .map(filter);\n}\n","/**\n * @description 将传入的UI配置数组,通过打平整合到一个对象中\n * @example\n * input: [{ pageRoute: [xxx] }, {pageRoute: [xxx2]}]\n * output: { pageRoute: [xxx, xxx2] }\n */\nexport const mergeUiConfigs = <T extends Record<string, Array<any>>>(configs: Array<Partial<T>>) => {\n const uiConfigs: Partial<T> = {};\n configs.map((configObj) => {\n for (const [key, config] of Object.entries(configObj)) {\n if (!Array.isArray(config)) {\n continue;\n }\n if (key in uiConfigs) {\n uiConfigs[key]?.push(...config);\n } else {\n Object.assign(uiConfigs, {\n [key]: config,\n });\n }\n }\n });\n return uiConfigs;\n};\n","import type { IUiManagerSymbol } from '@/base/ui-manager/base-ui-manager.interface';\nimport type { IMiddlewareManager } from '@/base/middleware/middleware.interface';\n\n// import type { IUiConfigMap } from '@/ui-manager/ui-mixin-config.interface';\n\nexport function runnerBuilder({\n middleware,\n trigger,\n method,\n handler,\n uiConfig,\n}: {\n middleware: IMiddlewareManager<any, any>;\n trigger: IUiManagerSymbol;\n method: string;\n handler?: (...args: any[]) => any;\n uiConfig: any;\n}) {\n const runner = middleware.buildRunner({\n trigger,\n method,\n handler,\n uiConfig,\n });\n return runner;\n}\n","/**\n * 用于带默认值执行 config 的回调方法\n * @param config - config 的回调\n * @param defaultValue - 默认值\n * @param args - 参数\n * @internal\n * @privateRemarks\n * config类型改成 T | ((...params: any[]) =\\> T),ts认为不一定是callable\n * https://github.com/microsoft/TypeScript/issues/37663\n * 我们需要这个函数能成功的类型推断T\n * 但是config设成any可能会产生错误,这里的类型推断只能由config产生\n * 例如 evaluate\\<TooltipConfig| string | undefined\\>(tooltipConfig, undefined);\n * 为什么写<T>是因为defaultValue是undefined\n * 所以当T没有写,就会错误的由defaultValue推断T\n * 还有一种可能是T写了就变成了强制类型转换,也会出错\n * 即使改成issue里面说的方法,也没有办法限制defaultValue类型\n */\nexport function evaluate<T>(config: any, defaultValue: T, ...args: any[]): T {\n if (typeof config === 'function') {\n return config(...args) ?? defaultValue;\n }\n return config ?? defaultValue;\n}\n","import React from 'react';\nimport type { NavigateOptions } from 'react-router-dom';\nimport type { Event } from '@zk-tech/bedrock/event';\n\nimport type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IPageRouteConfig } from './page-route-config.interface';\n\nexport const PageRouteManagerSymbol = 'PageRoute';\n\nexport interface IPageRouteObservableData {\n currentRoute: string | undefined;\n configs: IPageRouteConfig[];\n keepAliveStatusMap: Record<string, IKeepAliveEventData>;\n // 历史路由路径\n historyRoutes: string[];\n containerWidth: number;\n}\n\nexport interface IGeneratePathOptions {\n params?: Record<string, string>;\n query?: Record<string, string> | string;\n}\n\nexport interface INavigateOptions extends IGeneratePathOptions, NavigateOptions {}\n\nexport enum KeepAliveStatus {\n /** 激活态 */\n Activated = 'Activated',\n /** 失活态 */\n InActivated = 'InActivated',\n}\n\nexport interface IKeepAliveEventData {\n /** 当前激活状态对应的路由路径 */\n pathName: string;\n /** 当前激活状态对应的路由ID */\n routeId: string;\n /** 当前激活状态 */\n status: KeepAliveStatus;\n /** 当前激活状态的路由携带的信息 */\n locationState: any;\n}\n\nexport type IPageRouteRenderOptions = {\n layout: React.ReactNode;\n};\n\nexport type IPageRouteOutletOptions = {\n routesConfig: IPageRouteConfig[];\n};\n\nexport interface IPageRouteManager extends IBaseUiManager<IPageRouteConfig> {\n observableData: IPageRouteObservableData;\n\n render: (options: IPageRouteRenderOptions) => React.ReactNode;\n\n renderOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 用于单向的路由跳转场景 */\n renderSingleOutlet: (options: IPageRouteOutletOptions) => React.ReactNode;\n\n /** 当前激活的路由信息 */\n currentKeepAliveData: IKeepAliveEventData | undefined;\n\n /** 等待待跳转的路由 */\n pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n\n currentRoute: IPageRouteConfig | undefined;\n\n /** 触发路由改变的回调 */\n onWouldRouteChange: Event<[string | number, options?: NavigateOptions]>;\n\n notifyPageRendered: (config: string | IPageRouteConfig) => void;\n\n onPageRendered: Event<[IPageRouteConfig]>;\n\n onPageContainerWidthChange: Event<[]>;\n\n /** 路由配置发生变化时触发的事件 */\n onRouteConfigChange: Event<[IPageRouteConfig[]]>;\n\n getRouteConfigByPath: (path: string) => IPageRouteConfig | undefined;\n\n /** 更新当前路由 */\n updatePageRoute: (path: string) => void;\n\n /** 生成路径 */\n generatePath: (id: string, options?: IGeneratePathOptions | undefined) => string;\n\n /** 路由到具体地址 */\n navigate: (id: string, options?: INavigateOptions) => void;\n\n /** 返回到上级页面\n * @param {number} 默认是-1 即返回上一级页面\n * */\n navigateBack: (to?: number) => void;\n\n /** 使用keep-alive之后,可监听keep-alive看当前那一个路由组件被激活了 */\n onKeepAliveChange: Event<[IKeepAliveEventData]>;\n\n /** 由外部去触发当前需要激活那一个路由 */\n activateKeepAliveRoute: (activatePathName: string, locationState: any) => void;\n\n updateContainerWidth: (width: number) => void;\n\n /** 初始化完 pageRouteManager 可以进行navigate了 */\n initDone: VoidFunction;\n}\n","import { SharedMutex } from '@zk-tech/bedrock/lock';\n\n/**\n * @description\n * 初始化门闩:在 initDone 前拦截行为,initDone 后放行。\n * 使用 SharedMutex 作为一次性锁。\n */\nexport class InitAwaitLock {\n private readonly _mutex = new SharedMutex();\n\n constructor() {\n // 使用 void 忽略 Promise,锁会在同步流程中生效\n void this._mutex.lock();\n }\n\n /**\n * @description 是否已经完成初始化\n */\n get hasBeenDone(): boolean {\n return !this._mutex.isLocked();\n }\n\n /**\n * @description 标记初始化完成并放行\n */\n public initDone(): void {\n if (this.hasBeenDone) {\n return;\n }\n this._mutex.unLock();\n }\n}\n","/**\n * 比较两个字符串是否相等\n * @param val\n * @param otherVal\n * @returns {boolean}\n */\nexport const isEqualStr = (val: string, otherVal: string) => val === otherVal;\n","import { lvAssertNever, lvAssertNotHere } from '@zk-tech/bedrock/assert';\n\nexport const queryStringify = (parseObj: Record<string, string>) => {\n if (typeof parseObj !== 'object') {\n lvAssertNever(parseObj);\n }\n return Object.entries(parseObj)\n .map((item) => `${item[0]}=${item[1]}`)\n .join('&');\n};\n","import type { FC, ComponentType, LazyExoticComponent } from 'react';\nimport { lazy, Suspense } from 'react';\nimport { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary';\n\nimport { retryWrapper } from '@/utils/retry';\nimport type { ErrorBoundaryProps, SuspenseBoundaryProps } from './interface';\n\nexport const lazyRetry: typeof lazy = (factory) => {\n return lazy(retryWrapper(factory, { delayMs: 1000, numTry: 5 }));\n};\n\ntype LazyPreloadResult<T extends ComponentType<any>> = LazyExoticComponent<T> & { preload: () => void };\n\ntype Factory<T extends ComponentType<any>> = () => Promise<{\n default: T;\n}>;\n\ntype LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => LazyPreloadResult<T>;\n\nexport const lazyPreload: LazyPreload = <T extends ComponentType<any>>(factory: Factory<T>) => {\n const Component = lazy(factory) as LazyPreloadResult<T>;\n Component.preload = factory;\n return Component;\n};\n\n/**\n * 组件内部不再自动上报错误到slardar,业务需根据需要在 `onError` 回调中上报slardar\n * @constructor\n */\nexport const ErrorBoundary: FC<ErrorBoundaryProps> = ({ children, fallback, onError }) => {\n return (\n <ReactErrorBoundary fallback={fallback ?? <div />} onError={onError}>\n {children}\n </ReactErrorBoundary>\n );\n};\n\nexport const SuspenseBoundary: FC<SuspenseBoundaryProps> = ({\n children,\n fallback = null,\n errorFallback,\n onError,\n}) => (\n <ErrorBoundary fallback={errorFallback ?? fallback} onError={onError}>\n <Suspense fallback={fallback}>{children}</Suspense>\n </ErrorBoundary>\n);\n\nexport type { SuspenseBoundaryProps, ErrorBoundaryProps };\n",".root {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL3BhZ2Utcm91dGUvY29tcG9uZW50Iiwic291cmNlcyI6WyJwYWdlLXJvdXRlLm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUVBIiwic291cmNlc0NvbnRlbnQiOlsiLnJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iXX0= */","import { type FC, useContext, useEffect, useMemo } from 'react';\nimport { Routes, Route, useNavigate, Navigate } from 'react-router-dom';\nimport { ErrorBoundary } from '@/components/lazy-load';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\n\nimport { GlobalContext } from '@/base/context';\nimport {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n} from '@/feature/page-route/page-route-manager.interface';\nimport Styles from './page-route.module.scss';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype IPageRoute = {\n layout: React.ReactNode;\n};\n\nexport const PageRoute: FC<IPageRoute> = ({ layout }) => {\n const navigate = useNavigate();\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const baseRoute = useObserverSelector(uiConfigurationService.setting, (manager) => {\n return {\n namespace: manager.namespace,\n baseRoute: manager.baseRoute,\n redirectRouteIdWhen404: manager.redirectRouteIdWhen404,\n };\n });\n\n const routeConfig = useObserverSelector(\n uiConfigurationService.uiManager[PageRouteManagerSymbol],\n (manager) => {\n return manager.observableData.configs;\n },\n );\n\n // 分别订阅 setting 和 routeManager 的 observableData\n const redirectRouteId = useObserverSelector(uiConfigurationService.setting, (setting) => {\n return setting?.observableData?.redirectRouteIdWhen404;\n });\n\n const redirectRoute = useMemo(() => {\n if (!redirectRouteId) return undefined;\n return routeConfig.find(({ id }) => id === redirectRouteId);\n }, [redirectRouteId, routeConfig]);\n\n useEffect(() => {\n const routeManager = uiConfigurationService.uiManager[PageRouteManagerSymbol] as IPageRouteManager;\n const { pendingNavigateOptions } = routeManager;\n if (pendingNavigateOptions) {\n navigate(pendingNavigateOptions.path, pendingNavigateOptions.options);\n }\n const dispose = routeManager.onWouldRouteChange((to, options) => {\n if (typeof to === 'string') {\n navigate(to, options);\n } else {\n navigate(to);\n }\n });\n routeManager.initDone();\n\n return () => {\n dispose.dispose();\n };\n }, []);\n\n const config = useMemo(\n () =>\n routeConfig.map((item) => (\n <Route\n key={`${item.id}-${item._updateTime}`}\n path={item.path}\n index={item.index}\n element={\n <ErrorBoundary fallback={item.errorElement ?? <div />}>\n {item.content ? item.content() : item.skeleton?.() ?? null}\n </ErrorBoundary>\n }\n />\n )),\n [routeConfig],\n );\n\n return (\n <div id={baseRoute.namespace} className={Styles.root}>\n <Routes>\n <Route element={layout}>{config}</Route>\n {redirectRoute ? <Route path=\"*\" element={<Navigate to={redirectRoute.path} replace />} /> : null}\n </Routes>\n </div>\n );\n};\n","import { memo, startTransition, useRef } from 'react';\nimport type { FC, ReactNode } from 'react';\n\nexport const Repeater: FC<{\n mode: 'visible' | 'hidden';\n children: ReactNode;\n}> = memo((props) => {\n const { mode, children } = props;\n const resolveRef = useRef<() => void>();\n\n if (mode === 'hidden') {\n startTransition(() => {\n throw new Promise<void>((resolve) => (resolveRef.current = resolve));\n });\n }\n\n if (resolveRef.current) {\n startTransition(() => {\n resolveRef.current?.();\n resolveRef.current = void 0;\n });\n }\n\n return <>{children}</>;\n});\n","import { Suspense, memo } from 'react';\nimport type { FC, ReactNode, SuspenseProps } from 'react';\nimport { Repeater } from './repeater';\n\ninterface OffscreenProps extends SuspenseProps {\n mode: 'visible' | 'hidden';\n fallback?: ReactNode;\n}\n\nexport const Offscreen: FC<OffscreenProps> = memo((props) => {\n const { mode, children, fallback } = props;\n\n return (\n <Suspense fallback={fallback}>\n <Repeater mode={mode}>{children}</Repeater>\n </Suspense>\n );\n});\n","import { matchPath } from 'react-router-dom';\n\nimport { evaluate } from '@/utils/evaluate';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\n/**\n * 是否需要支持路由缓存\n * @param routesConfig 路由配置项\n * @param pathName 当前路由路径\n * @returns 是否可以缓存该路由组件\n */\nexport const isNeedCache = (routesConfig: IPageRouteConfig[], pathName: string, updateTime?: number) => {\n for (const route of routesConfig) {\n const isMatch = matchPath(route.path, pathName);\n if (isMatch) {\n const needCache = evaluate<boolean>(route.isNeedCache, false);\n const hasContentRendered = Boolean(evaluate<React.ReactNode | null>(route.content, null));\n const updated = !updateTime ? true : updateTime === route._updateTime;\n return needCache && hasContentRendered && updated;\n }\n }\n return false;\n};\n","import type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\n\nimport { isEqualStr } from '@/utils';\nimport type { IKeepAliveOutlet } from '../interface';\nimport { isNeedCache } from './cache';\n\n/**\n * @desc 从outlets中过滤出不符合条件的路由组件进行卸载操作\n * 不符合条件:\n * 1. 不属于当前激活态的缓存数据\n * 2. 且不需要缓存的数据给清空卸载掉\n */\nexport const getValidOutlets = (\n routesConfig: IPageRouteConfig[],\n pathname: string,\n outlets: IKeepAliveOutlet[],\n) => {\n outlets.forEach((outletData) => {\n // const isBusiness = businessHostPrefixList.some((prefix) => location.href.startsWith(prefix));\n const needRefresh = !(\n outletData.isCacheItem && isNeedCache(routesConfig, outletData.pathname, outletData?.updateTime)\n );\n if (needRefresh) {\n outletData.outlet = null;\n }\n });\n const newOutlets = outlets.filter((item) => item.outlet);\n return newOutlets;\n};\n","import { useState, useRef, useEffect, type ReactNode, useContext } from 'react';\nimport { useOutlet, useLocation, matchPath, useNavigationType } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const initRef = useRef(true);\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n const calcOutlets = (tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n };\n const [outlets, setOutlets] = useState<IKeepAliveOutlet[]>(\n // eslint-disable-next-line no-nested-ternary\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions\n ? []\n : initRef.current\n ? calcOutlets([])\n : [],\n );\n initRef.current = false;\n\n useEffect(() => {\n setOutlets(calcOutlets);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname, routesConfig]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import { useState, useRef, useEffect, type ReactNode, useContext, useMemo } from 'react';\nimport { useOutlet, useLocation } from 'react-router-dom';\nimport { useMemoizedFn } from 'ahooks';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\nimport type { IPageRouteConfig } from '@/feature/page-route/page-route-config.interface';\nimport { isEqualStr } from '@/utils';\n\nimport { Offscreen } from './components/offscreen';\nimport { getValidOutlets, isNeedCache } from './utils';\nimport { type IKeepAliveOutlet } from './interface';\n\ninterface IKeepAliveProps {\n /** 路由加载失败时候的兜底 */\n fallback?: ReactNode;\n /** 路由配置项 */\n routesConfig: IPageRouteConfig[];\n}\n\nconst OutletWrapper: React.FC<{\n path: string;\n visible: boolean;\n updateTime: number | undefined;\n children: React.ReactNode;\n}> = ({ visible, updateTime, path, children }) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n useEffect(() => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].notifyPageRendered(path);\n }, [path, visible, updateTime]);\n\n return <>{children}</>;\n};\n\n/**\n * @desc 使用该组件可以在多路由切换场景中,缓存起需要缓存的路由组件\n * 使用react中的offscreen和suspence来使缓存中但不显示的组件失活\n */\nexport default function KeepAliveSingleOutlet({ fallback, routesConfig }: IKeepAliveProps) {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const outlet = useOutlet();\n const handleNotifyActivateRoute = (pathName: string) => {\n uiConfigurationService.uiManager[PageRouteManagerSymbol].activateKeepAliveRoute(pathName, location.state);\n };\n\n const calcOutlets = useMemoizedFn((tempOutlets: IKeepAliveOutlet[]) => {\n // 0. 通知📢当前需要激活的keep-alive组件\n handleNotifyActivateRoute(location.pathname);\n // 1. 先对不符合条件的路由组件进行卸载操作\n const validTempOutlets = getValidOutlets(routesConfig, location.pathname, tempOutlets);\n // 2. 再从有效的缓存路由组件中选择和当前路由匹配的缓存数据\n let result = validTempOutlets.find((o) => isEqualStr(o.pathname, location.pathname));\n const isCacheItem = isNeedCache(routesConfig, location.pathname);\n const notUpdated = routesConfig.reduce((bool, _config) => {\n if (!bool) {\n return false;\n }\n if (!_config._updateTime) {\n return true;\n }\n return (\n tempOutlets.find((item) => item.pathname === location.pathname)?.updateTime === _config._updateTime\n );\n }, true);\n // 3. 如果当前缓存路由组件是有效的话,直接返回缓存路由组件\n if (result && isCacheItem && notUpdated) {\n return validTempOutlets;\n }\n\n // 4. 如果没有的话,将当前路由组件记录起来\n if (!result) {\n const route = uiConfigurationService.uiManager[PageRouteManagerSymbol].getRouteConfigByPath(\n location.pathname,\n );\n result = {\n key: location.key,\n pathname: location.pathname,\n updateTime: route?._updateTime,\n isCacheItem,\n outlet,\n };\n validTempOutlets.push(result);\n }\n return validTempOutlets;\n });\n\n const outlets = useMemo(() => {\n if (uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions) {\n return [];\n }\n\n return calcOutlets([]);\n }, [\n uiConfigurationService.uiManager[PageRouteManagerSymbol].pendingNavigateOptions,\n location.pathname,\n routesConfig,\n calcOutlets,\n ]);\n\n return (\n <>\n {outlets.map((o) => {\n const visibilityMode = isEqualStr(o.pathname, location.pathname) ? 'visible' : 'hidden';\n return (\n <Offscreen key={o.key} mode={visibilityMode} fallback={fallback || null}>\n <OutletWrapper\n updateTime={o.updateTime}\n path={location.pathname}\n visible={visibilityMode === 'visible'}\n >\n {o.outlet}\n </OutletWrapper>\n </Offscreen>\n );\n })}\n </>\n );\n}\n","import React from 'react';\nimport { proxy, snapshot } from 'valtio';\nimport { InitAwaitLock } from '@/utils/init-await-lock';\nimport { Emitter } from '@zk-tech/bedrock/event';\nimport { lvAssert } from '@zk-tech/bedrock/assert';\nimport { matchPath } from 'react-router-dom';\nimport { compile } from 'path-to-regexp';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { type IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { isEqualStr, queryStringify } from '@/utils';\nimport { type IPageRouteConfig } from './page-route-config.interface';\nimport {\n KeepAliveStatus,\n PageRouteManagerSymbol,\n type IGeneratePathOptions,\n type IKeepAliveEventData,\n type INavigateOptions,\n type IPageRouteManager,\n type IPageRouteObservableData,\n type IPageRouteRenderOptions,\n type IPageRouteOutletOptions,\n} from './page-route-manager.interface';\n\nimport { PageRoute } from './component/page-route';\nimport KeepAliveOutlet from './component/keep-alive-outlet';\nimport KeepAliveSingleOutlet from './component/keep-alive-outlet/single';\n\nimport type { IMiddlewareChange } from '@/base/middleware/middleware.interface';\nimport { runnerBuilder } from '@/utils/runner-builder';\n\nexport class PageRouteManager\n extends BaseUiManager<any, IPageRouteConfig>\n implements IBaseUiManager<IPageRouteConfig>, IPageRouteManager\n{\n public observableData: IPageRouteObservableData = proxy({\n currentRoute: undefined,\n configs: [],\n keepAliveStatusMap: {},\n historyRoutes: [],\n containerWidth: 0,\n });\n\n private readonly _locker: InitAwaitLock = new InitAwaitLock();\n private _pendingNavigateOptions:\n | {\n path: string;\n options?: INavigateOptions;\n }\n | undefined;\n private readonly _onWouldRouteChange = new Emitter<[string | number, options?: INavigateOptions]>();\n public onWouldRouteChange = this._onWouldRouteChange.event;\n private readonly _onKeepAliveChange = new Emitter<[IKeepAliveEventData]>();\n public onKeepAliveChange = this._onKeepAliveChange.event;\n private readonly _onPageRendered = new Emitter<[IPageRouteConfig]>();\n public onPageRendered = this._onPageRendered.event;\n\n private readonly _onPageContainerWidthChange = new Emitter<[]>();\n public onPageContainerWidthChange = this._onPageContainerWidthChange.event;\n\n // fix: 修复个人页刷新打开埋点参数上报错误\n private readonly _onRouteConfigChange = new Emitter<[IPageRouteConfig[]]>();\n public onRouteConfigChange = this._onRouteConfigChange.event;\n\n get pendingNavigateOptions() {\n return this._pendingNavigateOptions;\n }\n\n get currentRoute(): IPageRouteConfig | undefined {\n return this.getRouteConfigByPath(this.observableData.currentRoute);\n }\n\n registerConfig(configs: IPageRouteConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config, {\n _updateTime: Date.now(),\n });\n } else {\n // create\n this.observableData.configs.push(\n merge({}, config, {\n _updateTime: 0,\n }),\n );\n }\n });\n // 触发路由配置变化事件\n this._onRouteConfigChange.fire(snapshot(this.observableData.configs) as IPageRouteConfig[]);\n }\n\n public updatePageRoute(path: string) {\n const routesLength = this.observableData.historyRoutes.length;\n if (this.observableData.historyRoutes[routesLength - 1] !== path) {\n this.observableData.historyRoutes.push(path);\n }\n\n // 之前有路由,先触发上一次的 unactive\n const preRoute = this.getRouteConfigByPath(this.observableData.currentRoute);\n const setRoute = this.getRouteConfigByPath(path);\n if (preRoute?.id !== setRoute?.id) {\n if (preRoute) {\n preRoute?.onActiveChange?.({ active: false });\n }\n setRoute?.onActiveChange?.({ active: true });\n }\n\n this.observableData.currentRoute = path;\n }\n\n public navigate(id: string, options?: INavigateOptions) {\n const path = this.generatePath(id, options);\n\n // 空白也是可能的路径\n if (!path) {\n lvAssert(path);\n }\n\n const runner = runnerBuilder({\n middleware: this._middlewareManager,\n trigger: PageRouteManagerSymbol,\n method: 'shouldInterceptNavigate',\n uiConfig: { id, path },\n });\n const interceptRes = runner.run();\n\n if (runner.isStop || interceptRes) {\n return;\n }\n\n this._navigateByPath(path, options);\n }\n\n private _navigateByPath(path: string, options?: INavigateOptions) {\n if (!this._locker.hasBeenDone) {\n this._pendingNavigateOptions = {\n path,\n options,\n };\n } else {\n this._onWouldRouteChange.fire(path, options);\n }\n }\n\n public updateContainerWidth(width: number) {\n this.observableData.containerWidth = width;\n }\n\n public initDone() {\n if (this._locker.hasBeenDone) {\n return;\n }\n this._pendingNavigateOptions = undefined;\n this._locker.initDone();\n }\n\n public navigateBack(to = -1) {\n this._onWouldRouteChange.fire(to);\n }\n\n public generatePath(id: string, options?: IGeneratePathOptions | undefined): string {\n const target = this.observableData.configs.find((item) => item.id === id);\n if (!target) {\n lvAssert(target);\n }\n\n const compiler = compile(target.path);\n let result = compiler(options?.params ?? {});\n const query = typeof options?.query === 'string' ? options.query : queryStringify(options?.query ?? {});\n if (query.length !== 0) {\n result += query.includes('?') ? query : `?${query}`;\n }\n return result;\n }\n\n public activateKeepAliveRoute(activatePathName: string, locationState: any) {\n if (\n activatePathName === this.currentKeepAliveData?.pathName &&\n Object.values(this.observableData.keepAliveStatusMap).length > 0\n ) {\n return;\n }\n const allAlivePathName = Object.keys(this.observableData.keepAliveStatusMap);\n // 1. 将其他的失活\n for (const alivePathName of allAlivePathName) {\n if (isEqualStr(alivePathName, activatePathName)) {\n continue;\n }\n this._updateKeepAliveStatus(alivePathName, KeepAliveStatus.InActivated);\n }\n // 2. 将当前的激活\n this._updateKeepAliveStatus(activatePathName, KeepAliveStatus.Activated, locationState);\n }\n\n private _updateKeepAliveStatus(pathName: string, status: KeepAliveStatus, locationState?: any) {\n const lastStatusVal = this.observableData.keepAliveStatusMap[pathName];\n const lastStatus = lastStatusVal?.status;\n const matchRoteConfig = this.observableData.configs.find((item) => matchPath(item.path, pathName));\n const newStatusVal = {\n pathName,\n status,\n routeId: matchRoteConfig?.id ?? 'NOT_FOUND',\n locationState,\n };\n this.observableData.keepAliveStatusMap[pathName] = newStatusVal;\n if (status !== lastStatus) {\n this._onKeepAliveChange.fire(newStatusVal);\n }\n }\n\n public get currentKeepAliveData() {\n const { keepAliveStatusMap, currentRoute = '' } = this.observableData;\n return Object.values(keepAliveStatusMap).find((item) => item.status === KeepAliveStatus.Activated);\n }\n\n public notifyPageRendered(config: string | IPageRouteConfig): void {\n if (typeof config === 'string') {\n const routeConfig = this.getRouteConfigByPath(config);\n this._onPageRendered.fire(routeConfig ? (snapshot(routeConfig) as IPageRouteConfig) : routeConfig!);\n } else {\n this._onPageRendered.fire(config);\n }\n }\n\n public getRouteConfigByPath(path: string | undefined): IPageRouteConfig | undefined {\n if (!path) {\n return undefined;\n }\n\n return this.observableData.configs.find((item) => matchPath(item.path, path));\n }\n\n public render(options: IPageRouteRenderOptions): React.ReactNode {\n return <PageRoute layout={options.layout} />;\n }\n\n public renderOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveOutlet {...options} />;\n }\n\n public renderSingleOutlet(options: IPageRouteOutletOptions) {\n return <KeepAliveSingleOutlet {...options} />;\n }\n\n _middlewareChange(props: IMiddlewareChange<'PageRoute'>): void {\n // throw new Error('Method not implemented.');\n }\n}\n","import {\n PageRouteManagerSymbol,\n type IPageRouteManager,\n KeepAliveStatus,\n type IKeepAliveEventData,\n} from '@/feature/page-route/page-route-manager.interface';\nimport { useContext, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\ntype TEffectCallback = () => VoidFunction | void;\n\n/**\n * 用于keep-alive路由组件的显隐的触发钩子\n * 由于使用了keep-alive路由的组件,无法使用useEffect来表示组件是否可见,因此增加该hook来\n * 帮助外部来判断当前组件是否可见,用法和useEffect类似,传入一个函数,该函数会在初始化时候的路由组件\n * 被激活的时候触发,且该函数返回的函数会在失活的时候被触发\n * @example\n * ```\n * useKeepAliveEffect(() => {\n * console.log('我被激活啦!')\n * return () => {\n * console.log('我被失活啦!')\n * }\n * })\n * ```\n */\nexport const useKeepAliveEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n\nexport const useKeepAliveLayoutEffect = (cb: TEffectCallback) => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n const location = useLocation();\n const initedLocationPathName = useRef(location.pathname);\n const disposeCb = useRef<VoidFunction | void | null>(null);\n\n const handleTrggerEffect = (data?: IKeepAliveEventData) => {\n if (!data) {\n return;\n }\n if (data.pathName !== initedLocationPathName.current) {\n return;\n }\n if (data.status === KeepAliveStatus.Activated) {\n disposeCb.current = cb?.();\n } else {\n disposeCb.current?.();\n }\n };\n\n useLayoutEffect(() => {\n const pageRouteManager = uiConfigurationService.uiManager[PageRouteManagerSymbol];\n // 1. 根据是否匹配当前路由成功来在初始化流程中先触发一遍\n handleTrggerEffect(pageRouteManager.currentKeepAliveData);\n // 2. 监听keep-alive路由的改变来触发对应的钩子\n const diposeEvent = pageRouteManager.onKeepAliveChange((data) => {\n handleTrggerEffect(data);\n });\n return () => {\n diposeEvent.dispose();\n disposeCb.current?.();\n };\n }, []);\n};\n","import { useContext } from 'react';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { PageRouteManagerSymbol } from '@/feature/page-route/page-route-manager.interface';\n\nimport { GlobalContext } from '@/base/context';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/page-route/type';\n\nexport const usePageContainerWidth = () => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n return useObserverSelector(uiConfigurationService.uiManager[PageRouteManagerSymbol], (manager) => {\n return manager.observableData.containerWidth;\n });\n};\n","import { createPath, matchPath, parsePath, type NavigateOptions, type To } from 'react-router-dom';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { PageRouteManagerSymbol } from '../page-route-manager.interface';\n\n/** 导航至某一个页面 */\nexport function navigate(\n platformUiConfiguration: ITempUiConfigurationServiceContext['uiConfigurationService'],\n to: To | number,\n options?: NavigateOptions,\n) {\n const pageRouteManager = platformUiConfiguration.uiManager[PageRouteManagerSymbol];\n\n switch (true) {\n case typeof to === 'string' || typeof to === 'object':\n if (typeof to === 'object') {\n to = createPath(to);\n }\n const path = parsePath(to);\n const routesConfig = pageRouteManager.observableData.configs;\n const matchItem = routesConfig.find((item) => matchPath(item.path, path?.pathname ?? ''));\n if (!matchItem) {\n return;\n }\n // 匹配到的路由参数\n const matchRes = Object.entries(matchPath(matchItem.path, path?.pathname ?? '')?.params ?? {}).reduce<\n Record<string, string>\n >((pre, cur) => {\n const [key, value] = cur;\n if (!key || !value) {\n return pre;\n }\n pre[key] = value;\n return pre;\n }, {});\n\n pageRouteManager.navigate(matchItem.id, {\n query: path.search,\n params: matchRes,\n ...options,\n });\n break;\n case typeof to === 'number':\n pageRouteManager.navigateBack(to);\n\n break;\n default:\n }\n}\n","import type { NavigateFunction, NavigateOptions, To } from 'react-router-dom';\nimport { navigate } from '../utils/navigate';\nimport type { ITempUiConfigurationServiceContext } from '../type';\nimport { useMemoizedFn } from 'ahooks';\n\nexport const useNavigateFactory = (\n uiConfigurationService: ITempUiConfigurationServiceContext['uiConfigurationService'],\n): NavigateFunction => {\n const useNavigate = useMemoizedFn((to: To | number, options?: NavigateOptions) => {\n navigate(uiConfigurationService, to, options);\n });\n return useNavigate;\n};\n","import type { IBaseUiManager } from '@/base/ui-manager/base-ui-manager.interface';\nimport { type IBlockContentConfig } from './block-content-config.interface';\n\nexport const BlockContentManagerSymbol = 'BlockContent';\n\nexport interface IBlockContentObservableData {\n forceUpdate: number;\n activeId: string | undefined;\n configs: IBlockContentConfig[];\n}\n\nexport interface IBlockContentManager extends IBaseUiManager<IBlockContentConfig> {\n observableData: IBlockContentObservableData;\n\n // onRouteChange: Event;\n\n changeActiveId: (activeId: string) => void;\n}\n",".container {\n flex: 1;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2Njci9Qcm9qZWN0L3dlYi1wYWNrYWdlL3BhY2thZ2VzL2Jhc2UtdWktY29uZmlndXJhdGlvbi1zZXJ2aWNlL3NyYy9mZWF0dXJlL2Jsb2NrLWNvbnRlbnQvY29tcG9uZW50Iiwic291cmNlcyI6WyJibG9jay1jb250ZW50Lm1vZHVsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udGFpbmVyIHtcbiAgZmxleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiJdfQ== */","import React, { useContext, useRef } from 'react';\nimport clsx from 'clsx';\nimport { useObserverSelector } from '@/base/hooks/use-observer-selector';\nimport { evaluate } from '@/utils/evaluate';\n\nimport { GlobalContext } from '@/base/context';\nimport { BlockContentManagerSymbol } from '@/feature/block-content/block-content-manager.interface';\nimport { type ITempUiConfigurationServiceContext } from '@/feature/block-content/type';\n\nimport style from './block-content.module.scss';\n\nconst BlockContentComponent: React.FC = React.memo(() => {\n const { uiConfigurationService } = useContext<ITempUiConfigurationServiceContext>(GlobalContext);\n\n const activeBlockContentConfig = useObserverSelector(\n uiConfigurationService.uiManager[BlockContentManagerSymbol],\n (manager) => {\n const { activeId, configs } = manager.observableData;\n return configs.find((item) => item.id === activeId);\n },\n );\n\n // 监听是否注册完按钮,ready则开始计算宽高\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={containerRef}\n className={clsx(style.container, evaluate(activeBlockContentConfig?.className, ''))}\n >\n {evaluate(activeBlockContentConfig?.content, null)}\n </div>\n );\n});\n\nexport const BlockContent = BlockContentComponent;\n","import { proxy } from 'valtio';\nimport { lvAssertNotNil } from '@zk-tech/bedrock/assert';\nimport { merge } from 'lodash-es';\n\nimport { BaseUiManager } from '@/base/ui-manager/base-ui-manager';\nimport { BlockContent } from './component/block-content';\nimport { type IBlockContentConfig } from './block-content-config.interface';\nimport {\n type IBlockContentManager,\n type IBlockContentObservableData,\n} from './block-content-manager.interface';\n\nexport class BlockContentManager\n extends BaseUiManager<any, IBlockContentConfig>\n implements IBlockContentManager\n{\n public observableData: IBlockContentObservableData = proxy({\n forceUpdate: 0,\n activeId: undefined,\n configs: [],\n });\n\n registerConfig(configs: IBlockContentConfig[]) {\n configs.forEach((config) => {\n const idx = this.observableData.configs.findIndex((item) => item.id === config.id);\n if (idx !== -1) {\n // update\n this.observableData.configs[idx] = merge(this.observableData.configs[idx], config);\n } else {\n // create\n lvAssertNotNil(\n config.id,\n `The \"id\" attribute is required when registering \"UiManagerName.BlockContent\"`,\n );\n this.observableData.configs.push(config);\n }\n });\n\n // _autoUpdateActiveBlock\n if (\n !(\n this.observableData.activeId &&\n this.observableData.configs.find((item) => item.id === this.observableData.activeId)\n )\n ) {\n // 如果当前没有任何激活的 block, 或者当前激活的block已经是非法态,那么默认兜底选中首个配置\n this.observableData.activeId = this.observableData.configs[0]?.id;\n }\n }\n\n changeActiveId(activeId: string | undefined): void {\n this.observableData.activeId = activeId;\n }\n\n render() {\n return <BlockContent />;\n }\n\n _middlewareChange() {\n this.observableData.forceUpdate++;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zk-tech/base-ui-configuration-service",
3
- "version": "0.0.1-alpha.3",
3
+ "version": "0.0.1-alpha.4",
4
4
  "description": "Base UI configuration service",
5
5
  "license": "MIT",
6
6
  "author": "ZK Tech",