# All files / common/files multer.module.ts

100% Statements 15/15
90.91% Branches 10/11
100% Functions 6/6
100% Lines 13/13

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    621x

    1x

    1x

    1x

    4x

    4x
    2x

    2x

    4x
    1x

    3x

    1x
    1x

     import { Module } from './../decorators';
    import { DynamicModule, Provider } from './../interfaces';
    import { MULTER_MODULE_OPTIONS } from './files.constants';
    import {
      MulterModuleAsyncOptions,
      MulterModuleOptions,
      MulterOptionsFactory,
    } from './interfaces/files-upload-module.interface';

    @Module({})
    export class MulterModule {
      static register(options: MulterModuleOptions = {}): DynamicModule {
        return {
          module: MulterModule,
          providers: [{ provide: MULTER_MODULE_OPTIONS, useValue: options }],
          exports: [MULTER_MODULE_OPTIONS],
        };
      }

      static registerAsync(options: MulterModuleAsyncOptions): DynamicModule {
        return {
          module: MulterModule,
          imports: options.imports,
          providers: this.createAsyncProviders(options),
          exports: [MULTER_MODULE_OPTIONS],
        };
      }

      private static createAsyncProviders(
        options: MulterModuleAsyncOptions,
      ): Provider[] {
        if (options.useExisting || options.useFactory) {
          return [this.createAsyncOptionsProvider(options)];
        }
        return [
          this.createAsyncOptionsProvider(options),
          {
            provide: options.useClass,
            useClass: options.useClass,
          },
        ];
      }

      private static createAsyncOptionsProvider(
        options: MulterModuleAsyncOptions,
      ): Provider {
        if (options.useFactory) {
          return {
            provide: MULTER_MODULE_OPTIONS,
            useFactory: options.useFactory,
            inject: options.inject || [],
          };
        }
        return {
          provide: MULTER_MODULE_OPTIONS,
          useFactory: async (optionsFactory: MulterOptionsFactory) =>
            optionsFactory.createMulterOptions(),
          inject: [options.useExisting || options.useClass],
        };
      }
    }