UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

41 lines (40 loc) 1.5 kB
import { RequiredError } from "../error/RequiredError.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 }); } /** 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 splitDataPath(path) { return typeof path === "string" ? path.split(".") : path; } export function joinDataPath(path) { return typeof path === "string" ? path : path.join("."); } export function getDataProp(data, path) { const segments = splitDataPath(path); let current = data; for (const segment of segments) { if (!isObject(current)) return undefined; current = current[segment]; } return current; }