@sapphire/event-iterator 1.7.3-next.f83936db.0 → 1.7.3-next.fc35dd86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/cjs/index.cjs +21 -44
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.mjs +21 -44
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
**Turns event emitter events into async iterators.**
|
|
8
8
|
|
|
9
9
|
[](https://github.com/sapphiredev/utilities/blob/main/LICENSE.md)
|
|
10
|
-
[](https://codecov.io/gh/sapphiredev/utilities)
|
|
11
10
|
[](https://bundlephobia.com/result?p=@sapphire/event-iterator)
|
|
12
11
|
[](https://www.npmjs.com/package/@sapphire/event-iterator)
|
|
13
12
|
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,30 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
|
+
var __typeError = (msg) => {
|
|
5
|
+
throw TypeError(msg);
|
|
6
|
+
};
|
|
4
7
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
8
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
var __publicField = (obj, key, value) =>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var
|
|
11
|
-
if (!member.has(obj))
|
|
12
|
-
throw TypeError("Cannot " + msg);
|
|
13
|
-
};
|
|
14
|
-
var __privateGet = (obj, member, getter) => {
|
|
15
|
-
__accessCheck(obj, member, "read from private field");
|
|
16
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
17
|
-
};
|
|
18
|
-
var __privateAdd = (obj, member, value) => {
|
|
19
|
-
if (member.has(obj))
|
|
20
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
21
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
22
|
-
};
|
|
23
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
24
|
-
__accessCheck(obj, member, "write to private field");
|
|
25
|
-
member.set(obj, value);
|
|
26
|
-
return value;
|
|
27
|
-
};
|
|
9
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
10
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
11
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
12
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
13
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
28
14
|
var __privateWrapper = (obj, member, setter, getter) => ({
|
|
29
15
|
set _(value) {
|
|
30
16
|
__privateSet(obj, member, value);
|
|
@@ -62,7 +48,7 @@ var _EventIterator = class _EventIterator {
|
|
|
62
48
|
/**
|
|
63
49
|
* The amount of idle time in ms before moving on.
|
|
64
50
|
*/
|
|
65
|
-
__privateAdd(this, _idle
|
|
51
|
+
__privateAdd(this, _idle);
|
|
66
52
|
/**
|
|
67
53
|
* The queue of received values.
|
|
68
54
|
*/
|
|
@@ -74,7 +60,7 @@ var _EventIterator = class _EventIterator {
|
|
|
74
60
|
/**
|
|
75
61
|
* The limit before ending the EventIterator.
|
|
76
62
|
*/
|
|
77
|
-
__privateAdd(this, _limit
|
|
63
|
+
__privateAdd(this, _limit);
|
|
78
64
|
/**
|
|
79
65
|
* The timer to track when this will idle out.
|
|
80
66
|
*/
|
|
@@ -82,18 +68,16 @@ var _EventIterator = class _EventIterator {
|
|
|
82
68
|
/**
|
|
83
69
|
* The push handler with context bound to the instance.
|
|
84
70
|
*/
|
|
85
|
-
__privateAdd(this, _push
|
|
71
|
+
__privateAdd(this, _push);
|
|
86
72
|
this.emitter = emitter;
|
|
87
73
|
this.event = event;
|
|
88
74
|
__privateSet(this, _limit, options.limit ?? Infinity);
|
|
89
75
|
__privateSet(this, _idle, options.idle);
|
|
90
76
|
this.filter = options.filter ?? (() => true);
|
|
91
|
-
if (__privateGet(this, _idle))
|
|
92
|
-
__privateSet(this, _idleTimer, setTimeout(this.end.bind(this), __privateGet(this, _idle)));
|
|
77
|
+
if (__privateGet(this, _idle)) __privateSet(this, _idleTimer, setTimeout(this.end.bind(this), __privateGet(this, _idle)));
|
|
93
78
|
__privateSet(this, _push, this.push.bind(this));
|
|
94
79
|
const maxListeners = this.emitter.getMaxListeners();
|
|
95
|
-
if (maxListeners !== 0)
|
|
96
|
-
this.emitter.setMaxListeners(maxListeners + 1);
|
|
80
|
+
if (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners + 1);
|
|
97
81
|
this.emitter.on(this.event, __privateGet(this, _push));
|
|
98
82
|
}
|
|
99
83
|
/**
|
|
@@ -106,14 +90,12 @@ var _EventIterator = class _EventIterator {
|
|
|
106
90
|
* Ends the EventIterator.
|
|
107
91
|
*/
|
|
108
92
|
end() {
|
|
109
|
-
if (__privateGet(this, _ended))
|
|
110
|
-
return;
|
|
93
|
+
if (__privateGet(this, _ended)) return;
|
|
111
94
|
__privateSet(this, _ended, true);
|
|
112
95
|
__privateSet(this, _queue, []);
|
|
113
96
|
this.emitter.off(this.event, __privateGet(this, _push));
|
|
114
97
|
const maxListeners = this.emitter.getMaxListeners();
|
|
115
|
-
if (maxListeners !== 0)
|
|
116
|
-
this.emitter.setMaxListeners(maxListeners - 1);
|
|
98
|
+
if (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners - 1);
|
|
117
99
|
}
|
|
118
100
|
/**
|
|
119
101
|
* The next value that's received from the EventEmitter.
|
|
@@ -121,17 +103,13 @@ var _EventIterator = class _EventIterator {
|
|
|
121
103
|
async next() {
|
|
122
104
|
if (__privateGet(this, _queue).length) {
|
|
123
105
|
const value = __privateGet(this, _queue).shift();
|
|
124
|
-
if (!this.filter(value))
|
|
125
|
-
|
|
126
|
-
if (
|
|
127
|
-
this.end();
|
|
128
|
-
if (__privateGet(this, _idleTimer))
|
|
129
|
-
__privateGet(this, _idleTimer).refresh();
|
|
106
|
+
if (!this.filter(value)) return this.next();
|
|
107
|
+
if (++__privateWrapper(this, _passed)._ >= __privateGet(this, _limit)) this.end();
|
|
108
|
+
if (__privateGet(this, _idleTimer)) __privateGet(this, _idleTimer).refresh();
|
|
130
109
|
return { done: false, value };
|
|
131
110
|
}
|
|
132
111
|
if (__privateGet(this, _ended)) {
|
|
133
|
-
if (__privateGet(this, _idleTimer))
|
|
134
|
-
clearTimeout(__privateGet(this, _idleTimer));
|
|
112
|
+
if (__privateGet(this, _idleTimer)) clearTimeout(__privateGet(this, _idleTimer));
|
|
135
113
|
return { done: true, value: void 0 };
|
|
136
114
|
}
|
|
137
115
|
return new Promise((resolve) => {
|
|
@@ -143,8 +121,7 @@ var _EventIterator = class _EventIterator {
|
|
|
143
121
|
}, __privateGet(this, _idle));
|
|
144
122
|
}
|
|
145
123
|
this.emitter.once(this.event, () => {
|
|
146
|
-
if (idleTimer)
|
|
147
|
-
clearTimeout(idleTimer);
|
|
124
|
+
if (idleTimer) clearTimeout(idleTimer);
|
|
148
125
|
resolve(this.next());
|
|
149
126
|
});
|
|
150
127
|
});
|
|
@@ -187,5 +164,5 @@ __name(_EventIterator, "EventIterator");
|
|
|
187
164
|
var EventIterator = _EventIterator;
|
|
188
165
|
|
|
189
166
|
exports.EventIterator = EventIterator;
|
|
190
|
-
//# sourceMappingURL=
|
|
167
|
+
//# sourceMappingURL=index.cjs.map
|
|
191
168
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { EventEmitter } from 'node:events';\n\n/**\n * A filter for an EventIterator.\n */\nexport type EventIteratorFilter<V> = (value: V) => boolean;\n\n/**\n * Options to be passed to an EventIterator.\n */\nexport interface EventIteratorOptions<V> {\n\t/**\n\t * The filter.\n\t */\n\tfilter?: EventIteratorFilter<V>;\n\n\t/**\n\t * The timeout in ms before ending the EventIterator.\n\t */\n\tidle?: number;\n\n\t/**\n\t * The limit of events that pass the filter to iterate.\n\t */\n\tlimit?: number;\n}\n\n/**\n * An EventIterator, used for asynchronously iterating over received values.\n */\nexport class EventIterator<V extends unknown[]> implements AsyncIterableIterator<V> {\n\t/**\n\t * The emitter to listen to.\n\t */\n\tpublic readonly emitter: EventEmitter;\n\n\t/**\n\t * The event the event iterator is listening for to receive values from.\n\t */\n\tpublic readonly event: string;\n\n\t/**\n\t * The filter used to filter out values.\n\t */\n\tpublic filter: EventIteratorFilter<V>;\n\n\t/**\n\t * Whether or not the EventIterator has ended.\n\t */\n\t#ended = false;\n\n\t/**\n\t * The amount of idle time in ms before moving on.\n\t */\n\t#idle?: number;\n\n\t/**\n\t * The queue of received values.\n\t */\n\t#queue: V[] = [];\n\n\t/**\n\t * The amount of events that have passed the filter.\n\t */\n\t#passed = 0;\n\n\t/**\n\t * The limit before ending the EventIterator.\n\t */\n\t#limit: number;\n\n\t/**\n\t * The timer to track when this will idle out.\n\t */\n\t#idleTimer: NodeJS.Timeout | undefined | null = null;\n\n\t/**\n\t * The push handler with context bound to the instance.\n\t */\n\t#push: (this: EventIterator<V>, ...value: V) => void;\n\n\t/**\n\t * @param emitter The event emitter to listen to.\n\t * @param event The event we're listening for to receives values from.\n\t * @param options Any extra options.\n\t */\n\tpublic constructor(emitter: EventEmitter, event: string, options: EventIteratorOptions<V> = {}) {\n\t\tthis.emitter = emitter;\n\t\tthis.event = event;\n\t\tthis.#limit = options.limit ?? Infinity;\n\t\tthis.#idle = options.idle;\n\t\tthis.filter = options.filter ?? ((): boolean => true);\n\n\t\t// This timer is to idle out on lack of valid responses\n\t\tif (this.#idle) this.#idleTimer = setTimeout(this.end.bind(this), this.#idle);\n\n\t\tthis.#push = this.push.bind(this);\n\t\tconst maxListeners = this.emitter.getMaxListeners();\n\t\tif (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners + 1);\n\n\t\tthis.emitter.on(this.event, this.#push);\n\t}\n\n\t/**\n\t * Whether or not the EventIterator has ended.\n\t */\n\tpublic get ended(): boolean {\n\t\treturn this.#ended;\n\t}\n\n\t/**\n\t * Ends the EventIterator.\n\t */\n\tpublic end(): void {\n\t\tif (this.#ended) return;\n\t\tthis.#ended = true;\n\t\tthis.#queue = [];\n\n\t\tthis.emitter.off(this.event, this.#push);\n\t\tconst maxListeners = this.emitter.getMaxListeners();\n\t\tif (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners - 1);\n\t}\n\n\t/**\n\t * The next value that's received from the EventEmitter.\n\t */\n\tpublic async next(): Promise<IteratorResult<V>> {\n\t\t// If there are elements in the queue, return an undone response:\n\t\tif (this.#queue.length) {\n\t\t\tconst value = this.#queue.shift()!;\n\t\t\tif (!this.filter(value)) return this.next();\n\t\t\tif (++this.#passed >= this.#limit) this.end();\n\t\t\tif (this.#idleTimer) this.#idleTimer.refresh();\n\t\t\treturn { done: false, value };\n\t\t}\n\n\t\t// If the iterator ended, clean-up timer and return a done response:\n\t\tif (this.#ended) {\n\t\t\tif (this.#idleTimer) clearTimeout(this.#idleTimer);\n\t\t\treturn { done: true, value: undefined as never };\n\t\t}\n\n\t\t// Listen for a new element from the emitter:\n\t\treturn new Promise<IteratorResult<V>>((resolve) => {\n\t\t\tlet idleTimer: NodeJS.Timeout | undefined | null = null;\n\n\t\t\t// If there is an idle time set, we will create a temporary timer,\n\t\t\t// which will cause the iterator to end if no new elements are received:\n\t\t\tif (this.#idle) {\n\t\t\t\tidleTimer = setTimeout(() => {\n\t\t\t\t\tthis.end();\n\t\t\t\t\tresolve(this.next());\n\t\t\t\t}, this.#idle);\n\t\t\t}\n\n\t\t\t// Once it has received at least one value, we will clear the timer (if defined),\n\t\t\t// and resolve with the new value:\n\t\t\tthis.emitter.once(this.event, () => {\n\t\t\t\tif (idleTimer) clearTimeout(idleTimer);\n\t\t\t\tresolve(this.next());\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Handles what happens when you break or return from a loop.\n\t */\n\tpublic return(): Promise<IteratorResult<V>> {\n\t\tthis.end();\n\t\treturn Promise.resolve({ done: true, value: undefined as never });\n\t}\n\n\t/**\n\t * Handles what happens when you encounter an error in a loop.\n\t */\n\tpublic throw(): Promise<IteratorResult<V>> {\n\t\tthis.end();\n\t\treturn Promise.resolve({ done: true, value: undefined as never });\n\t}\n\n\t/**\n\t * The symbol allowing EventIterators to be used in for-await-of loops.\n\t */\n\tpublic [Symbol.asyncIterator](): AsyncIterableIterator<V> {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Pushes a value into the queue.\n\t */\n\tprotected push(...value: V): void {\n\t\tthis.#queue.push(value);\n\t}\n}\n"]}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,28 +1,14 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
2
5
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
6
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
-
var __publicField = (obj, key, value) =>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
if (!member.has(obj))
|
|
10
|
-
throw TypeError("Cannot " + msg);
|
|
11
|
-
};
|
|
12
|
-
var __privateGet = (obj, member, getter) => {
|
|
13
|
-
__accessCheck(obj, member, "read from private field");
|
|
14
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
15
|
-
};
|
|
16
|
-
var __privateAdd = (obj, member, value) => {
|
|
17
|
-
if (member.has(obj))
|
|
18
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
19
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
20
|
-
};
|
|
21
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
22
|
-
__accessCheck(obj, member, "write to private field");
|
|
23
|
-
member.set(obj, value);
|
|
24
|
-
return value;
|
|
25
|
-
};
|
|
7
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
9
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
10
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
11
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
26
12
|
var __privateWrapper = (obj, member, setter, getter) => ({
|
|
27
13
|
set _(value) {
|
|
28
14
|
__privateSet(obj, member, value);
|
|
@@ -60,7 +46,7 @@ var _EventIterator = class _EventIterator {
|
|
|
60
46
|
/**
|
|
61
47
|
* The amount of idle time in ms before moving on.
|
|
62
48
|
*/
|
|
63
|
-
__privateAdd(this, _idle
|
|
49
|
+
__privateAdd(this, _idle);
|
|
64
50
|
/**
|
|
65
51
|
* The queue of received values.
|
|
66
52
|
*/
|
|
@@ -72,7 +58,7 @@ var _EventIterator = class _EventIterator {
|
|
|
72
58
|
/**
|
|
73
59
|
* The limit before ending the EventIterator.
|
|
74
60
|
*/
|
|
75
|
-
__privateAdd(this, _limit
|
|
61
|
+
__privateAdd(this, _limit);
|
|
76
62
|
/**
|
|
77
63
|
* The timer to track when this will idle out.
|
|
78
64
|
*/
|
|
@@ -80,18 +66,16 @@ var _EventIterator = class _EventIterator {
|
|
|
80
66
|
/**
|
|
81
67
|
* The push handler with context bound to the instance.
|
|
82
68
|
*/
|
|
83
|
-
__privateAdd(this, _push
|
|
69
|
+
__privateAdd(this, _push);
|
|
84
70
|
this.emitter = emitter;
|
|
85
71
|
this.event = event;
|
|
86
72
|
__privateSet(this, _limit, options.limit ?? Infinity);
|
|
87
73
|
__privateSet(this, _idle, options.idle);
|
|
88
74
|
this.filter = options.filter ?? (() => true);
|
|
89
|
-
if (__privateGet(this, _idle))
|
|
90
|
-
__privateSet(this, _idleTimer, setTimeout(this.end.bind(this), __privateGet(this, _idle)));
|
|
75
|
+
if (__privateGet(this, _idle)) __privateSet(this, _idleTimer, setTimeout(this.end.bind(this), __privateGet(this, _idle)));
|
|
91
76
|
__privateSet(this, _push, this.push.bind(this));
|
|
92
77
|
const maxListeners = this.emitter.getMaxListeners();
|
|
93
|
-
if (maxListeners !== 0)
|
|
94
|
-
this.emitter.setMaxListeners(maxListeners + 1);
|
|
78
|
+
if (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners + 1);
|
|
95
79
|
this.emitter.on(this.event, __privateGet(this, _push));
|
|
96
80
|
}
|
|
97
81
|
/**
|
|
@@ -104,14 +88,12 @@ var _EventIterator = class _EventIterator {
|
|
|
104
88
|
* Ends the EventIterator.
|
|
105
89
|
*/
|
|
106
90
|
end() {
|
|
107
|
-
if (__privateGet(this, _ended))
|
|
108
|
-
return;
|
|
91
|
+
if (__privateGet(this, _ended)) return;
|
|
109
92
|
__privateSet(this, _ended, true);
|
|
110
93
|
__privateSet(this, _queue, []);
|
|
111
94
|
this.emitter.off(this.event, __privateGet(this, _push));
|
|
112
95
|
const maxListeners = this.emitter.getMaxListeners();
|
|
113
|
-
if (maxListeners !== 0)
|
|
114
|
-
this.emitter.setMaxListeners(maxListeners - 1);
|
|
96
|
+
if (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners - 1);
|
|
115
97
|
}
|
|
116
98
|
/**
|
|
117
99
|
* The next value that's received from the EventEmitter.
|
|
@@ -119,17 +101,13 @@ var _EventIterator = class _EventIterator {
|
|
|
119
101
|
async next() {
|
|
120
102
|
if (__privateGet(this, _queue).length) {
|
|
121
103
|
const value = __privateGet(this, _queue).shift();
|
|
122
|
-
if (!this.filter(value))
|
|
123
|
-
|
|
124
|
-
if (
|
|
125
|
-
this.end();
|
|
126
|
-
if (__privateGet(this, _idleTimer))
|
|
127
|
-
__privateGet(this, _idleTimer).refresh();
|
|
104
|
+
if (!this.filter(value)) return this.next();
|
|
105
|
+
if (++__privateWrapper(this, _passed)._ >= __privateGet(this, _limit)) this.end();
|
|
106
|
+
if (__privateGet(this, _idleTimer)) __privateGet(this, _idleTimer).refresh();
|
|
128
107
|
return { done: false, value };
|
|
129
108
|
}
|
|
130
109
|
if (__privateGet(this, _ended)) {
|
|
131
|
-
if (__privateGet(this, _idleTimer))
|
|
132
|
-
clearTimeout(__privateGet(this, _idleTimer));
|
|
110
|
+
if (__privateGet(this, _idleTimer)) clearTimeout(__privateGet(this, _idleTimer));
|
|
133
111
|
return { done: true, value: void 0 };
|
|
134
112
|
}
|
|
135
113
|
return new Promise((resolve) => {
|
|
@@ -141,8 +119,7 @@ var _EventIterator = class _EventIterator {
|
|
|
141
119
|
}, __privateGet(this, _idle));
|
|
142
120
|
}
|
|
143
121
|
this.emitter.once(this.event, () => {
|
|
144
|
-
if (idleTimer)
|
|
145
|
-
clearTimeout(idleTimer);
|
|
122
|
+
if (idleTimer) clearTimeout(idleTimer);
|
|
146
123
|
resolve(this.next());
|
|
147
124
|
});
|
|
148
125
|
});
|
|
@@ -185,5 +162,5 @@ __name(_EventIterator, "EventIterator");
|
|
|
185
162
|
var EventIterator = _EventIterator;
|
|
186
163
|
|
|
187
164
|
export { EventIterator };
|
|
188
|
-
//# sourceMappingURL=
|
|
165
|
+
//# sourceMappingURL=index.mjs.map
|
|
189
166
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { EventEmitter } from 'node:events';\n\n/**\n * A filter for an EventIterator.\n */\nexport type EventIteratorFilter<V> = (value: V) => boolean;\n\n/**\n * Options to be passed to an EventIterator.\n */\nexport interface EventIteratorOptions<V> {\n\t/**\n\t * The filter.\n\t */\n\tfilter?: EventIteratorFilter<V>;\n\n\t/**\n\t * The timeout in ms before ending the EventIterator.\n\t */\n\tidle?: number;\n\n\t/**\n\t * The limit of events that pass the filter to iterate.\n\t */\n\tlimit?: number;\n}\n\n/**\n * An EventIterator, used for asynchronously iterating over received values.\n */\nexport class EventIterator<V extends unknown[]> implements AsyncIterableIterator<V> {\n\t/**\n\t * The emitter to listen to.\n\t */\n\tpublic readonly emitter: EventEmitter;\n\n\t/**\n\t * The event the event iterator is listening for to receive values from.\n\t */\n\tpublic readonly event: string;\n\n\t/**\n\t * The filter used to filter out values.\n\t */\n\tpublic filter: EventIteratorFilter<V>;\n\n\t/**\n\t * Whether or not the EventIterator has ended.\n\t */\n\t#ended = false;\n\n\t/**\n\t * The amount of idle time in ms before moving on.\n\t */\n\t#idle?: number;\n\n\t/**\n\t * The queue of received values.\n\t */\n\t#queue: V[] = [];\n\n\t/**\n\t * The amount of events that have passed the filter.\n\t */\n\t#passed = 0;\n\n\t/**\n\t * The limit before ending the EventIterator.\n\t */\n\t#limit: number;\n\n\t/**\n\t * The timer to track when this will idle out.\n\t */\n\t#idleTimer: NodeJS.Timeout | undefined | null = null;\n\n\t/**\n\t * The push handler with context bound to the instance.\n\t */\n\t#push: (this: EventIterator<V>, ...value: V) => void;\n\n\t/**\n\t * @param emitter The event emitter to listen to.\n\t * @param event The event we're listening for to receives values from.\n\t * @param options Any extra options.\n\t */\n\tpublic constructor(emitter: EventEmitter, event: string, options: EventIteratorOptions<V> = {}) {\n\t\tthis.emitter = emitter;\n\t\tthis.event = event;\n\t\tthis.#limit = options.limit ?? Infinity;\n\t\tthis.#idle = options.idle;\n\t\tthis.filter = options.filter ?? ((): boolean => true);\n\n\t\t// This timer is to idle out on lack of valid responses\n\t\tif (this.#idle) this.#idleTimer = setTimeout(this.end.bind(this), this.#idle);\n\n\t\tthis.#push = this.push.bind(this);\n\t\tconst maxListeners = this.emitter.getMaxListeners();\n\t\tif (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners + 1);\n\n\t\tthis.emitter.on(this.event, this.#push);\n\t}\n\n\t/**\n\t * Whether or not the EventIterator has ended.\n\t */\n\tpublic get ended(): boolean {\n\t\treturn this.#ended;\n\t}\n\n\t/**\n\t * Ends the EventIterator.\n\t */\n\tpublic end(): void {\n\t\tif (this.#ended) return;\n\t\tthis.#ended = true;\n\t\tthis.#queue = [];\n\n\t\tthis.emitter.off(this.event, this.#push);\n\t\tconst maxListeners = this.emitter.getMaxListeners();\n\t\tif (maxListeners !== 0) this.emitter.setMaxListeners(maxListeners - 1);\n\t}\n\n\t/**\n\t * The next value that's received from the EventEmitter.\n\t */\n\tpublic async next(): Promise<IteratorResult<V>> {\n\t\t// If there are elements in the queue, return an undone response:\n\t\tif (this.#queue.length) {\n\t\t\tconst value = this.#queue.shift()!;\n\t\t\tif (!this.filter(value)) return this.next();\n\t\t\tif (++this.#passed >= this.#limit) this.end();\n\t\t\tif (this.#idleTimer) this.#idleTimer.refresh();\n\t\t\treturn { done: false, value };\n\t\t}\n\n\t\t// If the iterator ended, clean-up timer and return a done response:\n\t\tif (this.#ended) {\n\t\t\tif (this.#idleTimer) clearTimeout(this.#idleTimer);\n\t\t\treturn { done: true, value: undefined as never };\n\t\t}\n\n\t\t// Listen for a new element from the emitter:\n\t\treturn new Promise<IteratorResult<V>>((resolve) => {\n\t\t\tlet idleTimer: NodeJS.Timeout | undefined | null = null;\n\n\t\t\t// If there is an idle time set, we will create a temporary timer,\n\t\t\t// which will cause the iterator to end if no new elements are received:\n\t\t\tif (this.#idle) {\n\t\t\t\tidleTimer = setTimeout(() => {\n\t\t\t\t\tthis.end();\n\t\t\t\t\tresolve(this.next());\n\t\t\t\t}, this.#idle);\n\t\t\t}\n\n\t\t\t// Once it has received at least one value, we will clear the timer (if defined),\n\t\t\t// and resolve with the new value:\n\t\t\tthis.emitter.once(this.event, () => {\n\t\t\t\tif (idleTimer) clearTimeout(idleTimer);\n\t\t\t\tresolve(this.next());\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Handles what happens when you break or return from a loop.\n\t */\n\tpublic return(): Promise<IteratorResult<V>> {\n\t\tthis.end();\n\t\treturn Promise.resolve({ done: true, value: undefined as never });\n\t}\n\n\t/**\n\t * Handles what happens when you encounter an error in a loop.\n\t */\n\tpublic throw(): Promise<IteratorResult<V>> {\n\t\tthis.end();\n\t\treturn Promise.resolve({ done: true, value: undefined as never });\n\t}\n\n\t/**\n\t * The symbol allowing EventIterators to be used in for-await-of loops.\n\t */\n\tpublic [Symbol.asyncIterator](): AsyncIterableIterator<V> {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Pushes a value into the queue.\n\t */\n\tprotected push(...value: V): void {\n\t\tthis.#queue.push(value);\n\t}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapphire/event-iterator",
|
|
3
|
-
"version": "1.7.3-next.
|
|
3
|
+
"version": "1.7.3-next.fc35dd86",
|
|
4
4
|
"description": "Turns event emitter events into async iterators.",
|
|
5
5
|
"author": "@sapphire",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"test": "vitest run",
|
|
24
24
|
"lint": "eslint src tests --ext ts --fix -c ../../.eslintrc",
|
|
25
25
|
"build": "tsup && yarn build:rename-cjs-index",
|
|
26
|
-
"build:rename-cjs-index": "tsx
|
|
26
|
+
"build:rename-cjs-index": "tsx ../../scripts/rename-cjs-index.cts",
|
|
27
27
|
"docs": "typedoc-json-parser",
|
|
28
28
|
"prepack": "yarn build",
|
|
29
29
|
"bump": "cliff-jumper",
|
|
30
30
|
"check-update": "cliff-jumper --dry-run"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"tslib": "^2.
|
|
33
|
+
"tslib": "^2.7.0"
|
|
34
34
|
},
|
|
35
35
|
"repository": {
|
|
36
36
|
"type": "git",
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@favware/cliff-jumper": "^
|
|
65
|
-
"@vitest/coverage-v8": "^
|
|
66
|
-
"tsup": "^8.
|
|
67
|
-
"tsx": "^4.
|
|
64
|
+
"@favware/cliff-jumper": "^4.1.0",
|
|
65
|
+
"@vitest/coverage-v8": "^2.0.5",
|
|
66
|
+
"tsup": "^8.2.4",
|
|
67
|
+
"tsx": "^4.19.0",
|
|
68
68
|
"typedoc": "^0.25.13",
|
|
69
69
|
"typedoc-json-parser": "^10.0.0",
|
|
70
|
-
"typescript": "
|
|
71
|
-
"vitest": "^
|
|
70
|
+
"typescript": "~5.4.5",
|
|
71
|
+
"vitest": "^2.0.5"
|
|
72
72
|
}
|
|
73
73
|
}
|