@speckle/objectloader2
Version:
This is an updated objectloader for the Speckle viewer written in typescript
36 lines • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class AsyncGeneratorQueue {
#buffer = [];
#resolveQueue = [];
#finished = false;
add(value) {
if (this.#resolveQueue.length > 0) {
// If there's a pending consumer, resolve immediately
const resolve = this.#resolveQueue.shift();
resolve(value);
}
else {
// Otherwise, add to the buffer
this.#buffer.push(value);
}
}
async *consume() {
while (!this.#finished ||
this.#resolveQueue.length > 0 ||
this.#buffer.length > 0) {
if (this.#buffer.length > 0) {
yield this.#buffer.shift(); // Yield available values
}
else {
yield await new Promise((resolve) => this.#resolveQueue.push(resolve));
}
}
}
disposeAsync() {
this.#finished = true;
return Promise.resolve();
}
}
exports.default = AsyncGeneratorQueue;
//# sourceMappingURL=asyncGeneratorQueue.js.map