event-emission 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,6 +9,7 @@ A lightweight, zero-dependency, type-safe event system with DOM EventTarget ergo
9
9
  - **Typed events** - Event maps keep payloads and event names in sync
10
10
  - **DOM compatible** - `EmissionEvent` is a superset of the built-in `Event`
11
11
  - **Familiar API** - `addEventListener`, `removeEventListener`, `dispatchEvent`
12
+ - **Node.js compatible** - `emit`, `on`, `off`, `addListener`, `removeListener`, `prependListener`, and more
12
13
  - **TC39 Observable** - Fully compliant `Observable` implementation (passes all `es-observable-tests`)
13
14
  - **Async iteration** - `for await...of` over events with backpressure options
14
15
  - **Wildcard listeners** - Listen to `*` or namespaced `user:*` patterns
@@ -169,9 +170,21 @@ const state = createEventTarget(
169
170
 
170
171
  ## Event listeners
171
172
 
173
+ ### `on(type, listener)`
174
+
175
+ When called with a listener function (or `EventListenerObject`), `on` behaves like Node.js `addListener`—it registers the listener and returns an unsubscribe function.
176
+
177
+ ```typescript
178
+ const unsubscribe = events.on('message', (event) => {
179
+ console.log(event.detail.text);
180
+ });
181
+
182
+ unsubscribe(); // Remove the listener
183
+ ```
184
+
172
185
  ### `on(type, options?)`
173
186
 
174
- Creates an `Observable` for a specific event type. This follows the `ObservableEventTarget` proposal, allowing for powerful composition.
187
+ When called without a listener (or with an options object / boolean), `on` creates an `Observable` for a specific event type. This follows the `ObservableEventTarget` proposal, allowing for powerful composition.
175
188
 
176
189
  ```typescript
177
190
  const clicks = button.on('click', { passive: true });
@@ -241,6 +254,70 @@ events.addWildcardListener('user:*', (event) => {
241
254
 
242
255
  Wildcard events include `{ type: pattern, originalType, detail }`.
243
256
 
257
+ ## Node.js EventEmitter compatibility
258
+
259
+ Every event target also exposes the familiar Node.js `EventEmitter` interface, so you can use whichever style fits your codebase.
260
+
261
+ ### `emit(type, detail)`
262
+
263
+ Dispatches an event and returns `true` if listeners were registered for that type, `false` otherwise.
264
+
265
+ ```typescript
266
+ events.on('message', (event) => {
267
+ console.log(event.detail.text);
268
+ });
269
+
270
+ events.emit('message', { text: 'hello' }); // true
271
+ events.emit('unknown', undefined); // false
272
+ ```
273
+
274
+ ### `off(type, listener)`
275
+
276
+ Removes a listener. Alias for `removeEventListener(type, listener)`.
277
+
278
+ ### `addListener(type, listener)` / `removeListener(type, listener)`
279
+
280
+ Aliases for `addEventListener` and `removeEventListener`.
281
+
282
+ ### `prependListener(type, listener)`
283
+
284
+ Adds a listener at the **beginning** of the listener list. Returns an unsubscribe function.
285
+
286
+ ```typescript
287
+ events.addEventListener('data', () => console.log('second'));
288
+ events.prependListener('data', () => console.log('first'));
289
+
290
+ events.emit('data', value); // logs "first", then "second"
291
+ ```
292
+
293
+ ### `prependOnceListener(type, listener)`
294
+
295
+ Like `prependListener`, but the listener is removed after its first invocation.
296
+
297
+ ### `listeners(type)`
298
+
299
+ Returns an array of the listener functions registered for the given type.
300
+
301
+ ### `rawListeners(type)`
302
+
303
+ Like `listeners`, but once-listeners return a wrapper function with a `.listener` property pointing to the original callback.
304
+
305
+ ### `listenerCount(type)`
306
+
307
+ Returns the number of listeners registered for the given type.
308
+
309
+ ### `eventNames()`
310
+
311
+ Returns an array of event type strings that currently have registered listeners.
312
+
313
+ ```typescript
314
+ events.on('foo', () => {});
315
+ events.on('bar', () => {});
316
+
317
+ events.eventNames(); // ['foo', 'bar']
318
+ events.listenerCount('foo'); // 1
319
+ ```
320
+
244
321
  ## Async iteration
245
322
 
246
323
  You can use `for await...of` to consume events. This is great for stream-processing events with backpressure.
@@ -85,6 +85,11 @@ export declare abstract class EventEmission<E extends Record<string, any>> {
85
85
  * Returns false if the emitter has been completed, true otherwise.
86
86
  */
87
87
  dispatchEvent<K extends keyof E & string>(event: DispatchEventInput<E[K], K> | DOMEventLike): boolean;
88
+ /**
89
+ * Adds a listener for the specified event type (Node.js-style).
90
+ * Returns an unsubscribe function.
91
+ */
92
+ on<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
88
93
  /**
89
94
  * Returns an observable for the specified event type.
90
95
  */
@@ -107,6 +112,51 @@ export declare abstract class EventEmission<E extends Record<string, any>> {
107
112
  * Forwards all events. If mapFn returns null, the event is skipped.
108
113
  */
109
114
  pipe<T extends Record<string, any>>(target: EventTargetLike<T>, mapFn?: <K extends keyof E & string>(event: EmissionEvent<E[K], K>) => DispatchEventInput<T[keyof T & string], keyof T & string> | null): () => void;
115
+ /**
116
+ * Emits an event with the given type and detail.
117
+ * Returns true if the event type had registered listeners, false otherwise.
118
+ */
119
+ emit<K extends keyof E & string>(type: K, detail: E[K]): boolean;
120
+ /**
121
+ * Removes a listener for the specified event type.
122
+ */
123
+ off<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): void;
124
+ /**
125
+ * Adds a listener for the specified event type.
126
+ * Returns an unsubscribe function.
127
+ */
128
+ addListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
129
+ /**
130
+ * Removes a listener for the specified event type.
131
+ */
132
+ removeListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): void;
133
+ /**
134
+ * Adds a listener at the beginning of the listener list for the specified type.
135
+ * Returns an unsubscribe function.
136
+ */
137
+ prependListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
138
+ /**
139
+ * Adds a one-time listener at the beginning of the listener list.
140
+ * Returns an unsubscribe function.
141
+ */
142
+ prependOnceListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
143
+ /**
144
+ * Returns an array of listener functions for the specified event type.
145
+ */
146
+ listeners<K extends keyof E & string>(type: K): Array<EventListenerLike<EmissionEvent<E[K], K>>>;
147
+ /**
148
+ * Returns an array of listener functions for the specified event type.
149
+ * Once-listeners return a wrapper with a `.listener` property pointing to the original.
150
+ */
151
+ rawListeners<K extends keyof E & string>(type: K): Array<EventListenerLike<EmissionEvent<E[K], K>>>;
152
+ /**
153
+ * Returns the number of listeners for the specified event type.
154
+ */
155
+ listenerCount<K extends keyof E & string>(type: K): number;
156
+ /**
157
+ * Returns an array of event type names that have registered listeners.
158
+ */
159
+ eventNames(): Array<string>;
110
160
  /**
111
161
  * Adds a wildcard listener that receives events matching the pattern.
112
162
  * Use '*' for all events, or 'namespace:*' for namespaced events.
@@ -1 +1 @@
1
- {"version":3,"file":"event-emission.d.ts","sourceRoot":"","sources":["../src/event-emission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-emission.d.ts","sourceRoot":"","sources":["../src/event-emission.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAIV,eAAe,EAOhB,MAAM,SAAS,CAAC;AAyCjB;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,+BACf,SAAQ,wBAAwB,EAAE,cAAc;IAChD,+CAA+C;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,IAAI,CAAC,EAAE,wBAAwB,GAC9B,eAAe,CAAC,CAAC,CAAC,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,+BAA+B,GACpC,CAAC,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAKV,eAAe,EAOhB,MAAM,SAAS,CAAC;AAyCjB;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,+BACf,SAAQ,wBAAwB,EAAE,cAAc;IAChD,+CAA+C;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,IAAI,CAAC,EAAE,wBAAwB,GAC9B,eAAe,CAAC,CAAC,CAAC,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,+BAA+B,GACpC,CAAC,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC"}
package/dist/index.cjs CHANGED
@@ -644,7 +644,17 @@ function createEventTarget(targetOrOpts, opts) {
644
644
  "complete",
645
645
  "subscribe",
646
646
  "toObservable",
647
- "events"
647
+ "events",
648
+ "emit",
649
+ "off",
650
+ "addListener",
651
+ "removeListener",
652
+ "prependListener",
653
+ "prependOnceListener",
654
+ "listeners",
655
+ "rawListeners",
656
+ "listenerCount",
657
+ "eventNames"
648
658
  ];
649
659
  for (const name of methodNames) {
650
660
  Object.defineProperty(proxy, name, {
@@ -922,7 +932,7 @@ function createEventTargetInternal(opts) {
922
932
  }
923
933
  }
924
934
  };
925
- const addEventListener = (type, listener, options) => {
935
+ const addListenerInternal = (type, listener, options, position) => {
926
936
  if (isCompleted || !listener) {
927
937
  return () => {};
928
938
  }
@@ -949,7 +959,11 @@ function createEventTargetInternal(opts) {
949
959
  signal,
950
960
  removed: false
951
961
  };
952
- list.push(record);
962
+ if (position === "prepend") {
963
+ list.unshift(record);
964
+ } else {
965
+ list.push(record);
966
+ }
953
967
  const unsubscribe2 = () => removeListenerRecord(type, record);
954
968
  if (signal) {
955
969
  const onAbort = () => removeListenerRecord(type, record);
@@ -960,6 +974,9 @@ function createEventTargetInternal(opts) {
960
974
  }
961
975
  return unsubscribe2;
962
976
  };
977
+ const addEventListener = (type, listener, options) => {
978
+ return addListenerInternal(type, listener, options, "append");
979
+ };
963
980
  const addWildcardListener = (pattern, listener, options) => {
964
981
  if (isCompleted)
965
982
  return () => {};
@@ -1130,7 +1147,18 @@ function createEventTargetInternal(opts) {
1130
1147
  }
1131
1148
  wildcardListeners.clear();
1132
1149
  };
1133
- const on = (type, options) => {
1150
+ const isListenerArg = (arg) => {
1151
+ if (typeof arg === "function")
1152
+ return true;
1153
+ if (arg && typeof arg === "object" && typeof arg.handleEvent === "function")
1154
+ return true;
1155
+ return false;
1156
+ };
1157
+ const on = (type, optionsOrListener) => {
1158
+ if (isListenerArg(optionsOrListener)) {
1159
+ return addEventListener(type, optionsOrListener);
1160
+ }
1161
+ const options = optionsOrListener;
1134
1162
  return new Observable((observer) => {
1135
1163
  let opts2;
1136
1164
  if (typeof options === "boolean") {
@@ -1486,6 +1514,72 @@ function createEventTargetInternal(opts) {
1486
1514
  };
1487
1515
  return iterator;
1488
1516
  }
1517
+ const emit = (type, detail) => {
1518
+ if (isCompleted)
1519
+ return false;
1520
+ const list = listeners.get(type);
1521
+ const hasListeners = list !== undefined && list.length > 0;
1522
+ let hasWildcard = false;
1523
+ if (wildcardListeners.size > 0) {
1524
+ for (const rec of wildcardListeners) {
1525
+ if (matchesWildcard(type, rec.pattern)) {
1526
+ hasWildcard = true;
1527
+ break;
1528
+ }
1529
+ }
1530
+ }
1531
+ dispatchEvent({ type, detail });
1532
+ return hasListeners || hasWildcard;
1533
+ };
1534
+ const off = (type, listener) => {
1535
+ removeEventListener(type, listener);
1536
+ };
1537
+ const addListener = (type, listener) => {
1538
+ return addEventListener(type, listener);
1539
+ };
1540
+ const removeListener = (type, listener) => {
1541
+ removeEventListener(type, listener);
1542
+ };
1543
+ const prependListener = (type, listener) => {
1544
+ return addListenerInternal(type, listener, undefined, "prepend");
1545
+ };
1546
+ const prependOnceListener = (type, listener) => {
1547
+ return addListenerInternal(type, listener, { once: true }, "prepend");
1548
+ };
1549
+ const getListeners = (type) => {
1550
+ const list = listeners.get(type);
1551
+ if (!list)
1552
+ return [];
1553
+ return list.filter((r) => !r.removed).map((r) => r.original);
1554
+ };
1555
+ const rawListenersMethod = (type) => {
1556
+ const list = listeners.get(type);
1557
+ if (!list)
1558
+ return [];
1559
+ return list.filter((r) => !r.removed).map((r) => {
1560
+ if (r.once) {
1561
+ const wrapper = (...args) => r.callback(...args);
1562
+ wrapper.listener = r.original;
1563
+ return wrapper;
1564
+ }
1565
+ return r.original;
1566
+ });
1567
+ };
1568
+ const listenerCount = (type) => {
1569
+ const list = listeners.get(type);
1570
+ if (!list)
1571
+ return 0;
1572
+ return list.filter((r) => !r.removed).length;
1573
+ };
1574
+ const eventNamesMethod = () => {
1575
+ const names = [];
1576
+ for (const [type, list] of listeners) {
1577
+ if (list.some((r) => !r.removed)) {
1578
+ names.push(type);
1579
+ }
1580
+ }
1581
+ return names;
1582
+ };
1489
1583
  const target = {
1490
1584
  addEventListener,
1491
1585
  removeEventListener,
@@ -1503,7 +1597,17 @@ function createEventTargetInternal(opts) {
1503
1597
  },
1504
1598
  subscribe,
1505
1599
  toObservable,
1506
- events
1600
+ events,
1601
+ emit,
1602
+ off,
1603
+ addListener,
1604
+ removeListener,
1605
+ prependListener,
1606
+ prependOnceListener,
1607
+ listeners: getListeners,
1608
+ rawListeners: rawListenersMethod,
1609
+ listenerCount,
1610
+ eventNames: eventNamesMethod
1507
1611
  };
1508
1612
  target[SymbolObservable] = () => {
1509
1613
  return toObservable();
@@ -1525,8 +1629,8 @@ class EventEmission {
1525
1629
  dispatchEvent(event) {
1526
1630
  return this.#target.dispatchEvent(event);
1527
1631
  }
1528
- on(type, options) {
1529
- return this.#target.on(type, options);
1632
+ on(type, optionsOrListener) {
1633
+ return this.#target.on(type, optionsOrListener);
1530
1634
  }
1531
1635
  once(type, listener, options) {
1532
1636
  return this.#target.once(type, listener, options);
@@ -1540,6 +1644,36 @@ class EventEmission {
1540
1644
  pipe(target, mapFn) {
1541
1645
  return this.#target.pipe(target, mapFn);
1542
1646
  }
1647
+ emit(type, detail) {
1648
+ return this.#target.emit(type, detail);
1649
+ }
1650
+ off(type, listener) {
1651
+ this.#target.off(type, listener);
1652
+ }
1653
+ addListener(type, listener) {
1654
+ return this.#target.addListener(type, listener);
1655
+ }
1656
+ removeListener(type, listener) {
1657
+ this.#target.removeListener(type, listener);
1658
+ }
1659
+ prependListener(type, listener) {
1660
+ return this.#target.prependListener(type, listener);
1661
+ }
1662
+ prependOnceListener(type, listener) {
1663
+ return this.#target.prependOnceListener(type, listener);
1664
+ }
1665
+ listeners(type) {
1666
+ return this.#target.listeners(type);
1667
+ }
1668
+ rawListeners(type) {
1669
+ return this.#target.rawListeners(type);
1670
+ }
1671
+ listenerCount(type) {
1672
+ return this.#target.listenerCount(type);
1673
+ }
1674
+ eventNames() {
1675
+ return this.#target.eventNames();
1676
+ }
1543
1677
  addWildcardListener(pattern, listener, options) {
1544
1678
  return this.#target.addWildcardListener(pattern, listener, options);
1545
1679
  }
@@ -1580,4 +1714,4 @@ class EventEmission {
1580
1714
  }
1581
1715
  })
1582
1716
 
1583
- //# debugId=3C805781BACAE6AD64756E2164756E21
1717
+ //# debugId=FAADC5AA76187FDD64756E2164756E21