@qiwi/nestjs-enterprise-config v5.2.2
@qiwi/nestjs-enterprise-config
Nestjs module for processing uniconfig-based configs.
Installation
yarn add @qiwi/nestjs-enterprise-configConfiguration
Static import
import { Module } from '@nestjs/common'
import { ConfigModule } from "@qiwi/nestjs-enterprise-config"
@Module({
imports: [
ConfigModule,
// and so on
],
})
export class AppModule {}Import as dynamic module.
@Module({
imports: [
ConfigModule.register({
// Absolute or relative path to the config file
path: '/custom/config/path.json'
// use <root> or <cwd> tag to form the path.
// path: '<root>/custom/config/path.json'
}),
]
})
export class AppModule {}Validation
Module looks for app config json schema in ${process.cwd()}/config/app.config.schema.json and validates output of uniconfig pipeline.
If file is absent, then no validation is performed.
You can specify path to app config schema via opts.schemaPath in ConfigModule.register
app.config.schema.json example:
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"local": {
"type": "string"
},
"server": {
"type": "object",
"properties": {
"port": {
"type": "number"
},
"host": {
"type": "string"
}
},
"required": [
"port",
"host"
]
},
"logger": {
"type": "object",
"properties": {
"level": {
"type": "string"
}
},
"required": [
"level"
]
}
},
"required": [
"name",
"server",
"logger"
]
}You can also write schema for config file, for example in config.schema.json:
{
"properties": {
"data": {
"$ref": "./app.config.schema.json"
},
"$schema": {
"type": "string"
}
},
"required": ["data"],
"additionalProperties": {
"sources": {
"type": "object"
}
}
}And reference it in your config file to enable IDE suggestions and error highlighting:
{
"$schema": "./config.schema.json",
"data": {
"name": "jslab-gen-api",
"local": "$env:LOCAL",
"server": {
"port": 8080,
"host": "$host:"
},
"logger": {
"level": "debug"
}
},
"sources": {
"env": {
"pipeline": "env"
},
"host": {
"pipeline": "ip"
}
}
}Usage
@Injectable()
export class MyService {
constructor(@Inject('IConfigService') config: IConfigService) {}
myMethod() {
return this.config.get('name')
}
}Uniconfig plugins
api-file
read json file
{
"data": {
"test": "$testFile:"
},
"sources": {
"testFile": {
"data": ["config/ci.json"],
"pipeline": "file>json"
}
}
}api-http
read json from url
{
"data": {
"test": "$testWeb:"
},
"sources": {
"testWeb": {
"data": "URL",
"pipeline": "http>json"
}
}
}argv
read args
{
"data": {
"param": "$test:"
},
"sources": {
"test": {
"pipeline": "argv"
}
}
}//node target/es6/main --foo=bar
config.get('param') // { _: [], foo: 'bar', '$0': 'target/es6/main' }datatree
{
"data": {
"test": "$test1:"
},
"sources": {
"test1": {
"data": {
"test.test": "test1",
"test.foo": {
"bar":"baz"
}
}
}
}
}config.get('test') // { 'test.test': 'test1', 'test.foo': { bar: 'baz' } }dot
use doT template
{
"data": {
"test": "$test1:"
},
"sources": {
"test1": {
"data": {
"data": {
"data": {
"foo": "FOO",
"baz": "BAZ"
},
"template": "{{=it.foo}}-bar-{{=it.baz}}"
}
},
"pipeline": "datatree>dot"
}
}
}config.get('test') // FOO-bar-BAZenv
read ENV variables
{
"data": {
"test": "$env:LOCAL"
},
"sources": {
"env": {
"pipeline": "env"
}
}
}//LOCAL=true node target/es6/main
config.get('test') // trueip
IP/host resolver
{
"data": {
"test": "$host:"
},
"sources": {
"host": {
"pipeline": "ip"
}
}
}config.get('test') // 192.168.3.5pkg
read package.json
{
"data": {
"test": "$pkg:"
},
"sources": {
"pkg": {
"pipeline": "pkg"
}
}
}config.get('test') // { name: '', version: '0.0.0', description: '' ...etc }ConfigService tries to read config file from <cwd>/config/${process.env.ENVIRONMENT_PROFILE_NAME}.json.
If it does not exist, then module will read from <cwd>/config/kube.json (DEFAULT_KUBE_CONFIG_PATH).
If process.env.LOCAL is truthy, then service will read from <cwd>/config/local.json (DEFAULT_LOCAL_CONFIG_PATH).
API
Class ConfigModule
Exports ConfigService with token IConfigService
static register (opts?: { path?: string, schemaPath?: string }): DynamicModule
opts.path path to config file
opts.schemaPath path to app config schema (config.data)
Function resolveConfigPath
resolveConfigPath (path?: string, local?: boolean, env?: string): string
DEFAULT_KUBE_CONFIG_PATH
<cwd>/config/kube.json
DEFAULT_LOCAL_CONFIG_PATH
<cwd>/config/local.json
Docs
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago