{"_id":"events-to-async","_rev":"5-7ffaa57495147d6a07c93e309d4d3031","name":"events-to-async","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.1":{"name":"events-to-async","version":"1.0.1","keywords":["node.js","events","event-emitter","promise","async","async-iterator"],"author":{"name":"azu"},"license":"MIT","_id":"events-to-async@1.0.1","maintainers":[{"name":"azu","email":"azuciao@gmail.com"}],"homepage":"https://github.com/azu/events-to-async","bugs":{"url":"https://github.com/azu/events-to-async/issues"},"dist":{"shasum":"0ef5b16c04ac4a482dddd918bad5badcf7a73496","tarball":"https://registry.npmjs.org/events-to-async/-/events-to-async-1.0.1.tgz","fileCount":10,"integrity":"sha512-9J//aZFQphu074aWqt5Tjkf9nJv0B/l1SexyStxBoDy8Q8Hu2ngEkpmYpeF9wwbtvJtNgHVxW9pXnXBjZlil+A==","signatures":[{"sig":"MEUCIQDw0h/Sd6SeUgCWdqs90m7jkFSoWbze3MACfksfsDKTIwIgRdv3jT0bHWmPjFJ4Udo2dn7be2PvNHgKuUG5MqRjUz8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhIcDSCRA9TVsSAnZWagAAewsQAJXasdm3yvIi869WFyBn\nX0niZ25eMCZY5j9YOM3up1xrZnjp2toKSwfD2tF8Rj+3yd0Todr2ZYzQ23lD\nLIjdjosIML88vC97tsrpjX1tp6dSXhPGOSeV2ibRewsFMfOmMHJbImIh1iVm\n6OA7NkUP/M5lGZ9BK/cR3ELhQ9xL1DNTB5DYiU4qiWVzY2tycO29+K3WjewZ\nzgpqKRAIkBmSLs8A09ViXSenKc7qKjLsX1beGNZ02RgPdeIQrw/L+jpx+//B\nUsNAdpqO+2EniGhW0YwQECxbvj0qxHWz21Lc4d7jSGh3VrNJTTRaqEd4L3eh\nUj8E02jhvOLy+poSERm0IL7NTYTcyLVIhr41z1xDFdf0xrHl/ZjaSuzVEPXm\n4ndHDMaDgp5SHlyAj91XgIuNmorBS8+IdADxKrkfSWsSnMxa0P7dQWMO47Gb\nPizytNmJa2INLgpqu0oF9hT3cMJNuL4bYBveWQkVQG/aVlNgqT0xHqp+azvO\nYFRb0KA/erU2elL3viaIu/EqAeZwMVo2csWXWhcXBac6afr6qSR9kSJCeIvb\nV5cjGDbFAbGYKmWOFVeT06BMpVvV3gPittT4e2Dj5ZrvF3oJkLnrXj6Lp79c\n9HvzPRVfmgpHGpTL6j0scwhrYIoDgF6tmWS76ioU2qxEEHjFAzCUqsZzNEY/\nRjFk\r\n=FVBQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/events-to-async.js","types":"lib/events-to-async.d.ts","module":"module/events-to-async.js","gitHead":"86252adca129aa4ade6daf659fad2a3d73d9435d","scripts":{"test":"mocha \"test/**/*.ts\"","build":"tsc -p . && tsc -p ./tsconfig.module.json","clean":"rimraf lib/ module/","watch":"tsc -p . --watch","format":"prettier --write \"**/*.{js,jsx,ts,tsx,css}\"","prepare":"git config --local core.hooksPath .githooks","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"azu","email":"azuciao@gmail.com"},"prettier":{"tabWidth":4,"printWidth":120,"singleQuote":false,"trailingComma":"none"},"repository":{"url":"git+https://github.com/azu/events-to-async.git","type":"git"},"_npmVersion":"6.14.13","description":"Treat EventEmitter-like object using Async/Await, Async Iterator.","directories":{"lib":"lib","test":"test"},"lint-staged":{"*.{js,jsx,ts,tsx,css}":["prettier --write"]},"sideEffects":false,"_nodeVersion":"14.17.5","_hasShrinkwrap":false,"devDependencies":{"mocha":"^9.0.3","rimraf":"^3.0.2","ts-node":"^10.2.0","eventmit":"^1.1.0","prettier":"^2.3.2","typescript":"^4.3.5","@types/node":"^16.6.1","lint-staged":"^11.1.2","@types/mocha":"^9.0.0","abort-controller":"^3.0.0","ts-node-test-register":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/events-to-async_1.0.1_1629602002860_0.8274394558232996","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"events-to-async","version":"2.0.0","keywords":["node.js","events","event-emitter","promise","async","async-iterator"],"author":{"name":"azu"},"license":"MIT","_id":"events-to-async@2.0.0","maintainers":[{"name":"azu","email":"azuciao@gmail.com"}],"homepage":"https://github.com/azu/events-to-async","bugs":{"url":"https://github.com/azu/events-to-async/issues"},"dist":{"shasum":"3b2987a9c6c9833093d048379fa8640b6c62afb3","tarball":"https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.0.tgz","fileCount":14,"integrity":"sha512-NiZEr4g51nI4/lz/6NdwMqK/TLIctlnp9TQ3wCJjlRp47VgrthUZE4nrk2UhfZ8VzoQ/Xyth+G6MKioLCt0FVA==","signatures":[{"sig":"MEYCIQDTEXpXlOf4l3Aye3KBl57oKSv8z3B6H9daykLNwM17uQIhAPwJu5vgtiyzpOJ3KC2lo8eeLZKxm5u1vTfvnXj9SYrS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyS0oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp7ow//bkWt5tmvOR7EOZrfdFuArtQdCV7KHysn8cIV2wPT25Cvh6dC\r\nMFZAsokfVOBANe+tdipqW773cCWBymtgZLo5/Y09ZN3wR9ILm2xkPhd8DWdk\r\nt5ugBVpRNCOK47lqoEQt7Gul8XNq+LFiXZD/KMQ3Gpl+fnZQLHCucXAJkOR/\r\njjuhKBIWo9CeO5N9iLBalHLHsD+SDO1Iuj9fPGK51LbO1ejcoOL6nMkxSkNO\r\nTf1+T9H5JExDf4N9zH5Vro+bJ4hxjEu1p3DDSaYBV6SZbsQ7UWog6mEjKRjJ\r\nyvlsF0AN1iWanYuYEPAi5Q5B/HOBxUX2QfoXI+4RifV4PZOWocIETd75r0jI\r\n57htkCR7b1yUtypNKel2tpoPD3+/YV5p2c421iM4LRgJhdEUzUYQaoP4G1Zw\r\nyBAeeKYEu+Uxu/h/0TwkGE6iX5n/w8yLJ/loxj3wyC9K8TEescsYZUoB6Jn3\r\nWpEPAuvAPrLWbbA6cVcZUuq5lPAuqmnwcpyAQq4KBGRQiO0R5gOT53BjsXoc\r\nYskK44Ye8lKjUOtjgVwoDVVIM8zekWTWX0dOYzzqUcQjcJwW1XUqhdEt1Ilc\r\nItXj84F5Ju5VWoyz462nIWhnVpd8SrzFVFGxrwyfbTZEc1olDv4H3S7aN9AS\r\nj+YeKaBY4oyRxGrxJUgTxvqT4RVQQ2E1jBc=\r\n=flxQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/events-to-async.js","type":"module","types":"./module/events-to-async.d.ts","module":"./module/events-to-async.js","exports":{".":{"import":{"types":"./module/events-to-async.d.ts","default":"./module/events-to-async.js"},"default":"./lib/events-to-async.js","require":{"types":"./lib/events-to-async.d.ts","default":"./lib/events-to-async.js"}},"./package.json":"./package.json"},"gitHead":"0d1082d971874b66a818f38ec36ceac17cdcc7e7","scripts":{"test":"mocha","build":"tsc -p . && tsc -p ./tsconfig.cjs.json && tsconfig-to-dual-package","clean":"git clean -fx lib/ module/","watch":"tsc -p . --watch","format":"prettier --write \"**/*.{js,jsx,ts,tsx,css}\"","prepare":"git config --local core.hooksPath .githooks","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"azu","email":"azuciao@gmail.com"},"prettier":{"tabWidth":4,"printWidth":120,"singleQuote":false,"trailingComma":"none"},"repository":{"url":"git+https://github.com/azu/events-to-async.git","type":"git"},"_npmVersion":"9.2.0","description":"Treat EventEmitter-like object using Async/Await, Async Iterator.","directories":{"lib":"lib","test":"test"},"lint-staged":{"*.{js,jsx,ts,tsx,css}":["prettier --write"]},"sideEffects":false,"_nodeVersion":"16.18.0","_hasShrinkwrap":false,"packageManager":"yarn@1.22.19","devDependencies":{"mocha":"^10.2.0","rimraf":"^4.0.5","ts-node":"^10.9.1","eventmit":"^2.0.4","prettier":"^2.8.3","typescript":"^4.9.4","@types/node":"^18.11.18","lint-staged":"^13.1.0","@types/mocha":"^10.0.1","tsconfig-to-dual-package":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-to-async_2.0.0_1674128680131_0.4599328217887759","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"events-to-async","version":"2.0.1","keywords":["node.js","events","event-emitter","promise","async","async-iterator"],"author":{"name":"azu"},"license":"MIT","_id":"events-to-async@2.0.1","maintainers":[{"name":"azu","email":"azuciao@gmail.com"}],"homepage":"https://github.com/azu/events-to-async","bugs":{"url":"https://github.com/azu/events-to-async/issues"},"dist":{"shasum":"068be50dad7db45d84f90c7eda62382eaba9809e","tarball":"https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.1.tgz","fileCount":14,"integrity":"sha512-RtnLYrMbXp4JkZIoZu+3VTqV21bNVBlJBZ4NmtwvMNqSE3qouhxv2gvLE4JJDaQc54ioPkrX74V6x+hp/hqjkQ==","signatures":[{"sig":"MEUCIQDWWMpOq2xnvZwgRH28Pr/W5d1RYlwvp0LkOYil4/iC4gIgVox4B2mYzvWaajR5Q1pzsCkWK1hXvvW290IAvVy8azw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31427},"main":"./lib/events-to-async.js","type":"module","types":"./module/events-to-async.d.ts","module":"./module/events-to-async.js","exports":{".":{"import":{"types":"./module/events-to-async.d.ts","default":"./module/events-to-async.js"},"default":"./lib/events-to-async.js","require":{"types":"./lib/events-to-async.d.ts","default":"./lib/events-to-async.js"}},"./package.json":"./package.json"},"gitHead":"25dd2cbf26086c8005b874664264b773c68a6fc4","scripts":{"test":"mocha","build":"tsc -p . && tsc -p ./tsconfig.cjs.json && tsconfig-to-dual-package","clean":"git clean -fx lib/ module/","watch":"tsc -p . --watch","format":"prettier --write \"**/*.{js,jsx,ts,tsx,css}\"","prepare":"git config --local core.hooksPath .githooks","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"azu","email":"azuciao@gmail.com"},"prettier":{"tabWidth":4,"printWidth":120,"singleQuote":false,"trailingComma":"none"},"repository":{"url":"git+https://github.com/azu/events-to-async.git","type":"git"},"_npmVersion":"9.8.1","description":"Treat EventEmitter-like object using Async/Await, Async Iterator.","directories":{"lib":"lib","test":"test"},"lint-staged":{"*.{js,jsx,ts,tsx,css}":["prettier --write"]},"sideEffects":false,"_nodeVersion":"20.8.0","_hasShrinkwrap":false,"packageManager":"yarn@1.22.19","devDependencies":{"mocha":"^10.2.0","rimraf":"^4.0.5","ts-node":"^10.9.1","eventmit":"^2.0.4","prettier":"^2.8.3","typescript":"^4.9.4","@types/node":"^18.11.18","lint-staged":"^13.1.0","@types/mocha":"^10.0.1","tsconfig-to-dual-package":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-to-async_2.0.1_1697066226502_0.9075541299701584","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"events-to-async","version":"2.0.2","description":"Treat EventEmitter-like object using Async/Await, Async Iterator.","keywords":["node.js","events","event-emitter","promise","async","async-iterator"],"homepage":"https://github.com/azu/events-to-async","bugs":{"url":"https://github.com/azu/events-to-async/issues"},"repository":{"type":"git","url":"git+https://github.com/azu/events-to-async.git"},"license":"MIT","author":{"name":"azu"},"sideEffects":false,"type":"module","exports":{".":{"import":{"types":"./module/events-to-async.d.ts","default":"./module/events-to-async.js"},"require":{"types":"./lib/events-to-async.d.ts","default":"./lib/events-to-async.js"},"default":"./lib/events-to-async.js"},"./package.json":"./package.json"},"main":"./lib/events-to-async.js","module":"./module/events-to-async.js","types":"./module/events-to-async.d.ts","directories":{"lib":"lib","test":"test"},"scripts":{"build":"tsc -p . && tsc -p ./tsconfig.cjs.json && tsconfig-to-dual-package","clean":"git clean -fx lib/ module/","format":"prettier --write \"**/*.{js,jsx,ts,tsx,css}\"","prepare":"git config --local core.hooksPath .githooks","prepublishOnly":"npm run clean && npm run build","test":"mocha","watch":"tsc -p . --watch"},"lint-staged":{"*.{js,jsx,ts,tsx,css}":["prettier --write"]},"prettier":{"printWidth":120,"singleQuote":false,"tabWidth":4,"trailingComma":"none"},"devDependencies":{"@types/mocha":"^10.0.1","@types/node":"^18.11.18","eventmit":"^2.0.4","lint-staged":"^13.1.0","mocha":"^10.2.0","prettier":"^2.8.3","rimraf":"^4.0.5","ts-node":"^10.9.1","tsconfig-to-dual-package":"^1.1.0","typescript":"^4.9.4"},"packageManager":"yarn@1.22.19","_id":"events-to-async@2.0.2","gitHead":"cd4773599c5910f714a21515595043db2e898268","_nodeVersion":"22.19.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-WzI6m/SU+F38t2tejHh6IQuQkNZ0dMOmSEmODJb9czaeMYtQ5FVZ+b6DOHr3hC6hNKNnn9CwDUN8mJiAkWSI9Q==","shasum":"c962a16eafed7bdf1c1c08801ed712e2db0d3a00","tarball":"https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.2.tgz","fileCount":14,"unpackedSize":31427,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/events-to-async@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCJjMBgzNz5GG9Di82TesqeRn4AsS/H4ZoNYRRQdGFO6wIhALVPmNrkp5uzkh65v/kb/vUK01ONiJKDUE06ovF/37So"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de1fe503-788d-4ba8-8863-8c444d35fd98"}},"maintainers":[{"name":"azu","email":"azuciao@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/events-to-async_2.0.2_1757118593806_0.8715600941132167"},"_hasShrinkwrap":false}},"time":{"created":"2021-08-22T03:13:22.810Z","modified":"2025-09-06T00:29:54.430Z","1.0.1":"2021-08-22T03:13:22.997Z","2.0.0":"2023-01-19T11:44:40.305Z","2.0.1":"2023-10-11T23:17:06.711Z","2.0.2":"2025-09-06T00:29:54.035Z"},"bugs":{"url":"https://github.com/azu/events-to-async/issues"},"author":{"name":"azu"},"license":"MIT","homepage":"https://github.com/azu/events-to-async","keywords":["node.js","events","event-emitter","promise","async","async-iterator"],"repository":{"type":"git","url":"git+https://github.com/azu/events-to-async.git"},"description":"Treat EventEmitter-like object using Async/Await, Async Iterator.","maintainers":[{"name":"azu","email":"azuciao@gmail.com"}],"readme":"# events-to-async\n\nTreat EventEmitter-like object using Async/Await or Async Iterator.\n\nSimilar one of Node.js [`events.on`](https://nodejs.org/api/events.html#events_events_on_emitter_eventname_options)\nand [`event.once`](https://nodejs.org/api/events.html#events_events_once_emitter_name_options), but it is generic.\n\n## Features\n\n- events to Async Iterator\n- once event to a Promise\n- support EventEmitter-like libraries\n    - [`events.on`](https://nodejs.org/api/events.html#events_events_on_emitter_eventname_options)\n      and [`event.once`](https://nodejs.org/api/events.html#events_events_once_emitter_name_options) only\n      support `events`\n- LightWeight: [~1kb](https://bundlephobia.com/package/events-to-async) (gzip)\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n    npm install events-to-async\n\n## Usage\n\nonce an event to Promise\n\n```js\nimport { EventEmitter } from \"events\";\nimport { on } from \"events-to-async\";\n\nconst events = new EventEmitter();\nsetTimeout(() => {\n    events.emit(\"change\", 1);\n});\nconst event = await once((handler) => events.once(\"change\", handler));\nconsole.log(event); // => [1]\n```\n\non events to AsyncIterator\n\n```js\nimport { EventEmitter } from \"events\";\nimport { on } from \"events-to-async\";\n\nconst events = new EventEmitter();\nconst asyncIterator = on((handler) => {\n    event.on(\"change\", handler); // Listen\n    return () => {\n        // This function is called on occuring error or `break;`\n        event.off(\"change\", handler); // UnListen\n    }\n});\nsetTimeout(() => {\n    events.emit(\"change\", 1);\n    events.emit(\"change\", 2);\n    events.emit(\"change\", 3);\n});\nfor await(const event of asyncIterator) {\n    console.log(event); // [1] → [2] → [3]\n}\n// Unreachable here\n```\n\nYou can stop the async iterator by using `break;`\n\n```js\nimport { EventEmitter } from \"events\";\nimport { on } from \"events-to-async\";\n\nconst events = new EventEmitter();\nconst asyncIterator = on((handler) => {\n    events.on(\"change\", handler); // Listen\n    return () => {\n        // This function is called on occuring error or `break;`\n        events.off(\"change\", handler); // UnListen\n    }\n});\nsetTimeout(() => {\n    events.emit(\"change\", 1);\n    events.emit(\"change\", 2);\n    events.emit(\"change\", 3);\n});\nfor await(const [num] of asyncIterator) {\n    console.log(num); // 1 → 2 → 3\n    if (num === 3) {\n        break;\n    }\n}\nconsole.log(\"4!!!\"); \n```\n\n### AbortController supports\n\nYou can cancel events using  [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).\n\n- Browser: [Modern browsers](https://caniuse.com/abortcontroller) supports\n- Node.js 15+: supports\n    - Node.js 14 requires polyfills\n    - [abort-controller - npm](https://www.npmjs.com/package/abort-controller)\n    - [node-abort-controller - npm](https://www.npmjs.com/package/node-abort-controller)\n\nonce an event with cancel\n\n```js\nimport { EventEmitter } from \"events\";\nimport { on } from \"events-to-async\";\n\nconst events = new EventEmitter();\nconst abortController = new AbortController();\nconst event = once((handler) => {\n    event.once(\"change\", handler);\n    return () => {\n        event.off(\"change\", handler);  // call it when occur error or abort\n    }\n}, { signal: abortController.signal });\n// Abort\nabortController.abort();\nawait event; // => throw Abort Error\n```\n\non events with cancel\n\n```js\nimport { EventEmitter } from \"events\";\nimport { on } from \"events-to-async\";\n\nconst events = new EventEmitter();\nconst abortController = new AbortController();\nconst asyncIterator = on((handler) => {\n    events.on(\"change\", handler);\n    return () => {\n        events.off(\"change\", handler);\n    }\n}, { signal: abortController.signal });\n// Abort\nabortController.abort();\n```\n\n### TypeScript supports\n\n`on<T>` and `once<T>` support generics that represent iterated value.\n\n:memo: `on<T>` and `once<T>` always return an array\n\n```ts\nimport { EventEmitter } from \"events\";\nimport { on } from \"events-to-async\";\n\nconst events = new EventEmitter();\ntype Event = number;\nconst asyncIterator = on<[Event]>((handler) => {\n    events.on(\"change\", handler);\n    return () => events.off(\"change\", handler)\n});\nsetTimeout(() => {\n    events.emit(\"change\", 1);\n    events.emit(\"change\", 2);\n    events.emit(\"change\", 3);\n});\nfor await(const event of asyncIterator) {\n    console.log(event); // [1] → [2] → [3]\n}\n```\n\n### Yet another EventEmitter supports\n\nThis library aim to support yet another `events` module like [eventmit](https://github.com/azu/eventmit).\n\n```ts\nimport { eventmit } from \"eventmit\";\nimport { on } from \"events-to-async\";\n\ntype Event = { key: string };\nconst events = eventmit<Event>();\nconst asyncIterator = on<[Event]>((handler) => {\n    events.on(handler);\n    return () => events.off(handler);\n});\nsetTimeout(() => {\n    events.emit({ key: \"value\" });\n});\nfor await (const event of asyncIterator) {\n    assert.deepStrictEqual(event, [{ key: \"value\" }]);\n    break;\n}\n```\n\n## Changelog\n\nSee [Releases page](https://github.com/azu/events-to-async/releases).\n\n## Running tests\n\nInstall devDependencies and Run `npm test`:\n\n    npm test\n\n## Contributing\n\nPull requests and stars are always welcome.\n\nFor bugs and feature requests, [please create an issue](https://github.com/azu/events-to-async/issues).\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b my-new-feature`\n3. Commit your changes: `git commit -am 'Add some feature'`\n4. Push to the branch: `git push origin my-new-feature`\n5. Submit a pull request :D\n\n## Author\n\n- azu: [GitHub](https://github.com/azu), [Twitter](https://twitter.com/azu_re)\n\n## License\n\nMIT © azu\n\n## Related\n\n- Node.js [`events.on`](https://nodejs.org/api/events.html#events_events_on_emitter_eventname_options)\n  and [`event.once`](https://nodejs.org/api/events.html#events_events_once_emitter_name_options): <https://github.com/nodejs/node/blob/master/lib/events.js>\n- [Async Iterable `EventEmitter.on(emitter, \"event\")` · Issue #27847 · nodejs/node](https://github.com/nodejs/node/issues/27847)\n- [rolftimmermans/event-iterator: Convert event emitters and event targets to ES async iterators](https://github.com/rolftimmermans/event-iterator)\n","readmeFilename":"README.md"}