Skip to content

Commit 2015865

Browse files
committed
fix support for Worker
1 parent 63eaf47 commit 2015865

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

packages/idb-cache/src/encryptionWorkerFn.ts

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
import type { WorkerMessage } from "./types";
55

6-
declare const self: SharedWorkerGlobalScope;
6+
interface PostMessageCapable {
7+
postMessage(message: unknown, transfer?: Transferable[]): void;
8+
}
79

810
export function encryptionWorkerFunction() {
911
let cacheKey: Uint8Array | null = null;
@@ -55,7 +57,7 @@ export function encryptionWorkerFunction() {
5557
return derivedKey;
5658
}
5759

58-
async function initializeKey(port: MessagePort) {
60+
async function initializeKey(port: PostMessageCapable) {
5961
if (!cacheKey) {
6062
throw new Error("Cache key not provided for encryption worker");
6163
}
@@ -159,11 +161,15 @@ export function encryptionWorkerFunction() {
159161
}
160162
}
161163

162-
function handleEncrypt(requestId: string, value: string, port: MessagePort) {
164+
function handleEncrypt(
165+
requestId: string,
166+
value: string,
167+
port: PostMessageCapable
168+
) {
163169
enqueueTask(async () => {
164170
try {
165171
const encrypted = await encrypt(value);
166-
if (!port) throw new Error("MessagePort is not available");
172+
if (!port) throw new Error("Worker is not available");
167173

168174
port.postMessage(
169175
{
@@ -188,12 +194,12 @@ export function encryptionWorkerFunction() {
188194
requestId: string,
189195
iv: ArrayBuffer,
190196
ciphertext: ArrayBuffer,
191-
port: MessagePort
197+
port: PostMessageCapable
192198
) {
193199
enqueueTask(async () => {
194200
try {
195201
const decrypted = await decrypt(iv, ciphertext);
196-
if (!port) throw new Error("MessagePort is not available");
202+
if (!port) throw new Error("Worker is not available");
197203

198204
port.postMessage({
199205
requestId,
@@ -211,9 +217,8 @@ export function encryptionWorkerFunction() {
211217
});
212218
}
213219

214-
function onConnect(e: MessageEvent) {
215-
const port = e.ports[0];
216-
port.onmessage = (event: MessageEvent<WorkerMessage>) => {
220+
const processMessageFn =
221+
(port: PostMessageCapable) => (event: MessageEvent<WorkerMessage>) => {
217222
const { type, payload, requestId } = event.data;
218223

219224
switch (type) {
@@ -256,8 +261,21 @@ export function encryptionWorkerFunction() {
256261
);
257262
}
258263
};
259-
port.start();
264+
265+
const isSharedWorker = "SharedWorkerGlobalScope" in self;
266+
const isWorker = "WorkerGlobalScope" in self;
267+
268+
// SharedWorker
269+
if (isSharedWorker && "onconnect" in self) {
270+
self.onconnect = (e: MessageEvent<WorkerMessage>) => {
271+
const port = e.ports[0];
272+
port.onmessage = processMessageFn(port);
273+
port.start();
274+
};
260275
}
261276

262-
self.onconnect = onConnect;
277+
// Worker
278+
else if (isWorker && "onmessage" in self) {
279+
self.onmessage = processMessageFn(self);
280+
}
263281
}

0 commit comments

Comments
 (0)