UNPKG

ts-aspect

Version:

Simplistic library for Aspect Oriented Programming in TypeScript

48 lines (47 loc) 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UseAspect = void 0; const util_1 = require("util"); const proxyFunc_1 = require("../proxyFunc"); const TsAspectProperty_1 = require("../TsAspectProperty"); function UseAspect(advice, aspect) { return function (target, propertyKey, descriptor) { var _a, _b; let tsAspectProp = (0, TsAspectProperty_1.getTsAspectProp)(target); if (!tsAspectProp) { tsAspectProp = {}; (0, TsAspectProperty_1.setTsAspectProp)(target, tsAspectProp); } const propertyKeyString = propertyKey.toString(); if (!tsAspectProp[propertyKeyString]) { const originalMethod = descriptor.value; tsAspectProp[propertyKeyString] = { originalMethod, adviceAspectMap: new Map(), }; descriptor.value = function (...args) { const tsAspectProp = (0, TsAspectProperty_1.getTsAspectProp)(target); if (tsAspectProp) { if (util_1.types.isAsyncFunction(originalMethod)) { return (0, proxyFunc_1.asyncProxyFunc)(this, propertyKeyString, tsAspectProp[propertyKeyString], ...args); } else { return (0, proxyFunc_1.proxyFunc)(this, propertyKeyString, tsAspectProp[propertyKeyString], ...args); } } return originalMethod(...args); }; } const { adviceAspectMap } = tsAspectProp[propertyKeyString]; if (!adviceAspectMap.has(advice)) { adviceAspectMap.set(advice, []); } if (typeof aspect === 'function') { (_a = adviceAspectMap.get(advice)) === null || _a === void 0 ? void 0 : _a.push(new aspect()); } else { (_b = adviceAspectMap.get(advice)) === null || _b === void 0 ? void 0 : _b.push(aspect); } }; } exports.UseAspect = UseAspect;