worktank
Version:
A simple isomorphic library for executing functions inside WebWorkers or Node Threads pools.
28 lines (27 loc) • 1.13 kB
JavaScript
/* IMPORT */
import WorkerShim from 'webworker-shim';
import WorkerBackend from './backend_compiled.js';
/* MAIN */
class WorkerFrontend {
/* CONSTRUCTOR */
constructor(name, bootloader, onClose, onError, onMessage) {
/* API */
this.listen = (onClose, onError, onMessage) => {
this.worker.addEventListener('close', event => onClose(event['data']));
this.worker.addEventListener('error', event => onError(event['data']));
this.worker.addEventListener('message', event => onMessage(event['data']));
};
this.send = (message, transfer = []) => {
this.worker.postMessage(message, transfer);
};
this.terminate = () => {
this.worker.terminate();
};
const backend = WorkerBackend.replace('/*! BOOTLOADER_PLACEHOLDER !*/', bootloader);
const script = `data:text/javascript;charset=utf-8,${encodeURIComponent(backend)}`;
this.worker = new WorkerShim(script, { name, type: 'module' });
this.listen(onClose, onError, onMessage);
}
}
/* EXPORT */
export default WorkerFrontend;