import ts from 'typescript';
import { CompilerContext } from '../compilerContext.js';
import type { ServiceRegistry } from '../discovery/serviceDiscovery.js';
import type { StepFunctionCallSite } from '../discovery/callSiteLocator.js';
import { type VariableInfo } from './types.js';
import type { WholeProgramAnalyzer } from './wholeProgramAnalyzer.js';
import type { PathDialect } from '../generation/pathDialect.js';
export interface VariableResolution {
    /** All known variables, keyed by ts.Symbol reference. */
    readonly variables: ReadonlyMap<ts.Symbol, VariableInfo>;
    /** The ts.Symbol of the input parameter (factory param 1). */
    readonly inputSymbol: ts.Symbol | undefined;
    /** The ts.Symbol of the context parameter (factory param 0). */
    readonly contextSymbol: ts.Symbol | undefined;
    /** Deferred inline bindings: param symbol → argument expression.
     *  Resolved lazily when the identifier is first accessed. */
    readonly deferredBindings?: ReadonlyMap<ts.Symbol, ts.Expression>;
}
export interface ResolvedExpression {
    readonly kind: 'literal' | 'jsonpath' | 'intrinsic' | 'unknown';
    readonly value?: unknown;
    readonly path?: string;
}
export declare class VariableResolutionBuilder {
    readonly variables: Map<ts.Symbol, VariableInfo>;
    readonly deferredBindings: Map<ts.Symbol, ts.Expression>;
    inputSymbol: ts.Symbol | undefined;
    contextSymbol: ts.Symbol | undefined;
    addVariable(symbol: ts.Symbol, info: VariableInfo): void;
    /** Register a deferred inline binding that will be resolved lazily. */
    addDeferredBinding(paramSymbol: ts.Symbol, argExpression: ts.Expression): void;
    getBySymbol(symbol: ts.Symbol): VariableInfo | undefined;
    toResolution(): VariableResolution;
}
/**
 * Build the initial variable resolution for a step function.
 * Classifies factory parameters and top-level service bindings.
 */
export declare function resolveVariables(context: CompilerContext, callSite: StepFunctionCallSite, serviceRegistry: ServiceRegistry, substitutions?: Readonly<Record<string, unknown>>, analyzer?: WholeProgramAnalyzer, dialect?: PathDialect): VariableResolutionBuilder;
/**
 * Resolve a TS expression to a JSONPath string or literal value.
 */
export declare function resolveExpression(context: CompilerContext, expr: ts.Expression, variables: VariableResolution, dialect?: PathDialect): ResolvedExpression;
/**
 * Extract the ARN or resource identifier from a service binding variable.
 */
export declare function extractResourceArn(context: CompilerContext, symbol: ts.Symbol): string | undefined;
//# sourceMappingURL=variableResolver.d.ts.map