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.
@@ -590,7 +590,17 @@ function createEventTarget(targetOrOpts, opts) {
590
590
  "complete",
591
591
  "subscribe",
592
592
  "toObservable",
593
- "events"
593
+ "events",
594
+ "emit",
595
+ "off",
596
+ "addListener",
597
+ "removeListener",
598
+ "prependListener",
599
+ "prependOnceListener",
600
+ "listeners",
601
+ "rawListeners",
602
+ "listenerCount",
603
+ "eventNames"
594
604
  ];
595
605
  for (const name of methodNames) {
596
606
  Object.defineProperty(proxy, name, {
@@ -868,7 +878,7 @@ function createEventTargetInternal(opts) {
868
878
  }
869
879
  }
870
880
  };
871
- const addEventListener = (type, listener, options) => {
881
+ const addListenerInternal = (type, listener, options, position) => {
872
882
  if (isCompleted || !listener) {
873
883
  return () => {};
874
884
  }
@@ -895,7 +905,11 @@ function createEventTargetInternal(opts) {
895
905
  signal,
896
906
  removed: false
897
907
  };
898
- list.push(record);
908
+ if (position === "prepend") {
909
+ list.unshift(record);
910
+ } else {
911
+ list.push(record);
912
+ }
899
913
  const unsubscribe2 = () => removeListenerRecord(type, record);
900
914
  if (signal) {
901
915
  const onAbort = () => removeListenerRecord(type, record);
@@ -906,6 +920,9 @@ function createEventTargetInternal(opts) {
906
920
  }
907
921
  return unsubscribe2;
908
922
  };
923
+ const addEventListener = (type, listener, options) => {
924
+ return addListenerInternal(type, listener, options, "append");
925
+ };
909
926
  const addWildcardListener = (pattern, listener, options) => {
910
927
  if (isCompleted)
911
928
  return () => {};
@@ -1076,7 +1093,18 @@ function createEventTargetInternal(opts) {
1076
1093
  }
1077
1094
  wildcardListeners.clear();
1078
1095
  };
1079
- const on = (type, options) => {
1096
+ const isListenerArg = (arg) => {
1097
+ if (typeof arg === "function")
1098
+ return true;
1099
+ if (arg && typeof arg === "object" && typeof arg.handleEvent === "function")
1100
+ return true;
1101
+ return false;
1102
+ };
1103
+ const on = (type, optionsOrListener) => {
1104
+ if (isListenerArg(optionsOrListener)) {
1105
+ return addEventListener(type, optionsOrListener);
1106
+ }
1107
+ const options = optionsOrListener;
1080
1108
  return new Observable((observer) => {
1081
1109
  let opts2;
1082
1110
  if (typeof options === "boolean") {
@@ -1432,6 +1460,72 @@ function createEventTargetInternal(opts) {
1432
1460
  };
1433
1461
  return iterator;
1434
1462
  }
1463
+ const emit = (type, detail) => {
1464
+ if (isCompleted)
1465
+ return false;
1466
+ const list = listeners.get(type);
1467
+ const hasListeners = list !== undefined && list.length > 0;
1468
+ let hasWildcard = false;
1469
+ if (wildcardListeners.size > 0) {
1470
+ for (const rec of wildcardListeners) {
1471
+ if (matchesWildcard(type, rec.pattern)) {
1472
+ hasWildcard = true;
1473
+ break;
1474
+ }
1475
+ }
1476
+ }
1477
+ dispatchEvent({ type, detail });
1478
+ return hasListeners || hasWildcard;
1479
+ };
1480
+ const off = (type, listener) => {
1481
+ removeEventListener(type, listener);
1482
+ };
1483
+ const addListener = (type, listener) => {
1484
+ return addEventListener(type, listener);
1485
+ };
1486
+ const removeListener = (type, listener) => {
1487
+ removeEventListener(type, listener);
1488
+ };
1489
+ const prependListener = (type, listener) => {
1490
+ return addListenerInternal(type, listener, undefined, "prepend");
1491
+ };
1492
+ const prependOnceListener = (type, listener) => {
1493
+ return addListenerInternal(type, listener, { once: true }, "prepend");
1494
+ };
1495
+ const getListeners = (type) => {
1496
+ const list = listeners.get(type);
1497
+ if (!list)
1498
+ return [];
1499
+ return list.filter((r) => !r.removed).map((r) => r.original);
1500
+ };
1501
+ const rawListenersMethod = (type) => {
1502
+ const list = listeners.get(type);
1503
+ if (!list)
1504
+ return [];
1505
+ return list.filter((r) => !r.removed).map((r) => {
1506
+ if (r.once) {
1507
+ const wrapper = (...args) => r.callback(...args);
1508
+ wrapper.listener = r.original;
1509
+ return wrapper;
1510
+ }
1511
+ return r.original;
1512
+ });
1513
+ };
1514
+ const listenerCount = (type) => {
1515
+ const list = listeners.get(type);
1516
+ if (!list)
1517
+ return 0;
1518
+ return list.filter((r) => !r.removed).length;
1519
+ };
1520
+ const eventNamesMethod = () => {
1521
+ const names = [];
1522
+ for (const [type, list] of listeners) {
1523
+ if (list.some((r) => !r.removed)) {
1524
+ names.push(type);
1525
+ }
1526
+ }
1527
+ return names;
1528
+ };
1435
1529
  const target = {
1436
1530
  addEventListener,
1437
1531
  removeEventListener,
@@ -1449,7 +1543,17 @@ function createEventTargetInternal(opts) {
1449
1543
  },
1450
1544
  subscribe,
1451
1545
  toObservable,
1452
- events
1546
+ events,
1547
+ emit,
1548
+ off,
1549
+ addListener,
1550
+ removeListener,
1551
+ prependListener,
1552
+ prependOnceListener,
1553
+ listeners: getListeners,
1554
+ rawListeners: rawListenersMethod,
1555
+ listenerCount,
1556
+ eventNames: eventNamesMethod
1453
1557
  };
1454
1558
  target[SymbolObservable] = () => {
1455
1559
  return toObservable();
@@ -1526,6 +1630,16 @@ function fromEventTarget(domTarget, eventTypes, options) {
1526
1630
  return emitter.completed;
1527
1631
  },
1528
1632
  events: emitter.events,
1633
+ emit: emitter.emit,
1634
+ off: emitter.off,
1635
+ addListener: emitter.addListener,
1636
+ removeListener: emitter.removeListener,
1637
+ prependListener: emitter.prependListener,
1638
+ prependOnceListener: emitter.prependOnceListener,
1639
+ listeners: emitter.listeners,
1640
+ rawListeners: emitter.rawListeners,
1641
+ listenerCount: emitter.listenerCount,
1642
+ eventNames: emitter.eventNames,
1529
1643
  destroy: () => {
1530
1644
  if (options?.signal && onAbort) {
1531
1645
  options.signal.removeEventListener("abort", onAbort);
@@ -1552,4 +1666,4 @@ export {
1552
1666
  forwardToEventTarget
1553
1667
  };
1554
1668
 
1555
- //# debugId=DD2CABDF8085D79E64756E2164756E21
1669
+ //# debugId=2E89ADED7F0D86C164756E2164756E21