ErosZy/sablejs

Run user plugins, rules, formulas, and AI-generated JavaScript safely in browsers.

它解决了什么问题

Sablejs 提供了一种快速且安全的方式,用于执行由用户编写或由 AI 生成的 JavaScript 代码,而无需嵌入虚拟机的开销。它解决了在保持高性能和可调试性(通过源映射)的同时,安全地运行不受信任代码(沙箱化)的问题。

它如何工作

与使用虚拟机不同,sablejs 采用 AOT(提前编译)方式,将客机 JavaScript(ES5.1)编译为宿主机 JavaScript。它使用一种「沙箱」模式,递归地将纯数据从宿主机复制到客机,确保客机代码中的任何修改都无法影响宿主机的对象图。宿主机函数以「能力」的形式暴露给客机——这些是经过中介的包装器,可清理错误并复制参数/结果。

为防止无限循环或内存耗尽,建议在专用的 Web Worker 中运行编译后的程序,使宿主机能够强制执行时钟时间超时并终止执行代理。

适用于谁

需要在 Node.js、浏览器或其他 JS 运行时(如 Deno 和 Bun)中执行动态、用户提供的或 AI 生成的 JavaScript 逻辑(例如插件系统或规则引擎)的开发者。

特色亮点

  • AOT 编译:将客机代码编译为宿主机 JS,以实现速度优势,避免使用嵌入式虚拟机的方法。

  • 安全沙箱:默认情况下阻止客机代码访问宿主机对象或平台 API(如 windowfs)。

  • 能力系统:允许宿主机显式授予对宿主机函数的狭窄、受控访问。

  • 可调试:生成 Source Map v3,用于将生成的代码映射回原始客机源码。

  • Worker 隔离:内置辅助工具,用于在 Worker 中运行程序以强制执行超时。

  • 高性能:在多个基准测试中表现优于 QuickJS-WASM(例如 V8 Benchmark Suite 7)。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目