97 lines
2.1 KiB
JavaScript
97 lines
2.1 KiB
JavaScript
/* eslint-env worker */
|
|
/* eslint no-var: off, strict: off */
|
|
|
|
const parsersLoaded = {};
|
|
|
|
const loadParser = parser => {
|
|
if (!parsersLoaded[parser]) {
|
|
if (parser === "vue") {
|
|
loadParser("typescript");
|
|
loadParser("babylon");
|
|
loadParser("postcss");
|
|
}
|
|
|
|
importScripts("/static/js/prettier/1.13.0/parser-" + parser + ".js");
|
|
parsersLoaded[parser] = true;
|
|
}
|
|
};
|
|
|
|
importScripts("/static/js/prettier/1.13.0/standalone.js");
|
|
if (typeof prettier === "undefined") {
|
|
prettier = module.exports; // eslint-disable-line
|
|
}
|
|
if (typeof prettier === "undefined") {
|
|
prettier = index; // eslint-disable-line
|
|
}
|
|
|
|
function formatCode(text, options) {
|
|
try {
|
|
const useCursorOffset = options.cursorOffset !== undefined;
|
|
|
|
if (useCursorOffset) {
|
|
return self.prettier.formatWithCursor(text, options);
|
|
}
|
|
|
|
const formatted = self.prettier.format(text, options);
|
|
return { formatted };
|
|
} catch (e) {
|
|
if (e.constructor && e.constructor.name === "SyntaxError") {
|
|
// Likely something wrong with the user's code
|
|
throw e;
|
|
}
|
|
// Likely a bug in Prettier
|
|
// Provide the whole stack for debugging
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
self.onmessage = message => {
|
|
var options = message.data.options || {};
|
|
options.parser = options.parser || "babylon";
|
|
|
|
loadParser(options.parser);
|
|
|
|
let result;
|
|
options.plugins = self.prettierPlugins;
|
|
try {
|
|
result = formatCode(message.data.text, options);
|
|
} catch (e) {
|
|
console.error(e);
|
|
self.postMessage({ error: e.message, text: message.data.text });
|
|
return;
|
|
}
|
|
var doc;
|
|
var ast;
|
|
|
|
if (message.data.ast) {
|
|
try {
|
|
ast = JSON.stringify(
|
|
prettier.__debug.parse(message.data.text, options),
|
|
null,
|
|
2
|
|
);
|
|
} catch (e) {
|
|
ast = e.toString();
|
|
}
|
|
}
|
|
|
|
if (message.data.doc) {
|
|
lazyLoadParser("babylon");
|
|
try {
|
|
doc = prettier.__debug.formatDoc(
|
|
prettier.__debug.printToDoc(message.data.text, options),
|
|
{ parser: "babylon" }
|
|
);
|
|
} catch (e) {
|
|
doc = e.toString();
|
|
}
|
|
}
|
|
|
|
self.postMessage({
|
|
result,
|
|
text: message.data.text,
|
|
doc: doc,
|
|
ast: ast
|
|
});
|
|
};
|