@toss/nestjs-aop
Version:
<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/toss/nestjs-aop"> <img src="https://toss.tech/wp-content/uploads/2022/11/tech-article-nest-js-02.png" alt="Logo" height="200"> </a>
48 lines (39 loc) • 1.28 kB
text/typescript
import { Aspect } from '../../aspect';
import { createDecorator } from '../../create-decorator';
import { LazyDecorator, WrapParams } from '../../lazy-decorator';
export const AOP_TESTING = Symbol('AOP_TESTING');
type AopTestingOptions = {
callback?: (params: {
args: any[];
wrapParams: WrapParams<any, AopTestingOptions>;
dependencies: any[][];
}) => unknown;
wrapCallback?: (
params: WrapParams<any, AopTestingOptions>,
self: AopTestingDecorator,
// eslint-disable-next-line @typescript-eslint/ban-types
) => void;
};
export const AopTesting = (options: AopTestingOptions) => createDecorator(AOP_TESTING, options);
(AOP_TESTING)
export class AopTestingDecorator implements LazyDecorator {
private readonly dependencies: any[];
constructor(...dependencies: any[]) {
this.dependencies = dependencies;
}
wrap(params: WrapParams<any, AopTestingOptions>) {
if (params.metadata.wrapCallback) {
params.metadata.wrapCallback(params, this);
}
return (...args: any[]) => {
if (params.metadata.callback) {
return params.metadata.callback({
args,
wrapParams: params,
dependencies: this.dependencies,
});
}
return params.method(...args);
};
}
}