response-iterator 0.2.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/LICENSE +1 -1
  2. package/dist/cjs/index.d.ts +4 -0
  3. package/dist/cjs/index.js +32 -70
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/iterators/async.d.ts +1 -0
  6. package/dist/cjs/iterators/async.js +22 -0
  7. package/dist/cjs/iterators/async.js.map +1 -0
  8. package/dist/cjs/iterators/nodeStream.d.ts +3 -0
  9. package/dist/cjs/iterators/nodeStream.js +95 -0
  10. package/dist/cjs/iterators/nodeStream.js.map +1 -0
  11. package/dist/cjs/iterators/promise.d.ts +1 -0
  12. package/dist/cjs/iterators/promise.js +42 -0
  13. package/dist/cjs/iterators/promise.js.map +1 -0
  14. package/dist/cjs/iterators/reader.d.ts +1 -0
  15. package/dist/cjs/iterators/reader.js +29 -0
  16. package/dist/cjs/iterators/reader.js.map +1 -0
  17. package/dist/cjs/package.json +1 -1
  18. package/dist/esm/index.d.ts +4 -0
  19. package/dist/esm/index.mjs +34 -0
  20. package/dist/esm/index.mjs.map +1 -0
  21. package/dist/esm/iterators/async.d.ts +1 -0
  22. package/dist/esm/iterators/async.mjs +14 -0
  23. package/dist/esm/iterators/async.mjs.map +1 -0
  24. package/dist/esm/iterators/nodeStream.d.ts +3 -0
  25. package/dist/esm/iterators/nodeStream.mjs +87 -0
  26. package/dist/esm/iterators/nodeStream.mjs.map +1 -0
  27. package/dist/esm/iterators/promise.d.ts +1 -0
  28. package/dist/esm/iterators/promise.mjs +34 -0
  29. package/dist/esm/iterators/promise.mjs.map +1 -0
  30. package/dist/esm/iterators/reader.d.ts +1 -0
  31. package/dist/esm/iterators/reader.mjs +21 -0
  32. package/dist/esm/iterators/reader.mjs.map +1 -0
  33. package/dist/esm/package.json +1 -1
  34. package/dist/umd/package.json +1 -1
  35. package/dist/umd/response-iterator.js +134 -22
  36. package/dist/umd/response-iterator.js.map +1 -1
  37. package/dist/umd/response-iterator.min.js +1 -1
  38. package/dist/umd/response-iterator.min.js.map +1 -1
  39. package/package.json +21 -71
  40. package/dist/esm/index.js +0 -79
  41. package/dist/esm/index.js.map +0 -1
  42. package/dist/index.d.ts +0 -13
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 Kevin Malakoff
3
+ Copyright (c) 2021-2022 Kevin Malakoff
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @param response A response. Supports fetch, node-fetch, and cross-fetch
3
+ */
4
+ export default function responseIterator<T>(response: unknown): AsyncIterableIterator<T>;
package/dist/cjs/index.js CHANGED
@@ -1,87 +1,49 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- function _defineProperty(obj, key, value) {
4
- if (key in obj) {
5
- Object.defineProperty(obj, key, {
6
- value: value,
7
- enumerable: true,
8
- configurable: true,
9
- writable: true
10
- });
11
- } else {
12
- obj[key] = value;
13
- }
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = responseIterator;
14
7
 
15
- return obj;
16
- }
17
-
18
- function streamIterator(stream) {
19
- var iterator = stream[Symbol.asyncIterator]();
20
- return _defineProperty({
21
- next: function next() {
22
- return iterator.next();
23
- }
24
- }, Symbol.asyncIterator, function () {
25
- return this;
26
- });
27
- }
28
- /* c8 ignore start */
8
+ var _async = _interopRequireDefault(require("./iterators/async"));
29
9
 
10
+ var _nodeStream = _interopRequireDefault(require("./iterators/nodeStream"));
30
11
 
31
- function readerIterator(reader) {
32
- return _defineProperty({
33
- next: function next() {
34
- return reader.read();
35
- }
36
- }, Symbol.asyncIterator, function () {
37
- return this;
38
- });
39
- }
12
+ var _promise = _interopRequireDefault(require("./iterators/promise"));
40
13
 
41
- function promiseIterator(promise) {
42
- var resolved = false;
43
- return _defineProperty({
44
- next: function next() {
45
- if (resolved) return Promise.resolve({
46
- value: undefined,
47
- done: true
48
- });
49
- resolved = true;
50
- return new Promise(function (resolve, reject) {
51
- promise.then(function (value) {
52
- resolve({
53
- value: value,
54
- done: false
55
- });
56
- })["catch"](reject);
57
- });
58
- }
59
- }, Symbol.asyncIterator, function () {
60
- return this;
61
- });
62
- }
63
- /* c8 ignore stop */
14
+ var _reader = _interopRequireDefault(require("./iterators/reader"));
64
15
 
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
65
17
 
18
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
66
19
  /**
67
20
  * @param response A response. Supports fetch, node-fetch, and cross-fetch
68
21
  */
22
+
69
23
  function responseIterator(response) {
70
- if (response === undefined) throw new Error("Missing response for responseIterator"); // node node-fetch
24
+ if (response === undefined) throw new Error("Missing response for responseIterator"); // determine the body
71
25
 
72
- if (response.body && response.body[Symbol.asyncIterator] !== undefined) return streamIterator(response.body);
26
+ var body = response;
27
+ if (response.body) body = response.body; // node-fetch, browser fetch, undici
28
+ else if (response.data) body = response.data; // axios
29
+
30
+ /* c8 ignore start */
31
+ else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
32
+
33
+ /* c8 ignore stop */
34
+ // adapt the body
35
+
36
+ if (hasIterator && body[Symbol.asyncIterator]) return (0, _async["default"])(body);
73
37
  /* c8 ignore start */
74
- // browser fetch or undici
75
- else if (response.body && response.body.getReader) return readerIterator(response.body.getReader()); // cross platform axios
76
- else if (response.data) {
77
- if (response.data.stream) return readerIterator(response.data.stream().getReader());else if (response.data[Symbol.asyncIterator] !== undefined) return streamIterator(response.data);
78
- } // browser cross-fetch
79
- else if (response._bodyBlob) return promiseIterator(response._bodyBlob.arrayBuffer()); // node got
80
- else if (response.readable && response[Symbol.asyncIterator] !== undefined) return streamIterator(response);
38
+
39
+ if (body.getReader) return (0, _reader["default"])(body.getReader());
40
+ if (body.stream) return (0, _reader["default"])(body.stream().getReader());
41
+ if (body.arrayBuffer) return (0, _promise["default"])(body.arrayBuffer());
42
+ if (body.pipe) return (0, _nodeStream["default"])(body);
81
43
  /* c8 ignore stop */
82
44
 
83
- throw new Error("Unknown body type for responseIterator");
45
+ throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
84
46
  }
85
47
 
