import { FinalizationGroup } from "../weakrefs.js";
import { TaskQueue } from "../utils/tasks/taskQueue.js";
interface RegisterObjectInfo<T> {
    (info: T): void;
}
interface UnregisterObjectInfo<T> {
    (info: T): void;
}
export interface CleanupFinalizationGroup {
    (finalizationGroup: FinalizationGroup): void;
}
export interface CheckForEmptyCells {
    (finalizationGroup: FinalizationGroup): boolean;
}
export interface FinalizationGroupJobs<ObjectInfo> {
    readonly checkForEmptyCells: CheckForEmptyCells;
    readonly cleanupFinalizationGroup: CleanupFinalizationGroup;
    setFinalized(...infos: Array<ObjectInfo>): void;
    getFinalizedInFinalizationGroup(finalizationGroup: FinalizationGroup): Set<ObjectInfo>;
    registerFinalizationGroup(finalizationGroup: FinalizationGroup, info: ObjectInfo): void;
    unregisterFinalizationGroup(finalizationGroup: FinalizationGroup, info: ObjectInfo): void;
}
export declare function createFinalizationGroupJobs<ObjectInfo>(scheduleCleanupFinalizationGroup: (finalizationGroup: FinalizationGroup) => number, hooks?: {
    registerObjectInfo?: RegisterObjectInfo<ObjectInfo>;
    unregisterObjectInfo?: UnregisterObjectInfo<ObjectInfo>;
}): FinalizationGroupJobs<ObjectInfo>;
export declare function createFinalizationGroupJobsForTaskQueue<ObjectInfo>(setTask: TaskQueue.Set<number>, hooks?: {
    registerObjectInfo?: RegisterObjectInfo<ObjectInfo>;
    unregisterObjectInfo?: UnregisterObjectInfo<ObjectInfo>;
}): FinalizationGroupJobs<ObjectInfo>;
export {};
