Вы можете использовать веб-воркеров без Deno
пространства имен.
// deno property defaults to false
const worker = new Worker(new URL("worker.js", import.meta.url).href, { type: "module", deno: false });
Вы можете передать строку воркеру и eval/Function
внутри. Или сохраните код пользователя в файл и вызовите Worker
с этим файлом, вы можете добавить оболочку к коду пользователя, чтобы вы могли вернуть вывод в основной процесс.
С deno: false
победил работник ' t имеют доступ к пространству имен Deno
, поэтому пользователь не сможет выполнять вызовы файловой системы, запускать сервер, читать переменные среды и т. д. c.
А что касается бесконечных циклов, добавьте таймер в основной процесс и убейте Worker
, если он не завершился к тому времени, используя .terminate()
Что касается fetch
Web API, чтобы предотвратить сетевые вызовы, вы можете запустить команду без флага --allow-net
, или вы можете ограничить сетевые вызовы определенным доменом c. --allow-net=deno.land