| var _curry3 = |
| /*#__PURE__*/ |
| require("./internal/_curry3"); |
| |
| var _has = |
| /*#__PURE__*/ |
| require("./internal/_has"); |
| |
| var _isArray = |
| /*#__PURE__*/ |
| require("./internal/_isArray"); |
| |
| var _isInteger = |
| /*#__PURE__*/ |
| require("./internal/_isInteger"); |
| |
| var assoc = |
| /*#__PURE__*/ |
| require("./assoc"); |
| |
| var isNil = |
| /*#__PURE__*/ |
| require("./isNil"); |
| /** |
| * Makes a shallow clone of an object, setting or overriding the nodes required |
| * to create the given path, and placing the specific value at the tail end of |
| * that path. Note that this copies and flattens prototype properties onto the |
| * new object as well. All non-primitive properties are copied by reference. |
| * |
| * @func |
| * @memberOf R |
| * @since v0.8.0 |
| * @category Object |
| * @typedefn Idx = String | Int |
| * @sig [Idx] -> a -> {a} -> {a} |
| * @param {Array} path the path to set |
| * @param {*} val The new value |
| * @param {Object} obj The object to clone |
| * @return {Object} A new object equivalent to the original except along the specified path. |
| * @see R.dissocPath |
| * @example |
| * |
| * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}} |
| * |
| * // Any missing or non-object keys in path will be overridden |
| * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}} |
| */ |
| |
| |
| var assocPath = |
| /*#__PURE__*/ |
| _curry3(function assocPath(path, val, obj) { |
| if (path.length === 0) { |
| return val; |
| } |
| |
| var idx = path[0]; |
| |
| if (path.length > 1) { |
| var nextObj = !isNil(obj) && _has(idx, obj) ? obj[idx] : _isInteger(path[1]) ? [] : {}; |
| val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj); |
| } |
| |
| if (_isInteger(idx) && _isArray(obj)) { |
| var arr = [].concat(obj); |
| arr[idx] = val; |
| return arr; |
| } else { |
| return assoc(idx, val, obj); |
| } |
| }); |
| |
| module.exports = assocPath; |