@qte/nest-config
A module for advanced configurations in Nest, supporting YAML, Env values, and Google Secret Manager secrets.
The module aims to provide flexibility, while also providing a great deal of safety. One of the guiding principles is to fail fast. The module will throw early errors crashing the application if anything goes wrong.
Installation
$ yarn add @qte/nest-config
Note that zod
is a peer-dependency and must be installed separately.
Quick start
Import and configure the module in the following way
import { ConfigModule, ConfigService, DEVELOPMENT } from '@qte/nest-config'
import { z } from 'zod'
const mySchema = z.object({
port: z.number()
}).strict()
type Config = z.infer<typeof mySchema>
ConfigModule.forRoot({
env: DEVELOPMENT,
schema: mySchema,
configPath: './config'
})
const myConfig = ConfigService.getConfig<Config>()
You must create the following files
touch ./config/index.yaml
touch ./config/env.development.yaml
touch ./config/env.staging.yaml
touch ./config/env.production.yaml
The final configuration is built from first parsing index.yaml
, then merging it with the environment specific configuration.
Duplicate keys
Duplicate object keys are merged recursively, while all other duplicates are overriden, and the environment configuration is prioritised.
database:
user: postgres
password: development
database:
password: super-secret-prod-password
Merges to
const config = {
database: {
user: 'postgres',
password: 'super-secret-prod-password',
}
}
Env and Secrets
Configuration files can contain ENV
values and Google Secrets Manager secrets. See examples below
database:
host:
$from:
env: DATABASE_ENV
password:
$from:
secret: projects/some-gcp-project/secrets/some-secret/versions/latest
the parsed configuration will match the following schema
z.object({
database: z.object({
host: z.string(),
password: z.string(),
}),
})
Cache
The package caches secrets in development mode. Clear the cache by running
rm -rf $TMPDIR/nest-config
You can also disable caching by setting cache: false
in the module options
License
@qte/nest-config is MIT licensed.