36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { DynamicModule, Global } from '@nestjs/common';
|
|
|
|
import { LambdaDriver } from 'src/engine/integrations/serverless/drivers/lambda.driver';
|
|
import { LocalDriver } from 'src/engine/integrations/serverless/drivers/local.driver';
|
|
import { BuildDirectoryManagerService } from 'src/engine/integrations/serverless/drivers/services/build-directory-manager.service';
|
|
import { SERVERLESS_DRIVER } from 'src/engine/integrations/serverless/serverless.constants';
|
|
import {
|
|
ServerlessDriverType,
|
|
ServerlessModuleAsyncOptions,
|
|
} from 'src/engine/integrations/serverless/serverless.interface';
|
|
import { ServerlessService } from 'src/engine/integrations/serverless/serverless.service';
|
|
|
|
@Global()
|
|
export class ServerlessModule {
|
|
static forRootAsync(options: ServerlessModuleAsyncOptions): DynamicModule {
|
|
const provider = {
|
|
provide: SERVERLESS_DRIVER,
|
|
useFactory: async (...args: any[]) => {
|
|
const config = await options.useFactory(...args);
|
|
|
|
return config?.type === ServerlessDriverType.Local
|
|
? new LocalDriver(config.options)
|
|
: new LambdaDriver(config.options);
|
|
},
|
|
inject: options.inject || [],
|
|
};
|
|
|
|
return {
|
|
module: ServerlessModule,
|
|
imports: options.imports || [],
|
|
providers: [ServerlessService, BuildDirectoryManagerService, provider],
|
|
exports: [ServerlessService],
|
|
};
|
|
}
|
|
}
|