UNPKG

chain-able

Version:

interfaces that describe their intentions.

61 lines (53 loc) 5.77 kB
var ObjectKeys = require('../util/keys') var isMap = require('../is/map') var isFalse = require('../is/false') var reduce = require('../reduce') var dopemerge = require('./dopemerge') function dopemergeMap(obj1, obj2) { var oneIsMap = isMap(obj1) var twoIsMap = isMap(obj2) // eslint-disable-next-line var eq = function (one, two) { return oneIsMap == one && twoIsMap == two; } var dest = obj1 var src = obj2 /* prettier-ignore */ // both maps if (eq(true, true)) { src = reduce(obj2) } // obj1 is map else if (eq(true, false)) { src = obj2 } // obj2 is map else if (eq(false, true)) { src = reduce(obj2) } // false, false else { return dopemerge(obj1, obj2) } var keys = ObjectKeys(src) for (var i = 0; i < keys.length; i++) { var key = keys[i] if (isFalse(dest.has(key))) { dest.set(key, src[key]) } else { dest.set(key, dopemerge(dest.get(key), src[key])) } } return dest } // test var targetMap = new Map() targetMap.set('true', false) targetMap.set('obj', {obj: []}) targetMap.set('arr', [1]) var srcMap = new Map() srcMap.set('true', true) srcMap.set('obj', {obj: [Symbol]}) srcMap.set('arr', [2]) srcMap.set('emptyArr', []) var mergedMap = dopemergeMap(targetMap, srcMap, {clone: true}) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlcyI6WyJtYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL3V0aWwva2V5cycpXG5jb25zdCBpc01hcCA9IHJlcXVpcmUoJy4uL2lzL21hcCcpXG5jb25zdCBpc0ZhbHNlID0gcmVxdWlyZSgnLi4vaXMvZmFsc2UnKVxuY29uc3QgcmVkdWNlID0gcmVxdWlyZSgnLi4vcmVkdWNlJylcbmNvbnN0IGRvcGVtZXJnZSA9IHJlcXVpcmUoJy4vZG9wZW1lcmdlJylcblxuZnVuY3Rpb24gZG9wZW1lcmdlTWFwKG9iajEsIG9iajIpIHtcbiAgY29uc3Qgb25lSXNNYXAgPSBpc01hcChvYmoxKVxuICBjb25zdCB0d29Jc01hcCA9IGlzTWFwKG9iajIpXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvbnN0IGVxID0gKG9uZSwgdHdvKSA9PiBvbmVJc01hcCA9PSBvbmUgJiYgdHdvSXNNYXAgPT0gdHdvXG5cbiAgbGV0IGRlc3QgPSBvYmoxXG4gIGxldCBzcmMgPSBvYmoyXG5cbiAgLyogcHJldHRpZXItaWdub3JlICovXG4gIC8vIGJvdGggbWFwc1xuICBpZiAoZXEodHJ1ZSwgdHJ1ZSkpIHtcbiAgICBzcmMgPSByZWR1Y2Uob2JqMilcbiAgfVxuICAvLyBvYmoxIGlzIG1hcFxuICBlbHNlIGlmIChlcSh0cnVlLCBmYWxzZSkpIHtcbiAgICBzcmMgPSBvYmoyXG4gIH1cbiAgLy8gb2JqMiBpcyBtYXBcbiAgZWxzZSBpZiAoZXEoZmFsc2UsIHRydWUpKSB7XG4gICAgc3JjID0gcmVkdWNlKG9iajIpXG4gIH1cbiAgLy8gZmFsc2UsIGZhbHNlXG4gIGVsc2Uge1xuICAgIHJldHVybiBkb3BlbWVyZ2Uob2JqMSwgb2JqMilcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKHNyYylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGlmIChpc0ZhbHNlKGRlc3QuaGFzKGtleSkpKSB7XG4gICAgICBkZXN0LnNldChrZXksIHNyY1trZXldKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRlc3Quc2V0KGtleSwgZG9wZW1lcmdlKGRlc3QuZ2V0KGtleSksIHNyY1trZXldKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdFxufVxuXG4vLyB0ZXN0XG52YXIgdGFyZ2V0TWFwID0gbmV3IE1hcCgpXG50YXJnZXRNYXAuc2V0KCd0cnVlJywgZmFsc2UpXG50YXJnZXRNYXAuc2V0KCdvYmonLCB7b2JqOiBbXX0pXG50YXJnZXRNYXAuc2V0KCdhcnInLCBbMV0pXG52YXIgc3JjTWFwID0gbmV3IE1hcCgpXG5zcmNNYXAuc2V0KCd0cnVlJywgdHJ1ZSlcbnNyY01hcC5zZXQoJ29iaicsIHtvYmo6IFtTeW1ib2xdfSlcbnNyY01hcC5zZXQoJ2FycicsIFsyXSlcbnNyY01hcC5zZXQoJ2VtcHR5QXJyJywgW10pXG52YXIgbWVyZ2VkTWFwID0gZG9wZW1lcmdlTWFwKHRhcmdldE1hcCwgc3JjTWFwLCB7Y2xvbmU6IHRydWV9KVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbENBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ25DQSxHQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7O0FBRXhDLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDaENBLEdBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztFQUM1QkEsR0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDOzs7RUFHNUJBLEdBQUssQ0FBQyxFQUFFLEdBQUcsU0FBQSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQUFBRyxTQUFBLFFBQVEsSUFBSSxHQUFHLElBQUksUUFBUSxJQUFJLEdBQUcsR0FBQTs7RUFFM0RDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSTtFQUNmQSxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUk7Ozs7RUFJZCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7SUFDbEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7R0FDbkI7O09BRUksSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0lBQ3hCLEdBQUcsR0FBRyxJQUFJO0dBQ1g7O09BRUksSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO0lBQ3hCLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0dBQ25COztPQUVJO0lBQ0gsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztHQUM3Qjs7RUFFREQsR0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0VBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDQSxHQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN4QjtTQUNJO01BQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7R0FDRjs7RUFFRCxPQUFPLElBQUk7Q0FDWjs7O0FBR0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDekIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0FBQzVCLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztBQUMxQixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzsifQ==