stream-utils.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.ReadableStreamToAsyncIterable = void 0;
  4. /**
  5. * Most browsers don't yet have async iterable support for ReadableStream,
  6. * and Node has a very different way of reading bytes from its "ReadableStream".
  7. *
  8. * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
  9. */
  10. function ReadableStreamToAsyncIterable(stream) {
  11. if (stream[Symbol.asyncIterator])
  12. return stream;
  13. const reader = stream.getReader();
  14. return {
  15. async next() {
  16. try {
  17. const result = await reader.read();
  18. if (result?.done)
  19. reader.releaseLock(); // release lock when stream becomes closed
  20. return result;
  21. }
  22. catch (e) {
  23. reader.releaseLock(); // release lock when stream becomes errored
  24. throw e;
  25. }
  26. },
  27. async return() {
  28. const cancelPromise = reader.cancel();
  29. reader.releaseLock();
  30. await cancelPromise;
  31. return { done: true, value: undefined };
  32. },
  33. [Symbol.asyncIterator]() {
  34. return this;
  35. },
  36. };
  37. }
  38. exports.ReadableStreamToAsyncIterable = ReadableStreamToAsyncIterable;
  39. //# sourceMappingURL=stream-utils.js.map