import type { TransactionUniversalOptions } from './Database.js'; export type Driver = SyncDriver | AsyncDriver; export type Statement = SyncStatement | AsyncStatement; export interface BatchedQuery { sql: string; params: Array; isSelection: boolean; } export interface DriverSpecs { parsesJson: boolean; supportsTransactions: boolean; } export interface PrepareOptions { isSelection: boolean; name?: string; } export interface SyncDriver extends DriverSpecs { close(): void; exec(query: string): void; prepare(query: string, options?: PrepareOptions): SyncStatement; transaction(run: (inner: SyncDriver) => T, options: TransactionUniversalOptions): T; batch(queries: Array): Array>; } export interface SyncStatement { all(params: Array): Array; run(params: Array): void; get(params: Array): object | null; values(params: Array): Array>; free(): void; } export interface AsyncDriver extends DriverSpecs { close(): Promise; exec(query: string): Promise; prepare(query: string, options?: PrepareOptions): AsyncStatement; transaction(run: (inner: AsyncDriver) => Promise, options: TransactionUniversalOptions): Promise; batch(queries: Array): Promise>>; } export interface AsyncStatement { all(params: Array): Promise>; run(params: Array): Promise; get(params: Array): Promise; values(params: Array): Promise>>; free(): void; }