shelving
Version:
Toolkit for using data in JavaScript.
28 lines (27 loc) • 1.65 kB
TypeScript
import type { AnyCaller } from "./function.js";
/** `Set` that cannot be changed. */
export type ImmutableSet<T = unknown> = ReadonlySet<T>;
/** `Set` that can be changed. */
export type MutableSet<T = unknown> = Set<T>;
/** Things that can be converted to sets. */
export type PossibleSet<T> = ImmutableSet<T> | Iterable<T>;
/** Get the type of the _items_ in a set. */
export type SetItem<X> = X extends ReadonlySet<infer Y> ? Y : never;
/** Is an unknown value a set? */
export declare function isSet(value: unknown): value is ImmutableSet;
/** Assert that a value is a `Set` instance. */
export declare function assertSet(value: unknown, caller?: AnyCaller): asserts value is ImmutableSet;
/** Convert a possible set to a `Set`. */
export declare function getSet<T>(value: PossibleSet<T>): ImmutableSet;
/** Apply a limit to a set. */
export declare function limitSet<T>(set: ImmutableSet<T>, limit: number): ImmutableSet<T>;
/** Is an unknown value an item in a set? */
export declare function isSetItem<T>(set: ImmutableSet<T>, item: unknown): item is T;
/** Assert that an unknown value is an item in a set. */
export declare function assertSetItem<T>(set: ImmutableSet<T>, item: unknown, caller?: AnyCaller): asserts item is T;
/** Add an item to a set (by reference) and return the set item. */
export declare function addSetItem<T>(set: MutableSet<T>, item: T): T;
/** Add multiple items to a set (by reference). */
export declare function addSetItems<T>(set: MutableSet<T>, ...items: T[]): void;
/** Remove multiple items from a set (by reference). */
export declare function deleteSetItems<T>(set: MutableSet<T>, ...items: T[]): void;