modular-configuration

0.0.3 • Public • Published

Modular Configuration

A minimalistic configuration manager made The Node Way ™.

Goals

Other configuration modules failed to provide a few preferred features. This module aims to provide:

  • environment variable, command line, overrides
  • load from any directory, from a list of directories (with fallbacks)
  • accept raw JSON objects
  • have strict mode(s)
  • have dot notation getters(/setters) (dot notation module)
  • setters not necessary but helpful (per instance)
  • read standard JSON, but also .JS (for dynamic fields?)
  • synchronous and asynchronous support, with promises
  • be hotloadable
  • allow configuration overlaying
  • be modular and function independently of other configuration objects
  • allow configuration nesting and access via chaining
  • allow configurations to be set, deleted, and saved
  • allow configuration locking/immutability so that changes are prevented
  • source tracking for debugging purposes
  • option to use package.json
  • browser support

API

Contents of ./config.json:

{
    "Name": "John",
    "Values": [ 1, 2, 3, 9, 7, 8 ],
    "Object": {
        "Name": "Jake",
        "Values": [ 100, 200, 300 ]
    },
    "Boolean": true,
    "Float": 0.01,
    "Redirect": {
        "Home": {
            "Address": "https://example.com/",
            "Visitors": 87
        }
    }
}

Contents of ./alternate.json:

{
    "Name": "Elizabeth"
}

Example usage:

const Config = require('modular-configuration');
 
const config = new Config();
const path = require('path');
 
config.setStrict(true);
 
config.load(path.join(__dirname, '/config.json'))
  .then(() => {
    console.log(config.get('Name')); // -> John
    console.log(config.get('Values')); // -> [ 1, 2, 3, 9, 7, 8 ]
    console.log(config.get('Redirect.Home.Address')); // -> https://example.com/
    console.log(config.set('Name', 'Nick'));
    console.log(config.get('Name')); // -> Nick
 
    const alternate = new Config();
 
    // Alternative loading method
    alternate.load('./alternate.json')
      .then(() => {
        console.log(config.get('Name')); // -> Elizabeth
      })
      .catch((err) => {
        console.error(err);
      });
 
    const subConfig = new Config();
    subConfig.loadSync(config.get('Object'));
    console.log(subConfig.get('Name')); // -> Jake
    console.log(subConfig.get('Values')); // -> [ 100, 200, 300 ]
  })
  .then(() => {
    console.log(config.get('Unknown')); // Should crash
  })
  .catch((err) => {
    console.error(err);
  });

Package Sidebar

Install

npm i modular-configuration

Weekly Downloads

3

Version

0.0.3

License

BSD-3-Clause

Unpacked Size

14 kB

Total Files

11

Last publish

Collaborators

  • maxattax