shims.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. "use strict";
  2. // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. exports.getDefaultFetch = getDefaultFetch;
  5. exports.makeReadableStream = makeReadableStream;
  6. exports.ReadableStreamFrom = ReadableStreamFrom;
  7. exports.ReadableStreamToAsyncIterable = ReadableStreamToAsyncIterable;
  8. exports.CancelReadableStream = CancelReadableStream;
  9. function getDefaultFetch() {
  10. if (typeof fetch !== 'undefined') {
  11. return fetch;
  12. }
  13. throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');
  14. }
  15. function makeReadableStream(...args) {
  16. const ReadableStream = globalThis.ReadableStream;
  17. if (typeof ReadableStream === 'undefined') {
  18. // Note: All of the platforms / runtimes we officially support already define
  19. // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.
  20. throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');
  21. }
  22. return new ReadableStream(...args);
  23. }
  24. function ReadableStreamFrom(iterable) {
  25. let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
  26. return makeReadableStream({
  27. start() { },
  28. async pull(controller) {
  29. const { done, value } = await iter.next();
  30. if (done) {
  31. controller.close();
  32. }
  33. else {
  34. controller.enqueue(value);
  35. }
  36. },
  37. async cancel() {
  38. await iter.return?.();
  39. },
  40. });
  41. }
  42. /**
  43. * Most browsers don't yet have async iterable support for ReadableStream,
  44. * and Node has a very different way of reading bytes from its "ReadableStream".
  45. *
  46. * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
  47. */
  48. function ReadableStreamToAsyncIterable(stream) {
  49. if (stream[Symbol.asyncIterator])
  50. return stream;
  51. const reader = stream.getReader();
  52. return {
  53. async next() {
  54. try {
  55. const result = await reader.read();
  56. if (result?.done)
  57. reader.releaseLock(); // release lock when stream becomes closed
  58. return result;
  59. }
  60. catch (e) {
  61. reader.releaseLock(); // release lock when stream becomes errored
  62. throw e;
  63. }
  64. },
  65. async return() {
  66. const cancelPromise = reader.cancel();
  67. reader.releaseLock();
  68. await cancelPromise;
  69. return { done: true, value: undefined };
  70. },
  71. [Symbol.asyncIterator]() {
  72. return this;
  73. },
  74. };
  75. }
  76. /**
  77. * Cancels a ReadableStream we don't need to consume.
  78. * See https://undici.nodejs.org/#/?id=garbage-collection
  79. */
  80. async function CancelReadableStream(stream) {
  81. if (stream === null || typeof stream !== 'object')
  82. return;
  83. if (stream[Symbol.asyncIterator]) {
  84. await stream[Symbol.asyncIterator]().return?.();
  85. return;
  86. }
  87. const reader = stream.getReader();
  88. const cancelPromise = reader.cancel();
  89. reader.releaseLock();
  90. await cancelPromise;
  91. }
  92. //# sourceMappingURL=shims.js.map