mirror of
https://github.com/nestjs/nest.git
synced 2026-02-21 15:08:37 +00:00
78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import { DynamicModule, Module, Provider } from '@nestjs/common';
|
|
import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util';
|
|
import { MULTER_MODULE_OPTIONS } from './files.constants';
|
|
import {
|
|
MulterModuleAsyncOptions,
|
|
MulterModuleOptions,
|
|
MulterOptionsFactory,
|
|
} from './interfaces/files-upload-module.interface';
|
|
import { MULTER_MODULE_ID } from './multer.constants';
|
|
|
|
/**
|
|
* @publicApi
|
|
*/
|
|
@Module({})
|
|
export class MulterModule {
|
|
static register(options: MulterModuleOptions = {}): DynamicModule {
|
|
return {
|
|
module: MulterModule,
|
|
providers: [
|
|
{ provide: MULTER_MODULE_OPTIONS, useFactory: () => options },
|
|
{
|
|
provide: MULTER_MODULE_ID,
|
|
useValue: randomStringGenerator(),
|
|
},
|
|
],
|
|
exports: [MULTER_MODULE_OPTIONS],
|
|
};
|
|
}
|
|
|
|
static registerAsync(options: MulterModuleAsyncOptions): DynamicModule {
|
|
return {
|
|
module: MulterModule,
|
|
imports: options.imports,
|
|
providers: [
|
|
...this.createAsyncProviders(options),
|
|
{
|
|
provide: MULTER_MODULE_ID,
|
|
useValue: randomStringGenerator(),
|
|
},
|
|
],
|
|
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!],
|
|
};
|
|
}
|
|
}
|