# All files / common/decorators/core use-interceptors.decorator.ts

100% Statements 15/15
80% Branches 4/5
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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    511x

    1x
    1x
    1x

    1x

    3x
    3x
    4x

    3x
    1x

    1x

    1x

    2x

    2x
    2x

     import { INTERCEPTORS_METADATA } from '../../constants';
    import { NestInterceptor } from '../../interfaces';
    import { extendArrayMetadata } from '../../utils/extend-metadata.util';
    import { isFunction } from '../../utils/shared.utils';
    import { validateEach } from '../../utils/validate-each.util';

    /**
     * Binds interceptors to the particular context.
     * When the `@UseInterceptors()` is used on the controller level:
     * - Interceptor will be register to each handler (every method)
     *
     * When the `@UseInterceptors()` is used on the handle level:
     * - Interceptor will be registered only to specified method
     *
     * @param  {} ...interceptors
     */
    export function UseInterceptors(
      ...interceptors: (NestInterceptor | Function)[]
    ) {
      return (target: any, key?, descriptor?) => {
        const isValidInterceptor = interceptor =>
          interceptor &&
          (isFunction(interceptor) || isFunction(interceptor.intercept));

        if (descriptor) {
          validateEach(
            target.constructor,
            interceptors,
            isValidInterceptor,
            '@UseInterceptors',
            'interceptor',
          );
          extendArrayMetadata(
            INTERCEPTORS_METADATA,
            interceptors,
            descriptor.value,
          );
          return descriptor;
        }
        validateEach(
          target,
          interceptors,
          isValidInterceptor,
          '@UseInterceptors',
          'interceptor',
        );
        extendArrayMetadata(INTERCEPTORS_METADATA, interceptors, target);
        return target;
      };
    }