-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconfiguration.module.ts
More file actions
38 lines (35 loc) · 1.1 KB
/
configuration.module.ts
File metadata and controls
38 lines (35 loc) · 1.1 KB
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
import { DynamicModule, Module } from '@nestjs/common';
import { ConfigModule, ConfigModuleOptions, ConfigService } from '@nestjs/config';
import { ConfigurationFactory } from './configuration.factory';
const getNodeEnv = (): string => process.env.NODE_ENV ?? 'development';
const envFilesHighestPriorityFirst = ['.env', `.env.${getNodeEnv()}`];
const loadEnvConfigInOrder = (): ConfigModuleOptions => {
return {
cache: true,
envFilePath: envFilesHighestPriorityFirst,
};
};
@Module({})
export class ConfigurationModule {
public static register<T extends object>(
configInjectionToken: string,
configConstructor: new () => T
): DynamicModule {
return {
imports: [ConfigModule.forRoot(loadEnvConfigInOrder())],
providers: [
{
provide: configInjectionToken,
useFactory: (configService: ConfigService): T => {
const factory = new ConfigurationFactory(configService);
const config = factory.loadAndValidateConfigs(configConstructor);
return config;
},
inject: [ConfigService],
},
],
exports: [configInjectionToken],
module: ConfigurationModule,
};
}
}