# All files / microservices/context exception-filters-context.ts

100% Statements 15/15
100% Branches 2/2
100% Functions 3/3
100% Lines 15/15

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    421x

    1x

    1x

    1x

    1x

    12x

    12x

    8x

    8x
    8x

    8x
    7x

    1x
    1x

    7x

     import { EXCEPTION_FILTERS_METADATA } from '@nestjs/common/constants';
    import { Controller } from '@nestjs/common/interfaces/controllers/controller.interface';
    import { isEmpty } from '@nestjs/common/utils/shared.utils';
    import { ApplicationConfig } from '@nestjs/core/application-config';
    import { BaseExceptionFilterContext } from '@nestjs/core/exceptions/base-exception-filter-context';
    import { NestContainer } from '@nestjs/core/injector/container';
    import { Observable } from 'rxjs';
    import { RpcExceptionsHandler } from '../exceptions/rpc-exceptions-handler';

    export class ExceptionFiltersContext extends BaseExceptionFilterContext {
      constructor(
        container: NestContainer,
        private readonly config: ApplicationConfig,
      ) {
        super(container);
      }

      public create(
        instance: Controller,
        callback: (data) => Observable<any>,
        module: string,
      ): RpcExceptionsHandler {
        this.moduleContext = module;

        const exceptionHandler = new RpcExceptionsHandler();
        const filters = this.createContext(
          instance,
          callback,
          EXCEPTION_FILTERS_METADATA,
        );
        if (isEmpty(filters)) {
          return exceptionHandler;
        }
        exceptionHandler.setCustomFilters(filters.reverse());
        return exceptionHandler;
      }

      public getGlobalMetadata<T extends any[]>(): T {
        return this.config.getGlobalFilters() as T;
      }
    }