import type { ExecutionContext, TypedExecutionContext } from '../../types/core';
import type { ASTNode, ExpressionNode } from '../../types/base-types';
import type { ExpressionEvaluator } from '../../core/expression-evaluator';
import { type DecoratedCommand, type CommandMetadata } from '../decorators';
export interface WaitTimeInput {
    type: 'time';
    milliseconds: number;
}
export interface WaitEventInput {
    type: 'event';
    eventName: string;
    target?: EventTarget;
    destructure?: string[];
}
export interface WaitRaceInput {
    type: 'race';
    conditions: (WaitTimeInput | WaitEventInput)[];
}
export type WaitCommandInput = WaitTimeInput | WaitEventInput | WaitRaceInput;
export interface WaitCommandOutput {
    type: 'time' | 'event';
    result: number | Event;
    duration: number;
}
export declare class WaitCommand implements DecoratedCommand {
    readonly name: string;
    readonly metadata: CommandMetadata;
    parseInput(raw: {
        args: ASTNode[];
        modifiers: Record<string, ExpressionNode>;
    }, evaluator: ExpressionEvaluator, context: ExecutionContext): Promise<WaitCommandInput>;
    execute(input: WaitCommandInput, context: TypedExecutionContext): Promise<WaitCommandOutput>;
    private parseTimeWait;
    private parseEventWait;
    private parseEventArrayWait;
    private parseRaceCondition;
    private executeRace;
}
export declare const createWaitCommand: () => WaitCommand;
export default WaitCommand;
//# sourceMappingURL=wait.d.ts.map