Update to NPM version
This commit is contained in:
115
ProjectSourceCode/node_modules/pg-promise/lib/database-pool.js
generated
vendored
Normal file
115
ProjectSourceCode/node_modules/pg-promise/lib/database-pool.js
generated
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright (c) 2015-present, Vitaly Tomilov
|
||||
*
|
||||
* See the LICENSE file at the top-level directory of this distribution
|
||||
* for licensing information.
|
||||
*
|
||||
* Removal or modification of this copyright notice is prohibited.
|
||||
*/
|
||||
|
||||
const {ColorConsole} = require(`./utils/color`);
|
||||
|
||||
const npm = {
|
||||
utils: require(`./utils`)
|
||||
};
|
||||
|
||||
/**
|
||||
* @class DatabasePool
|
||||
* @static
|
||||
* @private
|
||||
*/
|
||||
class DatabasePool {
|
||||
|
||||
/**
|
||||
* Global instance of the database pool repository.
|
||||
*
|
||||
* @returns {{dbMap: {}, dbs: Array}}
|
||||
*/
|
||||
static get instance() {
|
||||
const s = Symbol.for(`pgPromiseDatabasePool`);
|
||||
let scope = global[s];
|
||||
if (!scope) {
|
||||
scope = {
|
||||
dbMap: {}, // map of used database context keys (connection + dc)
|
||||
dbs: [] // all database objects
|
||||
};
|
||||
global[s] = scope;
|
||||
}
|
||||
return scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method DatabasePool.register
|
||||
* @static
|
||||
* @description
|
||||
* - Registers each database object, to make sure no duplicates connections are used,
|
||||
* and if they are, produce a warning;
|
||||
* - Registers each Pool object, to be able to release them all when requested.
|
||||
*
|
||||
* @param {Database} db - The new Database object being registered.
|
||||
*/
|
||||
static register(db) {
|
||||
const cnKey = DatabasePool.createContextKey(db);
|
||||
npm.utils.addReadProp(db, `$cnKey`, cnKey, true);
|
||||
const {dbMap, dbs} = DatabasePool.instance;
|
||||
if (cnKey in dbMap) {
|
||||
dbMap[cnKey]++;
|
||||
/* istanbul ignore if */
|
||||
if (!db.$config.options.noWarnings) {
|
||||
ColorConsole.warn(`WARNING: Creating a duplicate database object for the same connection.\n${npm.utils.getLocalStack(4, 3)}\n`);
|
||||
}
|
||||
} else {
|
||||
dbMap[cnKey] = 1;
|
||||
}
|
||||
dbs.push(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* @method DatabasePool.unregister
|
||||
* @static
|
||||
* @param db
|
||||
*/
|
||||
static unregister(db) {
|
||||
const cnKey = db.$cnKey;
|
||||
const {dbMap} = DatabasePool.instance;
|
||||
if (!--dbMap[cnKey]) {
|
||||
delete dbMap[cnKey];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @method DatabasePool.shutDown
|
||||
* @static
|
||||
*/
|
||||
static shutDown() {
|
||||
const {instance} = DatabasePool;
|
||||
instance.dbs.forEach(db => {
|
||||
db.$destroy();
|
||||
});
|
||||
instance.dbs.length = 0;
|
||||
instance.dbMap = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* @method DatabasePool.createContextKey
|
||||
* @static
|
||||
* @description
|
||||
* For connections that are objects it reorders the keys alphabetically,
|
||||
* and then serializes the result into a JSON string.
|
||||
*
|
||||
* @param {Database} db - Database instance.
|
||||
*/
|
||||
static createContextKey(db) {
|
||||
let cn = db.$cn;
|
||||
if (typeof cn === `object`) {
|
||||
const obj = {}, keys = Object.keys(cn).sort();
|
||||
keys.forEach(name => {
|
||||
obj[name] = cn[name];
|
||||
});
|
||||
cn = obj;
|
||||
}
|
||||
return npm.utils.toJson(npm.utils.getSafeConnection(cn)) + npm.utils.toJson(db.$dc);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {DatabasePool};
|
||||
Reference in New Issue
Block a user