UNPKG

assistant-stream

Version:

Streaming utilities for AI assistants

70 lines (69 loc) • 1.53 kB
// src/utils/AsyncIterableStream.ts function streamIteratorPolyfill() { const reader = this.getReader(); let finished = false; let ongoing = Promise.resolve(); const enqueue = (operation) => { const result = ongoing.then(operation); ongoing = result.then(() => void 0, () => void 0); return result; }; const cancel = async (reason) => { if (finished) return; finished = true; try { return reader.cancel(reason); } finally { reader.releaseLock(); } }; const iterator = { next: () => enqueue(async () => { if (finished) return { done: true, value: void 0 }; try { const result = await reader.read(); if (result.done) { finished = true; reader.releaseLock(); } return result; } catch (error) { finished = true; reader.releaseLock(); throw error; } }), return: (value) => enqueue(async () => { await cancel(value); return { done: true, value }; }), throw: (error) => enqueue(async () => { await cancel(void 0); throw error; }), [Symbol.asyncIterator]() { return this; } }; const asyncDispose = Symbol.asyncDispose; if (asyncDispose) Object.defineProperty(iterator, asyncDispose, { value: async () => { await iterator.return(); }, writable: true, configurable: true }); return iterator; } function asAsyncIterableStream(source) { source[Symbol.asyncIterator] ??= streamIteratorPolyfill; return source; } export { asAsyncIterableStream }; //# sourceMappingURL=AsyncIterableStream.js.map