import { ValidationResult } from './validate-helpers'; export type LoopLevel = 'test' | 'step' | 'assertion-block'; /** * Validates the body fields of a loop based on the level at which the loop * appears. Called by validateLoopModifiers when a level is specified. */ export declare function validateLoopBody(loopObj: Record, ctx: string, r: ValidationResult, level: LoopLevel): void; /** * Validates that at most one loop modifier is present on an object. * Returns which modifier is set (or null if none). */ export interface LoopValidationOptions { allowDocPaths?: boolean; level?: LoopLevel; } export declare function validateLoopModifiers(obj: Record, ctx: string, r: ValidationResult, options?: LoopValidationOptions): 'forEach' | 'for' | 'repeat' | null; /** * At step level, `assertions` and `extract` must be inside the loop body, * never as siblings of the loop modifier (they would be silently overridden). * `action` is allowed as a sibling — the step's action is used per iteration * when the loop body has no action of its own. */ export declare function validateLoopSiblingConflicts(step: Record, ctx: string, r: ValidationResult): void; /** * At test level, `steps` must be inside the loop body, never as a sibling. */ export declare function validateTestLoopSiblingConflicts(test: Record, ctx: string, r: ValidationResult): void; /** * At assertion-block level, `assertions` must be inside the loop body, * never as a sibling. */ export declare function validateBlockLoopSiblingConflicts(block: Record, ctx: string, r: ValidationResult): void;