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.
@@ -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();
@@ -1580,6 +1684,16 @@ function fromEventTarget(domTarget, eventTypes, options) {
1580
1684
  return emitter.completed;
1581
1685
  },
1582
1686
  events: emitter.events,
1687
+ emit: emitter.emit,
1688
+ off: emitter.off,
1689
+ addListener: emitter.addListener,
1690
+ removeListener: emitter.removeListener,
1691
+ prependListener: emitter.prependListener,
1692
+ prependOnceListener: emitter.prependOnceListener,
1693
+ listeners: emitter.listeners,
1694
+ rawListeners: emitter.rawListeners,
1695
+ listenerCount: emitter.listenerCount,
1696
+ eventNames: emitter.eventNames,
1583
1697
  destroy: () => {
1584
1698
  if (options?.signal && onAbort) {
1585
1699
  options.signal.removeEventListener("abort", onAbort);
@@ -1602,4 +1716,4 @@ function pipe(source, target, options) {
1602
1716
  }
1603
1717
  })
1604
1718
 
1605
- //# debugId=AF1BD80F4847381464756E2164756E21
1719
+ //# debugId=B24687007250E48E64756E2164756E21