chain-able
Version:
interfaces that describe their intentions.
82 lines (76 loc) • 5.2 kB
JavaScript
var isFunction = require('../is/function')
var ignored = require('../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 ChainedMap
*
* @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)
for (var k = 0; k < keys.length; k++) {
var key = keys[k]
if (ignored(key)) {
continue
}
var val = obj[key]
if (val && isFunction(val.entries)) {
ObjectAssign(reduced, {[key]: val.entries(true) || {}})
}
}
return reduced
}; }
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cmllcy5qcyIsInNvdXJjZXMiOlsiZW50cmllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi4vaXMvZnVuY3Rpb24nKVxuY29uc3QgaWdub3JlZCA9IHJlcXVpcmUoJy4uL2lnbm9yZWQnKVxuY29uc3QgT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL3V0aWwva2V5cycpXG5jb25zdCBPYmplY3RBc3NpZ24gPSByZXF1aXJlKCcuLi91dGlsL2Fzc2lnbicpXG5cbi8qKlxuICogQGRlc2MgcmVjdXJzaXZlbHkgcmVkdWNlIG1hcHMgYW5kIG9iamVjdHMgdGhhdCBpbmNsdWRlIHJlZHVjYWJsZSBkYXRhXG4gKiBAc2luY2UgNC4wLjBcbiAqXG4gKiBAc2lnIHJlZHVjZWQgPT4gb2JqZWN0ID0+IGlzTWFwKG9iamVjdCkgLT4gcmVkdWNlZDsgbWVyZ2Uob2JqZWN0LCByZWR1Y2VkKVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0IHwgYW55fSByZWR1Y2VkIG1lcmdlZCBvYmplY3QgYW5kIHJlZHVjZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBGdW5jdGlvbih2YWx1ZXM6IE9iamVjdClcbiAqXG4gKiBAc2VlIENoYWluZWRNYXBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgY29uc3QgbWFwID0gbmV3IE1hcCgpXG4gKiAgIG1hcC5zZXQoJ2VoJywgdHJ1ZSlcbiAqICAgY29uc3QgbmVzdGVkID0gbmV3IE1hcCgpXG4gKiAgIG5lc3RlZC5zZXQoJ3JlZHVjZWQnLCB0cnVlKVxuICpcbiAqICAgY29uc3QgY2hhaW4gPSB7XG4gKiAgICAgZW50cmllcygpIHtcbiAqICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgIG5lc3RlZDogcmVkdWNlKG5lc3RlZCksXG4gKiAgICAgICAgIGtleTogdHJ1ZSxcbiAqICAgICAgIH1cbiAqICAgICB9LFxuICogICB9XG4gKiAgIGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobWFwKVxuICogICByZWR1Y2VFbnRyaWVzKHJlZHVjZWQpKHtjaGFpbn0pXG4gKiAgIC8vID0+IHtcbiAqICAgICBlaDogdHJ1ZSxcbiAqICAgICBjaGFpbjoge1xuICogICAgICAgbmVzdGVkOiB7XG4gKiAgICAgICAgIHJlZHVjZWQ6IHRydWUsXG4gKiAgICAgICAgIGtleTogdHJ1ZSxcbiAqICAgICAgIH0sXG4gKiAgICAgfSxcbiAqICAgfVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICBjb25zdCByZWR1Y2VkSWdub3JlZCA9IHtcbiAqICAgICBjYW5hZGE6IHtcbiAqICAgICAgIHN0b3JlOiBjaGFpbixcbiAqICAgICB9LFxuICogICB9XG4gKiAgIGNvbnN0IGlnbm9yZWQgPSByZWR1Y2VFbnRyaWVzKHJlZHVjZWQpKHJlZHVjZWRJZ25vcmVkKVxuICogICAvLz0+IHtcbiAqICAgICBlaDogdHJ1ZSxcbiAqICAgICBjaGFpbjoge1xuICogICAgICAgbmVzdGVkOiB7XG4gKiAgICAgICAgIHJlZHVjZWQ6IHRydWUsXG4gKiAgICAgICB9LFxuICogICAgICAga2V5OiB0cnVlLFxuICogICAgIH0sXG4gKiAgIH1cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcmVkdWNlZCA9PiBvYmogPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0S2V5cyhvYmopXG5cbiAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1trXVxuXG4gICAgaWYgKGlnbm9yZWQoa2V5KSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCB2YWwgPSBvYmpba2V5XVxuICAgIGlmICh2YWwgJiYgaXNGdW5jdGlvbih2YWwuZW50cmllcykpIHtcbiAgICAgIE9iamVjdEFzc2lnbihyZWR1Y2VkLCB7W2tleV06IHZhbC5lbnRyaWVzKHRydWUpIHx8IHt9fSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVkdWNlZFxufVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDNUNBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUNyQ0EsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFDQSxHQUFLLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRDlDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBQSxPQUFPLENBQUEsQ0FBQyxBQUFHLFNBQUEsVUFBQSxHQUFHLENBQUEsQ0FBQyxBQUFHO0VBQ2pDQSxHQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7O0VBRTVCLEtBQUtDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDRCxHQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRW5CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2hCLFFBQVE7S0FDVDs7SUFFREEsR0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7TUFDbEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7S0FDeEQ7R0FDRjs7RUFFRCxPQUFPLE9BQU87Q0FDZixHQUFBOyJ9