1.0.2 • Published 4 years ago

@gfxpulse/reloadable-config v1.0.2

Weekly downloads
6
License
ISC
Repository
github
Last release
4 years ago

Install

npm install @gfxpulse/reloadable-config

Functions

Function, propertyDescription
setup(setupOptions, reload=true)Config of reloadable-config
subscribe(subscribeOptions)Registers callback on config changes
unsubscribe(id)Removed callback
reload()Reloads config
stop()Clears any timeouts, file watches, etc...
d, dynamicConfigValues loaded on most recent reload
s, staticConfigValues loaded on initial setup
loadedIndicated whether config was successfully loaded at least once

Setup options

OptionTypeDefaultDescription
autoreloadint0How often (in ms) is reload automatically called
watchfileintnullAutomatically call reload on file change
filestringnullFull path to config file
defaultsObject{}Default values if not present in file
on_reload_beginFunction() => {}Function called before reload starts
on_reload_endFunction() => {}Function called after reload finishes and all callbacks are called

Subscribe options

OptionTypeDefaultDescription
idstringrandomIdentifier used for unsubscribing
init_callbooltrueCall handler instantly with old_conf = null
watch'*' or Array'*'Handler called only when property or properties in array are changed, use '*' for any
handlerFunction(new_config, old_config) => {}Function called when change is detected

Example

Code:

const path = require('path');

const config = require('./../index.js').setup({
    watchfile: true,
    file: path.resolve('./settings.js'),
    defaults: {
        VALUE3: 72,
    }
});

config.subscribe({
    watch: ['VALUE1'],
    init_call: false,
    handler: (conf, old_conf) => {
        if (config.d.PRINT) {
            console.log(`VALUE1 changed from ${old_conf.VALUE1} to ${conf.VALUE1} (initial value ${config.s.VALUE1})`)
        }
    }
});

config.subscribe({
    watch: ['VALUE2'],
    init_call: false,
    handler: (conf, old_conf) => {
        if (config.d.PRINT) {
            console.log(`VALUE1 changed from ${old_conf.VALUE2} to ${conf.VALUE2} (initial value ${config.s.VALUE2})`)
        }
    }
});

config.subscribe({
    watch: ['VALUE3'],
    init_call: true,
    handler: (conf, old_conf) => {
        console.log(`VALUE3 = ${conf.VALUE3}`)
    }
});

initial settings.js:

module.exports = {
    'VALUE1': 1,
    'VALUE2': 2,
    'PRINT': true,
};

Output:

VALUE3 = 72

changed settings.js:

module.exports = {
    'VALUE1': 11,
    'VALUE2': 2,
    'PRINT': true,
};

Output:

VALUE1 changed from 1 to 11 (initial value 1)

changed settings.js:

module.exports = {
    'VALUE1': 111,
    'VALUE2': 2,
    'PRINT': true,
};

Output:

VALUE1 changed from 11 to 111 (initial value 1)

changed settings.js:

module.exports = {
    'VALUE1': 11,
    'VALUE2': 2,
    'PRINT': false,
};

Output:

changed settings.js:

module.exports = {
    'VALUE1': 11,
    'VALUE2': 22,
    'PRINT': false,
};

Output:

changed settings.js:

module.exports = {
    'VALUE1': 1,
    'VALUE2': 2,
    'PRINT': true,
};

Output:

VALUE1 changed from 11 to 1 (initial value 1)
VALUE1 changed from 22 to 2 (initial value 2)

changed settings.js:

module.exports = {
    'VALUE1': 2,
    'VALUE2': 1,
    'VALUE3': 3,
    'PRINT': true,
};

Output:

VALUE3 = 3

changed settings.js:

module.exports = {
    'VALUE1': 2,
    'VALUE2': 1,
    'PRINT': true,
};

Output:

VALUE3 = 72