https://github.com/labd/node-enviconf
Node.js package for reading environment variables
https://github.com/labd/node-enviconf
Last synced: 3 months ago
JSON representation
Node.js package for reading environment variables
- Host: GitHub
- URL: https://github.com/labd/node-enviconf
- Owner: labd
- License: mit
- Created: 2023-06-02T05:30:31.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-01-08T16:18:51.000Z (over 1 year ago)
- Last Synced: 2025-01-08T17:37:50.253Z (over 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 177 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# @labdigital/enviconf
A simple configuration library that loads configuration from environment
variables and provides a simple interface to access them.
Inspired by https://github.com/caarlos0/env
## Example
### Without decorators
```ts
import { BaseConfig, EnviConfig, envfield } from "@labdigital/enviconf";
class SampleConfig extends BaseConfig {
/** The port number to listen on */
readonly HTTP_PORT: number = 4000
config(): EnviConfig {
return {
HTTP_PORT: envfield.number({
// optional, defaults to false. Sets empty value if no env variable is set
optional: true,
// optional, defaults to false. Unsets the env variable after reading
unset: true,
// optional, env variable to read the value from, defaults to the property name
envName: "MY_HTTP_PORT",
// optional, defaults to undefined. Allows setting a custom validator, should
// throw an error if the value is invalid
validator: (value: number) => value > 0,
}),
}
}
}
const config = SampleConfig.load()
config.HTTP_PORT === 4000
```
### With decorators
```ts
import { BaseConfig, envprop } from "@labdigital/enviconf";
class SampleConfig extends BaseConfig {
@envprop.string()
public readonly MY_STRING_VARIABLE: string = "default value";
@envprop.number()
public readonly MY_NUMBER_VARIABLE: number = 123;
// Read JSON values
@envprop.object()
public readonly MY_OBJECT_VALUE: object = { foo: "bar" };
@envprop.number({
// optional, defaults to false. Sets empty value if no env variable is set
optional: true,
// optional, defaults to false. Unsets the env variable after reading
unset: true,
// optional, env variable to read the value from, defaults to the property name
envName: "MY_OTHER_ENV_VARIABLE",
// optional, defaults to ", ". Allows setting a custom separator for array values
envSeparator: ", ",
// optional, defaults to undefined. Allows setting a custom validator, should
// throw an error if the value is invalid
validator: (value: number) => value > 0,
})
public readonly ALL_OPTIONS: number = 123;
}
const config = SampleConfig.load({
// optional, path to the .env values, defaults to ".env"
path: ".env",
// optional, indicates if a .env file should be read, defaults to true
loadEnv: true,
// optional, if set, will be used as prefix for all env variables while
// falling back to the original name if the prefixed variable is not set
envPrefix: "MY_APP_",
})
```