https://github.com/french-exception/node-config-lib
Configuration Library
https://github.com/french-exception/node-config-lib
config library nodejs
Last synced: 4 months ago
JSON representation
Configuration Library
- Host: GitHub
- URL: https://github.com/french-exception/node-config-lib
- Owner: French-Exception
- Created: 2020-01-11T17:08:10.000Z (over 6 years ago)
- Default Branch: develop
- Last Pushed: 2023-01-06T02:25:27.000Z (over 3 years ago)
- Last Synced: 2025-07-04T14:56:02.689Z (12 months ago)
- Topics: config, library, nodejs
- Language: TypeScript
- Size: 604 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://badge.fury.io/js/%40frenchex%2Fconfig-lib)
# About
Configuration Library is inspired by ```service-container2``` and ```Symfony Dependency Injection Container```
Purpose here is not to provide a full feature mapping from both libs.
# Installation
```bash
npm i --save @frenchex/config-lib
```
# Usage
## Basic JSON file structure
```typescript
export interface ConfigurationDeclarationInterface {
imports?: Array
ns?: string
$: object
}
```
Example :
```
{
"imports": ["config_%env%.json"],
"ns": "example",
"$": {
"foo": {
"bar": "foobar",
"foobar": "%foo.bar%%foo.bar%"
}
}
}
```
## Loading from File
```typescript
const loader = new ConfigurationLoader();
const request = (() => {
const requestBuilder = new ConfigurationLoaderFromFileRequestBuilder();
requestBuilder
.withFile(path.normalize(path.join(__dirname, '..', '..', 'test-res', 'js.js')))
.withRoot(path.normalize(path.join(__dirname, '..', '..', 'test-res')))
.withEnv({env: 'dev'})
return requestBuilder.build();
})();
const config: ConfigurationInterface = await loader.fromFile(request);
const foobar : string = await config.get('foo.bar'); // return Maybe.just('foobar');
```
# Usages examples (from tests)
## Usage 1
```typescript
const c = new Configuration({
$: {
foo: {
bar: 'foobar',
foobar: '%foo.bar%%foo.bar%'
}
}
});
const foobar = await c.get('foo.bar');
const foobar2 = await c.get('foo.foobar');
const foo = await c.get('foo');
expect(foobar).to.be.equal('foobar');
expect(foobar2).to.be.equal('foobarfoobar');
expect(foo).to.be.deep.equal({bar: 'foobar', foobar: 'foobarfoobar'});
```
## Usage 2
```typescript
const loader = new ConfigurationLoader();
const request = await (async () => {
const requestBuilder = new ConfigurationLoaderFromFileRequestBuilder();
requestBuilder
.withFile(path.normalize(path.join(__dirname, '..', '..', 'test-res', 'js.js')))
.withRoot(path.normalize(path.join(__dirname, '..', '..', 'test-res')))
.withEnv({env: 'dev'})
const request = await requestBuilder.build();
return request;
})();
const config: ConfigurationInterface = await loader.fromFile(request);
const foobar = await config.get('foo.bar');
const foobar2 = await config.get('foo.foobar');
const foo = await config.get('foo');
const promise = await config.get('promise');
expect(foobar).to.be.equal('foobar');
expect(foobar2).to.be.equal('foobarfoobar');
expect(foo).to.be.deep.equal({bar: 'foobar', foobar: 'foobarfoobar'});
expect(promise).to.be.deep.equal('resolved');
```