@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
32 lines • 3.58 kB
JavaScript
/**
* Helper function to get an object with deep keys
*
* @param obj - The object to modify.
* @param keys - The path of the property to set.
* @param value - The value to set.
* @returns The updated object
*
* @example
* const myObj: MyObjType = {
* foo: {
* bar: {
* baz: true,
* },
* },
* };
* const updatedObject = objectDeepSet(myObj, 'foo.bar.baz', false);
* const updatedObject = objectDeepSet<boolean, MyObjType>(myObj, 'foo.bar.baz', false);
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function objectDeepSet(obj, keys, value) {
const paths = keys.split('.');
if (paths.length === 1) {
const path = paths[0];
return (Object.assign(Object.assign({}, obj), { [path]: value }));
}
const [path, ...remainingPaths] = paths;
const nestedObj = obj[path];
const newNestedObj = objectDeepSet(nestedObj, remainingPaths.join('.'), value);
return (Object.assign(Object.assign({}, obj), { [path]: newNestedObj }));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlZXAtc2V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy91dGlsaXRpZXMvIiwic291cmNlcyI6WyJvYmplY3QtZGVlcC1zZXQvb2JqZWN0LWRlZXAtc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLGFBQWEsQ0FBdUMsR0FBUSxFQUFFLElBQVksRUFBRSxLQUFnQjtJQUMxRyxNQUFNLEtBQUssR0FBYSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE9BQU8saUNBQ0YsR0FBRyxLQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUNDLENBQUM7S0FDbEI7SUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFL0UsT0FBTyxpQ0FDRixHQUFHLEtBQ04sQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLElBQ04sQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGFuIG9iamVjdCB3aXRoIGRlZXAga2V5c1xuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBrZXlzIC0gVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBvYmplY3RcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbXlPYmo6IE15T2JqVHlwZSA9IHtcbiAqICAgZm9vOiB7XG4gKiAgICAgYmFyOiB7XG4gKiAgICAgICBiYXo6IHRydWUsXG4gKiAgICAgfSxcbiAqICAgfSxcbiAqIH07XG4gKiBjb25zdCB1cGRhdGVkT2JqZWN0ID0gb2JqZWN0RGVlcFNldChteU9iaiwgJ2Zvby5iYXIuYmF6JywgZmFsc2UpO1xuICogY29uc3QgdXBkYXRlZE9iamVjdCA9IG9iamVjdERlZXBTZXQ8Ym9vbGVhbiwgTXlPYmpUeXBlPihteU9iaiwgJ2Zvby5iYXIuYmF6JywgZmFsc2UpO1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdERlZXBTZXQ8VmFsdWVUeXBlLCBPYmplY3RUeXBlIGV4dGVuZHMgb2JqZWN0PihvYmo6IGFueSwga2V5czogc3RyaW5nLCB2YWx1ZTogVmFsdWVUeXBlKTogT2JqZWN0VHlwZSB7XG4gIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IGtleXMuc3BsaXQoJy4nKTtcblxuICBpZiAocGF0aHMubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgcGF0aCA9IHBhdGhzWzBdO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICAuLi5vYmosXG4gICAgICBbcGF0aF06IHZhbHVlLFxuICAgIH0pIGFzIE9iamVjdFR5cGU7XG4gIH1cbiAgY29uc3QgW3BhdGgsIC4uLnJlbWFpbmluZ1BhdGhzXSA9IHBhdGhzO1xuICBjb25zdCBuZXN0ZWRPYmogPSBvYmpbcGF0aF07XG4gIGNvbnN0IG5ld05lc3RlZE9iaiA9IG9iamVjdERlZXBTZXQobmVzdGVkT2JqLCByZW1haW5pbmdQYXRocy5qb2luKCcuJyksIHZhbHVlKTtcblxuICByZXR1cm4gKHtcbiAgICAuLi5vYmosXG4gICAgW3BhdGhdOiBuZXdOZXN0ZWRPYmosXG4gIH0pIGFzIE9iamVjdFR5cGU7XG59XG4iXX0=