GitXplorerGitXplorer
v

js-cfg-lib

public
0 stars
0 forks
1 issues

Commits

List of commits on branch master.
Unverified
503c0db0150dd8f865bcad3d6ce32045c9ba6405

Add schedule.

vvsajip committed 8 days ago
Verified
eeb7807871c35da671858bd71c9e7ef460cd2be6

Update mocha to 10.2.0. (#23)

vvsajip committed 7 months ago
Verified
e2f6721ea9d1264d07f73a3f564bf7aa06f3a532

Bump braces, webpack and webpack-cli (#22)

ddependabot[bot] committed 7 months ago
Unverified
5d09327ff2f57781dc1ac49b44b18cb66fc021f5

Exclude Node 14 from macos-latest, as unavailable.

vvsajip committed 7 months ago
Verified
1083ca8ba34a700d93e2e83a75aa2fe95c4b43a9

Bump browserify-sign from 4.0.4 to 4.2.2 (#21)

ddependabot[bot] committed a year ago
Verified
d4d81e38a420f4a67c34f362db1f62418e8c7919

Bump json5 from 1.0.1 to 1.0.2 (#20)

ddependabot[bot] committed 2 years ago

README

The README file for this repository.

The CFG configuration format is a text format for configuration files which is similar to, and a superset of, the JSON format. It dates from before its first announcement in 2008 and has the following aims:

  • Allow a hierarchical configuration scheme with support for key-value mappings and lists.
  • Support cross-references between one part of the configuration and another.
  • Provide a string interpolation facility to easily build up configuration values from other configuration values.
  • Provide the ability to compose configurations (using include and merge facilities).
  • Provide the ability to access real application objects safely, where supported by the platform.
  • Be completely declarative.

It overcomes a number of drawbacks of JSON when used as a configuration format:

  • JSON is more verbose than necessary.
  • JSON doesn’t allow comments.
  • JSON doesn’t provide first-class support for dates and multi-line strings.
  • JSON doesn’t allow trailing commas in lists and mappings.
  • JSON doesn’t provide easy cross-referencing, interpolation, or composition.

Installation

You can use this package using npm install cfg-lib and then const config = require('cfg-lib') in your code.

Exploration

To explore CFG functionality for JavaScript, we can just use the node Read-Eval-Print-Loop (REPL). You can invoke it using

$ node

Getting Started with CFG in JavaScript

A configuration is represented by an instance of the Config class. The constructor for this class can be passed a filename or a stream which contains the text for the configuration. The text is read in, parsed and converted to an object that you can then query. A simple example:

a: 'Hello, '
b: 'world!'
c: {
  d: 'e'
}
'f.g': 'h'
christmas_morning: `2019-12-25 08:39:49`
home: `$HOME`
foo: `$FOO|bar`

Loading a configuration

The configuration above can be loaded as shown below. In the REPL shell:

> const config = require('cfg-lib');
undefined
> let cfg = new config.Config("test0.cfg");
undefined

Usage in a browser

In a browser, API elements are exposed in the CFG namespace:

let stream = CFG.makeStream('abc: 1');
let cfg = new CFG.Config(stream);
let d = cfg.asDict();
console.log(d);

The above code would print the object { abc: 1 } in the console.

Access elements with keys

Accessing elements of the configuration with a simple key uses the get method:

> cfg.get('a')
'Hello, '
> cfg.get('b')
'world!'

Access elements with paths

As well as simple keys, elements can also be accessed using path strings:

> cfg.get('c.d')
'e'

Here, the desired value is obtained in a single step, by (under the hood) walking the path c.d – first getting the mapping at key c, and then the value at d in the resulting mapping.

Note that you can have simple keys which look like paths:

> cfg.get('f.g')
'h'

If a key is given that exists in the configuration, it is used as such, and if it is not present in the configuration, an attempt is made to interpret it as a path. Thus, f.g is present and accessed via key, whereas c.d is not an existing key, so is interpreted as a path.

Access to date/time objects

You can also get native date/time objects from a configuration, by using an ISO date/time pattern in a backtick-string:

> cfg.get('christmas_morning')
2019-12-25T08:39:49.000Z

Access to environment variables

To access an environment variable, use a backtick-string of the form $VARNAME:

> cfg.get('home')
'/home/vinay'

You can specify a default value to be used if an environment variable isn’t present using the $VARNAME|default-value form. Whatever string follows the pipe character (including the empty string) is returned if VARNAME is not a variable in the environment.

> cfg.get('foo')
'bar'

For more information, see the CFG documentation.