import type { Rspack } from '@rsbuild/core';
import type { DevCompileAttemptIdentity, DevCompilationIdentity, DevRuntimeStats, DevGraphChanges, DevGraphIdentity } from './dev-runtime-artifacts.js';
export type DevCompilerPair = {
    web: Rspack.Compiler;
    node: Rspack.Compiler;
    settledCompilations: WeakSet<Rspack.Compilation>;
    pendingAttempt?: PendingDevCompilation;
    currentAttemptIdentity?: DevCompileAttemptIdentity;
    latestCompletedWebIdentity?: DevCompilationIdentity;
    latestCompletedWebStats?: Rspack.Stats;
    latestCompletedNodeStats?: Rspack.Stats;
    latestWebStart?: CompilationStart;
    latestNodeStart?: CompilationStart;
};
export type PendingDevCompilation = {
    stats: DevRuntimeStats;
    changes: DevGraphChanges;
    identity: DevGraphIdentity;
    webCompilation: Rspack.Compilation;
    nodeCompilation: Rspack.Compilation;
};
export type CompilationStart = {
    status: 'pending';
} | {
    status: 'started';
    identity: DevCompilationIdentity;
};
type CompilerPairStartSide = 'latestWebStart' | 'latestNodeStart';
export declare const createDevCompilerPair: ({ web, node, }: {
    web: Rspack.Compiler;
    node: Rspack.Compiler;
}) => DevCompilerPair;
export declare const resetDevCompilerPair: (pair: DevCompilerPair) => void;
export declare const isLatestStartedCompilation: (identity: DevCompilationIdentity | undefined, start: CompilationStart | undefined) => boolean;
export declare const hasPendingCompilation: (pair: DevCompilerPair) => boolean;
export declare const beginDevCompilerAttempt: (pair: DevCompilerPair) => void;
export declare const markDevCompilerPending: (pair: DevCompilerPair, side: CompilerPairStartSide) => boolean;
export declare const clearDevCompilerStart: (pair: DevCompilerPair, side: CompilerPairStartSide) => void;
export type CompilationIdentityTracker = {
    getCompilationIdentity(compilation: Rspack.Compilation): DevCompilationIdentity;
    getWebIdentityForNodeCompilation(compilation: Rspack.Compilation): DevCompilationIdentity | undefined;
    getAttemptIdentityForCompilation(compilation: Rspack.Compilation): DevCompileAttemptIdentity | undefined;
    setAttemptIdentityForCompilation(compilation: Rspack.Compilation, identity: DevCompileAttemptIdentity): void;
    setWebIdentityForNodeCompilation(compilation: Rspack.Compilation, identity: DevCompilationIdentity): void;
};
export declare const createCompilationIdentityTracker: () => CompilationIdentityTracker;
export {};
