diff --git a/packages/db/DittoDatabase.ts b/packages/db/DittoDatabase.ts index e43356a0..ebe97cec 100644 --- a/packages/db/DittoDatabase.ts +++ b/packages/db/DittoDatabase.ts @@ -2,7 +2,7 @@ import type { Kysely } from 'kysely'; import type { DittoTables } from './DittoTables.ts'; -export interface DittoDatabase { +export interface DittoDatabase extends AsyncDisposable { readonly kysely: Kysely; readonly poolSize: number; readonly availableConnections: number; diff --git a/packages/db/adapters/DittoPglite.ts b/packages/db/adapters/DittoPglite.ts index 2e7ca3fc..5e7e6ca4 100644 --- a/packages/db/adapters/DittoPglite.ts +++ b/packages/db/adapters/DittoPglite.ts @@ -36,6 +36,10 @@ export class DittoPglite { poolSize: 1, availableConnections: 1, listen, + [Symbol.asyncDispose]: async () => { + await pglite.close(); + await kysely.destroy(); + }, }; } } diff --git a/packages/db/adapters/DittoPostgres.ts b/packages/db/adapters/DittoPostgres.ts index 9ab8156f..b62a878b 100644 --- a/packages/db/adapters/DittoPostgres.ts +++ b/packages/db/adapters/DittoPostgres.ts @@ -54,6 +54,10 @@ export class DittoPostgres { return pg.connections.idle; }, listen, + [Symbol.asyncDispose]: async () => { + await pg.end(); + await kysely.destroy(); + }, }; } } diff --git a/packages/ditto/test.ts b/packages/ditto/test.ts index 84303d76..c363963f 100644 --- a/packages/ditto/test.ts +++ b/packages/ditto/test.ts @@ -38,7 +38,7 @@ export async function createTestDB(opts?: { pure?: boolean }) { await sql`truncate table ${sql.ref(tablename)} cascade`.execute(db.kysely); } - await db.kysely.destroy(); + await db[Symbol.asyncDispose](); }, }; }