/config

Configuration library based on node-config library

Primary LanguageTypeScriptMIT LicenseMIT

Hapiness

build coveralls dependencies devDependencies
Typescript logo ReactiveX logo Hapijs logo

Hapiness Config

Configuration module based on node-config & js-yaml libraries.

Table of contents

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

tadaweb
Julien Fauville Antoine Gomez SĂ©bastien Ritz Nicolas Jessel

Back to top

License

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

Back to top