# All files / common/decorators/core optional.decorator.ts

100% Statements 10/10
100% Branches 6/6
100% Functions 2/2
100% Lines 10/10

    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
    291x

    1x

    1x
    13x
    13x
    12x
    12x
    12x

    1x

    1x

     import {
      OPTIONAL_DEPS_METADATA,
      OPTIONAL_PROPERTY_DEPS_METADATA,
    } from '../../constants';
    import { isUndefined } from '../../utils/shared.utils';

    /**
     * Sets dependency as an optional one.
     */
    export function Optional() {
      return (target: Object, key: string | symbol, index?: number) => {
        if (!isUndefined(index)) {
          const args = Reflect.getMetadata(OPTIONAL_DEPS_METADATA, target) || [];
          Reflect.defineMetadata(OPTIONAL_DEPS_METADATA, [...args, index], target);
          return;
        }
        const properties =
          Reflect.getMetadata(
            OPTIONAL_PROPERTY_DEPS_METADATA,
            target.constructor,
          ) || [];
        Reflect.defineMetadata(
          OPTIONAL_PROPERTY_DEPS_METADATA,
          [...properties, key],
          target.constructor,
        );
      };
    }