diff --git a/packages/void/src/plugin-routing.ts b/packages/void/src/plugin-routing.ts index f7050ce46..8f44a1cca 100644 --- a/packages/void/src/plugin-routing.ts +++ b/packages/void/src/plugin-routing.ts @@ -616,7 +616,12 @@ export function routingPlugin(root: string, options: RoutingPluginOptions): Plug const betterAuthSubpaths = ['client', 'react', 'vue', 'svelte', 'solid']; const resolvedAliases = betterAuthSubpaths.flatMap((sub) => { try { - return [{ find: `better-auth/${sub}`, replacement: resolveFile(`better-auth/${sub}`) }]; + return [ + { + find: new RegExp(`^better-auth/${sub}$`), + replacement: resolveFile(`better-auth/${sub}`), + }, + ]; } catch { return []; } diff --git a/packages/void/test/unit/plugin-routing.test.ts b/packages/void/test/unit/plugin-routing.test.ts index 975b73bfd..9da8928cf 100644 --- a/packages/void/test/unit/plugin-routing.test.ts +++ b/packages/void/test/unit/plugin-routing.test.ts @@ -150,6 +150,33 @@ describe('routingPlugin', () => { ); }); + it('aliases only the exact better-auth client specifiers in dev', () => { + const root = createTempRoot(); + const plugin = createRoutingPlugin(root, { isAuthEnabled: () => true }); + const config = ( + getHookHandler(plugin.config) as (config: UserConfig, env: ConfigEnv) => UserConfig + )({}, { command: 'serve', mode: 'development' }); + const aliases = config.resolve?.alias as Array<{ find: string | RegExp; replacement: string }>; + + // Mirrors Vite's alias matching: strings also match `find + '/'` prefixes. + const rewrite = (id: string) => { + for (const { find, replacement } of aliases) { + if (typeof find === 'string') { + if (id === find || id.startsWith(`${find}/`)) { + return id.replace(find, replacement); + } + } else if (find.test(id)) { + return id.replace(find, replacement); + } + } + return id; + }; + + expect(rewrite('better-auth/client')).toMatch(/client[/\\]index\.m?js$/); + // Other subpaths are left to normal resolution. + expect(rewrite('better-auth/client/plugins')).toBe('better-auth/client/plugins'); + }); + it('bakes explicit page opt-outs into the native ISR policy', async () => { const root = createTempRoot(); mkdirSync(join(root, 'pages'), { recursive: true });