UNPKG

plywood-postgres-requester

Version:
60 lines (59 loc) 2.07 kB
"use strict"; 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;