UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

38 lines (37 loc) 1.4 kB
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; }