UNPKG

foop

Version:

interfaces that describe their intentions.

75 lines (67 loc) 5.83 kB
/* istanbul ignore next: WIP */ var ObjectKeys = require('../util/keys') var isMap = require('../is/map') var isFalse = require('../is/false') var reduce = require('../reduce') var dopemerge = require('./dopemerge') /** * merge maps & sets * @memberOf dopemerge * * @param {Map | Set} obj1 merge with 2 * @param {Map | Set} obj2 merge with 1 * @return {Map | Set} merged * * @TODO easy clone * * @example * * 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}) * */ module.exports = 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 } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlcyI6WyJtYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFdJUCAqL1xuXG5jb25zdCBPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vdXRpbC9rZXlzJylcbmNvbnN0IGlzTWFwID0gcmVxdWlyZSgnLi4vaXMvbWFwJylcbmNvbnN0IGlzRmFsc2UgPSByZXF1aXJlKCcuLi9pcy9mYWxzZScpXG5jb25zdCByZWR1Y2UgPSByZXF1aXJlKCcuLi9yZWR1Y2UnKVxuY29uc3QgZG9wZW1lcmdlID0gcmVxdWlyZSgnLi9kb3BlbWVyZ2UnKVxuXG4vKipcbiAqIG1lcmdlIG1hcHMgJiBzZXRzXG4gKiBAbWVtYmVyT2YgZG9wZW1lcmdlXG4gKlxuICogQHBhcmFtICB7TWFwIHwgU2V0fSBvYmoxIG1lcmdlIHdpdGggMlxuICogQHBhcmFtICB7TWFwIHwgU2V0fSBvYmoyIG1lcmdlIHdpdGggMVxuICogQHJldHVybiB7TWFwIHwgU2V0fSBtZXJnZWRcbiAqXG4gKiBAVE9ETyBlYXN5IGNsb25lXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIHZhciB0YXJnZXRNYXAgPSBuZXcgTWFwKClcbiAqICAgdGFyZ2V0TWFwLnNldCgndHJ1ZScsIGZhbHNlKVxuICogICB0YXJnZXRNYXAuc2V0KCdvYmonLCB7b2JqOiBbXX0pXG4gKiAgIHRhcmdldE1hcC5zZXQoJ2FycicsIFsxXSlcbiAqICAgdmFyIHNyY01hcCA9IG5ldyBNYXAoKVxuICogICBzcmNNYXAuc2V0KCd0cnVlJywgdHJ1ZSlcbiAqICAgc3JjTWFwLnNldCgnb2JqJywge29iajogW1N5bWJvbF19KVxuICogICBzcmNNYXAuc2V0KCdhcnInLCBbMl0pXG4gKiAgIHNyY01hcC5zZXQoJ2VtcHR5QXJyJywgW10pXG4gKiAgIHZhciBtZXJnZWRNYXAgPSBkb3BlbWVyZ2VNYXAodGFyZ2V0TWFwLCBzcmNNYXAsIHtjbG9uZTogdHJ1ZX0pXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRvcGVtZXJnZU1hcChvYmoxLCBvYmoyKSB7XG4gIGNvbnN0IG9uZUlzTWFwID0gaXNNYXAob2JqMSlcbiAgY29uc3QgdHdvSXNNYXAgPSBpc01hcChvYmoyKVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBjb25zdCBlcSA9IChvbmUsIHR3bykgPT4gb25lSXNNYXAgPT0gb25lICYmIHR3b0lzTWFwID09IHR3b1xuXG4gIGxldCBkZXN0ID0gb2JqMVxuICBsZXQgc3JjID0gb2JqMlxuXG4gIC8qIHByZXR0aWVyLWlnbm9yZSAqL1xuICAvLyBib3RoIG1hcHNcbiAgaWYgKGVxKHRydWUsIHRydWUpKSB7XG4gICAgc3JjID0gcmVkdWNlKG9iajIpXG4gIH1cbiAgLy8gb2JqMSBpcyBtYXBcbiAgZWxzZSBpZiAoZXEodHJ1ZSwgZmFsc2UpKSB7XG4gICAgc3JjID0gb2JqMlxuICB9XG4gIC8vIG9iajIgaXMgbWFwXG4gIGVsc2UgaWYgKGVxKGZhbHNlLCB0cnVlKSkge1xuICAgIHNyYyA9IHJlZHVjZShvYmoyKVxuICB9XG4gIC8vIGZhbHNlLCBmYWxzZVxuICBlbHNlIHtcbiAgICByZXR1cm4gZG9wZW1lcmdlKG9iajEsIG9iajIpXG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0S2V5cyhzcmMpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICBpZiAoaXNGYWxzZShkZXN0LmhhcyhrZXkpKSkge1xuICAgICAgZGVzdC5zZXQoa2V5LCBzcmNba2V5XSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkZXN0LnNldChrZXksIGRvcGVtZXJnZShkZXN0LmdldChrZXkpLCBzcmNba2V5XSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlc3Rcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUFBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUMxQ0EsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2xDQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdENBLEdBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNuQ0EsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCeEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0VBQ2pEQSxHQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDNUJBLEdBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQzs7O0VBRzVCQSxHQUFLLENBQUMsRUFBRSxHQUFHLFNBQUEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEFBQUcsU0FBQSxRQUFRLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxHQUFHLEdBQUE7O0VBRTNEQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUk7RUFDZkEsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJOzs7O0VBSWQsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO0lBQ2xCLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0dBQ25COztPQUVJLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtJQUN4QixHQUFHLEdBQUcsSUFBSTtHQUNYOztPQUVJLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtJQUN4QixHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztHQUNuQjs7T0FFSTtJQUNILE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7R0FDN0I7O0VBRURELEdBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztFQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNwQ0EsR0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtNQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FDSTtNQUNILElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0dBQ0Y7O0VBRUQsT0FBTyxJQUFJO0NBQ1o7In0=