UNPKG

@decaf-ts/core

Version:

Core persistence module for the decaf framework

62 lines 2.64 kB
"use strict"; 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