ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
67 lines (66 loc) • 1.85 kB
JavaScript
;
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;