shelving
Version:
Toolkit for using data in JavaScript.
38 lines (37 loc) • 1.4 kB
JavaScript
import { RequiredError } from "../error/RequiredError.js";
import { isIterable } from "./iterate.js";
import { isObject, isPlainObject } from "./object.js";
/** Is an unknown value a data object? */
export function isData(value) {
return isPlainObject(value);
}
/** Assert that an unknown value is a data object. */
export function assertData(value, caller = assertData) {
if (!isPlainObject(value))
throw new RequiredError("Must be data object", { received: value, caller });
}
export function getData(input) {
return isIterable(input) ? Object.fromEntries(input) : input;
}
/** Is an unknown value the key for an own prop of a data object. */
export const isDataProp = (data, key) => typeof key === "string" && Object.hasOwn(data, key);
/** Assert that an unknown value is the key for an own prop of a data object. */
export function assertDataProp(data, key, caller = assertDataProp) {
if (!isDataProp(data, key))
throw new RequiredError("Key must exist in data object", { key, data, caller });
}
export function getDataProps(data) {
return Object.entries(data);
}
export function getDataKeys(data) {
return Object.keys(data);
}
export function getDataProp(data, key) {
let current = data;
for (const k of key.split(".")) {
if (!isObject(current))
return undefined;
current = current[k];
}
return current;
}