UNPKG

@codesandbox/sandpack-client

Version:

<img style="width:100%" src="https://user-images.githubusercontent.com/4838076/143581035-ebee5ba2-9cb1-4fe8-a05b-2f44bd69bb4b.gif" alt="Component toolkit for live running code editing experiences" />

97 lines (83 loc) 2.17 kB
/* 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 }); };