plywood-postgres-requester
Version:
Postgres requester for Plywood (within node)
60 lines (59 loc) • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var plywood_base_api_1 = require("plywood-base-api");
var stream_1 = require("stream");
var pg_1 = require("pg");
var pgTypes = require("pg-types");
var parseDateUTC = require("postgres-date-utc");
pgTypes.setTypeParser(1700, pgTypes.getTypeParser(700));
pgTypes.setTypeParser(20, pgTypes.getTypeParser(21));
pgTypes.setTypeParser(1082, parseDateUTC);
pgTypes.setTypeParser(1114, parseDateUTC);
pgTypes.setTypeParser(1184, parseDateUTC);
function postgresRequesterFactory(parameters) {
var locator = parameters.locator;
if (!locator) {
var host = parameters.host;
if (!host)
throw new Error("must have a `host` or a `locator`");
locator = plywood_base_api_1.basicLocator(host, 5432);
}
var user = parameters.user;
var password = parameters.password;
var database = parameters.database;
return function (request) {
var query = request.query;
var stream = new stream_1.Readable({
objectMode: true,
read: function () { }
});
locator()
.then(function (location) {
var client = new pg_1.Client({
host: location.hostname,
port: location.port || 5432,
database: database,
user: user,
password: password,
parseInputDatesAsUTC: true
});
client.on('drain', client.end.bind(client));
client.connect();
var q = client.query(new pg_1.Query(query));
q.on('row', function (row) {
stream.push(row);
});
q.on('error', function (err) {
stream.emit('error', err);
});
q.on('end', function () {
stream.push(null);
});
})
.catch(function (err) {
stream.emit('error', err);
});
return stream;
};
}
exports.postgresRequesterFactory = postgresRequesterFactory;