/** * 单个 Http Header 的数组类型 * * ```ts * const header: HeaderAry = ['content-type', 'application/json']; * ``` */ type AryHeaderItem = [string, string]; type HeadersInitInput = HeadersInit | undefined | null; /** * 将任意 `HeadersInit` 转为多个 {@link AryHeaderItem} 的数组 * * 浏览器环境或 bun 环境下,`HeadersInit` 类型如下: * * `type HeadersInit = [string, string][] | Record | Headers;` * * 需要注意的是,在使用 `headers.entries()` 时,Header 的 Key 会转为小写: * * ```ts * const h = new Headers(); * h.set('Content-Type', 'application/json'); * console.log([...h.keys()]); // 将输出 => ['content-type'] * ``` * * 所以,当输入的 `headers` 为 `[string, string][]` 或 `Record` 类 * 型时,应该确保 Key 为小写。即: * * ```ts * const h1 = [['content-Type', 'application/json']]; * const h2 = { 'content-Type': 'application/json' }; * ``` * * @param headers * @returns {AryHeaderItem[]} */ declare const toAryHeaders: (headers?: HeadersInitInput) => AryHeaderItem[]; /** * 合并多个 {@link HeadersInitInput} 为 `Headers` 对象 * * Key(Header name) 会进行 trim 操作: * * - Key(Header name) 头尾的空格(制表符、回车符)会被去除 * - 当 Key(Header name) 为空字符(trim 后),将跳过该 Key * * 注意:当输入的 `headers` 为 `[string, string][]` 或 `Record` 类 * 型时,应该确保 Key(Header name) 为小写(以确保同 Key 的 Header 会被有效覆盖)。 * * @param inputs 多个 {@link HeadersInitInput} 对象,Key(Header name) 应为小写(中划线) * @returns {Headers} */ declare const mergeHeaders: (...inputs: HeadersInitInput[]) => Headers; /** * 合并多个 AbortSignals * * ```ts * const maybeSignal: AbortSignal | null = null; * mergeAbortSignals(new AbortController, AbortSignal.timeout(5000), maybeSignal); * // AbortSignal.any([new AbortController, AbortSignal.timeout(5000)]) * ``` * * @param signals * @returns {AbortSignal | undefined} */ declare const mergeAbortSignals: (...signals: (AbortSignal | undefined | null)[]) => AbortSignal | undefined; type HttpStatusCode = number; type ResponseInitInput = ResponseInit | HttpStatusCode | null | undefined; /** * 合并多个 {@link ResponseInitInput} 为 `ResponseInit` 对象 * * 主要针对: * - 允许传入 {@link HttpStatusCode} 作为 `ResponseInit`,即:`new Response(body, mergeRespInit(404))` * - 处理多个 `ResponseInit` 对象的 `headers` 合并 * - 合并多个 `ResponseInit` * * ```ts * new Response(body, * mergeRespInit( * 404, * { headers: { 'x-a': '1' } }, * { headers: { 'x-b': '2', 'x-a': 'replaced' } }, * { status: 502, statusText: 'Bad Gateway' }, * ) * ); * ``` * * @param opts * @returns */ declare const mergeRespInit: (...opts: ResponseInitInput[]) => ResponseInit; export { mergeAbortSignals, mergeHeaders, mergeRespInit, toAryHeaders }; export type { AryHeaderItem, HeadersInitInput, HttpStatusCode, ResponseInitInput };