@decaf-ts/core
Version:
Core persistence module for the decaf framework
62 lines • 2.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.del = exports.update = exports.read = exports.create = void 0;
exports.service = service;
const decoration_1 = require("@decaf-ts/decoration");
const injectable_decorators_1 = require("@decaf-ts/injectable-decorators");
const index_1 = require("./../persistence/index.cjs");
const utils_1 = require("./utils.cjs");
const db_decorators_1 = require("@decaf-ts/db-decorators");
function OperationGuard(op) {
return function (target, _propertyKey, descriptor) {
const original = descriptor.value;
descriptor.value = function (...args) {
const ModelConstr = this.class;
if (ModelConstr && (0, utils_1.isOperationBlocked)(ModelConstr, op)) {
const name = ModelConstr?.name ?? "Model";
throw new Error(`Operation "${op}" is blocked by @BlockOperations for ${name}.`);
}
return original.apply(this, args);
};
return descriptor;
};
}
const create = () => OperationGuard(db_decorators_1.OperationKeys.CREATE);
exports.create = create;
const read = () => OperationGuard(db_decorators_1.OperationKeys.READ);
exports.read = read;
const update = () => OperationGuard(db_decorators_1.OperationKeys.UPDATE);
exports.update = update;
const del = () => OperationGuard(db_decorators_1.OperationKeys.DELETE);
exports.del = del;
function service(key) {
key =
typeof key === "string"
? key
: decoration_1.Metadata.Symbol(key).toString();
return function service(target, prop, descriptor) {
decoration_1.Metadata.set(index_1.PersistenceKeys.SERVICE, key, target);
const decs = [];
if (descriptor && typeof descriptor.value === "number") {
decs.push((0, injectable_decorators_1.inject)(key));
}
else if (!descriptor && !prop) {
decs.push((0, injectable_decorators_1.injectable)(key, {
callback: (inst) => Object.defineProperty(inst, "name", {
enumerable: true,
configurable: false,
writable: false,
value: key,
}),
}));
}
else if (!descriptor) {
decs.push((0, injectable_decorators_1.inject)(key));
}
else
throw new Error("Invalid decorator usage. Should be impossible");
decs.push((0, decoration_1.metadata)(index_1.PersistenceKeys.SERVICE, key));
return (0, decoration_1.apply)(...decs)(target, prop, descriptor);
};
}
//# sourceMappingURL=decorators.js.map