diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/camelcase-keys/index.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/camelcase-keys/index.js')
| -rw-r--r-- | node_modules/camelcase-keys/index.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/node_modules/camelcase-keys/index.js b/node_modules/camelcase-keys/index.js new file mode 100644 index 00000000..c2f4aefd --- /dev/null +++ b/node_modules/camelcase-keys/index.js @@ -0,0 +1,41 @@ +'use strict'; +const mapObj = require('map-obj'); +const camelCase = require('camelcase'); +const QuickLru = require('quick-lru'); + +const has = (arr, key) => arr.some(x => typeof x === 'string' ? x === key : x.test(key)); +const cache = new QuickLru({maxSize: 100000}); + +const camelCaseConvert = (input, opts) => { + opts = Object.assign({ + deep: false + }, opts); + + const exclude = opts.exclude; + + return mapObj(input, (key, val) => { + if (!(exclude && has(exclude, key))) { + if (cache.has(key)) { + key = cache.get(key); + } else { + const ret = camelCase(key); + + if (key.length < 100) { // Prevent abuse + cache.set(key, ret); + } + + key = ret; + } + } + + return [key, val]; + }, {deep: opts.deep}); +}; + +module.exports = (input, opts) => { + if (Array.isArray(input)) { + return Object.keys(input).map(key => camelCaseConvert(input[key], opts)); + } + return camelCaseConvert(input, opts); +}; + |
