UNPKG

silvie

Version:

Typescript Back-end Framework

181 lines (168 loc) 5.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.Database = void 0; var _drivers = _interopRequireDefault(require("./driver/drivers")); var _log = _interopRequireDefault(require("../utils/log")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } const config = process.configs.database; class Database { get driver() { if (this.privDriver) { return this.privDriver; } throw new Error('Database is not initialized'); } /** * [SINGLETON] Disable the constructor * @private */ // eslint-disable-next-line no-empty-function,no-useless-constructor,@typescript-eslint/no-empty-function constructor() { /** * The database driver instance * @private */ _defineProperty(this, "privDriver", void 0); } /** * [SINGLETON] Creates a new or returns the existing database instance */ static getInstance() { if (!Database.instance) { Database.instance = new Database(); } return Database.instance; } /** * Initializes a database driver based on the given config */ init(instanceCallback) { const type = config.type || process.env.DB_TYPE; if (type in _drivers.default) { var _config$type; this.privDriver = new _drivers.default[type]({ host: config.host || process.env.DB_HOST, port: config.port || process.env.DB_PORT, database: config.database || process.env.DB_DATABASE, username: config.username || process.env.DB_USERNAME, password: config.password || process.env.DB_PASSWORD, ...((_config$type = config[type]) !== null && _config$type !== void 0 ? _config$type : {}) }, instanceCallback); } else { _log.default.error('Invalid Driver', `'${type}' is not a valid database driver`); } } select(queryBuilder) { return this.driver.select(queryBuilder); } exists(queryBuilder) { return this.driver.exists(queryBuilder); } count(queryBuilder) { return this.driver.count(queryBuilder); } average(queryBuilder, column) { return this.driver.average(queryBuilder, column); } sum(queryBuilder, column) { return this.driver.sum(queryBuilder, column); } min(queryBuilder, column) { return this.driver.min(queryBuilder, column); } max(queryBuilder, column) { return this.driver.max(queryBuilder, column); } insert(queryBuilder) { return this.driver.insert(queryBuilder); } update(queryBuilder) { return this.driver.update(queryBuilder); } bulkUpdate(queryBuilder) { return this.driver.bulkUpdate(queryBuilder); } delete(queryBuilder) { return this.driver.delete(queryBuilder); } softDelete(queryBuilder) { return this.driver.softDelete(queryBuilder); } restore(queryBuilder) { return this.driver.restore(queryBuilder); } raw(query, params) { return this.driver.execute(query, params); } /** * Creates a table from the given table instance * @param table */ createTable(table) { return this.driver.createTable(table); } /** * Creates a table from the given table instance * @param table */ updateTable(table) { return this.driver.updateTable(table); } /** * Empties a table * @param tableName */ truncateTable(tableName) { return this.driver.truncateTable(tableName); } /** * Drops a table without any further checks * @param tableName */ dropTable(tableName) { return this.driver.dropTable(tableName); } /** * Drops a table if it exists * @param tableName */ dropTableIfExists(tableName) { return this.driver.dropTableIfExists(tableName); } /** * Specify weather to check for foreign keys or not */ checkForeignKeys(state) { return this.driver.setForeignKeyChecks(state); } /** * This will enable foreign key checks */ enableForeignKeyChecks() { return this.checkForeignKeys(true); } /** * This will disable foreign key checks */ disableForeignKeyChecks() { return this.checkForeignKeys(false); } /** * Closes the current database connection */ closeConnection() { this.driver.closeConnection(); } } exports.Database = Database; /** * [SINGLETON] The database instance * @private */ _defineProperty(Database, "instance", void 0); var _default = exports.default = Database.getInstance();