UNPKG

1.77 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.Queue = void 0;
9
10var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
12/**
13 * A simple queue with optional priority.
14 */
15class Queue extends Object {
16 /**
17 * Queue data.
18 */
19 constructor() {
20 super();
21 (0, _defineProperty2.default)(this, "_queue_", []);
22 }
23 /**
24 * Get size of queue.
25 *
26 * @returns Total callbacks in queue.
27 */
28
29
30 get size() {
31 return this._queue_.length;
32 }
33 /**
34 * Clear queue.
35 */
36
37
38 clear() {
39 this._queue_ = [];
40 }
41 /**
42 * Enqueue callback.
43 *
44 * @param handler Callback function.
45 * @param priority Callback priority.
46 */
47
48
49 push(handler, priority = 0) {
50 const queue = this._queue_;
51 let index = 0;
52
53 for (let i = queue.length; i--;) {
54 if (queue[i].priority < priority) {
55 index = i + 1;
56 break;
57 }
58 }
59
60 queue.splice(index, 0, {
61 priority,
62 handler
63 });
64 }
65 /**
66 * Pop callback off queue.
67 *
68 * @returns Callback function or null if empty.
69 */
70
71
72 pop() {
73 const entry = this._queue_.pop();
74
75 return entry ? entry.handler : null;
76 }
77 /**
78 * Shift callback off queue.
79 *
80 * @returns Callback function or null if empty.
81 */
82
83
84 shift() {
85 const entry = this._queue_.shift();
86
87 return entry ? entry.handler : null;
88 }
89 /**
90 * Run queue.
91 */
92
93
94 async run() {
95 for (;;) {
96 const entry = this.pop();
97
98 if (!entry) {
99 break;
100 } // eslint-disable-next-line no-await-in-loop
101
102
103 await entry();
104 }
105 }
106
107}
108
109exports.Queue = Queue;
110//# sourceMappingURL=queue.js.map