import ts from 'typescript';
import type { ServiceRegistry } from '../compiler/discovery/serviceDiscovery.js';
export type FreeVariableClassification = 'service-binding' | 'constant' | 'cdk-synth' | 'runtime';
export interface ServiceInfo {
    /** The service name (e.g. "Lambda", "DynamoDB"). */
    readonly service: string;
    /** The expression node providing the resource (e.g. `validateFn.functionArn`). */
    readonly resourceExpr: ts.Expression | undefined;
}
export interface FreeVariable {
    /** The ts.Symbol of the free variable. */
    readonly symbol: ts.Symbol;
    /** How this variable should be handled. */
    readonly classification: FreeVariableClassification;
    /** For service bindings: service type + the resource expression AST node. */
    readonly serviceInfo?: ServiceInfo;
    /** For constants: the folded compile-time value. */
    readonly constantValue?: unknown;
    /** For runtime: the initializer expression to preserve in transformer output. */
    readonly runtimeExpr?: ts.Expression;
}
/**
 * Analyze a workflow function to find and classify all free variables.
 *
 * A "free variable" is any identifier used inside the function that is
 * declared outside it — excluding the function's own parameters.
 */
export declare function analyzeFreeVariables(checker: ts.TypeChecker, workflowFn: ts.FunctionLikeDeclarationBase, serviceRegistry: ServiceRegistry): FreeVariable[];
//# sourceMappingURL=dataFlow.d.ts.map