🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

signal-controller

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

signal-controller - npm Package Compare versions

Comparing version
0.1.1
to
0.2.0
+4
-0
dist/index.d.ts

@@ -20,2 +20,6 @@ declare const ONCE_SYMBOL: unique symbol;

on<K extends keyof T>(signalName: K, options: SignalListenerOptions, listener: T[K]): void;
stream<K extends keyof T>(signalName: K): ReadableStream<Parameters<T[K]>>;
next<K extends keyof T>(signalName: K, { signal }?: {
signal?: AbortSignal | undefined;
}): Promise<Parameters<T[K]>>;
off(signalName: keyof T, listener: ListenerFunction): void;

@@ -22,0 +26,0 @@ [CLEAR](signalName?: keyof T): void;

const ONCE_SYMBOL = Symbol('once');
const EMIT = Symbol('emit');
const CLEAR = Symbol('clear');
// interface SignalControllerOptions {
// // TODO Events not immediately handled should be queued and, once a listener is added, it's immediately called
// enqueue?: boolean;
// }
export class SignalEmitter {

@@ -56,2 +52,19 @@ #listeners = new Map();

}
stream(signalName) {
const aborter = new AbortController();
return new ReadableStream({
start: (controller) => {
this.on(signalName, { signal: aborter.signal }, ((...args) => {
controller.enqueue(args);
}));
},
cancel: reason => aborter.abort(reason),
});
}
next(signalName, { signal = undefined } = {}) {
return new Promise((resolve, reject) => {
signal?.addEventListener('abort', reason => reject(reason));
this.on(signalName, { once: true }, ((values) => resolve(values)));
});
}
off(signalName, listener) {

@@ -58,0 +71,0 @@ delete listener[ONCE_SYMBOL];

+1
-1
{
"name": "signal-controller",
"version": "0.1.1",
"version": "0.2.0",
"description": "A lightweight event emitter with separation of concerns between emitter and listener inspired by the AbortController interface. It also supports using AbortController to remove listeners.",

@@ -5,0 +5,0 @@ "author": "Leonardo Raele <leonardoraele@gmail.com>",