{"id":15393262,"url":"https://github.com/doubleu23/tailored-keymapping","last_synced_at":"2026-01-31T18:06:44.962Z","repository":{"id":44165081,"uuid":"52950307","full_name":"DoubleU23/tailored-keymapping","owner":"DoubleU23","description":"map objectKeys with given keyMap","archived":false,"fork":false,"pushed_at":"2023-01-04T15:43:17.000Z","size":313,"stargazers_count":1,"open_issues_count":13,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-12T13:55:46.699Z","etag":null,"topics":["keymap","keymapper","map-objectkeys","object-filter"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DoubleU23.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-02T09:24:08.000Z","updated_at":"2018-10-20T17:46:18.000Z","dependencies_parsed_at":"2022-08-28T01:10:10.099Z","dependency_job_id":null,"html_url":"https://github.com/DoubleU23/tailored-keymapping","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/DoubleU23/tailored-keymapping","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DoubleU23%2Ftailored-keymapping","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DoubleU23%2Ftailored-keymapping/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DoubleU23%2Ftailored-keymapping/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DoubleU23%2Ftailored-keymapping/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DoubleU23","download_url":"https://codeload.github.com/DoubleU23/tailored-keymapping/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DoubleU23%2Ftailored-keymapping/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259872784,"owners_count":22924634,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keymap","keymapper","map-objectkeys","object-filter"],"created_at":"2024-10-01T15:18:32.369Z","updated_at":"2026-01-31T18:06:44.923Z","avatar_url":"https://github.com/DoubleU23.png","language":"JavaScript","readme":"# tailored-keymapping \n\u003e **map objectKeys with given keyMap**\n\n[![Build Status](https://travis-ci.org/DoubleU23/tailored-keymapping.svg?branch=master)](https://travis-ci.org/DoubleU23/tailored-keymapping)\n[![Build status](https://ci.appveyor.com/api/projects/status/3afny9b8q526th4o/branch/master?svg=true)](https://ci.appveyor.com/project/DoubleU23/tailored-keymapping/branch/master)\n[![Open Source Love png2](https://badges.frapsoft.com/os/v2/open-source.png?v=103)](https://github.com/ellerbrock/open-source-badges/) \n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)  \n\n[![Greenkeeper badge](https://badges.greenkeeper.io/DoubleU23/tailored-keymapping.svg)](https://greenkeeper.io/)\n[![Known Vulnerabilities](https://snyk.io/test/npm/tailored-keymapping/badge.svg)](https://snyk.io/test/npm/tailored-keymapping)\n[![dependencies Status](https://david-dm.org/doubleu23/tailored-keymapping/status.svg)](https://david-dm.org/doubleu23/tailored-keymapping)\n[![devDependencies Status](https://david-dm.org/doubleu23/tailored-keymapping/dev-status.svg)](https://david-dm.org/doubleu23/tailored-keymapping?type=dev)\n\n## Usage\n    npm install tailored-keymapping --save\n\n```JavaScript\nimport TailoredKeymapping from 'tailored-keymapping'\n\n// define keymap\nconst keymap = {\n    'test': {\n        'oldKey':   'newKey'\n    ,   'foo':      'bar'\n    ,   'abc':      'xyz'\n        /**\n         * custom mapping function\n         *  called after mapping loop\n         * @param  {object} data - mapped data object\n         * @return {any} newValue - new value of the keyName\n         * @return {array} [newKey,newValue] - new key/value pair\n         */\n    ,   'keyName': function(data) {\n            return ['newKey', newValue]\n            // return newValue; // to use original keyname ('keyName')\n        }\n    }\n}\n\n// create instance\nconst keyMapping = new TailoredKeymapping(keymap)\n\n// overwrite keymap after initialisation if needed\nkeyMapping.setKeymap(otherKeymap)\n\n// process data with given options\nlet mappedData = keyMapping.map(dataToMap, {\n       'keymapTree':        'test' // || ['sub', 'subsub']\n    ,  'onlyMappedVars':    true\n        /**\n         * callback function\n         *  mutate data after mapping\n         * @param  {object} dataMapped   - mapped data object (after custom functions)\n         * @param  {object} dataOriginal - mapped data object (after custom functions)\n         * @return {object} newData - mutated data object\n         */\n    ,   callback: function(data) {\n            data.dynamicVar = data.foo + data.abc;\n            return data;\n        }\n     )\n\n// you can also rely on default options and just pass a callback function\nmappedData = keyMapping.map(payload, (data)=\u003enewData)\n```\n### default options\n```JavaScript\n{\n    onlyMappedVars: false   // drop old keys?\n,   keymapTree:     ''      // keymaps subtree to use\n,   callback:       null    // mutate data after mapping\n}\n```\n\n## Examples\n```JavaScript\nimport KeyMapping from 'tailored-keymapping'\n// create instance with keyMap\nconst keyMapping = new KeyMapping({foo: 'bar'})\n\n// basic flat keymap\nlet dataMapped = keyMapping.map({foo: 'foo_content'})\nconsole.log(dataMapped) // =\u003e {bar: 'foo_content', foo: 'foo_content'}\n\n// basic deep keymap\nkeyMapping.setKeymap({sub: {subsub: {foo: 'bar'}}})\ndataMapped = keyMapping.map(\n    {foo: 'foo_content'}\n,   {   keymapTree: ['sub', 'subsub']\n    ,   onlyMappedVars: true\n    }\n)\nconsole.log(dataMapped) // =\u003e {bar: 'foo_content'}\n\n// custom functions\nkeyMapping.setKeymap({\n    'newKey': (data) =\u003e data.foo+'-'+data.bar\n})\ndataMapped = keyMapping.map(\n    {foo: 'foo', bar: 'bar'} // data2map\n,   {onlyMappedVars: true}  // options or callback\n)\nconsole.log(datMapped) // =\u003e {newKey: 'foo-bar'}\n\n```\n\u003e for more examples have a look at the mocha tests\n\n## Roadmap\n* 0.2.0     - finish basic tests\n* 0.1.6     - remove lodash dependecy (?)\n* 0.1.45    - added travis build hook\n* 0.1.44    - fixxed bug (mappedKey \u003e originalKey)\n* 0.1.41    - added callback tests\n* 0.1.4     - added tests\n* 0.1.2     - dist folder is new entrypoint\n\n## TBD\n* assert.throws doesn't fail on wrong Error msg (@tests: 'select wrong subtree')\n* keymap handling in constructor !?\n\n## Bugs\nif you find a bug, please report them [@Issues](https://github.com/DoubleU23/tailored-keymapping/issues\n)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoubleu23%2Ftailored-keymapping","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoubleu23%2Ftailored-keymapping","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoubleu23%2Ftailored-keymapping/lists"}