import type { ExecutionContext, TypedExecutionContext } from '../../types/core';
import type { ASTNode, ExpressionNode } from '../../types/base-types';
import type { ExpressionEvaluator } from '../../core/expression-evaluator';
export interface PseudoCommandInput {
    methodName: string;
    methodArgs: unknown[];
    preposition?: 'from' | 'on' | 'with' | 'into' | 'at' | 'to';
    targetExpression: unknown;
}
export interface PseudoCommandOutput {
    result: unknown;
    methodName: string;
    target: unknown;
}
export declare class PseudoCommand {
    readonly name = "pseudo-command";
    static readonly metadata: {
        readonly description: "Treat a method on an object as a top-level command";
        readonly syntax: readonly ["<method>(<args>) [(to|on|with|into|from|at)] <expression>"];
        readonly examples: readonly ["getElementById(\"d1\") from the document", "reload() the location of the window", "setAttribute(\"foo\", \"bar\") on me", "foo() on me"];
        readonly category: "execution";
        readonly sideEffects: readonly ["method-execution"];
    };
    get metadata(): {
        readonly description: "Treat a method on an object as a top-level command";
        readonly syntax: readonly ["<method>(<args>) [(to|on|with|into|from|at)] <expression>"];
        readonly examples: readonly ["getElementById(\"d1\") from the document", "reload() the location of the window", "setAttribute(\"foo\", \"bar\") on me", "foo() on me"];
        readonly category: "execution";
        readonly sideEffects: readonly ["method-execution"];
    };
    parseInput(raw: {
        args: ASTNode[];
        modifiers: Record<string, ExpressionNode>;
    }, evaluator: ExpressionEvaluator, context: ExecutionContext): Promise<PseudoCommandInput>;
    execute(input: PseudoCommandInput, context: TypedExecutionContext): Promise<PseudoCommandOutput>;
    private resolveTarget;
    private resolvePropertyPath;
    private resolveMethod;
    private executeMethod;
}
export declare function createPseudoCommand(): PseudoCommand;
//# sourceMappingURL=pseudo-command.d.ts.map