Overview
Loadson is a persistent, flat, in file JSON storage powered by lowdb and enables you to conveniently handle objects that have a default configuration as well as getting, setting, deleting and reseting the configuration on disk.
How to install
npm i loadson
Quickstart
Create a configuration Loader
// create your custom configuration type // Using the loader; console.log"loader getConfig returns ", loader.getConfig // loader getConfig returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } } console.log"loader setConfig returns ", loader.setConfig // loader setConfig returns // { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } } } console.log"loader resetConfig returns", loader.resetConfig // loader resetConfig returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } } console.log"loader getConfigKey that does not exist resturns ", loader.getConfigKey'noConfigKey' // loader getConfigKey that does not exist resturns // undefined console.log"loader getConfigKey that does exist returns ", loader.getConfigKey'myConfig' // loader getConfigKey that does exist returns // { a: 3, b: 'hello', c: { d: 'world', e: 42 } } console.log"loader setConfigKey 'anotherKey', { a: 12 } returns ", loader.setConfigKey'anotherKey', // loader setConfigKey 'anotherKey', { a: 12 } returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } },// anotherKey: { a: 12 } } console.log"loader deleteConfigKey 'myConfig' returns ", loader.deleteConfigKey'myConfig' // loader deleteConfigKey 'myConfig' returns // { anotherKey: { a: 12 } } console.log"loader resetConfig returns ", loader.resetConfig // loader resetConfig returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } }
There should be a file in the current working directory named myConfigName.json with the default configuration
Using a different configuration folder path
somethingWithDefaultConfig , customConfigDirectoryPath console.log"customPathLoader getConfig returns ", customPathLoader.getConfig// customPathLoader getConfig returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } }
There should be a file ./myConfigPath/myConfigName.json with the content of customPathLoader.getConfig()
Using a custom onChange callback
// This hook will only be called if something on disk actually changed and maybe provides a key of type string somethingWithDefaultConfig , customConfigDirectoryPath , myCustomOnChangeHook console.log"onChangeLoader setConfig to default returns ", onChangeLoader.setConfigsomethingWithDefaultConfig.getDefaultConfig // onChangeLoader setConfig to default returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } } console.log"onChangeLoader setConfig to something else returns ", onChangeLoader.setConfig // a change happened in // { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } } } on key undefined// onChangeLoader setConfig to something else returns // { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } } } console.log"onChangeLoader setConfigKey to the same value returns ", onChangeLoader.setConfigKey'myConfig', // onChangeLoader setConfigKey to the same value returns // { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } } } console.log"onChangeLoader setConfigKey that does not exist returns", onChangeLoader.setConfigKey'anotherKey', /**a change happened in { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } }, anotherKey: { a: 12 } } on key anotherKeyonChangeLoader setConfigKey that does not exist returns { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } }, anotherKey: { a: 12 }}*/ console.log"onChangeLoader deleteConfigKey that does not exist returns ", onChangeLoader.deleteConfigKey'noConfigKey' /**onChangeLoader deleteConfigKey that does not exist returns { myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } }, anotherKey: { a: 12 }}*/ console.log"onChangeLoader deleteConfigKey that does exist returns ", onChangeLoader.deleteConfigKey'myConfig' // a change happened in // { anotherKey: { a: 12 } } on key myConfig// onChangeLoader deleteConfigKey that does exist returns // { anotherKey: { a: 12 } } console.log"onChangeLoader the first resetConfig returns ", onChangeLoader.resetConfig // a change happened in // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } } on key undefined// onChangeLoader the first resetConfig returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } } console.log"onChangeLoader the second resetConfig returns ", onChangeLoader.resetConfig // onChangeLoader the second resetConfig returns // { myConfig: { a: 3, b: 'hello', c: { d: 'world', e: 42 } } }