|
3 years ago | |
---|---|---|
classes | 3 years ago | |
interfaces | 3 years ago | |
README.md | 3 years ago | |
globals.md | 3 years ago |
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.
npm i loadson
Create a configuration Loader
import { ConfigLoader, ConfigExporter } from 'loadson'
// create your custom configuration type
type MyCustomConfigType = {
myConfig: {
a: number,
b: string,
c: { d: string, e: number }
}
}
// implement ConfigExporter by defining the getDefaultConfig method and the name property
class SomethingWithDefaultConfig
implements ConfigExporter<MyCustomConfigType>{
name: string = "myConfigName"
getDefaultConfig(): MyCustomConfigType {
return {
myConfig: {
a: 3,
b: "hello",
c: { d: "world", e: 42}
}
}
}
}
// Using the loader
const somethingWithDefaultConfig = new SomethingWithDefaultConfig();
let loader = new ConfigLoader(somethingWithDefaultConfig)
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({ myConfig: { a: 7, b: "d", c: { d: "b", e: 24} } })
)
// 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', { a: 12 })
)
// 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
{
"myConfig": {
"a": 3,
"b": "hello",
"c": {
"d": "world",
"e": 42
}
}
}
const customConfigDirectoryPath = "./myConfigPath" //otherwise current working directory
let customPathLoader = new ConfigLoader
(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()
// This hook will only be called if something on disk actually changed and maybe provides a key of type string
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())
)
// 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({ myConfig: { a: 7, b: "d", c: { d: "b", e: 24} } })
)
// 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', { a: 7, b: "d", c: { d: "b", e: 24} })
)
// 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: 12 })
)
/**
a change happened in
{ myConfig: { a: 7, b: 'd', c: { d: 'b', e: 24 } },
anotherKey: { a: 12 } } on key anotherKey
onChangeLoader 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 } } }
1.0.17