import type { MaybeNamed } from '../../debugging/object-with-name.js'; import { Emitter } from '../event/event.js'; import type { EventRegister } from '../event/type.js'; export declare enum DuplicateDisposeAction { Disable = 0, Warning = 1, Allow = 2 } /** @public */ export interface IDisposableEvents extends IBackReferenceDisposableEvent { readonly onDisposeError: EventRegister; readonly onPostDispose: EventRegister; readonly disposed: boolean; } export interface IBackReferenceDisposableEvent { readonly onBeforeDispose: EventRegister; } /** @public */ export interface IDisposable extends MaybeNamed { dispose(): void; } /** @public */ export interface IAsyncDisposable extends MaybeNamed { dispose(): void | Promise; } type _Type = Async extends true ? IAsyncDisposable : IDisposable; type _RType = Async extends true ? Promise : void; /** * 增强型Disposable */ export declare abstract class AbstractEnhancedDisposable implements IDisposableEvents { protected readonly _onDisposeError: Emitter; readonly onDisposeError: EventRegister; protected readonly _onBeforeDispose: Emitter; readonly onBeforeDispose: EventRegister; protected readonly _onPostDispose: Emitter; readonly onPostDispose: EventRegister; /** settings */ protected readonly duplicateDispose: DuplicateDisposeAction; /** * the "DisposableStack" */ protected readonly _disposables: _Type[]; /** for debug */ readonly displayName?: string; /** @ts-ignore 禁止不使用debug库的项目报错 */ protected readonly _logger: import('debug').Debugger; constructor(displayName?: string); /** * @throws if already disposed */ assertNotDisposed(): void; /** * register a disposable object */ _register>(d: T): T; _register & IBackReferenceDisposableEvent>(d: T, autoDereference?: boolean): T; _unregister(d: _Type): boolean; private __dispose_state; get disposed(): boolean; /** * 正在dispose中(已开始但未完成) */ get disposing(): boolean; /** * 释放相关资源 */ dispose(): _RType; get [Symbol.toStringTag](): string; protected abstract _dispose(disposables: readonly _Type[]): _RType; } export declare function dumpDisposableStack(disposable: AbstractEnhancedDisposable): void; export {}; //# sourceMappingURL=disposable.d.ts.map