@berish/orm
Version:
ORM
80 lines • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createEntity = exports.getClassNameByClassOrClassName = exports.getClassByClassOrClassName = exports.getClassByClassName = exports.getClassNameByClass = exports.register = void 0;
const linq_1 = require("@berish/linq");
const typeof_1 = require("@berish/typeof");
const class_1 = require("@berish/class");
const entity_1 = require("./entity");
const methods_1 = require("./entity/methods");
const registrator = new class_1.Registrator();
/**
* Регистрация класса сущности по названию сущности
*/
function register(className, cls) {
if (registrator.isRegisteredName(className))
throw new Error('Entity already registered with same className');
if (registrator.isRegisteredClass(cls))
throw new Error('Entity already registered with same class');
registrator.register(className, cls);
}
exports.register = register;
/**
* Получение название сущности по классу сущности
*/
function getClassNameByClass(cls) {
return registrator.getNamesByClass(cls)[0];
}
exports.getClassNameByClass = getClassNameByClass;
/**
* Получение класса сущности по названию сущности
*/
function getClassByClassName(className) {
return registrator.getClassesByClassName(className)[0] || entity_1.Entity;
}
exports.getClassByClassName = getClassByClassName;
/**
* Получение класса сущности по названию сущности или по зарегистрированному классу сущности.
* Если сущность не зарегистрирована, возвращает базовый класс сущности
*/
function getClassByClassOrClassName(cls) {
const className = getClassNameByClassOrClassName(cls);
if (!className || !registrator.isRegisteredName(className))
return entity_1.Entity;
return getClassByClassName(className);
}
exports.getClassByClassOrClassName = getClassByClassOrClassName;
/**
* Получение названия сущности по названию сущности или по зарегистрированному классу сущности.
* Если сущность не зарегистрирована, возвращает null
*/
function getClassNameByClassOrClassName(cls) {
if (typeof_1.default(cls) !== 'string' && typeof_1.default(cls) !== 'function')
return null;
if (typeof_1.default(cls) === 'string')
return cls;
return getClassNameByClass(cls);
}
exports.getClassNameByClassOrClassName = getClassNameByClassOrClassName;
function createEntity(className, attributes) {
const cls = getClassByClassName(className);
const arrayAttributes = Array.isArray(attributes) ? attributes : [attributes];
const entities = linq_1.default.from(arrayAttributes).select((m) => {
const entity = new cls();
methods_1.setClassName(entity, className);
if (cls.fields) {
for (const key of cls.fields) {
entity.set(key, void 0);
}
}
if (m) {
const entries = Object.entries(m);
for (const [key, value] of entries) {
entity.set(key, value);
}
}
return entity;
});
return Array.isArray(attributes) ? entities : entities.first();
}
exports.createEntity = createEntity;
//# sourceMappingURL=registrator.js.map