@sqb/connect
Version:
Multi-dialect database connection framework written with TypeScript
181 lines (180 loc) • 8.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Entity = Entity;
const entity_metadata_js_1 = require("../model/entity-metadata.js");
const apply_mixins_js_1 = require("../util/apply-mixins.js");
function Entity(options) {
return function (target) {
const opts = typeof options === 'object' ? options : {};
const tableName = typeof options === 'string' ? options : opts.tableName;
const entity = entity_metadata_js_1.EntityMetadata.define(target);
entity.tableName = tableName || target.name;
if (opts.schema)
entity.schema = opts.schema;
if (opts.comment)
entity.comment = opts.comment;
};
}
(function (Entity) {
Entity.getMetadata = entity_metadata_js_1.EntityMetadata.get;
Entity.getOwnMetadata = entity_metadata_js_1.EntityMetadata.getOwn;
function getField(ctor, key) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return model && entity_metadata_js_1.EntityMetadata.getField(model, key);
}
Entity.getField = getField;
function getColumnField(ctor, key) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return model && entity_metadata_js_1.EntityMetadata.getColumnField(model, key);
}
Entity.getColumnField = getColumnField;
function getEmbeddedField(ctor, key) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return model && entity_metadata_js_1.EntityMetadata.getEmbeddedField(model, key);
}
Entity.getEmbeddedField = getEmbeddedField;
function getAssociationField(ctor, key) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return model && entity_metadata_js_1.EntityMetadata.getAssociationField(model, key);
}
Entity.getAssociationField = getAssociationField;
function getColumnFieldByFieldName(ctor, fieldName) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return model && entity_metadata_js_1.EntityMetadata.getColumnFieldByFieldName(model, fieldName);
}
Entity.getColumnFieldByFieldName = getColumnFieldByFieldName;
function find(ctor, predicate) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return model && entity_metadata_js_1.EntityMetadata.findField(model, predicate);
}
Entity.find = find;
function getFieldNames(ctor, filter) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getFieldNames(model, filter)) || [];
}
Entity.getFieldNames = getFieldNames;
function getColumnFieldNames(ctor) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getColumnFieldNames(model)) || [];
}
Entity.getColumnFieldNames = getColumnFieldNames;
function getEmbeddedFieldNames(ctor) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getEmbeddedFieldNames(model)) || [];
}
Entity.getEmbeddedFieldNames = getEmbeddedFieldNames;
function getAssociationFieldNames(ctor) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getAssociationFieldNames(model)) || [];
}
Entity.getAssociationFieldNames = getAssociationFieldNames;
function getNonAssociationFieldNames(ctor) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getNonAssociationFieldNames(model)) || [];
}
Entity.getNonAssociationFieldNames = getNonAssociationFieldNames;
function getInsertColumnNames(ctor) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getInsertColumnNames(model)) || [];
}
Entity.getInsertColumnNames = getInsertColumnNames;
function getUpdateColumnNames(ctor) {
const model = entity_metadata_js_1.EntityMetadata.get(ctor);
return (model && entity_metadata_js_1.EntityMetadata.getUpdateColumnNames(model)) || [];
}
Entity.getUpdateColumnNames = getUpdateColumnNames;
function getPrimaryIndex(ctor) {
const model = entity_metadata_js_1.EntityMetadata.define(ctor);
return entity_metadata_js_1.EntityMetadata.getPrimaryIndex(model);
}
Entity.getPrimaryIndex = getPrimaryIndex;
function getPrimaryIndexColumns(ctor) {
const model = entity_metadata_js_1.EntityMetadata.define(ctor);
return entity_metadata_js_1.EntityMetadata.getPrimaryIndexColumns(model);
}
Entity.getPrimaryIndexColumns = getPrimaryIndexColumns;
function mixin(derivedCtor, ...bases) {
for (const base of bases) {
if (!base)
continue;
(0, apply_mixins_js_1.applyMixins)(derivedCtor, base);
const srcMeta = entity_metadata_js_1.EntityMetadata.get(base);
if (srcMeta) {
const trgMeta = entity_metadata_js_1.EntityMetadata.define(derivedCtor);
entity_metadata_js_1.EntityMetadata.mixin(trgMeta, srcMeta);
}
}
return derivedCtor;
}
Entity.mixin = mixin;
function Pick(classRef, keys) {
const PickEntityClass = class {
constructor(...args) {
applyConstructorProperties(this, classRef, args);
}
};
const pickKeys = keys.map(x => x.toLowerCase());
const filter = k => pickKeys.includes(k.toLowerCase());
(0, apply_mixins_js_1.applyMixins)(PickEntityClass, classRef, filter);
const srcMeta = entity_metadata_js_1.EntityMetadata.get(classRef);
if (srcMeta) {
const trgMeta = entity_metadata_js_1.EntityMetadata.define(PickEntityClass);
entity_metadata_js_1.EntityMetadata.mixin(trgMeta, srcMeta, filter);
}
return PickEntityClass;
}
Entity.Pick = Pick;
function Omit(classRef, keys) {
const OmitEntityClass = class {
constructor(...args) {
applyConstructorProperties(this, classRef, args);
}
};
const omitKeys = keys.map(x => x.toLowerCase());
const filter = k => !omitKeys.includes(k.toLowerCase());
(0, apply_mixins_js_1.applyMixins)(OmitEntityClass, classRef, filter);
const srcMeta = entity_metadata_js_1.EntityMetadata.get(classRef);
if (srcMeta) {
const trgMeta = entity_metadata_js_1.EntityMetadata.define(OmitEntityClass);
entity_metadata_js_1.EntityMetadata.mixin(trgMeta, srcMeta, filter);
}
return OmitEntityClass;
}
Entity.Omit = Omit;
function Union(...bases) {
const UnionClass = class {
constructor(...args) {
for (const c of bases)
applyConstructorProperties(this, c, args);
}
};
for (const base of bases) {
(0, apply_mixins_js_1.applyMixins)(UnionClass, base);
const srcMeta = entity_metadata_js_1.EntityMetadata.get(base);
if (srcMeta) {
const trgMeta = entity_metadata_js_1.EntityMetadata.define(UnionClass);
entity_metadata_js_1.EntityMetadata.mixin(trgMeta, srcMeta);
}
}
return UnionClass;
}
Entity.Union = Union;
})(Entity || (exports.Entity = Entity = {}));
function applyConstructorProperties(target, sourceClass, constructorArgs, isPropertyInherited) {
try {
const tempInstance = new sourceClass(...constructorArgs);
const keys = Object.getOwnPropertyNames(tempInstance);
for (const key of keys) {
const srcDesc = Object.getOwnPropertyDescriptor(tempInstance, key);
const trgDesc = Object.getOwnPropertyDescriptor(target, key);
if (!srcDesc ||
trgDesc ||
(isPropertyInherited && !isPropertyInherited(key)))
continue;
Object.defineProperty(target, key, srcDesc);
}
}
catch {
//
}
}