UNPKG

ts-aspect

Version:

Simplistic library for Aspect Oriented Programming in TypeScript

41 lines (40 loc) 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addAspect = void 0; const util_1 = require("util"); const proxyFunc_1 = require("./proxyFunc"); const TsAspectProperty_1 = require("./TsAspectProperty"); function addAspect(target, methodName, advice, aspect) { var _a; let tsAspectProp = (0, TsAspectProperty_1.getTsAspectProp)(target); if (!tsAspectProp) { tsAspectProp = {}; (0, TsAspectProperty_1.setTsAspectProp)(target, tsAspectProp); } if (!tsAspectProp[methodName]) { const originalMethod = Reflect.get(target, methodName); tsAspectProp[methodName] = { originalMethod, adviceAspectMap: new Map(), }; const wrapperFunc = function (...args) { const tsAspectProp = (0, TsAspectProperty_1.getTsAspectProp)(target); if (tsAspectProp) { if (util_1.types.isAsyncFunction(originalMethod)) { return (0, proxyFunc_1.asyncProxyFunc)(target, methodName, tsAspectProp[methodName], ...args); } else { return (0, proxyFunc_1.proxyFunc)(target, methodName, tsAspectProp[methodName], ...args); } } return originalMethod(...args); }; Reflect.set(target, methodName, wrapperFunc); } const { adviceAspectMap } = tsAspectProp[methodName]; if (!adviceAspectMap.has(advice)) { adviceAspectMap.set(advice, []); } (_a = adviceAspectMap.get(advice)) === null || _a === void 0 ? void 0 : _a.push(aspect); } exports.addAspect = addAspect;