UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

36 lines (35 loc) 1.24 kB
import {isNullish} from "../is-type/is-nullish.mjs"; export const OBJECT_PROPERTY_PATH_ON_INCOMPLETE_THROW = () => { throw new Error(`Invalid property path`); }; export const OBJECT_PROPERTY_PATH_ON_INCOMPLETE_RETURN_UNDEFINED = () => { return void 0; }; export const OBJECT_PROPERTY_PATH_ON_INCOMPLETE_RETURN_FALSE = () => { return false; }; export function getObjectPropertyPathValue(data, path, onIncompletePath = OBJECT_PROPERTY_PATH_ON_INCOMPLETE_THROW) { for (let i = 0, l = path.length; i < l; i++) { const propertyKey = path[i]; data = data[propertyKey]; if (isNullish(data)) { return onIncompletePath(); } } return data; } export function getOptionalObjectPropertyPathValue(data, path) { return getObjectPropertyPathValue(data, path, OBJECT_PROPERTY_PATH_ON_INCOMPLETE_RETURN_UNDEFINED); } export function setObjectPropertyPathValue(data, path, value, onIncompletePath = OBJECT_PROPERTY_PATH_ON_INCOMPLETE_RETURN_FALSE) { const lengthMinusOne = path.length - 1; for (let i = 0; i < lengthMinusOne; i++) { const propertyKey = path[i]; data = data[propertyKey]; if (isNullish(data)) { return onIncompletePath(); } } data[path[lengthMinusOne]] = value; return true; }