refactor(workspace): enforce layered crate boundaries

This commit is contained in:
elky
2026-07-15 23:47:19 +08:00
parent a728c090a9
commit 8616fe6ee2
969 changed files with 40187 additions and 27240 deletions
+27 -29
View File
@@ -1,45 +1,43 @@
import { log } from '@/utils/logger'
import type { Router } from 'vue-router'
const PREFETCH_COOLDOWN_MS = 5 * 1000
const lastPrefetchAt = new Map<string, number>()
const adminRouteWarmers: Record<string, () => Promise<void>> = {
'/admin/users': async () => {
await import('@/views/admin/Users.vue')
},
'/admin/providers': async () => {
await import('@/views/admin/ProviderManagement.vue')
},
'/admin/models': async () => {
await import('@/views/admin/ModelManagement.vue')
},
'/admin/routing': async () => {
await import('@/views/admin/RoutingProfiles.vue')
},
'/admin/pool': async () => {
await import('@/views/admin/PoolManagement.vue')
},
'/admin/payment-gateways': async () => {
await import('@/views/admin/PaymentGatewaySettings.vue')
},
'/admin/billing-plans': async () => {
await import('@/views/admin/BillingPlansManagement.vue')
},
type PrefetchableRouteLoader = (() => unknown) & {
prefetch?: () => Promise<unknown>
}
export function prefetchAdminNavigationTarget(href: string): void {
const warmer = adminRouteWarmers[href]
if (!warmer) return
/**
* 预取目标路由链中的异步组件。
*
* 直接从 Router 解析组件,避免维护一份容易遗漏用户页和新增管理页的硬编码表。
*/
export function prefetchNavigationTarget(router: Router, href: string): void {
const now = Date.now()
const lastRun = lastPrefetchAt.get(href) ?? 0
if (now - lastRun < PREFETCH_COOLDOWN_MS) {
return
}
const loaders = router.resolve(href).matched.flatMap((record) =>
Object.values(record.components ?? {})
.filter((component): component is PrefetchableRouteLoader =>
typeof component === 'function'
&& typeof (component as PrefetchableRouteLoader).prefetch === 'function'
)
.map(component => component.prefetch as () => Promise<unknown>)
)
if (loaders.length === 0) return
lastPrefetchAt.set(href, now)
void warmer().catch((err) => {
log.debug('[adminNavigationPrefetch] ignore prefetch failure', err)
})
for (const loader of new Set(loaders)) {
void Promise.resolve()
.then(() => loader())
.catch((err) => {
log.debug('[navigationPrefetch] ignore prefetch failure', err)
})
}
}