response-iterator 0.2.1 → 0.2.4

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 (37) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +7 -7
  3. package/dist/cjs/index.js +28 -93
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/iterators/async.js +28 -0
  6. package/dist/cjs/iterators/async.js.map +1 -0
  7. package/dist/cjs/iterators/nodeStream.js +81 -0
  8. package/dist/cjs/iterators/nodeStream.js.map +1 -0
  9. package/dist/cjs/iterators/promise.js +32 -0
  10. package/dist/cjs/iterators/promise.js.map +1 -0
  11. package/dist/cjs/iterators/reader.js +19 -0
  12. package/dist/cjs/iterators/reader.js.map +1 -0
  13. package/dist/cjs/package.json +1 -1
  14. package/dist/esm/index.mjs +22 -0
  15. package/dist/esm/index.mjs.map +1 -0
  16. package/dist/esm/iterators/async.mjs +11 -0
  17. package/dist/esm/iterators/async.mjs.map +1 -0
  18. package/dist/esm/iterators/nodeStream.mjs +76 -0
  19. package/dist/esm/iterators/nodeStream.mjs.map +1 -0
  20. package/dist/esm/iterators/promise.mjs +27 -0
  21. package/dist/esm/iterators/promise.mjs.map +1 -0
  22. package/dist/esm/iterators/reader.mjs +14 -0
  23. package/dist/esm/iterators/reader.mjs.map +1 -0
  24. package/dist/esm/package.json +1 -1
  25. package/dist/{index.d.ts → types/index.d.ts} +0 -0
  26. package/dist/types/iterators/async.d.ts +1 -0
  27. package/dist/types/iterators/nodeStream.d.ts +3 -0
  28. package/dist/types/iterators/promise.d.ts +1 -0
  29. package/dist/types/iterators/reader.d.ts +1 -0
  30. package/dist/umd/package.json +1 -1
  31. package/dist/umd/response-iterator.js +154 -84
  32. package/dist/umd/response-iterator.js.map +1 -1
  33. package/dist/umd/response-iterator.min.js +1 -1
  34. package/dist/umd/response-iterator.min.js.map +1 -1
  35. package/package.json +22 -71
  36. package/dist/esm/index.js +0 -87
  37. package/dist/esm/index.js.map +0 -1
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
package/README.md CHANGED
@@ -6,11 +6,11 @@ Creates an async iterator for a variety of inputs in the browser and node. Suppo
6
6
 
7
7
  ```typescript
8
8
  // import "isomorphic-fetch"; // node only
9
- import responseIterator from "response-iterator";
9
+ import responseIterator from 'response-iterator';
10
10
 
11
- const res = await fetch("https://raw.githubusercontent.com/kmalakoff/response-iterator/master/package.json");
11
+ const res = await fetch('https://raw.githubusercontent.com/kmalakoff/response-iterator/master/package.json');
12
12
 
13
- let data = "";
13
+ let data = '';
14
14
  for await (const chunk of responseIterator(res)) {
15
15
  data += chunk;
16
16
  }
@@ -20,12 +20,12 @@ console.log(JSON.parse(data).name); // "response-iterator"
20
20
  ### Example 2
21
21
 
22
22
  ```typescript
23
- import crossFetch from "cross-fetch";
24
- import responseIterator from "response-iterator";
23
+ import crossFetch from 'cross-fetch';
24
+ import responseIterator from 'response-iterator';
25
25
 
26
- const res = await crossFetch("https://raw.githubusercontent.com/kmalakoff/response-iterator/master/package.json");
26
+ const res = await crossFetch('https://raw.githubusercontent.com/kmalakoff/response-iterator/master/package.json');
27
27
 
28
- let data = "";
28
+ let data = '';
29
29
  for await (const chunk of responseIterator(res)) {
30
30
  data += chunk;
31
31
  }
package/dist/cjs/index.js CHANGED
@@ -1,95 +1,30 @@
1
- 'use strict';
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
- }
14
-
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 */
29
-
30
-
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
- }
40
-
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 */
64
-
65
- /**
66
- * @param response A response. Supports fetch, node-fetch, and cross-fetch
67
- */
68
-
69
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ module.exports = responseIterator;
6
+ var _asyncJs = _interopRequireDefault(require("./iterators/async.js"));
7
+ var _nodeStreamJs = _interopRequireDefault(require("./iterators/nodeStream.js"));
8
+ var _promiseJs = _interopRequireDefault(require("./iterators/promise.js"));
9
+ var _readerJs = _interopRequireDefault(require("./iterators/reader.js"));
70
10
  function responseIterator(response) {
71
- if (response === undefined) throw new Error("Missing response for responseIterator"); // determine the body
72
-
73
- var body = response;
74
- if (response.body) body = response.body; // node-fetch, browser fetch, undici
75
- else if (response.data) body = response.data; // axios
76
-
77
- /* c8 ignore start */
78
- else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
79
-
80
- /* c8 ignore stop */
81
- // adapt the body
82
-
83
- if (body[Symbol.asyncIterator]) return streamIterator(body);
84
- /* c8 ignore start */
85
-
86
- if (body.getReader) return readerIterator(body.getReader());
87
- if (body.stream) return readerIterator(body.stream().getReader());
88
- if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
89
- /* c8 ignore stop */
90
-
91
- throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
11
+ if (response === undefined) throw new Error("Missing response for responseIterator");
12
+ // determine the body
13
+ var body = response;
14
+ if (response.body) body = response.body;
15
+ else if (response.data) body = response.data;
16
+ else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
17
+ /* c8 ignore stop */ // adapt the body
18
+ if (hasIterator && body[Symbol.asyncIterator]) return (0, _asyncJs).default(body);
19
+ /* c8 ignore start */ if (body.getReader) return (0, _readerJs).default(body.getReader());
20
+ if (body.stream) return (0, _readerJs).default(body.stream().getReader());
21
+ if (body.arrayBuffer) return (0, _promiseJs).default(body.arrayBuffer());
22
+ if (body.pipe) return (0, _nodeStreamJs).default(body);
23
+ /* c8 ignore stop */ throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
92
24
  }
