UNPKG

8.06 kBTypeScriptView Raw
1// Type definitions for pg 7.14
2// Project: http://github.com/brianc/node-postgres
3// Definitions by: Phips Peter <https://github.com/pspeter3>, Ravi van Rooijen <https://github.com/HoldYourWaffle>
4// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5// TypeScript Version: 2.3
6
7/// <reference types="node" />
8
9import events = require("events");
10import stream = require("stream");
11import pgTypes = require("pg-types");
12
13import { ConnectionOptions } from "tls";
14
15export interface ClientConfig {
16 user?: string;
17 database?: string;
18 password?: string;
19 port?: number;
20 host?: string;
21 connectionString?: string;
22 keepAlive?: boolean;
23 stream?: stream.Duplex;
24 statement_timeout?: false | number;
25 ssl?: boolean | ConnectionOptions;
26 query_timeout?: number;
27 keepAliveInitialDelayMillis?: number;
28}
29
30export type ConnectionConfig = ClientConfig;
31
32export interface Defaults extends ClientConfig {
33 poolSize?: number;
34 poolIdleTimeout?: number;
35 reapIntervalMillis?: number;
36 binary?: boolean;
37 parseInt8?: boolean;
38}
39
40export interface PoolConfig extends ClientConfig {
41 // properties from module 'node-pool'
42 max?: number;
43 min?: number;
44 connectionTimeoutMillis?: number;
45 idleTimeoutMillis?: number;
46 log?: (...messages: any[]) => void;
47
48 application_name?: string;
49 Promise?: PromiseConstructorLike;
50}
51
52export interface QueryConfig<I extends any[] = any[]> {
53 name?: string;
54 text: string;
55 values?: I;
56}
57
58export interface Submittable {
59 submit: (connection: Connection) => void;
60}
61
62export interface QueryArrayConfig<I extends any[] = any[]> extends QueryConfig<I> {
63 rowMode: 'array';
64}
65
66export interface FieldDef {
67 name: string;
68 tableID: number;
69 columnID: number;
70 dataTypeID: number;
71 dataTypeSize: number;
72 dataTypeModifier: number;
73 format: string;
74}
75
76export interface QueryResultBase {
77 command: string;
78 rowCount: number;
79 oid: number;
80 fields: FieldDef[];
81}
82
83export interface QueryResultRow {
84 [column: string]: any;
85}
86
87export interface QueryResult<R extends QueryResultRow = any> extends QueryResultBase {
88 rows: R[];
89}
90
91export interface QueryArrayResult<R extends any[] = any[]> extends QueryResultBase {
92 rows: R[];
93}
94
95export interface Notification {
96 processId: number;
97 channel: string;
98 payload?: string;
99}
100
101export interface ResultBuilder<R extends QueryResultRow = any> extends QueryResult<R> {
102 addRow(row: R): void;
103}
104
105export interface QueryParse {
106 name: string;
107 text: string;
108 types: string[];
109}
110
111export interface BindConfig {
112 portal?: string;
113 statement?: string;
114 binary?: string;
115 values?: Array<(Buffer | null | undefined | string)>;
116}
117
118export interface ExecuteConfig {
119 portal?: string;
120 rows?: string;
121}
122
123export interface MessageConfig {
124 type: string;
125 name?: string;
126}
127
128export class Connection extends events.EventEmitter {
129 readonly stream: stream.Duplex;
130
131 constructor(config?: ConnectionConfig);
132
133 bind(config: BindConfig | null, more: boolean): void;
134 execute(config: ExecuteConfig | null, more: boolean): void;
135 parse(query: QueryParse, more: boolean): void;
136
137 query(text: string): void;
138
139 describe(msg: MessageConfig, more: boolean): void;
140 close(msg: MessageConfig, more: boolean): void;
141
142 flush(): void;
143 sync(): void;
144 end(): void;
145}
146
147/**
148 * {@link https://node-postgres.com/api/pool}
149 */
150export class Pool extends events.EventEmitter {
151 /**
152 * Every field of the config object is entirely optional.
153 * The config passed to the pool is also passed to every client
154 * instance within the pool when the pool creates that client.
155 */
156 constructor(config?: PoolConfig);
157
158 readonly totalCount: number;
159 readonly idleCount: number;
160 readonly waitingCount: number;
161
162 connect(): Promise<PoolClient>;
163 connect(callback: (err: Error, client: PoolClient, done: (release?: any) => void) => void): void;
164
165 end(): Promise<void>;
166 end(callback: () => void): void;
167
168 query<T extends Submittable>(queryStream: T): T;
169 // tslint:disable:no-unnecessary-generics
170 query<R extends any[] = any[], I extends any[] = any[]>(queryConfig: QueryArrayConfig<I>, values?: I): Promise<QueryArrayResult<R>>;
171 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryConfig: QueryConfig<I>): Promise<QueryResult<R>>;
172 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryTextOrConfig: string | QueryConfig<I>, values?: I): Promise<QueryResult<R>>;
173 query<R extends any[] = any[], I extends any[] = any[]>(queryConfig: QueryArrayConfig<I>, callback: (err: Error, result: QueryArrayResult<R>) => void): void;
174 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryTextOrConfig: string | QueryConfig<I>, callback: (err: Error, result: QueryResult<R>) => void): void;
175 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryText: string, values: I, callback: (err: Error, result: QueryResult<R>) => void): void;
176 // tslint:enable:no-unnecessary-generics
177
178 on(event: "error", listener: (err: Error, client: PoolClient) => void): this;
179 on(event: "connect" | "acquire" | "remove", listener: (client: PoolClient) => void): this;
180}
181
182export class ClientBase extends events.EventEmitter {
183 constructor(config?: string | ClientConfig);
184
185 connect(): Promise<void>;
186 connect(callback: (err: Error) => void): void;
187
188 query<T extends Submittable>(queryStream: T): T;
189 // tslint:disable:no-unnecessary-generics
190 query<R extends any[] = any[], I extends any[] = any[]>(queryConfig: QueryArrayConfig<I>, values?: I): Promise<QueryArrayResult<R>>;
191 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryConfig: QueryConfig<I>): Promise<QueryResult<R>>;
192 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryTextOrConfig: string | QueryConfig<I>, values?: I): Promise<QueryResult<R>>;
193 query<R extends any[] = any[], I extends any[] = any[]>(queryConfig: QueryArrayConfig<I>, callback: (err: Error, result: QueryArrayResult<R>) => void): void;
194 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryTextOrConfig: string | QueryConfig<I>, callback: (err: Error, result: QueryResult<R>) => void): void;
195 query<R extends QueryResultRow = any, I extends any[] = any[]>(queryText: string, values: any[], callback: (err: Error, result: QueryResult<R>) => void): void;
196 // tslint:enable:no-unnecessary-generics
197
198 copyFrom(queryText: string): stream.Writable;
199 copyTo(queryText: string): stream.Readable;
200
201 pauseDrain(): void;
202 resumeDrain(): void;
203
204 escapeIdentifier(str: string): string;
205 escapeLiteral(str: string): string;
206
207 on(event: "drain", listener: () => void): this;
208 on(event: "error" | "notice", listener: (err: Error) => void): this;
209 on(event: "notification", listener: (message: Notification) => void): this;
210 // tslint:disable-next-line unified-signatures
211 on(event: "end", listener: () => void): this;
212}
213
214export class Client extends ClientBase {
215 constructor(config?: string | ClientConfig);
216
217 end(): Promise<void>;
218 end(callback: (err: Error) => void): void;
219}
220
221export interface PoolClient extends ClientBase {
222 release(err?: Error): void;
223}
224
225export class Query<R extends QueryResultRow = any, I extends any[] = any> extends events.EventEmitter implements Submittable {
226 constructor(queryTextOrConfig?: string | QueryConfig<I>, values?: I);
227 submit: (connection: Connection) => void;
228 on(event: "row", listener: (row: R, result?: ResultBuilder<R>) => void): this;
229 on(event: "error", listener: (err: Error) => void): this;
230 on(event: "end", listener: (result: ResultBuilder<R>) => void): this;
231}
232
233export class Events extends events.EventEmitter {
234 on(event: "error", listener: (err: Error, client: Client) => void): this;
235}
236
237export const types: typeof pgTypes;
238
239export const defaults: Defaults & ClientConfig;
240
241import * as Pg from '.';
242
243export const native: typeof Pg | null;