import { Callable } from 'rado/util/Callable';
import { Cursor } from './Cursor.js';
import { EV } from './Expr.js';
import { ExprData } from './ExprData.js';
import { Fields } from './Fields.js';
import { TargetData } from './TargetData.js';
export declare class TargetI<Row = object> {
    get [Target.IsTarget](): true;
    get [Target.Data](): TargetData;
}
export interface TargetI<Row = object> extends Callable {
    (conditions?: {
        [K in keyof Row]?: EV<Row[K]>;
    }): Cursor.Find<Row>;
}
export type Target<Row> = Target.Definition<Row> & TargetI<Row>;
export declare namespace Target {
    type Definition<Row> = {
        [K in keyof Row as K extends string ? K : never]: Fields<Row[K]>;
    };
}
export declare const Target: {
    new (data: TargetData): {
        cache: any;
        data: TargetData;
        call(...input: Array<any>): Cursor.Find<unknown>;
        condition(input: Array<any>): ExprData | undefined;
        get(field: string): any;
    };
    readonly Data: unique symbol;
    readonly IsTarget: unique symbol;
    isTarget<T>(target: any): target is TargetI<T>;
    create<T_1>(data: TargetData): Target<T_1>;
};
