tell the sw to refresh its port when a new shared worker gets made

This commit is contained in:
Toshit Chawda 2024-07-08 12:02:28 -07:00
parent fb81b33714
commit fde90f3ec1
No known key found for this signature in database
GPG key ID: 91480ED99E2B3D9D
2 changed files with 12 additions and 4 deletions

View file

@ -32,8 +32,8 @@ export type WorkerResponse = {
error?: Error,
}
type BroadcastMessage = {
type: "getPath" | "path",
export type BroadcastMessage = {
type: "getPath" | "path" | "refreshPort",
path?: string,
}
@ -89,8 +89,13 @@ export class WorkerConnection {
// @ts-expect-error
if (self.clients) {
// running in a ServiceWorker
// ask a window for the worker port
// ask a window for the worker port, register for refreshPort
this.port = searchForPort();
this.channel.onmessage = (event: MessageEvent) => {
if (event.data.type === "refreshPort") {
this.port = searchForPort();
}
}
} else if (workerPath && SharedWorker) {
// running in a window, was passed a workerPath
// create the SharedWorker and help other bare-mux clients get the workerPath

View file

@ -1,9 +1,12 @@
import { BareTransport } from "./baretypes";
import { WorkerMessage, WorkerResponse } from "./connection"
import { BroadcastMessage, WorkerMessage, WorkerResponse } from "./connection"
let currentTransport: BareTransport | null = null;
let currentTransportName: string = "";
const channel = new BroadcastChannel("bare-mux");
channel.postMessage(<BroadcastMessage>{ type: "refreshPort" });
function noClients(): Error {
// @ts-expect-error mdn error constructor: new Error(message, options)
return new Error("there are no bare clients", {