Update Bot
This commit is contained in:
111
node_modules/@vladfrangu/async_event_emitter/CHANGELOG.md
generated
vendored
Normal file
111
node_modules/@vladfrangu/async_event_emitter/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
# [2.4.6](https://github.com/vladfrangu/async_event_emitter/compare/v2.4.6...v2.4.6) - (2024-08-21)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Static `.on` returning wrong iterator types ([77ad774](https://github.com/vladfrangu/async_event_emitter/commit/77ad7741f75eeb499d217d7e93ce3fb5aab483ea))
|
||||
|
||||
# [2.4.5](https://github.com/vladfrangu/async_event_emitter/compare/v2.4.5...v2.4.5) - (2024-08-01)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Brand each AEE instance so inference can work with AEE.on ([305b2c9](https://github.com/vladfrangu/async_event_emitter/commit/305b2c9bc7ccbe21355f8bbf4ee8c5a9cf460188))
|
||||
|
||||
# [2.4.4](https://github.com/vladfrangu/async_event_emitter/compare/v2.4.4...v2.4.4) - (2024-07-15)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Accidentally inverted emit error event logic ([134ab3c](https://github.com/vladfrangu/async_event_emitter/commit/134ab3cf526137a0f014ed2984554a62a7714df7))
|
||||
|
||||
# [2.4.2](https://github.com/vladfrangu/async_event_emitter/compare/v2.4.2...v2.4.2) - (2024-07-09)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Built types were wrong, causing inference issues ([28e9247](https://github.com/vladfrangu/async_event_emitter/commit/28e9247250e5a39f11a31efab88df334f05d6bfd))
|
||||
|
||||
# [2.4.1](https://github.com/vladfrangu/async_event_emitter/compare/v2.4.1...v2.4.1) - (2024-07-03)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Correct strictness of types and overloads for certain methods ([75c7e19](https://github.com/vladfrangu/async_event_emitter/commit/75c7e191ffa65d2cfccf2dda4e4395427fb979f6))
|
||||
|
||||
# [2.4.0](https://github.com/vladfrangu/async_event_emitter/compare/v2.4.0...v2.4.0) - (2024-06-27)
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- Cleaner types, more correct types, the usual ([c1b0f75](https://github.com/vladfrangu/async_event_emitter/commit/c1b0f751f597d9dac5d10870f49f30b8b1dc4908))
|
||||
|
||||
# [2.3.0](https://github.com/vladfrangu/async_event_emitter/compare/v2.3.0...v2.3.0) - (2024-06-21)
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- Cleanup ignore comments ([0f4029e](https://github.com/vladfrangu/async_event_emitter/commit/0f4029e9935373e15073288da1841ffb39cc22d8))
|
||||
|
||||
# [2.2.4](https://github.com/vladfrangu/async_event_emitter/compare/v2.2.4...v2.2.4) - (2023-12-03)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Correct import of CJS version in package.json (#3) ([8dc308c](https://github.com/vladfrangu/async_event_emitter/commit/8dc308c43fdf9a024a7d48e7219d75e4c9f597dd))
|
||||
|
||||
# [2.2.2](https://github.com/vladfrangu/async_event_emitter/compare/v2.2.1...v2.2.2) - (2023-05-11)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Listener count was always 0 for one listener ([9b78e19](https://github.com/vladfrangu/async_event_emitter/commit/9b78e1992db649004dee852359240b3d0baaac2d))
|
||||
|
||||
# [2.2.1](https://github.com/vladfrangu/async_event_emitter/compare/v2.2.0...v2.2.1) - (2023-04-08)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Include comment for throwing error on emit ([19de045](https://github.com/vladfrangu/async_event_emitter/commit/19de0452702a0d9e35e9241259d100ca6d6f5447))
|
||||
|
||||
# [2.2.0](https://github.com/vladfrangu/async_event_emitter/compare/v2.1.4...v2.2.0) - (2023-04-07)
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- Speed 🚀 ([23eb908](https://github.com/vladfrangu/async_event_emitter/commit/23eb90852ff8a6ceb4d6105c6df44c646642efae))
|
||||
|
||||
# [2.1.4](https://github.com/vladfrangu/async_event_emitter/compare/v2.1.3...v2.1.4) - (2023-02-18)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Remove predefined error event to allow extensions ([4224bbe](https://github.com/vladfrangu/async_event_emitter/commit/4224bbeae5c25cb94d4073600a9dff7ae3abcceb))
|
||||
|
||||
# [2.1.2](https://github.com/vladfrangu/async_event_emitter/compare/v2.1.1...v2.1.2) - (2022-09-19)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Don't use any `@types/node` types ([e4babce](https://github.com/vladfrangu/async_event_emitter/commit/e4babce88c17befdb6f84c73c0de2e0602260681))
|
||||
|
||||
# [2.1.1](https://github.com/vladfrangu/async_event_emitter/compare/v2.1.0...v2.1.1) - (2022-09-19)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Correct type errors when building with other types too ([72a03ae](https://github.com/vladfrangu/async_event_emitter/commit/72a03ae1ac30456241b4003a7c2ea93d27e8de5e))
|
||||
|
||||
# [2.1.0](https://github.com/vladfrangu/async_event_emitter/compare/v2.0.1...v2.1.0) - (2022-09-18)
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- Bring in line with nodejs EventEmitters ([5a14ed0](https://github.com/vladfrangu/async_event_emitter/commit/5a14ed04bf87ec6a34cd33e26e3f25f101f87bcd))
|
||||
|
||||
# [2.0.1](https://github.com/vladfrangu/async_event_emitter/compare/v2.0.0...v2.0.1) - (2022-07-09)
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
- Error event not properly emitting ([b849b38](https://github.com/vladfrangu/async_event_emitter/commit/b849b387c36515c60234c06681bfd4ec32ee5336))
|
||||
|
||||
# [2.0.0](https://github.com/vladfrangu/async_event_emitter/compare/v1.0.1...v2.0.0) - (2022-06-29)
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- Use stringified bigints instead of uuids for promise map ([8c69419](https://github.com/vladfrangu/async_event_emitter/commit/8c694199da1a0a231feb1be3b0d7cfdb18cefd0b))
|
||||
|
||||
### 💥 Breaking Changes:
|
||||
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
24
node_modules/@vladfrangu/async_event_emitter/LICENSE.md
generated
vendored
Normal file
24
node_modules/@vladfrangu/async_event_emitter/LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# The MIT License (MIT)
|
||||
|
||||
Copyright © `2022` `Vlad Frangu`
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the “Software”), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
51
node_modules/@vladfrangu/async_event_emitter/README.md
generated
vendored
Normal file
51
node_modules/@vladfrangu/async_event_emitter/README.md
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
<div align="center">
|
||||
|
||||
# @vladfrangu/async_event_emitter
|
||||
|
||||
**Simple to use event emitter implementation with async support in mind.**
|
||||
|
||||
[](https://github.com/vladfrangu/async_event_emitter/blob/main/LICENSE.md)
|
||||
[](https://codecov.io/gh/vladfrangu/async_event_emitter)
|
||||
[](https://www.npmjs.com/package/@vladfrangu/async_event_emitter)
|
||||
|
||||
</div>
|
||||
|
||||
## Description
|
||||
|
||||
A very small, lightweight and simple re-implementation of event emitters, with support for async event handlers in mind.
|
||||
|
||||
> **Note**: `@vladfrangu/async_event_emitter` requires Node.js v14 or higher to work, or a browser that has async/await support.
|
||||
|
||||
## Features
|
||||
|
||||
- TypeScript friendly
|
||||
- Offers CJS, ESM and UMD builds
|
||||
- Consistent interface with what is expected from an event emitter
|
||||
- Simple handling of asynchronous event handlers to allow waiting for their execution to finish if you want to exit the process
|
||||
|
||||
## Buy me some doughnuts
|
||||
|
||||
Most of my projects are and always will be open source, even if I don't get donations. That being said, I know there are amazing people who may still want to donate just to show their appreciation. Thank you very much in advance!
|
||||
|
||||
I accept donations through Ko-fi, PayPal, Patreon and GitHub Sponsorships. You can use the buttons below to donate through your method of choice.
|
||||
|
||||
| Donate With | Address |
|
||||
| :-------------: | :------------------------------------------------------: |
|
||||
| GitHub Sponsors | [Click Here](https://github.com/sponsors/vladfrangu) |
|
||||
| Ko-fi | [Click Here](https://ko-fi.com/wolfgalvlad) |
|
||||
| Patreon | [Click Here](https://patreon.com/vladfrangu) |
|
||||
| PayPal | [Click Here](https://www.paypal.com/paypalme/franguvlad) |
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<!-- markdownlint-enable -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
23
node_modules/@vladfrangu/async_event_emitter/THIRD_PARTY_LICENSE.md
generated
vendored
Normal file
23
node_modules/@vladfrangu/async_event_emitter/THIRD_PARTY_LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
# Most parts of this code are from node.js, specifically from https://github.com/nodejs/node/blob/main/lib/events.js
|
||||
|
||||
As such, a lot of the code is licensed under the following license:
|
||||
|
||||
Copyright Node.js contributors. All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including without limitation the
|
||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
590
node_modules/@vladfrangu/async_event_emitter/dist/index.cjs
generated
vendored
Normal file
590
node_modules/@vladfrangu/async_event_emitter/dist/index.cjs
generated
vendored
Normal file
@@ -0,0 +1,590 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// src/index.ts
|
||||
var src_exports = {};
|
||||
__export(src_exports, {
|
||||
AbortError: () => AbortError,
|
||||
AsyncEventEmitter: () => AsyncEventEmitter
|
||||
});
|
||||
module.exports = __toCommonJS(src_exports);
|
||||
function validateListener(input) {
|
||||
if (typeof input !== "function") {
|
||||
throw new TypeError(`The listener argument must be a function. Received ${typeof input}`);
|
||||
}
|
||||
}
|
||||
__name(validateListener, "validateListener");
|
||||
function validateAbortSignal(input) {
|
||||
if (input && !(input instanceof AbortSignal)) {
|
||||
throw new TypeError(`The signal option must be an AbortSignal. Received ${input}`);
|
||||
}
|
||||
}
|
||||
__name(validateAbortSignal, "validateAbortSignal");
|
||||
function spliceOne(list, index) {
|
||||
for (; index + 1 < list.length; index++) {
|
||||
list[index] = list[index + 1];
|
||||
}
|
||||
list.pop();
|
||||
}
|
||||
__name(spliceOne, "spliceOne");
|
||||
function arrayClone(arr) {
|
||||
switch (arr.length) {
|
||||
case 2:
|
||||
return [arr[0], arr[1]];
|
||||
case 3:
|
||||
return [arr[0], arr[1], arr[2]];
|
||||
case 4:
|
||||
return [arr[0], arr[1], arr[2], arr[3]];
|
||||
case 5:
|
||||
return [arr[0], arr[1], arr[2], arr[3], arr[4]];
|
||||
case 6:
|
||||
return [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]];
|
||||
}
|
||||
return arr.slice();
|
||||
}
|
||||
__name(arrayClone, "arrayClone");
|
||||
function identicalSequenceRange(a, b) {
|
||||
for (let i = 0; i < a.length - 3; i++) {
|
||||
const pos = b.indexOf(a[i]);
|
||||
if (pos !== -1) {
|
||||
const rest = b.length - pos;
|
||||
if (rest > 3) {
|
||||
let len = 1;
|
||||
const maxLen = Math.min(a.length - i, rest);
|
||||
while (maxLen > len && a[i + len] === b[pos + len]) {
|
||||
len++;
|
||||
}
|
||||
if (len > 3) {
|
||||
return [len, i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return [0, 0];
|
||||
}
|
||||
__name(identicalSequenceRange, "identicalSequenceRange");
|
||||
function enhanceStackTrace(err, own) {
|
||||
let ctorInfo = "";
|
||||
try {
|
||||
const { name } = this.constructor;
|
||||
if (name !== "AsyncEventEmitter") ctorInfo = ` on ${name} instance`;
|
||||
} catch {
|
||||
}
|
||||
const sep = `
|
||||
Emitted 'error' event${ctorInfo} at:
|
||||
`;
|
||||
const errStack = err.stack.split("\n").slice(1);
|
||||
const ownStack = own.stack.split("\n").slice(1);
|
||||
const { 0: len, 1: off } = identicalSequenceRange(ownStack, errStack);
|
||||
if (len > 0) {
|
||||
ownStack.splice(off + 1, len - 2, " [... lines matching original stack trace ...]");
|
||||
}
|
||||
return err.stack + sep + ownStack.join("\n");
|
||||
}
|
||||
__name(enhanceStackTrace, "enhanceStackTrace");
|
||||
var brandSymbol = Symbol.for("async-event-emitter.ts-brand");
|
||||
brandSymbol;
|
||||
var _AsyncEventEmitter = class _AsyncEventEmitter {
|
||||
constructor() {
|
||||
this._events = {
|
||||
__proto__: null
|
||||
};
|
||||
this._eventCount = 0;
|
||||
this._maxListeners = 10;
|
||||
this._internalPromiseMap = /* @__PURE__ */ new Map();
|
||||
this._wrapperId = 0n;
|
||||
}
|
||||
addListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, false);
|
||||
this._addListener(eventName, wrapped, false);
|
||||
return this;
|
||||
}
|
||||
on(eventName, listener) {
|
||||
return this.addListener(eventName, listener);
|
||||
}
|
||||
once(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, true);
|
||||
this._addListener(eventName, wrapped, false);
|
||||
return this;
|
||||
}
|
||||
removeListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const events = this._events;
|
||||
const eventList = events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return this;
|
||||
}
|
||||
if (eventList === listener || eventList.listener === listener) {
|
||||
if (--this._eventCount === 0) {
|
||||
this._events = { __proto__: null };
|
||||
} else {
|
||||
delete events[eventName];
|
||||
if (events.removeListener) {
|
||||
this.emit(
|
||||
"removeListener",
|
||||
eventName,
|
||||
eventList.listener ?? eventList
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if (typeof eventList !== "function") {
|
||||
let position = -1;
|
||||
for (let i = eventList.length - 1; i >= 0; i--) {
|
||||
if (eventList[i] === listener || eventList[i].listener === listener) {
|
||||
position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (position < 0) {
|
||||
return this;
|
||||
}
|
||||
if (position === 0) {
|
||||
eventList.shift();
|
||||
} else {
|
||||
spliceOne(eventList, position);
|
||||
}
|
||||
if (eventList.length === 0) {
|
||||
delete events[eventName];
|
||||
--this._eventCount;
|
||||
}
|
||||
if (events.removeListener !== void 0) {
|
||||
this.emit("removeListener", eventName, listener);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
off(eventName, listener) {
|
||||
return this.removeListener(eventName, listener);
|
||||
}
|
||||
removeAllListeners(event) {
|
||||
const events = this._events;
|
||||
if (events.removeListener === void 0) {
|
||||
if (!event) {
|
||||
this._events = { __proto__: null };
|
||||
this._eventCount = 0;
|
||||
} else if (events[event] !== void 0) {
|
||||
if (--this._eventCount === 0) {
|
||||
this._events = { __proto__: null };
|
||||
} else {
|
||||
delete events[event];
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
if (!event) {
|
||||
for (const key of Reflect.ownKeys(events)) {
|
||||
if (key === "removeListener") {
|
||||
continue;
|
||||
}
|
||||
this.removeAllListeners(key);
|
||||
}
|
||||
this.removeAllListeners("removeListener");
|
||||
this._events = { __proto__: null };
|
||||
this._eventCount = 0;
|
||||
return this;
|
||||
}
|
||||
const listeners = events[event];
|
||||
if (typeof listeners === "function") {
|
||||
this.removeListener(event, listeners);
|
||||
} else if (listeners !== void 0) {
|
||||
for (let i = listeners.length - 1; i >= 0; i--) {
|
||||
this.removeListener(event, listeners[i]);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
setMaxListeners(n) {
|
||||
if (typeof n !== "number" || n < 0 || Number.isNaN(n)) {
|
||||
throw new RangeError(`Expected to get a non-negative number for "setMaxListeners", got ${n} instead`);
|
||||
}
|
||||
this._maxListeners = n;
|
||||
return this;
|
||||
}
|
||||
getMaxListeners() {
|
||||
return this._maxListeners;
|
||||
}
|
||||
listeners(eventName) {
|
||||
const eventList = this._events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return [];
|
||||
}
|
||||
if (typeof eventList === "function") {
|
||||
return [eventList.listener ?? eventList];
|
||||
}
|
||||
const ret = arrayClone(eventList);
|
||||
for (let i = 0; i < ret.length; ++i) {
|
||||
const orig = ret[i].listener;
|
||||
if (typeof orig === "function") {
|
||||
ret[i] = orig;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
rawListeners(eventName) {
|
||||
const eventList = this._events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return [];
|
||||
}
|
||||
if (typeof eventList === "function") {
|
||||
return [eventList];
|
||||
}
|
||||
return arrayClone(eventList);
|
||||
}
|
||||
emit(eventName, ...args) {
|
||||
let doError = eventName === "error";
|
||||
const events = this._events;
|
||||
if (events !== void 0) {
|
||||
doError = doError && events.error === void 0;
|
||||
} else if (!doError) {
|
||||
return false;
|
||||
}
|
||||
if (doError) {
|
||||
let er;
|
||||
if (args.length > 0) {
|
||||
er = args[0];
|
||||
}
|
||||
if (er instanceof Error) {
|
||||
try {
|
||||
const capture = {};
|
||||
Error.captureStackTrace(capture, _AsyncEventEmitter.prototype.emit);
|
||||
Object.defineProperty(er, "stack", {
|
||||
value: enhanceStackTrace.call(this, er, capture),
|
||||
configurable: true
|
||||
});
|
||||
} catch {
|
||||
}
|
||||
throw er;
|
||||
}
|
||||
const stringifiedError = String(er);
|
||||
const err = new Error(`Unhandled 'error' event emitted, received ${stringifiedError}`);
|
||||
err.context = er;
|
||||
throw err;
|
||||
}
|
||||
const handlers = events[eventName];
|
||||
if (handlers === void 0) {
|
||||
return false;
|
||||
}
|
||||
if (typeof handlers === "function") {
|
||||
const result = handlers.apply(this, args);
|
||||
if (result !== void 0 && result !== null) {
|
||||
handleMaybeAsync(this, result);
|
||||
}
|
||||
} else {
|
||||
const len = handlers.length;
|
||||
const listeners = arrayClone(handlers);
|
||||
for (let i = 0; i < len; ++i) {
|
||||
const result = listeners[i].apply(this, args);
|
||||
if (result !== void 0 && result !== null) {
|
||||
handleMaybeAsync(this, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
listenerCount(eventName) {
|
||||
const events = this._events;
|
||||
if (events === void 0) {
|
||||
return 0;
|
||||
}
|
||||
const eventListeners = events[eventName];
|
||||
if (typeof eventListeners === "function") {
|
||||
return 1;
|
||||
}
|
||||
return eventListeners?.length ?? 0;
|
||||
}
|
||||
prependListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, false);
|
||||
this._addListener(eventName, wrapped, true);
|
||||
return this;
|
||||
}
|
||||
prependOnceListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, true);
|
||||
this._addListener(eventName, wrapped, true);
|
||||
return this;
|
||||
}
|
||||
eventNames() {
|
||||
return this._eventCount > 0 ? Reflect.ownKeys(this._events) : [];
|
||||
}
|
||||
async waitForAllListenersToComplete() {
|
||||
const promises = [...this._internalPromiseMap.values()];
|
||||
if (promises.length === 0) {
|
||||
return false;
|
||||
}
|
||||
await Promise.all(promises);
|
||||
return true;
|
||||
}
|
||||
_addListener(eventName, wrappedListener, prepend) {
|
||||
if (this._events.newListener !== void 0) {
|
||||
this.emit(
|
||||
"newListener",
|
||||
eventName,
|
||||
wrappedListener.listener ?? wrappedListener
|
||||
);
|
||||
}
|
||||
let existing = this._events[eventName];
|
||||
if (existing === void 0) {
|
||||
existing = this._events[eventName] = wrappedListener;
|
||||
++this._eventCount;
|
||||
} else if (typeof existing === "function") {
|
||||
existing = this._events[eventName] = prepend ? [wrappedListener, existing] : [existing, wrappedListener];
|
||||
} else if (prepend) {
|
||||
existing.unshift(wrappedListener);
|
||||
} else {
|
||||
existing.push(wrappedListener);
|
||||
}
|
||||
const existingWarnedAboutMaxListeners = Reflect.get(existing, "_hasWarnedAboutMaxListeners");
|
||||
if (this._maxListeners > 0 && existing.length > this._maxListeners && !existingWarnedAboutMaxListeners) {
|
||||
Reflect.set(existing, "_hasWarnedAboutMaxListeners", true);
|
||||
const warningMessage = [
|
||||
`Possible AsyncEventEmitter memory leak detected. ${existing.length} ${String(
|
||||
eventName
|
||||
)} listeners added to ${this.constructor.name}.`,
|
||||
`Use emitter.setMaxListeners() to increase the limit.`
|
||||
].join(" ");
|
||||
console.warn(warningMessage);
|
||||
}
|
||||
}
|
||||
_wrapListener(eventName, listener, once) {
|
||||
if (!once) {
|
||||
return listener;
|
||||
}
|
||||
const state = {
|
||||
fired: false,
|
||||
wrapFn: void 0,
|
||||
eventEmitter: this,
|
||||
eventName,
|
||||
listener
|
||||
};
|
||||
const aliased = onceWrapper;
|
||||
const wrapped = aliased.bind(state);
|
||||
wrapped.listener = listener;
|
||||
state.wrapFn = wrapped;
|
||||
return wrapped;
|
||||
}
|
||||
static listenerCount(emitter, eventName) {
|
||||
return emitter.listenerCount(eventName);
|
||||
}
|
||||
static async once(emitter, eventName, options = {}) {
|
||||
const signal = options?.signal;
|
||||
validateAbortSignal(signal);
|
||||
if (signal?.aborted) {
|
||||
throw new AbortError(void 0, { cause: getReason(signal) });
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const errorListener = /* @__PURE__ */ __name((err) => {
|
||||
emitter.removeListener(eventName, resolver);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(emitter, eventName, abortListener);
|
||||
}
|
||||
reject(err);
|
||||
}, "errorListener");
|
||||
const resolver = /* @__PURE__ */ __name((...args) => {
|
||||
emitter.removeListener("error", errorListener);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
||||
}
|
||||
resolve(args);
|
||||
}, "resolver");
|
||||
emitter.once(eventName, resolver);
|
||||
if (eventName !== "error") {
|
||||
emitter.once("error", errorListener);
|
||||
}
|
||||
const abortListener = /* @__PURE__ */ __name(() => {
|
||||
eventTargetAgnosticRemoveListener(emitter, eventName, resolver);
|
||||
eventTargetAgnosticRemoveListener(emitter, "error", errorListener);
|
||||
reject(new AbortError(void 0, { cause: getReason(signal) }));
|
||||
}, "abortListener");
|
||||
if (signal) {
|
||||
eventTargetAgnosticAddListener(signal, "abort", abortListener, { once: true });
|
||||
}
|
||||
});
|
||||
}
|
||||
static on(emitter, eventName, options = {}) {
|
||||
const signal = options?.signal;
|
||||
validateAbortSignal(signal);
|
||||
if (signal?.aborted) {
|
||||
throw new AbortError(void 0, { cause: getReason(signal) });
|
||||
}
|
||||
const unconsumedEvents = [];
|
||||
const unconsumedPromises = [];
|
||||
let error = null;
|
||||
let finished = false;
|
||||
const abortListener = /* @__PURE__ */ __name(() => {
|
||||
errorHandler(new AbortError(void 0, { cause: getReason(signal) }));
|
||||
}, "abortListener");
|
||||
const eventHandler = /* @__PURE__ */ __name((...args) => {
|
||||
const promise = unconsumedPromises.shift();
|
||||
if (promise) {
|
||||
promise.resolve(createIterResult(args, false));
|
||||
} else {
|
||||
unconsumedEvents.push(args);
|
||||
}
|
||||
}, "eventHandler");
|
||||
const errorHandler = /* @__PURE__ */ __name((err) => {
|
||||
finished = true;
|
||||
const toError = unconsumedPromises.shift();
|
||||
if (toError) {
|
||||
toError.reject(err);
|
||||
} else {
|
||||
error = err;
|
||||
}
|
||||
void iterator.return();
|
||||
}, "errorHandler");
|
||||
const iterator = Object.setPrototypeOf(
|
||||
{
|
||||
next() {
|
||||
const value = unconsumedEvents.shift();
|
||||
if (value) {
|
||||
return Promise.resolve(createIterResult(value, false));
|
||||
}
|
||||
if (error) {
|
||||
const p = Promise.reject(error);
|
||||
error = null;
|
||||
return p;
|
||||
}
|
||||
if (finished) {
|
||||
return Promise.resolve(createIterResult(void 0, true));
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
unconsumedPromises.push({ resolve, reject });
|
||||
});
|
||||
},
|
||||
return() {
|
||||
emitter.off(eventName, eventHandler);
|
||||
emitter.off("error", errorHandler);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
||||
}
|
||||
finished = true;
|
||||
const doneResult = createIterResult(void 0, true);
|
||||
for (const promise of unconsumedPromises) {
|
||||
promise.resolve(doneResult);
|
||||
}
|
||||
return Promise.resolve(doneResult);
|
||||
},
|
||||
throw(err) {
|
||||
if (!err || !(err instanceof Error)) {
|
||||
throw new TypeError(
|
||||
`Expected Error instance to be thrown in AsyncEventEmitter.AsyncIterator. Got ${err}`
|
||||
);
|
||||
}
|
||||
error = err;
|
||||
emitter.off(eventName, eventHandler);
|
||||
emitter.off("error", errorHandler);
|
||||
},
|
||||
[Symbol.asyncIterator]() {
|
||||
return this;
|
||||
}
|
||||
},
|
||||
AsyncIteratorPrototype
|
||||
);
|
||||
emitter.on(eventName, eventHandler);
|
||||
if (eventName !== "error") {
|
||||
emitter.on("error", errorHandler);
|
||||
}
|
||||
if (signal) {
|
||||
eventTargetAgnosticAddListener(signal, "abort", abortListener);
|
||||
}
|
||||
return iterator;
|
||||
}
|
||||
};
|
||||
__name(_AsyncEventEmitter, "AsyncEventEmitter");
|
||||
var AsyncEventEmitter = _AsyncEventEmitter;
|
||||
function onceWrapper() {
|
||||
if (!this.fired) {
|
||||
this.eventEmitter.removeListener(this.eventName, this.wrapFn);
|
||||
this.fired = true;
|
||||
if (arguments.length === 0) {
|
||||
return this.listener.call(this.eventEmitter);
|
||||
}
|
||||
return this.listener.apply(this.eventEmitter, arguments);
|
||||
}
|
||||
}
|
||||
__name(onceWrapper, "onceWrapper");
|
||||
function getReason(signal) {
|
||||
return signal?.reason;
|
||||
}
|
||||
__name(getReason, "getReason");
|
||||
function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.off === "function") {
|
||||
emitter.off(name, listener);
|
||||
} else if (typeof emitter.removeEventListener === "function") {
|
||||
emitter.removeEventListener(name, listener, flags);
|
||||
}
|
||||
}
|
||||
__name(eventTargetAgnosticRemoveListener, "eventTargetAgnosticRemoveListener");
|
||||
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.on === "function") {
|
||||
if (flags?.once) {
|
||||
emitter.once(name, listener);
|
||||
} else {
|
||||
emitter.on(name, listener);
|
||||
}
|
||||
} else if (typeof emitter.addEventListener === "function") {
|
||||
emitter.addEventListener(name, listener, flags);
|
||||
}
|
||||
}
|
||||
__name(eventTargetAgnosticAddListener, "eventTargetAgnosticAddListener");
|
||||
var AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {
|
||||
}).prototype);
|
||||
function createIterResult(value, done) {
|
||||
return { value, done };
|
||||
}
|
||||
__name(createIterResult, "createIterResult");
|
||||
var _AbortError = class _AbortError extends Error {
|
||||
constructor(message = "The operation was aborted", options = void 0) {
|
||||
if (options !== void 0 && typeof options !== "object") {
|
||||
throw new TypeError(`Failed to create AbortError: options is not an object or undefined`);
|
||||
}
|
||||
super(message, options);
|
||||
this.code = "ABORT_ERR";
|
||||
this.name = "AbortError";
|
||||
}
|
||||
};
|
||||
__name(_AbortError, "AbortError");
|
||||
var AbortError = _AbortError;
|
||||
function handleMaybeAsync(emitter, result) {
|
||||
try {
|
||||
const the = result.then;
|
||||
const fin = result.finally;
|
||||
if (typeof the === "function") {
|
||||
the.call(result, void 0, (error) => {
|
||||
setTimeout(() => {
|
||||
emitter.emit("error", error);
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
if (typeof fin === "function") {
|
||||
const promiseId = String(++emitter["_wrapperId"]);
|
||||
emitter["_internalPromiseMap"].set(promiseId, result);
|
||||
fin.call(result, /* @__PURE__ */ __name(function final() {
|
||||
emitter["_internalPromiseMap"].delete(promiseId);
|
||||
}, "final"));
|
||||
}
|
||||
} catch (err) {
|
||||
emitter.emit("error", err);
|
||||
}
|
||||
}
|
||||
__name(handleMaybeAsync, "handleMaybeAsync");
|
||||
//# sourceMappingURL=index.cjs.map
|
||||
1
node_modules/@vladfrangu/async_event_emitter/dist/index.cjs.map
generated
vendored
Normal file
1
node_modules/@vladfrangu/async_event_emitter/dist/index.cjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
76
node_modules/@vladfrangu/async_event_emitter/dist/index.d.mts
generated
vendored
Normal file
76
node_modules/@vladfrangu/async_event_emitter/dist/index.d.mts
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
type InternalGetAsyncEventEmitterEventParameters<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey, Events extends Record<PropertyKey, unknown[]> = EE extends AsyncEventEmitter<infer Events> ? Events : Record<PropertyKey, unknown[]>> = EventName extends keyof AsyncEventEmitterPredefinedEvents ? EventName extends keyof Events ? AsyncEventEmitterPredefinedEvents[EventName] | (Events & Record<PropertyKey, unknown[]>)[EventName] : AsyncEventEmitterPredefinedEvents[EventName] : EventName extends keyof Events ? (Events & Record<PropertyKey, unknown[]>)[EventName] : any[];
|
||||
type GetAsyncEventEmitterEventParameters<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey | keyof AsyncEventEmitterPredefinedEvents> = InternalGetAsyncEventEmitterEventParameters<EE, EventName>;
|
||||
type InternalAsyncEventEmitterInternalListenerForEvent<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey, Events extends Record<PropertyKey, unknown[]> = EE extends AsyncEventEmitter<infer Events> ? Events : Record<PropertyKey, unknown[]>> = EventName extends keyof AsyncEventEmitterPredefinedEvents ? EventName extends keyof Events ? Listener<AsyncEventEmitterPredefinedEvents[EventName] | (Events & Record<PropertyKey, unknown[]>)[EventName]> : Listener<AsyncEventEmitterPredefinedEvents[EventName]> : EventName extends keyof Events ? Listener<(Events & Record<PropertyKey, unknown[]>)[EventName]> : Listener<any[]>;
|
||||
type AsyncEventEmitterInternalListenerForEvent<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey | keyof AsyncEventEmitterPredefinedEvents> = InternalAsyncEventEmitterInternalListenerForEvent<EE, EventName>;
|
||||
type AsyncEventEmitterListenerForEvent<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey | keyof AsyncEventEmitterPredefinedEvents> = Exclude<AsyncEventEmitterInternalListenerForEvent<EE, EventName>['listener'], undefined>;
|
||||
declare const brandSymbol: unique symbol;
|
||||
declare class AsyncEventEmitter<Events extends {} = {}> {
|
||||
/**
|
||||
* This field doesn't actually exist, it's just a way to make TS properly infer the events from classes that extend AsyncEventEmitter
|
||||
*/
|
||||
protected readonly [brandSymbol]: Events;
|
||||
private _events;
|
||||
private _eventCount;
|
||||
private _maxListeners;
|
||||
private _internalPromiseMap;
|
||||
private _wrapperId;
|
||||
addListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
addListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
on<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
on<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
once<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
once<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
removeListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
removeListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
off<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
off<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
removeAllListeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(event: K): this;
|
||||
removeAllListeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(event?: K | undefined): this;
|
||||
removeAllListeners(event: string | symbol): this;
|
||||
removeAllListeners(event?: string | symbol | undefined): this;
|
||||
setMaxListeners(n: number): this;
|
||||
getMaxListeners(): number;
|
||||
listeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K): AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
listeners<K extends string | symbol>(eventName: K): AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
rawListeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K): AsyncEventEmitterInternalListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
rawListeners<K extends string | symbol>(eventName: K): AsyncEventEmitterInternalListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
emit<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, ...args: GetAsyncEventEmitterEventParameters<AsyncEventEmitter<Events>, K>): boolean;
|
||||
emit<K extends string | symbol>(eventName: K, ...args: GetAsyncEventEmitterEventParameters<AsyncEventEmitter<Events>, K>): boolean;
|
||||
listenerCount<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K): number;
|
||||
listenerCount(eventName: string | symbol): number;
|
||||
prependListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
prependListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
prependOnceListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
prependOnceListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
eventNames(): (string | symbol)[] & (keyof AsyncEventEmitterPredefinedEvents)[] & (keyof Events)[];
|
||||
waitForAllListenersToComplete(): Promise<boolean>;
|
||||
private _addListener;
|
||||
private _wrapListener;
|
||||
static listenerCount<EventMap extends {}, EventName extends PropertyKey = keyof EventMap | keyof AsyncEventEmitterPredefinedEvents>(emitter: AsyncEventEmitter<EventMap>, eventName: EventName | keyof AsyncEventEmitterPredefinedEvents): number;
|
||||
static listenerCount(emitter: AsyncEventEmitter<any>, eventName: string | symbol): number;
|
||||
static once<EventMap extends {}, EventName extends PropertyKey = keyof EventMap | keyof AsyncEventEmitterPredefinedEvents>(emitter: AsyncEventEmitter<EventMap>, eventName: EventName, options?: AbortableMethods): Promise<GetAsyncEventEmitterEventParameters<AsyncEventEmitter<EventMap>, EventName>>;
|
||||
static once(emitter: AsyncEventEmitter<any>, eventName: string | symbol, options?: AbortableMethods): Promise<any[]>;
|
||||
static on<EventMap extends {}, EventName extends PropertyKey = keyof EventMap | keyof AsyncEventEmitterPredefinedEvents>(emitter: AsyncEventEmitter<EventMap>, eventName: EventName, options?: AbortableMethods): AsyncGenerator<GetAsyncEventEmitterEventParameters<AsyncEventEmitter<EventMap>, EventName>, void>;
|
||||
static on(emitter: AsyncEventEmitter<any>, eventName: string | symbol, options?: AbortableMethods): AsyncGenerator<any[], void>;
|
||||
}
|
||||
interface AsyncEventEmitterPredefinedEvents {
|
||||
newListener: [eventName: string | symbol, listener: (...args: any[]) => void];
|
||||
removeListener: [eventName: string | symbol, listener: (...args: any[]) => void];
|
||||
}
|
||||
interface Listener<Args extends any[] = any[]> {
|
||||
(...args: Args): void;
|
||||
listener?: (...args: Args) => void;
|
||||
}
|
||||
interface AbortableMethods {
|
||||
signal?: AbortSignal;
|
||||
}
|
||||
interface AbortErrorOptions {
|
||||
cause?: unknown;
|
||||
}
|
||||
declare class AbortError extends Error {
|
||||
readonly code = "ABORT_ERR";
|
||||
readonly name = "AbortError";
|
||||
constructor(message?: string, options?: AbortErrorOptions | undefined);
|
||||
}
|
||||
|
||||
export { AbortError, type AbortErrorOptions, type AbortableMethods, AsyncEventEmitter, type AsyncEventEmitterInternalListenerForEvent, type AsyncEventEmitterListenerForEvent, type AsyncEventEmitterPredefinedEvents, type GetAsyncEventEmitterEventParameters, type Listener };
|
||||
76
node_modules/@vladfrangu/async_event_emitter/dist/index.d.ts
generated
vendored
Normal file
76
node_modules/@vladfrangu/async_event_emitter/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
type InternalGetAsyncEventEmitterEventParameters<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey, Events extends Record<PropertyKey, unknown[]> = EE extends AsyncEventEmitter<infer Events> ? Events : Record<PropertyKey, unknown[]>> = EventName extends keyof AsyncEventEmitterPredefinedEvents ? EventName extends keyof Events ? AsyncEventEmitterPredefinedEvents[EventName] | (Events & Record<PropertyKey, unknown[]>)[EventName] : AsyncEventEmitterPredefinedEvents[EventName] : EventName extends keyof Events ? (Events & Record<PropertyKey, unknown[]>)[EventName] : any[];
|
||||
type GetAsyncEventEmitterEventParameters<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey | keyof AsyncEventEmitterPredefinedEvents> = InternalGetAsyncEventEmitterEventParameters<EE, EventName>;
|
||||
type InternalAsyncEventEmitterInternalListenerForEvent<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey, Events extends Record<PropertyKey, unknown[]> = EE extends AsyncEventEmitter<infer Events> ? Events : Record<PropertyKey, unknown[]>> = EventName extends keyof AsyncEventEmitterPredefinedEvents ? EventName extends keyof Events ? Listener<AsyncEventEmitterPredefinedEvents[EventName] | (Events & Record<PropertyKey, unknown[]>)[EventName]> : Listener<AsyncEventEmitterPredefinedEvents[EventName]> : EventName extends keyof Events ? Listener<(Events & Record<PropertyKey, unknown[]>)[EventName]> : Listener<any[]>;
|
||||
type AsyncEventEmitterInternalListenerForEvent<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey | keyof AsyncEventEmitterPredefinedEvents> = InternalAsyncEventEmitterInternalListenerForEvent<EE, EventName>;
|
||||
type AsyncEventEmitterListenerForEvent<EE extends AsyncEventEmitter<any>, EventName extends PropertyKey | keyof AsyncEventEmitterPredefinedEvents> = Exclude<AsyncEventEmitterInternalListenerForEvent<EE, EventName>['listener'], undefined>;
|
||||
declare const brandSymbol: unique symbol;
|
||||
declare class AsyncEventEmitter<Events extends {} = {}> {
|
||||
/**
|
||||
* This field doesn't actually exist, it's just a way to make TS properly infer the events from classes that extend AsyncEventEmitter
|
||||
*/
|
||||
protected readonly [brandSymbol]: Events;
|
||||
private _events;
|
||||
private _eventCount;
|
||||
private _maxListeners;
|
||||
private _internalPromiseMap;
|
||||
private _wrapperId;
|
||||
addListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
addListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
on<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
on<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
once<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
once<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
removeListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
removeListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
off<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
off<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
removeAllListeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(event: K): this;
|
||||
removeAllListeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(event?: K | undefined): this;
|
||||
removeAllListeners(event: string | symbol): this;
|
||||
removeAllListeners(event?: string | symbol | undefined): this;
|
||||
setMaxListeners(n: number): this;
|
||||
getMaxListeners(): number;
|
||||
listeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K): AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
listeners<K extends string | symbol>(eventName: K): AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
rawListeners<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K): AsyncEventEmitterInternalListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
rawListeners<K extends string | symbol>(eventName: K): AsyncEventEmitterInternalListenerForEvent<AsyncEventEmitter<Events>, K>[];
|
||||
emit<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, ...args: GetAsyncEventEmitterEventParameters<AsyncEventEmitter<Events>, K>): boolean;
|
||||
emit<K extends string | symbol>(eventName: K, ...args: GetAsyncEventEmitterEventParameters<AsyncEventEmitter<Events>, K>): boolean;
|
||||
listenerCount<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K): number;
|
||||
listenerCount(eventName: string | symbol): number;
|
||||
prependListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
prependListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
prependOnceListener<K extends keyof Events | keyof AsyncEventEmitterPredefinedEvents>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
prependOnceListener<K extends string | symbol>(eventName: K, listener: AsyncEventEmitterListenerForEvent<AsyncEventEmitter<Events>, K>): this;
|
||||
eventNames(): (string | symbol)[] & (keyof AsyncEventEmitterPredefinedEvents)[] & (keyof Events)[];
|
||||
waitForAllListenersToComplete(): Promise<boolean>;
|
||||
private _addListener;
|
||||
private _wrapListener;
|
||||
static listenerCount<EventMap extends {}, EventName extends PropertyKey = keyof EventMap | keyof AsyncEventEmitterPredefinedEvents>(emitter: AsyncEventEmitter<EventMap>, eventName: EventName | keyof AsyncEventEmitterPredefinedEvents): number;
|
||||
static listenerCount(emitter: AsyncEventEmitter<any>, eventName: string | symbol): number;
|
||||
static once<EventMap extends {}, EventName extends PropertyKey = keyof EventMap | keyof AsyncEventEmitterPredefinedEvents>(emitter: AsyncEventEmitter<EventMap>, eventName: EventName, options?: AbortableMethods): Promise<GetAsyncEventEmitterEventParameters<AsyncEventEmitter<EventMap>, EventName>>;
|
||||
static once(emitter: AsyncEventEmitter<any>, eventName: string | symbol, options?: AbortableMethods): Promise<any[]>;
|
||||
static on<EventMap extends {}, EventName extends PropertyKey = keyof EventMap | keyof AsyncEventEmitterPredefinedEvents>(emitter: AsyncEventEmitter<EventMap>, eventName: EventName, options?: AbortableMethods): AsyncGenerator<GetAsyncEventEmitterEventParameters<AsyncEventEmitter<EventMap>, EventName>, void>;
|
||||
static on(emitter: AsyncEventEmitter<any>, eventName: string | symbol, options?: AbortableMethods): AsyncGenerator<any[], void>;
|
||||
}
|
||||
interface AsyncEventEmitterPredefinedEvents {
|
||||
newListener: [eventName: string | symbol, listener: (...args: any[]) => void];
|
||||
removeListener: [eventName: string | symbol, listener: (...args: any[]) => void];
|
||||
}
|
||||
interface Listener<Args extends any[] = any[]> {
|
||||
(...args: Args): void;
|
||||
listener?: (...args: Args) => void;
|
||||
}
|
||||
interface AbortableMethods {
|
||||
signal?: AbortSignal;
|
||||
}
|
||||
interface AbortErrorOptions {
|
||||
cause?: unknown;
|
||||
}
|
||||
declare class AbortError extends Error {
|
||||
readonly code = "ABORT_ERR";
|
||||
readonly name = "AbortError";
|
||||
constructor(message?: string, options?: AbortErrorOptions | undefined);
|
||||
}
|
||||
|
||||
export { AbortError, type AbortErrorOptions, type AbortableMethods, AsyncEventEmitter, type AsyncEventEmitterInternalListenerForEvent, type AsyncEventEmitterListenerForEvent, type AsyncEventEmitterPredefinedEvents, type GetAsyncEventEmitterEventParameters, type Listener };
|
||||
592
node_modules/@vladfrangu/async_event_emitter/dist/index.global.js
generated
vendored
Normal file
592
node_modules/@vladfrangu/async_event_emitter/dist/index.global.js
generated
vendored
Normal file
@@ -0,0 +1,592 @@
|
||||
"use strict";
|
||||
var AsyncEventEmitter = (() => {
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// src/index.ts
|
||||
var src_exports = {};
|
||||
__export(src_exports, {
|
||||
AbortError: () => AbortError,
|
||||
AsyncEventEmitter: () => AsyncEventEmitter
|
||||
});
|
||||
function validateListener(input) {
|
||||
if (typeof input !== "function") {
|
||||
throw new TypeError(`The listener argument must be a function. Received ${typeof input}`);
|
||||
}
|
||||
}
|
||||
__name(validateListener, "validateListener");
|
||||
function validateAbortSignal(input) {
|
||||
if (input && !(input instanceof AbortSignal)) {
|
||||
throw new TypeError(`The signal option must be an AbortSignal. Received ${input}`);
|
||||
}
|
||||
}
|
||||
__name(validateAbortSignal, "validateAbortSignal");
|
||||
function spliceOne(list, index) {
|
||||
for (; index + 1 < list.length; index++) {
|
||||
list[index] = list[index + 1];
|
||||
}
|
||||
list.pop();
|
||||
}
|
||||
__name(spliceOne, "spliceOne");
|
||||
function arrayClone(arr) {
|
||||
switch (arr.length) {
|
||||
case 2:
|
||||
return [arr[0], arr[1]];
|
||||
case 3:
|
||||
return [arr[0], arr[1], arr[2]];
|
||||
case 4:
|
||||
return [arr[0], arr[1], arr[2], arr[3]];
|
||||
case 5:
|
||||
return [arr[0], arr[1], arr[2], arr[3], arr[4]];
|
||||
case 6:
|
||||
return [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]];
|
||||
}
|
||||
return arr.slice();
|
||||
}
|
||||
__name(arrayClone, "arrayClone");
|
||||
function identicalSequenceRange(a, b) {
|
||||
for (let i = 0; i < a.length - 3; i++) {
|
||||
const pos = b.indexOf(a[i]);
|
||||
if (pos !== -1) {
|
||||
const rest = b.length - pos;
|
||||
if (rest > 3) {
|
||||
let len = 1;
|
||||
const maxLen = Math.min(a.length - i, rest);
|
||||
while (maxLen > len && a[i + len] === b[pos + len]) {
|
||||
len++;
|
||||
}
|
||||
if (len > 3) {
|
||||
return [len, i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return [0, 0];
|
||||
}
|
||||
__name(identicalSequenceRange, "identicalSequenceRange");
|
||||
function enhanceStackTrace(err, own) {
|
||||
let ctorInfo = "";
|
||||
try {
|
||||
const { name } = this.constructor;
|
||||
if (name !== "AsyncEventEmitter") ctorInfo = ` on ${name} instance`;
|
||||
} catch {
|
||||
}
|
||||
const sep = `
|
||||
Emitted 'error' event${ctorInfo} at:
|
||||
`;
|
||||
const errStack = err.stack.split("\n").slice(1);
|
||||
const ownStack = own.stack.split("\n").slice(1);
|
||||
const { 0: len, 1: off } = identicalSequenceRange(ownStack, errStack);
|
||||
if (len > 0) {
|
||||
ownStack.splice(off + 1, len - 2, " [... lines matching original stack trace ...]");
|
||||
}
|
||||
return err.stack + sep + ownStack.join("\n");
|
||||
}
|
||||
__name(enhanceStackTrace, "enhanceStackTrace");
|
||||
var brandSymbol = Symbol.for("async-event-emitter.ts-brand");
|
||||
brandSymbol;
|
||||
var _AsyncEventEmitter = class _AsyncEventEmitter {
|
||||
constructor() {
|
||||
this._events = {
|
||||
__proto__: null
|
||||
};
|
||||
this._eventCount = 0;
|
||||
this._maxListeners = 10;
|
||||
this._internalPromiseMap = /* @__PURE__ */ new Map();
|
||||
this._wrapperId = 0n;
|
||||
}
|
||||
addListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, false);
|
||||
this._addListener(eventName, wrapped, false);
|
||||
return this;
|
||||
}
|
||||
on(eventName, listener) {
|
||||
return this.addListener(eventName, listener);
|
||||
}
|
||||
once(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, true);
|
||||
this._addListener(eventName, wrapped, false);
|
||||
return this;
|
||||
}
|
||||
removeListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const events = this._events;
|
||||
const eventList = events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return this;
|
||||
}
|
||||
if (eventList === listener || eventList.listener === listener) {
|
||||
if (--this._eventCount === 0) {
|
||||
this._events = { __proto__: null };
|
||||
} else {
|
||||
delete events[eventName];
|
||||
if (events.removeListener) {
|
||||
this.emit(
|
||||
"removeListener",
|
||||
eventName,
|
||||
eventList.listener ?? eventList
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if (typeof eventList !== "function") {
|
||||
let position = -1;
|
||||
for (let i = eventList.length - 1; i >= 0; i--) {
|
||||
if (eventList[i] === listener || eventList[i].listener === listener) {
|
||||
position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (position < 0) {
|
||||
return this;
|
||||
}
|
||||
if (position === 0) {
|
||||
eventList.shift();
|
||||
} else {
|
||||
spliceOne(eventList, position);
|
||||
}
|
||||
if (eventList.length === 0) {
|
||||
delete events[eventName];
|
||||
--this._eventCount;
|
||||
}
|
||||
if (events.removeListener !== void 0) {
|
||||
this.emit("removeListener", eventName, listener);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
off(eventName, listener) {
|
||||
return this.removeListener(eventName, listener);
|
||||
}
|
||||
removeAllListeners(event) {
|
||||
const events = this._events;
|
||||
if (events.removeListener === void 0) {
|
||||
if (!event) {
|
||||
this._events = { __proto__: null };
|
||||
this._eventCount = 0;
|
||||
} else if (events[event] !== void 0) {
|
||||
if (--this._eventCount === 0) {
|
||||
this._events = { __proto__: null };
|
||||
} else {
|
||||
delete events[event];
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
if (!event) {
|
||||
for (const key of Reflect.ownKeys(events)) {
|
||||
if (key === "removeListener") {
|
||||
continue;
|
||||
}
|
||||
this.removeAllListeners(key);
|
||||
}
|
||||
this.removeAllListeners("removeListener");
|
||||
this._events = { __proto__: null };
|
||||
this._eventCount = 0;
|
||||
return this;
|
||||
}
|
||||
const listeners = events[event];
|
||||
if (typeof listeners === "function") {
|
||||
this.removeListener(event, listeners);
|
||||
} else if (listeners !== void 0) {
|
||||
for (let i = listeners.length - 1; i >= 0; i--) {
|
||||
this.removeListener(event, listeners[i]);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
setMaxListeners(n) {
|
||||
if (typeof n !== "number" || n < 0 || Number.isNaN(n)) {
|
||||
throw new RangeError(`Expected to get a non-negative number for "setMaxListeners", got ${n} instead`);
|
||||
}
|
||||
this._maxListeners = n;
|
||||
return this;
|
||||
}
|
||||
getMaxListeners() {
|
||||
return this._maxListeners;
|
||||
}
|
||||
listeners(eventName) {
|
||||
const eventList = this._events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return [];
|
||||
}
|
||||
if (typeof eventList === "function") {
|
||||
return [eventList.listener ?? eventList];
|
||||
}
|
||||
const ret = arrayClone(eventList);
|
||||
for (let i = 0; i < ret.length; ++i) {
|
||||
const orig = ret[i].listener;
|
||||
if (typeof orig === "function") {
|
||||
ret[i] = orig;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
rawListeners(eventName) {
|
||||
const eventList = this._events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return [];
|
||||
}
|
||||
if (typeof eventList === "function") {
|
||||
return [eventList];
|
||||
}
|
||||
return arrayClone(eventList);
|
||||
}
|
||||
emit(eventName, ...args) {
|
||||
let doError = eventName === "error";
|
||||
const events = this._events;
|
||||
if (events !== void 0) {
|
||||
doError = doError && events.error === void 0;
|
||||
} else if (!doError) {
|
||||
return false;
|
||||
}
|
||||
if (doError) {
|
||||
let er;
|
||||
if (args.length > 0) {
|
||||
er = args[0];
|
||||
}
|
||||
if (er instanceof Error) {
|
||||
try {
|
||||
const capture = {};
|
||||
Error.captureStackTrace(capture, _AsyncEventEmitter.prototype.emit);
|
||||
Object.defineProperty(er, "stack", {
|
||||
value: enhanceStackTrace.call(this, er, capture),
|
||||
configurable: true
|
||||
});
|
||||
} catch {
|
||||
}
|
||||
throw er; // Unhandled 'error' event
|
||||
}
|
||||
const stringifiedError = String(er);
|
||||
const err = new Error(`Unhandled 'error' event emitted, received ${stringifiedError}`);
|
||||
err.context = er;
|
||||
throw err; // Unhandled 'error' event
|
||||
}
|
||||
const handlers = events[eventName];
|
||||
if (handlers === void 0) {
|
||||
return false;
|
||||
}
|
||||
if (typeof handlers === "function") {
|
||||
const result = handlers.apply(this, args);
|
||||
if (result !== void 0 && result !== null) {
|
||||
handleMaybeAsync(this, result);
|
||||
}
|
||||
} else {
|
||||
const len = handlers.length;
|
||||
const listeners = arrayClone(handlers);
|
||||
for (let i = 0; i < len; ++i) {
|
||||
const result = listeners[i].apply(this, args);
|
||||
if (result !== void 0 && result !== null) {
|
||||
handleMaybeAsync(this, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
listenerCount(eventName) {
|
||||
const events = this._events;
|
||||
if (events === void 0) {
|
||||
return 0;
|
||||
}
|
||||
const eventListeners = events[eventName];
|
||||
if (typeof eventListeners === "function") {
|
||||
return 1;
|
||||
}
|
||||
return eventListeners?.length ?? 0;
|
||||
}
|
||||
prependListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, false);
|
||||
this._addListener(eventName, wrapped, true);
|
||||
return this;
|
||||
}
|
||||
prependOnceListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, true);
|
||||
this._addListener(eventName, wrapped, true);
|
||||
return this;
|
||||
}
|
||||
eventNames() {
|
||||
return this._eventCount > 0 ? Reflect.ownKeys(this._events) : [];
|
||||
}
|
||||
async waitForAllListenersToComplete() {
|
||||
const promises = [...this._internalPromiseMap.values()];
|
||||
if (promises.length === 0) {
|
||||
return false;
|
||||
}
|
||||
await Promise.all(promises);
|
||||
return true;
|
||||
}
|
||||
_addListener(eventName, wrappedListener, prepend) {
|
||||
if (this._events.newListener !== void 0) {
|
||||
this.emit(
|
||||
"newListener",
|
||||
eventName,
|
||||
wrappedListener.listener ?? wrappedListener
|
||||
);
|
||||
}
|
||||
let existing = this._events[eventName];
|
||||
if (existing === void 0) {
|
||||
existing = this._events[eventName] = wrappedListener;
|
||||
++this._eventCount;
|
||||
} else if (typeof existing === "function") {
|
||||
existing = this._events[eventName] = prepend ? [wrappedListener, existing] : [existing, wrappedListener];
|
||||
} else if (prepend) {
|
||||
existing.unshift(wrappedListener);
|
||||
} else {
|
||||
existing.push(wrappedListener);
|
||||
}
|
||||
const existingWarnedAboutMaxListeners = Reflect.get(existing, "_hasWarnedAboutMaxListeners");
|
||||
if (this._maxListeners > 0 && existing.length > this._maxListeners && !existingWarnedAboutMaxListeners) {
|
||||
Reflect.set(existing, "_hasWarnedAboutMaxListeners", true);
|
||||
const warningMessage = [
|
||||
`Possible AsyncEventEmitter memory leak detected. ${existing.length} ${String(
|
||||
eventName
|
||||
)} listeners added to ${this.constructor.name}.`,
|
||||
`Use emitter.setMaxListeners() to increase the limit.`
|
||||
].join(" ");
|
||||
console.warn(warningMessage);
|
||||
}
|
||||
}
|
||||
_wrapListener(eventName, listener, once) {
|
||||
if (!once) {
|
||||
return listener;
|
||||
}
|
||||
const state = {
|
||||
fired: false,
|
||||
wrapFn: void 0,
|
||||
eventEmitter: this,
|
||||
eventName,
|
||||
listener
|
||||
};
|
||||
const aliased = onceWrapper;
|
||||
const wrapped = aliased.bind(state);
|
||||
wrapped.listener = listener;
|
||||
state.wrapFn = wrapped;
|
||||
return wrapped;
|
||||
}
|
||||
static listenerCount(emitter, eventName) {
|
||||
return emitter.listenerCount(eventName);
|
||||
}
|
||||
static async once(emitter, eventName, options = {}) {
|
||||
const signal = options?.signal;
|
||||
validateAbortSignal(signal);
|
||||
if (signal?.aborted) {
|
||||
throw new AbortError(void 0, { cause: getReason(signal) });
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const errorListener = /* @__PURE__ */ __name((err) => {
|
||||
emitter.removeListener(eventName, resolver);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(emitter, eventName, abortListener);
|
||||
}
|
||||
reject(err);
|
||||
}, "errorListener");
|
||||
const resolver = /* @__PURE__ */ __name((...args) => {
|
||||
emitter.removeListener("error", errorListener);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
||||
}
|
||||
resolve(args);
|
||||
}, "resolver");
|
||||
emitter.once(eventName, resolver);
|
||||
if (eventName !== "error") {
|
||||
emitter.once("error", errorListener);
|
||||
}
|
||||
const abortListener = /* @__PURE__ */ __name(() => {
|
||||
eventTargetAgnosticRemoveListener(emitter, eventName, resolver);
|
||||
eventTargetAgnosticRemoveListener(emitter, "error", errorListener);
|
||||
reject(new AbortError(void 0, { cause: getReason(signal) }));
|
||||
}, "abortListener");
|
||||
if (signal) {
|
||||
eventTargetAgnosticAddListener(signal, "abort", abortListener, { once: true });
|
||||
}
|
||||
});
|
||||
}
|
||||
static on(emitter, eventName, options = {}) {
|
||||
const signal = options?.signal;
|
||||
validateAbortSignal(signal);
|
||||
if (signal?.aborted) {
|
||||
throw new AbortError(void 0, { cause: getReason(signal) });
|
||||
}
|
||||
const unconsumedEvents = [];
|
||||
const unconsumedPromises = [];
|
||||
let error = null;
|
||||
let finished = false;
|
||||
const abortListener = /* @__PURE__ */ __name(() => {
|
||||
errorHandler(new AbortError(void 0, { cause: getReason(signal) }));
|
||||
}, "abortListener");
|
||||
const eventHandler = /* @__PURE__ */ __name((...args) => {
|
||||
const promise = unconsumedPromises.shift();
|
||||
if (promise) {
|
||||
promise.resolve(createIterResult(args, false));
|
||||
} else {
|
||||
unconsumedEvents.push(args);
|
||||
}
|
||||
}, "eventHandler");
|
||||
const errorHandler = /* @__PURE__ */ __name((err) => {
|
||||
finished = true;
|
||||
const toError = unconsumedPromises.shift();
|
||||
if (toError) {
|
||||
toError.reject(err);
|
||||
} else {
|
||||
error = err;
|
||||
}
|
||||
void iterator.return();
|
||||
}, "errorHandler");
|
||||
const iterator = Object.setPrototypeOf(
|
||||
{
|
||||
next() {
|
||||
const value = unconsumedEvents.shift();
|
||||
if (value) {
|
||||
return Promise.resolve(createIterResult(value, false));
|
||||
}
|
||||
if (error) {
|
||||
const p = Promise.reject(error);
|
||||
error = null;
|
||||
return p;
|
||||
}
|
||||
if (finished) {
|
||||
return Promise.resolve(createIterResult(void 0, true));
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
unconsumedPromises.push({ resolve, reject });
|
||||
});
|
||||
},
|
||||
return() {
|
||||
emitter.off(eventName, eventHandler);
|
||||
emitter.off("error", errorHandler);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
||||
}
|
||||
finished = true;
|
||||
const doneResult = createIterResult(void 0, true);
|
||||
for (const promise of unconsumedPromises) {
|
||||
promise.resolve(doneResult);
|
||||
}
|
||||
return Promise.resolve(doneResult);
|
||||
},
|
||||
throw(err) {
|
||||
if (!err || !(err instanceof Error)) {
|
||||
throw new TypeError(
|
||||
`Expected Error instance to be thrown in AsyncEventEmitter.AsyncIterator. Got ${err}`
|
||||
);
|
||||
}
|
||||
error = err;
|
||||
emitter.off(eventName, eventHandler);
|
||||
emitter.off("error", errorHandler);
|
||||
},
|
||||
[Symbol.asyncIterator]() {
|
||||
return this;
|
||||
}
|
||||
},
|
||||
AsyncIteratorPrototype
|
||||
);
|
||||
emitter.on(eventName, eventHandler);
|
||||
if (eventName !== "error") {
|
||||
emitter.on("error", errorHandler);
|
||||
}
|
||||
if (signal) {
|
||||
eventTargetAgnosticAddListener(signal, "abort", abortListener);
|
||||
}
|
||||
return iterator;
|
||||
}
|
||||
};
|
||||
__name(_AsyncEventEmitter, "AsyncEventEmitter");
|
||||
var AsyncEventEmitter = _AsyncEventEmitter;
|
||||
function onceWrapper() {
|
||||
if (!this.fired) {
|
||||
this.eventEmitter.removeListener(this.eventName, this.wrapFn);
|
||||
this.fired = true;
|
||||
if (arguments.length === 0) {
|
||||
return this.listener.call(this.eventEmitter);
|
||||
}
|
||||
return this.listener.apply(this.eventEmitter, arguments);
|
||||
}
|
||||
}
|
||||
__name(onceWrapper, "onceWrapper");
|
||||
function getReason(signal) {
|
||||
return signal?.reason;
|
||||
}
|
||||
__name(getReason, "getReason");
|
||||
function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.off === "function") {
|
||||
emitter.off(name, listener);
|
||||
} else if (typeof emitter.removeEventListener === "function") {
|
||||
emitter.removeEventListener(name, listener, flags);
|
||||
}
|
||||
}
|
||||
__name(eventTargetAgnosticRemoveListener, "eventTargetAgnosticRemoveListener");
|
||||
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.on === "function") {
|
||||
if (flags?.once) {
|
||||
emitter.once(name, listener);
|
||||
} else {
|
||||
emitter.on(name, listener);
|
||||
}
|
||||
} else if (typeof emitter.addEventListener === "function") {
|
||||
emitter.addEventListener(name, listener, flags);
|
||||
}
|
||||
}
|
||||
__name(eventTargetAgnosticAddListener, "eventTargetAgnosticAddListener");
|
||||
var AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {
|
||||
}).prototype);
|
||||
function createIterResult(value, done) {
|
||||
return { value, done };
|
||||
}
|
||||
__name(createIterResult, "createIterResult");
|
||||
var _AbortError = class _AbortError extends Error {
|
||||
constructor(message = "The operation was aborted", options = void 0) {
|
||||
if (options !== void 0 && typeof options !== "object") {
|
||||
throw new TypeError(`Failed to create AbortError: options is not an object or undefined`);
|
||||
}
|
||||
super(message, options);
|
||||
this.code = "ABORT_ERR";
|
||||
this.name = "AbortError";
|
||||
}
|
||||
};
|
||||
__name(_AbortError, "AbortError");
|
||||
var AbortError = _AbortError;
|
||||
function handleMaybeAsync(emitter, result) {
|
||||
try {
|
||||
const the = result.then;
|
||||
const fin = result.finally;
|
||||
if (typeof the === "function") {
|
||||
the.call(result, void 0, (error) => {
|
||||
setTimeout(() => {
|
||||
emitter.emit("error", error);
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
if (typeof fin === "function") {
|
||||
const promiseId = String(++emitter["_wrapperId"]);
|
||||
emitter["_internalPromiseMap"].set(promiseId, result);
|
||||
fin.call(result, /* @__PURE__ */ __name(function final() {
|
||||
emitter["_internalPromiseMap"].delete(promiseId);
|
||||
}, "final"));
|
||||
}
|
||||
} catch (err) {
|
||||
emitter.emit("error", err);
|
||||
}
|
||||
}
|
||||
__name(handleMaybeAsync, "handleMaybeAsync");
|
||||
return __toCommonJS(src_exports);
|
||||
})();
|
||||
//# sourceMappingURL=index.global.js.map
|
||||
1
node_modules/@vladfrangu/async_event_emitter/dist/index.global.js.map
generated
vendored
Normal file
1
node_modules/@vladfrangu/async_event_emitter/dist/index.global.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
571
node_modules/@vladfrangu/async_event_emitter/dist/index.mjs
generated
vendored
Normal file
571
node_modules/@vladfrangu/async_event_emitter/dist/index.mjs
generated
vendored
Normal file
@@ -0,0 +1,571 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
|
||||
// src/index.ts
|
||||
function validateListener(input) {
|
||||
if (typeof input !== "function") {
|
||||
throw new TypeError(`The listener argument must be a function. Received ${typeof input}`);
|
||||
}
|
||||
}
|
||||
__name(validateListener, "validateListener");
|
||||
function validateAbortSignal(input) {
|
||||
if (input && !(input instanceof AbortSignal)) {
|
||||
throw new TypeError(`The signal option must be an AbortSignal. Received ${input}`);
|
||||
}
|
||||
}
|
||||
__name(validateAbortSignal, "validateAbortSignal");
|
||||
function spliceOne(list, index) {
|
||||
for (; index + 1 < list.length; index++) {
|
||||
list[index] = list[index + 1];
|
||||
}
|
||||
list.pop();
|
||||
}
|
||||
__name(spliceOne, "spliceOne");
|
||||
function arrayClone(arr) {
|
||||
switch (arr.length) {
|
||||
case 2:
|
||||
return [arr[0], arr[1]];
|
||||
case 3:
|
||||
return [arr[0], arr[1], arr[2]];
|
||||
case 4:
|
||||
return [arr[0], arr[1], arr[2], arr[3]];
|
||||
case 5:
|
||||
return [arr[0], arr[1], arr[2], arr[3], arr[4]];
|
||||
case 6:
|
||||
return [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]];
|
||||
}
|
||||
return arr.slice();
|
||||
}
|
||||
__name(arrayClone, "arrayClone");
|
||||
function identicalSequenceRange(a, b) {
|
||||
for (let i = 0; i < a.length - 3; i++) {
|
||||
const pos = b.indexOf(a[i]);
|
||||
if (pos !== -1) {
|
||||
const rest = b.length - pos;
|
||||
if (rest > 3) {
|
||||
let len = 1;
|
||||
const maxLen = Math.min(a.length - i, rest);
|
||||
while (maxLen > len && a[i + len] === b[pos + len]) {
|
||||
len++;
|
||||
}
|
||||
if (len > 3) {
|
||||
return [len, i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return [0, 0];
|
||||
}
|
||||
__name(identicalSequenceRange, "identicalSequenceRange");
|
||||
function enhanceStackTrace(err, own) {
|
||||
let ctorInfo = "";
|
||||
try {
|
||||
const { name } = this.constructor;
|
||||
if (name !== "AsyncEventEmitter") ctorInfo = ` on ${name} instance`;
|
||||
} catch {
|
||||
}
|
||||
const sep = `
|
||||
Emitted 'error' event${ctorInfo} at:
|
||||
`;
|
||||
const errStack = err.stack.split("\n").slice(1);
|
||||
const ownStack = own.stack.split("\n").slice(1);
|
||||
const { 0: len, 1: off } = identicalSequenceRange(ownStack, errStack);
|
||||
if (len > 0) {
|
||||
ownStack.splice(off + 1, len - 2, " [... lines matching original stack trace ...]");
|
||||
}
|
||||
return err.stack + sep + ownStack.join("\n");
|
||||
}
|
||||
__name(enhanceStackTrace, "enhanceStackTrace");
|
||||
var brandSymbol = Symbol.for("async-event-emitter.ts-brand");
|
||||
brandSymbol;
|
||||
var _AsyncEventEmitter = class _AsyncEventEmitter {
|
||||
constructor() {
|
||||
this._events = {
|
||||
__proto__: null
|
||||
};
|
||||
this._eventCount = 0;
|
||||
this._maxListeners = 10;
|
||||
this._internalPromiseMap = /* @__PURE__ */ new Map();
|
||||
this._wrapperId = 0n;
|
||||
}
|
||||
addListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, false);
|
||||
this._addListener(eventName, wrapped, false);
|
||||
return this;
|
||||
}
|
||||
on(eventName, listener) {
|
||||
return this.addListener(eventName, listener);
|
||||
}
|
||||
once(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, true);
|
||||
this._addListener(eventName, wrapped, false);
|
||||
return this;
|
||||
}
|
||||
removeListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const events = this._events;
|
||||
const eventList = events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return this;
|
||||
}
|
||||
if (eventList === listener || eventList.listener === listener) {
|
||||
if (--this._eventCount === 0) {
|
||||
this._events = { __proto__: null };
|
||||
} else {
|
||||
delete events[eventName];
|
||||
if (events.removeListener) {
|
||||
this.emit(
|
||||
"removeListener",
|
||||
eventName,
|
||||
eventList.listener ?? eventList
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if (typeof eventList !== "function") {
|
||||
let position = -1;
|
||||
for (let i = eventList.length - 1; i >= 0; i--) {
|
||||
if (eventList[i] === listener || eventList[i].listener === listener) {
|
||||
position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (position < 0) {
|
||||
return this;
|
||||
}
|
||||
if (position === 0) {
|
||||
eventList.shift();
|
||||
} else {
|
||||
spliceOne(eventList, position);
|
||||
}
|
||||
if (eventList.length === 0) {
|
||||
delete events[eventName];
|
||||
--this._eventCount;
|
||||
}
|
||||
if (events.removeListener !== void 0) {
|
||||
this.emit("removeListener", eventName, listener);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
off(eventName, listener) {
|
||||
return this.removeListener(eventName, listener);
|
||||
}
|
||||
removeAllListeners(event) {
|
||||
const events = this._events;
|
||||
if (events.removeListener === void 0) {
|
||||
if (!event) {
|
||||
this._events = { __proto__: null };
|
||||
this._eventCount = 0;
|
||||
} else if (events[event] !== void 0) {
|
||||
if (--this._eventCount === 0) {
|
||||
this._events = { __proto__: null };
|
||||
} else {
|
||||
delete events[event];
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
if (!event) {
|
||||
for (const key of Reflect.ownKeys(events)) {
|
||||
if (key === "removeListener") {
|
||||
continue;
|
||||
}
|
||||
this.removeAllListeners(key);
|
||||
}
|
||||
this.removeAllListeners("removeListener");
|
||||
this._events = { __proto__: null };
|
||||
this._eventCount = 0;
|
||||
return this;
|
||||
}
|
||||
const listeners = events[event];
|
||||
if (typeof listeners === "function") {
|
||||
this.removeListener(event, listeners);
|
||||
} else if (listeners !== void 0) {
|
||||
for (let i = listeners.length - 1; i >= 0; i--) {
|
||||
this.removeListener(event, listeners[i]);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
setMaxListeners(n) {
|
||||
if (typeof n !== "number" || n < 0 || Number.isNaN(n)) {
|
||||
throw new RangeError(`Expected to get a non-negative number for "setMaxListeners", got ${n} instead`);
|
||||
}
|
||||
this._maxListeners = n;
|
||||
return this;
|
||||
}
|
||||
getMaxListeners() {
|
||||
return this._maxListeners;
|
||||
}
|
||||
listeners(eventName) {
|
||||
const eventList = this._events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return [];
|
||||
}
|
||||
if (typeof eventList === "function") {
|
||||
return [eventList.listener ?? eventList];
|
||||
}
|
||||
const ret = arrayClone(eventList);
|
||||
for (let i = 0; i < ret.length; ++i) {
|
||||
const orig = ret[i].listener;
|
||||
if (typeof orig === "function") {
|
||||
ret[i] = orig;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
rawListeners(eventName) {
|
||||
const eventList = this._events[eventName];
|
||||
if (eventList === void 0) {
|
||||
return [];
|
||||
}
|
||||
if (typeof eventList === "function") {
|
||||
return [eventList];
|
||||
}
|
||||
return arrayClone(eventList);
|
||||
}
|
||||
emit(eventName, ...args) {
|
||||
let doError = eventName === "error";
|
||||
const events = this._events;
|
||||
if (events !== void 0) {
|
||||
doError = doError && events.error === void 0;
|
||||
} else if (!doError) {
|
||||
return false;
|
||||
}
|
||||
if (doError) {
|
||||
let er;
|
||||
if (args.length > 0) {
|
||||
er = args[0];
|
||||
}
|
||||
if (er instanceof Error) {
|
||||
try {
|
||||
const capture = {};
|
||||
Error.captureStackTrace(capture, _AsyncEventEmitter.prototype.emit);
|
||||
Object.defineProperty(er, "stack", {
|
||||
value: enhanceStackTrace.call(this, er, capture),
|
||||
configurable: true
|
||||
});
|
||||
} catch {
|
||||
}
|
||||
throw er; // Unhandled 'error' event
|
||||
}
|
||||
const stringifiedError = String(er);
|
||||
const err = new Error(`Unhandled 'error' event emitted, received ${stringifiedError}`);
|
||||
err.context = er;
|
||||
throw err; // Unhandled 'error' event
|
||||
}
|
||||
const handlers = events[eventName];
|
||||
if (handlers === void 0) {
|
||||
return false;
|
||||
}
|
||||
if (typeof handlers === "function") {
|
||||
const result = handlers.apply(this, args);
|
||||
if (result !== void 0 && result !== null) {
|
||||
handleMaybeAsync(this, result);
|
||||
}
|
||||
} else {
|
||||
const len = handlers.length;
|
||||
const listeners = arrayClone(handlers);
|
||||
for (let i = 0; i < len; ++i) {
|
||||
const result = listeners[i].apply(this, args);
|
||||
if (result !== void 0 && result !== null) {
|
||||
handleMaybeAsync(this, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
listenerCount(eventName) {
|
||||
const events = this._events;
|
||||
if (events === void 0) {
|
||||
return 0;
|
||||
}
|
||||
const eventListeners = events[eventName];
|
||||
if (typeof eventListeners === "function") {
|
||||
return 1;
|
||||
}
|
||||
return eventListeners?.length ?? 0;
|
||||
}
|
||||
prependListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, false);
|
||||
this._addListener(eventName, wrapped, true);
|
||||
return this;
|
||||
}
|
||||
prependOnceListener(eventName, listener) {
|
||||
validateListener(listener);
|
||||
const wrapped = this._wrapListener(eventName, listener, true);
|
||||
this._addListener(eventName, wrapped, true);
|
||||
return this;
|
||||
}
|
||||
eventNames() {
|
||||
return this._eventCount > 0 ? Reflect.ownKeys(this._events) : [];
|
||||
}
|
||||
async waitForAllListenersToComplete() {
|
||||
const promises = [...this._internalPromiseMap.values()];
|
||||
if (promises.length === 0) {
|
||||
return false;
|
||||
}
|
||||
await Promise.all(promises);
|
||||
return true;
|
||||
}
|
||||
_addListener(eventName, wrappedListener, prepend) {
|
||||
if (this._events.newListener !== void 0) {
|
||||
this.emit(
|
||||
"newListener",
|
||||
eventName,
|
||||
wrappedListener.listener ?? wrappedListener
|
||||
);
|
||||
}
|
||||
let existing = this._events[eventName];
|
||||
if (existing === void 0) {
|
||||
existing = this._events[eventName] = wrappedListener;
|
||||
++this._eventCount;
|
||||
} else if (typeof existing === "function") {
|
||||
existing = this._events[eventName] = prepend ? [wrappedListener, existing] : [existing, wrappedListener];
|
||||
} else if (prepend) {
|
||||
existing.unshift(wrappedListener);
|
||||
} else {
|
||||
existing.push(wrappedListener);
|
||||
}
|
||||
const existingWarnedAboutMaxListeners = Reflect.get(existing, "_hasWarnedAboutMaxListeners");
|
||||
if (this._maxListeners > 0 && existing.length > this._maxListeners && !existingWarnedAboutMaxListeners) {
|
||||
Reflect.set(existing, "_hasWarnedAboutMaxListeners", true);
|
||||
const warningMessage = [
|
||||
`Possible AsyncEventEmitter memory leak detected. ${existing.length} ${String(
|
||||
eventName
|
||||
)} listeners added to ${this.constructor.name}.`,
|
||||
`Use emitter.setMaxListeners() to increase the limit.`
|
||||
].join(" ");
|
||||
console.warn(warningMessage);
|
||||
}
|
||||
}
|
||||
_wrapListener(eventName, listener, once) {
|
||||
if (!once) {
|
||||
return listener;
|
||||
}
|
||||
const state = {
|
||||
fired: false,
|
||||
wrapFn: void 0,
|
||||
eventEmitter: this,
|
||||
eventName,
|
||||
listener
|
||||
};
|
||||
const aliased = onceWrapper;
|
||||
const wrapped = aliased.bind(state);
|
||||
wrapped.listener = listener;
|
||||
state.wrapFn = wrapped;
|
||||
return wrapped;
|
||||
}
|
||||
static listenerCount(emitter, eventName) {
|
||||
return emitter.listenerCount(eventName);
|
||||
}
|
||||
static async once(emitter, eventName, options = {}) {
|
||||
const signal = options?.signal;
|
||||
validateAbortSignal(signal);
|
||||
if (signal?.aborted) {
|
||||
throw new AbortError(void 0, { cause: getReason(signal) });
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const errorListener = /* @__PURE__ */ __name((err) => {
|
||||
emitter.removeListener(eventName, resolver);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(emitter, eventName, abortListener);
|
||||
}
|
||||
reject(err);
|
||||
}, "errorListener");
|
||||
const resolver = /* @__PURE__ */ __name((...args) => {
|
||||
emitter.removeListener("error", errorListener);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
||||
}
|
||||
resolve(args);
|
||||
}, "resolver");
|
||||
emitter.once(eventName, resolver);
|
||||
if (eventName !== "error") {
|
||||
emitter.once("error", errorListener);
|
||||
}
|
||||
const abortListener = /* @__PURE__ */ __name(() => {
|
||||
eventTargetAgnosticRemoveListener(emitter, eventName, resolver);
|
||||
eventTargetAgnosticRemoveListener(emitter, "error", errorListener);
|
||||
reject(new AbortError(void 0, { cause: getReason(signal) }));
|
||||
}, "abortListener");
|
||||
if (signal) {
|
||||
eventTargetAgnosticAddListener(signal, "abort", abortListener, { once: true });
|
||||
}
|
||||
});
|
||||
}
|
||||
static on(emitter, eventName, options = {}) {
|
||||
const signal = options?.signal;
|
||||
validateAbortSignal(signal);
|
||||
if (signal?.aborted) {
|
||||
throw new AbortError(void 0, { cause: getReason(signal) });
|
||||
}
|
||||
const unconsumedEvents = [];
|
||||
const unconsumedPromises = [];
|
||||
let error = null;
|
||||
let finished = false;
|
||||
const abortListener = /* @__PURE__ */ __name(() => {
|
||||
errorHandler(new AbortError(void 0, { cause: getReason(signal) }));
|
||||
}, "abortListener");
|
||||
const eventHandler = /* @__PURE__ */ __name((...args) => {
|
||||
const promise = unconsumedPromises.shift();
|
||||
if (promise) {
|
||||
promise.resolve(createIterResult(args, false));
|
||||
} else {
|
||||
unconsumedEvents.push(args);
|
||||
}
|
||||
}, "eventHandler");
|
||||
const errorHandler = /* @__PURE__ */ __name((err) => {
|
||||
finished = true;
|
||||
const toError = unconsumedPromises.shift();
|
||||
if (toError) {
|
||||
toError.reject(err);
|
||||
} else {
|
||||
error = err;
|
||||
}
|
||||
void iterator.return();
|
||||
}, "errorHandler");
|
||||
const iterator = Object.setPrototypeOf(
|
||||
{
|
||||
next() {
|
||||
const value = unconsumedEvents.shift();
|
||||
if (value) {
|
||||
return Promise.resolve(createIterResult(value, false));
|
||||
}
|
||||
if (error) {
|
||||
const p = Promise.reject(error);
|
||||
error = null;
|
||||
return p;
|
||||
}
|
||||
if (finished) {
|
||||
return Promise.resolve(createIterResult(void 0, true));
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
unconsumedPromises.push({ resolve, reject });
|
||||
});
|
||||
},
|
||||
return() {
|
||||
emitter.off(eventName, eventHandler);
|
||||
emitter.off("error", errorHandler);
|
||||
if (signal) {
|
||||
eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
||||
}
|
||||
finished = true;
|
||||
const doneResult = createIterResult(void 0, true);
|
||||
for (const promise of unconsumedPromises) {
|
||||
promise.resolve(doneResult);
|
||||
}
|
||||
return Promise.resolve(doneResult);
|
||||
},
|
||||
throw(err) {
|
||||
if (!err || !(err instanceof Error)) {
|
||||
throw new TypeError(
|
||||
`Expected Error instance to be thrown in AsyncEventEmitter.AsyncIterator. Got ${err}`
|
||||
);
|
||||
}
|
||||
error = err;
|
||||
emitter.off(eventName, eventHandler);
|
||||
emitter.off("error", errorHandler);
|
||||
},
|
||||
[Symbol.asyncIterator]() {
|
||||
return this;
|
||||
}
|
||||
},
|
||||
AsyncIteratorPrototype
|
||||
);
|
||||
emitter.on(eventName, eventHandler);
|
||||
if (eventName !== "error") {
|
||||
emitter.on("error", errorHandler);
|
||||
}
|
||||
if (signal) {
|
||||
eventTargetAgnosticAddListener(signal, "abort", abortListener);
|
||||
}
|
||||
return iterator;
|
||||
}
|
||||
};
|
||||
__name(_AsyncEventEmitter, "AsyncEventEmitter");
|
||||
var AsyncEventEmitter = _AsyncEventEmitter;
|
||||
function onceWrapper() {
|
||||
if (!this.fired) {
|
||||
this.eventEmitter.removeListener(this.eventName, this.wrapFn);
|
||||
this.fired = true;
|
||||
if (arguments.length === 0) {
|
||||
return this.listener.call(this.eventEmitter);
|
||||
}
|
||||
return this.listener.apply(this.eventEmitter, arguments);
|
||||
}
|
||||
}
|
||||
__name(onceWrapper, "onceWrapper");
|
||||
function getReason(signal) {
|
||||
return signal?.reason;
|
||||
}
|
||||
__name(getReason, "getReason");
|
||||
function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.off === "function") {
|
||||
emitter.off(name, listener);
|
||||
} else if (typeof emitter.removeEventListener === "function") {
|
||||
emitter.removeEventListener(name, listener, flags);
|
||||
}
|
||||
}
|
||||
__name(eventTargetAgnosticRemoveListener, "eventTargetAgnosticRemoveListener");
|
||||
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.on === "function") {
|
||||
if (flags?.once) {
|
||||
emitter.once(name, listener);
|
||||
} else {
|
||||
emitter.on(name, listener);
|
||||
}
|
||||
} else if (typeof emitter.addEventListener === "function") {
|
||||
emitter.addEventListener(name, listener, flags);
|
||||
}
|
||||
}
|
||||
__name(eventTargetAgnosticAddListener, "eventTargetAgnosticAddListener");
|
||||
var AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {
|
||||
}).prototype);
|
||||
function createIterResult(value, done) {
|
||||
return { value, done };
|
||||
}
|
||||
__name(createIterResult, "createIterResult");
|
||||
var _AbortError = class _AbortError extends Error {
|
||||
constructor(message = "The operation was aborted", options = void 0) {
|
||||
if (options !== void 0 && typeof options !== "object") {
|
||||
throw new TypeError(`Failed to create AbortError: options is not an object or undefined`);
|
||||
}
|
||||
super(message, options);
|
||||
this.code = "ABORT_ERR";
|
||||
this.name = "AbortError";
|
||||
}
|
||||
};
|
||||
__name(_AbortError, "AbortError");
|
||||
var AbortError = _AbortError;
|
||||
function handleMaybeAsync(emitter, result) {
|
||||
try {
|
||||
const the = result.then;
|
||||
const fin = result.finally;
|
||||
if (typeof the === "function") {
|
||||
the.call(result, void 0, (error) => {
|
||||
setTimeout(() => {
|
||||
emitter.emit("error", error);
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
if (typeof fin === "function") {
|
||||
const promiseId = String(++emitter["_wrapperId"]);
|
||||
emitter["_internalPromiseMap"].set(promiseId, result);
|
||||
fin.call(result, /* @__PURE__ */ __name(function final() {
|
||||
emitter["_internalPromiseMap"].delete(promiseId);
|
||||
}, "final"));
|
||||
}
|
||||
} catch (err) {
|
||||
emitter.emit("error", err);
|
||||
}
|
||||
}
|
||||
__name(handleMaybeAsync, "handleMaybeAsync");
|
||||
export {
|
||||
AbortError,
|
||||
AsyncEventEmitter
|
||||
};
|
||||
//# sourceMappingURL=index.mjs.map
|
||||
1
node_modules/@vladfrangu/async_event_emitter/dist/index.mjs.map
generated
vendored
Normal file
1
node_modules/@vladfrangu/async_event_emitter/dist/index.mjs.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
111
node_modules/@vladfrangu/async_event_emitter/package.json
generated
vendored
Normal file
111
node_modules/@vladfrangu/async_event_emitter/package.json
generated
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"name": "@vladfrangu/async_event_emitter",
|
||||
"version": "2.4.6",
|
||||
"description": "An event emitter implementation with async support in mind",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.mjs",
|
||||
"browser": "./dist/index.global.js",
|
||||
"unpkg": "./dist/index.global.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.cjs"
|
||||
},
|
||||
"default": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sideEffects": false,
|
||||
"author": "Vlad Frangu <me@vladfrangu.dev>",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"lint": "eslint src tests --ext ts --fix",
|
||||
"format": "prettier --write \"{src,tests}/**/*.ts\"",
|
||||
"docs": "typedoc",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"update": "yarn upgrade-interactive",
|
||||
"prepack": "yarn build",
|
||||
"build": "tsc -p src --noEmit && yarn clean && tsup",
|
||||
"clean": "node scripts/clean.mjs",
|
||||
"typecheck": "tsc -p src --noEmit",
|
||||
"bump": "cliff-jumper",
|
||||
"check-update": "cliff-jumper --dry-run"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^19.3.0",
|
||||
"@commitlint/config-conventional": "^19.2.2",
|
||||
"@favware/cliff-jumper": "^2.2.3",
|
||||
"@favware/npm-deprecate": "^1.0.7",
|
||||
"@sapphire/eslint-config": "^5.0.5",
|
||||
"@sapphire/prettier-config": "^2.0.0",
|
||||
"@sapphire/ts-config": "^5.0.1",
|
||||
"@typescript-eslint/eslint-plugin": "^7.14.1",
|
||||
"@typescript-eslint/parser": "^7.14.1",
|
||||
"@vitest/coverage-c8": "^0.33.0",
|
||||
"@vitest/coverage-v8": "^1.6.0",
|
||||
"cz-conventional-changelog": "^3.3.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"lint-staged": "^15.2.7",
|
||||
"prettier": "^3.3.2",
|
||||
"tsup": "^8.1.0",
|
||||
"typedoc": "^0.26.2",
|
||||
"typedoc-plugin-mdn-links": "^3.2.1",
|
||||
"typescript": "^5.5.2",
|
||||
"vitest": "^1.6.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/vladfrangu/async_event_emitter.git"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"!dist/*.tsbuildinfo",
|
||||
"THIRD_PARTY_LICENSE.md"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=v14.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
},
|
||||
"keywords": [
|
||||
"event emitter",
|
||||
"async",
|
||||
"event",
|
||||
"emitter"
|
||||
],
|
||||
"bugs": {
|
||||
"url": "https://github.com/vladfrangu/async_event_emitter/issues"
|
||||
},
|
||||
"commitlint": {
|
||||
"extends": [
|
||||
"@commitlint/config-conventional"
|
||||
]
|
||||
},
|
||||
"lint-staged": {
|
||||
"*": "prettier --ignore-unknown --write",
|
||||
"*.{mjs,js,ts}": "eslint --fix --ext mjs,js,ts"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "./node_modules/cz-conventional-changelog"
|
||||
}
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"packageManager": "yarn@4.3.1",
|
||||
"volta": {
|
||||
"node": "20.15.0",
|
||||
"yarn": "4.3.1"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user