@liqd-js/mongodb-model
Version:
Mongo model class
63 lines (62 loc) • 2.58 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractModels = void 0;
const mongodb_1 = require("mongodb");
const helpers_1 = require("./helpers");
__exportStar(require("mongodb"), exports);
__exportStar(require("./types/external"), exports);
__exportStar(require("./helpers/external"), exports);
__exportStar(require("./model"), exports);
__exportStar(require("./property-model"), exports);
const Clients = new Map();
class AbstractModels {
client;
models = new Map();
scope = Object.freeze({
start: helpers_1.flowStart,
assign: (scope) => { Object.entries(scope).forEach(([key, value]) => (0, helpers_1.flowSet)(key, value)); },
set: helpers_1.flowSet,
get: helpers_1.flowGet,
execute: helpers_1.flowExecute
});
constructor(connectionString, options = {}) {
if (Clients.has(connectionString)) {
this.client = Clients.get(connectionString);
}
else {
this.client = new mongodb_1.MongoClient(connectionString, { minPoolSize: 0, maxPoolSize: 100, maxIdleTimeMS: 15000, compressors: ['snappy'], ...options });
this.client.connect();
Clients.set(connectionString, this.client);
}
}
[helpers_1.REGISTER_MODEL](instance, collection, path) {
this.models.set(collection + (path ? '.' + path : ''), instance);
}
[helpers_1.GET_PARENT](collection, path) {
let parent = collection + (path && path !== '' ? '.' + path : '');
while (parent.includes('.')) {
parent = parent.replace(/\.[^.]+$/, '');
if (this.models.has(parent)) {
return this.models.get(parent);
}
}
}
async transaction(transaction) {
return await this.client.startSession().withTransaction(transaction);
}
}
exports.AbstractModels = AbstractModels;
;