You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
1.3 KiB
27 lines
1.3 KiB
4 months ago
|
// @ts-ignore
|
||
|
import asyncIterator from './iterators/async.mjs';
|
||
|
// @ts-ignore
|
||
|
import nodeStreamIterator from './iterators/nodeStream.mjs';
|
||
|
// @ts-ignore
|
||
|
import promiseIterator from './iterators/promise.mjs';
|
||
|
// @ts-ignore
|
||
|
import readerIterator from './iterators/reader.mjs';
|
||
|
const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
|
||
|
/**
|
||
|
* @param response A response. Supports fetch, node-fetch, and cross-fetch
|
||
|
*/ export default function responseIterator(response) {
|
||
|
if (response === undefined) throw new Error('Missing response for responseIterator');
|
||
|
// determine the body
|
||
|
let body = response;
|
||
|
if (response.body) body = response.body;
|
||
|
else if (response.data) body = response.data;
|
||
|
else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
|
||
|
/* c8 ignore stop */ // adapt the body
|
||
|
if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator(body);
|
||
|
/* c8 ignore start */ if (body.getReader) return readerIterator(body.getReader());
|
||
|
if (body.stream) return readerIterator(body.stream().getReader());
|
||
|
if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
|
||
|
if (body.pipe) return nodeStreamIterator(body);
|
||
|
/* c8 ignore stop */ throw new Error('Unknown body type for responseIterator. Maybe you are not passing a streamable response');
|
||
|
};
|