import type { Disposable } from './disposable'; import type { EventEmitter, EventListener, EventSource } from './emitter'; import type { Model, ModelEvents } from './model'; interface FromEvents { end(): DisposableScope; on(event: E, listener: EventListener): FromEvents; } interface EventEmitterLike { on(event: string, callback: (...args: unknown[]) => unknown): unknown; off(event: string, callback: unknown): unknown; } declare type EmitterScope = T extends Model ? FromEvents> : T extends EventEmitter ? never extends E ? FromEvents['__type_helper_']> : FromEvents : T extends EventSource ? never extends E ? FromEvents['__type_helper_']> : FromEvents : never; /** * A disposable scope to simplify resource cleanup, e.g., * remove event listeners on component unmount. */ export declare class DisposableScope implements Disposable { private readonly _cleanups; /** * Call `dispose()` function on cleanup. */ add(disposable: Disposable | Disposable['dispose']): DisposableScope; /** * Call `fn` and use returned value as cleanup function. */ run(fn: () => Disposable | Disposable['dispose']): DisposableScope; /** * Unregister events on cleanup. */ emitter | EventSource>(eventTarget: E): EmitterScope; wrap(eventTarget: E): Pick; dispose(): void; } export {}; //# sourceMappingURL=cleanup.d.ts.map