UNPKG

@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
/** * 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=