import type * as AbstractSQLCompiler from '@resin/abstract-sql-compiler';
import type { ODataBinds, ODataQuery, SupportedMethod } from '@balena/odata-parser';
import type { Tx } from '../database-layer/db';
import type { InstantiatedHooks } from './hooks';
import type { AnyObject } from './common-types';
import * as ODataParser from '@balena/odata-parser';
import * as Bluebird from 'bluebird';
export declare const SyntaxError: typeof ODataParser.SyntaxError;
export { BadRequestError, ParsingError, TranslationError } from './errors';
import * as sbvrUtils from './sbvr-utils';
export declare type OdataBinds = ODataBinds;
export interface UnparsedRequest {
    method: string;
    url: string;
    data?: any;
    headers?: {
        [header: string]: string;
    };
    changeSet?: UnparsedRequest[];
    _isChangeSet?: boolean;
}
export interface ODataRequest {
    method: SupportedMethod;
    url: string;
    odataQuery: ODataQuery;
    odataBinds: OdataBinds;
    values: AnyObject;
    abstractSqlModel?: AbstractSQLCompiler.AbstractSqlModel;
    abstractSqlQuery?: AbstractSQLCompiler.AbstractSqlQuery;
    sqlQuery?: AbstractSQLCompiler.SqlResult | AbstractSQLCompiler.SqlResult[];
    resourceName: string;
    vocabulary: string;
    _defer?: boolean;
    id?: number;
    custom: AnyObject;
    tx?: Tx;
    modifiedFields?: ReturnType<AbstractSQLCompiler.EngineInstance['getModifiedFields']>;
    hooks?: InstantiatedHooks<sbvrUtils.Hooks>;
    engine?: AbstractSQLCompiler.Engines;
}
export declare const parseId: (b: any) => any;
export declare const memoizedParseOdata: (url: string) => {
    tree: ODataQuery;
    binds: ODataBinds;
};
export declare const metadataEndpoints: string[];
export declare function parseOData(b: UnparsedRequest & {
    _isChangeSet?: false;
}): Bluebird<ODataRequest>;
export declare function parseOData(b: UnparsedRequest & {
    _isChangeSet: true;
}): Bluebird<ODataRequest[]>;
export declare function parseOData(b: UnparsedRequest): Bluebird<ODataRequest | ODataRequest[]>;
export declare const translateUri: <T extends Pick<ODataRequest, "values" | "method" | "odataQuery" | "odataBinds" | "vocabulary" | "abstractSqlModel" | "resourceName">>(request: T & {
    abstractSqlQuery?: ODataRequest['abstractSqlQuery'];
}) => T & {
    abstractSqlQuery?: ODataRequest['abstractSqlQuery'];
};
