@chelseaapps/zoom documentation

  1. Modules

  2. ZoomModule

dependenciesLegend Declarations Module Bootstrap Providers Exportscluster_ZoomModulecluster_ZoomModule_exportscluster_ZoomModule_providersZoomServiceZoomServiceZoomModuleZoomModuleZoomModule->ZoomServiceZoomServiceZoomServiceZoomService->ZoomModule

import { Module, DynamicModule, Provider, Global, HttpModule } from '@nestjs/common';
import { ZoomService } from './zoom.service';
import { ZOOM_OPTIONS } from './constants';
import { ZoomOptions, ZoomAsyncOptions, ZoomOptionsFactory } from './interfaces';
import { createZoomProviders } from './zoom.providers';

@Global()
@Module({
    imports: [HttpModule],
    providers: [ZoomService],
    exports: [ZoomService],
})
export class ZoomModule {
    /**
     * Registers a configured Zoom Module for import into the current module
     */
    public static register(options: ZoomOptions): DynamicModule {
        return {
            module: ZoomModule,
            providers: createZoomProviders(options),
        };
    }

    /**
     * Registers a configured Zoom Module for import into the current module
     * using dynamic options (factory, etc)
     */
    public static registerAsync(options: ZoomAsyncOptions): DynamicModule {
        return {
            module: ZoomModule,
            providers: [...this.createProviders(options)],
        };
    }

    private static createProviders(options: ZoomAsyncOptions): Provider[] {
        if (options.useExisting || options.useFactory) {
            return [this.createOptionsProvider(options)];
        }

        return [
            this.createOptionsProvider(options),
            {
                provide: options.useClass,
                useClass: options.useClass,
            },
        ];
    }

    private static createOptionsProvider(options: ZoomAsyncOptions): Provider {
        if (options.useFactory) {
            return {
                provide: ZOOM_OPTIONS,
                useFactory: options.useFactory,
                inject: options.inject || [],
            };
        }

        // For useExisting...
        return {
            provide: ZOOM_OPTIONS,
            useFactory: async (optionsFactory: ZoomOptionsFactory) => await optionsFactory.createZoomOptions(),
            inject: [options.useExisting || options.useClass],
        };
    }
}

Was this helpful?