@bluealba/config-manager-nestjs
v0.2.0-develop-500
Published
NestJS wrapper for @bluealba/config-manager-core: ConfigManagerModule (forRoot/forRootAsync), ConfigManagerService, @ConfigValue decorator and a health helper
Readme
@bluealba/config-manager-nestjs
NestJS wrapper for @bluealba/config-manager-core. Registers a global
ConfigManager (owning its lifecycle), and exposes an injectable service, a @ConfigValue param
decorator and a health helper.
Installation
npm install @bluealba/config-manager-nestjs @bluealba/config-manager-core@nestjs/common and @nestjs/core are peer dependencies (NestJS 11).
Usage
Register the module once. It builds the manager from the options you give it, calls init() on module
init and dispose() on shutdown. The module is @Global, so ConfigManagerService is injectable
everywhere.
import { Module } from '@nestjs/common';
import { ConfigManagerModule } from '@bluealba/config-manager-nestjs';
import { httpProvider, pollingTransport } from '@bluealba/config-manager-core';
import { fileFallback } from '@bluealba/config-manager-core/node';
@Module({
imports: [
ConfigManagerModule.forRoot({
providers: [httpProvider({ url: process.env.CONFIG_URL! })],
transport: pollingTransport({ intervalMs: 30_000 }),
fallback: fileFallback({ path: '/var/cache/app/config.json' }),
}),
],
})
export class AppModule {}Async registration (inject dependencies)
ConfigManagerModule.forRootAsync({
imports: [SomeConfigModule],
inject: [SomeConfigService],
useFactory: (cfg: SomeConfigService) => ({
providers: [httpProvider({ url: cfg.configUrl })],
}),
});Reading config
import { Injectable } from '@nestjs/common';
import { ConfigManagerService } from '@bluealba/config-manager-nestjs';
@Injectable()
export class MyService {
constructor(private readonly config: ConfigManagerService) {}
title() {
return this.config.get<string>('feature.title', 'Default');
}
}@ConfigValue param decorator
Inject a value straight into a route handler. (Backed by a global interceptor that attaches the service to the request.)
import { Controller, Get } from '@nestjs/common';
import { ConfigValue } from '@bluealba/config-manager-nestjs';
@Controller()
export class MyController {
@Get('title')
title(@ConfigValue('feature.title') title: string) {
return { title };
}
}Health
ConfigManagerService.getHealth() returns a /health-friendly shape:
@Get('health')
health() {
return { ...this.config.getHealth() }; // { healthy: 'ok' | 'degraded', degraded, activeSource, ... }
}API
| Export | Description |
|--------|-------------|
| ConfigManagerModule.forRoot(options) / .forRootAsync({ useFactory, inject, imports }) | Global dynamic module; builds + owns the manager. |
| ConfigManagerService | Injectable delegator: get / getAll / getEntry / getStatus / onKeyChange / refresh / getManager / getHealth. |
| @ConfigValue(key) | Param decorator injecting a config value into a handler. |
| ConfigManagerInterceptor | Global interceptor (registered by the module) that exposes config to the decorator. |
| CONFIG_MANAGER | DI token for the raw ConfigManager. |
Notes
- Built with
tsc(CommonJS) withemitDecoratorMetadata, matching the platform's other NestJS libraries — Nest DI depends on reliable decorator metadata. @nestjs/*stay peers;reflect-metadata/rxjsare inherited from the host app.
License
PolyForm-Noncommercial-1.0.0 · Blue Alba
