12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- "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;
|