@hapiness/config

Configuration Library to use it inside Hapiness framework

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@hapiness/config
001.2.16 years ago7 years agoMinified + gzip package size for @hapiness/config in KB

Readme

Hapiness
<a href="https://travis-ci.org/hapinessjs/config.svg?branch=master">
    <img src="https://travis-ci.org/hapinessjs/config.svg?branch=master" alt="build" />
</a>
<a href="https://coveralls.io/github/hapinessjs/config?branch=master">
    <img src="https://coveralls.io/repos/github/hapinessjs/config/badge.svg?branch=master" alt="coveralls" />
</a>
<a href="https://david-dm.org/hapinessjs/config">
    <img src="https://david-dm.org/hapinessjs/config.svg" alt="dependencies" />
</a>
<a href="https://david-dm.org/hapinessjs/config?type=dev">
    <img src="https://david-dm.org/hapinessjs/config/dev-status.svg" alt="devDependencies" />
</a>
<a href="https://www.typescriptlang.org/docs/tutorial.html">
    <img src="https://cdn-images-1.medium.com/max/800/1*8lKzkDJVWuVbqumysxMRYw.png"
         align="right" alt="Typescript logo" width="50" height="50" style="border:none;" />
</a>
<a href="http://reactivex.io/rxjs">
    <img src="http://reactivex.io/assets/Rx_Logo_S.png"
         align="right" alt="ReactiveX logo" width="50" height="50" style="border:none;" />
</a>
<a href="http://hapijs.com">
    <img src="http://bit.ly/2lYPYPw"
         align="right" alt="Hapijs logo" width="75" style="border:none;" />
</a>
Hapiness Config
Configuration module based on node-config & js-yaml libraries.

Table of contents

* [Yarn or NPM it in your package.json](#yarn-or-npm-it-in-your-packagejson)
* [Standalone](#standalone)
* [Hapiness](#hapiness)

Using config module

yarn or npm it in your package.json

$ npm install --save @h@hapiness/config

or

$ yarn add @hapiness/config

"dependencies": {
    "@hapiness/config": "^1.2.1",
    //...
}
//...

Standalone

./config/default.yml:
my:
    config: test

Node.js Script:
import { Config } from '@hapiness/config';

if (Config.has('my.config')) {
    console.log(Config.get('my.config')); // output: 'test'
}

Hapiness

./config/default.yml:
external_service:
    baseUrl: 'test'

mymodule_database:
    provider: postgresql
    hostname: localhost
    user: pguser
    password: keyboard cat

Hapiness module:
// external-module.ts
  import {
    HapinessModule,
    CoreModuleWithProviders,
    InjectionToken,
    Inject,
    Optional,
  } from '@hapiness/core';

  import { ConfigHelper, ConfigInterface } from '@hapiness/config';

    @HapinessModule({
        ...
    })

    export class ExternalModule {
        static setConfig(config: ConfigInterface): CoreModuleWithProviders {
            return {
                module: ExternalModule,
                providers: [ConfigHelpers.getProvider('mymodule_database', config)]
            };
        }
    }

    export class Service {
      constructor(@Optional() @Inject(ConfigHelper.getInjectionToken('mymodule_database')) config) { // @Optional to not throw errors if config is not passed
        ...
      }
    }

// main-module.ts
import {
  HapinessModule,
} from '@hapiness/core';
import { ExternalModule } from 'external-module';
import { Config } from '@hapiness/config';

@HapinessModule({
    ...
    imports: [ ExternalModule.setConfig(Config.get('mymodule_database')) ]
})
...

Hapiness service:
// main-module.ts
import {
  HapinessModule,
} from '@hapiness/core';
import { ConfigHelper, Config } from '@hapiness/config';
import { MyCustomService } from './services';

@HapinessModule({
    ...
    providers: [
        ConfigHelper.getProvider('external_service'),
        MyCustomService,
        ...
    ]
})
...

import { Injectable } from '@hapiness/core';
import { ConfigInterface } from '@hapiness/config';

// my-custom-service.ts
@Injectable()
class MyCustomService {

    private _baseUrl: string;

    constrcutor(
        @Inject(ConfigHelper.getInjectionToken('external_service'))
        private _config: ConfigInterface
    ) {}

    connect() {
        this._baseUrl = this._config.get<string>('baseUrl');
    }

}
...

Back to top

Change History

  • v1.2.1 (2018-09-26)
* Fix a bug when default value of `get()` was a falsy value and wrongly interpreted as undefined
  • v1.2.0 (2018-05-09)
    Delete obsolete peerDependencies
* Latest packages' versions
* Documentation
  • v1.1.1 (2017-12-28)
   
Fix load config
  • v1.1.0 (2017-11-20)
* Latest packages' versions.
* Documentation.
* Change packaging process.
  • v1.0.0 (2017-10-27)
* Create `Config` module.
* Tests module.
* Documentation.
* First stable version.
Back to top

Maintainers

<tr>
    <td colspan="4" align="center"><a href="https://www.tadaweb.com"><img src="http://bit.ly/2xHQkTi" width="117" alt="tadaweb" /></a></td>
</tr>
<tr>
    <td align="center"><a href="https://github.com/Juneil"><img src="https://avatars3.githubusercontent.com/u/6546204?v=3&s=117" width="117"/></a></td>
    <td align="center"><a href="https://github.com/antoinegomez"><img src="https://avatars3.githubusercontent.com/u/997028?v=3&s=117" width="117"/></a></td>
    <td align="center"><a href="https://github.com/reptilbud"><img src="https://avatars3.githubusercontent.com/u/6841511?v=3&s=117" width="117"/></a></td>
    <td align="center"><a href="https://github.com/njl07"><img src="https://avatars3.githubusercontent.com/u/1673977?v=3&s=117" width="117"/></a></td>
</tr>
<tr>
    <td align="center"><a href="https://github.com/Juneil">Julien Fauville</a></td>
    <td align="center"><a href="https://github.com/antoinegomez">Antoine Gomez</a></td>
    <td align="center"><a href="https://github.com/reptilbud">Sébastien Ritz</a></td>
    <td align="center"><a href="https://github.com/njl07">Nicolas Jessel</a></td>
</tr>

Back to top

License

Copyright (c) 2018 Hapiness Licensed under the MIT license.
Back to top