'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); };