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
import { ConfigLoader, ConfigExporter } from 'loadson'
type MyCustomConfigType = {
myConfig: {
a: number,
b: string,
c: { d: string, e: number }
}
}
class SomethingWithDefaultConfig
implements ConfigExporter<MyCustomConfigType>{
name: string = "myConfigName"
getDefaultConfig(): MyCustomConfigType {
return {
myConfig: {
a: 3,
b: "hello",
c: { d: "world", e: 42}
}
}
}
}
const somethingWithDefaultConfig = new SomethingWithDefaultConfig();
let loader = new ConfigLoader(somethingWithDefaultConfig)
console.log("loader getConfig returns ",
loader.getConfig()
)
console.log("loader setConfig returns ",
loader.setConfig({ myConfig: { a: 7, b: "d", c: { d: "b", e: 24} } })
)
console.log("loader resetConfig returns",
loader.resetConfig()
)
console.log("loader getConfigKey that does not exist resturns ",
loader.getConfigKey('noConfigKey')
)
console.log("loader getConfigKey that does exist returns ",
loader.getConfigKey('myConfig')
)
console.log("loader setConfigKey 'anotherKey', { a: 12 } returns ",
loader.setConfigKey('anotherKey', { a: 12 })
)
console.log("loader deleteConfigKey 'myConfig' returns ",
loader.deleteConfigKey('myConfig')
)
console.log("loader resetConfig returns ",
loader.resetConfig()
)
There should be a file in the current working directory named myConfigName.json with the default configuration
{
"myConfig": {
"a": 3,
"b": "hello",
"c": {
"d": "world",
"e": 42
}
}
}
Using a different configuration folder path
const customConfigDirectoryPath = "./myConfigPath"
let customPathLoader = new ConfigLoader
(somethingWithDefaultConfig
, customConfigDirectoryPath)
console.log("customPathLoader getConfig returns ",
customPathLoader.getConfig()
)
There should be a file ./myConfigPath/myConfigName.json with the content of customPathLoader.getConfig()
Using a custom onChange callback
const myCustomOnChangeHook = (config: MyCustomConfigType, key?: string) => {
console.log("a change happened in ", config, "on key ", key)
}
let onChangeLoader = new ConfigLoader
(somethingWithDefaultConfig
, customConfigDirectoryPath
, myCustomOnChangeHook)
console.log("onChangeLoader setConfig to default returns ",
onChangeLoader.setConfig(somethingWithDefaultConfig.getDefaultConfig())
)
console.log("onChangeLoader setConfig to something else returns ",
onChangeLoader.setConfig({ myConfig: { a: 7, b: "d", c: { d: "b", e: 24} } })
)
console.log("onChangeLoader setConfigKey to the same value returns ",
onChangeLoader.setConfigKey('myConfig', { a: 7, b: "d", c: { d: "b", e: 24} })
)
console.log("onChangeLoader setConfigKey that does not exist returns",
onChangeLoader.setConfigKey('anotherKey', { a: 12 })
)
console.log("onChangeLoader deleteConfigKey that does not exist returns ",
onChangeLoader.deleteConfigKey('noConfigKey')
)
console.log("onChangeLoader deleteConfigKey that does exist returns ",
onChangeLoader.deleteConfigKey('myConfig')
)
console.log("onChangeLoader the first resetConfig returns ",
onChangeLoader.resetConfig()
)
console.log("onChangeLoader the second resetConfig returns ",
onChangeLoader.resetConfig()
)