-
Notifications
You must be signed in to change notification settings - Fork 220
Integration
This document is the guidelines for integrating pg-promise with reusable libraries.
The standard way is by adding pg-promise as a dependency in your package.json.
advantages:
- isolated use of promise libraries
- coding strictly for the referenced version of
pg-promise - providing your own Initialization Options
disadvantages:
- requires separate database connection parameters
- requires creation of a separate instance of the Database object
If the client module creates its own Database object from the same connection parameters, it will result in a duplicate Database object warning, as explained in the Database API.
You can accept db - Database object as a parameter, to use it directly. And you can access all pg-promise features via property db.$config.
advantages:
- consistent use of the Initialization Options, as configured by the client
- no dependencies: reusing
pg-promiseand the promise library as configured by the client - no duplicate Database objects, optimal use of the connection and event listeners
disadvantages:
- cannot set your own Initialization Options, and you can break the client's code, if you try
- can only use the basic promise methods as exposed via
db.$config.promise
You can support pg-promise through explicit dependencies (for the default), and via db parameter as a optional override.
This is the recommended approach, because it can suit the needs of both client types:
- clients that use
pg-promiseinternally will be able to pass indbas a parameter - clients that do not use
pg-promiseinternally will rely on your library's defaults
version
If you want to enforce the minimum-version requirement on the db parameter, you can use the following function:
// Compares a version-parameter to pg-promise database object version,
// and returns the comparison result:
// -1: database object version is older
// 1: database object version is newer
// 0: the same versions
//
// It will always return -1 for pg-promise prior to 4.4.8,
// starting from which the version could be determined.
const parseVersion = require('vparse');
function comparePGPVersion(db, version) {
if (!db || !db.constructor || db.constructor.name !== 'Database') {
throw new TypeError('Parameter \'db\' is invalid.');
}
if (!db.$config || !db.$config.version) {
return -1; // version is prior to 4.4.8
}
return parseVersion(db.$config.version).compare(version);
}
pg-promise