@nglx/cfg
TypeScript icon, indicating that this package has built-in type declarations

0.0.1-dev-7647d274c3 • Public • Published

@nglx/cfg

A simple configuration library for Angular applications

status-image version-image coverage-image download-image

Overview

@nglx/cfg attempts to streamline the app configuration while keeping it DRY.

How to install

npm install @nglx/cfg |OR| yarn add @nglx/cfg

How to use

// In your environment{prod,staging}.ts

import { AppCfg, TargetPlatform, HttpMethod } from '@nglx/cfg';

export const environment: AppCfg = {
  // release version
  version: string;
  // app name
  appName: 'Angular Configuration Module',
  // target (browser, mobile, desktop)
  target: TargetPlatform.web,
  // production, staging or development
  production: true
  // one or more app specific field(s)
};
// In your app.module.ts - Register your environment

import { CfgModule } from '@nglx/cfg';
import { environment } from '../environments/environment';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, CfgModule.forRoot(environment)],
  bootstrap: [AppComponent]
})
export class AppModule {}
// In your app.component.ts or (some.service.ts) - Inject cfgService & access environment anywhere.

import { Component } from '@angular/core';
import { CfgService } from '@nglx/cfg';

@Component({
  selector: 'app-root'
})
export class AppComponent {
  title = '@nglx/cfg';

  constructor(public cfg: CfgService) {
    this.title = this.cfg.options.appName;
  }
}

Advanced usage:

Remote configuration - What if you need remote config before you started the Angular app?

@nglx/cfg can also be used to fetch remote configuration prior to start of an Angular app.

// In your environment{prod,staging}.ts

import { AppCfg, TargetPlatform, HttpMethod } from '@nglx/cfg';

export const environment: AppCfg = {
  // release version
  version: '1.0.0',
  // app name
  appName: 'Angular Configuration Module',
  // target (browser, mobile, desktop)
  target: TargetPlatform.web,
  // production, staging or development
  production: true,
  // remote configuration (from the server prior to ng bootstrap)
  rmtCfg: {
    // server url to get remote config from (default = null)
    endpoint: '/api/config',
    // GET or POST http method to connect to remote server (default = get)
    method: HttpMethod.get,
    // Max timeout of http connection to remote server (default = 2 seconds)
    timeout: 3,
    // http headers to include in http connection to remote server
    headers: { 'Content-Type': 'application/json' }
    // body of request when using http POST method (default = {})
    body: {
      // one or more app specific field(s)
    }
  }
  // one or more app specific field(s)
};
// In your app.module.ts

import { CfgModule } from '@nglx/cfg';
import { environment } from '../environments/environment';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, CfgModule.forRoot(environment)],
  bootstrap: [AppComponent]
})
export class AppModule {}
// In your app.component.ts or (some.service.ts)

import { Component } from '@angular/core';
import { CfgService } from '@nglx/cfg';
import { merge } from 'lodash';

@Component({
  selector: 'app-root'
})
export class AppComponent {
  title = '@nglx/cfg';
  options = {};

  constructor(public cfg: CfgService) {
    this.options = merge({ name: 'AppComponent' }, this.cfg.options};
    const remoteCfgData = this.options.rmtData;
  }
}

Running the tests

To run the tests against the current environment:

npm run ci:all |OR| yarn ci:all

License

Released under a (MIT) license.

Version

X.Y.Z Version

`MAJOR` version -- making incompatible API changes
`MINOR` version -- adding functionality in a backwards-compatible manner
`PATCH` version -- making backwards-compatible bug fixes

Sponsors

Surge

Credits

Angular // Nrwl // Lodash // NPM // Yarn

Readme

Keywords

none

Package Sidebar

Install

npm i @nglx/cfg

Weekly Downloads

0

Version

0.0.1-dev-7647d274c3

License

MIT

Unpacked Size

163 kB

Total Files

38

Last publish

Collaborators

  • un33k