/**
 * @copyright Sister Software
 * @license AGPL-3.0
 * @author Teffen Ellis, et al.
 */
/**
 * A set-like collection that maintains the order of its elements.
 */
export declare class Sequence<T extends WeakKey> extends Set<T> {
    #private;
    /**
     * The first node in the sequence.
     */
    get first(): T | null;
    /**
     * The last node in the sequence.
     */
    get last(): T | null;
    constructor(nodes?: T[]);
    /**
     * Clear the sequence.
     */
    clear(): void;
    /**
     * Add a node to the sequence.
     */
    add(...nodes: T[]): this;
    /**
     * Delete a node from the sequence.
     */
    delete(node: T): boolean;
    /**
     * Sort the sequence in place.
     */
    sort(callback: (a: T, b: T) => number): this;
    /**
     * Serialize the sequence to JSON.
     */
    toJSON(): T[];
    /**
     * Given a property key of the items in the sequence, return an iterator of the values of that
     * property.
     *
     * This is useful when building nested maps of properties.
     */
    pluck<P extends keyof T>(property: P): IteratorObject<T[P], undefined, unknown>;
    toString(): string;
}
export declare function disposeOf<T extends Disposable | PropertyKey>(set: Pick<Set<T>, "clear" | typeof Symbol.iterator>): void;
/**
 * A set that cleans up its elements when disposed.
 */
export declare class DisposableSet<T extends Disposable | PropertyKey> extends Set<T> implements Disposable {
    [Symbol.dispose](): void;
}
/**
 * A set that asynchronously cleans up its elements when disposed.
 */
export declare class AsyncDisposableSet<T extends AsyncDisposable> extends Set<T> implements AsyncDisposable {
    [Symbol.asyncDispose](): Promise<void>;
}
//# sourceMappingURL=set.d.ts.map