UNPKG

@sqb/connect

Version:

Multi-dialect database connection framework written with TypeScript

181 lines (180 loc) 8.25 kB
"use strict"; 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 { // } }