All files / extras / evaluate / sandbox.ts

50.00% Branches 2/4
100.00% Functions 1/1
87.50% Lines 14/16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
x1
x1
x1
x1
 
x1
x1
x1
x1
x1
 
 
x1
x1
x1
x1
x1






I
I






import { Renderer } from "@mizu/internal/engine"
onmessage = async (event) => {
  try {
    const { expression, variables, imports, context } = event.data as { expression: string; variables: Record<PropertyKey, unknown> | null; imports: Record<string, string>; context: "expression" | "function" }
    // deno-lint-ignore no-explicit-any
    const renderer = await new Renderer(null as any, { directives: [] }).ready
    const result = await renderer.evaluate(null, expression, {
      state: { ...Object.fromEntries(await Promise.all(Object.entries(imports).map(async ([name, value]) => [name, await import(value)]))), ...variables },
      args: context === "function" ? [] : undefined,
    })
    postMessage({ result })
  } catch (error) {
    postMessage({ error })
  } finally {
    self.close()
  }
}