import _getPathArray from "../internals/_getPathArray"; import propOr from "./propOr"; import slice from "../list/slice"; import assoc from "./assoc"; import curry from "../function/curry"; /** * Creates a shallow copy of the object and sets * the value at the specified path. * The path can be specified as a dot-separated string * or a list of strings. * * @see dissocPath * @param {string|string[]} path * @param {any} value * @param {object} object * @returns {object} */ const assocPath = (path, value, object) => { const pathArray = _getPathArray(path); if (pathArray.length === 0) { return value; } const prop = pathArray[0]; const nextObject = propOr({}, prop, object); const newValue = assocPath( slice(1, pathArray.length, pathArray), value, nextObject ); return assoc(prop, newValue, object); }; export default curry(assocPath);