@unifig/nest
Advanced tools
Weekly downloads
Changelog
Readme
Utilizes Nest's DI system to manage configurations.
npm i @unifig/core @unifig/nest
# or
yarn add @unifig/core @unifig/nest
// main.ts
import { NestFactory } from '@nestjs/core';
import { Config, PlainConfigAdapter } from '@unifig/core';
async function bootstrap() {
await Config.register({
template: AppSettings,
adapter: new PlainConfigAdapter({ port: 3000, helloMessage: 'hello world' }),
});
const { AppModule } = await import('./app.module');
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
// app.module.ts
@Module({
imports: [ConfigModule.forRoot({ default: AppSettings })],
providers: [AppService],
})
export class AppModule {}
After above setup configs containers are available to be injected by using
// app.service.ts
@Injectable()
export class AppService {
constructor(@InjectConfig() private config: IConfigContainer<AppSettings>) {}
sayHello() {
return this.config.values.helloMessage;
}
}
Configurations need to be loaded before AppModule
import in case of using global Config
manager instance to configure application outside of Nest's DI.
An example would be task scheduling. Decorator @Cron('45 * * * * *')
is being called at the moment of containing file import and needs the config to be already loaded.
// main.ts
...
await Config.register({
templates: [AppSettings, AuthSettings, FilesStorageSettings],
adapter: new PlainConfigAdapter({ ... }),
});
...
// app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
templates: [AuthSettings, FilesStorageSettings],
default: AppSettings,
}),
],
providers: [AppService],
})
export class AppModule {}
// app.service.ts
@Injectable()
export class AppService {
constructor(
@InjectConfig() private appSettings: IConfigContainer<AppSettings>,
@InjectConfig(AuthSettings) private authSettings: IConfigContainer<AnotherAppSettings>
) {}
}
In addition to globally-accessible, configs can be injected with module scope.
// cats.module.ts
@Module({
imports: [ConfigModule.forFeature(CatsConfig, CatsAuthSettings)],
providers: [CatsService],
})
export class CatsModule {}
// cats.service.ts
@Injectable()
export class CatsService {
constructor(@InjectConfig(CatsConfig) private catsConfig: IConfigContainer<CatsConfig>) {}
}
This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
Unifig module for Nest
The npm package @unifig/nest receives a total of 952 weekly downloads. As such, @unifig/nest popularity was classified as not popular.
We found that @unifig/nest demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.