@stream-io/video-client 1.30.1 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/index.browser.es.js +4 -128
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +4 -128
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +4 -128
- package/dist/index.es.js.map +1 -1
- package/dist/src/timers/index.d.ts +2 -21
- package/package.json +3 -3
- package/src/timers/index.ts +2 -127
- package/dist/src/timers/types.d.ts +0 -12
- package/dist/src/timers/worker.build.d.ts +0 -3
- package/dist/src/timers/worker.d.ts +0 -1
- package/src/timers/types.ts +0 -15
- package/src/timers/worker.build.ts +0 -28
- package/src/timers/worker.ts +0 -36
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
private currentTimerId;
|
|
3
|
-
private callbacks;
|
|
4
|
-
private worker;
|
|
5
|
-
private fallback;
|
|
6
|
-
setup({ useTimerWorker }?: {
|
|
7
|
-
useTimerWorker?: boolean;
|
|
8
|
-
}): void;
|
|
9
|
-
destroy(): void;
|
|
10
|
-
get ready(): boolean;
|
|
11
|
-
setInterval(callback: () => void, timeout: number): number;
|
|
12
|
-
clearInterval(id?: number): void;
|
|
13
|
-
setTimeout(callback: () => void, timeout: number): number;
|
|
14
|
-
clearTimeout(id?: number): void;
|
|
15
|
-
private setTimer;
|
|
16
|
-
private clearTimer;
|
|
17
|
-
private getTimerId;
|
|
18
|
-
private sendMessage;
|
|
19
|
-
}
|
|
1
|
+
import { WorkerTimer } from '@stream-io/worker-timer';
|
|
20
2
|
export declare const enableTimerWorker: () => void;
|
|
21
|
-
export declare const getTimers: (...args: never[]) =>
|
|
22
|
-
export {};
|
|
3
|
+
export declare const getTimers: (...args: never[]) => WorkerTimer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.31.0",
|
|
4
4
|
"main": "dist/index.cjs.js",
|
|
5
5
|
"module": "dist/index.es.js",
|
|
6
6
|
"browser": "dist/index.browser.es.js",
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
"test": "vitest",
|
|
15
15
|
"test-ci": "vitest run --coverage",
|
|
16
16
|
"generate:open-api": "./generate-openapi.sh protocol",
|
|
17
|
-
"generate:open-api:dev": "./generate-openapi.sh chat"
|
|
18
|
-
"generate:timer-worker": "./generate-timer-worker.sh"
|
|
17
|
+
"generate:open-api:dev": "./generate-openapi.sh chat"
|
|
19
18
|
},
|
|
20
19
|
"files": [
|
|
21
20
|
"dist",
|
|
@@ -30,6 +29,7 @@
|
|
|
30
29
|
"@protobuf-ts/runtime": "^2.9.4",
|
|
31
30
|
"@protobuf-ts/runtime-rpc": "^2.9.4",
|
|
32
31
|
"@protobuf-ts/twirp-transport": "^2.9.4",
|
|
32
|
+
"@stream-io/worker-timer": "^1.2.4",
|
|
33
33
|
"axios": "^1.8.1",
|
|
34
34
|
"rxjs": "~7.8.1",
|
|
35
35
|
"sdp-transform": "^2.15.0",
|
package/src/timers/index.ts
CHANGED
|
@@ -1,128 +1,5 @@
|
|
|
1
|
+
import { WorkerTimer } from '@stream-io/worker-timer';
|
|
1
2
|
import { lazy } from '../helpers/lazy';
|
|
2
|
-
import { getLogger } from '../logger';
|
|
3
|
-
import { TimerWorkerEvent, TimerWorkerRequest } from './types';
|
|
4
|
-
import { timerWorker } from './worker.build';
|
|
5
|
-
|
|
6
|
-
class TimerWorker {
|
|
7
|
-
private currentTimerId = 1;
|
|
8
|
-
private callbacks = new Map<number, () => void>();
|
|
9
|
-
private worker: Worker | undefined;
|
|
10
|
-
private fallback = false;
|
|
11
|
-
|
|
12
|
-
setup({ useTimerWorker = true }: { useTimerWorker?: boolean } = {}): void {
|
|
13
|
-
if (!useTimerWorker) {
|
|
14
|
-
this.fallback = true;
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
const source = timerWorker.src;
|
|
20
|
-
const blob = new Blob([source], {
|
|
21
|
-
type: 'application/javascript; charset=utf-8',
|
|
22
|
-
});
|
|
23
|
-
const script = URL.createObjectURL(blob);
|
|
24
|
-
this.worker = new Worker(script, { name: 'str-timer-worker' });
|
|
25
|
-
this.worker.addEventListener('message', (event) => {
|
|
26
|
-
const { type, id } = event.data as TimerWorkerEvent;
|
|
27
|
-
if (type === 'tick') {
|
|
28
|
-
this.callbacks.get(id)?.();
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
} catch (err: any) {
|
|
32
|
-
getLogger(['timer-worker'])('error', err);
|
|
33
|
-
this.fallback = true;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
destroy(): void {
|
|
38
|
-
this.callbacks.clear();
|
|
39
|
-
this.worker?.terminate();
|
|
40
|
-
this.worker = undefined;
|
|
41
|
-
this.fallback = false;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
get ready() {
|
|
45
|
-
return this.fallback || Boolean(this.worker);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
setInterval(callback: () => void, timeout: number): number {
|
|
49
|
-
return this.setTimer('setInterval', callback, timeout);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
clearInterval(id?: number): void {
|
|
53
|
-
this.clearTimer('clearInterval', id);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
setTimeout(callback: () => void, timeout: number): number {
|
|
57
|
-
return this.setTimer('setTimeout', callback, timeout);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
clearTimeout(id?: number): void {
|
|
61
|
-
this.clearTimer('clearTimeout', id);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
private setTimer(
|
|
65
|
-
type: 'setTimeout' | 'setInterval',
|
|
66
|
-
callback: () => void,
|
|
67
|
-
timeout: number,
|
|
68
|
-
) {
|
|
69
|
-
if (!this.ready) {
|
|
70
|
-
this.setup();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (this.fallback) {
|
|
74
|
-
return (type === 'setTimeout' ? setTimeout : setInterval)(
|
|
75
|
-
callback,
|
|
76
|
-
timeout,
|
|
77
|
-
) as unknown as number;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const id = this.getTimerId();
|
|
81
|
-
|
|
82
|
-
this.callbacks.set(id, () => {
|
|
83
|
-
callback();
|
|
84
|
-
|
|
85
|
-
// Timeouts are one-off operations, so no need to keep callback reference
|
|
86
|
-
// after timer has fired
|
|
87
|
-
if (type === 'setTimeout') {
|
|
88
|
-
this.callbacks.delete(id);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
this.sendMessage({ type, id, timeout });
|
|
93
|
-
return id;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private clearTimer(type: 'clearTimeout' | 'clearInterval', id?: number) {
|
|
97
|
-
if (!id) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (!this.ready) {
|
|
102
|
-
this.setup();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (this.fallback) {
|
|
106
|
-
(type === 'clearTimeout' ? clearTimeout : clearInterval)(id);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
this.callbacks.delete(id);
|
|
111
|
-
this.sendMessage({ type, id });
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
private getTimerId() {
|
|
115
|
-
return this.currentTimerId++;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
private sendMessage(message: TimerWorkerRequest) {
|
|
119
|
-
if (!this.worker) {
|
|
120
|
-
throw new Error("Cannot use timer worker before it's set up");
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
this.worker.postMessage(message);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
3
|
|
|
127
4
|
let timerWorkerEnabled = false;
|
|
128
5
|
|
|
@@ -131,7 +8,5 @@ export const enableTimerWorker = () => {
|
|
|
131
8
|
};
|
|
132
9
|
|
|
133
10
|
export const getTimers = lazy(() => {
|
|
134
|
-
|
|
135
|
-
instance.setup({ useTimerWorker: timerWorkerEnabled });
|
|
136
|
-
return instance;
|
|
11
|
+
return new WorkerTimer({ useWorker: timerWorkerEnabled });
|
|
137
12
|
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/src/timers/types.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export type TimerWorkerRequest =
|
|
2
|
-
| {
|
|
3
|
-
type: 'setInterval' | 'setTimeout';
|
|
4
|
-
id: number;
|
|
5
|
-
timeout: number;
|
|
6
|
-
}
|
|
7
|
-
| {
|
|
8
|
-
type: 'clearInterval' | 'clearTimeout';
|
|
9
|
-
id: number;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export type TimerWorkerEvent = {
|
|
13
|
-
type: 'tick';
|
|
14
|
-
id: number;
|
|
15
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// Do not modify this file manually. Instead, edit worker.ts
|
|
2
|
-
// and the run ./generate-timer-worker.sh
|
|
3
|
-
export const timerWorker = {
|
|
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
|
-
}`,
|
|
28
|
-
};
|
package/src/timers/worker.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { TimerWorkerEvent, TimerWorkerRequest } from './types';
|
|
2
|
-
|
|
3
|
-
const timerIdMapping = new Map<number, NodeJS.Timeout>();
|
|
4
|
-
|
|
5
|
-
self.addEventListener('message', (event: MessageEvent) => {
|
|
6
|
-
const request = event.data as TimerWorkerRequest;
|
|
7
|
-
|
|
8
|
-
switch (request.type) {
|
|
9
|
-
case 'setTimeout':
|
|
10
|
-
case 'setInterval':
|
|
11
|
-
timerIdMapping.set(
|
|
12
|
-
request.id,
|
|
13
|
-
(request.type === 'setTimeout' ? setTimeout : setInterval)(() => {
|
|
14
|
-
tick(request.id);
|
|
15
|
-
|
|
16
|
-
if (request.type === 'setTimeout') {
|
|
17
|
-
timerIdMapping.delete(request.id);
|
|
18
|
-
}
|
|
19
|
-
}, request.timeout),
|
|
20
|
-
);
|
|
21
|
-
break;
|
|
22
|
-
|
|
23
|
-
case 'clearTimeout':
|
|
24
|
-
case 'clearInterval':
|
|
25
|
-
(request.type === 'clearTimeout' ? clearTimeout : clearInterval)(
|
|
26
|
-
timerIdMapping.get(request.id),
|
|
27
|
-
);
|
|
28
|
-
timerIdMapping.delete(request.id);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
function tick(id: number) {
|
|
34
|
-
const message: TimerWorkerEvent = { type: 'tick', id };
|
|
35
|
-
self.postMessage(message);
|
|
36
|
-
}
|