silvie
Version:
Typescript Back-end Framework
181 lines (168 loc) • 5.03 kB
JavaScript
"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();