UNPKG

2.37 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var iterall_1 = require("iterall");
4function eventEmitterAsyncIterator(eventEmitter, eventsNames) {
5 var pullQueue = [];
6 var pushQueue = [];
7 var eventsArray = typeof eventsNames === 'string' ? [eventsNames] : eventsNames;
8 var listening = true;
9 var pushValue = function (event) {
10 if (pullQueue.length !== 0) {
11 pullQueue.shift()({ value: event, done: false });
12 }
13 else {
14 pushQueue.push(event);
15 }
16 };
17 var pullValue = function () {
18 return new Promise(function (resolve) {
19 if (pushQueue.length !== 0) {
20 resolve({ value: pushQueue.shift(), done: false });
21 }
22 else {
23 pullQueue.push(resolve);
24 }
25 });
26 };
27 var emptyQueue = function () {
28 if (listening) {
29 listening = false;
30 removeEventListeners();
31 pullQueue.forEach(function (resolve) { return resolve({ value: undefined, done: true }); });
32 pullQueue.length = 0;
33 pushQueue.length = 0;
34 }
35 };
36 var addEventListeners = function () {
37 for (var _i = 0, eventsArray_1 = eventsArray; _i < eventsArray_1.length; _i++) {
38 var eventName = eventsArray_1[_i];
39 eventEmitter.addListener(eventName, pushValue);
40 }
41 };
42 var removeEventListeners = function () {
43 for (var _i = 0, eventsArray_2 = eventsArray; _i < eventsArray_2.length; _i++) {
44 var eventName = eventsArray_2[_i];
45 eventEmitter.removeListener(eventName, pushValue);
46 }
47 };
48 addEventListeners();
49 return _a = {
50 next: function () {
51 return listening ? pullValue() : this.return();
52 },
53 return: function () {
54 emptyQueue();
55 return Promise.resolve({ value: undefined, done: true });
56 },
57 throw: function (error) {
58 emptyQueue();
59 return Promise.reject(error);
60 }
61 },
62 _a[iterall_1.$$asyncIterator] = function () {
63 return this;
64 },
65 _a;
66 var _a;
67}
68exports.eventEmitterAsyncIterator = eventEmitterAsyncIterator;
69//# sourceMappingURL=event-emitter-to-async-iterator.js.map
\No newline at end of file