UNPKG

response-iterator

Version:

Creates an async iterator for a variety of inputs in the browser and node. Supports fetch, node-fetch, and cross-fetch

1 lines 3.14 kB
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/http/response-iterator/src/index.ts"],"sourcesContent":["import type { Readable as NodeReadableStream } from 'stream';\nimport type { AxiosResponse } from 'axios';\nimport type { Response as NodeResponse } from 'node-fetch';\n\nimport asyncIterator from './iterators/async';\nimport nodeStreamIterator from './iterators/nodeStream';\nimport promiseIterator from './iterators/promise';\nimport readerIterator from './iterators/reader';\n\ninterface CrossFetchResponse {\n _bodyBlob: Blob;\n}\n\nconst hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;\n\n/**\n * @param response A response. Supports fetch, node-fetch, and cross-fetch\n */\nexport default function responseIterator<T>(response: unknown): AsyncIterableIterator<T> {\n if (response === undefined) throw new Error('Missing response for responseIterator');\n\n // determine the body\n let body: unknown = response;\n if ((response as NodeResponse).body) body = (response as NodeResponse).body;\n // node-fetch, browser fetch, undici\n else if ((response as AxiosResponse).data) body = (response as AxiosResponse).data;\n // axios\n /* c8 ignore start */ else if ((response as CrossFetchResponse)._bodyBlob) body = (response as CrossFetchResponse)._bodyBlob; // cross-fetch\n /* c8 ignore stop */\n\n // adapt the body\n if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator<T>(body as AsyncIterableIterator<T>);\n /* c8 ignore start */\n if ((body as ReadableStream<T>).getReader) return readerIterator<T>((body as ReadableStream<T>).getReader());\n if ((body as Blob).stream) return readerIterator<T>(((body as Blob).stream() as unknown as ReadableStream<T>).getReader());\n if ((body as Blob).arrayBuffer) return promiseIterator<T>((body as Blob).arrayBuffer());\n if ((body as NodeReadableStream).pipe) return nodeStreamIterator<T>(body as NodeReadableStream);\n /* c8 ignore stop */\n\n throw new Error('Unknown body type for responseIterator. Maybe you are not passing a streamable response');\n}\n"],"names":["responseIterator","hasIterator","Symbol","asyncIterator","response","undefined","Error","body","data","_bodyBlob","getReader","readerIterator","stream","arrayBuffer","promiseIterator","pipe","nodeStreamIterator"],"mappings":";;;;+BAeA;;CAEC,GACD;;;eAAwBA;;;4DAdE;iEACK;8DACH;6DACD;;;;;;AAM3B,IAAMC,cAAc,OAAOC,WAAW,eAAeA,OAAOC,aAAa;AAK1D,SAASH,iBAAoBI,QAAiB;IAC3D,IAAIA,aAAaC,WAAW,MAAM,IAAIC,MAAM;IAE5C,qBAAqB;IACrB,IAAIC,OAAgBH;IACpB,IAAI,AAACA,SAA0BG,IAAI,EAAEA,OAAO,AAACH,SAA0BG,IAAI;SAEtE,IAAI,AAACH,SAA2BI,IAAI,EAAED,OAAO,AAACH,SAA2BI,IAAI;SAEvD,IAAI,AAACJ,SAAgCK,SAAS,EAAEF,OAAO,AAACH,SAAgCK,SAAS,EAAE,cAAc;IAC5I,kBAAkB,GAElB,iBAAiB;IACjB,IAAIR,eAAeM,IAAI,CAACL,OAAOC,aAAa,CAAC,EAAE,OAAOA,IAAAA,cAAa,EAAII;IACvE,mBAAmB,GACnB,IAAI,AAACA,KAA2BG,SAAS,EAAE,OAAOC,IAAAA,eAAc,EAAI,AAACJ,KAA2BG,SAAS;IACzG,IAAI,AAACH,KAAcK,MAAM,EAAE,OAAOD,IAAAA,eAAc,EAAI,AAAC,AAACJ,KAAcK,MAAM,GAAoCF,SAAS;IACvH,IAAI,AAACH,KAAcM,WAAW,EAAE,OAAOC,IAAAA,gBAAe,EAAI,AAACP,KAAcM,WAAW;IACpF,IAAI,AAACN,KAA4BQ,IAAI,EAAE,OAAOC,IAAAA,mBAAkB,EAAIT;IACpE,kBAAkB,GAElB,MAAM,IAAID,MAAM;AAClB"}