node-ejs-renderer/node_modules/thingies/lib/TimedQueue.js

56 lines
1.4 KiB
JavaScript
Raw Normal View History

2024-06-09 13:55:01 -04:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TimedQueue = void 0;
/**
* Queue that is flushed automatically when it reaches some item limit
* or when timeout is reached.
*/
class TimedQueue {
constructor() {
/**
* Queue will be flushed when it reaches this number of items.
*/
this.itemLimit = 100;
/**
* Queue will be flushed after this many milliseconds.
*/
this.timeLimit = 5000;
/**
* Method that will be called when queue is flushed.
*/
this.onFlush = (list) => { };
this.list = [];
this.timer = null;
}
push(item) {
this.list.push(item);
if (this.list.length >= this.itemLimit) {
this.flush();
return;
}
if (!this.timer) {
this.timer = setTimeout(() => {
this.flush();
}, this.timeLimit);
}
}
flush() {
const list = this.list;
this.list = [];
if (this.timer)
clearTimeout(this.timer);
this.timer = null;
if (list.length) {
try {
this.onFlush(list);
}
catch (error) {
// tslint:disable-next-line
console.error('TimedQueue', error);
}
}
return list;
}
}
exports.TimedQueue = TimedQueue;