Library for Aspect Oriented Programming in TypeScript
npm install @caiofeiertag/aspectts@caiofeiertag/aspectts``javascript
import AspectTS, {
IAspect,
IMetadata,
IPointcuts,
} from "@caiofeiertag/aspectts";
class LogAspect implements IAspect {
pointcuts: IPointcuts = {
joinpointType: "MethodCall",
className: [],
methodOrProperty: [],
};
before(metadata: IMetadata): void {
console.log(
Chamou '${metadata.methodName}' da '${metadata.className}' com: ${metadata.arguments}Retornou ${metadata.result} após chamar '${metadata.methodName}' da '${metadata.className}'
);
}
after(metadata: IMetadata): void {
console.log(
);
}
}
class Math {
add(a: number, b: number): number {
return a + b;
}
divide(a: number, b: number): number {
if (b === 0) {
throw new Error("Erro ao tentar dividir por zero");
}
return a / b;
}
}
AspectTS.registerAspects([new LogAspect()]);
AspectTS.registerTargets([Math]);
const math = new Math();
math.add(1, 1);
math.divide(2, 1);
// Result:
// Chamou 'add' da 'Math' com: 1,1
// Retornou 2 após chamar 'add' da 'Math'
// Chamou 'divide' da 'Math' com: 2,1
// Retornou 2 após chamar 'divide' da 'Math'
``