{"mappings":";;;;ACOA,OAAO,MAAM,qBAAsB,CAAC,SAAS,WAAW,EAAE,QAAQ,CAAC,gDAgBhE,CAAC;AACJ,mCACE,MAAM,EAAE,eAAe,UAAU,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,GACvB,cAAc,CAAC,UAAU,CAAC,CAe5B;AC1BD,wBAAwB,CAAC,EAAE,EACzB,IAAI,EACJ,MAAM,EACN,OAAO,EACP,eAAe,EACf,IAAI,EACJ,MAAM,EACN,OAAO,EACP,YAAY,EACb,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,CAqD5B;AAED,8BAAoC,CAAC,EACnC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,YAAwC,EAC7E,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,EACrC,gBAAgB,EAAE,WAAW,GAC5B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAoBtB;AAED,+BAAqC,CAAC,EACpC,MAAM,EAAE,eAAe,UAAU,CAAC,EAClC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,cAatC","sources":["source/source/Event.ts","source/source/utility.ts","source/source/index.ts","source/index.ts"],"sourcesContent":[null,null,null,"import { EventTarget } from 'event-target-shim';\nimport {\n  parseBody,\n  parseHeaders,\n  ProgressData,\n  Request,\n  RequestResult,\n  Response\n} from 'koajax';\nimport { Blob, fetch, Headers } from 'taro-fetch-polyfill';\nimport { ReadableStream } from 'web-streams-polyfill';\n\nimport { fromAsync } from './Event';\nimport { emitStreamProgress, streamFromProgress } from './utility';\n\nexport * from './utility';\n\nexport function request<B>({\n  path,\n  method,\n  headers,\n  withCredentials,\n  body,\n  signal,\n  timeout,\n  responseType\n}: Request): RequestResult<B> {\n  const signals = [signal, timeout && AbortSignal.timeout(timeout)].filter(\n    Boolean\n  );\n  headers =\n    headers instanceof Headers\n      ? Object.fromEntries(headers.entries())\n      : headers instanceof Array\n        ? Object.fromEntries(headers)\n        : headers;\n  headers =\n    responseType === 'text'\n      ? { ...headers, Accept: 'text/plain' }\n      : responseType === 'json'\n        ? { ...headers, Accept: 'application/json' }\n        : responseType === 'document'\n          ? {\n              ...headers,\n              Accept: 'text/html, application/xhtml+xml, application/xml'\n            }\n          : responseType === 'arraybuffer' || responseType === 'blob'\n            ? { ...headers, Accept: 'application/octet-stream' }\n            : headers;\n  const isStream = body instanceof ReadableStream;\n  var upload: AsyncGenerator<ProgressData> | undefined;\n\n  if (isStream) {\n    const uploadProgress = new EventTarget();\n\n    body = ReadableStream.from(\n      emitStreamProgress(\n        body as ReadableStream<Uint8Array>,\n        +headers['Content-Length'],\n        uploadProgress\n      )\n    ) as ReadableStream<Uint8Array>;\n\n    upload = streamFromProgress(uploadProgress);\n  }\n  const downloadProgress = new EventTarget();\n\n  const response = fetch(path + '', {\n    method,\n    headers,\n    credentials: withCredentials ? 'include' : 'omit',\n    body,\n    signal: signals[0] && AbortSignal.any(signals),\n    // @ts-expect-error https://developer.chrome.com/docs/capabilities/web-apis/fetch-streaming-requests\n    duplex: isStream ? 'half' : undefined\n  }).then(response =>\n    parseResponse<B>(response, responseType, downloadProgress)\n  );\n  return { response, upload, download: streamFromProgress(downloadProgress) };\n}\n\nexport async function parseResponse<B>(\n  { status, statusText, headers, body }: import('taro-fetch-polyfill').Response,\n  responseType: Request['responseType'],\n  downloadProgress: EventTarget\n): Promise<Response<B>> {\n  const stream = ReadableStream.from(\n    emitStreamProgress(\n      body as ReadableStream<Uint8Array>,\n      +headers.get('Content-Length'),\n      downloadProgress\n    )\n  ) as ReadableStream<Uint8Array>;\n\n  const contentType = headers.get('Content-Type') || '';\n\n  const header = parseHeaders(\n    [...headers].map(([key, value]) => `${key}: ${value}`).join('\\n')\n  );\n  const rBody =\n    status === 204\n      ? undefined\n      : await parseFetchBody<B>(stream, contentType, responseType);\n\n  return { status, statusText, headers: header, body: rBody };\n}\n\nexport async function parseFetchBody<B>(\n  stream: ReadableStream<Uint8Array>,\n  contentType: string,\n  responseType: Request['responseType']\n) {\n  const blob = new Blob(await fromAsync(stream), { type: contentType });\n\n  if (responseType === 'blob') return blob as B;\n\n  if (responseType === 'arraybuffer') return blob.arrayBuffer() as B;\n\n  const text = await blob.text();\n\n  if (responseType === 'text') return text as B;\n\n  return parseBody<B>(text, contentType);\n}\n"],"names":[],"version":3,"file":"index.d.ts.map"}