92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.getDefaultFetch = getDefaultFetch;
 | |
| exports.makeReadableStream = makeReadableStream;
 | |
| exports.ReadableStreamFrom = ReadableStreamFrom;
 | |
| exports.ReadableStreamToAsyncIterable = ReadableStreamToAsyncIterable;
 | |
| exports.CancelReadableStream = CancelReadableStream;
 | |
| function getDefaultFetch() {
 | |
|     if (typeof fetch !== 'undefined') {
 | |
|         return fetch;
 | |
|     }
 | |
|     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`');
 | |
| }
 | |
| function makeReadableStream(...args) {
 | |
|     const ReadableStream = globalThis.ReadableStream;
 | |
|     if (typeof ReadableStream === 'undefined') {
 | |
|         // Note: All of the platforms / runtimes we officially support already define
 | |
|         // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.
 | |
|         throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');
 | |
|     }
 | |
|     return new ReadableStream(...args);
 | |
| }
 | |
| function ReadableStreamFrom(iterable) {
 | |
|     let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
 | |
|     return makeReadableStream({
 | |
|         start() { },
 | |
|         async pull(controller) {
 | |
|             const { done, value } = await iter.next();
 | |
|             if (done) {
 | |
|                 controller.close();
 | |
|             }
 | |
|             else {
 | |
|                 controller.enqueue(value);
 | |
|             }
 | |
|         },
 | |
|         async cancel() {
 | |
|             await iter.return?.();
 | |
|         },
 | |
|     });
 | |
| }
 | |
| /**
 | |
|  * Most browsers don't yet have async iterable support for ReadableStream,
 | |
|  * and Node has a very different way of reading bytes from its "ReadableStream".
 | |
|  *
 | |
|  * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
 | |
|  */
 | |
| function ReadableStreamToAsyncIterable(stream) {
 | |
|     if (stream[Symbol.asyncIterator])
 | |
|         return stream;
 | |
|     const reader = stream.getReader();
 | |
|     return {
 | |
|         async next() {
 | |
|             try {
 | |
|                 const result = await reader.read();
 | |
|                 if (result?.done)
 | |
|                     reader.releaseLock(); // release lock when stream becomes closed
 | |
|                 return result;
 | |
|             }
 | |
|             catch (e) {
 | |
|                 reader.releaseLock(); // release lock when stream becomes errored
 | |
|                 throw e;
 | |
|             }
 | |
|         },
 | |
|         async return() {
 | |
|             const cancelPromise = reader.cancel();
 | |
|             reader.releaseLock();
 | |
|             await cancelPromise;
 | |
|             return { done: true, value: undefined };
 | |
|         },
 | |
|         [Symbol.asyncIterator]() {
 | |
|             return this;
 | |
|         },
 | |
|     };
 | |
| }
 | |
| /**
 | |
|  * Cancels a ReadableStream we don't need to consume.
 | |
|  * See https://undici.nodejs.org/#/?id=garbage-collection
 | |
|  */
 | |
| async function CancelReadableStream(stream) {
 | |
|     if (stream === null || typeof stream !== 'object')
 | |
|         return;
 | |
|     if (stream[Symbol.asyncIterator]) {
 | |
|         await stream[Symbol.asyncIterator]().return?.();
 | |
|         return;
 | |
|     }
 | |
|     const reader = stream.getReader();
 | |
|     const cancelPromise = reader.cancel();
 | |
|     reader.releaseLock();
 | |
|     await cancelPromise;
 | |
| }
 | |
| //# sourceMappingURL=shims.js.map
 |