Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/toss/nestjs-aop

A way to gracefully apply AOP to nestjs
https://github.com/toss/nestjs-aop

aop nest nestjs nestjs-aop typescript

Last synced: 6 days ago
JSON representation

A way to gracefully apply AOP to nestjs

Awesome Lists containing this project

README

        





Logo

@toss/nestjs-aop · npm version


A way to gracefully apply AOP to nestjs


Use nestjs managed instances in any decorators gracefully



English | [한국어](https://github.com/toss/nestjs-aop/blob/v2.x/readme_kr.md)

Table of Contents


  1. Installation

  2. Usage

  3. References

  4. Contributing

  5. License

## Installation

```sh
npm install @toss/nestjs-aop
pnpm add @toss/nestjs-aop
yarn add @toss/nestjs-aop
```

## Usage

#### 1. Import AopModule
```typescript
@Module({
imports: [
// ...
AopModule,
],
})
export class AppModule {}
```

#### 2. Create symbol for LazyDecorator
```typescript
export const CACHE_DECORATOR = Symbol('CACHE_DECORATOR');
```

#### 3. Implement LazyDecorator using nestjs provider
`metadata` is the second parameter of createDecorator.

```typescript
@Aspect(CACHE_DECORATOR)
export class CacheDecorator implements LazyDecorator {
constructor(private readonly cache: Cache) {}

wrap({ method, metadata: options }: WrapParams) {
return (...args: any) => {
let cachedValue = this.cache.get(...args);
if (!cachedValue) {
cachedValue = method(...args);
this.cache.set(cachedValue, ...args);
}
return cachedValue;
};
}
}
```

#### 4. Add LazyDecoratorImpl to providers of module
```typescript
@Module({
providers: [CacheDecorator],
})
export class CacheModule {}
```

#### 5. Create decorator that marks metadata of LazyDecorator
`options` can be obtained from the warp method and used.

```typescript
export const Cache = (options: CacheOptions) => createDecorator(CACHE_DECORATOR, options)
```

#### 6. Use it!
```typescript
export class SomeService {
@Cache({
// ...options(metadata value)
})
some() {
// ...
}
}
```

## References
- https://toss.tech/article/nestjs-custom-decorator
- https://youtu.be/VH1GTGIMHQw?t=2973

## Contributing
We welcome contribution from everyone in this project. Read [CONTRIBUTING.md](CONTRIBUTING.md) for detailed contribution guide.

## License
MIT © Viva Republica, Inc. See [LICENSE](LICENSE) for details.




Toss