import { LibraryContext, StateInterface } from '../../types.js';

type AnyInstance = StateInterface<any, any, any>;
interface DevtoolsAgent {
    emitCreation(instance: AnyInstance): void;
    emitDispose(instance: AnyInstance): void;
    emitInstance(instance: AnyInstance): void;
    startUpdate(instance: AnyInstance): void;
    emitUpdate(instance: AnyInstance, replace: boolean): void;
    emitRun(instance: AnyInstance, cache: boolean): void;
    emitSub(instance: AnyInstance, subscriptionKey: string): void;
    emitUnsub(instance: AnyInstance, subscriptionKey: string): void;
    captureContext(context: LibraryContext): void;
    releaseContext(context: LibraryContext): void;
    connect(listener: DevtoolsAgent): void;
    disconnect(listener: DevtoolsAgent): void;
    onConnect(currentInstances: AnyInstance[]): void;
}
declare let devtools: DevtoolsAgent;

export { AnyInstance, DevtoolsAgent, devtools };
