miniorm
Version:
A lightweight, minimal TypeScript ORM & query‑builder for MySQL, PostgreSQL and SQLite
147 lines (146 loc) • 5.35 kB
JavaScript
"use strict";
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.Model = void 0;
const query_builder_1 = require("./query.builder");
class Model {
constructor(dbName, table, opt) {
var _a;
this.dbName = dbName;
if (typeof table == 'string')
this.tableName = table;
else {
this.tableName = (_a = table.$table) !== null && _a !== void 0 ? _a : table.name.toLowerCase();
this.entity = table;
}
this.queryBuilder = new query_builder_1.QueryBuilder(this.dbName, table, opt);
}
// Basic CRUD operations
find() {
return __awaiter(this, arguments, void 0, function* (opt = {}) {
const qb = this.queryBuilder.select(opt.fields);
if (opt.where)
qb.where(...(opt.where || []));
if (opt.order)
qb.order(opt.order ? [opt.order[0]] : undefined, opt.order ? opt.order[1] : undefined);
if (opt.limit)
qb.limit(opt.limit);
if (opt.offset)
qb.offset(opt.offset);
return yield qb.run();
});
}
findAll() {
return __awaiter(this, arguments, void 0, function* (fields = []) {
return this.queryBuilder.select(fields).run();
});
}
findOne() {
return __awaiter(this, arguments, void 0, function* (opt = {}) {
const qb = this.queryBuilder.select(opt.fields);
if (opt.where)
qb.where(...(opt.where || []));
if (opt.order)
qb.order(opt.order ? [opt.order[0]] : undefined, opt.order ? opt.order[1] : undefined);
if (opt.limit)
qb.limit(opt.limit);
if (opt.offset)
qb.offset(opt.offset);
return yield qb.first();
});
}
first() {
return __awaiter(this, arguments, void 0, function* (opt = {}) {
return yield this.findOne(opt);
});
}
create(data) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.insert(data);
});
}
update(data, ...whereConditions) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.update(data).where(...whereConditions).run();
});
}
delete(...whereConditions) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.delete().where(...whereConditions).run();
});
}
// Aggregation methods
count(field) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.count(field);
});
}
max(field) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.max(field);
});
}
min(field) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.min(field);
});
}
avg(field) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.avg(field);
});
}
sum(field) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.sum(field);
});
}
// Utility methods
exists(...whereConditions) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.select().where(...whereConditions).exists();
});
}
pluck(field) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.queryBuilder.pluck(field);
});
}
// Raw query execution
raw(query_1) {
return __awaiter(this, arguments, void 0, function* (query, values = []) {
return yield this.queryBuilder.raw(query, values);
});
}
// Query builder access for more complex queries
query() {
var _a;
return new query_builder_1.QueryBuilder(this.dbName, (_a = this.entity) !== null && _a !== void 0 ? _a : this.tableName);
}
// Connection management
disconnect() {
return __awaiter(this, void 0, void 0, function* () {
yield this.queryBuilder.disconnect();
});
}
reconnect() {
return __awaiter(this, void 0, void 0, function* () {
yield this.queryBuilder.reconnect();
return this;
});
}
// Debug helper
debug(type = 'now', func) {
this.queryBuilder.debug(type, func);
return this;
}
}
exports.Model = Model;