import StatefulPromise from "./stateful-promise";
import TaskQueue, { type TaskOptions, type TaskRunnerArgs } from "./task-queue";
interface TypedMap<T> {
    clear(): void;
    delete(key: keyof T): boolean;
    get<TEvent extends keyof T>(key: TEvent): T[TEvent] | undefined;
    set<TEvent extends keyof T>(key: TEvent, value: T[TEvent]): this;
    keys(): IterableIterator<keyof T>;
}
/**
 * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/)
 */
export type TaskListener<TArgs extends unknown[]> = (runnerArgs: TaskRunnerArgs, ...args: TArgs) => void | PromiseLike<void>;
/**
 * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#once)
 */
export interface TaskListenerOptions extends TaskOptions {
}
/**
 * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/)
 */
export default class TaskEmitter<TEventMap extends Record<string | number, unknown[]>> {
    protected readonly _queue: TaskQueue;
    protected readonly _listeners: TypedMap<{ [P in keyof TEventMap]: {
        original: TaskListener<TEventMap[P]>;
        dispatch: (args: TEventMap[P]) => StatefulPromise<unknown>;
    }[]; }>;
    /**
     * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#on)
     */
    on<TEvent extends keyof TEventMap>(this: this, event: TEvent, listener: TaskListener<TEventMap[TEvent]>): void;
    /**
     * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#off)
     */
    off<TEvent extends keyof TEventMap>(event: TEvent, listener?: TaskListener<TEventMap[TEvent]>): void;
    /**
     * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#once)
     */
    once<TEvent extends keyof TEventMap>(event: TEvent, options?: TaskListenerOptions | undefined): StatefulPromise<TEventMap[TEvent]> & {
        readonly cancel: () => StatefulPromise<void>;
    };
    /**
     * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#emit)
     */
    emit<TEvent extends keyof TEventMap>(event: TEvent, ...args: TEventMap[TEvent]): undefined | StatefulPromise<unknown>[];
    /**
     * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#idle)
     */
    idle(): StatefulPromise<void>;
    /**
     * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/api/utils/task-emitter/#abort)
     */
    abort(reason?: unknown): void;
}
export {};
//# sourceMappingURL=task-emitter.d.ts.map