perf: lazy load selected UI provider (AEG-X-002)
This commit is contained in:
@@ -10,5 +10,5 @@ const app = createApp(App);
|
||||
app.use(createPinia());
|
||||
app.use(router);
|
||||
app.use(VueQueryPlugin, { queryClient });
|
||||
resolveUiProvider(import.meta.env.VITE_UI_ADAPTER).install(app);
|
||||
(await resolveUiProvider(import.meta.env.VITE_UI_ADAPTER)).install(app);
|
||||
app.mount('#app');
|
||||
|
||||
@@ -11,5 +11,5 @@ const app = createApp(App)
|
||||
app.use(createPinia())
|
||||
app.use(router)
|
||||
app.use(VueQueryPlugin, { queryClient })
|
||||
resolveUiProvider(import.meta.env.VITE_UI_ADAPTER).install(app)
|
||||
;(await resolveUiProvider(import.meta.env.VITE_UI_ADAPTER)).install(app)
|
||||
app.mount('#app')
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { nativeUiProvider } from '../adapter/native/installNativeAdapter';
|
||||
import { primeVueUiProvider } from '../adapter/primevue/installPrimeVueAdapter';
|
||||
export function resolveUiProvider(name) {
|
||||
export async function resolveUiProvider(name) {
|
||||
const normalized = (name ?? 'primevue').trim().toLowerCase();
|
||||
if (normalized === 'primevue')
|
||||
return primeVueUiProvider;
|
||||
if (normalized === 'native')
|
||||
return nativeUiProvider;
|
||||
if (normalized === 'primevue') {
|
||||
return (await import('../adapter/primevue/installPrimeVueAdapter')).primeVueUiProvider;
|
||||
}
|
||||
if (normalized === 'native') {
|
||||
return (await import('../adapter/native/installNativeAdapter')).nativeUiProvider;
|
||||
}
|
||||
throw new Error(`Unsupported VITE_UI_ADAPTER '${name}'. Allowed values: primevue, native.`);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import type { UiProvider } from './UiProvider'
|
||||
import { nativeUiProvider } from '../adapter/native/installNativeAdapter'
|
||||
import { primeVueUiProvider } from '../adapter/primevue/installPrimeVueAdapter'
|
||||
|
||||
export type UiProviderName = 'primevue' | 'native'
|
||||
|
||||
export function resolveUiProvider(name: string | undefined): UiProvider {
|
||||
export async function resolveUiProvider(name: string | undefined): Promise<UiProvider> {
|
||||
const normalized = (name ?? 'primevue').trim().toLowerCase()
|
||||
if (normalized === 'primevue') return primeVueUiProvider
|
||||
if (normalized === 'native') return nativeUiProvider
|
||||
if (normalized === 'primevue') {
|
||||
return (await import('../adapter/primevue/installPrimeVueAdapter')).primeVueUiProvider
|
||||
}
|
||||
if (normalized === 'native') {
|
||||
return (await import('../adapter/native/installNativeAdapter')).nativeUiProvider
|
||||
}
|
||||
throw new Error(`Unsupported VITE_UI_ADAPTER '${name}'. Allowed values: primevue, native.`)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { resolveUiProvider } from '../resolveUiProvider'
|
||||
|
||||
describe('resolveUiProvider', () => {
|
||||
it('loads the selected native provider', async () => {
|
||||
await expect(resolveUiProvider('native')).resolves.toMatchObject({ id: 'native-accessible' })
|
||||
})
|
||||
|
||||
it('fails closed for an unsupported provider before application mount', async () => {
|
||||
await expect(resolveUiProvider('unsupported')).rejects.toThrow(
|
||||
"Unsupported VITE_UI_ADAPTER 'unsupported'. Allowed values: primevue, native."
|
||||
)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user