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
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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=
|
|
1719
|
+
//# debugId=B24687007250E48E64756E2164756E21
|