UNPKG

foop

Version:

interfaces that describe their intentions.

94 lines (87 loc) 6.54 kB
var isFunction = require('../is/function') var isObj = require('../is/obj') 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 * * @sig reduced => object => isMap(object) -> reduced; merge(object, reduced) * * @param {Object | any} reduced merged object and reduced * @return {Function} Function(values: Object) * * @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] // @NOTE could use hasInMatching here // isObj(value) && isFunction(value.entries) if (hasIn(value, 'entries')) { ObjectAssign(reduced, {[key]: value.entries(true) || {}}) } } return reduced }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cmllcy5qcyIsInNvdXJjZXMiOlsiZW50cmllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi4vaXMvZnVuY3Rpb24nKVxuY29uc3QgaXNPYmogPSByZXF1aXJlKCcuLi9pcy9vYmonKVxuY29uc3QgaGFzSW4gPSByZXF1aXJlKCcuLi9pcy9pbicpXG5jb25zdCBpZ25vcmVkID0gcmVxdWlyZSgnLi4vbWV0YS9pZ25vcmVkJylcbmNvbnN0IE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi91dGlsL2tleXMnKVxuY29uc3QgT2JqZWN0QXNzaWduID0gcmVxdWlyZSgnLi4vdXRpbC9hc3NpZ24nKVxuXG4vKipcbiAqIEBkZXNjIHJlY3Vyc2l2ZWx5IHJlZHVjZSBtYXBzIGFuZCBvYmplY3RzIHRoYXQgaW5jbHVkZSByZWR1Y2FibGUgZGF0YVxuICogQHNpbmNlIDQuMC4wXG4gKlxuICogQHNpZyByZWR1Y2VkID0+IG9iamVjdCA9PiBpc01hcChvYmplY3QpIC0+IHJlZHVjZWQ7IG1lcmdlKG9iamVjdCwgcmVkdWNlZClcbiAqXG4gKiBAcGFyYW0ge09iamVjdCB8IGFueX0gcmVkdWNlZCBtZXJnZWQgb2JqZWN0IGFuZCByZWR1Y2VkXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gRnVuY3Rpb24odmFsdWVzOiBPYmplY3QpXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5haXJwYWlyLmNvbS9qYXZhc2NyaXB0L2phdmFzY3JpcHQtYXJyYXktcmVkdWNlXG4gKiBAc2VlIENoYWluZWRNYXBcbiAqIEBOT1RFIGNvdWxkIGN1cnJ5LCBidXQgdGhpcyBpcyBzdXBlciBob3QgZnVuY3Rpb25cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgY29uc3QgbWFwID0gbmV3IE1hcCgpXG4gKiAgIG1hcC5zZXQoJ2VoJywgdHJ1ZSlcbiAqICAgY29uc3QgbmVzdGVkID0gbmV3IE1hcCgpXG4gKiAgIG5lc3RlZC5zZXQoJ3JlZHVjZWQnLCB0cnVlKVxuICpcbiAqICAgY29uc3QgY2hhaW4gPSB7XG4gKiAgICAgZW50cmllcygpIHtcbiAqICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgIG5lc3RlZDogcmVkdWNlKG5lc3RlZCksXG4gKiAgICAgICAgIGtleTogdHJ1ZSxcbiAqICAgICAgIH1cbiAqICAgICB9LFxuICogICB9XG4gKiAgIGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobWFwKVxuICogICByZWR1Y2VFbnRyaWVzKHJlZHVjZWQpKHtjaGFpbn0pXG4gKiAgIC8vPT4ge1xuICogICAgIGVoOiB0cnVlLFxuICogICAgIGNoYWluOiB7XG4gKiAgICAgICBuZXN0ZWQ6IHtcbiAqICAgICAgICAgcmVkdWNlZDogdHJ1ZSxcbiAqICAgICAgICAga2V5OiB0cnVlLFxuICogICAgICAgfSxcbiAqICAgICB9LFxuICogICB9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIGNvbnN0IHJlZHVjZWRJZ25vcmVkID0ge1xuICogICAgIGNhbmFkYToge1xuICogICAgICAgc3RvcmU6IGNoYWluLFxuICogICAgIH0sXG4gKiAgIH1cbiAqICAgY29uc3QgaWdub3JlZCA9IHJlZHVjZUVudHJpZXMocmVkdWNlZCkocmVkdWNlZElnbm9yZWQpXG4gKiAgIC8vPT4ge1xuICogICAgIGVoOiB0cnVlLFxuICogICAgIGNoYWluOiB7XG4gKiAgICAgICBuZXN0ZWQ6IHtcbiAqICAgICAgICAgcmVkdWNlZDogdHJ1ZSxcbiAqICAgICAgIH0sXG4gKiAgICAgICBrZXk6IHRydWUsXG4gKiAgICAgfSxcbiAqICAgfVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSByZWR1Y2VkID0+IG9iaiA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKG9iailcblxuICAvLyBjb25zdCBmaWx0ZXIgPSAodmFsdWUsIGtleSkgPT5cbiAgLy8gICAhaWdub3JlZChrZXkpICYmIGhhc0luKHZhbHVlLCAnZW50cmllcycpXG4gIC8vIGNvbnN0IHRyYW5zZm9ybSA9ICh2YWx1ZSwga2V5KSA9PlxuICAvLyAgIE9iamVjdEFzc2lnbihyZWR1Y2VkLCB7W2tleV06IHZhbHVlLmVudHJpZXModHJ1ZSkgfHwge319KVxuICAvLyBtYXBGaWx0ZXJXaGVyZShvYmosIGZpbHRlciwgdHJhbnNmb3JtKVxuXG4gIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNba11cblxuICAgIGlmIChpZ25vcmVkKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuICAgIC8vIEBOT1RFIGNvdWxkIHVzZSBoYXNJbk1hdGNoaW5nIGhlcmVcbiAgICAvLyBpc09iaih2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lbnRyaWVzKVxuICAgIGlmIChoYXNJbih2YWx1ZSwgJ2VudHJpZXMnKSkge1xuICAgICAgT2JqZWN0QXNzaWduKHJlZHVjZWQsIHtba2V5XTogdmFsdWUuZW50cmllcyh0cnVlKSB8fCB7fX0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZHVjZWRcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzVDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbENBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNqQ0EsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7QUFDMUNBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUMxQ0EsR0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2RDlDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBQSxPQUFPLENBQUEsQ0FBQyxBQUFHLFNBQUEsVUFBQSxHQUFHLENBQUEsQ0FBQyxBQUFHO0VBQ2pDQSxHQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7O0VBUTVCLEtBQUtDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDRCxHQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRW5CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2hCLFFBQVE7S0FDVDs7SUFFREEsR0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDOzs7SUFHdEIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQzNCLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0dBQ0Y7O0VBRUQsT0FBTyxPQUFPO0NBQ2YsR0FBQTsifQ==