From 143af7dd1020443947c939faee632e39a810fa82 Mon Sep 17 00:00:00 2001 From: onmax Date: Tue, 3 Mar 2026 13:00:43 +0100 Subject: [PATCH 1/5] refactor(module): remove deprecated provider guard --- src/module.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/module.ts b/src/module.ts index 1bfab87..1f052a2 100644 --- a/src/module.ts +++ b/src/module.ts @@ -107,13 +107,6 @@ export default defineNuxtModule({ const hasNuxtHub = hasNuxtModule('@nuxthub/core', nuxt) const hub = hasNuxtHub ? (nuxt.options as { hub?: NuxtHubOptions }).hub : undefined const hasHubDbAvailable = !clientOnly && hasNuxtHub && !!hub?.db - const deprecatedProvider = (options as { database?: { provider?: string } }).database?.provider - if (deprecatedProvider) { - throw new Error( - `[nuxt-better-auth] auth.database.provider has been removed. Remove auth.database.provider="${deprecatedProvider}". To configure a database, either set "database" directly in server/auth.config.ts (defineServerAuth) or install a provider module that registers better-auth:database:providers.`, - ) - } - let databaseProvider: ModuleDatabaseProviderId = 'none' let hasHubDb = false From a00db4b2dae07b323031012cb2ae8aac2842ece1 Mon Sep 17 00:00:00 2001 From: onmax Date: Tue, 3 Mar 2026 13:00:46 +0100 Subject: [PATCH 2/5] refactor(schema): remove legacy compat workaround --- src/schema-generator.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/schema-generator.ts b/src/schema-generator.ts index 99d70d1..89d53ea 100644 --- a/src/schema-generator.ts +++ b/src/schema-generator.ts @@ -1,4 +1,3 @@ -import type { DBAdapter } from '@better-auth/cli/api' import type { BetterAuthOptions } from 'better-auth' import { generateDrizzleSchema as _generateDrizzleSchema } from '@better-auth/cli/api' import { consola } from 'consola' @@ -42,12 +41,10 @@ export async function generateDrizzleSchema(authOptions: BetterAuthOptions, dial }, } - // @better-auth/cli may resolve a different @better-auth/core type instance in monorepos/workspaces. - // Cast to the callee's parameter type to avoid nominal-type incompatibilities across identical versions. const result = await _generateDrizzleSchema({ - adapter: adapter as unknown as DBAdapter, + adapter, options, - } as unknown as Parameters[0]) + }) if (!result.code) { throw new Error(`Schema generation returned empty result for ${dialect}`) } From 53993840b66bd6f5a18320fe97ca28ea068b9010 Mon Sep 17 00:00:00 2001 From: onmax Date: Tue, 3 Mar 2026 13:00:49 +0100 Subject: [PATCH 3/5] test(module): cover deprecated provider ignore behavior --- test/cases/core-auth/nuxt.config.ts | 6 ++++++ test/module.test.ts | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/test/cases/core-auth/nuxt.config.ts b/test/cases/core-auth/nuxt.config.ts index 1f6be67..01201b6 100644 --- a/test/cases/core-auth/nuxt.config.ts +++ b/test/cases/core-auth/nuxt.config.ts @@ -8,6 +8,12 @@ export default defineNuxtConfig({ public: { siteUrl: 'http://localhost:3000' }, }, + auth: { + database: { + provider: 'legacy-provider', + }, + }, + routeRules: { '/protected': { auth: 'user' }, '/admin': { auth: { user: { role: 'admin' } } }, diff --git a/test/module.test.ts b/test/module.test.ts index 7af199b..e99e8f8 100644 --- a/test/module.test.ts +++ b/test/module.test.ts @@ -7,6 +7,14 @@ describe('nuxt-better-auth module', async () => { rootDir: fileURLToPath(new URL('./cases/core-auth', import.meta.url)), }) + describe('module options', () => { + it('ignores legacy auth.database.provider without failing setup', async () => { + const response = await $fetch('/api/test/config') as { useDatabase: boolean, databaseProvider: string } + expect(response.useDatabase).toBe(true) + expect(response.databaseProvider).toBe('nuxthub') + }) + }) + describe('page rendering', () => { it('renders home page with BetterAuthState component', async () => { const html = await $fetch('/') From 3c5c4abda0b2df3ea88e01923c877cb96ddf3e68 Mon Sep 17 00:00:00 2001 From: onmax Date: Tue, 3 Mar 2026 13:14:08 +0100 Subject: [PATCH 4/5] test(module): remove stale legacy fixture --- test/cases/core-auth/nuxt.config.ts | 6 ------ test/module.test.ts | 8 -------- 2 files changed, 14 deletions(-) diff --git a/test/cases/core-auth/nuxt.config.ts b/test/cases/core-auth/nuxt.config.ts index 01201b6..1f6be67 100644 --- a/test/cases/core-auth/nuxt.config.ts +++ b/test/cases/core-auth/nuxt.config.ts @@ -8,12 +8,6 @@ export default defineNuxtConfig({ public: { siteUrl: 'http://localhost:3000' }, }, - auth: { - database: { - provider: 'legacy-provider', - }, - }, - routeRules: { '/protected': { auth: 'user' }, '/admin': { auth: { user: { role: 'admin' } } }, diff --git a/test/module.test.ts b/test/module.test.ts index e99e8f8..7af199b 100644 --- a/test/module.test.ts +++ b/test/module.test.ts @@ -7,14 +7,6 @@ describe('nuxt-better-auth module', async () => { rootDir: fileURLToPath(new URL('./cases/core-auth', import.meta.url)), }) - describe('module options', () => { - it('ignores legacy auth.database.provider without failing setup', async () => { - const response = await $fetch('/api/test/config') as { useDatabase: boolean, databaseProvider: string } - expect(response.useDatabase).toBe(true) - expect(response.databaseProvider).toBe('nuxthub') - }) - }) - describe('page rendering', () => { it('renders home page with BetterAuthState component', async () => { const html = await $fetch('/') From 304ef042840afcaed480bb81b567aebe13a42507 Mon Sep 17 00:00:00 2001 From: onmax Date: Tue, 3 Mar 2026 13:16:04 +0100 Subject: [PATCH 5/5] fix(schema): restore type interop for drizzle generation --- src/schema-generator.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/schema-generator.ts b/src/schema-generator.ts index 89d53ea..6ffc8cd 100644 --- a/src/schema-generator.ts +++ b/src/schema-generator.ts @@ -7,6 +7,7 @@ export interface SchemaOptions { usePlural?: boolean, useUuid?: boolean, casing? type Dialect = 'sqlite' | 'postgresql' | 'mysql' type Provider = 'sqlite' | 'pg' | 'mysql' +type DrizzleSchemaInput = Parameters[0] // Minimal interface matching what _generateDrizzleSchema actually uses from adapter interface SchemaGeneratorAdapter { @@ -42,8 +43,8 @@ export async function generateDrizzleSchema(authOptions: BetterAuthOptions, dial } const result = await _generateDrizzleSchema({ - adapter, - options, + adapter: adapter as unknown as DrizzleSchemaInput['adapter'], + options: options as unknown as DrizzleSchemaInput['options'], }) if (!result.code) { throw new Error(`Schema generation returned empty result for ${dialect}`)