import type { AnyCaller } from "./function.js"; /** `Set` that cannot be changed. */ export type ImmutableSet = ReadonlySet; /** `Set` that can be changed. */ export type MutableSet = Set; /** Things that can be converted to sets. */ export type PossibleSet = ImmutableSet | Iterable; /** Get the type of the _items_ in a set. */ export type SetItem = X extends ReadonlySet ? 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(value: PossibleSet): ImmutableSet; /** Apply a limit to a set. */ export declare function limitSet(set: ImmutableSet, limit: number): ImmutableSet; /** Is an unknown value an item in a set? */ export declare function isSetItem(set: ImmutableSet, item: unknown): item is T; /** Assert that an unknown value is an item in a set. */ export declare function assertSetItem(set: ImmutableSet, 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(set: MutableSet, item: T): T; /** Add multiple items to a set (by reference). */ export declare function addSetItems(set: MutableSet, ...items: T[]): void; /** Remove multiple items from a set (by reference). */ export declare function deleteSetItems(set: MutableSet, ...items: T[]): void;