93
-
94
- module.exports = responseIterator;
95
- //# sourceMappingURL=index.js.map
25
+ function _interopRequireDefault(obj) {
26
+ return obj && obj.__esModule ? obj : {
27
+ default: obj
28
+ };
29
+ }
30
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as NodeResponse } from \"node-fetch\";\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\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 (body[Symbol.asyncIterator]) return streamIterator<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 /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator. Maybe you are not passing a streamable response\");\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","data","_bodyBlob","getReader","arrayBuffer"],"mappings":";;;;;;;;;;;;;;;;;AAOA,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;;AAEA;AACA;AACA;;;AACe,SAASe,gBAAT,CAA6BC,QAA7B,EAA0E;AACvF,MAAIA,QAAQ,KAAKL,SAAjB,EAA4B,MAAM,IAAIM,KAAJ,CAAU,uCAAV,CAAN,CAD2D;;AAIvF,MAAIC,IAAa,GAAGF,QAApB;AACA,MAAKA,QAAD,CAA2BE,IAA/B,EAAqCA,IAAI,GAAIF,QAAD,CAA2BE,IAAlC,CAArC;AAAA,OAEK,IAAKF,QAAD,CAA4BG,IAAhC,EAAsCD,IAAI,GAAIF,QAAD,CAA4BG,IAAnC,CAAtC;;AAEL;AAFK,OAEsB,IAAKH,QAAD,CAAiCI,SAArC,EACzBF,IAAI,GAAIF,QAAD,CAAiCI,SAAxC,CAVqF;;AAWvF;AAEA;;AACA,MAAIF,IAAI,CAACnB,MAAM,CAACC,aAAR,CAAR,EAAgC,OAAOJ,cAAc,CAAIsB,IAAJ,CAArB;AAChC;;AACA,MAAKA,IAAD,CAA4BG,SAAhC,EAA2C,OAAOnB,cAAc,CAAKgB,IAAD,CAA4BG,SAA5B,EAAJ,CAArB;AAC3C,MAAKH,IAAD,CAAerB,MAAnB,EACE,OAAOK,cAAc,CAAMgB,IAAD,CAAerB,MAAf,EAAD,CAA0DwB,SAA1D,EAAJ,CAArB;AACF,MAAKH,IAAD,CAAeI,WAAnB,EAAgC,OAAOjB,eAAe,CAAKa,IAAD,CAAeI,WAAf,EAAJ,CAAtB;AAChC;;AAEA,QAAM,IAAIL,KAAJ,CAAU,yFAAV,CAAN;AACD;;;;"}
1
+ {"version":3,"sources":["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.js';\nimport nodeStreamIterator from './iterators/nodeStream.js';\nimport promiseIterator from './iterators/promise.js';\nimport readerIterator from './iterators/reader.js';\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","response","undefined","Error","body","data","_bodyBlob","hasIterator","Symbol","asyncIterator","getReader","readerIterator","stream","arrayBuffer","promiseIterator","pipe","nodeStreamIterator"],"mappings":"AAAA;;;;kBAkBwBA,gBAAgB;AAdd,IAAA,QAAsB,kCAAtB,sBAAsB,EAAA;AACjB,IAAA,aAA2B,kCAA3B,2BAA2B,EAAA;AAC9B,IAAA,UAAwB,kCAAxB,wBAAwB,EAAA;AACzB,IAAA,SAAuB,kCAAvB,uBAAuB,EAAA;AAWnC,SAASA,gBAAgB,CAAIC,QAAiB,EAA4B;IACvF,IAAIA,QAAQ,KAAKC,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAErF,qBAAqB;IACrB,IAAIC,IAAI,GAAYH,QAAQ,AAAC;IAC7B,IAAI,AAACA,QAAQ,CAAkBG,IAAI,EAAEA,IAAI,GAAG,AAACH,QAAQ,CAAkBG,IAAI,CAAC;SAEvE,IAAI,AAACH,QAAQ,CAAmBI,IAAI,EAAED,IAAI,GAAG,AAACH,QAAQ,CAAmBI,IAAI,CAAC;SAExD,IAAI,AAACJ,QAAQ,CAAwBK,SAAS,EAAEF,IAAI,GAAG,AAACH,QAAQ,CAAwBK,SAAS,CAAC,CAAC,cAAc;IAC5I,oBAAoB,CAEpB,iBAAiB;IACjB,IAAIC,WAAW,IAAIH,IAAI,CAACI,MAAM,CAACC,aAAa,CAAC,EAAE,OAAOA,CAAAA,GAAAA,QAAa,AAAqC,CAAA,QAArC,CAAIL,IAAI,CAA6B,CAAC;IACzG,qBAAqB,CACrB,IAAI,AAACA,IAAI,CAAuBM,SAAS,EAAE,OAAOC,CAAAA,GAAAA,SAAc,AAA4C,CAAA,QAA5C,CAAI,AAACP,IAAI,CAAuBM,SAAS,EAAE,CAAC,CAAC;IAC7G,IAAI,AAACN,IAAI,CAAUQ,MAAM,EAAE,OAAOD,CAAAA,GAAAA,SAAc,AAA0E,CAAA,QAA1E,CAAI,AAAC,AAACP,IAAI,CAAUQ,MAAM,EAAE,CAAkCF,SAAS,EAAE,CAAC,CAAC;IAC3H,IAAI,AAACN,IAAI,CAAUS,WAAW,EAAE,OAAOC,CAAAA,GAAAA,UAAe,AAAiC,CAAA,QAAjC,CAAI,AAACV,IAAI,CAAUS,WAAW,EAAE,CAAC,CAAC;IACxF,IAAI,AAACT,IAAI,CAAwBW,IAAI,EAAE,OAAOC,CAAAA,GAAAA,aAAkB,AAA+B,CAAA,QAA/B,CAAIZ,IAAI,CAAuB,CAAC;IAChG,oBAAoB,CAEpB,MAAM,IAAID,KAAK,CAAC,yFAAyF,CAAC,CAAC;CAC5G;;;;;;AA3BD,IAAMI,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ module.exports = asyncIterator;
6
+ function asyncIterator(source) {
7
+ var iterator = source[Symbol.asyncIterator]();
8
+ return _defineProperty({
9
+ next: function next() {
10
+ return iterator.next();
11
+ }
12
+ }, Symbol.asyncIterator, function() {
13
+ return this;
14
+ });
15
+ }
16
+ function _defineProperty(obj, key, value) {
17
+ if (key in obj) {
18
+ Object.defineProperty(obj, key, {
19
+ value: value,
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true
23
+ });
24
+ } else {
25
+ obj[key] = value;
26
+ }
27
+ return obj;
28
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["asyncIterator","source","iterator","Symbol","next"],"mappings":"AAAA;;;;kBAAwBA,aAAa;AAAtB,SAASA,aAAa,CAAIC,MAAM,EAA4B;IACzE,IAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACH,aAAa,CAAC,EAAE,AAAC;IAChD,OAIE;QAHAI,IAAI,EAAJA,SAAAA,IAAI,GAAwC;YAC1C,OAAOF,QAAQ,CAACE,IAAI,EAAE,CAAC;SACxB;OACAD,MAAM,CAACH,aAAa,EAArB,WAA2C;QACzC,OAAO,IAAI,CAAC;KACb,CAAA,CAC2B;CAC/B"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ module.exports = nodeStreamIterator;
6
+ function nodeStreamIterator(stream) {
7
+ var onData = function onData(chunk) {
8
+ if (error) return;
9
+ if (waiting.length) return waiting.shift()[0]({
10
+ value: chunk,
11
+ done: false
12
+ });
13
+ data.push(chunk);
14
+ };
15
+ var onError = function onError(err) {
16
+ error = err;
17
+ var all = waiting.slice();
18
+ all.forEach(function(pair) {
19
+ pair[1](err);
20
+ });
21
+ !cleanup || cleanup();
22
+ };
23
+ var onEnd = function onEnd() {
24
+ done = true;
25
+ var all = waiting.slice();
26
+ all.forEach(function(pair) {
27
+ pair[0]({
28
+ value: undefined,
29
+ done: true
30
+ });
31
+ });
32
+ !cleanup || cleanup();
33
+ };
34
+ var getNext = function getNext() {
35
+ return new Promise(function(resolve, reject) {
36
+ if (error) return reject(error);
37
+ if (data.length) return resolve({
38
+ value: data.shift(),
39
+ done: false
40
+ });
41
+ if (done) return resolve({
42
+ value: undefined,
43
+ done: true
44
+ });
45
+ waiting.push([
46
+ resolve,
47
+ reject
48
+ ]);
49
+ });
50
+ };
51
+ var cleanup = null;
52
+ var error = null;
53
+ var done = false;
54
+ var data = [];
55
+ var waiting = [];
56
+ cleanup = function() {
57
+ cleanup = null;
58
+ stream.removeListener("data", onData);
59
+ stream.removeListener("error", onError);
60
+ stream.removeListener("end", onEnd);
61
+ stream.removeListener("finish", onEnd);
62
+ stream.removeListener("close", onEnd);
63
+ };
64
+ stream.on("data", onData);
65
+ stream.on("error", onError);
66
+ stream.on("end", onEnd);
67
+ stream.on("finish", onEnd);
68
+ stream.on("close", onEnd);
69
+ var iterator = {
70
+ next: function next() {
71
+ return getNext();
72
+ }
73
+ };
74
+ if (hasIterator) {
75
+ iterator[Symbol.asyncIterator] = function() {
76
+ return this;
77
+ };
78
+ }
79
+ return iterator;
80
+ } /* c8 ignore stop */
81
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["nodeStreamIterator","stream","onData","chunk","error","waiting","length","shift","value","done","data","push","onError","err","all","slice","forEach","pair","cleanup","onEnd","undefined","getNext","Promise","resolve","reject","removeListener","on","iterator","next","hasIterator","Symbol","asyncIterator"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ module.exports = promiseIterator;
6
+ function promiseIterator(promise) {
7
+ var resolved = false;
8
+ var iterator = {
9
+ next: function next() {
10
+ if (resolved) return Promise.resolve({
11
+ value: undefined,
12
+ done: true
13
+ });
14
+ resolved = true;
15
+ return new Promise(function(resolve, reject) {
16
+ promise.then(function(value) {
17
+ resolve({
18
+ value: value,
19
+ done: false
20
+ });
21
+ })["catch"](reject);
22
+ });
23
+ }
24
+ };
25
+ if (hasIterator) {
26
+ iterator[Symbol.asyncIterator] = function() {
27
+ return this;
28
+ };
29
+ }
30
+ return iterator;
31
+ } /* c8 ignore stop */
32
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["promiseIterator","promise","resolved","iterator","next","Promise","resolve","value","undefined","done","reject","then","catch","hasIterator","Symbol","asyncIterator"],"mappings":"AAAA;;;;kBAGwBA,eAAe;AAAxB,SAASA,eAAe,CAAIC,OAAO,EAA4B;IAC5E,IAAIC,QAAQ,GAAG,KAAK,AAAC;IAErB,IAAMC,QAAQ,GAAG;QACfC,IAAI,EAAJA,SAAAA,IAAI,GAAwC;YAC1C,IAAIF,QAAQ,EAAE,OAAOG,OAAO,CAACC,OAAO,CAAC;gBAAEC,KAAK,EAAEC,SAAS;gBAAEC,IAAI,EAAE,IAAI;aAAE,CAAC,CAAC;YACvEP,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,IAAIG,OAAO,CAAC,SAAUC,OAAO,EAAEI,MAAM,EAAE;gBAC5CT,OAAO,CACJU,IAAI,CAAC,SAAUJ,KAAK,EAAE;oBACrBD,OAAO,CAAC;wBAAEC,KAAK,EAALA,KAAK;wBAAEE,IAAI,EAAE,KAAK;qBAAE,CAAC,CAAC;iBACjC,CAAC,AACDG,CAAAA,OAAK,CAAA,CAACF,MAAM,CAAC,CAAC;aAClB,CAAC,CAAC;SACJ;KACF,AAAC;IAEF,IAAIG,WAAW,EAAE;QACfV,QAAQ,CAACW,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAOZ,QAAQ,CAA6B;CAC7C,CACD,oBAAoB;AA5BpB,IAAMU,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ module.exports = readerIterator;
6
+ function readerIterator(reader) {
7
+ var iterator = {
8
+ next: function next() {
9
+ return reader.read();
10
+ }
11
+ };
12
+ if (hasIterator) {
13
+ iterator[Symbol.asyncIterator] = function() {
14
+ return this;
15
+ };
16
+ }
17
+ return iterator;
18
+ } /* c8 ignore stop */
19
+ var hasIterator = typeof Symbol !== "undefined" && Symbol.asyncIterator;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["readerIterator","reader","iterator","next","read","hasIterator","Symbol","asyncIterator"],"mappings":"AAAA;;;;kBAGwBA,cAAc;AAAvB,SAASA,cAAc,CAAIC,MAAM,EAA4B;IAC1E,IAAMC,QAAQ,GAAG;QACfC,IAAI,EAAJA,SAAAA,IAAI,GAAwC;YAC1C,OAAOF,MAAM,CAACG,IAAI,EAAE,CAAC;SACtB;KACF,AAAC;IAEF,IAAIC,WAAW,EAAE;QACfH,QAAQ,CAACI,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAOL,QAAQ,CAA6B;CAC7C,CACD,oBAAoB;AAlBpB,IAAMG,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC"}
@@ -1 +1 @@
1
- {"type":"commonjs"}
1
+ { "type": "commonjs" }
@@ -0,0 +1,22 @@
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
+ */ export default function responseIterator(response) {
9
+ if (response === undefined) throw new Error('Missing response for responseIterator');
10
+ // determine the body
11
+ let body = response;
12
+ if (response.body) body = response.body;
13
+ else if (response.data) body = response.data;
14
+ else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
15
+ /* c8 ignore stop */ // adapt the body
16
+ if (hasIterator && body[Symbol.asyncIterator]) return asyncIterator(body);
17
+ /* c8 ignore start */ if (body.getReader) return readerIterator(body.getReader());
18
+ if (body.stream) return readerIterator(body.stream().getReader());
19
+ if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
20
+ if (body.pipe) return nodeStreamIterator(body);
21
+ /* c8 ignore stop */ throw new Error('Unknown body type for responseIterator. Maybe you are not passing a streamable response');
22
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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.js';\nimport nodeStreamIterator from './iterators/nodeStream.js';\nimport promiseIterator from './iterators/promise.js';\nimport readerIterator from './iterators/reader.js';\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":["asyncIterator","nodeStreamIterator","promiseIterator","readerIterator","hasIterator","Symbol","responseIterator","response","undefined","Error","body","data","_bodyBlob","getReader","stream","arrayBuffer","pipe"],"mappings":"AAIA,OAAOA,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAOC,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAOC,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAOC,cAAc,MAAM,uBAAuB,CAAC;AAMnD,MAAMC,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACL,aAAa,AAAC;AAE1E;;GAEG,CACH,eAAe,SAASM,gBAAgB,CAAIC,QAAiB,EAA4B;IACvF,IAAIA,QAAQ,KAAKC,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAErF,qBAAqB;IACrB,IAAIC,IAAI,GAAYH,QAAQ,AAAC;IAC7B,IAAI,AAACA,QAAQ,CAAkBG,IAAI,EAAEA,IAAI,GAAG,AAACH,QAAQ,CAAkBG,IAAI,CAAC;SAEvE,IAAI,AAACH,QAAQ,CAAmBI,IAAI,EAAED,IAAI,GAAG,AAACH,QAAQ,CAAmBI,IAAI,CAAC;SAExD,IAAI,AAACJ,QAAQ,CAAwBK,SAAS,EAAEF,IAAI,GAAG,AAACH,QAAQ,CAAwBK,SAAS,CAAC,CAAC,cAAc;IAC5I,oBAAoB,CAEpB,iBAAiB;IACjB,IAAIR,WAAW,IAAIM,IAAI,CAACL,MAAM,CAACL,aAAa,CAAC,EAAE,OAAOA,aAAa,CAAIU,IAAI,CAA6B,CAAC;IACzG,qBAAqB,CACrB,IAAI,AAACA,IAAI,CAAuBG,SAAS,EAAE,OAAOV,cAAc,CAAI,AAACO,IAAI,CAAuBG,SAAS,EAAE,CAAC,CAAC;IAC7G,IAAI,AAACH,IAAI,CAAUI,MAAM,EAAE,OAAOX,cAAc,CAAI,AAAC,AAACO,IAAI,CAAUI,MAAM,EAAE,CAAkCD,SAAS,EAAE,CAAC,CAAC;IAC3H,IAAI,AAACH,IAAI,CAAUK,WAAW,EAAE,OAAOb,eAAe,CAAI,AAACQ,IAAI,CAAUK,WAAW,EAAE,CAAC,CAAC;IACxF,IAAI,AAACL,IAAI,CAAwBM,IAAI,EAAE,OAAOf,kBAAkB,CAAIS,IAAI,CAAuB,CAAC;IAChG,oBAAoB,CAEpB,MAAM,IAAID,KAAK,CAAC,yFAAyF,CAAC,CAAC;CAC5G,CAAA"}
@@ -0,0 +1,11 @@
1
+ export default function asyncIterator(source) {
2
+ const iterator = source[Symbol.asyncIterator]();
3
+ return {
4
+ next () {
5
+ return iterator.next();
6
+ },
7
+ [Symbol.asyncIterator] () {
8
+ return this;
9
+ }
10
+ };
11
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["asyncIterator","source","iterator","Symbol","next"],"mappings":"AAAA,eAAe,SAASA,aAAa,CAAIC,MAAM,EAA4B;IACzE,MAAMC,QAAQ,GAAGD,MAAM,CAACE,MAAM,CAACH,aAAa,CAAC,EAAE,AAAC;IAChD,OAAO;QACLI,IAAI,IAAwC;YAC1C,OAAOF,QAAQ,CAACE,IAAI,EAAE,CAAC;SACxB;QACD,CAACD,MAAM,CAACH,aAAa,CAAC,IAAqB;YACzC,OAAO,IAAI,CAAC;SACb;KACF,CAA6B;CAC/B,CAAA"}
@@ -0,0 +1,76 @@
1
+ const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
2
+ /* c8 ignore start */ export default function nodeStreamIterator(stream) {
3
+ let cleanup = null;
4
+ let error = null;
5
+ let done = false;
6
+ const data = [];
7
+ const waiting = [];
8
+ function onData(chunk) {
9
+ if (error) return;
10
+ if (waiting.length) return waiting.shift()[0]({
11
+ value: chunk,
12
+ done: false
13
+ });
14
+ data.push(chunk);
15
+ }
16
+ function onError(err) {
17
+ error = err;
18
+ const all = waiting.slice();
19
+ all.forEach(function(pair) {
20
+ pair[1](err);
21
+ });
22
+ !cleanup || cleanup();
23
+ }
24
+ function onEnd() {
25
+ done = true;
26
+ const all = waiting.slice();
27
+ all.forEach(function(pair) {
28
+ pair[0]({
29
+ value: undefined,
30
+ done: true
31
+ });
32
+ });
33
+ !cleanup || cleanup();
34
+ }
35
+ cleanup = function() {
36
+ cleanup = null;
37
+ stream.removeListener('data', onData);
38
+ stream.removeListener('error', onError);
39
+ stream.removeListener('end', onEnd);
40
+ stream.removeListener('finish', onEnd);
41
+ stream.removeListener('close', onEnd);
42
+ };
43
+ stream.on('data', onData);
44
+ stream.on('error', onError);
45
+ stream.on('end', onEnd);
46
+ stream.on('finish', onEnd);
47
+ stream.on('close', onEnd);
48
+ function getNext() {
49
+ return new Promise(function(resolve, reject) {
50
+ if (error) return reject(error);
51
+ if (data.length) return resolve({
52
+ value: data.shift(),
53
+ done: false
54
+ });
55
+ if (done) return resolve({
56
+ value: undefined,
57
+ done: true
58
+ });
59
+ waiting.push([
60
+ resolve,
61
+ reject
62
+ ]);
63
+ });
64
+ }
65
+ const iterator = {
66
+ next () {
67
+ return getNext();
68
+ }
69
+ };
70
+ if (hasIterator) {
71
+ iterator[Symbol.asyncIterator] = function() {
72
+ return this;
73
+ };
74
+ }
75
+ return iterator;
76
+ }; /* c8 ignore stop */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"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"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
2
+ /* c8 ignore start */ export default function promiseIterator(promise) {
3
+ let resolved = false;
4
+ const iterator = {
5
+ next () {
6
+ if (resolved) return Promise.resolve({
7
+ value: undefined,
8
+ done: true
9
+ });
10
+ resolved = true;
11
+ return new Promise(function(resolve, reject) {
12
+ promise.then(function(value) {
13
+ resolve({
14
+ value,
15
+ done: false
16
+ });
17
+ }).catch(reject);
18
+ });
19
+ }
20
+ };
21
+ if (hasIterator) {
22
+ iterator[Symbol.asyncIterator] = function() {
23
+ return this;
24
+ };
25
+ }
26
+ return iterator;
27
+ }; /* c8 ignore stop */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["hasIterator","Symbol","asyncIterator","promiseIterator","promise","resolved","iterator","next","Promise","resolve","value","undefined","done","reject","then","catch"],"mappings":"AAAA,MAAMA,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC;AAE1E,qBAAqB,CACrB,eAAe,SAASC,eAAe,CAAIC,OAAO,EAA4B;IAC5E,IAAIC,QAAQ,GAAG,KAAK,AAAC;IAErB,MAAMC,QAAQ,GAAG;QACfC,IAAI,IAAwC;YAC1C,IAAIF,QAAQ,EAAE,OAAOG,OAAO,CAACC,OAAO,CAAC;gBAAEC,KAAK,EAAEC,SAAS;gBAAEC,IAAI,EAAE,IAAI;aAAE,CAAC,CAAC;YACvEP,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,IAAIG,OAAO,CAAC,SAAUC,OAAO,EAAEI,MAAM,EAAE;gBAC5CT,OAAO,CACJU,IAAI,CAAC,SAAUJ,KAAK,EAAE;oBACrBD,OAAO,CAAC;wBAAEC,KAAK;wBAAEE,IAAI,EAAE,KAAK;qBAAE,CAAC,CAAC;iBACjC,CAAC,CACDG,KAAK,CAACF,MAAM,CAAC,CAAC;aAClB,CAAC,CAAC;SACJ;KACF,AAAC;IAEF,IAAIb,WAAW,EAAE;QACfM,QAAQ,CAACL,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAOI,QAAQ,CAA6B;CAC7C,CAAA,CACD,oBAAoB"}
@@ -0,0 +1,14 @@
1
+ const hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
2
+ /* c8 ignore start */ export default function readerIterator(reader) {
3
+ const iterator = {
4
+ next () {
5
+ return reader.read();
6
+ }
7
+ };
8
+ if (hasIterator) {
9
+ iterator[Symbol.asyncIterator] = function() {
10
+ return this;
11
+ };
12
+ }
13
+ return iterator;
14
+ }; /* c8 ignore stop */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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"],"names":["hasIterator","Symbol","asyncIterator","readerIterator","reader","iterator","next","read"],"mappings":"AAAA,MAAMA,WAAW,GAAG,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,aAAa,AAAC;AAE1E,qBAAqB,CACrB,eAAe,SAASC,cAAc,CAAIC,MAAM,EAA4B;IAC1E,MAAMC,QAAQ,GAAG;QACfC,IAAI,IAAwC;YAC1C,OAAOF,MAAM,CAACG,IAAI,EAAE,CAAC;SACtB;KACF,AAAC;IAEF,IAAIP,WAAW,EAAE;QACfK,QAAQ,CAACJ,MAAM,CAACC,aAAa,CAAC,GAAG,WAA8B;YAC7D,OAAO,IAAI,CAAC;SACb,CAAC;KACH;IAED,OAAOG,QAAQ,CAA6B;CAC7C,CAAA,CACD,oBAAoB"}
@@ -1 +1 @@
1
- {"type":"module"}
1
+ { "type": "module" }
File without changes
@@ -0,0 +1 @@
1
+ export default function asyncIterator<T>(source: any): AsyncIterableIterator<T>;
@@ -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 @@
1
+ export default function promiseIterator<T>(promise: any): AsyncIterableIterator<T>;
@@ -0,0 +1 @@
1
+ export default function readerIterator<T>(reader: any): AsyncIterableIterator<T>;
@@ -1 +1 @@
1
- {"type":"commonjs"}
1
+ { "type": "commonjs" }
@@ -1,101 +1,171 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3
- typeof define === 'function' && define.amd ? define(factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.responseIterator = factory());
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3
+ typeof define === 'function' && define.amd ? define(factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.responseIterator = factory());
5
5
  })(this, (function () { 'use strict';
6
6
 
7
- function _defineProperty(obj, key, value) {
8
- if (key in obj) {
9
- Object.defineProperty(obj, key, {
10
- value: value,
11
- enumerable: true,
12
- configurable: true,
13
- writable: true
14
- });
15
- } else {
16
- obj[key] = value;
7
+ function asyncIterator(source) {
8
+ var _a;
9
+ var iterator = source[Symbol.asyncIterator]();
10
+ return _a = {
11
+ next: function () {
12
+ return iterator.next();
13
+ }
14
+ },
15
+ _a[Symbol.asyncIterator] = function () {
16
+ return this;
17
+ },
18
+ _a;
17
19
  }
18
20
 
19
- return obj;
20
- }
21
-
22
- function streamIterator(stream) {
23
- var iterator = stream[Symbol.asyncIterator]();
24
- return _defineProperty({
25
- next: function next() {
26
- return iterator.next();
27
- }
28
- }, Symbol.asyncIterator, function () {
29
- return this;
30
- });
31
- }
32
- /* c8 ignore start */
33
-
34
-
35
- function readerIterator(reader) {
36
- return _defineProperty({
37
- next: function next() {
38
- return reader.read();
39
- }
40
- }, Symbol.asyncIterator, function () {
41
- return this;
42
- });
43
- }
44
-
45
- function promiseIterator(promise) {
46
- var resolved = false;
47
- return _defineProperty({
48
- next: function next() {
49
- if (resolved) return Promise.resolve({
50
- value: undefined,
51
- done: true
52
- });
53
- resolved = true;
54
- return new Promise(function (resolve, reject) {
55
- promise.then(function (value) {
56
- resolve({
57
- value: value,
58
- done: false
21
+ var hasIterator$3 = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
22
+ /* c8 ignore start */
23
+ function nodeStreamIterator(stream) {
24
+ var cleanup = null;
25
+ var error = null;
26
+ var done = false;
27
+ var data = [];
28
+ var waiting = [];
29
+ function onData(chunk) {
30
+ if (error)
31
+ return;
32
+ if (waiting.length)
33
+ return waiting.shift()[0]({ value: chunk, done: false });
34
+ data.push(chunk);
35
+ }
36
+ function onError(err) {
37
+ error = err;
38
+ var all = waiting.slice();
39
+ all.forEach(function (pair) {
40
+ pair[1](err);
59
41
  });
60
- })["catch"](reject);
61
- });
62
- }
63
- }, Symbol.asyncIterator, function () {
64
- return this;
65
- });
66
- }
67
- /* c8 ignore stop */
68
-
69
- /**
70
- * @param response A response. Supports fetch, node-fetch, and cross-fetch
71
- */
72
-
73
-
74
- function responseIterator(response) {
75
- if (response === undefined) throw new Error("Missing response for responseIterator"); // determine the body
76
-
77
- var body = response;
78
- if (response.body) body = response.body; // node-fetch, browser fetch, undici
79
- else if (response.data) body = response.data; // axios
42
+ !cleanup || cleanup();
43
+ }
44
+ function onEnd() {
45
+ done = true;
46
+ var all = waiting.slice();
47
+ all.forEach(function (pair) {
48
+ pair[0]({ value: undefined, done: true });
49
+ });
50
+ !cleanup || cleanup();
51
+ }
52
+ cleanup = function () {
53
+ cleanup = null;
54
+ stream.removeListener('data', onData);
55
+ stream.removeListener('error', onError);
56
+ stream.removeListener('end', onEnd);
57
+ stream.removeListener('finish', onEnd);
58
+ stream.removeListener('close', onEnd);
59
+ };
60
+ stream.on('data', onData);
61
+ stream.on('error', onError);
62
+ stream.on('end', onEnd);
63
+ stream.on('finish', onEnd);
64
+ stream.on('close', onEnd);
65
+ function getNext() {
66
+ return new Promise(function (resolve, reject) {
67
+ if (error)
68
+ return reject(error);
69
+ if (data.length)
70
+ return resolve({ value: data.shift(), done: false });
71
+ if (done)
72
+ return resolve({ value: undefined, done: true });
73
+ waiting.push([resolve, reject]);
74
+ });
75
+ }
76
+ var iterator = {
77
+ next: function () {
78
+ return getNext();
79
+ },
80
+ };
81
+ if (hasIterator$3) {
82
+ iterator[Symbol.asyncIterator] = function () {
83
+ return this;
84
+ };
85
+ }
86
+ return iterator;
87
+ }
88
+ /* c8 ignore stop */
80
89
 
90
+ var hasIterator$2 = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
81
91
  /* c8 ignore start */
82
- else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
83
-
92
+ function promiseIterator(promise) {
93
+ var resolved = false;
94
+ var iterator = {
95
+ next: function () {
96
+ if (resolved)
97
+ return Promise.resolve({ value: undefined, done: true });
98
+ resolved = true;
99
+ return new Promise(function (resolve, reject) {
100
+ promise
101
+ .then(function (value) {
102
+ resolve({ value: value, done: false });
103
+ })
104
+ .catch(reject);
105
+ });
106
+ },
107
+ };
108
+ if (hasIterator$2) {
109
+ iterator[Symbol.asyncIterator] = function () {
110
+ return this;
111
+ };
112
+ }
113
+ return iterator;
114
+ }
84
115
  /* c8 ignore stop */
85
- // adapt the body
86
116
 
87
- if (body[Symbol.asyncIterator]) return streamIterator(body);
117
+ var hasIterator$1 = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
88
118
  /* c8 ignore start */
89
-
90
- if (body.getReader) return readerIterator(body.getReader());
91
- if (body.stream) return readerIterator(body.stream().getReader());
92
- if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
119
+ function readerIterator(reader) {
120
+ var iterator = {
121
+ next: function () {
122
+ return reader.read();
123
+ },
124
+ };
125
+ if (hasIterator$1) {
126
+ iterator[Symbol.asyncIterator] = function () {
127
+ return this;
128
+ };
129
+ }
130
+ return iterator;
131
+ }
93
132
  /* c8 ignore stop */
94
133
 
95
- throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
96
- }
134
+ var hasIterator = typeof Symbol !== 'undefined' && Symbol.asyncIterator;
135
+ /**
136
+ * @param response A response. Supports fetch, node-fetch, and cross-fetch
137
+ */
138
+ function responseIterator(response) {
139
+ if (response === undefined)
140
+ throw new Error('Missing response for responseIterator');
141
+ // determine the body
142
+ var body = response;
143
+ if (response.body)
144
+ body = response.body;
145
+ // node-fetch, browser fetch, undici
146
+ else if (response.data)
147
+ body = response.data;
148
+ // axios
149
+ /* c8 ignore start */ else if (response._bodyBlob)
150
+ body = response._bodyBlob; // cross-fetch
151
+ /* c8 ignore stop */
152
+ // adapt the body
153
+ if (hasIterator && body[Symbol.asyncIterator])
154
+ return asyncIterator(body);
155
+ /* c8 ignore start */
156
+ if (body.getReader)
157
+ return readerIterator(body.getReader());
158
+ if (body.stream)
159
+ return readerIterator(body.stream().getReader());
160
+ if (body.arrayBuffer)
161
+ return promiseIterator(body.arrayBuffer());
162
+ if (body.pipe)
163
+ return nodeStreamIterator(body);
164
+ /* c8 ignore stop */
165
+ throw new Error('Unknown body type for responseIterator. Maybe you are not passing a streamable response');
166
+ }
97
167
 
98
- return responseIterator;
168
+ return responseIterator;
99
169
 
100
170
  }));
101
171
  //# sourceMappingURL=response-iterator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-iterator.js","sources":["../../src/index.ts"],"sourcesContent":["import { AxiosResponse } from \"axios\";\nimport { Response as NodeResponse } from \"node-fetch\";\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\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 (body[Symbol.asyncIterator]) return streamIterator<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 /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator. Maybe you are not passing a streamable response\");\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","data","_bodyBlob","getReader","arrayBuffer"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAOA,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;;EAEA;EACA;EACA;;;EACe,SAASe,gBAAT,CAA6BC,QAA7B,EAA0E;EACvF,MAAIA,QAAQ,KAAKL,SAAjB,EAA4B,MAAM,IAAIM,KAAJ,CAAU,uCAAV,CAAN,CAD2D;;EAIvF,MAAIC,IAAa,GAAGF,QAApB;EACA,MAAKA,QAAD,CAA2BE,IAA/B,EAAqCA,IAAI,GAAIF,QAAD,CAA2BE,IAAlC,CAArC;EAAA,OAEK,IAAKF,QAAD,CAA4BG,IAAhC,EAAsCD,IAAI,GAAIF,QAAD,CAA4BG,IAAnC,CAAtC;;EAEL;EAFK,OAEsB,IAAKH,QAAD,CAAiCI,SAArC,EACzBF,IAAI,GAAIF,QAAD,CAAiCI,SAAxC,CAVqF;;EAWvF;EAEA;;EACA,MAAIF,IAAI,CAACnB,MAAM,CAACC,aAAR,CAAR,EAAgC,OAAOJ,cAAc,CAAIsB,IAAJ,CAArB;EAChC;;EACA,MAAKA,IAAD,CAA4BG,SAAhC,EAA2C,OAAOnB,cAAc,CAAKgB,IAAD,CAA4BG,SAA5B,EAAJ,CAArB;EAC3C,MAAKH,IAAD,CAAerB,MAAnB,EACE,OAAOK,cAAc,CAAMgB,IAAD,CAAerB,MAAf,EAAD,CAA0DwB,SAA1D,EAAJ,CAArB;EACF,MAAKH,IAAD,CAAeI,WAAnB,EAAgC,OAAOjB,eAAe,CAAKa,IAAD,CAAeI,WAAf,EAAJ,CAAtB;EAChC;;EAEA,QAAM,IAAIL,KAAJ,CAAU,yFAAV,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":[null,null,null,null,null],"names":["hasIterator"],"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,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function r(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");var t,o,a,i=n;if(n.body?i=n.body:n.data?i=n.data:n._bodyBlob&&(i=n._bodyBlob),i[Symbol.asyncIterator])return t=i[Symbol.asyncIterator](),e({next:function(){return t.next()}},Symbol.asyncIterator,(function(){return this}));if(i.getReader)return r(i.getReader());if(i.stream)return r(i.stream().getReader());if(i.arrayBuffer)return o=i.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}));throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response")}}));
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";var e="undefined"!=typeof Symbol&&Symbol.asyncIterator;function n(n){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,n.removeListener("data",u),n.removeListener("error",f),n.removeListener("end",s),n.removeListener("finish",s),n.removeListener("close",s)},n.on("data",u),n.on("error",f),n.on("end",s),n.on("finish",s),n.on("close",s);var d={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 e&&(d[Symbol.asyncIterator]=function(){return this}),d}var r="undefined"!=typeof Symbol&&Symbol.asyncIterator;var o="undefined"!=typeof Symbol&&Symbol.asyncIterator;function t(e){var n={next:function(){return e.read()}};return o&&(n[Symbol.asyncIterator]=function(){return this}),n}var i="undefined"!=typeof Symbol&&Symbol.asyncIterator;return function(e){if(void 0===e)throw new Error("Missing response for responseIterator");var o,a,u=e;if(e.body?u=e.body:e.data?u=e.data:e._bodyBlob&&(u=e._bodyBlob),i&&u[Symbol.asyncIterator])return a=u[Symbol.asyncIterator](),(o={next:function(){return a.next()}})[Symbol.asyncIterator]=function(){return this},o;if(u.getReader)return t(u.getReader());if(u.stream)return t(u.stream().getReader());if(u.arrayBuffer)return function(e){var n=!1,o={next:function(){return n?Promise.resolve({value:void 0,done:!0}):(n=!0,new Promise((function(n,r){e.then((function(e){n({value:e,done:!1})})).catch(r)})))}};return r&&(o[Symbol.asyncIterator]=function(){return this}),o}(u.arrayBuffer());if(u.pipe)return n(u);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 NodeResponse } from \"node-fetch\";\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\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 (body[Symbol.asyncIterator]) return streamIterator<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 /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator. Maybe you are not passing a streamable response\");\n}\n"],"names":["readerIterator","reader","next","read","Symbol","asyncIterator","this","response","undefined","Error","iterator","promise","resolved","body","data","_bodyBlob","getReader","stream","arrayBuffer","Promise","resolve","value","done","reject","then"],"mappings":"yWAoBA,SAASA,EAAkBC,aAEvBC,uBACSD,EAAOE,SAEfC,OAAOC,iCACCC,eA6BE,SAA6BC,WACzBC,IAAbD,EAAwB,MAAM,IAAIE,MAAM,6CAhDtCC,EAuBoBC,EACtBC,EA2BAC,EAAgBN,KACfA,EAA0BM,KAAMA,EAAQN,EAA0BM,KAE7DN,EAA2BO,KAAMD,EAAQN,EAA2BO,KAE9CP,EAAgCQ,YAC9DF,EAAQN,EAAgCQ,WAItCF,EAAKT,OAAOC,eAAgB,OA7D1BK,EA6DmDG,EA7DjCT,OAAOC,oBAE7BH,uBACSQ,EAASR,SAEjBE,OAAOC,iCACCC,WAyDNO,EAA2BG,UAAW,OAAOhB,EAAmBa,EAA2BG,gBAC3FH,EAAcI,OACjB,OAAOjB,EAAoBa,EAAcI,SAA0CD,gBAChFH,EAAcK,YAAa,OA3CNP,EA2CiCE,EAAcK,cA1CrEN,GAAW,KAEbV,uBACMU,EAAiBO,QAAQC,QAAQ,CAAEC,WAAOb,EAAWc,MAAM,KAC/DV,GAAW,EACJ,IAAIO,SAAQ,SAAUC,EAASG,GACpCZ,EACGa,MAAK,SAAUH,GACdD,EAAQ,CAAEC,MAAAA,EAAOC,MAAM,aAElBC,SAGZnB,OAAOC,iCACCC,cA+BL,IAAIG,MAAM"}
1
+ {"version":3,"file":"response-iterator.min.js","sources":["../../src/iterators/nodeStream.ts","../../src/iterators/promise.ts","../../src/iterators/reader.ts","../../src/index.ts","../../src/iterators/async.ts"],"sourcesContent":[null,null,null,null,null],"names":["hasIterator","Symbol","asyncIterator","nodeStreamIterator","stream","cleanup","error","done","data","waiting","onData","chunk","length","shift","value","push","onError","err","slice","forEach","pair","onEnd","undefined","removeListener","on","iterator","next","Promise","resolve","reject","this","readerIterator","reader","read","response","Error","body","_bodyBlob","_a","getReader","arrayBuffer","promise","resolved","then","catch","promiseIterator","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.1",
4
+ "version": "0.2.4",
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,30 @@
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": "^5.0.0",
73
- "@typescript-eslint/parser": "^5.0.0",
74
- "allow-require-me": "^1.0.0",
75
- "axios": "^0.23.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": "8.0.1",
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.3.0",
107
- "typedoc": "^0.22.5",
108
- "typedoc-plugin-rename-defaults": "^0.4.0",
109
- "typescript": "^4.4.4",
110
- "undici": "^4.7.2",
111
- "webpack": "^5.58.2"
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.3.3",
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/types/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
+ "source": "src/index.ts",
80
+ "types": "dist/types/index.d.ts",
130
81
  "unpkg": "dist/umd/response-iterator.js"
131
82
  }
package/dist/esm/index.js DELETED
@@ -1,87 +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
- * @param response A response. Supports fetch, node-fetch, and cross-fetch
59
- */
60
-
61
-
62
- function responseIterator(response) {
63
- if (response === undefined) throw new Error("Missing response for responseIterator"); // determine the body
64
-
65
- let body = response;
66
- if (response.body) body = response.body; // node-fetch, browser fetch, undici
67
- else if (response.data) body = response.data; // axios
68
-
69
- /* c8 ignore start */
70
- else if (response._bodyBlob) body = response._bodyBlob; // cross-fetch
71
-
72
- /* c8 ignore stop */
73
- // adapt the body
74
-
75
- if (body[Symbol.asyncIterator]) return streamIterator(body);
76
- /* c8 ignore start */
77
-
78
- if (body.getReader) return readerIterator(body.getReader());
79
- if (body.stream) return readerIterator(body.stream().getReader());
80
- if (body.arrayBuffer) return promiseIterator(body.arrayBuffer());
81
- /* c8 ignore stop */
82
-
83
- throw new Error("Unknown body type for responseIterator. Maybe you are not passing a streamable response");
84
- }
85
-
86
- export { responseIterator as default };
87
- //# 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 NodeResponse } from \"node-fetch\";\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\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 (body[Symbol.asyncIterator]) return streamIterator<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 /* c8 ignore stop */\n\n throw new Error(\"Unknown body type for responseIterator. Maybe you are not passing a streamable response\");\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","data","_bodyBlob","getReader","arrayBuffer"],"mappings":"AAOA,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;;AAEA;AACA;AACA;;;AACe,SAASgB,gBAAT,CAA6BC,QAA7B,EAA0E;AACvF,MAAIA,QAAQ,KAAKN,SAAjB,EAA4B,MAAM,IAAIO,KAAJ,CAAU,uCAAV,CAAN,CAD2D;;AAIvF,MAAIC,IAAa,GAAGF,QAApB;AACA,MAAKA,QAAD,CAA2BE,IAA/B,EAAqCA,IAAI,GAAIF,QAAD,CAA2BE,IAAlC,CAArC;AAAA,OAEK,IAAKF,QAAD,CAA4BG,IAAhC,EAAsCD,IAAI,GAAIF,QAAD,CAA4BG,IAAnC,CAAtC;;AAEL;AAFK,OAEsB,IAAKH,QAAD,CAAiCI,SAArC,EACzBF,IAAI,GAAIF,QAAD,CAAiCI,SAAxC,CAVqF;;AAWvF;AAEA;;AACA,MAAIF,IAAI,CAACpB,MAAM,CAACC,aAAR,CAAR,EAAgC,OAAOJ,cAAc,CAAIuB,IAAJ,CAArB;AAChC;;AACA,MAAKA,IAAD,CAA4BG,SAAhC,EAA2C,OAAOpB,cAAc,CAAKiB,IAAD,CAA4BG,SAA5B,EAAJ,CAArB;AAC3C,MAAKH,IAAD,CAAetB,MAAnB,EACE,OAAOK,cAAc,CAAMiB,IAAD,CAAetB,MAAf,EAAD,CAA0DyB,SAA1D,EAAJ,CAArB;AACF,MAAKH,IAAD,CAAeI,WAAnB,EAAgC,OAAOlB,eAAe,CAAKc,IAAD,CAAeI,WAAf,EAAJ,CAAtB;AAChC;;AAEA,QAAM,IAAIL,KAAJ,CAAU,yFAAV,CAAN;AACD;;;;"}