UNPKG

1.26 kBJavaScriptView Raw
1export const workerCallback = function(options) {
2 const transmuxer = options.transmuxer;
3 const endAction = options.endAction || options.action;
4 const callback = options.callback;
5 const message = Object.assign({}, options, {endAction: null, transmuxer: null, callback: null});
6
7 const listenForEndEvent = (event) => {
8 if (event.data.action !== endAction) {
9 return;
10 }
11 transmuxer.removeEventListener('message', listenForEndEvent);
12
13 // transfer ownership of bytes back to us.
14 if (event.data.data) {
15 event.data.data = new Uint8Array(
16 event.data.data,
17 options.byteOffset || 0,
18 options.byteLength || event.data.data.byteLength
19 );
20 if (options.data) {
21 options.data = event.data.data;
22 }
23 }
24
25 callback(event.data);
26 };
27
28 transmuxer.addEventListener('message', listenForEndEvent);
29
30 if (options.data) {
31 const isArrayBuffer = options.data instanceof ArrayBuffer;
32
33 message.byteOffset = isArrayBuffer ? 0 : options.data.byteOffset;
34 message.byteLength = options.data.byteLength;
35
36 const transfers = [isArrayBuffer ? options.data : options.data.buffer];
37
38 transmuxer.postMessage(message, transfers);
39 } else {
40 transmuxer.postMessage(message);
41 }
42};