UNPKG

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