UNPKG

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
"use strict"; 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;