UNPKG

ts-prime

Version:

A utility library for JavaScript and Typescript.

48 lines (47 loc) 1.63 kB
"use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); var clone_1 = require("./clone"); var guards_1 = require("./guards"); var type_1 = require("./type"); /** * Dynamically sets object path * @param target - Target object * @param path - Path in object * @param value - On final object element * @signature * P.setPath(obj, path, value) * @example * P.setPath({ data: {} }, "data.value.max", 100) // { data: { value: { max: 100 } } } * @category Object */ function setPath(target, path, value) { if (!(guards_1.isObject(target) || guards_1.isArray(target))) { throw new Error("Expecting to receive object or array. But received " + type_1.type(target)); } var clonedTarget = clone_1.clone(target); var result = clonedTarget; var clonedPath = __spreadArrays(path); while (clonedPath.length !== 0) { var k = clonedPath.shift(); if (k != null) { if (result[k] == null) { result[k] = clonedPath.length === 0 ? value : {}; result = result[k]; continue; } if (clonedPath.length === 0) { result[k] = value; } result = result[k]; } } return clonedTarget; } exports.setPath = setPath;