import { EdmEntityType, OperationMetadata, ApiMetadata } from "./metadata";
import { Options } from "./options";
export declare class Query {
    protected readonly _apiMetadata: ApiMetadata;
    protected _entityMetadata: EdmEntityType;
    protected readonly _options?: Options | undefined;
    protected _segments: Segment[];
    protected params: QueryParams;
    protected _method: ODataMethods;
    protected _payload: any;
    private constructor();
    static create(apiMetadata: ApiMetadata, entityMetadata: EdmEntityType, options: Options | undefined): Query;
    private _clone;
    private _freeze;
    private _action;
    private _func;
    byKey(keyExpr: string): Query;
    cast(fullTypeName: string): Query;
    navigate(property: string, entityMetadata: EdmEntityType): Query;
    operation(metadata: OperationMetadata, args: any[]): Query;
    count(o?: {
        inline: boolean;
    }): Query;
    delete(): Query;
    expand(expand: string, expr?: Function): Query;
    filter(expr: string): Query;
    insert(payload: any): Query;
    orderBy(expressions: string[]): Query;
    search(expr: string): Query;
    select(fields: string[]): Query;
    skip(num: number): Query;
    top(num: number): Query;
    update(payload: string, put: boolean): Query;
    url(queryParams?: boolean, options?: Options): string;
    buildParams(options: Options, separator?: string): string;
    processParameter(name: string, value: any, options: Options): string | undefined;
    private expandToString;
    exec(options: Options | undefined): Promise<any>;
    private _fetchData;
}
declare type ExpandExpr = {
    expand: string;
    expr?: Function;
};
declare type QueryParams = {
    [x: string]: any;
    filter?: string[];
    top?: number;
    skip?: number;
    orderBy?: string[];
    expand?: ExpandExpr[];
    select?: string[];
    count?: boolean;
    search?: string[];
};
declare type ODataMethods = "get" | "post" | "put" | "patch" | "delete";
declare abstract class Segment {
    abstract toUrlFragment(options: Options): string;
}
export {};
