# @fullerstack/ngx-cfg

> A Configuration Utility Library for Angular

Latest version **0.0.8** (published 2021-03-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install @fullerstack/ngx-cfg
pnpm add @fullerstack/ngx-cfg
yarn add @fullerstack/ngx-cfg
bun add @fullerstack/ngx-cfg
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.8 |
| Published | 2021-03-29 |
| First published | 2021-03-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 84.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 65 |
| Author | Val Neekman |
| Maintainers | un33kvu |
| Keywords | ng, angular, config, configuration, remote configuration, application level configuration, configuration driven application |

## Links

- npm: https://www.npmjs.com/package/@fullerstack/ngx-cfg
- Repository: https://github.com/neekware/fullerstack
- Homepage: https://github.com/neekware/fullerstack/blob/main/libs/ngx-cfg/README.md
- Issues: https://github.com/neekware/fullerstack.git/issues
- npm.io page: https://npm.io/package/@fullerstack/ngx-cfg

## Dependencies (1)

- [tslib](https://npm.io/package/tslib.md) ^2.0.0

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 0.0.8 (latest) — 2021-03-29
- 0.0.8-dev-86ce3e4939 (dev) — 2021-03-29
- 0.0.7-dev-b0aeda27ca — 2021-03-29
- 0.0.6-dev-e6d53124ae — 2021-03-29
- 0.0.6-dev-76bedc524d — 2021-03-29
- 0.0.6 — 2021-03-29
- 0.0.5-dev-24345612b9 — 2021-03-29
- 0.0.5 — 2021-03-29
- 0.0.4 — 2021-03-29
- 0.0.1 — 2021-03-29
- 0.0.3-dev-02485a3b0b — 2021-03-29
- 0.0.2-dev-b3ac3677d5 — 2021-03-29
- 0.0.2-dev-3906560e74 — 2021-03-29
- 0.0.1-dev-3906560e74 — 2021-03-29
- 0.0.1-dev-3cd5453498 — 2021-03-29

## README

# @fullerstack/ngx-cfg <img style="margin-bottom: -6px" width="30" src="../../apps/fullerstack/src/assets/images/fullerstack-x250.png">

**An Angular Configuration Library - Handles local and remote configurations**

[![status-image]][status-link]
[![version-image]][version-link]
[![coverage-image]][coverage-link]
[![download-image]][download-link]

# Overview

## Description

In general, passing the `environment.ts` into your publishable libraries may not be possible unless a relative path is used. However, relative paths will break the dependency graph of your mono-repo stack. This is due to the fact that the libs should not have any knowledge of the applications using them. If so, that will constitute a circular dependency.

Till `Angular` natively supports something like, `import { environment } from '@angular/core/environment'`, your publishable libs must implement an `InjectionToken` to receive the `environment` object and provide it with an `APP_INITIALIZER` directly during the app's bootstrapping.

Alternatively, you can have a simple lib such as `@fullerstack/ngx-cfg` to receive the `environment` object and provide it to all other publishable libs via an injectable service such as `CfgService`.

**@fullerstack/ngx-cfg** attempts to streamline the sharing of the content of the `environment.ts` while promoting DRY **DRY**.

# How to install

    npm i @fullerstack/ngx-cfg |OR| yarn add @fullerstack/ngx-cfg

# How to use

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

import { ApplicationCfg, HttpMethod } from '@fullerstack/ngx-cfg';

export const environment: Readonly<ApplicationCfg> = {
  // production, staging or development
  production: false,
  // one or more app specific field(s)
  version: '1.0.0',
};
```

```typescript
// In your app.module.ts

import { CfgModule } from '@fullerstack/ngx-cfg';
import { environment } from '../environments/environment';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, CfgModule.forRoot(environment)],
  bootstrap: [AppComponent],
})
export class AppModule {}
```

```typescript
// In your app.component.ts or (some.service.ts)

import { Component } from '@angular/core';
import { CfgService } from '@fullerstack/ngx-cfg';

@Component({
  selector: 'app-root',
})
export class AppComponent {
  title: string;

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

# Advanced usage:

- Remote configuration

`@fullerstack/ngx-cfg` can also be used to fetch remote configuration prior to start of an Angular app.

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

import { ApplicationCfg, HttpMethod } from '@fullerstack/ngx-cfg';

export const environment: ApplicationCfg = {
  // production, staging or development
  production: true,
  // release version
  version: '1.0.0',
  // remote configuration (from the server prior to ng bootstrap)
  remoteCfg: {
    // server url to get remote config from (default = null)
    endpoint: '/api/cfg',
    // 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)
};
```

```typescript
// In your app.module.ts

import { CfgModule } from '@fullerstack/ngx-cfg';
import { environment } from '../environments/environment';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, CfgModule.forRoot(environment)],
  bootstrap: [AppComponent],
})
export class AppModule {}
```

```typescript
// In your app.component.ts or (some.service.ts)

import { Component } from '@angular/core';
import { CfgService } from '@fullerstack/ngx-cfg';
import { merge } from 'lodash';

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

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

# License

Released under a ([MIT](https://github.com/un33k/ngx-cfg/blob/master/LICENSE)) 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

[status-image]: https://secure.travis-ci.org/neekware/fullerstack.png?branch=main
[status-link]: http://travis-ci.org/neekware/fullerstack?branch=main
[version-image]: https://img.shields.io/npm/v/@fullerstack/ngx-cfg.svg
[version-link]: https://www.npmjs.com/package/@fullerstack/ngx-cfg
[coverage-image]: https://coveralls.io/repos/neekware/fullerstack/badge.svg
[coverage-link]: https://coveralls.io/r/neekware/fullerstack
[download-image]: https://img.shields.io/npm/dm/@fullerstack/ngx-cfg.svg
[download-link]: https://www.npmjs.com/package/@fullerstack/ngx-cfg

# Sponsors

[Neekware Inc.](https://github.com/neekware)

---
_Source: https://npm.io/package/@fullerstack/ngx-cfg · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
