import { initDynamicRouter } from './dynamicRouter'; import { isDynamicRouterInitialized, markDynamicRouterInitialized, getDynamicRouterBootstrapPromise, setDynamicRouterBootstrapPromise, setInitializingDynamicRouter, } from './dynamic-router-state'; export type EnsureDynamicRouterOptions = { /** 默认:登录已带 menus 时不强制清空重建 */ forceRefresh?: boolean; }; /** * 保证动态路由已 addRoute。多处调用共享同一 Promise。 */ export function ensureDynamicRouterReady( options: EnsureDynamicRouterOptions = {}, ): Promise { if (isDynamicRouterInitialized()) { return Promise.resolve(); } const existing = getDynamicRouterBootstrapPromise(); if (existing) { return existing; } setInitializingDynamicRouter(true); const promise = initDynamicRouter({ forceRefresh: options.forceRefresh ?? false, }) .then(() => { markDynamicRouterInitialized(true); }) .catch((err) => { setDynamicRouterBootstrapPromise(null); markDynamicRouterInitialized(false); throw err; }) .finally(() => { setInitializingDynamicRouter(false); }); setDynamicRouterBootstrapPromise(promise); return promise; }