import { FilterSpecifier, RecordKeyMap, PageSpecifier, SortSpecifier } from '@orbit/records';
import { Dict } from '@orbit/utils';
import { JSONAPISerializer } from './jsonapi-serializer';
import { SerializerForFn } from '@orbit/serializers';
import { RecordQueryRequest } from './lib/query-requests';
import { RecordTransformRequest } from './lib/transform-requests';
export interface JSONAPIURLBuilderSettings {
    host?: string;
    namespace?: string;
    serializer?: JSONAPISerializer;
    serializerFor: SerializerForFn;
    keyMap?: RecordKeyMap;
}
export declare class JSONAPIURLBuilder {
    host?: string;
    namespace?: string;
    serializerFor: SerializerForFn;
    serializer?: JSONAPISerializer;
    keyMap?: RecordKeyMap;
    constructor(settings: JSONAPIURLBuilderSettings);
    resourceNamespace(type?: string): string | undefined;
    resourceHost(type?: string): string | undefined;
    resourceURL(type: string, id?: string): string;
    resourcePath(type: string, id?: string): string;
    resourceRelationshipURL(type: string, id: string, relationship: string): string;
    relatedResourceURL(type: string, id: string, relationship: string): string;
    buildFilterParam(filters: FilterSpecifier[] | Dict<unknown | unknown[]>, request?: RecordQueryRequest | RecordTransformRequest): Dict<unknown>[];
    buildSortParam(sortSpecifiers: (SortSpecifier | string)[] | string, request?: RecordQueryRequest | RecordTransformRequest): string;
    buildPageParam(pageSpecifier: PageSpecifier, request?: RecordQueryRequest | RecordTransformRequest): Dict<unknown>;
    buildIncludeParam(includeSpecifier: string | string[] | string[][], request?: RecordQueryRequest | RecordTransformRequest): string;
    buildFieldsParam(fieldsSpecifier: Dict<string | string[]>, request?: RecordQueryRequest | RecordTransformRequest): Dict<string>;
    appendQueryParams(url: string, params: Dict<string>): string;
    protected serializeFieldParam(field: string, options?: {
        type?: string;
        kind?: 'attribute' | 'relationship';
    }): string;
    protected serializeRelationshipInPath(type: string | undefined, relationship: string): string;
}
