Nascent Prototype Metaverse

    @lxndr/config

    1.0.4 • Public • Published

    build status dependencies status devDependencies status Build Status

    Application configuration manager for Node.js and browsers.

    API

    new Config([options])
      /* static methods */
      register(name, klass) -> void
      /* instance methods */
      use(provider, [options]) -> this
      reset() -> void
      reload() -> Primise
      persist() -> Promise
      of(key) -> ConfigProxy
      get([key, [defaultValue]]) -> any
      set([key], value) -> this

    Usage:

    const config = new Config({
      enchance: true
    });

    Options:

    • enchance (= false) - Forces Config constructor to create proxified version of itself. See below.

    Schema:

    Schema allows you to define what to do with specific parts of your configuration.

    This is completely optional and can be defined at any time. Schema mostly used when reload() and persist() are called, and does not validate values.

    /* only define default value */
    config.schema({
      'user.name': 'guest',
      'user.role': ['guest']
    });
     
    /* more complex example */
    config.schema({
      'user.role': {
        type: 'array',
        default: ['guest'],
        stringified: true
      }
    });

    NOTE: Array ['guest'] is just an example, you can default to any type of value.

    Providers:

    Providers define places and the ways the values for configuration are loaded and stored.

    /* static object (the object is cloned) */
    config.use({
      a: 1,
      b: [2, 3, true]
    });
     
    /* registers a function that called every configuration reloaded */
    config.use(function () {
      return Promise.resolve({
        user: {
          name: 'guest',
          role: ['guest']
        }
      });
    });
     
    /* browser local storage */
    config.use('localStorage', {
      writable: true
    });
     
    /* JSON file */
    config.use('file', {
      path: './config.json'
    });
     
    /* YAML file */
    config.use('file', {
      path: './config.yaml',
      parser: 'yaml'
    });
     
    /* directory */
    config.use('directory', {
      path: './config',
      parser: 'yaml' /* defaults to 'json' */
    });

    You have to call reload() after calling use().

    Getting:

    /* simple get */
    const v = config.get('user.roles');
    const v = config.get('user.roles[0]');
    /* with default value */
    const v = config.get('user.roles', ['guest']);
    /* in enchanced mode */
    const v = config['user.roles'];
    /* or even */
    const v = config.user.roles;

    Setting:

    /* simple set */
    config.set('user.name', 'admin');
    config.set('user.roles[0]', 'admin');
    /* in enchanced mode */
    const v = config['user.roles[0]'] = 'admin';

    Loading and saving:

    You have to call it every time you add providers.

    config.reload().catch(err => {
      console.error(err.message);
    });

    You have to call it every time you change configuration and what to save it.

    config.persist().catch(err => {
      console.error(err.message);
    });

    Namespaces:

    const cfg = config.of('b')

    Custom parser:

    import * as json5 from 'json5';
     
    const config = new Config()
      .use('file', {
        path: './config.json5',
        parser: {
          parse(text) {
            return json5.parse(text);
          },
          stringify(value) {
            /* prettify output, this have to be human-readable file */
            return json5.stringify(value, ' ', 2);
          }
        }
      });

    Custom provider:

    config.use(new SequelizeConfigProvider({
      model: 'param'
    }));

    or

    /* register configuration provider class */
    config.register('seqelize', SequelizeConfigProvider);
    /* add configuration provider */
    config.use('seqelize', {
      model: 'param'
    });
     

    on how to make your own configuration provider class see src/providers directory.

    Keywords

    none

    Install

    npm i @lxndr/config

    DownloadsWeekly Downloads

    31

    Version

    1.0.4

    License

    MIT

    Unpacked Size

    187 kB

    Total Files

    34

    Last publish

    Collaborators

    • avatar