orbitdbconnector
Version:
Database connection provider based on Typeorm with a bunch of tweak to be able to connect to a DB dynamically with or without entities plus perf gains.
72 lines (71 loc) โข 4.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrbitDbConnector = void 0;
const typeorm_1 = require("typeorm");
const types_1 = require("./definitions/types");
const orbitLogger_1 = require("./helpers/orbitLogger");
// ๐ข๐ป WELCOME TO THE SPACESHIP - DEVELOPED BY ๐ป๐ข
// โโโโโโโ โโโโโโโ โโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโ โโโโ โโโโโโโโโโโโโโโโโโ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
// โโโ โโโโโโโโโโโโโโโโโโโโโโ โโโ โโโ โโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโ โโโโโโโโ
// โโโ โโโโโโโโโโโโโโโโโโโโโโ โโโ โโโ โโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโ
// โโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโ โโโ โโโโโโโโโโโโ โโโโโโ โโโโโโโโโโโโโโโโโ โโโ
// โโโโโโโ โโโ โโโโโโโโโโ โโโ โโโ โโโ โโโโโโโ โโโ โโโโโโ โโโโโโโโโโโโโโโโ โโโ
// ๐๐ฐ KEEP GOING FURTHER ๐ฐ๐
/**
* ๐จ Project Name : Array-Querier
* ๐จ Project Repo : https://github.com/orbitturner/OrbiDbConnector
* ๐จ My GitHub : https://github.com/orbitturner
* ๐จ My LinkedIn : https://linkedin.com/in/orbitturner
* ๐จ My Twitter : https://twitter.com/orbitturner
*/
class OrbitDbConnector {
// -------------------------------------
constructor() {
this.logger = new orbitLogger_1.default({
scope: '๐ฅ๏ธ OrbitDbConnector ๐ก',
});
}
// -------------------------------------
/**
* ==================================
* ๐กโ CLASS PUBLIC FACADE โ๐ก
* ==================================
* Gateway used to execute the Orbit Connector
* and returns the new Connection data to the caller.
* @return TypeOrmDatasource: DataSource;
*/
async doConnection(connectionProps, entities) {
connectionProps = { ...connectionProps, entities };
const { name, ...props } = connectionProps;
const tableName = entities?.length > 0 ? props.entities[0]?.name : null;
this.logger.log(`-> Trying To Recover Old Connection From [${connectionProps.name}] - [${connectionProps.database}]...`);
const oldConIndex = entities?.length > 0
? types_1.ODConnectionArray.findIndex((connexion) => connexion.name === name && connexion.database === props.database && connexion.tableName === tableName)
: types_1.ODConnectionArray.findIndex((connexion) => connexion.name === name && connexion.database === props.database);
if (oldConIndex !== -1) {
this.logger.warn(`๐๏ธ FOUND EXISTING CONNECTION FOR [${name}] - [${connectionProps.database}] ! -> USING IT...`);
return types_1.ODConnectionArray[oldConIndex].con;
}
this.logger.log(`-> NO CONNECTION WERE FOUND FOR ${connectionProps.name} - ${connectionProps.database}`);
this.logger.log(`-> Creating New Connection For [${connectionProps.name}] - ${connectionProps.database}...`);
const con = (await new typeorm_1.DataSource(props)
.initialize()
.then((conn) => {
this.logger.log(`โ
CONNECTION ESTABLISHED TO [${connectionProps.name}] - [${connectionProps.database}] โ
`);
return conn;
})
.catch((err) => {
this.logger.error(`๐จ UNABLE TO CONNECT TO [${connectionProps.name}] - [${connectionProps.database}] โ`);
this.logger.fatal(err);
}));
types_1.ODConnectionArray.push({
name,
database: props.database,
tableName,
con,
});
return con;
}
}
exports.OrbitDbConnector = OrbitDbConnector;