import { LimeType } from '@limetech/lime-web-components';
import { ResponseFormat, PropertySelection, LimeQuery } from './lime-query.types';
/**
 * Result of Lime Query validation
 */
export interface LimeQueryValidationResult {
    /** Is this a valid Lime Query according to the spec? */
    valid: boolean;
    /** Can the visual mode render this Lime Query? */
    visualModeSupported: boolean;
    /** Reasons why the Lime Query is invalid (violates Lime Query spec) */
    validationErrors: string[];
    /** Reasons why visual mode cannot render this Lime Query (visual mode limitations, not spec violations) */
    visualModeLimitations: string[];
}
/**
 * Validate a placeholder value
 * @param value The value to check (might be a placeholder)
 * @param activeLimetype The limetype of the active object
 * @param limetypes Record of all available limetypes
 * @returns Validation result with error message if invalid
 */
export declare function validatePlaceholder(value: any, activeLimetype: string | undefined, limetypes: Record<string, LimeType>): {
    valid: boolean;
    error?: string;
};
/**
 * Validates a filter expression key (property path).
 * Supports both regular property paths and placeholders.
 *
 * @param key - Property path to validate (e.g., "name", "company.name", "%activeObject%.name")
 * @param limetypes - All limetype definitions
 * @param limetype - The limetype being filtered
 * @param activeLimetype - Active limetype for placeholder resolution
 * @returns Validation result with error message if invalid
 */
export declare function validateFilterKey(key: string, limetypes: Record<string, LimeType>, limetype: string, activeLimetype?: string): {
    valid: boolean;
    error?: string;
};
/**
 * Validate a response format against limetype schemas
 * Throws errors for invalid property references
 * Returns visual mode limitations for features not yet supported in visual mode
 * @param responseFormat
 * @param limetypes Record of all available limetypes
 * @param limetype The root limetype for this query
 * @param visualModeEnabled Whether visual mode is enabled
 * @returns Visual mode limitations found (if any)
 */
export declare function validateResponseFormat(responseFormat: ResponseFormat, limetypes: Record<string, LimeType>, limetype: string, visualModeEnabled?: boolean): string[];
/**
 * Validate a property selection object against a limetype schema
 * Recursively validates nested property selections for relations
 * @param selection
 * @param limetypes Record of all available limetypes
 * @param limetype The limetype for this level of the selection
 * @param visualModeEnabled Whether visual mode is enabled (affects validation)
 * @returns Visual mode limitations found (if any)
 */
export declare function validatePropertySelection(selection: PropertySelection, limetypes: Record<string, LimeType>, limetype: string, visualModeEnabled?: boolean): string[];
/**
 * Validate a Lime Query
 * Returns validation result with separate arrays for validity errors and visual mode limitations
 * @param limeQuery The Lime Query to validate
 * @param limetypes Record of all available limetypes
 * @param activeLimetype Optional active object limetype for placeholder validation
 * @param visualModeEnabled Whether visual mode is enabled (affects validation)
 * @returns LimeQueryValidationResult with validity status and any errors/limitations
 */
export declare function isLimeQuerySupported(limeQuery: LimeQuery, limetypes: Record<string, LimeType>, activeLimetype?: string, visualModeEnabled?: boolean): LimeQueryValidationResult;
/**
 * Validate a ResponseFormat in isolation (for response-format-builder)
 *
 * This validator is designed for the response-format-builder component,
 * which only handles ResponseFormat editing without the full LimeQuery context.
 *
 * @param responseFormat - The response format to validate
 * @param limetypes - Record of all available limetypes
 * @param limetype - The limetype context for validation
 * @param visualModeEnabled - Whether visual mode is enabled (affects validation)
 * @returns Validation result with errors and visual mode limitations
 */
export declare function validateResponseFormatOnly(responseFormat: ResponseFormat, limetypes: Record<string, LimeType>, limetype: string, visualModeEnabled?: boolean): LimeQueryValidationResult;
//# sourceMappingURL=lime-query-validation.d.ts.map