shims.mjs 3.1 KB

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