import type { Maybe } from '@takeshape/util';
import type { ObjectSchema, ProjectSchemaJSON, PropertySchema, ShapeJSON, ShapeMap } from '../project-schema/index.ts';
import type { ResolvedTemplate } from './types.ts';
export declare const MAX_RELATIONSHIP_DEPTH = 1;
export declare const exceededRelationshipDepth: (depth?: number) => boolean;
type ComparisonOperatorKey = 'eq' | 'lt' | 'lte' | 'gt' | 'gte' | 'in' | 'match' | 'match_advanced' | 'match_phrase' | 'match_phrase_advanced' | 'regexp' | 'wildcard';
type ShapeThunk = ShapeJSON | (() => ShapeJSON);
declare class ShapeCache {
    thunks: Map<string, ShapeThunk>;
    unresolved: Set<string>;
    has(shapeName: string): boolean;
    set(shapeName: string, thunk: ShapeThunk): void;
    resolveAll(): ShapeMap;
}
export declare const fieldTypeComparison: Record<string, {
    comparators: ComparisonOperatorKey[];
    type: 'string' | 'number' | 'integer' | 'boolean';
}>;
export declare const comparatorDescriptions: Record<string, string>;
export declare const booleanOperators: string[];
export declare const boolOpDescriptionMap: Record<string, string>;
export declare function getFieldTypeComparison(fieldType: string): Maybe<Record<string, PropertySchema>>;
export type PropertyContext = {
    shapeCache: ShapeCache;
    conflictingProperties?: Set<string>;
    projectSchema: ProjectSchemaJSON;
    relationshipDepth: number;
    booleanOperators?: boolean;
};
export declare function getFields(typeName: string, shapes: ShapeJSON[], context: PropertyContext): Record<string, PropertySchema>;
export declare function getPropertyComparisonType(name: string, prop: PropertySchema, shapeName: string, context: PropertyContext): Maybe<Record<string, PropertySchema>>;
export declare function getWhereShape(projectSchema: ProjectSchemaJSON, selectedShapes: ShapeJSON[]): ResolvedTemplate;
export declare function getWhereSearchArg(projectSchema: ProjectSchemaJSON, selectedShapes: ShapeJSON[]): {
    schema: ObjectSchema;
    dependencies: ShapeMap;
};
export {};
