@lifaon/rx-js-light
Version:
Blazing fast Observables
36 lines (35 loc) • 1.24 kB
JavaScript
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;
}