summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-03-16 13:36:53 -0400
committerGitHub <noreply@github.com>2023-03-16 18:36:53 +0100
commit29c9a5c90d88eba5da88ea41e681e7dd7ec170b7 (patch)
tree146b0c2df9a31c3f1d9517b99203425e40730bf4
parentb99c431ac78810034ea57cc778bf57d627998aa9 (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
-rw-r--r--cli/build.rs12
-rw-r--r--runtime/build.rs4
-rw-r--r--runtime/web_worker.rs38
-rw-r--r--runtime/worker.rs35
4 files changed, 47 insertions, 42 deletions
diff --git a/cli/build.rs b/cli/build.rs
index c3fa9fb48..fdf57809a 100644
--- a/cli/build.rs
+++ b/cli/build.rs
@@ -308,11 +308,12 @@ mod ts {
}
fn create_cli_snapshot(snapshot_path: PathBuf) {
+ // NOTE(bartlomieju): ordering is important here, keep it in sync with
+ // `runtime/worker.rs`, `runtime/web_worker.rs` and `runtime/build.rs`!
let mut extensions: Vec<Extension> = vec![
deno_webidl::init(),
deno_console::init(),
deno_url::init_ops(),
- deno_tls::init_ops(),
deno_web::init_ops::<PermissionsContainer>(
deno_web::BlobStore::default(),
Default::default(),
@@ -327,18 +328,19 @@ fn create_cli_snapshot(snapshot_path: PathBuf) {
deno_broadcast_channel::InMemoryBroadcastChannel::default(),
false, // No --unstable.
),
- deno_io::init_ops(Default::default()),
- deno_fs::init_ops::<PermissionsContainer>(false),
- deno_node::init_ops::<PermissionsContainer>(None), // No --unstable.
- deno_node::init_polyfill_ops(),
deno_ffi::init_ops::<PermissionsContainer>(false),
deno_net::init_ops::<PermissionsContainer>(
None, false, // No --unstable.
None,
),
+ deno_tls::init_ops(),
deno_napi::init_ops::<PermissionsContainer>(),
deno_http::init_ops(),
+ deno_io::init_ops(Default::default()),
+ deno_fs::init_ops::<PermissionsContainer>(false),
deno_flash::init_ops::<PermissionsContainer>(false), // No --unstable
+ deno_node::init_ops::<PermissionsContainer>(None), // No --unstable.
+ deno_node::init_polyfill_ops(),
];
let mut esm_files = include_js_files!(
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(),
];