UNPKG

@smallprod/models

Version:
81 lines (80 loc) 2.89 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const migration_entity_1 = __importDefault(require("./migration.entity")); const automigration_1 = require("./automigration"); class EntityManager { static registerEntity(entity) { this.registeredEntities.push(entity); new entity(); } static registerEntities(entities) { this.registeredEntities = this.registeredEntities.concat(entities); entities.forEach((entity) => new entity()); } static clearRegisteredEntities() { this.registeredEntities = []; } } exports.default = EntityManager; EntityManager.waitingEntities = []; EntityManager.entities = []; EntityManager.manyToManyTables = []; EntityManager.initializedEntities = []; EntityManager.initialize = async (dbName) => { migration_entity_1.default.reset(); EntityManager.initializingEntities = true; while (EntityManager.waitingEntities.length) { await automigration_1.makeMigrations(EntityManager.waitingEntities.pop(), dbName); } EntityManager.initializingEntities = false; }; EntityManager.createContext = () => { let id; do { id = Math.floor(Math.random() * 10000 + 1).toString(); } while (EntityManager.contexts.find((c) => c.id === id)); const newContext = { id, entities: [], }; EntityManager.contexts.push(newContext); return newContext; }; EntityManager.closeContext = (context) => { EntityManager.contexts = EntityManager.contexts.filter((c) => c.id !== context.id); }; EntityManager.clearContext = (context) => { context.entities = []; }; EntityManager.registerManyToManyTable = (table1, table2, relationTable) => { EntityManager.manyToManyTables.push({ table1, table2, relationTable }); }; EntityManager.addEntity = (entity, context) => { if (!context) { context = EntityManager.contexts[0]; } context.entities.push(entity); }; EntityManager.findEntity = (table, id = null, context) => { if (!context) { context = EntityManager.contexts[0]; } if (id) { return context.entities.find((f) => f.constructor.tableName === table && f[f.constructor.id] === id); } return context.entities.filter((f) => f.constructor.tableName === table); }; EntityManager.removeEntity = (entity, context) => { if (!context) { context = EntityManager.contexts[0]; } const ent = entity; context.entities = context.entities.filter((e) => e.constructor.tableName === ent.constructor.tableName && e[e.constructor.id] === ent[ent.constructor.id]); }; EntityManager.contexts = [{ entities: [], id: 'default' }]; EntityManager.registeredEntities = []; EntityManager.initializingEntities = false;