summaryrefslogtreecommitdiff
path: root/cli/main.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-02-11 13:41:56 +0100
committerGitHub <noreply@github.com>2022-02-11 13:41:56 +0100
commit2fa0096821cd04334210fcae6f54f85d304dc17a (patch)
treef4c76302e48861e2d7cf802feab9f3d560fd1c9c /cli/main.rs
parent2f2c778a074d0eff991c6c22da54429de3de6704 (diff)
compat: support --compat in web workers (#13629)
Adds another callback to WebWorkerOptions that allows to execute some modules before actual worker code executes. This allows to set up Node global using std/node.
Diffstat (limited to 'cli/main.rs')
-rw-r--r--cli/main.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/cli/main.rs b/cli/main.rs
index ecadf65bd..acf49bb3f 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -71,6 +71,7 @@ use deno_ast::MediaType;
use deno_core::error::generic_error;
use deno_core::error::AnyError;
use deno_core::futures::future::FutureExt;
+use deno_core::futures::future::LocalFutureObj;
use deno_core::futures::Future;
use deno_core::located_script_name;
use deno_core::parking_lot::RwLock;
@@ -82,6 +83,7 @@ use deno_core::Extension;
use deno_core::ModuleSpecifier;
use deno_runtime::colors;
use deno_runtime::ops::worker_host::CreateWebWorkerCb;
+use deno_runtime::ops::worker_host::PreloadModuleCb;
use deno_runtime::permissions::Permissions;
use deno_runtime::tokio_util::run_basic;
use deno_runtime::web_worker::WebWorker;
@@ -100,6 +102,24 @@ use std::pin::Pin;
use std::rc::Rc;
use std::sync::Arc;
+fn create_web_worker_preload_module_callback(
+ ps: ProcState,
+) -> Arc<PreloadModuleCb> {
+ let compat = ps.flags.compat;
+
+ Arc::new(move |mut worker| {
+ let fut = async move {
+ if compat {
+ worker.execute_side_module(&compat::GLOBAL_URL).await?;
+ worker.execute_side_module(&compat::MODULE_URL).await?;
+ }
+
+ Ok(worker)
+ };
+ LocalFutureObj::new(Box::new(fut))
+ })
+}
+
fn create_web_worker_callback(ps: ProcState) -> Arc<CreateWebWorkerCb> {
Arc::new(move |args| {
let global_state_ = ps.clone();
@@ -116,6 +136,8 @@ fn create_web_worker_callback(ps: ProcState) -> Arc<CreateWebWorkerCb> {
args.parent_permissions.clone(),
);
let create_web_worker_cb = create_web_worker_callback(ps.clone());
+ let preload_module_cb =
+ create_web_worker_preload_module_callback(ps.clone());
let extensions = ops::cli_exts(ps.clone(), args.use_deno_namespace);
@@ -145,6 +167,7 @@ fn create_web_worker_callback(ps: ProcState) -> Arc<CreateWebWorkerCb> {
seed: ps.flags.seed,
module_loader,
create_web_worker_cb,
+ preload_module_cb,
js_error_create_fn: Some(js_error_create_fn),
use_deno_namespace: args.use_deno_namespace,
worker_type: args.worker_type,
@@ -187,6 +210,8 @@ pub fn create_main_worker(
let should_break_on_first_statement = ps.flags.inspect_brk.is_some();
let create_web_worker_cb = create_web_worker_callback(ps.clone());
+ let web_worker_preload_module_cb =
+ create_web_worker_preload_module_callback(ps.clone());
let maybe_storage_key = if let Some(location) = &ps.flags.location {
// if a location is set, then the ascii serialization of the location is
@@ -240,6 +265,7 @@ pub fn create_main_worker(
seed: ps.flags.seed,
js_error_create_fn: Some(js_error_create_fn),
create_web_worker_cb,
+ web_worker_preload_module_cb,
maybe_inspector_server,
should_break_on_first_statement,
module_loader,