86
- module.exports = responseIterator;
87
- //# sourceMappingURL=index.js.map
48
+ module.exports = exports.default;
49
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as GotResponse } from \"got\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\nimport { Response as UndiciResponse } from \"undici\";\n\ninterface CrossFetchResponse {\n _bodyBlob: Blob;\n}\n\nfunction streamIterator<T>(stream): AsyncIterableIterator<T> {\n const iterator = stream[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\n/* c8 ignore start */\nfunction readerIterator<T>(reader): AsyncIterableIterator<T> {\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\nfunction promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n\nexport type ResponseType = AxiosResponse | CrossFetchResponse | GotResponse | NodeResponse | Response | UndiciResponse;\n\n/**\n * @param response A response. Supports fetch, node-fetch, and cross-fetch\n */\nexport default function responseIterator<T>(response: ResponseType): AsyncIterableIterator<T> {\n if (response === undefined) throw new Error(\"Missing response for responseIterator\");\n\n // node node-fetch\n if ((response as NodeResponse).body && (response as NodeResponse).body[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as NodeResponse).body);\n /* c8 ignore start */\n // browser fetch or undici\n else if ((response as Response).body && (response as Response).body.getReader)\n return readerIterator<T>((response as Response).body.getReader());\n\n // cross platform axios\n else if ((response as AxiosResponse).data) {\n if ((response as AxiosResponse<Blob>).data.stream)\n return readerIterator<T>(((response as AxiosResponse<Blob>).data.stream() as unknown as ReadableStream<Uint8Array>).getReader());\n else if ((response as AxiosResponse<NodeReadableStream>).data[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as AxiosResponse<NodeReadableStream>).data);\n }\n\n // browser cross-fetch\n else if ((response as CrossFetchResponse)._bodyBlob)\n return promiseIterator<T>((response as CrossFetchResponse)._bodyBlob.arrayBuffer());\n // node got\n else if ((response as GotResponse).readable && (response as GotResponse)[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>(response as GotResponse);\n\n /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator\");\n}\n"],"names":["streamIterator","stream","iterator","Symbol","asyncIterator","next","readerIterator","reader","read","promiseIterator","promise","resolved","Promise","resolve","value","undefined","done","reject","then","responseIterator","response","Error","body","getReader","data","_bodyBlob","arrayBuffer","readable"],"mappings":";;;;;;;;;;;;;;;;;AAUA,SAASA,cAAT,CAA2BC,MAA3B,EAA6D;AAC3D,MAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACC,aAAR,CAAN,EAAjB;AACA;AACEC,IAAAA,IADF,kBAC8C;AAC1C,aAAOH,QAAQ,CAACG,IAAT,EAAP;AACD;AAHH,KAIGF,MAAM,CAACC,aAJV,cAI6C;AACzC,WAAO,IAAP;AACD,GANH;AAQD;AAED;;;AACA,SAASE,cAAT,CAA2BC,MAA3B,EAA6D;AAC3D;AACEF,IAAAA,IADF,kBAC8C;AAC1C,aAAOE,MAAM,CAACC,IAAP,EAAP;AACD;AAHH,KAIGL,MAAM,CAACC,aAJV,cAI6C;AACzC,WAAO,IAAP;AACD,GANH;AAQD;;AAED,SAASK,eAAT,CAA4BC,OAA5B,EAA+D;AAC7D,MAAIC,QAAQ,GAAG,KAAf;AACA;AACEN,IAAAA,IADF,kBAC8C;AAC1C,UAAIM,QAAJ,EAAc,OAAOC,OAAO,CAACC,OAAR,CAAgB;AAAEC,QAAAA,KAAK,EAAEC,SAAT;AAAoBC,QAAAA,IAAI,EAAE;AAA1B,OAAhB,CAAP;AACdL,MAAAA,QAAQ,GAAG,IAAX;AACA,aAAO,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmBI,MAAnB,EAA2B;AAC5CP,QAAAA,OAAO,CACJQ,IADH,CACQ,UAAUJ,KAAV,EAAiB;AACrBD,UAAAA,OAAO,CAAC;AAAEC,YAAAA,KAAK,EAALA,KAAF;AAASE,YAAAA,IAAI,EAAE;AAAf,WAAD,CAAP;AACD,SAHH,WAISC,MAJT;AAKD,OANM,CAAP;AAOD;AAXH,KAYGd,MAAM,CAACC,aAZV,cAY6C;AACzC,WAAO,IAAP;AACD,GAdH;AAgBD;AACD;;;AAIA;AACA;AACA;AACe,SAASe,gBAAT,CAA6BC,QAA7B,EAA+E;AAC5F,MAAIA,QAAQ,KAAKL,SAAjB,EAA4B,MAAM,IAAIM,KAAJ,CAAU,uCAAV,CAAN,CADgE;;AAI5F,MAAKD,QAAD,CAA2BE,IAA3B,IAAoCF,QAAD,CAA2BE,IAA3B,CAAgCnB,MAAM,CAACC,aAAvC,MAA0DW,SAAjG,EACE,OAAOf,cAAc,CAAKoB,QAAD,CAA2BE,IAA/B,CAArB;AACF;AACA;AAHA,OAIK,IAAKF,QAAD,CAAuBE,IAAvB,IAAgCF,QAAD,CAAuBE,IAAvB,CAA4BC,SAA/D,EACH,OAAOjB,cAAc,CAAKc,QAAD,CAAuBE,IAAvB,CAA4BC,SAA5B,EAAJ,CAArB,CADG;AAAA,OAIA,IAAKH,QAAD,CAA4BI,IAAhC,EAAsC;AACzC,QAAKJ,QAAD,CAAkCI,IAAlC,CAAuCvB,MAA3C,EACE,OAAOK,cAAc,CAAMc,QAAD,CAAkCI,IAAlC,CAAuCvB,MAAvC,EAAD,CAA2FsB,SAA3F,EAAJ,CAArB,CADF,KAEK,IAAKH,QAAD,CAAgDI,IAAhD,CAAqDrB,MAAM,CAACC,aAA5D,MAA+EW,SAAnF,EACH,OAAOf,cAAc,CAAKoB,QAAD,CAAgDI,IAApD,CAArB;AACH,GALI;AAAA,OAQA,IAAKJ,QAAD,CAAiCK,SAArC,EACH,OAAOhB,eAAe,CAAKW,QAAD,CAAiCK,SAAjC,CAA2CC,WAA3C,EAAJ,CAAtB,CADG;AAAA,OAGA,IAAKN,QAAD,CAA0BO,QAA1B,IAAuCP,QAAD,CAA0BjB,MAAM,CAACC,aAAjC,MAAoDW,SAA9F,EACH,OAAOf,cAAc,CAAIoB,QAAJ,CAArB;AAEF;;AAEA,QAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;AACD;;;;"}
1
+ {"version":3,"file":"index.js","names":["hasIterator","Symbol","asyncIterator","responseIterator","response","undefined","Error","body","data","_bodyBlob","getReader","readerIterator","stream","arrayBuffer","promiseIterator","pipe","nodeStreamIterator"],"sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\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)\n 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)\n 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"],"mappings":";;;;;;;AAIA;;AACA;;AACA;;AACA;;;;AAMA,IAAMA,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,aAA5D;AAEA;AACA;AACA;;AACe,SAASC,gBAAT,CAA6BC,QAA7B,EAA0E;EACvF,IAAIA,QAAQ,KAAKC,SAAjB,EAA4B,MAAM,IAAIC,KAAJ,CAAU,uCAAV,CAAN,CAD2D,CAGvF;;EACA,IAAIC,IAAa,GAAGH,QAApB;EACA,IAAKA,QAAD,CAA2BG,IAA/B,EAAqCA,IAAI,GAAIH,QAAD,CAA2BG,IAAlC,CAArC,CACA;EADA,KAEK,IAAKH,QAAD,CAA4BI,IAAhC,EAAsCD,IAAI,GAAIH,QAAD,CAA4BI,IAAnC,CAAtC,CACL;;EACA;EAFK,KAEsB,IAAKJ,QAAD,CAAiCK,SAArC,EACzBF,IAAI,GAAIH,QAAD,CAAiCK,SAAxC,CAVqF,CAUlC;;EACrD;EAEA;;EACA,IAAIT,WAAW,IAAIO,IAAI,CAACN,MAAM,CAACC,aAAR,CAAvB,EAA+C,OAAO,IAAAA,iBAAA,EAAiBK,IAAjB,CAAP;EAC/C;;EACA,IAAKA,IAAD,CAA4BG,SAAhC,EAA2C,OAAO,IAAAC,kBAAA,EAAmBJ,IAAD,CAA4BG,SAA5B,EAAlB,CAAP;EAC3C,IAAKH,IAAD,CAAeK,MAAnB,EACE,OAAO,IAAAD,kBAAA,EAAoBJ,IAAD,CAAeK,MAAf,EAAD,CAA0DF,SAA1D,EAAlB,CAAP;EACF,IAAKH,IAAD,CAAeM,WAAnB,EAAgC,OAAO,IAAAC,mBAAA,EAAoBP,IAAD,CAAeM,WAAf,EAAnB,CAAP;EAChC,IAAKN,IAAD,CAA6BQ,IAAjC,EAAuC,OAAO,IAAAC,sBAAA,EAAsBT,IAAtB,CAAP;EACvC;;EAEA,MAAM,IAAID,KAAJ,CAAU,yFAAV,CAAN;AACD"}
@@ -0,0 +1 @@
1
+ export default function asyncIterator<T>(source: any): AsyncIterableIterator<T>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = asyncIterator;
7
+
8
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
+
10
+ function asyncIterator(source) {
11
+ var iterator = source[Symbol.asyncIterator]();
12
+ return _defineProperty({
13
+ next: function next() {
14
+ return iterator.next();
15
+ }
16
+ }, Symbol.asyncIterator, function () {
17
+ return this;
18
+ });
19
+ }
20
+
21
+ module.exports = exports.default;
22
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","names":["asyncIterator","source","iterator","Symbol","next"],"sources":["../../../src/iterators/async.ts"],"sourcesContent":["export default function asyncIterator<T>(source): AsyncIterableIterator<T> {\n const iterator = source[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n"],"mappings":";;;;;;;;;AAAe,SAASA,aAAT,CAA0BC,MAA1B,EAA4D;EACzE,IAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACH,aAAR,CAAN,EAAjB;EACA;IACEI,IADF,kBAC8C;MAC1C,OAAOF,QAAQ,CAACE,IAAT,EAAP;IACD;EAHH,GAIGD,MAAM,CAACH,aAJV,cAI6C;IACzC,OAAO,IAAP;EACD,CANH;AAQD"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ import { Readable as NodeReadableStream } from "stream";
3
+ export default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T>;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = nodeStreamIterator;
7
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
8
+ /* c8 ignore start */
9
+
10
+ function nodeStreamIterator(stream) {
11
+ var _cleanup = null;
12
+ var error = null;
13
+ var done = false;
14
+ var data = [];
15
+ var waiting = [];
16
+
17
+ function onData(chunk) {
18
+ if (error) return;
19
+ if (waiting.length) return waiting.shift()[0]({
20
+ value: chunk,
21
+ done: false
22
+ });
23
+ data.push(chunk);
24
+ }
25
+
26
+ function onError(err) {
27
+ error = err;
28
+ var all = waiting.slice();
29
+ all.forEach(function (pair) {
30
+ pair[1](err);
31
+ });
32
+ !_cleanup || _cleanup();
33
+ }
34
+
35
+ function onEnd() {
36
+ done = true;
37
+ var all = waiting.slice();
38
+ all.forEach(function (pair) {
39
+ pair[0]({
40
+ value: undefined,
41
+ done: true
42
+ });
43
+ });
44
+ !_cleanup || _cleanup();
45
+ }
46
+
47
+ _cleanup = function cleanup() {
48
+ _cleanup = null;
49
+ stream.removeListener("data", onData);
50
+ stream.removeListener("error", onError);
51
+ stream.removeListener("end", onEnd);
52
+ stream.removeListener("finish", onEnd);
53
+ stream.removeListener("close", onEnd);
54
+ };
55
+
56
+ stream.on("data", onData);
57
+ stream.on("error", onError);
58
+ stream.on("end", onEnd);
59
+ stream.on("finish", onEnd);
60
+ stream.on("close", onEnd);
61
+
62
+ function getNext() {
63
+ return new Promise(function (resolve, reject) {
64
+ if (error) return reject(error);
65
+ if (data.length) return resolve({
66
+ value: data.shift(),
67
+ done: false
68
+ });
69
+ if (done) return resolve({
70
+ value: undefined,
71
+ done: true
72
+ });
73
+ waiting.push([resolve, reject]);
74
+ });
75
+ }
76
+
77
+ var iterator = {
78
+ next: function next() {
79
+ return getNext();
80
+ }
81
+ };
82
+
83
+ if (hasIterator) {
84
+ iterator[Symbol.asyncIterator] = function () {
85
+ return this;
86
+ };
87
+ }
88
+
89
+ return iterator;
90
+ }
91
+ /* c8 ignore stop */
92
+
93
+
94
+ module.exports = exports.default;
95
+ //# sourceMappingURL=nodeStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeStream.js","names":["hasIterator","Symbol","asyncIterator","nodeStreamIterator","stream","cleanup","error","done","data","waiting","onData","chunk","length","shift","value","push","onError","err","all","slice","forEach","pair","onEnd","undefined","removeListener","on","getNext","Promise","resolve","reject","iterator","next"],"sources":["../../../src/iterators/nodeStream.ts"],"sourcesContent":["import { Readable as NodeReadableStream } from \"stream\";\n\nconst hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T> {\n let cleanup = null;\n let error = null;\n let done = false;\n const data = [];\n const waiting = [];\n\n function onData(chunk) {\n if (error) return;\n if (waiting.length) return waiting.shift()[0]({ value: chunk, done: false });\n data.push(chunk);\n }\n function onError(err) {\n error = err;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[1](err);\n });\n !cleanup || cleanup();\n }\n function onEnd() {\n done = true;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[0]({ value: undefined, done: true });\n });\n !cleanup || cleanup();\n }\n\n cleanup = function () {\n cleanup = null;\n stream.removeListener(\"data\", onData);\n stream.removeListener(\"error\", onError);\n stream.removeListener(\"end\", onEnd);\n stream.removeListener(\"finish\", onEnd);\n stream.removeListener(\"close\", onEnd);\n };\n stream.on(\"data\", onData);\n stream.on(\"error\", onError);\n stream.on(\"end\", onEnd);\n stream.on(\"finish\", onEnd);\n stream.on(\"close\", onEnd);\n\n function getNext(): Promise<IteratorResult<T, boolean>> {\n return new Promise(function (resolve, reject) {\n if (error) return reject(error);\n if (data.length) return resolve({ value: data.shift(), done: false });\n if (done) return resolve({ value: undefined, done: true });\n waiting.push([resolve, reject]);\n });\n }\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return getNext();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"mappings":";;;;;;AAEA,IAAMA,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,aAA5D;AAEA;;AACe,SAASC,kBAAT,CAA+BC,MAA/B,EAAqF;EAClG,IAAIC,QAAO,GAAG,IAAd;EACA,IAAIC,KAAK,GAAG,IAAZ;EACA,IAAIC,IAAI,GAAG,KAAX;EACA,IAAMC,IAAI,GAAG,EAAb;EACA,IAAMC,OAAO,GAAG,EAAhB;;EAEA,SAASC,MAAT,CAAgBC,KAAhB,EAAuB;IACrB,IAAIL,KAAJ,EAAW;IACX,IAAIG,OAAO,CAACG,MAAZ,EAAoB,OAAOH,OAAO,CAACI,KAAR,GAAgB,CAAhB,EAAmB;MAAEC,KAAK,EAAEH,KAAT;MAAgBJ,IAAI,EAAE;IAAtB,CAAnB,CAAP;IACpBC,IAAI,CAACO,IAAL,CAAUJ,KAAV;EACD;;EACD,SAASK,OAAT,CAAiBC,GAAjB,EAAsB;IACpBX,KAAK,GAAGW,GAAR;IACA,IAAMC,GAAG,GAAGT,OAAO,CAACU,KAAR,EAAZ;IACAD,GAAG,CAACE,OAAJ,CAAY,UAAUC,IAAV,EAAgB;MAC1BA,IAAI,CAAC,CAAD,CAAJ,CAAQJ,GAAR;IACD,CAFD;IAGA,CAACZ,QAAD,IAAYA,QAAO,EAAnB;EACD;;EACD,SAASiB,KAAT,GAAiB;IACff,IAAI,GAAG,IAAP;IACA,IAAMW,GAAG,GAAGT,OAAO,CAACU,KAAR,EAAZ;IACAD,GAAG,CAACE,OAAJ,CAAY,UAAUC,IAAV,EAAgB;MAC1BA,IAAI,CAAC,CAAD,CAAJ,CAAQ;QAAEP,KAAK,EAAES,SAAT;QAAoBhB,IAAI,EAAE;MAA1B,CAAR;IACD,CAFD;IAGA,CAACF,QAAD,IAAYA,QAAO,EAAnB;EACD;;EAEDA,QAAO,GAAG,mBAAY;IACpBA,QAAO,GAAG,IAAV;IACAD,MAAM,CAACoB,cAAP,CAAsB,MAAtB,EAA8Bd,MAA9B;IACAN,MAAM,CAACoB,cAAP,CAAsB,OAAtB,EAA+BR,OAA/B;IACAZ,MAAM,CAACoB,cAAP,CAAsB,KAAtB,EAA6BF,KAA7B;IACAlB,MAAM,CAACoB,cAAP,CAAsB,QAAtB,EAAgCF,KAAhC;IACAlB,MAAM,CAACoB,cAAP,CAAsB,OAAtB,EAA+BF,KAA/B;EACD,CAPD;;EAQAlB,MAAM,CAACqB,EAAP,CAAU,MAAV,EAAkBf,MAAlB;EACAN,MAAM,CAACqB,EAAP,CAAU,OAAV,EAAmBT,OAAnB;EACAZ,MAAM,CAACqB,EAAP,CAAU,KAAV,EAAiBH,KAAjB;EACAlB,MAAM,CAACqB,EAAP,CAAU,QAAV,EAAoBH,KAApB;EACAlB,MAAM,CAACqB,EAAP,CAAU,OAAV,EAAmBH,KAAnB;;EAEA,SAASI,OAAT,GAAwD;IACtD,OAAO,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;MAC5C,IAAIvB,KAAJ,EAAW,OAAOuB,MAAM,CAACvB,KAAD,CAAb;MACX,IAAIE,IAAI,CAACI,MAAT,EAAiB,OAAOgB,OAAO,CAAC;QAAEd,KAAK,EAAEN,IAAI,CAACK,KAAL,EAAT;QAAuBN,IAAI,EAAE;MAA7B,CAAD,CAAd;MACjB,IAAIA,IAAJ,EAAU,OAAOqB,OAAO,CAAC;QAAEd,KAAK,EAAES,SAAT;QAAoBhB,IAAI,EAAE;MAA1B,CAAD,CAAd;MACVE,OAAO,CAACM,IAAR,CAAa,CAACa,OAAD,EAAUC,MAAV,CAAb;IACD,CALM,CAAP;EAMD;;EAED,IAAMC,QAAQ,GAAG;IACfC,IADe,kBAC6B;MAC1C,OAAOL,OAAO,EAAd;IACD;EAHc,CAAjB;;EAMA,IAAI1B,WAAJ,EAAiB;IACf8B,QAAQ,CAAC7B,MAAM,CAACC,aAAR,CAAR,GAAiC,YAA8B;MAC7D,OAAO,IAAP;IACD,CAFD;EAGD;;EAED,OAAO4B,QAAP;AACD;AACD"}
@@ -0,0 +1 @@
1
+ export default function promiseIterator<T>(promise: any): AsyncIterableIterator<T>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = promiseIterator;
7
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
8
+ /* c8 ignore start */
9
+
10
+ function promiseIterator(promise) {
11
+ var resolved = false;
12
+ var iterator = {
13
+ next: function next() {
14
+ if (resolved) return Promise.resolve({
15
+ value: undefined,
16
+ done: true
17
+ });
18
+ resolved = true;
19
+ return new Promise(function (resolve, reject) {
20
+ promise.then(function (value) {
21
+ resolve({
22
+ value: value,
23
+ done: false
24
+ });
25
+ })["catch"](reject);
26
+ });
27
+ }
28
+ };
29
+
30
+ if (hasIterator) {
31
+ iterator[Symbol.asyncIterator] = function () {
32
+ return this;
33
+ };
34
+ }
35
+
36
+ return iterator;
37
+ }
38
+ /* c8 ignore stop */
39
+
40
+
41
+ module.exports = exports.default;
42
+ //# sourceMappingURL=promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.js","names":["hasIterator","Symbol","asyncIterator","promiseIterator","promise","resolved","iterator","next","Promise","resolve","value","undefined","done","reject","then"],"sources":["../../../src/iterators/promise.ts"],"sourcesContent":["const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"mappings":";;;;;;AAAA,IAAMA,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,aAA5D;AAEA;;AACe,SAASC,eAAT,CAA4BC,OAA5B,EAA+D;EAC5E,IAAIC,QAAQ,GAAG,KAAf;EAEA,IAAMC,QAAQ,GAAG;IACfC,IADe,kBAC6B;MAC1C,IAAIF,QAAJ,EAAc,OAAOG,OAAO,CAACC,OAAR,CAAgB;QAAEC,KAAK,EAAEC,SAAT;QAAoBC,IAAI,EAAE;MAA1B,CAAhB,CAAP;MACdP,QAAQ,GAAG,IAAX;MACA,OAAO,IAAIG,OAAJ,CAAY,UAAUC,OAAV,EAAmBI,MAAnB,EAA2B;QAC5CT,OAAO,CACJU,IADH,CACQ,UAAUJ,KAAV,EAAiB;UACrBD,OAAO,CAAC;YAAEC,KAAK,EAALA,KAAF;YAASE,IAAI,EAAE;UAAf,CAAD,CAAP;QACD,CAHH,WAISC,MAJT;MAKD,CANM,CAAP;IAOD;EAXc,CAAjB;;EAcA,IAAIb,WAAJ,EAAiB;IACfM,QAAQ,CAACL,MAAM,CAACC,aAAR,CAAR,GAAiC,YAA8B;MAC7D,OAAO,IAAP;IACD,CAFD;EAGD;;EAED,OAAOI,QAAP;AACD;AACD"}
@@ -0,0 +1 @@
1
+ export default function readerIterator<T>(reader: any): AsyncIterableIterator<T>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = readerIterator;
7
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
8
+ /* c8 ignore start */
9
+
10
+ function readerIterator(reader) {
11
+ var iterator = {
12
+ next: function next() {
13
+ return reader.read();
14
+ }
15
+ };
16
+
17
+ if (hasIterator) {
18
+ iterator[Symbol.asyncIterator] = function () {
19
+ return this;
20
+ };
21
+ }
22
+
23
+ return iterator;
24
+ }
25
+ /* c8 ignore stop */
26
+
27
+
28
+ module.exports = exports.default;
29
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","names":["hasIterator","Symbol","asyncIterator","readerIterator","reader","iterator","next","read"],"sources":["../../../src/iterators/reader.ts"],"sourcesContent":["const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function readerIterator<T>(reader): AsyncIterableIterator<T> {\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"mappings":";;;;;;AAAA,IAAMA,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,aAA5D;AAEA;;AACe,SAASC,cAAT,CAA2BC,MAA3B,EAA6D;EAC1E,IAAMC,QAAQ,GAAG;IACfC,IADe,kBAC6B;MAC1C,OAAOF,MAAM,CAACG,IAAP,EAAP;IACD;EAHc,CAAjB;;EAMA,IAAIP,WAAJ,EAAiB;IACfK,QAAQ,CAACJ,MAAM,CAACC,aAAR,CAAR,GAAiC,YAA8B;MAC7D,OAAO,IAAP;IACD,CAFD;EAGD;;EAED,OAAOG,QAAP;AACD;AACD"}
@@ -1 +1 @@
1
- {"type":"commonjs"}
1
+ { "type": "commonjs" }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @param response A response. Supports fetch, node-fetch, and cross-fetch
3
+ */
4
+ export default function responseIterator<T>(response: unknown): AsyncIterableIterator<T>;
@@ -0,0 +1,34 @@
1
+ import asyncIterator from "./iterators/async.mjs";
2
+ import nodeStreamIterator from "./iterators/nodeStream.mjs";
3
+ import promiseIterator from "./iterators/promise.mjs";
4
+ import readerIterator from "./iterators/reader.mjs";
5
+ const hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
6
+ /**
7
+ * @param response A response. Supports fetch, node-fetch, and cross-fetch
8
+ */
9
+
10
+ export default function responseIterator(response) {
11
+ if (response === undefined) throw new Error("Missing response for responseIterator"); // determine the body
12
+
13
+ let body = response;
14
+ if (response.body) body = response.body; // node-fetch, browser fetch, undici
15
+ else if (response.data) body = response.data; // axios
16
+
17
+ /* c8 ignore start */
18
+ else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
19
+
20
+ /* c8 ignore stop */
21
+ // adapt the body
22
+
23
+ if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator(body);
24
+ /* c8 ignore start */
25
+
26
+ if (body.getReader) return readerIterator(body.getReader());
27
+ if (body.stream) return readerIterator(body.stream().getReader());
28
+ if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
29
+ if (body.pipe) return nodeStreamIterator(body);
30
+ /* c8 ignore stop */
31
+
32
+ throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
33
+ }
34
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["asyncIterator","nodeStreamIterator","promiseIterator","readerIterator","hasIterator","Symbol","responseIterator","response","undefined","Error","body","data","_bodyBlob","getReader","stream","arrayBuffer","pipe"],"sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\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)\n 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)\n 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"],"mappings":"OAIOA,a;OACAC,kB;OACAC,e;OACAC,c;AAMP,MAAMC,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACL,aAA5D;AAEA;AACA;AACA;;AACA,eAAe,SAASM,gBAAT,CAA6BC,QAA7B,EAA0E;EACvF,IAAIA,QAAQ,KAAKC,SAAjB,EAA4B,MAAM,IAAIC,KAAJ,CAAU,uCAAV,CAAN,CAD2D,CAGvF;;EACA,IAAIC,IAAa,GAAGH,QAApB;EACA,IAAKA,QAAD,CAA2BG,IAA/B,EAAqCA,IAAI,GAAIH,QAAD,CAA2BG,IAAlC,CAArC,CACA;EADA,KAEK,IAAKH,QAAD,CAA4BI,IAAhC,EAAsCD,IAAI,GAAIH,QAAD,CAA4BI,IAAnC,CAAtC,CACL;;EACA;EAFK,KAEsB,IAAKJ,QAAD,CAAiCK,SAArC,EACzBF,IAAI,GAAIH,QAAD,CAAiCK,SAAxC,CAVqF,CAUlC;;EACrD;EAEA;;EACA,IAAIR,WAAW,IAAIM,IAAI,CAACL,MAAM,CAACL,aAAR,CAAvB,EAA+C,OAAOA,aAAa,CAAIU,IAAJ,CAApB;EAC/C;;EACA,IAAKA,IAAD,CAA4BG,SAAhC,EAA2C,OAAOV,cAAc,CAAKO,IAAD,CAA4BG,SAA5B,EAAJ,CAArB;EAC3C,IAAKH,IAAD,CAAeI,MAAnB,EACE,OAAOX,cAAc,CAAMO,IAAD,CAAeI,MAAf,EAAD,CAA0DD,SAA1D,EAAJ,CAArB;EACF,IAAKH,IAAD,CAAeK,WAAnB,EAAgC,OAAOb,eAAe,CAAKQ,IAAD,CAAeK,WAAf,EAAJ,CAAtB;EAChC,IAAKL,IAAD,CAA6BM,IAAjC,EAAuC,OAAOf,kBAAkB,CAAIS,IAAJ,CAAzB;EACvC;;EAEA,MAAM,IAAID,KAAJ,CAAU,yFAAV,CAAN;AACD"}
@@ -0,0 +1 @@
1
+ export default function asyncIterator<T>(source: any): AsyncIterableIterator<T>;
@@ -0,0 +1,14 @@
1
+ export default function asyncIterator(source) {
2
+ const iterator = source[Symbol.asyncIterator]();
3
+ return {
4
+ next() {
5
+ return iterator.next();
6
+ },
7
+
8
+ [Symbol.asyncIterator]() {
9
+ return this;
10
+ }
11
+
12
+ };
13
+ }
14
+ //# sourceMappingURL=async.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.mjs","names":["asyncIterator","source","iterator","Symbol","next"],"sources":["../../../src/iterators/async.ts"],"sourcesContent":["export default function asyncIterator<T>(source): AsyncIterableIterator<T> {\n const iterator = source[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n"],"mappings":"AAAA,eAAe,SAASA,aAAT,CAA0BC,MAA1B,EAA4D;EACzE,MAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACH,aAAR,CAAN,EAAjB;EACA,OAAO;IACLI,IAAI,GAAwC;MAC1C,OAAOF,QAAQ,CAACE,IAAT,EAAP;IACD,CAHI;;IAIL,CAACD,MAAM,CAACH,aAAR,IAA2C;MACzC,OAAO,IAAP;IACD;;EANI,CAAP;AAQD"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ import { Readable as NodeReadableStream } from "stream";
3
+ export default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T>;
@@ -0,0 +1,87 @@
1
+ const hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
2
+ /* c8 ignore start */
3
+
4
+ export default function nodeStreamIterator(stream) {
5
+ let cleanup = null;
6
+ let error = null;
7
+ let done = false;
8
+ const data = [];
9
+ const waiting = [];
10
+
11
+ function onData(chunk) {
12
+ if (error) return;
13
+ if (waiting.length) return waiting.shift()[0]({
14
+ value: chunk,
15
+ done: false
16
+ });
17
+ data.push(chunk);
18
+ }
19
+
20
+ function onError(err) {
21
+ error = err;
22
+ const all = waiting.slice();
23
+ all.forEach(function (pair) {
24
+ pair[1](err);
25
+ });
26
+ !cleanup || cleanup();
27
+ }
28
+
29
+ function onEnd() {
30
+ done = true;
31
+ const all = waiting.slice();
32
+ all.forEach(function (pair) {
33
+ pair[0]({
34
+ value: undefined,
35
+ done: true
36
+ });
37
+ });
38
+ !cleanup || cleanup();
39
+ }
40
+
41
+ cleanup = function () {
42
+ cleanup = null;
43
+ stream.removeListener("data", onData);
44
+ stream.removeListener("error", onError);
45
+ stream.removeListener("end", onEnd);
46
+ stream.removeListener("finish", onEnd);
47
+ stream.removeListener("close", onEnd);
48
+ };
49
+
50
+ stream.on("data", onData);
51
+ stream.on("error", onError);
52
+ stream.on("end", onEnd);
53
+ stream.on("finish", onEnd);
54
+ stream.on("close", onEnd);
55
+
56
+ function getNext() {
57
+ return new Promise(function (resolve, reject) {
58
+ if (error) return reject(error);
59
+ if (data.length) return resolve({
60
+ value: data.shift(),
61
+ done: false
62
+ });
63
+ if (done) return resolve({
64
+ value: undefined,
65
+ done: true
66
+ });
67
+ waiting.push([resolve, reject]);
68
+ });
69
+ }
70
+
71
+ const iterator = {
72
+ next() {
73
+ return getNext();
74
+ }
75
+
76
+ };
77
+
78
+ if (hasIterator) {
79
+ iterator[Symbol.asyncIterator] = function () {
80
+ return this;
81
+ };
82
+ }
83
+
84
+ return iterator;
85
+ }
86
+ /* c8 ignore stop */
87
+ //# sourceMappingURL=nodeStream.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeStream.mjs","names":["hasIterator","Symbol","asyncIterator","nodeStreamIterator","stream","cleanup","error","done","data","waiting","onData","chunk","length","shift","value","push","onError","err","all","slice","forEach","pair","onEnd","undefined","removeListener","on","getNext","Promise","resolve","reject","iterator","next"],"sources":["../../../src/iterators/nodeStream.ts"],"sourcesContent":["import { Readable as NodeReadableStream } from \"stream\";\n\nconst hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T> {\n let cleanup = null;\n let error = null;\n let done = false;\n const data = [];\n const waiting = [];\n\n function onData(chunk) {\n if (error) return;\n if (waiting.length) return waiting.shift()[0]({ value: chunk, done: false });\n data.push(chunk);\n }\n function onError(err) {\n error = err;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[1](err);\n });\n !cleanup || cleanup();\n }\n function onEnd() {\n done = true;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[0]({ value: undefined, done: true });\n });\n !cleanup || cleanup();\n }\n\n cleanup = function () {\n cleanup = null;\n stream.removeListener(\"data\", onData);\n stream.removeListener(\"error\", onError);\n stream.removeListener(\"end\", onEnd);\n stream.removeListener(\"finish\", onEnd);\n stream.removeListener(\"close\", onEnd);\n };\n stream.on(\"data\", onData);\n stream.on(\"error\", onError);\n stream.on(\"end\", onEnd);\n stream.on(\"finish\", onEnd);\n stream.on(\"close\", onEnd);\n\n function getNext(): Promise<IteratorResult<T, boolean>> {\n return new Promise(function (resolve, reject) {\n if (error) return reject(error);\n if (data.length) return resolve({ value: data.shift(), done: false });\n if (done) return resolve({ value: undefined, done: true });\n waiting.push([resolve, reject]);\n });\n }\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return getNext();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function promiseIterator<T>(promise: any): AsyncIterableIterator<T>;
@@ -0,0 +1,34 @@
1
+ const hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
2
+ /* c8 ignore start */
3
+
4
+ export default function promiseIterator(promise) {
5
+ let resolved = false;
6
+ const iterator = {
7
+ next() {
8
+ if (resolved) return Promise.resolve({
9
+ value: undefined,
10
+ done: true
11
+ });
12
+ resolved = true;
13
+ return new Promise(function (resolve, reject) {
14
+ promise.then(function (value) {
15
+ resolve({
16
+ value,
17
+ done: false
18
+ });
19
+ }).catch(reject);
20
+ });
21
+ }
22
+
23
+ };
24
+
25
+ if (hasIterator) {
26
+ iterator[Symbol.asyncIterator] = function () {
27
+ return this;
28
+ };
29
+ }
30
+
31
+ return iterator;
32
+ }
33
+ /* c8 ignore stop */
34
+ //# sourceMappingURL=promise.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.mjs","names":["hasIterator","Symbol","asyncIterator","promiseIterator","promise","resolved","iterator","next","Promise","resolve","value","undefined","done","reject","then","catch"],"sources":["../../../src/iterators/promise.ts"],"sourcesContent":["const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"mappings":"AAAA,MAAMA,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,aAA5D;AAEA;;AACA,eAAe,SAASC,eAAT,CAA4BC,OAA5B,EAA+D;EAC5E,IAAIC,QAAQ,GAAG,KAAf;EAEA,MAAMC,QAAQ,GAAG;IACfC,IAAI,GAAwC;MAC1C,IAAIF,QAAJ,EAAc,OAAOG,OAAO,CAACC,OAAR,CAAgB;QAAEC,KAAK,EAAEC,SAAT;QAAoBC,IAAI,EAAE;MAA1B,CAAhB,CAAP;MACdP,QAAQ,GAAG,IAAX;MACA,OAAO,IAAIG,OAAJ,CAAY,UAAUC,OAAV,EAAmBI,MAAnB,EAA2B;QAC5CT,OAAO,CACJU,IADH,CACQ,UAAUJ,KAAV,EAAiB;UACrBD,OAAO,CAAC;YAAEC,KAAF;YAASE,IAAI,EAAE;UAAf,CAAD,CAAP;QACD,CAHH,EAIGG,KAJH,CAISF,MAJT;MAKD,CANM,CAAP;IAOD;;EAXc,CAAjB;;EAcA,IAAIb,WAAJ,EAAiB;IACfM,QAAQ,CAACL,MAAM,CAACC,aAAR,CAAR,GAAiC,YAA8B;MAC7D,OAAO,IAAP;IACD,CAFD;EAGD;;EAED,OAAOI,QAAP;AACD;AACD"}
@@ -0,0 +1 @@
1
+ export default function readerIterator<T>(reader: any): AsyncIterableIterator<T>;
@@ -0,0 +1,21 @@
1
+ const hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
2
+ /* c8 ignore start */
3
+
4
+ export default function readerIterator(reader) {
5
+ const iterator = {
6
+ next() {
7
+ return reader.read();
8
+ }
9
+
10
+ };
11
+
12
+ if (hasIterator) {
13
+ iterator[Symbol.asyncIterator] = function () {
14
+ return this;
15
+ };
16
+ }
17
+
18
+ return iterator;
19
+ }
20
+ /* c8 ignore stop */
21
+ //# sourceMappingURL=reader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.mjs","names":["hasIterator","Symbol","asyncIterator","readerIterator","reader","iterator","next","read"],"sources":["../../../src/iterators/reader.ts"],"sourcesContent":["const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function readerIterator<T>(reader): AsyncIterableIterator<T> {\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n"],"mappings":"AAAA,MAAMA,WAAW,GAAG,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,aAA5D;AAEA;;AACA,eAAe,SAASC,cAAT,CAA2BC,MAA3B,EAA6D;EAC1E,MAAMC,QAAQ,GAAG;IACfC,IAAI,GAAwC;MAC1C,OAAOF,MAAM,CAACG,IAAP,EAAP;IACD;;EAHc,CAAjB;;EAMA,IAAIP,WAAJ,EAAiB;IACfK,QAAQ,CAACJ,MAAM,CAACC,aAAR,CAAR,GAAiC,YAA8B;MAC7D,OAAO,IAAP;IACD,CAFD;EAGD;;EAED,OAAOG,QAAP;AACD;AACD"}
@@ -1 +1 @@
1
- {"type":"module"}
1
+ { "type": "module" }
@@ -1 +1 @@
1
- {"type":"commonjs"}
1
+ { "type": "commonjs" }
@@ -19,8 +19,8 @@
19
19
  return obj;
