prettier/website/playground/WorkerApi.js

41 lines
838 B
JavaScript
Raw Normal View History

2018-04-12 00:22:03 +03:00
export default function(source) {
const worker = new Worker(source);
let counter = 0;
2018-04-17 23:29:44 +03:00
const handlers = {};
2018-04-12 00:22:03 +03:00
worker.addEventListener("message", event => {
const { uid, message, error } = event.data;
2018-04-17 23:29:44 +03:00
if (!handlers[uid]) {
return;
}
2018-04-12 00:22:03 +03:00
const [resolve, reject] = handlers[uid];
delete handlers[uid];
if (error) {
reject(error);
} else {
resolve(message);
}
});
2018-04-19 20:46:29 +03:00
function postMessage(message) {
const uid = ++counter;
return new Promise((resolve, reject) => {
handlers[uid] = [resolve, reject];
worker.postMessage({ uid, message });
});
}
2018-04-12 00:22:03 +03:00
return {
2018-04-19 20:46:29 +03:00
getMetadata() {
return postMessage({ type: "meta" });
},
format(code, options, debug) {
return postMessage({ type: "format", code, options, debug });
},
postMessage
2018-04-12 00:22:03 +03:00
};
}