support safari with a workaround, clean up code a bit

This commit is contained in:
Toshit Chawda 2024-07-12 21:13:11 -07:00
parent e82c0f0d08
commit 63211161f1
No known key found for this signature in database
GPG key ID: 91480ED99E2B3D9D
3 changed files with 29 additions and 11 deletions

View file

@ -8,7 +8,7 @@ export type WorkerMessage = {
remote: string,
method: string,
headers: BareHeaders,
body: ReadableStream | undefined,
body: ReadableStream | ArrayBuffer | undefined,
}
websocket?: {
url: string,
@ -96,6 +96,25 @@ function createPort(path: string, registerHandlers: boolean): MessagePort {
return worker.port;
}
let browserSupportsTransferringStreamsCache: boolean | null = null;
export function browserSupportsTransferringStreams(): boolean {
if (browserSupportsTransferringStreamsCache === null) {
const chan = new MessageChannel();
const stream = new ReadableStream();
let res: boolean;
try {
chan.port1.postMessage(stream, [stream]);
res = true;
} catch(err) {
res = false;
}
browserSupportsTransferringStreamsCache = res;
return res;
} else {
return browserSupportsTransferringStreamsCache;
}
}
export class WorkerConnection {
channel: BroadcastChannel;
port: MessagePort | Promise<MessagePort>;