https://github.com/umbrellio/cofman
Node.js configuration engine
https://github.com/umbrellio/cofman
Last synced: about 1 year ago
JSON representation
Node.js configuration engine
- Host: GitHub
- URL: https://github.com/umbrellio/cofman
- Owner: umbrellio
- Created: 2021-06-16T15:41:32.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-06-16T16:52:52.000Z (about 5 years ago)
- Last Synced: 2025-05-06T19:27:34.854Z (about 1 year ago)
- Language: JavaScript
- Size: 72.3 KB
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Cofman
[](https://coveralls.io/github/umbrellio/cofman?branch=master)
[](https://github.com/umbrellio/cofman)
Node.js configuration engine
```js
const { Cofman, FileSource, EnvSourc, ObjectSource } = require("@umbrellio/cofman")
const instance = new Cofman()
instance.use(new FileSource({ path: "/path/to/file.yml" }))
instance.use(new FileSource({ path: "/path/to/file.json" }))
instance.use(new ObjectSource({ custom: "value" }))
instance.use(new EnvSource({ prefix: "APP" }))
const config = instance.parse()
config.get("database.url")
```
## Install
```sh
$ yarn add @umbrellio/cofman
```
## Usage
```js
const instance = new Cofman()
```
**Methods**
- `.use(source)` – setup a config source (see [sources](#sources) docs)
- `.parse()` – parse sources and return [`Config`](#config-object) object
### Config object
**Methods**
- `.get(key: string, default: any)` – returns a value by corresponding key or default value
`key` can be nested by using `.` . For example – `database.password`
- `.asObject()` – returns config as a plain object
## Sources
Cofman supports multiple sources for getting values in different ways.
- [EnvSource](#envsource)
- [FileSource](#filesource)
- [ObjectSource](#objectsource)
### EnvSource
Get values from env variables. All keys becomes camelCase.
```js
new EnvSource(options)
```
**Options**
- `prefix: string` (optional, default: `""`) – prefix for filtering env vars
eg. if `prefix: "APP"` cofman will only get vars starts with `APP_` (`APP_DATABASE_URL`, `APP_NAME`, etc.)
- `tryParse: boolean` (optional, default: `true`) – try to parse value as a json
- `nestingDelitemer: string` (optional, default: `__`) – delimeter for getting nesting values
eg. `SOME__NESTING_VALUE=1` becomes `some: { nestingValue: 1 }`
### FileSource
Reads config from `json` and `yaml` files.
```js
new FileSource(options)
```
**Options**
- `path: string` (required) – path to config file
- `parser: Parser` (optional, determinites by file extension) – parser to use for this file content
- `failMissing: boolean` (optional, default: `false`) – fail when file missing or not
You can use custom file parsers using following interface:
```ts
interface Parser {
extensions: string[] // supported file extensions
parse(content: string): Object // takes file content and returns parsed object
}
```
### ObjectSource
Just your custom object
```js
new ObjectSource(object)
```
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/umbrellio/cofman.
## License
Released under MIT License.
## Authors
Created by [Aleksei Bespalov](https://github.com/nulldef).