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 +78 -1
- package/dist/event-emission.d.ts +50 -0
- package/dist/event-emission.d.ts.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/index.cjs +142 -8
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +142 -8
- package/dist/index.js.map +4 -4
- package/dist/interoperability.cjs +120 -6
- package/dist/interoperability.cjs.map +4 -4
- package/dist/interoperability.d.ts.map +1 -1
- package/dist/interoperability.js +120 -6
- package/dist/interoperability.js.map +4 -4
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/event-emission.ts +115 -2
- package/src/factory.ts +149 -13
- package/src/interoperability.ts +10 -0
- package/src/types.ts +41 -4
package/dist/interoperability.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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=
|
|
1669
|
+
//# debugId=2E89ADED7F0D86C164756E2164756E21
|