20
20
  }
21
21
 
22
- function streamIterator(stream) {
23
- var iterator = stream[Symbol.asyncIterator]();
22
+ function asyncIterator(source) {
23
+ var iterator = source[Symbol.asyncIterator]();
24
24
  return _defineProperty({
25
25
  next: function next() {
26
26
  return iterator.next();
@@ -29,22 +29,99 @@
29
29
  return this;
30
30
  });
31
31
  }
32
+
33
+ var hasIterator$3 = typeof Symbol !== "undefined" && Symbol.asyncIterator;
32
34
  /* c8 ignore start */
33
35
 
36
+ function nodeStreamIterator(stream) {
37
+ var _cleanup = null;
38
+ var error = null;
39
+ var done = false;
40
+ var data = [];
41
+ var waiting = [];
34
42
 
35
- function readerIterator(reader) {
36
- return _defineProperty({
43
+ function onData(chunk) {
44
+ if (error) return;
45
+ if (waiting.length) return waiting.shift()[0]({
46
+ value: chunk,
47
+ done: false
48
+ });
49
+ data.push(chunk);
50
+ }
51
+
52
+ function onError(err) {
53
+ error = err;
54
+ var all = waiting.slice();
55
+ all.forEach(function (pair) {
56
+ pair[1](err);
57
+ });
58
+ !_cleanup || _cleanup();
59
+ }
60
+
61
+ function onEnd() {
62
+ done = true;
63
+ var all = waiting.slice();
64
+ all.forEach(function (pair) {
65
+ pair[0]({
66
+ value: undefined,
67
+ done: true
68
+ });
69
+ });
70
+ !_cleanup || _cleanup();
71
+ }
72
+
73
+ _cleanup = function cleanup() {
74
+ _cleanup = null;
75
+ stream.removeListener("data", onData);
76
+ stream.removeListener("error", onError);
77
+ stream.removeListener("end", onEnd);
78
+ stream.removeListener("finish", onEnd);
79
+ stream.removeListener("close", onEnd);
80
+ };
81
+
82
+ stream.on("data", onData);
83
+ stream.on("error", onError);
84
+ stream.on("end", onEnd);
85
+ stream.on("finish", onEnd);
86
+ stream.on("close", onEnd);
87
+
88
+ function getNext() {
89
+ return new Promise(function (resolve, reject) {
90
+ if (error) return reject(error);
91
+ if (data.length) return resolve({
92
+ value: data.shift(),
93
+ done: false
94
+ });
95
+ if (done) return resolve({
96
+ value: undefined,
97
+ done: true
98
+ });
99
+ waiting.push([resolve, reject]);
100
+ });
101
+ }
102
+
103
+ var iterator = {
37
104
  next: function next() {
38
- return reader.read();
105
+ return getNext();
39
106
  }
40
- }, Symbol.asyncIterator, function () {
41
- return this;
42
- });
107
+ };
108
+
109
+ if (hasIterator$3) {
110
+ iterator[Symbol.asyncIterator] = function () {
111
+ return this;
112
+ };
113
+ }
114
+
115
+ return iterator;
43
116
  }
117
+ /* c8 ignore stop */
118
+
119
+ var hasIterator$2 = typeof Symbol !== "undefined" && Symbol.asyncIterator;
120
+ /* c8 ignore start */
44
121
 
45
122
  function promiseIterator(promise) {
46
123
  var resolved = false;
47
- return _defineProperty({
124
+ var iterator = {
48
125
  next: function next() {
49
126
  if (resolved) return Promise.resolve({
50
127
  value: undefined,
@@ -60,31 +137,66 @@
60
137
  })["catch"](reject);
61
138
  });
62
139
  }
63
- }, Symbol.asyncIterator, function () {
64
- return this;
65
- });
140
+ };
141
+
142
+ if (hasIterator$2) {
143
+ iterator[Symbol.asyncIterator] = function () {
144
+ return this;
145
+ };
146
+ }
147
+
148
+ return iterator;
66
149
  }
67
150
  /* c8 ignore stop */
68
151
 
152
+ var hasIterator$1 = typeof Symbol !== "undefined" && Symbol.asyncIterator;
153
+ /* c8 ignore start */
69
154
 
155
+ function readerIterator(reader) {
156
+ var iterator = {
157
+ next: function next() {
158
+ return reader.read();
159
+ }
160
+ };
161
+
162
+ if (hasIterator$1) {
163
+ iterator[Symbol.asyncIterator] = function () {
164
+ return this;
165
+ };
166
+ }
167
+
168
+ return iterator;
169
+ }
170
+ /* c8 ignore stop */
171
+
172
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
70
173
  /**
71
174
  * @param response A response. Supports fetch, node-fetch, and cross-fetch
72
175
  */
176
+
73
177
  function responseIterator(response) {
74
- if (response === undefined) throw new Error("Missing response for responseIterator"); // node node-fetch
178
+ if (response === undefined) throw new Error("Missing response for responseIterator"); // determine the body
179
+
180
+ var body = response;
181
+ if (response.body) body = response.body; // node-fetch, browser fetch, undici
182
+ else if (response.data) body = response.data; // axios
75
183
 
76
- if (response.body && response.body[Symbol.asyncIterator] !== undefined) return streamIterator(response.body);
77
184
  /* c8 ignore start */
78
- // browser fetch or undici
79
- else if (response.body && response.body.getReader) return readerIterator(response.body.getReader()); // cross platform axios
80
- else if (response.data) {
81
- if (response.data.stream) return readerIterator(response.data.stream().getReader());else if (response.data[Symbol.asyncIterator] !== undefined) return streamIterator(response.data);
82
- } // browser cross-fetch
83
- else if (response._bodyBlob) return promiseIterator(response._bodyBlob.arrayBuffer()); // node got
84
- else if (response.readable && response[Symbol.asyncIterator] !== undefined) return streamIterator(response);
185
+ else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
186
+
187
+ /* c8 ignore stop */
188
+ // adapt the body
189
+
190
+ if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator(body);
191
+ /* c8 ignore start */
192
+
193
+ if (body.getReader) return readerIterator(body.getReader());
194
+ if (body.stream) return readerIterator(body.stream().getReader());
195
+ if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
196
+ if (body.pipe) return nodeStreamIterator(body);
85
197
  /* c8 ignore stop */
86
198
 
87
- throw new Error("Unknown body type for responseIterator");
199
+ throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
88
200
  }
89
201
 
90
202
  return responseIterator;
@@ -1 +1 @@
1
- {"version":3,"file":"response-iterator.js","sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as GotResponse } from \"got\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\nimport { Response as UndiciResponse } from \"undici\";\n\ninterface CrossFetchResponse {\n _bodyBlob: Blob;\n}\n\nfunction streamIterator<T>(stream): AsyncIterableIterator<T> {\n const iterator = stream[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\n/* c8 ignore start */\nfunction readerIterator<T>(reader): AsyncIterableIterator<T> {\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\nfunction promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n\nexport type ResponseType = AxiosResponse | CrossFetchResponse | GotResponse | NodeResponse | Response | UndiciResponse;\n\n/**\n * @param response A response. Supports fetch, node-fetch, and cross-fetch\n */\nexport default function responseIterator<T>(response: ResponseType): AsyncIterableIterator<T> {\n if (response === undefined) throw new Error(\"Missing response for responseIterator\");\n\n // node node-fetch\n if ((response as NodeResponse).body && (response as NodeResponse).body[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as NodeResponse).body);\n /* c8 ignore start */\n // browser fetch or undici\n else if ((response as Response).body && (response as Response).body.getReader)\n return readerIterator<T>((response as Response).body.getReader());\n\n // cross platform axios\n else if ((response as AxiosResponse).data) {\n if ((response as AxiosResponse<Blob>).data.stream)\n return readerIterator<T>(((response as AxiosResponse<Blob>).data.stream() as unknown as ReadableStream<Uint8Array>).getReader());\n else if ((response as AxiosResponse<NodeReadableStream>).data[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as AxiosResponse<NodeReadableStream>).data);\n }\n\n // browser cross-fetch\n else if ((response as CrossFetchResponse)._bodyBlob)\n return promiseIterator<T>((response as CrossFetchResponse)._bodyBlob.arrayBuffer());\n // node got\n else if ((response as GotResponse).readable && (response as GotResponse)[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>(response as GotResponse);\n\n /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator\");\n}\n"],"names":["streamIterator","stream","iterator","Symbol","asyncIterator","next","readerIterator","reader","read","promiseIterator","promise","resolved","Promise","resolve","value","undefined","done","reject","then","responseIterator","response","Error","body","getReader","data","_bodyBlob","arrayBuffer","readable"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAUA,SAASA,cAAT,CAA2BC,MAA3B,EAA6D;EAC3D,MAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACC,aAAR,CAAN,EAAjB;EACA;EACEC,IAAAA,IADF,kBAC8C;EAC1C,aAAOH,QAAQ,CAACG,IAAT,EAAP;EACD;EAHH,KAIGF,MAAM,CAACC,aAJV,cAI6C;EACzC,WAAO,IAAP;EACD,GANH;EAQD;EAED;;;EACA,SAASE,cAAT,CAA2BC,MAA3B,EAA6D;EAC3D;EACEF,IAAAA,IADF,kBAC8C;EAC1C,aAAOE,MAAM,CAACC,IAAP,EAAP;EACD;EAHH,KAIGL,MAAM,CAACC,aAJV,cAI6C;EACzC,WAAO,IAAP;EACD,GANH;EAQD;;EAED,SAASK,eAAT,CAA4BC,OAA5B,EAA+D;EAC7D,MAAIC,QAAQ,GAAG,KAAf;EACA;EACEN,IAAAA,IADF,kBAC8C;EAC1C,UAAIM,QAAJ,EAAc,OAAOC,OAAO,CAACC,OAAR,CAAgB;EAAEC,QAAAA,KAAK,EAAEC,SAAT;EAAoBC,QAAAA,IAAI,EAAE;EAA1B,OAAhB,CAAP;EACdL,MAAAA,QAAQ,GAAG,IAAX;EACA,aAAO,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmBI,MAAnB,EAA2B;EAC5CP,QAAAA,OAAO,CACJQ,IADH,CACQ,UAAUJ,KAAV,EAAiB;EACrBD,UAAAA,OAAO,CAAC;EAAEC,YAAAA,KAAK,EAALA,KAAF;EAASE,YAAAA,IAAI,EAAE;EAAf,WAAD,CAAP;EACD,SAHH,WAISC,MAJT;EAKD,OANM,CAAP;EAOD;EAXH,KAYGd,MAAM,CAACC,aAZV,cAY6C;EACzC,WAAO,IAAP;EACD,GAdH;EAgBD;EACD;;;EAIA;EACA;EACA;EACe,SAASe,gBAAT,CAA6BC,QAA7B,EAA+E;EAC5F,MAAIA,QAAQ,KAAKL,SAAjB,EAA4B,MAAM,IAAIM,KAAJ,CAAU,uCAAV,CAAN,CADgE;;EAI5F,MAAKD,QAAD,CAA2BE,IAA3B,IAAoCF,QAAD,CAA2BE,IAA3B,CAAgCnB,MAAM,CAACC,aAAvC,MAA0DW,SAAjG,EACE,OAAOf,cAAc,CAAKoB,QAAD,CAA2BE,IAA/B,CAArB;EACF;EACA;EAHA,OAIK,IAAKF,QAAD,CAAuBE,IAAvB,IAAgCF,QAAD,CAAuBE,IAAvB,CAA4BC,SAA/D,EACH,OAAOjB,cAAc,CAAKc,QAAD,CAAuBE,IAAvB,CAA4BC,SAA5B,EAAJ,CAArB,CADG;EAAA,OAIA,IAAKH,QAAD,CAA4BI,IAAhC,EAAsC;EACzC,QAAKJ,QAAD,CAAkCI,IAAlC,CAAuCvB,MAA3C,EACE,OAAOK,cAAc,CAAMc,QAAD,CAAkCI,IAAlC,CAAuCvB,MAAvC,EAAD,CAA2FsB,SAA3F,EAAJ,CAArB,CADF,KAEK,IAAKH,QAAD,CAAgDI,IAAhD,CAAqDrB,MAAM,CAACC,aAA5D,MAA+EW,SAAnF,EACH,OAAOf,cAAc,CAAKoB,QAAD,CAAgDI,IAApD,CAArB;EACH,GALI;EAAA,OAQA,IAAKJ,QAAD,CAAiCK,SAArC,EACH,OAAOhB,eAAe,CAAKW,QAAD,CAAiCK,SAAjC,CAA2CC,WAA3C,EAAJ,CAAtB,CADG;EAAA,OAGA,IAAKN,QAAD,CAA0BO,QAA1B,IAAuCP,QAAD,CAA0BjB,MAAM,CAACC,aAAjC,MAAoDW,SAA9F,EACH,OAAOf,cAAc,CAAIoB,QAAJ,CAArB;EAEF;;EAEA,QAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;EACD;;;;;;;;"}
1
+ {"version":3,"file":"response-iterator.js","sources":["../../src/iterators/async.ts","../../src/iterators/nodeStream.ts","../../src/iterators/promise.ts","../../src/iterators/reader.ts","../../src/index.ts"],"sourcesContent":["export default function asyncIterator<T>(source): AsyncIterableIterator<T> {\n const iterator = source[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n","import { Readable as NodeReadableStream } from \"stream\";\n\nconst hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T> {\n let cleanup = null;\n let error = null;\n let done = false;\n const data = [];\n const waiting = [];\n\n function onData(chunk) {\n if (error) return;\n if (waiting.length) return waiting.shift()[0]({ value: chunk, done: false });\n data.push(chunk);\n }\n function onError(err) {\n error = err;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[1](err);\n });\n !cleanup || cleanup();\n }\n function onEnd() {\n done = true;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[0]({ value: undefined, done: true });\n });\n !cleanup || cleanup();\n }\n\n cleanup = function () {\n cleanup = null;\n stream.removeListener(\"data\", onData);\n stream.removeListener(\"error\", onError);\n stream.removeListener(\"end\", onEnd);\n stream.removeListener(\"finish\", onEnd);\n stream.removeListener(\"close\", onEnd);\n };\n stream.on(\"data\", onData);\n stream.on(\"error\", onError);\n stream.on(\"end\", onEnd);\n stream.on(\"finish\", onEnd);\n stream.on(\"close\", onEnd);\n\n function getNext(): Promise<IteratorResult<T, boolean>> {\n return new Promise(function (resolve, reject) {\n if (error) return reject(error);\n if (data.length) return resolve({ value: data.shift(), done: false });\n if (done) return resolve({ value: undefined, done: true });\n waiting.push([resolve, reject]);\n });\n }\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return getNext();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n","const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n","const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function readerIterator<T>(reader): AsyncIterableIterator<T> {\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n","import { AxiosResponse } from \"axios\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\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)\n 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)\n 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":["asyncIterator","source","iterator","Symbol","next","hasIterator","nodeStreamIterator","stream","cleanup","error","done","data","waiting","onData","chunk","length","shift","value","push","onError","err","all","slice","forEach","pair","onEnd","undefined","removeListener","on","getNext","Promise","resolve","reject","promiseIterator","promise","resolved","then","readerIterator","reader","read","responseIterator","response","Error","body","_bodyBlob","getReader","arrayBuffer","pipe"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).responseIterator=r()}(this,(function(){"use strict";function e(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function r(r){var t=r[Symbol.asyncIterator]();return e({next:function(){return t.next()}},Symbol.asyncIterator,(function(){return this}))}function t(r){return e({next:function(){return r.read()}},Symbol.asyncIterator,(function(){return this}))}return function(n){if(void 0===n)throw new Error("Missing response for responseIterator");if(n.body&&void 0!==n.body[Symbol.asyncIterator])return r(n.body);if(n.body&&n.body.getReader)return t(n.body.getReader());if(n.data){if(n.data.stream)return t(n.data.stream().getReader());if(void 0!==n.data[Symbol.asyncIterator])return r(n.data)}else{if(n._bodyBlob)return o=n._bodyBlob.arrayBuffer(),a=!1,e({next:function(){return a?Promise.resolve({value:void 0,done:!0}):(a=!0,new Promise((function(e,r){o.then((function(r){e({value:r,done:!1})})).catch(r)})))}},Symbol.asyncIterator,(function(){return this}));if(n.readable&&void 0!==n[Symbol.asyncIterator])return r(n)}var o,a;throw new Error("Unknown body type for responseIterator")}}));
1
+ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).responseIterator=n()}(this,(function(){"use strict";function e(e){var n,r,o,t=e[Symbol.asyncIterator]();return n={next:function(){return t.next()}},r=Symbol.asyncIterator,o=function(){return this},r in n?Object.defineProperty(n,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[r]=o,n}var n="undefined"!=typeof Symbol&&Symbol.asyncIterator;function r(e){var r=null,o=null,t=!1,i=[],a=[];function u(e){if(!o)return a.length?a.shift()[0]({value:e,done:!1}):void i.push(e)}function f(e){o=e,a.slice().forEach((function(n){n[1](e)})),!r||r()}function s(){t=!0,a.slice().forEach((function(e){e[0]({value:void 0,done:!0})})),!r||r()}r=function(){r=null,e.removeListener("data",u),e.removeListener("error",f),e.removeListener("end",s),e.removeListener("finish",s),e.removeListener("close",s)},e.on("data",u),e.on("error",f),e.on("end",s),e.on("finish",s),e.on("close",s);var l={next:function(){return new Promise((function(e,n){return o?n(o):i.length?e({value:i.shift(),done:!1}):t?e({value:void 0,done:!0}):void a.push([e,n])}))}};return n&&(l[Symbol.asyncIterator]=function(){return this}),l}var o="undefined"!=typeof Symbol&&Symbol.asyncIterator;var t="undefined"!=typeof Symbol&&Symbol.asyncIterator;function i(e){var n={next:function(){return e.read()}};return t&&(n[Symbol.asyncIterator]=function(){return this}),n}var a="undefined"!=typeof Symbol&&Symbol.asyncIterator;return function(n){if(void 0===n)throw new Error("Missing response for responseIterator");var t,u,f,s=n;if(n.body?s=n.body:n.data?s=n.data:n._bodyBlob&&(s=n._bodyBlob),a&&s[Symbol.asyncIterator])return e(s);if(s.getReader)return i(s.getReader());if(s.stream)return i(s.stream().getReader());if(s.arrayBuffer)return t=s.arrayBuffer(),u=!1,f={next:function(){return u?Promise.resolve({value:void 0,done:!0}):(u=!0,new Promise((function(e,n){t.then((function(n){e({value:n,done:!1})})).catch(n)})))}},o&&(f[Symbol.asyncIterator]=function(){return this}),f;if(s.pipe)return r(s);throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response")}}));
2
2
  //# sourceMappingURL=response-iterator.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-iterator.min.js","sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as GotResponse } from \"got\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\nimport { Response as UndiciResponse } from \"undici\";\n\ninterface CrossFetchResponse {\n _bodyBlob: Blob;\n}\n\nfunction streamIterator<T>(stream): AsyncIterableIterator<T> {\n const iterator = stream[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\n/* c8 ignore start */\nfunction readerIterator<T>(reader): AsyncIterableIterator<T> {\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\nfunction promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n\nexport type ResponseType = AxiosResponse | CrossFetchResponse | GotResponse | NodeResponse | Response | UndiciResponse;\n\n/**\n * @param response A response. Supports fetch, node-fetch, and cross-fetch\n */\nexport default function responseIterator<T>(response: ResponseType): AsyncIterableIterator<T> {\n if (response === undefined) throw new Error(\"Missing response for responseIterator\");\n\n // node node-fetch\n if ((response as NodeResponse).body && (response as NodeResponse).body[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as NodeResponse).body);\n /* c8 ignore start */\n // browser fetch or undici\n else if ((response as Response).body && (response as Response).body.getReader)\n return readerIterator<T>((response as Response).body.getReader());\n\n // cross platform axios\n else if ((response as AxiosResponse).data) {\n if ((response as AxiosResponse<Blob>).data.stream)\n return readerIterator<T>(((response as AxiosResponse<Blob>).data.stream() as unknown as ReadableStream<Uint8Array>).getReader());\n else if ((response as AxiosResponse<NodeReadableStream>).data[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as AxiosResponse<NodeReadableStream>).data);\n }\n\n // browser cross-fetch\n else if ((response as CrossFetchResponse)._bodyBlob)\n return promiseIterator<T>((response as CrossFetchResponse)._bodyBlob.arrayBuffer());\n // node got\n else if ((response as GotResponse).readable && (response as GotResponse)[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>(response as GotResponse);\n\n /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator\");\n}\n"],"names":["streamIterator","stream","iterator","Symbol","asyncIterator","next","this","readerIterator","reader","read","response","undefined","Error","body","getReader","data","_bodyBlob","promise","arrayBuffer","resolved","Promise","resolve","value","done","reject","then","readable"],"mappings":"yWAUA,SAASA,EAAkBC,OACnBC,EAAWD,EAAOE,OAAOC,2BAE7BC,uBACSH,EAASG,SAEjBF,OAAOC,iCACCE,QAMb,SAASC,EAAkBC,aAEvBH,uBACSG,EAAOC,SAEfN,OAAOC,iCACCE,eA+BE,SAA6BI,WACzBC,IAAbD,EAAwB,MAAM,IAAIE,MAAM,4CAGvCF,EAA0BG,WAAkEF,IAAzDD,EAA0BG,KAAKV,OAAOC,eAC5E,OAAOJ,EAAmBU,EAA0BG,MAGjD,GAAKH,EAAsBG,MAASH,EAAsBG,KAAKC,UAClE,OAAOP,EAAmBG,EAAsBG,KAAKC,aAGlD,GAAKJ,EAA2BK,KAAM,IACpCL,EAAiCK,KAAKd,OACzC,OAAOM,EAAoBG,EAAiCK,KAAKd,SAAmDa,aACjH,QAAmFH,IAA9ED,EAA+CK,KAAKZ,OAAOC,eACnE,OAAOJ,EAAmBU,EAA+CK,UAIxE,CAAA,GAAKL,EAAgCM,UACxC,OA/CwBC,EA+CGP,EAAgCM,UAAUE,cA9CnEC,GAAW,KAEbd,uBACMc,EAAiBC,QAAQC,QAAQ,CAAEC,WAAOX,EAAWY,MAAM,KAC/DJ,GAAW,EACJ,IAAIC,SAAQ,SAAUC,EAASG,GACpCP,EACGQ,MAAK,SAAUH,GACdD,EAAQ,CAAEC,MAAAA,EAAOC,MAAM,aAElBC,SAGZrB,OAAOC,iCACCE,QAkCN,GAAKI,EAAyBgB,eAAgEf,IAAnDD,EAAyBP,OAAOC,eAC9E,OAAOJ,EAAkBU,GAlD7B,IAA4BO,EACtBE,QAqDE,IAAIP,MAAM"}
1
+ {"version":3,"file":"response-iterator.min.js","sources":["../../src/iterators/async.ts","../../src/iterators/nodeStream.ts","../../src/iterators/promise.ts","../../src/iterators/reader.ts","../../src/index.ts"],"sourcesContent":["export default function asyncIterator<T>(source): AsyncIterableIterator<T> {\n const iterator = source[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n","import { Readable as NodeReadableStream } from \"stream\";\n\nconst hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function nodeStreamIterator<T>(stream: NodeReadableStream): AsyncIterableIterator<T> {\n let cleanup = null;\n let error = null;\n let done = false;\n const data = [];\n const waiting = [];\n\n function onData(chunk) {\n if (error) return;\n if (waiting.length) return waiting.shift()[0]({ value: chunk, done: false });\n data.push(chunk);\n }\n function onError(err) {\n error = err;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[1](err);\n });\n !cleanup || cleanup();\n }\n function onEnd() {\n done = true;\n const all = waiting.slice();\n all.forEach(function (pair) {\n pair[0]({ value: undefined, done: true });\n });\n !cleanup || cleanup();\n }\n\n cleanup = function () {\n cleanup = null;\n stream.removeListener(\"data\", onData);\n stream.removeListener(\"error\", onError);\n stream.removeListener(\"end\", onEnd);\n stream.removeListener(\"finish\", onEnd);\n stream.removeListener(\"close\", onEnd);\n };\n stream.on(\"data\", onData);\n stream.on(\"error\", onError);\n stream.on(\"end\", onEnd);\n stream.on(\"finish\", onEnd);\n stream.on(\"close\", onEnd);\n\n function getNext(): Promise<IteratorResult<T, boolean>> {\n return new Promise(function (resolve, reject) {\n if (error) return reject(error);\n if (data.length) return resolve({ value: data.shift(), done: false });\n if (done) return resolve({ value: undefined, done: true });\n waiting.push([resolve, reject]);\n });\n }\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return getNext();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n","const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n","const hasIterator = typeof Symbol !== \"undefined\" && Symbol.asyncIterator;\n\n/* c8 ignore start */\nexport default function readerIterator<T>(reader): AsyncIterableIterator<T> {\n const iterator = {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n };\n\n if (hasIterator) {\n iterator[Symbol.asyncIterator] = function (): AsyncIterator<T> {\n return this;\n };\n }\n\n return iterator as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n","import { AxiosResponse } from \"axios\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\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)\n 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)\n 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":["asyncIterator","source","iterator","Symbol","next","this","hasIterator","nodeStreamIterator","stream","cleanup","error","done","data","waiting","onData","chunk","length","shift","value","push","onError","err","slice","forEach","pair","onEnd","undefined","removeListener","on","Promise","resolve","reject","readerIterator","reader","read","response","Error","promise","resolved","body","_bodyBlob","getReader","arrayBuffer","then","pipe"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "response-iterator",
3
3
  "description": "Creates an async iterator for a variety of inputs in the browser and node. Supports fetch, node-fetch, and cross-fetch",
4
- "version": "0.2.0",
4
+ "version": "0.2.3",
5
5
  "author": {
6
6
  "email": "kmalakoff@gmail.com",
7
7
  "name": "Kevin Malakoff",
@@ -9,25 +9,17 @@
9
9
  },
10
10
  "license": "MIT",
11
11
  "main": "dist/cjs/index.js",
12
- "module": "dist/esm/index.js",
12
+ "module": "dist/esm/index.mjs",
13
13
  "files": [
14
14
  "dist"
15
15
  ],
16
16
  "scripts": {
17
- "build": "rimraf dist && cross-env BABEL_ENV=esm rollup -c .config/rollup/esm.mjs && cross-env BABEL_ENV=cjs rollup -c .config/rollup/cjs.mjs && cross-env BABEL_ENV=umd rollup -c .config/rollup/umd.mjs && tsc --declaration --emitDeclarationOnly --outDir dist && node ./.config/module-types.mjs",
18
- "deploy": "np",
19
- "docs": "rimraf docs && typedoc --includeVersion --entryPointStrategy expand --out docs src/index.ts",
20
- "format": "prettier --write .",
21
- "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx",
22
- "postdeploy": "gh-pages -d docs",
23
- "predeploy": "npm run format && npm run lint && depcheck && sortpack",
24
- "pretest": "allow-require-me add",
25
- "test": "npm run test:node && npm run test:browser",
26
- "test:browser": "karma start .config/karma.cjs \"test/**/*.test.*\"",
27
- "test:ci": "npm run pretest && nvu engines npm run test:node && npm run test:browser",
28
- "test:debug": "mocha --config .config/mocharc.json \"test/**/*.{test,test-node}.*\"",
29
- "test:node": "mocha --config .config/mocharc.json \"test/exports/*.test.*\" && rimraf coverage && c8 --config .config/c8rc.json mocha --config .config/mocharc.json \"test/unit/*.{test,test-node}.*\"",
30
- "version": "npm run docs && git add docs"
17
+ "build": "tsds build:dist",
18
+ "deploy": "tsds deploy",
19
+ "format": "tsds format",
20
+ "lint": "tsds lint",
21
+ "test": "tsds test:node && tsds test:node \"test/**/*.test-node.*\" && tsds test:browser",
22
+ "test:engines": "tsds test:engines"
31
23
  },
32
24
  "homepage": "https://github.com/kmalakoff/response-iterator#README.md",
33
25
  "repository": {
@@ -61,71 +53,29 @@
61
53
  "undici"
62
54
  ],
63
55
  "devDependencies": {
64
- "@babel/core": "^7.15.8",
65
- "@babel/preset-env": "^7.15.8",
66
- "@babel/preset-typescript": "^7.15.0",
67
- "@rollup/plugin-babel": "^5.3.0",
68
- "@rollup/plugin-commonjs": "^21.0.0",
69
- "@rollup/plugin-node-resolve": "^13.0.5",
70
- "@types/chai": "^4.2.22",
71
- "@types/mocha": "^9.0.0",
72
- "@typescript-eslint/eslint-plugin": "^4.33.0",
73
- "@typescript-eslint/parser": "^4.33.0",
74
- "allow-require-me": "^1.0.0",
75
- "axios": "^0.22.0",
76
- "c8": "^7.10.0",
77
- "camelcase": "^6.2.0",
78
- "chai": "^4.3.4",
79
- "cross-env": "^7.0.3",
80
- "cross-fetch": "^3.1.4",
81
- "depcheck": "^1.4.2",
82
- "eslint": "7.32.0",
83
- "eslint-config-prettier": "^8.3.0",
84
- "eslint-plugin-mocha": "^9.0.0",
85
- "gh-pages": "^3.2.3",
86
- "got": "^11.8.2",
56
+ "@types/axios": "^0.14.0",
57
+ "@types/node": "^18.0.0",
58
+ "@types/node-fetch": "^3.0.3",
59
+ "cross-fetch": "^3.1.5",
60
+ "got": "^12.1.0",
87
61
  "isomorphic-fetch": "^3.0.0",
88
- "karma": "^6.3.4",
89
- "karma-chai": "^0.1.0",
90
- "karma-chrome-launcher": "^3.1.0",
91
- "karma-mocha": "^2.0.1",
92
- "karma-mocha-reporter": "^2.2.5",
93
- "karma-sourcemap-loader": "^0.3.8",
94
- "karma-webpack": "^5.0.0",
95
- "mocha": "^9.1.2",
96
- "node-fetch": "^3.0.0",
97
- "node-version-use": "^0.2.0",
98
- "np": "^7.5.0",
99
- "prettier": "^2.4.1",
100
- "rimraf": "^3.0.2",
101
- "rollup": "^2.58.0",
102
- "rollup-plugin-node-externals": "^2.2.0",
103
- "rollup-plugin-terser": "^7.0.2",
104
- "sortpack": "^2.2.0",
105
- "ts-loader": "^9.2.6",
106
- "ts-node": "^10.2.1",
107
- "typedoc": "^0.22.5",
108
- "typedoc-plugin-rename-defaults": "^0.4.0",
109
- "typescript": "^4.4.3",
110
- "undici": "^4.7.1",
111
- "webpack": "^5.58.1"
62
+ "readable-stream-2": "npm:readable-stream@2.3.7",
63
+ "readable-stream-3": "npm:readable-stream@4.0.0",
64
+ "ts-dev-stack": "^0.2.1",
65
+ "undici": "^5.5.1"
112
66
  },
113
67
  "type": "module",
114
68
  "engines": {
115
- "node": ">=12"
69
+ "node": ">=0.8"
116
70
  },
117
71
  "exports": {
118
72
  ".": {
119
- "import": "./dist/esm/index.js",
73
+ "import": "./dist/esm/index.mjs",
120
74
  "require": "./dist/cjs/index.js",
121
- "types": "./dist/index.d.ts"
75
+ "types": "./dist/esm/index.d.ts"
122
76
  },
123
77
  "./*": "./*"
124
78
  },
125
- "np": {
126
- "testScript": "test:ci",
127
- "yarn": false
128
- },
129
- "types": "dist/index.d.ts",
79
+ "types": "dist/esm/index.d.ts",
130
80
  "unpkg": "dist/umd/response-iterator.js"
131
81
  }
package/dist/esm/index.js DELETED
@@ -1,79 +0,0 @@
1
- function streamIterator(stream) {
2
- const iterator = stream[Symbol.asyncIterator]();
3
- return {
4
- next() {
5
- return iterator.next();
6
- },
7
-
8
- [Symbol.asyncIterator]() {
9
- return this;
10
- }
11
-
12
- };
13
- }
14
- /* c8 ignore start */
15
-
16
-
17
- function readerIterator(reader) {
18
- return {
19
- next() {
20
- return reader.read();
21
- },
22
-
23
- [Symbol.asyncIterator]() {
24
- return this;
25
- }
26
-
27
- };
28
- }
29
-
30
- function promiseIterator(promise) {
31
- let resolved = false;
32
- return {
33
- next() {
34
- if (resolved) return Promise.resolve({
35
- value: undefined,
36
- done: true
37
- });
38
- resolved = true;
39
- return new Promise(function (resolve, reject) {
40
- promise.then(function (value) {
41
- resolve({
42
- value,
43
- done: false
44
- });
45
- }).catch(reject);
46
- });
47
- },
48
-
49
- [Symbol.asyncIterator]() {
50
- return this;
51
- }
52
-
53
- };
54
- }
55
- /* c8 ignore stop */
56
-
57
-
58
- /**
59
- * @param response A response. Supports fetch, node-fetch, and cross-fetch
60
- */
61
- function responseIterator(response) {
62
- if (response === undefined) throw new Error("Missing response for responseIterator"); // node node-fetch
63
-
64
- if (response.body && response.body[Symbol.asyncIterator] !== undefined) return streamIterator(response.body);
65
- /* c8 ignore start */
66
- // browser fetch or undici
67
- else if (response.body && response.body.getReader) return readerIterator(response.body.getReader()); // cross platform axios
68
- else if (response.data) {
69
- if (response.data.stream) return readerIterator(response.data.stream().getReader());else if (response.data[Symbol.asyncIterator] !== undefined) return streamIterator(response.data);
70
- } // browser cross-fetch
71
- else if (response._bodyBlob) return promiseIterator(response._bodyBlob.arrayBuffer()); // node got
72
- else if (response.readable && response[Symbol.asyncIterator] !== undefined) return streamIterator(response);
73
- /* c8 ignore stop */
74
-
75
- throw new Error("Unknown body type for responseIterator");
76
- }
77
-
78
- export { responseIterator as default };
79
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as GotResponse } from \"got\";\nimport { Response as NodeResponse } from \"node-fetch\";\nimport { Readable as NodeReadableStream } from \"stream\";\nimport { Response as UndiciResponse } from \"undici\";\n\ninterface CrossFetchResponse {\n _bodyBlob: Blob;\n}\n\nfunction streamIterator<T>(stream): AsyncIterableIterator<T> {\n const iterator = stream[Symbol.asyncIterator]();\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return iterator.next();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\n/* c8 ignore start */\nfunction readerIterator<T>(reader): AsyncIterableIterator<T> {\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n return reader.read();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n\nfunction promiseIterator<T>(promise): AsyncIterableIterator<T> {\n let resolved = false;\n return {\n next(): Promise<IteratorResult<T, boolean>> {\n if (resolved) return Promise.resolve({ value: undefined, done: true });\n resolved = true;\n return new Promise(function (resolve, reject) {\n promise\n .then(function (value) {\n resolve({ value, done: false });\n })\n .catch(reject);\n });\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this;\n },\n } as AsyncIterableIterator<T>;\n}\n/* c8 ignore stop */\n\nexport type ResponseType = AxiosResponse | CrossFetchResponse | GotResponse | NodeResponse | Response | UndiciResponse;\n\n/**\n * @param response A response. Supports fetch, node-fetch, and cross-fetch\n */\nexport default function responseIterator<T>(response: ResponseType): AsyncIterableIterator<T> {\n if (response === undefined) throw new Error(\"Missing response for responseIterator\");\n\n // node node-fetch\n if ((response as NodeResponse).body && (response as NodeResponse).body[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as NodeResponse).body);\n /* c8 ignore start */\n // browser fetch or undici\n else if ((response as Response).body && (response as Response).body.getReader)\n return readerIterator<T>((response as Response).body.getReader());\n\n // cross platform axios\n else if ((response as AxiosResponse).data) {\n if ((response as AxiosResponse<Blob>).data.stream)\n return readerIterator<T>(((response as AxiosResponse<Blob>).data.stream() as unknown as ReadableStream<Uint8Array>).getReader());\n else if ((response as AxiosResponse<NodeReadableStream>).data[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>((response as AxiosResponse<NodeReadableStream>).data);\n }\n\n // browser cross-fetch\n else if ((response as CrossFetchResponse)._bodyBlob)\n return promiseIterator<T>((response as CrossFetchResponse)._bodyBlob.arrayBuffer());\n // node got\n else if ((response as GotResponse).readable && (response as GotResponse)[Symbol.asyncIterator] !== undefined)\n return streamIterator<T>(response as GotResponse);\n\n /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator\");\n}\n"],"names":["streamIterator","stream","iterator","Symbol","asyncIterator","next","readerIterator","reader","read","promiseIterator","promise","resolved","Promise","resolve","value","undefined","done","reject","then","catch","responseIterator","response","Error","body","getReader","data","_bodyBlob","arrayBuffer","readable"],"mappings":"AAUA,SAASA,cAAT,CAA2BC,MAA3B,EAA6D;AAC3D,QAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACC,aAAR,CAAN,EAAjB;AACA,SAAO;AACLC,IAAAA,IAAI,GAAwC;AAC1C,aAAOH,QAAQ,CAACG,IAAT,EAAP;AACD,KAHI;;AAIL,KAACF,MAAM,CAACC,aAAR,IAA2C;AACzC,aAAO,IAAP;AACD;;AANI,GAAP;AAQD;AAED;;;AACA,SAASE,cAAT,CAA2BC,MAA3B,EAA6D;AAC3D,SAAO;AACLF,IAAAA,IAAI,GAAwC;AAC1C,aAAOE,MAAM,CAACC,IAAP,EAAP;AACD,KAHI;;AAIL,KAACL,MAAM,CAACC,aAAR,IAA2C;AACzC,aAAO,IAAP;AACD;;AANI,GAAP;AAQD;;AAED,SAASK,eAAT,CAA4BC,OAA5B,EAA+D;AAC7D,MAAIC,QAAQ,GAAG,KAAf;AACA,SAAO;AACLN,IAAAA,IAAI,GAAwC;AAC1C,UAAIM,QAAJ,EAAc,OAAOC,OAAO,CAACC,OAAR,CAAgB;AAAEC,QAAAA,KAAK,EAAEC,SAAT;AAAoBC,QAAAA,IAAI,EAAE;AAA1B,OAAhB,CAAP;AACdL,MAAAA,QAAQ,GAAG,IAAX;AACA,aAAO,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmBI,MAAnB,EAA2B;AAC5CP,QAAAA,OAAO,CACJQ,IADH,CACQ,UAAUJ,KAAV,EAAiB;AACrBD,UAAAA,OAAO,CAAC;AAAEC,YAAAA,KAAF;AAASE,YAAAA,IAAI,EAAE;AAAf,WAAD,CAAP;AACD,SAHH,EAIGG,KAJH,CAISF,MAJT;AAKD,OANM,CAAP;AAOD,KAXI;;AAYL,KAACd,MAAM,CAACC,aAAR,IAA2C;AACzC,aAAO,IAAP;AACD;;AAdI,GAAP;AAgBD;AACD;;;AAIA;AACA;AACA;AACe,SAASgB,gBAAT,CAA6BC,QAA7B,EAA+E;AAC5F,MAAIA,QAAQ,KAAKN,SAAjB,EAA4B,MAAM,IAAIO,KAAJ,CAAU,uCAAV,CAAN,CADgE;;AAI5F,MAAKD,QAAD,CAA2BE,IAA3B,IAAoCF,QAAD,CAA2BE,IAA3B,CAAgCpB,MAAM,CAACC,aAAvC,MAA0DW,SAAjG,EACE,OAAOf,cAAc,CAAKqB,QAAD,CAA2BE,IAA/B,CAArB;AACF;AACA;AAHA,OAIK,IAAKF,QAAD,CAAuBE,IAAvB,IAAgCF,QAAD,CAAuBE,IAAvB,CAA4BC,SAA/D,EACH,OAAOlB,cAAc,CAAKe,QAAD,CAAuBE,IAAvB,CAA4BC,SAA5B,EAAJ,CAArB,CADG;AAAA,OAIA,IAAKH,QAAD,CAA4BI,IAAhC,EAAsC;AACzC,QAAKJ,QAAD,CAAkCI,IAAlC,CAAuCxB,MAA3C,EACE,OAAOK,cAAc,CAAMe,QAAD,CAAkCI,IAAlC,CAAuCxB,MAAvC,EAAD,CAA2FuB,SAA3F,EAAJ,CAArB,CADF,KAEK,IAAKH,QAAD,CAAgDI,IAAhD,CAAqDtB,MAAM,CAACC,aAA5D,MAA+EW,SAAnF,EACH,OAAOf,cAAc,CAAKqB,QAAD,CAAgDI,IAApD,CAArB;AACH,GALI;AAAA,OAQA,IAAKJ,QAAD,CAAiCK,SAArC,EACH,OAAOjB,eAAe,CAAKY,QAAD,CAAiCK,SAAjC,CAA2CC,WAA3C,EAAJ,CAAtB,CADG;AAAA,OAGA,IAAKN,QAAD,CAA0BO,QAA1B,IAAuCP,QAAD,CAA0BlB,MAAM,CAACC,aAAjC,MAAoDW,SAA9F,EACH,OAAOf,cAAc,CAAIqB,QAAJ,CAArB;AAEF;;AAEA,QAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;AACD;;;;"}
package/dist/index.d.ts DELETED
@@ -1,13 +0,0 @@
1
- import { AxiosResponse } from "axios";
2
- import { Response as GotResponse } from "got";
3
- import { Response as NodeResponse } from "node-fetch";
4
- import { Response as UndiciResponse } from "undici";
5
- interface CrossFetchResponse {
6
- _bodyBlob: Blob;
7
- }
8
- export declare type ResponseType = AxiosResponse | CrossFetchResponse | GotResponse | NodeResponse | Response | UndiciResponse;
9
- /**
10
- * @param response A response. Supports fetch, node-fetch, and cross-fetch
11
- */
12
- export default function responseIterator<T>(response: ResponseType): AsyncIterableIterator<T>;
13
- export {};