From bbe4d3e0f1a424f750031b15ee3d52253410f4bc Mon Sep 17 00:00:00 2001 From: cpojer Date: Fri, 28 Aug 2026 09:41:44 +0900 Subject: [PATCH] fix(auth): Lazily initialize the Better Auth Drizzle adapter. --- packages/void/src/auth/drizzle.ts | 9 ++++++++- packages/void/test/unit/auth-drizzle.test.ts | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/void/src/auth/drizzle.ts b/packages/void/src/auth/drizzle.ts index 749fb31d5..eb4618985 100644 --- a/packages/void/src/auth/drizzle.ts +++ b/packages/void/src/auth/drizzle.ts @@ -472,9 +472,16 @@ export function generateVoidAuthDatabaseModule( `import { db as __voidDb } from "void/db";`, `import { schema as __voidAuthSchema } from ${schemaImport};`, '', - `export const __voidAuthDatabase = drizzleAdapter(__voidDb, { provider: ${JSON.stringify( + '// Better Auth reads Drizzle metadata while creating the adapter.', + '// Defer that work until request handling, when runtime bindings are available.', + 'let __voidAuthDatabaseInstance: ReturnType | undefined;', + '', + 'export const __voidAuthDatabase: ReturnType = (options) => {', + ` __voidAuthDatabaseInstance ??= drizzleAdapter(__voidDb, { provider: ${JSON.stringify( provider, )}, schema: __voidAuthSchema });`, + ' return __voidAuthDatabaseInstance(options);', + '};', '', ].join('\n'); } diff --git a/packages/void/test/unit/auth-drizzle.test.ts b/packages/void/test/unit/auth-drizzle.test.ts index 2a4c4fb4c..b19108983 100644 --- a/packages/void/test/unit/auth-drizzle.test.ts +++ b/packages/void/test/unit/auth-drizzle.test.ts @@ -51,7 +51,7 @@ describe('Better Auth Drizzle codegen', () => { expect(code).toContain('"name": "members"'); }); - it('can generate an auth database module that reuses void/db', () => { + it('lazily creates an auth database adapter that reuses void/db', () => { const code = generateVoidAuthDatabaseModule({ dialect: 'postgresql', schemaImportPath: '/project/.void/better-auth-schema.ts', @@ -59,7 +59,15 @@ describe('Better Auth Drizzle codegen', () => { }); expect(code).toContain('import { db as __voidDb } from "void/db"'); - expect(code).toContain('drizzleAdapter(__voidDb'); + expect(code).toContain( + 'let __voidAuthDatabaseInstance: ReturnType | undefined;', + ); + expect(code).toContain( + 'export const __voidAuthDatabase: ReturnType = (options) => {', + ); + expect(code).toContain('__voidAuthDatabaseInstance ??= drizzleAdapter(__voidDb'); + expect(code).toContain('return __voidAuthDatabaseInstance(options);'); + expect(code).not.toContain('export const __voidAuthDatabase = drizzleAdapter(__voidDb'); expect(code).not.toContain('import pg from'); }); });