import { Task } from "fp-ts/lib/Task"; import * as pg from "pg"; import { CamelifyOptions } from "./utils/camelify"; export interface PostProcessingConfig { camelCaser: CamelifyOptions; } export declare type DbResponseTransformer = (result: DbResponse) => QueryResponse; export declare type DbResponseTransformerFactory = (config: PostProcessingConfig) => DbResponseTransformer; export declare type QueryResponse = void | any | any[]; export declare type Query = (query: pg.QueryConfig, txOpts?: TxOptions) => Promise; export declare type QueryTask = (query: pg.QueryConfig, txOpts?: TxOptions) => Task; export declare type TransactionScope = (tx: pg.Client) => Promise; export declare type QueryFragmentBuilder = (seqGen: IterableIterator) => QueryFragment; export interface Transaction { (x: TxOptions, y: TransactionScope): Promise; (x: TransactionScope): Promise; } export interface TransactionTask { (x: TxOptions, y: TransactionScope): Task; (x: TransactionScope): Task; } export declare type TxIsolationLevel = "READ UNCOMMITTED" | "READ COMMITTED" | "REPEATABLE READ" | "SERIALIZABLE"; export declare type TypeParser = (val: string) => T; export interface DbPool extends pg.Pool { any: Query; anyTask: QueryTask; none: Query; noneTask: QueryTask; one: Query; oneTask: QueryTask; oneOrMany: Query; oneOrManyTask: QueryTask; oneOrNone: Query; oneOrNoneTask: QueryTask; transaction: Transaction; transactionTask: TransactionTask; parsersReady: Promise; } export interface DbResponse { rows: any[]; } export interface PgType { oid: number; typarray: number; typname: string; } export interface PoolConfig extends pg.PoolConfig { parsers?: TypeParsers; } export interface QueryResult { rows: PgType[]; } export interface QueryFragment { __text: string; __values: any[]; } export interface TxOptions { readonly deferrable?: boolean; readonly isolation?: TxIsolationLevel; readonly readOnly?: boolean; readonly tx?: pg.Client; } export interface TypeParsers { [key: string]: TypeParser; }