Not a Package Manager

    tailored-keymapping

    0.1.45 • Public • Published

    tailored-keymapping Build Status

    map objectKeys with given keyMap

    Examples

    import KeyMapping from 'tailored-keymapping'
    // create instance with keyMap
    const keyMapping = new KeyMapping({foo: 'bar'})
    
    // basic flat keymap
    let dataMapped = keyMapping.map({foo: 'foo_content'})
    console.log(dataMapped) // => {bar: 'foo_content', foo: 'foo_content'}
    
    // basic deep keymap
    keyMapping.setKeymap({sub: {subsub: {foo: 'bar'}}})
    dataMapped = keyMapping.map(
        {foo: 'foo_content'}
    ,   {   keymapTree: ['sub', 'subsub']
        ,   onlyMappedVars: true
        }
    )
    console.log(dataMapped) // => {bar: 'foo_content'}
    
    // custom functions
    keyMapping.setKeymap({
        'newKey': (data) => data.foo+'-'+data.bar
    })
    dataMapped = keyMapping.map(
        {foo: 'foo', bar: 'bar'} // data2map
    ,   {onlyMappedVars: true}  // options or callback
    )
    console.log(datMapped) // => {newKey: 'foo-bar'}

    for more examples have a look at the mocha tests

    Usage

    npm install tailored-keymapping --save
    
    import TailoredKeymapping from 'tailored-keymapping'
    
    // define keymap
    const keymap = {
        'test': {
            'oldKey':   'newKey'
        ,   'foo':      'bar'
        ,   'abc':      'xyz'
            /**
             * custom mapping function
             *  called after mapping loop
             * @param  {object} data - mapped data object
             * @return {any} newValue - new value of the keyName
             * @return {array} [newKey,newValue] - new key/value pair
             */
        ,   'keyName': function(data) {
                return ['newKey', newValue]
                // return newValue; // to use original keyname ('keyName')
            }
        }
    }
    
    // create instance
    const keyMapping = new TailoredKeymapping(keymap)
    
    // overwrite keymap after initialisation if needed
    keyMapping.setKeymap(otherKeymap)
    
    // process data with given options
    let mappedData = keyMapping.map(dataToMap, {
           'keymapTree':        'test' // || ['sub', 'subsub']
        ,  'onlyMappedVars':    true
            /**
             * callback function
             *  mutate data after mapping
             * @param  {object} dataMapped   - mapped data object (after custom functions)
             * @param  {object} dataOriginal - mapped data object (after custom functions)
             * @return {object} newData - mutated data object
             */
        ,   callback: function(data) {
                data.dynamicVar = data.foo + data.abc;
                return data;
            }
         )
    
    // you can also rely on default options and just pass a callback function
    mappedData = keyMapping.map(payload, (data)=>newData)

    default options

    {
        onlyMappedVars: false   // drop old keys?
    ,   keymapTree:     ''      // keymaps subtree to use
    ,   callback:       null    // mutate data after mapping
    }

    Roadmap

    • 0.1.45 - added travis build hook
    • 0.1.44 - fixxed bug (mappedKey > originalKey)
    • 0.1.41 - added callback tests
    • 0.1.4 - added tests
    • 0.1.2 - dist folder is new entrypoint

    TBD

    • assert.throws doesn't fail on wrong Error msg (@tests: 'select wrong subtree')
    • keymap handling in constructor !?
    • until v0.1.5
      • finish basic tests
    • until v0.2.0
      • remove lodash as dependecy (?)

    Bugs

    if you find a bug, please report them @Issues

    Install

    npm i tailored-keymapping

    DownloadsWeekly Downloads

    41

    Version

    0.1.45

    License

    ISC

    Last publish

    Collaborators

    • doubleu23