Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/doubleu23/tailored-keymapping
map objectKeys with given keyMap
https://github.com/doubleu23/tailored-keymapping
keymap keymapper map-objectkeys object-filter
Last synced: 19 days ago
JSON representation
map objectKeys with given keyMap
- Host: GitHub
- URL: https://github.com/doubleu23/tailored-keymapping
- Owner: DoubleU23
- License: mit
- Created: 2016-03-02T09:24:08.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2023-01-04T15:43:17.000Z (about 2 years ago)
- Last Synced: 2024-12-19T22:29:30.336Z (19 days ago)
- Topics: keymap, keymapper, map-objectkeys, object-filter
- Language: JavaScript
- Size: 306 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# tailored-keymapping
> **map objectKeys with given keyMap**[![Build Status](https://travis-ci.org/DoubleU23/tailored-keymapping.svg?branch=master)](https://travis-ci.org/DoubleU23/tailored-keymapping)
[![Build status](https://ci.appveyor.com/api/projects/status/3afny9b8q526th4o/branch/master?svg=true)](https://ci.appveyor.com/project/DoubleU23/tailored-keymapping/branch/master)
[![Open Source Love png2](https://badges.frapsoft.com/os/v2/open-source.png?v=103)](https://github.com/ellerbrock/open-source-badges/)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)[![Greenkeeper badge](https://badges.greenkeeper.io/DoubleU23/tailored-keymapping.svg)](https://greenkeeper.io/)
[![Known Vulnerabilities](https://snyk.io/test/npm/tailored-keymapping/badge.svg)](https://snyk.io/test/npm/tailored-keymapping)
[![dependencies Status](https://david-dm.org/doubleu23/tailored-keymapping/status.svg)](https://david-dm.org/doubleu23/tailored-keymapping)
[![devDependencies Status](https://david-dm.org/doubleu23/tailored-keymapping/dev-status.svg)](https://david-dm.org/doubleu23/tailored-keymapping?type=dev)## Usage
npm install tailored-keymapping --save```JavaScript
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
```JavaScript
{
onlyMappedVars: false // drop old keys?
, keymapTree: '' // keymaps subtree to use
, callback: null // mutate data after mapping
}
```## Examples
```JavaScript
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## Roadmap
* 0.2.0 - finish basic tests
* 0.1.6 - remove lodash dependecy (?)
* 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 !?## Bugs
if you find a bug, please report them [@Issues](https://github.com/DoubleU23/tailored-keymapping/issues
)