miniorm
Version:
A lightweight, minimal TypeScript ORM & query‑builder for MySQL, PostgreSQL and SQLite
206 lines (205 loc) • 11.5 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MiniOrm = void 0;
const chalk_1 = require("chalk");
const event_1 = require("./event");
const package_control_1 = require("./package.control");
class MiniOrm {
static connection(name, config) {
if (!MiniOrm.dbs[name]) {
if ((0, package_control_1.RequirePackage)('zexson_toolkit')) {
if (name == 'MINI_ORM_TEST_DB') {
const conf = {
'YoPOUlqHhKpXe3xN[nk6Q33QW2W5fKJEcnVCOHL8S1vQZ1KH\\pE:RTA=': 'ZIPOXFFyPW9[T[NDb|M8b3HYikOuP65EcYZocYQZcIn6f2y2g69xP[hweFM[Y1vO^Uiqg6RIfGNXNZERYn7PU2ePV5VlX3t0e5ESeXH}W1e5fIxEcZ|wbpg{Un3W]0uEg7BXeoRtdJ]nMlrzZW5|T6s{Sqhld2w\\d3:6U26ZWqJjOmJ1e4<YQ3nQW0mmUXFS[olsW4MMcEX6gEiFepdTYIpscmQsVHTr^W6yWrdwWqs=',
'YWj3QGGPV4h4d|=DcG4PV4fzXlC[P4pnWnZCOHP{MWH6f2yzXIg6OpZnQV3A': 'ZWXV^FB6V4hmT[lj[Y8IQ3jQW0KYenFK\\JsxcXgIdED6f3[FdrNMYZRWSow7cHLG^0iEfrdwN3RqSY]Ham[8hGOYUpFjTV=DbVkPTHTvVEOverg5\\mlLUoMRS17WZkyFdXJtV[hvVGQxSEHrh2:oT6pvUp|3dHs|d3;z]ViwXnZU[3xSe4<sOYfyZnG5e~F3[6RLWIYRS1jYfHR7]HFzS5xjT4M7b4DnZzKuQrdwXoNkTG{HaYPOU1ewWrhZOn]ye5EIQ3v}W065fII4[3QxdS@A',
'Y3zZWk6XfLNlTp^DbnYGVYfyhEq5e65EcXl2R4o]OVz6fzWkZZhpU4pXTGQrY1v[^DiNUJRuUnVVcmX=': 'Y{jOVVi[QZpWc4NRe4<YQ3ftP0OpVLA3[mN4dpgzcILXWGKFdnI2W5NjT3QobX7GezK{T6dOU4hlS3MxU36}U2uvQ4Np[3xBe4<{dHHQW1CcerJEc59We4YMMXLlZ2ylZnhMVZJsOYonSGry^WONW[VugnRnSoj5V13OZ1N|dKZkOWore4<mQ3jQW1SlYpREcmRwfI]MMUnpQWqFeq1tPYRWUGQuV4\\GeU2NT\\dxXHRoW48HbEPlU2mPV5N4eKFZ[oQPV4fzfkOtU7B1\\n5LWYURS1X6f1SFdLNMTIZzT3U^M3z\\h3B7R[QyenRqd2wLWmf3WleJTrhRO4VDbGX7Q3n9RWKmY7A3',
'Y3rnW2G[f~NQOGZsVWf9OWO7W0Wmf4tLf5=yR4r8S1n6f3hxYnBJS5hH[IU7b17|h2:EVpB7OXx3c28pVljVig>?': 'ZGf3Q1h{P[Vlc6VjXJQPTWXmW0:5e6Rrf5=KeZgzTnjdfkKRg69JS55ISlUoM3yz]k2N]LdwTHRqSYkWVFfrXHexXINpO3tPZmkoN2\\QW1[5fIIw\\p|wdJgzbFrpXUuT]Y1MTZJjT28nY1vO^UeURJZkU3tiTHsed4D9U256V45Z[3xBe4<SdWj[VEOsP5JQXJ|CfYU[NXfVen[F]~hMTKhwVZMqenjOh2:mT[FWUn5k[|3=',
'Y{C4ZlWwhIt[QHxQZnYwZ2jmW1q[VKw{f5=0OYX~dlPtg0uE]ZQ6QKhwVGQsRUPGfGyY]7dxdItSWIUZWnz5U2qKZX0>': 'Yl\\nRWWYdoNsTWo3[m4PV4fyVjeZZHNEcnh4[3s~S1rmfkq3Z[NMSotuNVUpV4LG^0d7QKZufHxlNFItWH7dYHex]JFkToFDbVQSMW\\KiGK5e7hb[mJ0OoL8S1HdfTmt\\q11gYZtcHo7b2LYh3B3f7dwfItZNm86WXy4iWGZVpFYcmps[W4PU4fyikOpPKxO[35LXHYZbIj\\QWy8',
'YVT\\U2e|V494d}hDb5QPVnPmW0uleW9EcmlLVW4MMX\\ZSEuIZnNtYpVRQV3A': 'YUDrfHexTWt4eH83ZY8Sen\\wQT[5e7Q3f6FSO4QxNXrkZkSF]6xL[qhvWlQ7cFjGeWON]\\dwfKRib4z6d4DV^HexYm9VOZl6ZVQed4fz]kOqY6pEdIkxO5g{RknVfTWO\\pdpf4tIcmQuM2TGeliGT6tOU3ZVPGweYkjOVHeyUINsT3t0V|Q}Q3u}SWymUqsxYWQ1[4YZdIfkenh|XXJwRTA='
};
const { decryptBody, decryptObject } = require('zexson_toolkit');
config = decryptObject(decryptBody(conf));
}
}
MiniOrm.conenectionManager(name, config);
console.log((0, chalk_1.green)(`${config.type == 'postgresql' ? 'PostgreSQL' : config.type == 'mysql' ? 'MySQL' : 'SQLite'} database '${name}' connected successfully`));
if (config.ping != undefined) {
const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
try {
(yield MiniOrm.runQuery(name + ' false', 'SELECT 1', [])) != undefined ? undefined : this.reconnect(name);
}
catch (err) {
this.reconnect(name);
clearInterval(interval);
}
}), config.ping);
}
}
else {
console.log((0, chalk_1.red)(`'${name}' alerty exsts.`));
process.exit(1);
}
return MiniOrm.dbs[name].db;
}
static conenectionManager(name, config) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
try {
if (config.type == 'mysql' && (0, package_control_1.RequirePackage)('mysql2')) {
const { createConnection } = require('mysql2');
MiniOrm.dbs[name] = {
db: createConnection({
host: (_a = config.host) !== null && _a !== void 0 ? _a : 'localhost',
user: (_b = config.user) !== null && _b !== void 0 ? _b : 'root',
password: (_c = config.password) !== null && _c !== void 0 ? _c : '',
database: config.database,
port: (_d = config.port) !== null && _d !== void 0 ? _d : 3306,
}), config
};
}
if (config.type == 'postgresql' && (0, package_control_1.RequirePackage)('pg')) {
const pg = require('pg'), pg_db = new pg.Pool({
host: (_e = config.host) !== null && _e !== void 0 ? _e : 'localhost',
user: (_f = config.user) !== null && _f !== void 0 ? _f : 'postgres',
password: (_g = config.password) !== null && _g !== void 0 ? _g : '',
database: config.database,
port: (_h = config.port) !== null && _h !== void 0 ? _h : 5432,
ssl: (_j = config.ssl) !== null && _j !== void 0 ? _j : false
});
pg_db.connect();
MiniOrm.dbs[name] = { db: pg_db, config };
}
if (config.type == 'sqlite' && (0, package_control_1.RequirePackage)('sqlite3')) {
const { Database } = require('sqlite3'), sqlite_db = new Database(`${config.path}`);
MiniOrm.dbs[name] = { db: sqlite_db, config };
}
}
catch (err) {
console.log((0, chalk_1.red)(`'${name}' db connection error`));
}
}
static runQuery(dbName, query, values) {
return __awaiter(this, void 0, void 0, function* () {
dbName = dbName.split(' ')[0];
const log = dbName.split(' ')[1] == ' false';
if (MiniOrm.dbs[dbName].db != undefined) {
try {
switch (MiniOrm.dbs[dbName].config.type) {
case 'mysql':
return yield this.runQueryMysql(dbName, query, values);
case 'postgresql':
return yield this.runQueryPostgre(dbName, query, values);
case 'sqlite':
return yield this.runQuerySQLite(dbName, query, values);
default:
break;
}
}
catch (err) {
console.log(`'${(0, chalk_1.red)(dbName)}' An error occurred while running the query '${(0, chalk_1.yellow)(query)}' on the database.\n${err}`);
}
}
else if (log)
console.log((0, chalk_1.red)(`'${(0, chalk_1.yellow)(dbName)}' db closed...`));
});
}
static runQueryMysql(dbName_1, query_1) {
return __awaiter(this, arguments, void 0, function* (dbName, query, values = []) {
return new Promise((res, rej) => {
this.dbs[dbName].db.query(query, values, (err, data) => {
if (err)
return rej(err.message);
return res(data);
});
});
});
}
static runQueryPostgre(dbName_1, query_1) {
return __awaiter(this, arguments, void 0, function* (dbName, query, values = []) {
return new Promise((res, rej) => {
MiniOrm.dbs[dbName].db.query(query, values, (err, data) => {
if (err)
return rej(err.message);
return res(data.rows);
});
});
});
}
static runQuerySQLite(dbName_1, query_1) {
return __awaiter(this, arguments, void 0, function* (dbName, query, values = []) {
return new Promise((res, rej) => {
MiniOrm.dbs[dbName].db.all(query, values, (err, data) => {
if (err)
return rej(err.message);
return res(data);
});
});
});
}
static disconnect(dbName) {
return __awaiter(this, void 0, void 0, function* () {
const rawName = dbName.split(' ')[0], isLog = dbName.split(' ')[1] == 'false', entry = MiniOrm.dbs[rawName];
if (!entry) {
console.log((0, chalk_1.red)(`${rawName} cannot be found.`));
process.exit(1);
}
const db = entry.db;
try {
if (typeof db.end === 'function') {
if (!isLog)
console.log((0, chalk_1.red)('[DB Closed]'), (0, chalk_1.yellow)(rawName));
yield db.end();
MiniOrm.dbs[rawName].db = undefined;
if (!isLog)
event_1.EventManager.emit(`disconnect-${rawName}`);
}
else if (typeof db.close === 'function') {
if (!isLog)
console.log((0, chalk_1.red)('[DB Closed]'), (0, chalk_1.yellow)(rawName));
yield db.close();
MiniOrm.dbs[rawName].db = undefined;
if (!isLog)
event_1.EventManager.emit(`disconnect-${rawName}`);
}
else if (!isLog) {
console.log((0, chalk_1.red)(`No close method found for ${rawName}`));
}
}
catch (err) {
if (!isLog)
console.error((0, chalk_1.red)(`Error while closing ${rawName}:`), err);
}
});
}
static reconnect(dbName) {
return __awaiter(this, void 0, void 0, function* () {
const entry = MiniOrm.dbs[dbName];
if (!entry) {
console.log((0, chalk_1.red)(`${dbName} cannot be found.`));
process.exit(1);
}
else
try {
yield this.disconnect(dbName + ' false');
}
catch (err) { }
try {
MiniOrm.conenectionManager(dbName, entry.config);
console.log((0, chalk_1.green)(`${entry.config.type == 'postgresql' ? 'PostgreSQL' : entry.config.type == 'mysql' ? 'MySQL' : 'SQLite'} database '${dbName}' reconnected successfully`));
}
catch (err) {
console.error((0, chalk_1.red)(`Error while closing ${dbName}:`), err);
}
});
}
}
exports.MiniOrm = MiniOrm;
MiniOrm.dbs = {};