import { DataProvider, fetchUtils, RaRecord, GetListParams, GetListResult, GetOneParams, GetOneResult, GetManyParams, GetManyResult, GetManyReferenceParams, GetManyReferenceResult, UpdateParams, UpdateResult, UpdateManyParams, UpdateManyResult, CreateParams, CreateResult, DeleteParams, DeleteResult, DeleteManyParams, DeleteManyResult } from 'ra-core';

/**
 * Maps react-admin queries to a TreeQL powered REST API
 *
 * @see https://treeql.org
 *
 * @example
 *
 * getList          => GET http://my.api.url/records/posts?order=title,ASC&page=1,25
 * getOne           => GET http://my.api.url/records/posts/123
 * getMany          => GET http://my.api.url/records/posts?123,456,789
 * getManyReference => GET http://my.api.url/records/posts?filter=author_id,eq,345
 * update           => PUT http://my.api.url/records/posts/123
 * updateMany       => PUT http://my.api.url/records/posts/123,456,789
 * create           => POST http://my.api.url/records/posts/123
 * delete           => DELETE http://my.api.url/records/posts/123
 * deleteMany       => DELETE http://my.api.url/records/posts/123,456,789
 *
 * @example
 *
 * import * as React from "react";
 * import { Admin, Resource } from 'react-admin';
 * import treeqlProvider from 'ra-data-treeql';
 *
 * import { PostList } from './posts';
 *
 * const App = () => (
 *     <Admin dataProvider={treeqlProvider('http://my.api.url/')}>
 *         <Resource name="posts" list={PostList} />
 *     </Admin>
 * );
 *
 * export default App;
 */
/**
 * append the result directly to the request url
 */
declare const formatFilter: (filter: Record<string, any>) => string;
declare class TreeQLDataProvider<ResourceType extends string = string> implements DataProvider<ResourceType> {
    private httpClient;
    private apiUrl;
    constructor(_apiUrl: ResourceType, httpClient?: (url: any, options?: fetchUtils.Options) => Promise<{
        status: number;
        headers: Headers;
        body: string;
        json: any;
    }>);
    getList<RecordType extends RaRecord = any>(resource: ResourceType, params: GetListParams): Promise<GetListResult<RecordType>>;
    getOne<RecordType extends RaRecord = any>(resource: ResourceType, params: GetOneParams<RecordType>): Promise<GetOneResult<RecordType>>;
    getMany<RecordType extends RaRecord = any>(resource: ResourceType, params: GetManyParams): Promise<GetManyResult<RecordType>>;
    getManyReference<RecordType extends RaRecord = any>(resource: ResourceType, params: GetManyReferenceParams): Promise<GetManyReferenceResult<RecordType>>;
    update<RecordType extends RaRecord = any>(resource: ResourceType, params: UpdateParams<RecordType>): Promise<UpdateResult<RecordType>>;
    updateMany<RecordType extends RaRecord = any>(resource: ResourceType, params: UpdateManyParams): Promise<UpdateManyResult<RecordType>>;
    create<RecordType extends RaRecord = any>(resource: ResourceType, params: CreateParams): Promise<CreateResult<RecordType>>;
    delete<RecordType extends RaRecord = any>(resource: ResourceType, params: DeleteParams<RecordType>): Promise<DeleteResult<RecordType>>;
    deleteMany<RecordType extends RaRecord = any>(resource: ResourceType, params: DeleteManyParams<RecordType>): Promise<DeleteManyResult<RecordType>>;
    protected getURL(resource: string, _params?: Record<string, string>): string;
}
declare const getDataProvider: (apiUrl: string, httpClient?: typeof fetchUtils.fetchJson) => TreeQLDataProvider<string>;

export { TreeQLDataProvider, getDataProvider as default, formatFilter };
