@webwriter/code
Version:
Write and run code as a code cell. Supports several languages (HTML, JavaScript/TypeScript, Python, Java, WebAssembly).
33 lines (29 loc) • 925 B
text/typescript
// @ts-ignore
import { loadPyodide } from "https://cdn.jsdelivr.net/pyodide/v0.26.3/full/pyodide.mjs";
let resMessage = "";
let pyodide: any = null;
async function loadPyodideAndPackages() {
pyodide = await loadPyodide();
pyodide.setStdout({
batched: (msg: string) => {
resMessage += msg + "\n";
},
});
}
const pyodideReadyPromise = loadPyodideAndPackages();
self.onmessage = async (event: MessageEvent) => {
await pyodideReadyPromise;
const { id, python, ...context } = event.data;
for (const key of Object.keys(context)) {
// @ts-ignore
self[key] = context[key];
}
try {
await pyodide.loadPackagesFromImports(python);
await pyodide.runPythonAsync(python);
self.postMessage({ results: resMessage, id });
resMessage = "";
} catch (error: any) {
self.postMessage({ error: error.message, id });
}
};