import { HttpParams } from '@angular/common/http';
import { StringDictionary } from '@jscrpt/common';
import { QueryStringSerializer } from './classes/queryStringSerializer';
import { BuildMiddlewaresFn, ParamsDataIteratorItem, RestMiddleware } from '../interfaces';
import { RestMiddlewareType } from './types';
/**
 * Builds and returns array of middleware run functions
 * @param middlewares - Array of set middleware types
 * @param middlewaresOrder - Array of middleware types in order that should be executed
 */
export declare const buildMiddlewares: BuildMiddlewaresFn;
/**
 * Creates NotType from Type, this type will be removed from middlewares
 * @param type - Type that will be set as NotType
 */
export declare function not(type: RestMiddlewareType<RestMiddleware<any, any, any, any, any>>): RestMiddlewareType<RestMiddleware>;
/**
 * Gets underlying type for Type and NotType
 * @param type - Type that is going to be used for extraction
 */
export declare function getType<TType extends RestMiddleware>(type: RestMiddlewareType<TType>): RestMiddlewareType<TType>;
/**
 * Tests whether is provided type NotType
 * @param type - Type to be tested for NotType
 */
export declare function isNotType<TType extends RestMiddleware>(type: RestMiddlewareType<TType>): boolean;
/**
 * Handles query param and fills params dictionary
 * @param data - Data for creating query param
 * @param params - Params where should be new value placed
 * @param args - Array of all arguments passed to handled function
 */
export declare function handleQueryParam(data: ParamsDataIteratorItem, params: StringDictionary, args: unknown[]): Promise<void>;
/**
 * Handles header param and fills headers dictionary
 * @param data - Data for creating header param
 * @param headers - Params where should be new value placed
 * @param args - Array of all arguments passed to handled function
 */
export declare function handleHeaderParam(data: ParamsDataIteratorItem, headers: StringDictionary, args: unknown[]): Promise<void>;
/**
 * Handles path param and return updated url
 * @param data - Data for creating path param
 * @param url - Current url to be updated
 * @param args - Array of all arguments passed to handled function
 */
export declare function handlePathParam(data: ParamsDataIteratorItem, url: string, args: unknown[]): Promise<string>;
/**
 * Handles query object param and fills serialized query string array
 * @param data - Data for creating query object param
 * @param queryStrings - Array of query serialized query strings
 * @param querySerializer - Serializer for query object
 * @param args - Array of all arguments passed to handled function
 */
export declare function handleQueryObjectParam(data: ParamsDataIteratorItem, queryStrings: string[], querySerializer: QueryStringSerializer, args: unknown[]): Promise<void>;
/**
 * Merges serialized query objects data with existing http params
 * @param queryStrings - Serialized query objects data
 * @param requestParams - Existing http params to be merged with
 */
export declare function mergeQueryObjectParamsWithHttpParams(queryStrings: string[], requestParams: HttpParams): HttpParams;
//# sourceMappingURL=utils.d.ts.map