perf: lazy load selected UI provider (AEG-X-002)

This commit is contained in:
2026-08-08 16:29:36 +09:00
parent 4e0a0bc02b
commit 9665f7791f
9 changed files with 101 additions and 15 deletions
@@ -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."
)
})
})