import { FDisposable } from "./f_disposable.js";
import { FExecutionContext } from "../execution_context/f_execution_context.js";
import "./tc39.js";
export declare abstract class FInitable extends FDisposable {
    abstract init(executionContext: FExecutionContext): Promise<void>;
    static initAll(executionContext: FExecutionContext, ...instances: ReadonlyArray<FInitable>): Promise<void>;
    static instanceOf(test: unknown): test is FInitable;
}
export declare abstract class FInitableBase extends FInitable {
    private _initialized?;
    private _initializingPromise?;
    private _disposed?;
    private _disposingPromise?;
    private _initExecutionContext;
    get initialized(): boolean;
    get initializing(): boolean;
    get disposed(): boolean;
    get disposing(): boolean;
    constructor();
    init(executionContext: FExecutionContext): Promise<void>;
    dispose(): Promise<void>;
    /**
     * @remark Defined as property to be able to use inside dispose()
     */
    protected get initExecutionContext(): FExecutionContext;
    /**
     * Override this method to insert own logic at initialize phase
     *
     * Note: this.initExecutionContext may be used here
     */
    protected abstract onInit(): void | Promise<void>;
    /**
     * Override this method to insert own logic at disposing phase
     *
     * Note: this.initExecutionContext may be used here
     */
    protected abstract onDispose(): void | Promise<void>;
    protected verifyInitialized(): void;
    protected verifyNotDisposed(): void;
    protected verifyInitializedAndNotDisposed(): void;
}
export declare class FInitableMixin extends FInitableBase {
    static applyMixin(targetClass: any): void;
    /**
     * Override this method to insert own logic at initialize phase
     *
     * Note: this.initExecutionContext may be used here
     */
    protected onInit(): void | Promise<void>;
    /**
     * Override this method to insert own logic at disposing phase
     *
     * Note: this.initExecutionContext may be used here
     */
    protected onDispose(): void | Promise<void>;
    private constructor();
}
