chain-able
Version:
interfaces that describe their intentions.
61 lines (53 loc) • 5.77 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlcyI6WyJtYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL3V0aWwva2V5cycpXG5jb25zdCBpc01hcCA9IHJlcXVpcmUoJy4uL2lzL21hcCcpXG5jb25zdCBpc0ZhbHNlID0gcmVxdWlyZSgnLi4vaXMvZmFsc2UnKVxuY29uc3QgcmVkdWNlID0gcmVxdWlyZSgnLi4vcmVkdWNlJylcbmNvbnN0IGRvcGVtZXJnZSA9IHJlcXVpcmUoJy4vZG9wZW1lcmdlJylcblxuZnVuY3Rpb24gZG9wZW1lcmdlTWFwKG9iajEsIG9iajIpIHtcbiAgY29uc3Qgb25lSXNNYXAgPSBpc01hcChvYmoxKVxuICBjb25zdCB0d29Jc01hcCA9IGlzTWFwKG9iajIpXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvbnN0IGVxID0gKG9uZSwgdHdvKSA9PiBvbmVJc01hcCA9PSBvbmUgJiYgdHdvSXNNYXAgPT0gdHdvXG5cbiAgbGV0IGRlc3QgPSBvYmoxXG4gIGxldCBzcmMgPSBvYmoyXG5cbiAgLyogcHJldHRpZXItaWdub3JlICovXG4gIC8vIGJvdGggbWFwc1xuICBpZiAoZXEodHJ1ZSwgdHJ1ZSkpIHtcbiAgICBzcmMgPSByZWR1Y2Uob2JqMilcbiAgfVxuICAvLyBvYmoxIGlzIG1hcFxuICBlbHNlIGlmIChlcSh0cnVlLCBmYWxzZSkpIHtcbiAgICBzcmMgPSBvYmoyXG4gIH1cbiAgLy8gb2JqMiBpcyBtYXBcbiAgZWxzZSBpZiAoZXEoZmFsc2UsIHRydWUpKSB7XG4gICAgc3JjID0gcmVkdWNlKG9iajIpXG4gIH1cbiAgLy8gZmFsc2UsIGZhbHNlXG4gIGVsc2Uge1xuICAgIHJldHVybiBkb3BlbWVyZ2Uob2JqMSwgb2JqMilcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKHNyYylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgIGlmIChpc0ZhbHNlKGRlc3QuaGFzKGtleSkpKSB7XG4gICAgICBkZXN0LnNldChrZXksIHNyY1trZXldKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRlc3Quc2V0KGtleSwgZG9wZW1lcmdlKGRlc3QuZ2V0KGtleSksIHNyY1trZXldKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdFxufVxuXG4vLyB0ZXN0XG52YXIgdGFyZ2V0TWFwID0gbmV3IE1hcCgpXG50YXJnZXRNYXAuc2V0KCd0cnVlJywgZmFsc2UpXG50YXJnZXRNYXAuc2V0KCdvYmonLCB7b2JqOiBbXX0pXG50YXJnZXRNYXAuc2V0KCdhcnInLCBbMV0pXG52YXIgc3JjTWFwID0gbmV3IE1hcCgpXG5zcmNNYXAuc2V0KCd0cnVlJywgdHJ1ZSlcbnNyY01hcC5zZXQoJ29iaicsIHtvYmo6IFtTeW1ib2xdfSlcbnNyY01hcC5zZXQoJ2FycicsIFsyXSlcbnNyY01hcC5zZXQoJ2VtcHR5QXJyJywgW10pXG52YXIgbWVyZ2VkTWFwID0gZG9wZW1lcmdlTWFwKHRhcmdldE1hcCwgc3JjTWFwLCB7Y2xvbmU6IHRydWV9KVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbENBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ25DQSxHQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7O0FBRXhDLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDaENBLEdBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztFQUM1QkEsR0FBSyxD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