UNPKG

foop

Version:

interfaces that describe their intentions.

92 lines (84 loc) 6.2 kB
var hasIn = require('../../is/in') var ignored = require('../../meta/ignored') var ObjectKeys = require('../../util/keys') var ObjectAssign = require('../../util/assign') /** * @desc recursively reduce maps and objects that include reducable data * @since 4.0.0 * @version 5.0.0 <- moved from /reduce to loop/reduce * * @param {Object | any} reduced merged object and reduced * @return {Function} Function(values: Object) * * @sig reduced => object => isMap(object) -> reduced; merge(object, reduced) * * @see https://www.airpair.com/javascript/javascript-array-reduce * @see ChainedMap * @NOTE could curry, but this is super hot function * * @example * * const map = new Map() * map.set('eh', true) * const nested = new Map() * nested.set('reduced', true) * * const chain = { * entries() { * return { * nested: reduce(nested), * key: true, * } * }, * } * const reduced = reduce(map) * reduceEntries(reduced)({chain}) * //=> { * eh: true, * chain: { * nested: { * reduced: true, * key: true, * }, * }, * } * * @example * * const reducedIgnored = { * canada: { * store: chain, * }, * } * const ignored = reduceEntries(reduced)(reducedIgnored) * //=> { * eh: true, * chain: { * nested: { * reduced: true, * }, * key: true, * }, * } * */ module.exports = function (reduced) { return function (obj) { var keys = ObjectKeys(obj) // const filter = (value, key) => // !ignored(key) && hasIn(value, 'entries') // const transform = (value, key) => // ObjectAssign(reduced, {[key]: value.entries(true) || {}}) // mapFilterWhere(obj, filter, transform) for (var k = 0; k < keys.length; k++) { var key = keys[k] if (ignored(key)) { continue } var value = obj[key] if (hasIn(value, 'entries')) { ObjectAssign(reduced, {[key]: value.entries(true) || {}}) } } return reduced }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlTWFwUmVjdXJzaXZlLmpzIiwic291cmNlcyI6WyJyZWR1Y2VNYXBSZWN1cnNpdmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaGFzSW4gPSByZXF1aXJlKCcuLi8uLi9pcy9pbicpXG5jb25zdCBpZ25vcmVkID0gcmVxdWlyZSgnLi4vLi4vbWV0YS9pZ25vcmVkJylcbmNvbnN0IE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi8uLi91dGlsL2tleXMnKVxuY29uc3QgT2JqZWN0QXNzaWduID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9hc3NpZ24nKVxuXG4vKipcbiAqIEBkZXNjIHJlY3Vyc2l2ZWx5IHJlZHVjZSBtYXBzIGFuZCBvYmplY3RzIHRoYXQgaW5jbHVkZSByZWR1Y2FibGUgZGF0YVxuICogQHNpbmNlIDQuMC4wXG4gKiBAdmVyc2lvbiA1LjAuMCA8LSBtb3ZlZCBmcm9tIC9yZWR1Y2UgdG8gbG9vcC9yZWR1Y2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdCB8IGFueX0gcmVkdWNlZCBtZXJnZWQgb2JqZWN0IGFuZCByZWR1Y2VkXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gRnVuY3Rpb24odmFsdWVzOiBPYmplY3QpXG4gKlxuICogQHNpZyByZWR1Y2VkID0+IG9iamVjdCA9PiBpc01hcChvYmplY3QpIC0+IHJlZHVjZWQ7IG1lcmdlKG9iamVjdCwgcmVkdWNlZClcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmFpcnBhaXIuY29tL2phdmFzY3JpcHQvamF2YXNjcmlwdC1hcnJheS1yZWR1Y2VcbiAqIEBzZWUgQ2hhaW5lZE1hcFxuICogQE5PVEUgY291bGQgY3VycnksIGJ1dCB0aGlzIGlzIHN1cGVyIGhvdCBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICBjb25zdCBtYXAgPSBuZXcgTWFwKClcbiAqICAgbWFwLnNldCgnZWgnLCB0cnVlKVxuICogICBjb25zdCBuZXN0ZWQgPSBuZXcgTWFwKClcbiAqICAgbmVzdGVkLnNldCgncmVkdWNlZCcsIHRydWUpXG4gKlxuICogICBjb25zdCBjaGFpbiA9IHtcbiAqICAgICBlbnRyaWVzKCkge1xuICogICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgbmVzdGVkOiByZWR1Y2UobmVzdGVkKSxcbiAqICAgICAgICAga2V5OiB0cnVlLFxuICogICAgICAgfVxuICogICAgIH0sXG4gKiAgIH1cbiAqICAgY29uc3QgcmVkdWNlZCA9IHJlZHVjZShtYXApXG4gKiAgIHJlZHVjZUVudHJpZXMocmVkdWNlZCkoe2NoYWlufSlcbiAqICAgLy89PiB7XG4gKiAgICAgZWg6IHRydWUsXG4gKiAgICAgY2hhaW46IHtcbiAqICAgICAgIG5lc3RlZDoge1xuICogICAgICAgICByZWR1Y2VkOiB0cnVlLFxuICogICAgICAgICBrZXk6IHRydWUsXG4gKiAgICAgICB9LFxuICogICAgIH0sXG4gKiAgIH1cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgY29uc3QgcmVkdWNlZElnbm9yZWQgPSB7XG4gKiAgICAgY2FuYWRhOiB7XG4gKiAgICAgICBzdG9yZTogY2hhaW4sXG4gKiAgICAgfSxcbiAqICAgfVxuICogICBjb25zdCBpZ25vcmVkID0gcmVkdWNlRW50cmllcyhyZWR1Y2VkKShyZWR1Y2VkSWdub3JlZClcbiAqICAgLy89PiB7XG4gKiAgICAgZWg6IHRydWUsXG4gKiAgICAgY2hhaW46IHtcbiAqICAgICAgIG5lc3RlZDoge1xuICogICAgICAgICByZWR1Y2VkOiB0cnVlLFxuICogICAgICAgfSxcbiAqICAgICAgIGtleTogdHJ1ZSxcbiAqICAgICB9LFxuICogICB9XG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHJlZHVjZWQgPT4gb2JqID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdEtleXMob2JqKVxuXG4gIC8vIGNvbnN0IGZpbHRlciA9ICh2YWx1ZSwga2V5KSA9PlxuICAvLyAgICFpZ25vcmVkKGtleSkgJiYgaGFzSW4odmFsdWUsICdlbnRyaWVzJylcbiAgLy8gY29uc3QgdHJhbnNmb3JtID0gKHZhbHVlLCBrZXkpID0+XG4gIC8vICAgT2JqZWN0QXNzaWduKHJlZHVjZWQsIHtba2V5XTogdmFsdWUuZW50cmllcyh0cnVlKSB8fCB7fX0pXG4gIC8vIG1hcEZpbHRlcldoZXJlKG9iaiwgZmlsdGVyLCB0cmFuc2Zvcm0pXG5cbiAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1trXVxuXG4gICAgaWYgKGlnbm9yZWQoa2V5KSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICBpZiAoaGFzSW4odmFsdWUsICdlbnRyaWVzJykpIHtcbiAgICAgIE9iamVjdEFzc2lnbihyZWR1Y2VkLCB7W2tleV06IHZhbHVlLmVudHJpZXModHJ1ZSkgfHwge319KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWR1Y2VkXG59XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDcENBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0FBQzdDQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUM3Q0EsR0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOERqRCxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUEsT0FBTyxDQUFBLENBQUMsQUFBRyxTQUFBLFVBQUEsR0FBRyxDQUFBLENBQUMsQUFBRztFQUNqQ0EsR0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDOzs7Ozs7OztFQVE1QixLQUFLQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNwQ0QsR0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNoQixRQUFRO0tBQ1Q7O0lBRURBLEdBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7SUFFdEIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQzNCLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0dBQ0Y7O0VBRUQsT0FBTyxPQUFPO0NBQ2YsR0FBQTsifQ==