yeah, the previous example was quite basic. I will write a complete example for that, but here is how you can run dynamic code:
import { task } from "@capsule-run/sdk";
export default task({
name: "main",
compute: "HIGH",
}, async () => {
const untrustedCode = "const x = 10; x * 2 + 5;";
const result = eval(untrustedCode);
return result;
});
Hope that helps!
Is the code in the eval also turned into wasm first then? Does this work as a JIT for wasm?
It actually works a bit differently. The eval is executed by the interpreter running inside the isolated wasm sandbox (StarlingMonkey). You can think of it as each sandbox having its own dedicated JavaScript engine.