@aws/pdk
Version:
All documentation is located at: https://aws.github.io/aws-pdk
63 lines (53 loc) • 1.64 kB
JavaScript
var _curry3 =
/*#__PURE__*/
require("./internal/_curry3.js");
var _has =
/*#__PURE__*/
require("./internal/_has.js");
var _isInteger =
/*#__PURE__*/
require("./internal/_isInteger.js");
var _assoc =
/*#__PURE__*/
require("./internal/_assoc.js");
var isNil =
/*#__PURE__*/
require("./isNil.js");
/**
* 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 | Symbol
* @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);
}
return _assoc(idx, val, obj);
});
module.exports = assocPath;