Nachos Preventing Motivation

    loadson

    1.0.17 • Public • Published

    Overview

    Build Status Current Version Weekly Downloads License Type

    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'
     
     
    // 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
          }
        }
      }

    Using a different configuration folder path

    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()

    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
    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 } } }

    Full documentation

    Install

    npm i loadson

    DownloadsWeekly Downloads

    2

    Version

    1.0.17

    License

    MIT

    Unpacked Size

    13.9 kB

    Total Files

    7

    Last publish

    Collaborators

    • frontwork
    • nitowa