UNPKG

evnty

Version:

Async-first, reactive event handling library for complex event flows in browser and Node.js

102 lines (100 loc) 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: Object.getOwnPropertyDescriptor(all, name).get }); } _export(exports, { get Async () { return Async; }, get Disposer () { return Disposer; } }); class Disposer { #target; #abortSignal; constructor(target, abortSignal){ if (abortSignal?.aborted) return; this.#target = target; if (abortSignal) { this.#abortSignal = abortSignal; abortSignal.addEventListener('abort', this); } } get disposed() { return !this.#target; } [Symbol.dispose]() { if (!this.#target) return false; this.#target = undefined; if (this.#abortSignal) { this.#abortSignal.removeEventListener('abort', this); this.#abortSignal = undefined; } return true; } handleEvent() { this.#target?.[Symbol.dispose](); } } class Async { #sink; #disposer; constructor(abortSignal){ this.#disposer = new Disposer(this, abortSignal); } get disposed() { return this.#disposer.disposed; } get sink() { return this.#sink ??= this.emit.bind(this); } handleEvent(event) { this.emit(event); } catch(onrejected) { return this.receive().catch(onrejected); } finally(onfinally) { return this.receive().finally(onfinally); } then(onfulfilled, onrejected) { return this.receive().then(onfulfilled, onrejected); } async next() { try { const value = await this.receive(); return { value, done: false }; } catch { return { value: undefined, done: true }; } } async return() { this.dispose?.(); return { value: undefined, done: true }; } [Symbol.asyncIterator]() { return this; } [Symbol.dispose]() { if (this.#disposer[Symbol.dispose]()) { this.dispose?.(); } } } //# sourceMappingURL=async.cjs.map