45 lines
963 B
JavaScript
45 lines
963 B
JavaScript
|
/* global dcodeIO */
|
||
|
/* eslint-disable strict */
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
const functions = {
|
||
|
stringToArrayBufferBase64,
|
||
|
arrayBufferToStringBase64,
|
||
|
};
|
||
|
|
||
|
onmessage = async e => {
|
||
|
const [jobId, fnName, ...args] = e.data;
|
||
|
|
||
|
try {
|
||
|
const fn = functions[fnName];
|
||
|
if (!fn) {
|
||
|
throw new Error(`Worker: job ${jobId} did not find function ${fnName}`);
|
||
|
}
|
||
|
const result = await fn(...args);
|
||
|
postMessage([jobId, null, result]);
|
||
|
} catch (error) {
|
||
|
const errorForDisplay = prepareErrorForPostMessage(error);
|
||
|
postMessage([jobId, errorForDisplay]);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function prepareErrorForPostMessage(error) {
|
||
|
if (!error) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
if (error.stack) {
|
||
|
return error.stack;
|
||
|
}
|
||
|
|
||
|
return error.message;
|
||
|
}
|
||
|
|
||
|
function stringToArrayBufferBase64(string) {
|
||
|
return dcodeIO.ByteBuffer.wrap(string, 'base64').toArrayBuffer();
|
||
|
}
|
||
|
function arrayBufferToStringBase64(arrayBuffer) {
|
||
|
return dcodeIO.ByteBuffer.wrap(arrayBuffer).toString('base64');
|
||
|
}
|