0.1.45 • Published 9 years ago

tailored-keymapping v0.1.45

Weekly downloads
3
License
ISC
Repository
github
Last release
9 years ago

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

0.1.45

9 years ago

0.1.44

9 years ago

0.1.43

10 years ago

0.1.42

10 years ago

0.1.41

10 years ago

0.1.4

10 years ago

0.1.38

10 years ago

0.1.37

10 years ago

0.1.36

10 years ago

0.1.35

10 years ago

0.1.34

10 years ago

0.1.33

10 years ago

0.1.32

10 years ago

0.1.31

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago