UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

44 lines (43 loc) 1.48 kB
import { RequiredError } from "../error/RequiredError.js"; import { limitItems } from "./iterate.js"; /** Is an unknown value a set? */ export function isSet(value) { return value instanceof Set; } /** Assert that a value is a `Set` instance. */ export function assertSet(value, caller = assertSet) { if (!isSet(value)) throw new RequiredError("Must be set", { received: value, caller }); } /** Convert a possible set to a `Set`. */ export function getSet(value) { return isSet(value) ? value : new Set(value); } /** Apply a limit to a set. */ export function limitSet(set, limit) { return limit > set.size ? set : new Set(limitItems(set, limit)); } /** Is an unknown value an item in a set? */ export function isSetItem(set, item) { return set.has(item); } /** Assert that an unknown value is an item in a set. */ export function assertSetItem(set, item, caller = assertSetItem) { if (!isSetItem(set, item)) throw new RequiredError("Item must exist in set", { item, set, caller }); } /** Add an item to a set (by reference) and return the set item. */ export function addSetItem(set, item) { set.add(item); return item; } /** Add multiple items to a set (by reference). */ export function addSetItems(set, ...items) { for (const item of items) set.add(item); } /** Remove multiple items from a set (by reference). */ export function deleteSetItems(set, ...items) { for (const item of items) set.delete(item); }