UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

42 lines (41 loc) • 1.01 kB
export class PushQueue { buffer = []; waiters = []; closed = false; push(value) { if (this.closed) { return false; } const waiter = this.waiters.shift(); if (waiter) { waiter({ value, done: false }); } else { this.buffer.push(value); } return true; } close() { this.closed = true; while (this.waiters.length > 0) { this.waiters.shift()({ value: undefined, done: true }); } } async *[Symbol.asyncIterator]() { for (;;) { if (this.buffer.length > 0) { yield this.buffer.shift(); } else if (this.closed) { return; } else { const r = await new Promise((resolve) => this.waiters.push(resolve)); if (r.done) { return; } yield r.value; } } } }