UNPKG

@liqd-js/mongodb-model

Version:
63 lines (62 loc) 2.58 kB
"use strict"; 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;