Skip to content

Commit 94dacef

Browse files
authored
fix: pre-built timer worker (#1617)
Dropping the `experimental_` prefix since this feature was confirmed working. Since the timer worker (introduced in #1557) is not going to be updated too often, we can skip an additional built step and just check in the prebuilt worker. The "source" file `worker.ts` and the script to generate worker are still there, but they are not used during build.
1 parent cb2f218 commit 94dacef

File tree

5 files changed

+30
-11
lines changed

5 files changed

+30
-11
lines changed

packages/client/generate-timer-worker.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ npx tsc src/timers/worker.ts \
44
--skipLibCheck \
55
--removeComments \
66
--module preserve \
7+
--target ES2020 \
78
--lib ES2020,WebWorker \
89
--outDir worker-dist
910

packages/client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"scripts": {
1212
"clean": "rimraf dist",
1313
"start": "rollup -w -c",
14-
"build": "yarn clean && ./generate-timer-worker.sh && rollup -c",
14+
"build": "yarn clean && rollup -c",
1515
"test": "vitest",
1616
"clean:docs": "rimraf generated-docs",
1717
"test-ci": "vitest --coverage",

packages/client/src/StreamVideoClient.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,11 @@ export class StreamVideoClient {
8989
if (typeof apiKeyOrArgs === 'string') {
9090
logLevel = opts?.logLevel || logLevel;
9191
logger = opts?.logger || logger;
92-
if (opts?.expertimental_enableTimerWorker) enableTimerWorker();
92+
if (opts?.enableTimerWorker) enableTimerWorker();
9393
} else {
9494
logLevel = apiKeyOrArgs.options?.logLevel || logLevel;
9595
logger = apiKeyOrArgs.options?.logger || logger;
96-
if (apiKeyOrArgs.options?.expertimental_enableTimerWorker)
97-
enableTimerWorker();
96+
if (apiKeyOrArgs.options?.enableTimerWorker) enableTimerWorker();
9897
}
9998

10099
setLogger(logger, logLevel);

packages/client/src/coordinator/connection/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export type StreamClientOptions = Partial<AxiosRequestConfig> & {
151151
* Create Web Worker to initiate timer events like health checks. Can possibly prevent
152152
* timer throttling issues in inactive browser tabs.
153153
*/
154-
expertimental_enableTimerWorker?: boolean;
154+
enableTimerWorker?: boolean;
155155
};
156156

157157
export type TokenProvider = () => Promise<string>;
Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
1-
// Do not modify this file manually. You can edit worker.ts if necessary
1+
// Do not modify this file manually. Instead, edit worker.ts
22
// and the run ./generate-timer-worker.sh
33
export const timerWorker = {
4-
get src(): string {
5-
throw new Error(
6-
'Timer worker source missing. Did you forget to run generate-timer-worker.sh?',
7-
);
8-
},
4+
src: `const timerIdMapping = new Map();
5+
self.addEventListener('message', (event) => {
6+
const request = event.data;
7+
switch (request.type) {
8+
case 'setTimeout':
9+
case 'setInterval':
10+
timerIdMapping.set(request.id, (request.type === 'setTimeout' ? setTimeout : setInterval)(() => {
11+
tick(request.id);
12+
if (request.type === 'setTimeout') {
13+
timerIdMapping.delete(request.id);
14+
}
15+
}, request.timeout));
16+
break;
17+
case 'clearTimeout':
18+
case 'clearInterval':
19+
(request.type === 'clearTimeout' ? clearTimeout : clearInterval)(timerIdMapping.get(request.id));
20+
timerIdMapping.delete(request.id);
21+
break;
22+
}
23+
});
24+
function tick(id) {
25+
const message = { type: 'tick', id };
26+
self.postMessage(message);
27+
}`,
928
};

0 commit comments

Comments
 (0)