Skip to content

Commit

Permalink
Fix bug where undefined subscriber was causing crash
Browse files Browse the repository at this point in the history
- bump patch version
  • Loading branch information
floodfx committed Oct 8, 2022
1 parent 94840f7 commit 08e4e41
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 35 deletions.
5 changes: 5 additions & 0 deletions .changeset/cyan-years-warn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"liveviewjs": patch
---

Fix unsubscribe bug with undefined subscriber
16 changes: 4 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 10 additions & 7 deletions packages/core/coverage/clover.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1665099616580" clover="3.2.0">
<project timestamp="1665099616580" name="All files">
<metrics statements="1014" coveredstatements="1006" conditionals="343" coveredconditionals="319" methods="220" coveredmethods="202" elements="1577" coveredelements="1527" complexity="0" loc="1014" ncloc="1014" packages="10" files="39" classes="39"/>
<coverage generated="1665206221223" clover="3.2.0">
<project timestamp="1665206221223" name="All files">
<metrics statements="1017" coveredstatements="1008" conditionals="344" coveredconditionals="320" methods="220" coveredmethods="202" elements="1581" coveredelements="1530" complexity="0" loc="1017" ncloc="1017" packages="10" files="39" classes="39"/>
<package name="server">
<metrics statements="10" coveredstatements="10" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
<file name="index.ts" path="/Users/donnie/src/github.com/floodfx/liveviewjs/packages/core/src/server/index.ts">
Expand Down Expand Up @@ -221,14 +221,14 @@
</file>
</package>
<package name="server.pubsub">
<metrics statements="15" coveredstatements="15" conditionals="0" coveredconditionals="0" methods="3" coveredmethods="3"/>
<metrics statements="18" coveredstatements="17" conditionals="1" coveredconditionals="1" methods="3" coveredmethods="3"/>
<file name="index.ts" path="/Users/donnie/src/github.com/floodfx/liveviewjs/packages/core/src/server/pubsub/index.ts">
<metrics statements="2" coveredstatements="2" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
<line num="1" count="8" type="stmt"/>
<line num="2" count="8" type="stmt"/>
</file>
<file name="singleProcessPubSub.ts" path="/Users/donnie/src/github.com/floodfx/liveviewjs/packages/core/src/server/pubsub/singleProcessPubSub.ts">
<metrics statements="13" coveredstatements="13" conditionals="0" coveredconditionals="0" methods="3" coveredmethods="3"/>
<metrics statements="16" coveredstatements="15" conditionals="1" coveredconditionals="1" methods="3" coveredmethods="3"/>
<line num="1" count="8" type="stmt"/>
<line num="2" count="8" type="stmt"/>
<line num="11" count="8" type="stmt"/>
Expand All @@ -239,9 +239,12 @@
<line num="20" count="150" type="stmt"/>
<line num="21" count="150" type="stmt"/>
<line num="25" count="11" type="stmt"/>
<line num="30" count="133" type="stmt"/>
<line num="29" count="133" type="stmt"/>
<line num="31" count="133" type="stmt"/>
<line num="33" count="133" type="stmt"/>
<line num="33" count="133" type="cond" truecount="1" falsecount="0"/>
<line num="34" count="133" type="stmt"/>
<line num="37" count="133" type="stmt"/>
<line num="39" count="0" type="stmt"/>
</file>
</package>
<package name="server.socket">
Expand Down
2 changes: 1 addition & 1 deletion packages/core/coverage/coverage-final.json

Large diffs are not rendered by default.

17 changes: 12 additions & 5 deletions packages/core/dist/liveview.js
Original file line number Diff line number Diff line change
Expand Up @@ -1572,11 +1572,18 @@ class SingleProcessPubSub {
await eventEmitter.emit(topic, data);
}
async unsubscribe(topic, subscriberId) {
// get subscriber function from id
const subscriber = this.subscribers[subscriberId];
await eventEmitter.removeListener(topic, subscriber);
// remove subscriber from subscribers
delete this.subscribers[subscriberId];
try {
// get subscriber function from id
const subscriber = this.subscribers[subscriberId];
if (subscriber) {
await eventEmitter.removeListener(topic, subscriber);
}
// remove subscriber from subscribers
delete this.subscribers[subscriberId];
}
catch (err) {
console.warn("error unsubscribing from topic", topic, err);
}
}
}

Expand Down
17 changes: 12 additions & 5 deletions packages/core/dist/liveview.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1565,11 +1565,18 @@ class SingleProcessPubSub {
await eventEmitter.emit(topic, data);
}
async unsubscribe(topic, subscriberId) {
// get subscriber function from id
const subscriber = this.subscribers[subscriberId];
await eventEmitter.removeListener(topic, subscriber);
// remove subscriber from subscribers
delete this.subscribers[subscriberId];
try {
// get subscriber function from id
const subscriber = this.subscribers[subscriberId];
if (subscriber) {
await eventEmitter.removeListener(topic, subscriber);
}
// remove subscriber from subscribers
delete this.subscribers[subscriberId];
}
catch (err) {
console.warn("error unsubscribing from topic", topic, err);
}
}
}

Expand Down
17 changes: 12 additions & 5 deletions packages/core/src/server/pubsub/singleProcessPubSub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,17 @@ export class SingleProcessPubSub implements Subscriber, Publisher {
}

public async unsubscribe(topic: string, subscriberId: string) {
// get subscriber function from id
const subscriber = this.subscribers[subscriberId];
await eventEmitter.removeListener(topic, subscriber);
// remove subscriber from subscribers
delete this.subscribers[subscriberId];
try {
// get subscriber function from id
const subscriber = this.subscribers[subscriberId];

if (subscriber) {
await eventEmitter.removeListener(topic, subscriber);
}
// remove subscriber from subscribers
delete this.subscribers[subscriberId];
} catch (err) {
console.warn("error unsubscribing from topic", topic, err);
}
}
}

0 comments on commit 08e4e41

Please sign in to comment.