41 lines
838 B
JavaScript
41 lines
838 B
JavaScript
export default function(source) {
|
|
const worker = new Worker(source);
|
|
let counter = 0;
|
|
const handlers = {};
|
|
|
|
worker.addEventListener("message", event => {
|
|
const { uid, message, error } = event.data;
|
|
|
|
if (!handlers[uid]) {
|
|
return;
|
|
}
|
|
|
|
const [resolve, reject] = handlers[uid];
|
|
delete handlers[uid];
|
|
|
|
if (error) {
|
|
reject(error);
|
|
} else {
|
|
resolve(message);
|
|
}
|
|
});
|
|
|
|
function postMessage(message) {
|
|
const uid = ++counter;
|
|
return new Promise((resolve, reject) => {
|
|
handlers[uid] = [resolve, reject];
|
|
worker.postMessage({ uid, message });
|
|
});
|
|
}
|
|
|
|
return {
|
|
getMetadata() {
|
|
return postMessage({ type: "meta" });
|
|
},
|
|
format(code, options, debug) {
|
|
return postMessage({ type: "format", code, options, debug });
|
|
},
|
|
postMessage
|
|
};
|
|
}
|