diff --git a/packages/db/DittoDatabase.test.ts b/packages/db/DittoDatabase.test.ts deleted file mode 100644 index a91affd5..00000000 --- a/packages/db/DittoDatabase.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { DittoDatabase } from './DittoDatabase.ts'; - -Deno.test('DittoDatabase', async () => { - const db = DittoDatabase.create('memory://'); - await DittoDatabase.migrate(db.kysely); -}); diff --git a/packages/db/adapters/DittoPolyPg.test.ts b/packages/db/adapters/DittoPolyPg.test.ts new file mode 100644 index 00000000..539a6ed0 --- /dev/null +++ b/packages/db/adapters/DittoPolyPg.test.ts @@ -0,0 +1,6 @@ +import { DittoPolyPg } from './DittoPolyPg.ts'; + +Deno.test('DittoPolyPg', async () => { + const db = DittoPolyPg.create('memory://'); + await DittoPolyPg.migrate(db.kysely); +}); diff --git a/packages/db/DittoDatabase.ts b/packages/db/adapters/DittoPolyPg.ts similarity index 83% rename from packages/db/DittoDatabase.ts rename to packages/db/adapters/DittoPolyPg.ts index 916402dd..9befe788 100644 --- a/packages/db/DittoDatabase.ts +++ b/packages/db/adapters/DittoPolyPg.ts @@ -4,14 +4,15 @@ import path from 'node:path'; import { logi } from '@soapbox/logi'; import { FileMigrationProvider, type Kysely, Migrator } from 'kysely'; -import { DittoPglite } from './adapters/DittoPglite.ts'; -import { DittoPostgres } from './adapters/DittoPostgres.ts'; +import { DittoPglite } from './DittoPglite.ts'; +import { DittoPostgres } from './DittoPostgres.ts'; import type { JsonValue } from '@std/json'; -import type { DittoDB, DittoDBOpts } from './DittoDB.ts'; -import type { DittoTables } from './DittoTables.ts'; +import type { DittoDB, DittoDBOpts } from '../DittoDB.ts'; +import type { DittoTables } from '../DittoTables.ts'; -export class DittoDatabase { +/** Creates either a PGlite or Postgres connection depending on the databaseUrl. */ +export class DittoPolyPg { /** Open a new database connection. */ static create(databaseUrl: string, opts?: DittoDBOpts): DittoDB { const { protocol } = new URL(databaseUrl); @@ -51,7 +52,7 @@ export class DittoDatabase { results: results as unknown as JsonValue, error: error instanceof Error ? error : null, }); - Deno.exit(1); + throw new Error('Migration failed.'); } else { if (!results?.length) { logi({ level: 'info', ns: 'ditto.db.migration', msg: 'Everything up-to-date.', state: 'skipped' }); diff --git a/packages/db/mod.ts b/packages/db/mod.ts index 14c7669c..49100cd6 100644 --- a/packages/db/mod.ts +++ b/packages/db/mod.ts @@ -1,4 +1,4 @@ -export { DittoDatabase } from './DittoDatabase.ts'; +export { DittoPolyPg } from './adapters/DittoPolyPg.ts'; export type { DittoDB } from './DittoDB.ts'; export type { DittoTables } from './DittoTables.ts'; diff --git a/packages/ditto/storages.ts b/packages/ditto/storages.ts index dedd4081..320714f7 100644 --- a/packages/ditto/storages.ts +++ b/packages/ditto/storages.ts @@ -1,5 +1,5 @@ // deno-lint-ignore-file require-await -import { DittoDatabase, type DittoDB } from '@ditto/db'; +import { type DittoDB, DittoPolyPg } from '@ditto/db'; import { NPool, NRelay1 } from '@nostrify/nostrify'; import { logi } from '@soapbox/logi'; @@ -19,11 +19,11 @@ export class Storages { public static async database(): Promise { if (!this._database) { this._database = (async () => { - const db = DittoDatabase.create(Conf.databaseUrl, { + const db = DittoPolyPg.create(Conf.databaseUrl, { poolSize: Conf.pg.poolSize, debug: Conf.pgliteDebug, }); - await DittoDatabase.migrate(db.kysely); + await DittoPolyPg.migrate(db.kysely); return db; })(); } diff --git a/packages/ditto/test.ts b/packages/ditto/test.ts index c245eb21..eb472ffa 100644 --- a/packages/ditto/test.ts +++ b/packages/ditto/test.ts @@ -1,4 +1,4 @@ -import { DittoDatabase } from '@ditto/db'; +import { DittoPolyPg } from '@ditto/db'; import { NostrEvent } from '@nostrify/nostrify'; import { Conf } from '@/config.ts'; @@ -13,9 +13,9 @@ export async function eventFixture(name: string): Promise { /** Create a database for testing. It uses `DATABASE_URL`, or creates an in-memory database by default. */ export async function createTestDB(opts?: { pure?: boolean }) { - const db = DittoDatabase.create(Conf.databaseUrl, { poolSize: 1 }); + const db = DittoPolyPg.create(Conf.databaseUrl, { poolSize: 1 }); - await DittoDatabase.migrate(db.kysely); + await DittoPolyPg.migrate(db.kysely); const store = new DittoPgStore({ db, diff --git a/packages/ditto/workers/policy.worker.ts b/packages/ditto/workers/policy.worker.ts index 89ca0158..49fc75ef 100644 --- a/packages/ditto/workers/policy.worker.ts +++ b/packages/ditto/workers/policy.worker.ts @@ -1,4 +1,4 @@ -import { DittoDatabase } from '@ditto/db'; +import { DittoPolyPg } from '@ditto/db'; import '@soapbox/safe-fetch/load'; import { NostrEvent, NostrRelayOK, NPolicy } from '@nostrify/nostrify'; import { ReadOnlyPolicy } from '@nostrify/policies'; @@ -30,7 +30,7 @@ export class CustomPolicy implements NPolicy { async init({ path, databaseUrl, pubkey }: PolicyInit): Promise { const Policy = (await import(path)).default; - const db = DittoDatabase.create(databaseUrl, { poolSize: 1 }); + const db = DittoPolyPg.create(databaseUrl, { poolSize: 1 }); const store = new DittoPgStore({ db,