@smallprod/models
Version:
81 lines (80 loc) • 2.89 kB
JavaScript
;
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;