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
 |