hmn/public/js/editorpreviews.js

34 lines
796 B
JavaScript

importScripts('../go_wasm_exec.js');
/*
NOTE(ben): The structure here is a little funny but allows for some debouncing. Any postMessages
that got queued up can run all at once, then it can process the latest one.
*/
let ready = false;
let inputData = null;
onmessage = ({ data }) => {
inputData = data;
setTimeout(doPreview, 0);
}
const go = new Go();
WebAssembly.instantiateStreaming(fetch('../parsing.wasm'), go.importObject)
.then(result => {
go.run(result.instance); // don't await this; we want it to be continuously running
ready = true;
setTimeout(doPreview, 0);
});
const doPreview = () => {
if (!ready || !inputData) {
return;
}
const result = parseMarkdown(inputData);
inputData = null;
postMessage(result);
}