import { Normalized } from '@rxap/utilities';
export declare enum UpstreamOptionsKinds {
    OPEN_API = "open-api"
}
export type UpstreamOptions = OpenApiUpstreamOptions | BaseUpstreamOptions;
export type NormalizedUpstreamOptions = NormalizedOpenApiUpstreamOptions | NormalizedBaseUpstreamOptions;
export interface BaseUpstreamOptions {
    kind: UpstreamOptionsKinds;
    mapper?: RequestMapper;
}
export interface NormalizedBaseUpstreamOptions<Mapper extends NormalizedRequestMapper = NormalizedRequestMapper> extends Readonly<Normalized<BaseUpstreamOptions>> {
    kind: UpstreamOptionsKinds;
    mapper: Mapper | null;
}
export declare function NormalizeBaseUpstreamOptions(options: BaseUpstreamOptions): NormalizedBaseUpstreamOptions;
export type RequestMapper = PagedRequestMapper | BaseRequestMapper | OptionsRequestMapper | ResolveRequestMapper;
export type NormalizedRequestMapper = NormalizedPagedRequestMapper | NormalizedBaseRequestMapper | NormalizedOptionsRequestMapper | NormalizedResolveRequestMapper;
export declare function NormalizeRequestMapper(mapper?: RequestMapper | null): NormalizedRequestMapper | null;
export declare enum RequestMapperKinds {
    DEFAULT = "default",
    PAGED = "paged",
    OPTIONS = "options",
    Resolve = "resolve"
}
export interface BaseRequestMapper {
    kind: RequestMapperKinds;
}
export interface NormalizedBaseRequestMapper extends Readonly<Normalized<BaseRequestMapper>> {
    kind: RequestMapperKinds.DEFAULT;
}
export declare function NormalizeBaseRequestMapper(mapper: BaseRequestMapper): NormalizedBaseRequestMapper;
export declare function IsNormalizedBaseRequestMapper(mapper: NormalizedRequestMapper): mapper is NormalizedBaseRequestMapper;
export interface PagedRequestMapper extends BaseRequestMapper {
    pageIndex?: string;
    pageSize?: string;
    sortBy?: string;
    sortDirection?: string;
    list?: string;
    total?: string;
    filter?: {
        eq: string;
        join: string;
    };
}
export interface NormalizedPagedRequestMapper extends Readonly<Normalized<PagedRequestMapper>> {
    kind: RequestMapperKinds.PAGED;
    filter: {
        eq: string;
        join: string;
    } | null;
}
export declare function NormalizePagedRequestMapper(mapper: PagedRequestMapper): NormalizedPagedRequestMapper;
export declare function IsNormalizedPagedRequestMapper(mapper: NormalizedRequestMapper): mapper is NormalizedPagedRequestMapper;
export declare enum ToOptionsFunction {
    TO_OPTIONS = "ToOptions",
    TO_OPTIONS_FROM_OBJECT = "ToOptionsFromObject"
}
export interface OptionsRequestMapper extends BaseRequestMapper {
    toFunction?: ToOptionsFunction;
    toValue?: string;
    toDisplay?: string;
}
export interface NormalizedOptionsRequestMapper extends Readonly<Normalized<OptionsRequestMapper>> {
    kind: RequestMapperKinds.OPTIONS;
    toFunction: ToOptionsFunction;
}
export declare function NormalizeOptionsRequestMapper(mapper: OptionsRequestMapper): NormalizedOptionsRequestMapper;
export declare function IsNormalizedOptionsRequestMapper(mapper: NormalizedRequestMapper): mapper is NormalizedOptionsRequestMapper;
export interface ResolveRequestMapper extends BaseRequestMapper {
    value?: string;
}
export interface NormalizedResolveRequestMapper extends Readonly<Normalized<ResolveRequestMapper>> {
    kind: RequestMapperKinds.Resolve;
}
export declare function NormalizeResolveRequestMapper(mapper: ResolveRequestMapper): NormalizedResolveRequestMapper;
export declare function IsNormalizedResolveRequestMapper(mapper: NormalizedRequestMapper): mapper is NormalizedResolveRequestMapper;
export interface OpenApiUpstreamOptions extends BaseUpstreamOptions {
    operationId: string;
    isService?: boolean;
    scope?: string;
}
export interface NormalizedOpenApiUpstreamOptions extends Readonly<Normalized<Omit<OpenApiUpstreamOptions, keyof NormalizedBaseUpstreamOptions>>>, NormalizedBaseUpstreamOptions {
    kind: UpstreamOptionsKinds.OPEN_API;
}
export declare function NormalizeOpenApiUpstreamOptions(options: OpenApiUpstreamOptions): NormalizedOpenApiUpstreamOptions;
export declare function IsNormalizedOpenApiUpstreamOptions(options: NormalizedUpstreamOptions): options is NormalizedOpenApiUpstreamOptions;
export declare function NormalizeUpstreamOptions(options?: UpstreamOptions): NormalizedUpstreamOptions | null;
