mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-08 10:27:46 +08:00
refactor(workspace): enforce layered crate boundaries
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const { importWithRetryMock } = vi.hoisted(() => ({
|
||||
importWithRetryMock: vi.fn(async (loader: () => Promise<unknown>) => loader()),
|
||||
}))
|
||||
|
||||
vi.mock('@/utils/importRetry', () => ({
|
||||
importWithRetry: importWithRetryMock,
|
||||
}))
|
||||
|
||||
import { view } from '../helpers'
|
||||
|
||||
describe('route view loader', () => {
|
||||
it('exposes a side-effect-free raw loader for navigation prefetch', async () => {
|
||||
const component = { name: 'LazyPage' }
|
||||
const rawLoader = vi.fn(async () => component)
|
||||
const routeLoader = view(rawLoader)
|
||||
|
||||
await expect(routeLoader.prefetch()).resolves.toBe(component)
|
||||
expect(rawLoader).toHaveBeenCalledTimes(1)
|
||||
expect(importWithRetryMock).not.toHaveBeenCalled()
|
||||
|
||||
await expect(routeLoader()).resolves.toBe(component)
|
||||
expect(importWithRetryMock).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
@@ -1,3 +1,12 @@
|
||||
import { importWithRetry } from '@/utils/importRetry'
|
||||
|
||||
export const view = <T>(loader: () => Promise<T>) => () => importWithRetry(loader)
|
||||
type PrefetchableRouteLoader<T> = (() => Promise<T>) & {
|
||||
prefetch: () => Promise<T>
|
||||
}
|
||||
|
||||
export const view = <T>(loader: () => Promise<T>): PrefetchableRouteLoader<T> => {
|
||||
const routeLoader = (() => importWithRetry(loader)) as PrefetchableRouteLoader<T>
|
||||
// 预取只做一次原始 import;失败时不得触发导航加载器的清缓存和强刷恢复逻辑。
|
||||
routeLoader.prefetch = loader
|
||||
return routeLoader
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user