import { Migrator } from 'kysely'; import EventEmitter from 'node:events'; import type { Pool as PgPool } from 'pg'; import { DatabaseSchema } from './database-schema.js'; import { PgOptions } from './types.js'; export declare class Database { opts: PgOptions; pool: PgPool; db: DatabaseSchema; migrator: Migrator; txEvt: TxnEmitter; destroyed: boolean; constructor(opts: PgOptions, instances?: { db: DatabaseSchema; pool: PgPool; migrator: Migrator; }); get schema(): string | undefined; transaction(fn: (db: Database) => Promise): Promise; get isTransaction(): boolean; assertTransaction(): void; assertNotTransaction(): void; onCommit(fn: () => void): void; migrateToOrThrow(migration: string): Promise; migrateToLatestOrThrow(): Promise; close(): Promise; } export default Database; type TxnEvents = { commit: () => void; }; type TxnEmitter = EventEmitter & { once(event: E, listener: TxnEvents[E]): TxnEmitter; emit(event: E, ...args: Parameters): boolean; };