@decaf-ts/core
Version:
Core persistence module for the decaf framework
121 lines • 6.76 kB
JavaScript
;
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