import { Middleware, Request as RequestBase, Response as ResponseBase, TransferHandler } from '../types'; /** * Compose a transfer handler with a core transfer handler and a list of middleware. * @param coreHandler Core transfer handler * @param middleware List of middleware * @returns A transfer handler whose option type is the union of the core * transfer handler's option type and the middleware's option type. * @internal */ export declare const composeTransferHandler: = TransferHandler>>(coreHandler: CoreHandler, middleware: OptionToMiddleware) => (request: Request, options: MergeNoConflictKeys<[...MiddlewareOptionsArr, InferOptionTypeFromTransferHandler]>) => Promise; /** * Type to convert a middleware option type to a middleware type with the given * option type. */ type OptionToMiddleware = Options extends [] ? [] : Options extends [infer LastOption] ? [Middleware] : Options extends [infer FirstOption, ...infer RestOptions] ? [ Middleware, ...OptionToMiddleware ] : never; /** * Type to intersect multiple types if they have no conflict keys. */ type MergeNoConflictKeys = Options extends [ infer OnlyOption ] ? OnlyOption : Options extends [infer FirstOption, infer SecondOption] ? FirstOption & SecondOption : Options extends [infer FirstOption, ...infer RestOptions] ? FirstOption & MergeNoConflictKeys : never; /** * Type to infer the option type of a transfer handler type. */ type InferOptionTypeFromTransferHandler> = Parameters[1]; export {};