import { Ast, SchemaRetriever, CompiledProgram } from 'thingtalk';
export interface SimulationDatabase {
    has(key: string): boolean;
    get(key: string): Array<{
        [key: string]: unknown;
    }> | undefined;
}
interface SimulatorOptions {
    locale: string;
    timezone: string | undefined;
    schemaRetriever: SchemaRetriever;
    rng: () => number;
    database?: SimulationDatabase;
    overrides?: Map<string, string>;
}
declare type RawExecutionResult = Array<[string, Record<string, unknown>]>;
declare type ExecutionResult = [Ast.DialogueHistoryResultList, RawExecutionResult];
export declare class ThingTalkSimulatorState {
    private _locale;
    private _schemas;
    private _rng;
    private _database;
    private _overrides;
    private _execEnv;
    constructor(options: SimulatorOptions);
    compile(stmt: Ast.ExpressionStatement, cache: Map<string, CompiledProgram>): Promise<CompiledProgram>;
    simulate(stmt: Ast.ExpressionStatement, compiled: CompiledProgram): Promise<ExecutionResult>;
    private _inferType;
    private _outputTypeToSchema;
    private _mapResult;
    private _mapCompound;
}
/**
 * Simulate the execution of ThingTalk code.
 */
export default class ThingTalkStatementSimulator {
    private _options;
    private cache;
    constructor(options: SimulatorOptions);
    executeStatement(stmt: Ast.ExpressionStatement, execState: ThingTalkSimulatorState): Promise<[Ast.DialogueHistoryResultList, RawExecutionResult, ThingTalkSimulatorState]>;
}
export {};
