import { CallHandler, ExecutionContext, Injectable, NestInterceptor, } from '@nestjs/common'; import { map, Observable } from 'rxjs'; import { Reflector } from '@nestjs/core'; import { SKIP_TRANSFORM_KEY } from '../decorators/skip-transform.decorator'; export interface Response { data: T; } @Injectable() export class TransformHttpResponseInterceptor implements NestInterceptor> { constructor(private reflector: Reflector) {} intercept( context: ExecutionContext, next: CallHandler, ): Observable | any> { const skipTransform = this.reflector.get( SKIP_TRANSFORM_KEY, context.getHandler(), ); if (skipTransform) { return next.handle(); } return next.handle().pipe( map((data) => { const status = context.switchToHttp().getResponse().statusCode; return { data, success: true, status }; }), ); } }