import { curry, over, lensPath, mergeLeft } from 'ramda'; /** * Create a new object with the own properties of the object under the `path` * merged with the own properties of the provided `source`. * If a key exists in both objects, the value from the `source` object will be used. * * @func mergePath * @memberOf RA * @since {@link https://char0n.github.io/ramda-adjunct/1.18.0|v1.18.0} * @category Object * @sig [k] -> {a} -> {k: {a}} -> {k: {a}} * @see {@link RA.mergeProp|mergeProp} * @param {!Array} path The property path of the destination object * @param {!Object} source The source object * @param {!Object} obj The object that has destination object under corresponding property path * @return {!Object} The new version of object * @example * * RA.mergePath( * ['outer', 'inner'], * { foo: 3, bar: 4 }, * { outer: { inner: { foo: 2 } } } * ); //=> { outer: { inner: { foo: 3, bar: 4 } } */ const mergePath = curry((path, source, obj) => over(lensPath(path), mergeLeft(source), obj) ); export default mergePath;