UNPKG

matterbridge-dyson-robot

Version:

A Matterbridge plugin that connects Dyson robot vacuums and air treatment devices to the Matter smart home ecosystem via their local or cloud MQTT APIs.

35 lines 1.42 kB
// Matterbridge plugin for Dyson robot vacuum and air treatment devices // Copyright © 2025-2026 Alexander Thoukydides import { EventEmitter } from 'events'; // Node doesn't use DOMException for AbortError... class AbortError extends Error { constructor(cause) { super('The operation was aborted', { cause }); this.name = 'AbortError'; } } // An EventEmitter with well-behaved Promisified listeners export class AsyncEventEmitter extends EventEmitter { // Typed event.once() that ignores unrelated errors async onceAsync(eventName, signal) { // Handle already-aborted signal immediately if (signal?.aborted) throw new AbortError(signal.reason); // Otherwise return a promise that... return new Promise((resolve, reject) => { // ... resolves when the event occurs const resolver = ((...args) => { signal?.removeEventListener('abort', abortListener); resolve(args); }); this.once(eventName, resolver); // ... or rejects if the signal is aborted const abortListener = () => { this.off(eventName, resolver); reject(new AbortError(signal?.reason)); }; signal?.addEventListener('abort', abortListener, { once: true }); }); } } //# sourceMappingURL=async-eventemitter.js.map