shelving
Version:
Toolkit for using data in JavaScript.
44 lines (43 loc) • 1.48 kB
JavaScript
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);
}