Adding type definitions for pg

This is heavily based on the definitions from sqlite3. The Connection
class is not defined because pg says that it is private for most use
cases. I left that work for people who need it.
This commit is contained in:
Phips Peter
2014-05-30 12:34:46 -07:00
parent af346df404
commit 8fb6309e8d
2 changed files with 124 additions and 0 deletions

36
pg/pg-tests.ts Normal file
View File

@@ -0,0 +1,36 @@
/// <reference path="pg.d.ts" />
import pg = require("pg");
var conString = "postgres://username:password@localhost/database";
// Client pooling
pg.connect(conString, (err, client, done) => {
if (err) {
return console.error("Error fetching client from pool", err);
}
client.query("SELECT $1::int AS number", ["1"], (err, result) => {
done();
if (err) {
return console.error("Error running query", err);
}
console.log(result.rows[0]["number"]);
return null;
});
return null;
});
// Simple
var client = new pg.Client(conString);
client.connect((err) => {
if (err) {
return console.error("Could not connect to postgres", err);
}
client.query("SELECT NOW() AS 'theTime'", (err, result) => {
if (err) {
return console.error("Error running query", err);
}
console.log(result.rows[0]["theTime"]);
client.end();
return null;
});
return null;
});

88
pg/pg.d.ts vendored Normal file
View File

@@ -0,0 +1,88 @@
// Type definitions for pg
// Project: https://github.com/brianc/node-postgres
// Definitions by: Phips Peter <http://pspeter3.com>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
declare module "pg" {
import events = require("events");
import stream = require("stream");
export function connect(connection: string, callback: (err: Error, client: Client, done: () => void) => void): void;
export function connect(config: ClientConfig, callback: (err: Error, client: Client, done: () => void) => void): void;
export function end(): void;
export interface ConnectionConfig {
user?: string;
database?: string;
password?: string;
port?: number;
host?: string;
}
export interface Defaults extends ConnectionConfig {
poolSize?: number;
poolIdleTimeout?: number;
reapIntervalMillis?: number;
binary?: boolean;
parseInt8?: boolean;
}
export interface ClientConfig extends ConnectionConfig {
ssl?: boolean;
}
export interface QueryConfig {
name?: string;
text: string;
values?: any[];
}
export interface QueryResult {
rows: any[];
}
export interface ResultBuilder extends QueryResult {
command: string;
rowCount: number;
oid: number;
addRow(row: any): void;
}
export class Client extends events.EventEmitter {
constructor(connection: string);
constructor(config: ClientConfig);
connect(callback?: (err:Error) => void): void;
end(): void;
query(queryText: string, callback?: (err: Error, result: QueryResult) => void): Query;
query(config: QueryConfig, callback?: (err: Error, result: QueryResult) => void): Query;
query(queryText: string, values: any[], callback?: (err: Error, result: QueryResult) => void): Query;
copyFrom(queryText: string): stream.Writable;
copyTo(queryText: string): stream.Readable;
pauseDrain(): void;
resumeDrain(): void;
public on(event: "drain", listener: () => void): Client;
public on(event: "error", listener: (err: Error) => void): Client;
public on(event: "notification", listener: (message: any) => void): Client;
public on(event: "notice", listener: (message: any) => void): Client;
public on(event: string, listener: Function): Client;
}
export class Query extends events.EventEmitter {
public on(event: "row", listener: (row: any, result?: ResultBuilder) => void): Query;
public on(event: "error", listener: (err: Error) => void): Query;
public on(event: "end", listener: (result: ResultBuilder) => void): Query;
public on(event: string, listener: Function): Query;
}
export class Events extends events.EventEmitter {
public on(event: "error", listener: (err: Error, client: Client) => void): Events;
public on(event: string, listener: Function): Events;
}
}