UNPKG

@decaf-ts/core

Version:

Core persistence module for the decaf framework

121 lines 6.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const decoration_1 = require("@decaf-ts/decoration"); const decorator_validation_1 = require("@decaf-ts/decorator-validation"); const db_decorators_1 = require("@decaf-ts/db-decorators"); const Adapter_1 = require("./../persistence/Adapter.cjs"); const constants_1 = require("./../persistence/constants.cjs"); const errors_1 = require("./../persistence/errors.cjs"); const injectable_decorators_1 = require("@decaf-ts/injectable-decorators"); decoration_1.Metadata.validationExceptions = function (model, op) { const noValidation = decoration_1.Metadata.get(model, constants_1.PersistenceKeys.NO_VALIDATE) || []; const novalidationEntries = Object.entries(noValidation) .filter(([, val]) => val.includes(op)) .map(([key]) => key); const nestedRels = decorator_validation_1.Model.nestedRelations(model); return [...new Set([...novalidationEntries, ...nestedRels])]; }.bind(decoration_1.Metadata); decoration_1.Metadata.migrationsFor = function (adapter) { adapter = adapter ?? Adapter_1.Adapter.current; if (!adapter) throw new db_decorators_1.InternalError(`Could not get adapter for migrations`); const migrations = decoration_1.Metadata["innerGet"](Symbol.for(constants_1.PersistenceKeys.MIGRATION), adapter.alias); return migrations.map((m) => m.class); }.bind(decoration_1.Metadata); decoration_1.Metadata.relations = function (m, prop) { const meta = decoration_1.Metadata.get(m, constants_1.PersistenceKeys.RELATIONS); if (!meta) return undefined; if (!prop) return Object.keys(meta); if (!meta[prop]) throw new db_decorators_1.InternalError(`No relations metadata found for property ${prop}`); return meta[prop]; }.bind(decoration_1.Metadata); decorator_validation_1.Model.relations = function (m, prop) { return (decoration_1.Metadata.relations(m instanceof decorator_validation_1.Model ? m.constructor : m, prop) || []); }; decorator_validation_1.Model.nestedRelations = function (model, existingRelations) { if (!existingRelations?.length) existingRelations = decorator_validation_1.Model.relations(model); let inner = []; const rels = decoration_1.Metadata.get(model, constants_1.PersistenceKeys.RELATIONS); if (!rels || !Object.keys(rels).length) return [...new Set([...existingRelations])]; for (const prop in rels) { const relationMeta = rels[prop]; if (relationMeta?.class && decorator_validation_1.Model.relations(relationMeta.class)) { const innerModelRels = decorator_validation_1.Model.relations(relationMeta.class); const innerModelDotRels = innerModelRels.map((r) => `${prop}.${r}`); existingRelations = [ ...existingRelations, ...innerModelRels, ...innerModelDotRels, ]; inner = decorator_validation_1.Model.nestedRelations(relationMeta.class, existingRelations); } } return [...new Set([...existingRelations, ...inner])]; }; decorator_validation_1.Model.generated = function generated(model, prop) { return !!decoration_1.Metadata.get(typeof model !== "function" ? model.constructor : model, decoration_1.Metadata.key(constants_1.PersistenceKeys.GENERATED, prop)); }.bind(decoration_1.Metadata); decorator_validation_1.Model.generatedBySequence = function generatedBySequence(model, prop) { const constr = typeof model !== "function" ? model.constructor : model; const seq = decorator_validation_1.Model.sequenceFor(constr); return !!seq.generated; }.bind(decoration_1.Metadata); decoration_1.Metadata.createdBy = function createdBy(model) { const meta = decoration_1.Metadata.get(typeof model !== "function" ? model.constructor : model, constants_1.PersistenceKeys.CREATED_BY); if (!meta) throw new db_decorators_1.InternalError(`No createdBy metadata found for model. did you use @createdBy()?`); return meta; }.bind(decoration_1.Metadata); decoration_1.Metadata.updatedBy = function updatedBy(model) { const meta = decoration_1.Metadata.get(typeof model !== "function" ? model.constructor : model, constants_1.PersistenceKeys.UPDATED_BY); if (!meta) throw new db_decorators_1.InternalError(`No updatedBy metadata found for model. did you use @updatedBy()?`); return meta; }.bind(decoration_1.Metadata); decorator_validation_1.Model.tableName = function (model) { const obj = model instanceof decorator_validation_1.Model ? decorator_validation_1.Model.get(model.constructor.name) : model; if (!obj) throw new db_decorators_1.InternalError(`Unable to find model ${model}`); const meta = decoration_1.Metadata.get(model instanceof decorator_validation_1.Model ? model.constructor : model, constants_1.PersistenceKeys.TABLE); if (meta) { return meta; } if (model instanceof decorator_validation_1.Model) { return model.constructor.name; } return model.name; }; decorator_validation_1.Model.columnName = function (model, attribute) { const metadata = decoration_1.Metadata.get(model instanceof decorator_validation_1.Model ? model.constructor : model, decoration_1.Metadata.key(constants_1.PersistenceKeys.COLUMN, attribute)); return metadata ? metadata : attribute; }; decorator_validation_1.Model.sequenceName = function (model, ...args) { return [decorator_validation_1.Model.tableName(model), ...args].join("_"); }; decorator_validation_1.Model.sequenceFor = function sequenceFor(model, property) { if (property) throw new errors_1.UnsupportedError("not currently supported"); const metadata = decorator_validation_1.Model.pkProps(model instanceof decorator_validation_1.Model ? model.constructor : model); if (!metadata) throw new db_decorators_1.InternalError("No sequence options defined for model. did you use the @pk decorator?"); return metadata; }; decorator_validation_1.Model.indexes = function indexes(model) { const indexDecorators = decoration_1.Metadata.get(model instanceof decorator_validation_1.Model ? model.constructor : model, constants_1.PersistenceKeys.INDEX); return Object.keys(indexDecorators || {}).reduce((acum, t) => { acum[t] = { [constants_1.PersistenceKeys.INDEX]: indexDecorators[t] }; return acum; }, {}); }; injectable_decorators_1.Injectables.services = function () { return decoration_1.Metadata["innerGet"](Symbol.for(constants_1.PersistenceKeys.SERVICE)); }; injectable_decorators_1.Injectables.repositories = function () { return decoration_1.Metadata["innerGet"](Symbol.for(db_decorators_1.DBKeys.REPOSITORY)); }; //# sourceMappingURL=overrides.js.map