diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-03-16 13:36:53 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-16 18:36:53 +0100 |
commit | 29c9a5c90d88eba5da88ea41e681e7dd7ec170b7 (patch) | |
tree | 146b0c2df9a31c3f1d9517b99203425e40730bf4 /runtime | |
parent | b99c431ac78810034ea57cc778bf57d627998aa9 (diff) |
refactor: reorder op initialization (#18228)
To be able to preserve "Deno.core.ops" we need to ensure that
ops are registered in the same order in various places, otherwise
we will get mismatch in external references ordering.
Prerequisite for https://github.com/denoland/deno/pull/18080
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/build.rs | 4 | ||||
-rw-r--r-- | runtime/web_worker.rs | 38 | ||||
-rw-r--r-- | runtime/worker.rs | 35 |
3 files changed, 40 insertions, 37 deletions
diff --git a/runtime/build.rs b/runtime/build.rs index 3392f5c13..978fdda51 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -250,11 +250,12 @@ mod startup_snapshot { )) .build(); + // NOTE(bartlomieju): ordering is important here, keep it in sync with + // `runtime/worker.rs`, `runtime/web_worker.rs` and `cli/build.rs`! let mut extensions: Vec<Extension> = vec![ deno_webidl::init_esm(), deno_console::init_esm(), deno_url::init_ops_and_esm(), - deno_tls::init_ops(), deno_web::init_ops_and_esm::<Permissions>( deno_web::BlobStore::default(), Default::default(), @@ -278,6 +279,7 @@ mod startup_snapshot { None, false, // No --unstable. None, ), + deno_tls::init_ops(), deno_napi::init_ops::<Permissions>(), deno_http::init_ops_and_esm(), deno_io::init_ops_and_esm(Default::default()), diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index d413ad11f..5874d2aac 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -383,6 +383,8 @@ impl WebWorker { CreateCache(Arc::new(create_cache_fn)) }); + // NOTE(bartlomieju): ordering is important here, keep it in sync with + // `runtime/build.rs`, `runtime/worker.rs` and `cli/build.rs`! let mut extensions: Vec<Extension> = vec![ // Web APIs deno_webidl::init(), @@ -408,14 +410,26 @@ impl WebWorker { options.unsafely_ignore_certificate_errors.clone(), ), deno_webstorage::init_ops(None).disable(), + deno_crypto::init_ops(options.seed), + deno_webgpu::init_ops(unstable), deno_broadcast_channel::init_ops( options.broadcast_channel.clone(), unstable, ), - deno_crypto::init_ops(options.seed), - deno_webgpu::init_ops(unstable), - // ffi deno_ffi::init_ops::<PermissionsContainer>(unstable), + deno_net::init_ops::<PermissionsContainer>( + options.root_cert_store.clone(), + unstable, + options.unsafely_ignore_certificate_errors.clone(), + ), + deno_tls::init_ops(), + deno_napi::init_ops::<PermissionsContainer>(), + deno_http::init_ops(), + deno_io::init_ops(options.stdio), + deno_fs::init_ops::<PermissionsContainer>(unstable), + deno_flash::init_ops::<PermissionsContainer>(unstable), + deno_node::init_ops::<PermissionsContainer>(options.npm_resolver), + deno_node::init_polyfill_ops(), // Runtime ops that are always initialized for WebWorkers ops::web_worker::init(), ops::runtime::init(main_module.clone()), @@ -425,31 +439,17 @@ impl WebWorker { options.pre_execute_module_cb.clone(), options.format_js_error_fn.clone(), ), - // Extensions providing Deno.* features ops::fs_events::init(), - deno_fs::init_ops::<PermissionsContainer>(unstable), - deno_io::init_ops(options.stdio), - deno_tls::init_ops(), - deno_net::init_ops::<PermissionsContainer>( - options.root_cert_store.clone(), - unstable, - options.unsafely_ignore_certificate_errors.clone(), - ), - deno_napi::init_ops::<PermissionsContainer>(), - deno_node::init_polyfill_ops(), - deno_node::init_ops::<PermissionsContainer>(options.npm_resolver), ops::os::init_for_worker(), ops::permissions::init(), ops::process::init_ops(), ops::signal::init(), ops::tty::init(), - deno_http::init_ops(), - deno_flash::init_ops::<PermissionsContainer>(unstable), ops::http::init(), - // Permissions ext (worker specific state) - perm_ext, ]; + extensions.push(perm_ext); + // Append exts extensions.extend(std::mem::take(&mut options.extensions)); diff --git a/runtime/worker.rs b/runtime/worker.rs index 4bf7b00e8..f5289ca35 100644 --- a/runtime/worker.rs +++ b/runtime/worker.rs @@ -203,6 +203,8 @@ impl MainWorker { CreateCache(Arc::new(create_cache_fn)) }); + // NOTE(bartlomieju): ordering is important here, keep it in sync with + // `runtime/build.rs`, `runtime/web_worker.rs` and `cli/build.rs`! let mut extensions = vec![ // Web APIs deno_webidl::init(), @@ -228,41 +230,40 @@ impl MainWorker { options.unsafely_ignore_certificate_errors.clone(), ), deno_webstorage::init_ops(options.origin_storage_dir.clone()), + deno_crypto::init_ops(options.seed), + deno_webgpu::init_ops(unstable), deno_broadcast_channel::init_ops( options.broadcast_channel.clone(), unstable, ), - deno_crypto::init_ops(options.seed), - deno_webgpu::init_ops(unstable), - // ffi deno_ffi::init_ops::<PermissionsContainer>(unstable), - // Runtime ops - ops::runtime::init(main_module.clone()), - ops::worker_host::init( - options.create_web_worker_cb.clone(), - options.web_worker_preload_module_cb.clone(), - options.web_worker_pre_execute_module_cb.clone(), - options.format_js_error_fn.clone(), - ), - ops::fs_events::init(), - deno_fs::init_ops::<PermissionsContainer>(unstable), - deno_io::init_ops(options.stdio), - deno_tls::init_ops(), deno_net::init_ops::<PermissionsContainer>( options.root_cert_store.clone(), unstable, options.unsafely_ignore_certificate_errors.clone(), ), + deno_tls::init_ops(), deno_napi::init_ops::<PermissionsContainer>(), + deno_http::init_ops(), + deno_io::init_ops(options.stdio), + deno_fs::init_ops::<PermissionsContainer>(unstable), + deno_flash::init_ops::<PermissionsContainer>(unstable), deno_node::init_ops::<PermissionsContainer>(options.npm_resolver), deno_node::init_polyfill_ops(), + // Ops from this crate + ops::runtime::init(main_module.clone()), + ops::worker_host::init( + options.create_web_worker_cb.clone(), + options.web_worker_preload_module_cb.clone(), + options.web_worker_pre_execute_module_cb.clone(), + options.format_js_error_fn.clone(), + ), + ops::fs_events::init(), ops::os::init(exit_code.clone()), ops::permissions::init(), ops::process::init_ops(), ops::signal::init(), ops::tty::init(), - deno_http::init_ops(), - deno_flash::init_ops::<PermissionsContainer>(unstable), ops::http::init(), ]; |