Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changes/cleanup-fn-websocket.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
websocket-js: minor
---

`addListener` now returns a cleanup function instead of `void` to remove the listener.
2 changes: 1 addition & 1 deletion plugins/websocket/api-iife.js

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

14 changes: 9 additions & 5 deletions plugins/websocket/guest-js/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ export type Message =

export default class WebSocket {
id: number
private readonly listeners: Array<(arg: Message) => void>
private readonly listeners: Set<(arg: Message) => void>

constructor(id: number, listeners: Array<(arg: Message) => void>) {
constructor(id: number, listeners: Set<(arg: Message) => void>) {
this.id = id
this.listeners = listeners
}
Expand All @@ -43,7 +43,7 @@ export default class WebSocket {
url: string,
config?: ConnectionConfig
): Promise<WebSocket> {
const listeners: Array<(arg: Message) => void> = []
const listeners: Set<(arg: Message) => void> = new Set()

const onMessage = new Channel<Message>()
onMessage.onmessage = (message: Message): void => {
Expand All @@ -63,8 +63,12 @@ export default class WebSocket {
}).then((id) => new WebSocket(id, listeners))
}

addListener(cb: (arg: Message) => void): void {
this.listeners.push(cb)
addListener(cb: (arg: Message) => void): () => void {
this.listeners.add(cb)

return () => {
this.listeners.delete(cb)
}
}

async send(message: Message | string | number[]): Promise<void> {
Expand Down
Loading