diff --git a/packages/pg/lib/connection-parameters.js b/packages/pg/lib/connection-parameters.js index a7b941c10..c153932bb 100644 --- a/packages/pg/lib/connection-parameters.js +++ b/packages/pg/lib/connection-parameters.js @@ -7,6 +7,10 @@ const defaults = require('./defaults') const parse = require('pg-connection-string').parse // parses a connection string const val = function (key, config, envVar) { + if (config[key]) { + return config[key] + } + if (envVar === undefined) { envVar = process.env['PG' + key.toUpperCase()] } else if (envVar === false) { @@ -15,7 +19,7 @@ const val = function (key, config, envVar) { envVar = process.env[envVar] } - return config[key] || envVar || defaults[key] + return envVar || defaults[key] } const readSSLConfigFromEnvironment = function () { diff --git a/packages/pg/lib/defaults.js b/packages/pg/lib/defaults.js index 015909dcd..673696f79 100644 --- a/packages/pg/lib/defaults.js +++ b/packages/pg/lib/defaults.js @@ -1,11 +1,18 @@ 'use strict' +let user +try { + user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER +} catch { + // ignore, e.g., Deno without --allow-env +} + module.exports = { // database host. defaults to localhost host: 'localhost', // database user's name - user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER, + user, // name of database to connect database: undefined, diff --git a/packages/pg/lib/index.js b/packages/pg/lib/index.js index 5bd73385b..e8b746149 100644 --- a/packages/pg/lib/index.js +++ b/packages/pg/lib/index.js @@ -34,31 +34,40 @@ const PG = function (clientConstructor) { this.utils = utils } -if (typeof process.env.NODE_PG_FORCE_NATIVE !== 'undefined') { - module.exports = new PG(require('./native')) -} else { - module.exports = new PG(Client) +let clientConstructor = Client - // lazy require native module...the native module may not have installed - Object.defineProperty(module.exports, 'native', { - configurable: true, - enumerable: false, - get() { - let native = null - try { - native = new PG(require('./native')) - } catch (err) { - if (err.code !== 'MODULE_NOT_FOUND') { - throw err - } +let forceNative = false +try { + forceNative = !!process.env.NODE_PG_FORCE_NATIVE +} catch { + // ignore, e.g., Deno without --allow-env +} + +if (forceNative) { + clientConstructor = require('./native') +} + +module.exports = new PG(clientConstructor) + +// lazy require native module...the native module may not have installed +Object.defineProperty(module.exports, 'native', { + configurable: true, + enumerable: false, + get() { + let native = null + try { + native = new PG(require('./native')) + } catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') { + throw err } + } - // overwrite module.exports.native so that getter is never called again - Object.defineProperty(module.exports, 'native', { - value: native, - }) + // overwrite module.exports.native so that getter is never called again + Object.defineProperty(module.exports, 'native', { + value: native, + }) - return native - }, - }) -} + return native + }, +})