UNPKG

ai-utils.js

Version:

Build AI applications, chatbots, and agents with JavaScript and TypeScript.

63 lines (62 loc) 1.71 kB
/** * @internal */ export class AsyncQueue { constructor() { Object.defineProperty(this, "queue", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "resolvers", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "closed", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.queue = []; this.resolvers = []; this.closed = false; } push(value) { if (this.closed) { throw new Error("Pushing to a closed queue"); } const resolve = this.resolvers.shift(); if (resolve) { resolve({ value, done: false }); } else { this.queue.push(value); } } close() { while (this.resolvers.length) { const resolve = this.resolvers.shift(); resolve?.({ value: undefined, done: true }); } this.closed = true; } [Symbol.asyncIterator]() { return { next: () => { if (this.queue.length > 0) { return Promise.resolve({ value: this.queue.shift(), done: false }); } else if (this.closed) { return Promise.resolve({ value: undefined, done: true }); } else { return new Promise((resolve) => this.resolvers.push(resolve)); } }, }; } }