import { Pool, ClientConfig, PoolClient } from "pg"; import { Database as SqliteDatabase } from "better-sqlite3"; export interface Database { database?: string; user?: string; password?: string; host?: string; port?: number; ssl?: boolean; sslmode?: string; } export declare type env = "production" | "test" | "development"; export declare type DBDict = Record; export declare enum Dialect { Postgres = "postgres", SQLite = "sqlite" } interface DatabaseInfo { dialect: Dialect; config: ClientConfig; filePath?: string; } export default class DB { db: DatabaseInfo; static instance: DB; static dialect: Dialect; private pool; private q; private constructor(); getConnection(): Connection; getPool(): Queryer; getNewClient(): Promise; getSQLiteClient(): Promise; endPool(): Promise; static getInstance(): DB; static getDialect(): Dialect; static initDB(args?: { connectionString?: string; dbFile?: string; db?: Database | DBDict; }): void; } export declare const defaultTimestampParser: any; export interface Queryer { query(query: string, values?: any[]): Promise>; queryAll(query: string, values?: any[]): Promise>; exec(query: string, values?: any[]): Promise; } export interface SyncQueryer extends Queryer { execSync(query: string, values?: any[]): ExecResult; queryAllSync(query: string, values?: any[]): QueryResult; querySync(query: string, values?: any[]): QueryResult; } export interface Connection extends Queryer { self(): Queryer; newClient(): Promise; close(): Promise; } export interface QueryResultRow { [column: string]: any; } export interface QueryResult { rows: R[]; rowCount: number; } interface ExecResult { rows: QueryResultRow[]; rowCount: number; } export interface Client extends Queryer { release(err?: Error | boolean): void; } export interface SyncClient extends Client, SyncQueryer { runInTransaction(cb: () => void): void; } export declare class Sqlite implements Connection, SyncClient { db: SqliteDatabase; constructor(db: SqliteDatabase); self(): this; newClient(): Promise; query(query: string, values?: any[]): Promise>; private convertValues; querySync(query: string, values?: any[]): QueryResult; queryAll(query: string, values?: any[]): Promise>; queryAllSync(query: string, values?: any[]): QueryResult; exec(query: string, values?: any[]): Promise; execSync(query: string, values?: any[]): ExecResult; close(): Promise; release(err?: Error | boolean): Promise; runInTransaction(cb: () => void | Promise): void; } export declare class Postgres implements Connection { private pool; constructor(pool: Pool); self(): this; newClient(): Promise; query(query: string, values?: any[]): Promise>; queryAll(query: string, values?: any[]): Promise>; exec(query: string, values?: any[]): Promise; close(): Promise; } export declare class PostgresClient implements Client { private client; constructor(client: PoolClient); query(query: string, values?: any[]): Promise>; queryAll(query: string, values?: any[]): Promise>; exec(query: string, values?: any[]): Promise; release(err?: Error | boolean): Promise; } export {};