123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- const {PromiseAdapter} = require('./promise-adapter');
- const {DatabasePool} = require('./database-pool');
- const {PreparedStatement, ParameterizedQuery} = require('./types');
- const {QueryFile} = require('./query-file');
- const {queryResult} = require('./query-result');
- const {parsePromise} = require('./promise-parser');
- const {assert} = require('./assert');
- const npm = {
- path: require('path'),
- pg: require('pg'),
- minify: require('pg-minify'),
- formatting: require('./formatting'),
- helpers: require('./helpers'),
- errors: require('./errors'),
- utils: require('./utils'),
- pubUtils: require('./utils/public'),
- mode: require('./tx-mode'),
- package: require('../package.json'),
- text: require('./text')
- };
- let originalClientConnect;
- function $main(options) {
- options = assert(options, ['pgFormatting', 'pgNative', 'promiseLib', 'capSQL', 'noWarnings',
- 'connect', 'disconnect', 'query', 'receive', 'task', 'transact', 'error', 'extend', 'schema']);
- let pg = npm.pg;
- const p = parsePromise(options.promiseLib);
- const config = {
- version: npm.package.version,
- promiseLib: p.promiseLib,
- promise: p.promise
- };
- npm.utils.addReadProp(config, '$npm', {}, true);
-
- npm.utils.addReadProp(options, 'promiseLib', options.promiseLib);
- npm.utils.addReadProp(options, 'pgNative', !!options.pgNative);
- config.options = options;
-
-
- if (options.pgNative) {
- pg = npm.pg.native;
- if (npm.utils.isNull(pg)) {
- throw new Error(npm.text.nativeError);
- }
- } else {
- if (!originalClientConnect) {
- originalClientConnect = pg.Client.prototype.connect;
- pg.Client.prototype.connect = function () {
- const handler = msg => {
- if (msg.parameterName === 'server_version') {
- this.serverVersion = msg.parameterValue;
- this.connection.removeListener('parameterStatus', handler);
- }
- };
- this.connection.on('parameterStatus', handler);
- return originalClientConnect.call(this, ...arguments);
- };
- }
- }
- const Database = require('./database')(config);
- const inst = (cn, dc) => {
- if (npm.utils.isText(cn) || (cn && typeof cn === 'object')) {
- return new Database(cn, dc, config);
- }
- throw new TypeError('Invalid connection details: ' + npm.utils.toJson(cn));
- };
- npm.utils.addReadProperties(inst, rootNameSpace);
-
- inst.pg = pg;
-
- npm.utils.addReadProp(inst, 'end', () => {
- DatabasePool.shutDown();
- });
-
- npm.utils.addReadProp(inst, 'helpers', npm.helpers(config));
-
- npm.utils.addReadProp(inst, 'spex', config.$npm.spex);
- config.pgp = inst;
- return inst;
- }
- const rootNameSpace = {
-
- as: npm.formatting.as,
-
- minify: npm.minify,
-
- queryResult,
-
- PromiseAdapter,
-
- ParameterizedQuery,
-
- PreparedStatement,
-
- QueryFile,
-
- errors: npm.errors,
-
- utils: npm.pubUtils,
-
- txMode: npm.mode
- };
- npm.utils.addReadProperties($main, rootNameSpace);
- module.exports = $main;
|