INTEGRITY Документация

Code interpreter

На @next, интерпретатор кода является расширением, подключаемым по желанию, а не методами базового Sandbox. Имена методов совпадают с именами в стабильном интерпретаторе. Вы подключаетесь один раз, а затем вызываете sandbox.interpreter.*. runCode возвращает обычные сериализуемые данные через границу между Worker и Durable Object.

Сигнатуры и типы: Interpreter API.

Подключение

import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";

export class Sandbox extends BaseSandbox {
	interpreter = withInterpreter(this);
}
import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";

export class Sandbox extends BaseSandbox<Env> {
	interpreter = withInterpreter(this);
}

Экспортируйте этот класс из своего Worker. Сайдкар разворачивается при первом использовании.

Изображение

Язык Изображение
JavaScript / TypeScript Образ песочницы по умолчанию (или любой вариант со средой выполнения JS)
Python -python вариант образа

Используйте тот же пакет preview Worker и ту же версию образа контейнера. См. Dockerfile.

Выполнение кода

A контекст сохраняет переменные и импорты, пока вы не удалите его или пока контейнер не будет заменён.

const sandbox = getSandbox(env.Sandbox, "user-123");

const context = await sandbox.interpreter.createCodeContext({
	language: "python",
	cwd: "/workspace",
});

await sandbox.interpreter.runCode("x = 2", { context });
const result = await sandbox.interpreter.runCode("x * 21", { context });

if (result.error) {
	console.error(result.error.name, result.error.message);
} else {
	console.log(result.results, result.logs.stdout);
}
const sandbox = getSandbox(env.Sandbox, "user-123");

const context = await sandbox.interpreter.createCodeContext({
	language: "python",
	cwd: "/workspace",
});

await sandbox.interpreter.runCode("x = 2", { context });
const result = await sandbox.interpreter.runCode("x * 21", { context });

if (result.error) {
	console.error(result.error.name, result.error.message);
} else {
	console.log(result.results, result.logs.stdout);
}

Если вы не укажете context, runCode использует контекст по умолчанию для языка (язык по умолчанию: python). Языки: python, javascript, typescript.

Для полей результата, потоковая передача (runCodeStream), а также методы контекста для получения списка и удаления, см. Interpreter API.

Контексты существуют только в текущий контейнер. После остановки или замены создайте новые. См. Жизненный цикл песочницы.