UNPKG

ai-utils.js

Version:

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

67 lines (66 loc) 1.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AsyncQueue = void 0; /** * @internal */ 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)); } }, }; } } exports.AsyncQueue = AsyncQueue;