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/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
|
|
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
|
-
|
|
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
|
|
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,
|
|
1473
|
-
return this.#target.on(type,
|
|
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=
|
|
1666
|
+
//# debugId=320F1C6E7F0CB63D64756E2164756E21
|