import type { Type } from "../../types/definitions";
import type { SuspensionCapturedVariable, SuspensionPoint } from "../shared/suspension-analysis-types";
export interface EffectCallPoint extends SuspensionPoint {
    operationArgTypes: Type[];
    operationResultType: Type;
    isTransitiveEffectCall?: boolean;
    isTransitiveClosureCall?: boolean;
    effectIndex?: number;
}
export interface EffectCapturedVariable extends SuspensionCapturedVariable {
    isOwningTheSameRcValueAs: EffectCapturedVariable | undefined;
}
export interface EffectAnalysisResult {
    effectCallPoints: EffectCallPoint[];
    capturedVariables: EffectCapturedVariable[];
    hasEffects: boolean;
    variableIdRemapping: Map<string, string>;
    effectParameterName: string;
    effectParameterType: Type;
    effectFieldPath?: string[];
    handlerValue?: unknown;
    effectHandlerInfos?: EffectHandlerInfo[];
}
export interface EffectHandlerInfo {
    effectParameterName: string;
    effectParameterType: Type;
    effectFieldPath?: string[];
    handlerValue?: unknown;
    operationArgTypes: Type[];
    operationResultType: Type;
}
