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/dist/index.js CHANGED
@@ -588,7 +588,17 @@ function createEventTarget(targetOrOpts, opts) {
588
588
  "complete",
589
589
  "subscribe",
590
590
  "toObservable",
591
- "events"
591
+ "events",
592
+ "emit",
593
+ "off",
594
+ "addListener",
595
+ "removeListener",
596
+ "prependListener",
597
+ "prependOnceListener",
598
+ "listeners",
599
+ "rawListeners",
600
+ "listenerCount",
601
+ "eventNames"
592
602
  ];
593
603
  for (const name of methodNames) {
594
604
  Object.defineProperty(proxy, name, {
@@ -866,7 +876,7 @@ function createEventTargetInternal(opts) {
866
876
  }
867
877
  }
868
878
  };
869
- const addEventListener = (type, listener, options) => {
879
+ const addListenerInternal = (type, listener, options, position) => {
870
880
  if (isCompleted || !listener) {
871
881
  return () => {};
872
882
  }
@@ -893,7 +903,11 @@ function createEventTargetInternal(opts) {
893
903
  signal,
894
904
  removed: false
895
905
  };
896
- list.push(record);
906
+ if (position === "prepend") {
907
+ list.unshift(record);
908
+ } else {
909
+ list.push(record);
910
+ }
897
911
  const unsubscribe2 = () => removeListenerRecord(type, record);
898
912
  if (signal) {
899
913
  const onAbort = () => removeListenerRecord(type, record);
@@ -904,6 +918,9 @@ function createEventTargetInternal(opts) {
904
918
  }
905
919
  return unsubscribe2;
906
920
  };
921
+ const addEventListener = (type, listener, options) => {
922
+ return addListenerInternal(type, listener, options, "append");
923
+ };
907
924
  const addWildcardListener = (pattern, listener, options) => {
908
925
  if (isCompleted)
909
926
  return () => {};
@@ -1074,7 +1091,18 @@ function createEventTargetInternal(opts) {
1074
1091
  }
1075
1092
  wildcardListeners.clear();
1076
1093
  };
1077
- const on = (type, options) => {
1094
+ const isListenerArg = (arg) => {
1095
+ if (typeof arg === "function")
1096
+ return true;
1097
+ if (arg && typeof arg === "object" && typeof arg.handleEvent === "function")
1098
+ return true;
1099
+ return false;
1100
+ };
1101
+ const on = (type, optionsOrListener) => {
1102
+ if (isListenerArg(optionsOrListener)) {
1103
+ return addEventListener(type, optionsOrListener);
1104
+ }
1105
+ const options = optionsOrListener;
1078
1106
  return new Observable((observer) => {
1079
1107
  let opts2;
1080
1108
  if (typeof options === "boolean") {
@@ -1430,6 +1458,72 @@ function createEventTargetInternal(opts) {
1430
1458
  };
1431
1459
  return iterator;
1432
1460
  }
1461
+ const emit = (type, detail) => {
1462
+ if (isCompleted)
1463
+ return false;
1464
+ const list = listeners.get(type);
1465
+ const hasListeners = list !== undefined && list.length > 0;
1466
+ let hasWildcard = false;
1467
+ if (wildcardListeners.size > 0) {
1468
+ for (const rec of wildcardListeners) {
1469
+ if (matchesWildcard(type, rec.pattern)) {
1470
+ hasWildcard = true;
1471
+ break;
1472
+ }
1473
+ }
1474
+ }
1475
+ dispatchEvent({ type, detail });
1476
+ return hasListeners || hasWildcard;
1477
+ };
1478
+ const off = (type, listener) => {
1479
+ removeEventListener(type, listener);
1480
+ };
1481
+ const addListener = (type, listener) => {
1482
+ return addEventListener(type, listener);
1483
+ };
1484
+ const removeListener = (type, listener) => {
1485
+ removeEventListener(type, listener);
1486
+ };
1487
+ const prependListener = (type, listener) => {
1488
+ return addListenerInternal(type, listener, undefined, "prepend");
1489
+ };
1490
+ const prependOnceListener = (type, listener) => {
1491
+ return addListenerInternal(type, listener, { once: true }, "prepend");
1492
+ };
1493
+ const getListeners = (type) => {
1494
+ const list = listeners.get(type);
1495
+ if (!list)
1496
+ return [];
1497
+ return list.filter((r) => !r.removed).map((r) => r.original);
1498
+ };
1499
+ const rawListenersMethod = (type) => {
1500
+ const list = listeners.get(type);
1501
+ if (!list)
1502
+ return [];
1503
+ return list.filter((r) => !r.removed).map((r) => {
1504
+ if (r.once) {
1505
+ const wrapper = (...args) => r.callback(...args);
1506
+ wrapper.listener = r.original;
1507
+ return wrapper;
1508
+ }
1509
+ return r.original;
1510
+ });
1511
+ };
1512
+ const listenerCount = (type) => {
1513
+ const list = listeners.get(type);
1514
+ if (!list)
1515
+ return 0;
1516
+ return list.filter((r) => !r.removed).length;
1517
+ };
1518
+ const eventNamesMethod = () => {
1519
+ const names = [];
1520
+ for (const [type, list] of listeners) {
1521
+ if (list.some((r) => !r.removed)) {
1522
+ names.push(type);
1523
+ }
1524
+ }
1525
+ return names;
1526
+ };
1433
1527
  const target = {
1434
1528
  addEventListener,
1435
1529
  removeEventListener,
@@ -1447,7 +1541,17 @@ function createEventTargetInternal(opts) {
1447
1541
  },
1448
1542
  subscribe,
1449
1543
  toObservable,
1450
- events
1544
+ events,
1545
+ emit,
1546
+ off,
1547
+ addListener,
1548
+ removeListener,
1549
+ prependListener,
1550
+ prependOnceListener,
1551
+ listeners: getListeners,
1552
+ rawListeners: rawListenersMethod,
1553
+ listenerCount,
1554
+ eventNames: eventNamesMethod
1451
1555
  };
1452
1556
  target[SymbolObservable] = () => {
1453
1557
  return toObservable();
@@ -1469,8 +1573,8 @@ class EventEmission {
1469
1573
  dispatchEvent(event) {
1470
1574
  return this.#target.dispatchEvent(event);
1471
1575
  }
1472
- on(type, options) {
1473
- return this.#target.on(type, options);
1576
+ on(type, optionsOrListener) {
1577
+ return this.#target.on(type, optionsOrListener);
1474
1578
  }
1475
1579
  once(type, listener, options) {
1476
1580
  return this.#target.once(type, listener, options);
@@ -1484,6 +1588,36 @@ class EventEmission {
1484
1588
  pipe(target, mapFn) {
1485
1589
  return this.#target.pipe(target, mapFn);
1486
1590
  }
1591
+ emit(type, detail) {
1592
+ return this.#target.emit(type, detail);
1593
+ }
1594
+ off(type, listener) {
1595
+ this.#target.off(type, listener);
1596
+ }
1597
+ addListener(type, listener) {
1598
+ return this.#target.addListener(type, listener);
1599
+ }
1600
+ removeListener(type, listener) {
1601
+ this.#target.removeListener(type, listener);
1602
+ }
1603
+ prependListener(type, listener) {
1604
+ return this.#target.prependListener(type, listener);
1605
+ }
1606
+ prependOnceListener(type, listener) {
1607
+ return this.#target.prependOnceListener(type, listener);
1608
+ }
1609
+ listeners(type) {
1610
+ return this.#target.listeners(type);
1611
+ }
1612
+ rawListeners(type) {
1613
+ return this.#target.rawListeners(type);
1614
+ }
1615
+ listenerCount(type) {
1616
+ return this.#target.listenerCount(type);
1617
+ }
1618
+ eventNames() {
1619
+ return this.#target.eventNames();
1620
+ }
1487
1621
  addWildcardListener(pattern, listener, options) {
1488
1622
  return this.#target.addWildcardListener(pattern, listener, options);
1489
1623
  }
@@ -1529,4 +1663,4 @@ export {
1529
1663
  BufferOverflowError
1530
1664
  };
1531
1665
 
1532
- //# debugId=60621EDDB80DC90E64756E2164756E21
1666
+ //# debugId=320F1C6E7F0CB63D64756E2164756E21