summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/build.rs31
-rw-r--r--runtime/metrics.rs45
-rw-r--r--runtime/ops/crypto.rs18
-rw-r--r--runtime/ops/fetch.rs40
-rw-r--r--runtime/ops/file.rs23
-rw-r--r--runtime/ops/mod.rs7
-rw-r--r--runtime/ops/runtime.rs32
-rw-r--r--runtime/ops/timers.rs28
-rw-r--r--runtime/ops/url.rs14
-rw-r--r--runtime/ops/webgpu.rs405
-rw-r--r--runtime/ops/websocket.rs33
-rw-r--r--runtime/web_worker.rs53
-rw-r--r--runtime/worker.rs49
13 files changed, 124 insertions, 654 deletions
diff --git a/runtime/build.rs b/runtime/build.rs
index efa949493..591ebaab7 100644
--- a/runtime/build.rs
+++ b/runtime/build.rs
@@ -1,5 +1,6 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+use deno_core::Extension;
use deno_core::JsRuntime;
use deno_core::RuntimeOptions;
use std::env;
@@ -13,17 +14,8 @@ fn create_snapshot(
snapshot_path: &Path,
files: Vec<PathBuf>,
) {
- // Initialization order matters.
- deno_webidl::init(&mut js_runtime);
- deno_console::init(&mut js_runtime);
- deno_timers::init(&mut js_runtime);
- deno_url::init(&mut js_runtime);
- deno_web::init(&mut js_runtime);
- deno_file::init(&mut js_runtime);
- deno_fetch::init(&mut js_runtime);
- deno_websocket::init(&mut js_runtime);
- deno_crypto::init(&mut js_runtime);
- deno_webgpu::init(&mut js_runtime);
+ js_runtime.init_extension_js().unwrap();
+
// TODO(nayeemrmn): https://github.com/rust-lang/cargo/issues/3946 to get the
// workspace root.
let display_root = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
@@ -47,8 +39,25 @@ fn create_snapshot(
}
fn create_runtime_snapshot(snapshot_path: &Path, files: Vec<PathBuf>) {
+ let extensions: Vec<Extension> = vec![
+ deno_webidl::init(),
+ deno_console::init(),
+ deno_url::init(),
+ deno_web::init(),
+ deno_file::init(Default::default(), Default::default()),
+ deno_fetch::init::<deno_fetch::NoFetchPermissions>("".to_owned(), None),
+ deno_websocket::init::<deno_websocket::NoWebSocketPermissions>(
+ "".to_owned(),
+ None,
+ ),
+ deno_crypto::init(None),
+ deno_webgpu::init(false),
+ deno_timers::init::<deno_timers::NoTimersPermission>(),
+ ];
+
let js_runtime = JsRuntime::new(RuntimeOptions {
will_snapshot: true,
+ extensions,
..Default::default()
});
create_snapshot(js_runtime, snapshot_path, files);
diff --git a/runtime/metrics.rs b/runtime/metrics.rs
index a80ec5e21..efc2cb457 100644
--- a/runtime/metrics.rs
+++ b/runtime/metrics.rs
@@ -1,6 +1,51 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+use crate::ops::UnstableChecker;
+use deno_core::error::AnyError;
+use deno_core::op_sync;
use deno_core::serde::Serialize;
+use deno_core::serde_json::json;
+use deno_core::serde_json::Value;
+use deno_core::Extension;
+use deno_core::OpState;
+use deno_core::ZeroCopyBuf;
+
+pub fn init() -> Extension {
+ Extension::new(
+ None,
+ Some(vec![("op_metrics", op_sync(op_metrics))]),
+ Some(Box::new(|state| {
+ state.put(RuntimeMetrics::default());
+ Ok(())
+ })),
+ Some(Box::new(metrics_op)),
+ )
+}
+
+#[derive(serde::Serialize)]
+struct MetricsReturn {
+ combined: OpMetrics,
+ ops: Value,
+}
+#[allow(clippy::unnecessary_wraps)]
+fn op_metrics(
+ state: &mut OpState,
+ _args: (),
+ _zero_copy: Option<ZeroCopyBuf>,
+) -> Result<MetricsReturn, AnyError> {
+ let m = state.borrow::<RuntimeMetrics>();
+ let combined = m.combined_metrics();
+ let unstable_checker = state.borrow::<UnstableChecker>();
+ let maybe_ops = if unstable_checker.unstable {
+ Some(&m.ops)
+ } else {
+ None
+ };
+ Ok(MetricsReturn {
+ combined,
+ ops: json!(maybe_ops),
+ })
+}
#[derive(Default, Debug)]
pub struct RuntimeMetrics {
pub ops: HashMap<&'static str, OpMetrics>,
diff --git a/runtime/ops/crypto.rs b/runtime/ops/crypto.rs
deleted file mode 100644
index 432cc0185..000000000
--- a/runtime/ops/crypto.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use deno_crypto::op_crypto_get_random_values;
-use deno_crypto::rand::rngs::StdRng;
-use deno_crypto::rand::SeedableRng;
-
-pub fn init(rt: &mut deno_core::JsRuntime, maybe_seed: Option<u64>) {
- if let Some(seed) = maybe_seed {
- let rng = StdRng::seed_from_u64(seed);
- let op_state = rt.op_state();
- let mut state = op_state.borrow_mut();
- state.put::<StdRng>(rng);
- }
- super::reg_sync(
- rt,
- "op_crypto_get_random_values",
- op_crypto_get_random_values,
- );
-}
diff --git a/runtime/ops/fetch.rs b/runtime/ops/fetch.rs
deleted file mode 100644
index 17656974a..000000000
--- a/runtime/ops/fetch.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::permissions::Permissions;
-use deno_fetch::reqwest;
-use deno_fetch::HttpClientDefaults;
-
-pub fn init(
- rt: &mut deno_core::JsRuntime,
- user_agent: String,
- ca_data: Option<Vec<u8>>,
-) {
- {
- let op_state = rt.op_state();
- let mut state = op_state.borrow_mut();
- state.put::<reqwest::Client>({
- deno_fetch::create_http_client(user_agent.clone(), ca_data.clone())
- .unwrap()
- });
- state.put::<HttpClientDefaults>(HttpClientDefaults {
- user_agent,
- ca_data,
- });
- }
- super::reg_sync(rt, "op_fetch", deno_fetch::op_fetch::<Permissions>);
- super::reg_async(rt, "op_fetch_send", deno_fetch::op_fetch_send);
- super::reg_async(
- rt,
- "op_fetch_request_write",
- deno_fetch::op_fetch_request_write,
- );
- super::reg_async(
- rt,
- "op_fetch_response_read",
- deno_fetch::op_fetch_response_read,
- );
- super::reg_sync(
- rt,
- "op_create_http_client",
- deno_fetch::op_create_http_client::<Permissions>,
- );
-}
diff --git a/runtime/ops/file.rs b/runtime/ops/file.rs
deleted file mode 100644
index 8f471ebbd..000000000
--- a/runtime/ops/file.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use deno_core::url::Url;
-use deno_file::op_file_create_object_url;
-use deno_file::op_file_revoke_object_url;
-use deno_file::BlobUrlStore;
-use deno_file::Location;
-
-pub fn init(
- rt: &mut deno_core::JsRuntime,
- blob_url_store: BlobUrlStore,
- maybe_location: Option<Url>,
-) {
- {
- let op_state = rt.op_state();
- let mut op_state = op_state.borrow_mut();
- op_state.put(blob_url_store);
- if let Some(location) = maybe_location {
- op_state.put(Location(location));
- }
- }
- super::reg_sync(rt, "op_file_create_object_url", op_file_create_object_url);
- super::reg_sync(rt, "op_file_revoke_object_url", op_file_revoke_object_url);
-}
diff --git a/runtime/ops/mod.rs b/runtime/ops/mod.rs
index 825950d65..c46f82af6 100644
--- a/runtime/ops/mod.rs
+++ b/runtime/ops/mod.rs
@@ -1,8 +1,5 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-pub mod crypto;
-pub mod fetch;
-pub mod file;
pub mod fs;
pub mod fs_events;
pub mod http;
@@ -16,14 +13,10 @@ pub mod plugin;
pub mod process;
pub mod runtime;
pub mod signal;
-pub mod timers;
pub mod tls;
pub mod tty;
-pub mod url;
mod utils;
pub mod web_worker;
-pub mod webgpu;
-pub mod websocket;
pub mod worker_host;
use crate::metrics::metrics_op;
diff --git a/runtime/ops/runtime.rs b/runtime/ops/runtime.rs
index a02bf4548..7d84fadff 100644
--- a/runtime/ops/runtime.rs
+++ b/runtime/ops/runtime.rs
@@ -1,13 +1,8 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::metrics::OpMetrics;
-use crate::metrics::RuntimeMetrics;
-use crate::ops::UnstableChecker;
use crate::permissions::Permissions;
use deno_core::error::AnyError;
use deno_core::error::Context;
-use deno_core::serde_json::json;
-use deno_core::serde_json::Value;
use deno_core::ModuleSpecifier;
use deno_core::OpState;
use deno_core::ZeroCopyBuf;
@@ -19,7 +14,6 @@ pub fn init(rt: &mut deno_core::JsRuntime, main_module: ModuleSpecifier) {
state.put::<ModuleSpecifier>(main_module);
}
super::reg_sync(rt, "op_main_module", op_main_module);
- super::reg_sync(rt, "op_metrics", op_metrics);
}
fn op_main_module(
@@ -41,32 +35,6 @@ fn op_main_module(
Ok(main)
}
-#[derive(serde::Serialize)]
-struct MetricsReturn {
- combined: OpMetrics,
- ops: Value,
-}
-
-#[allow(clippy::unnecessary_wraps)]
-fn op_metrics(
- state: &mut OpState,
- _args: (),
- _zero_copy: Option<ZeroCopyBuf>,
-) -> Result<MetricsReturn, AnyError> {
- let m = state.borrow::<RuntimeMetrics>();
- let combined = m.combined_metrics();
- let unstable_checker = state.borrow::<UnstableChecker>();
- let maybe_ops = if unstable_checker.unstable {
- Some(&m.ops)
- } else {
- None
- };
- Ok(MetricsReturn {
- combined,
- ops: json!(maybe_ops),
- })
-}
-
pub fn ppid() -> i64 {
#[cfg(windows)]
{
diff --git a/runtime/ops/timers.rs b/runtime/ops/timers.rs
deleted file mode 100644
index 3401c36f1..000000000
--- a/runtime/ops/timers.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::permissions::Permissions;
-
-pub fn init(rt: &mut deno_core::JsRuntime) {
- {
- let op_state = rt.op_state();
- let mut state = op_state.borrow_mut();
- state.put(deno_timers::GlobalTimer::default());
- state.put(deno_timers::StartTime::now());
- }
- super::reg_sync(
- rt,
- "op_global_timer_stop",
- deno_timers::op_global_timer_stop,
- );
- super::reg_sync(
- rt,
- "op_global_timer_start",
- deno_timers::op_global_timer_start,
- );
- super::reg_async(rt, "op_global_timer", deno_timers::op_global_timer);
- super::reg_sync(rt, "op_now", deno_timers::op_now::<Permissions>);
- super::reg_sync(
- rt,
- "op_sleep_sync",
- deno_timers::op_sleep_sync::<Permissions>,
- );
-}
diff --git a/runtime/ops/url.rs b/runtime/ops/url.rs
deleted file mode 100644
index 5168a7242..000000000
--- a/runtime/ops/url.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use deno_url::op_url_parse;
-use deno_url::op_url_parse_search_params;
-use deno_url::op_url_stringify_search_params;
-
-pub fn init(rt: &mut deno_core::JsRuntime) {
- super::reg_sync(rt, "op_url_parse", op_url_parse);
- super::reg_sync(rt, "op_url_parse_search_params", op_url_parse_search_params);
- super::reg_sync(
- rt,
- "op_url_stringify_search_params",
- op_url_stringify_search_params,
- );
-}
diff --git a/runtime/ops/webgpu.rs b/runtime/ops/webgpu.rs
deleted file mode 100644
index 55c6d1817..000000000
--- a/runtime/ops/webgpu.rs
+++ /dev/null
@@ -1,405 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use deno_webgpu::*;
-
-pub fn init(rt: &mut deno_core::JsRuntime) {
- {
- let op_state = rt.op_state();
- let mut state = op_state.borrow_mut();
- let unstable_checker = state.borrow::<super::UnstableChecker>();
- let unstable = unstable_checker.unstable;
- state.put(Unstable(unstable));
- }
-
- super::reg_async(rt, "op_webgpu_request_adapter", op_webgpu_request_adapter);
- super::reg_async(rt, "op_webgpu_request_device", op_webgpu_request_device);
- super::reg_sync(rt, "op_webgpu_create_query_set", op_webgpu_create_query_set);
-
- {
- // buffer
- super::reg_sync(
- rt,
- "op_webgpu_create_buffer",
- buffer::op_webgpu_create_buffer,
- );
- super::reg_async(
- rt,
- "op_webgpu_buffer_get_map_async",
- buffer::op_webgpu_buffer_get_map_async,
- );
- super::reg_sync(
- rt,
- "op_webgpu_buffer_get_mapped_range",
- buffer::op_webgpu_buffer_get_mapped_range,
- );
- super::reg_sync(
- rt,
- "op_webgpu_buffer_unmap",
- buffer::op_webgpu_buffer_unmap,
- );
- }
- {
- // texture
- super::reg_sync(
- rt,
- "op_webgpu_create_texture",
- texture::op_webgpu_create_texture,
- );
- super::reg_sync(
- rt,
- "op_webgpu_create_texture_view",
- texture::op_webgpu_create_texture_view,
- );
- }
- {
- // sampler
- super::reg_sync(
- rt,
- "op_webgpu_create_sampler",
- sampler::op_webgpu_create_sampler,
- );
- }
- {
- // binding
- super::reg_sync(
- rt,
- "op_webgpu_create_bind_group_layout",
- binding::op_webgpu_create_bind_group_layout,
- );
- super::reg_sync(
- rt,
- "op_webgpu_create_pipeline_layout",
- binding::op_webgpu_create_pipeline_layout,
- );
- super::reg_sync(
- rt,
- "op_webgpu_create_bind_group",
- binding::op_webgpu_create_bind_group,
- );
- }
- {
- // pipeline
- super::reg_sync(
- rt,
- "op_webgpu_create_compute_pipeline",
- pipeline::op_webgpu_create_compute_pipeline,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pipeline_get_bind_group_layout",
- pipeline::op_webgpu_compute_pipeline_get_bind_group_layout,
- );
- super::reg_sync(
- rt,
- "op_webgpu_create_render_pipeline",
- pipeline::op_webgpu_create_render_pipeline,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pipeline_get_bind_group_layout",
- pipeline::op_webgpu_render_pipeline_get_bind_group_layout,
- );
- }
- {
- // command_encoder
- super::reg_sync(
- rt,
- "op_webgpu_create_command_encoder",
- command_encoder::op_webgpu_create_command_encoder,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_begin_render_pass",
- command_encoder::op_webgpu_command_encoder_begin_render_pass,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_begin_compute_pass",
- command_encoder::op_webgpu_command_encoder_begin_compute_pass,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_copy_buffer_to_buffer",
- command_encoder::op_webgpu_command_encoder_copy_buffer_to_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_copy_buffer_to_texture",
- command_encoder::op_webgpu_command_encoder_copy_buffer_to_texture,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_copy_texture_to_buffer",
- command_encoder::op_webgpu_command_encoder_copy_texture_to_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_copy_texture_to_texture",
- command_encoder::op_webgpu_command_encoder_copy_texture_to_texture,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_push_debug_group",
- command_encoder::op_webgpu_command_encoder_push_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_pop_debug_group",
- command_encoder::op_webgpu_command_encoder_pop_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_insert_debug_marker",
- command_encoder::op_webgpu_command_encoder_insert_debug_marker,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_write_timestamp",
- command_encoder::op_webgpu_command_encoder_write_timestamp,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_resolve_query_set",
- command_encoder::op_webgpu_command_encoder_resolve_query_set,
- );
- super::reg_sync(
- rt,
- "op_webgpu_command_encoder_finish",
- command_encoder::op_webgpu_command_encoder_finish,
- );
- }
- {
- // render_pass
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_viewport",
- render_pass::op_webgpu_render_pass_set_viewport,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_scissor_rect",
- render_pass::op_webgpu_render_pass_set_scissor_rect,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_blend_color",
- render_pass::op_webgpu_render_pass_set_blend_color,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_stencil_reference",
- render_pass::op_webgpu_render_pass_set_stencil_reference,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_begin_pipeline_statistics_query",
- render_pass::op_webgpu_render_pass_begin_pipeline_statistics_query,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_end_pipeline_statistics_query",
- render_pass::op_webgpu_render_pass_end_pipeline_statistics_query,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_write_timestamp",
- render_pass::op_webgpu_render_pass_write_timestamp,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_execute_bundles",
- render_pass::op_webgpu_render_pass_execute_bundles,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_end_pass",
- render_pass::op_webgpu_render_pass_end_pass,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_bind_group",
- render_pass::op_webgpu_render_pass_set_bind_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_push_debug_group",
- render_pass::op_webgpu_render_pass_push_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_pop_debug_group",
- render_pass::op_webgpu_render_pass_pop_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_insert_debug_marker",
- render_pass::op_webgpu_render_pass_insert_debug_marker,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_pipeline",
- render_pass::op_webgpu_render_pass_set_pipeline,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_index_buffer",
- render_pass::op_webgpu_render_pass_set_index_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_set_vertex_buffer",
- render_pass::op_webgpu_render_pass_set_vertex_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_draw",
- render_pass::op_webgpu_render_pass_draw,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_draw_indexed",
- render_pass::op_webgpu_render_pass_draw_indexed,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_draw_indirect",
- render_pass::op_webgpu_render_pass_draw_indirect,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_pass_draw_indexed_indirect",
- render_pass::op_webgpu_render_pass_draw_indexed_indirect,
- );
- }
- {
- // compute_pass
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_set_pipeline",
- compute_pass::op_webgpu_compute_pass_set_pipeline,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_dispatch",
- compute_pass::op_webgpu_compute_pass_dispatch,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_dispatch_indirect",
- compute_pass::op_webgpu_compute_pass_dispatch_indirect,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_end_pass",
- compute_pass::op_webgpu_compute_pass_end_pass,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_set_bind_group",
- compute_pass::op_webgpu_compute_pass_set_bind_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_push_debug_group",
- compute_pass::op_webgpu_compute_pass_push_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_pop_debug_group",
- compute_pass::op_webgpu_compute_pass_pop_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_compute_pass_insert_debug_marker",
- compute_pass::op_webgpu_compute_pass_insert_debug_marker,
- );
- }
- {
- // bundle
- super::reg_sync(
- rt,
- "op_webgpu_create_render_bundle_encoder",
- bundle::op_webgpu_create_render_bundle_encoder,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_finish",
- bundle::op_webgpu_render_bundle_encoder_finish,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_set_bind_group",
- bundle::op_webgpu_render_bundle_encoder_set_bind_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_push_debug_group",
- bundle::op_webgpu_render_bundle_encoder_push_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_pop_debug_group",
- bundle::op_webgpu_render_bundle_encoder_pop_debug_group,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_insert_debug_marker",
- bundle::op_webgpu_render_bundle_encoder_insert_debug_marker,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_set_pipeline",
- bundle::op_webgpu_render_bundle_encoder_set_pipeline,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_set_index_buffer",
- bundle::op_webgpu_render_bundle_encoder_set_index_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_set_vertex_buffer",
- bundle::op_webgpu_render_bundle_encoder_set_vertex_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_draw",
- bundle::op_webgpu_render_bundle_encoder_draw,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_draw_indexed",
- bundle::op_webgpu_render_bundle_encoder_draw_indexed,
- );
- super::reg_sync(
- rt,
- "op_webgpu_render_bundle_encoder_draw_indirect",
- bundle::op_webgpu_render_bundle_encoder_draw_indirect,
- );
- }
- {
- // queue
- super::reg_sync(
- rt,
- "op_webgpu_queue_submit",
- queue::op_webgpu_queue_submit,
- );
- super::reg_sync(
- rt,
- "op_webgpu_write_buffer",
- queue::op_webgpu_write_buffer,
- );
- super::reg_sync(
- rt,
- "op_webgpu_write_texture",
- queue::op_webgpu_write_texture,
- );
- }
- {
- // shader
- super::reg_sync(
- rt,
- "op_webgpu_create_shader_module",
- shader::op_webgpu_create_shader_module,
- );
- }
-}
diff --git a/runtime/ops/websocket.rs b/runtime/ops/websocket.rs
deleted file mode 100644
index 1c44f8b80..000000000
--- a/runtime/ops/websocket.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-use crate::permissions::Permissions;
-use deno_websocket::op_ws_check_permission;
-use deno_websocket::op_ws_close;
-use deno_websocket::op_ws_create;
-use deno_websocket::op_ws_next_event;
-use deno_websocket::op_ws_send;
-use deno_websocket::WsCaData;
-use deno_websocket::WsUserAgent;
-
-pub fn init(
- rt: &mut deno_core::JsRuntime,
- user_agent: String,
- ca_data: Option<Vec<u8>>,
-) {
- {
- let op_state = rt.op_state();
- let mut state = op_state.borrow_mut();
- state.put::<WsUserAgent>(WsUserAgent(user_agent));
- if let Some(ca_data) = ca_data {
- state.put::<WsCaData>(WsCaData(ca_data));
- }
- }
- super::reg_sync(
- rt,
- "op_ws_check_permission",
- op_ws_check_permission::<Permissions>,
- );
- super::reg_async(rt, "op_ws_create", op_ws_create::<Permissions>);
- super::reg_async(rt, "op_ws_send", op_ws_send);
- super::reg_async(rt, "op_ws_close", op_ws_close);
- super::reg_async(rt, "op_ws_next_event", op_ws_next_event);
-}
diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs
index f6f88f59b..5feb0212c 100644
--- a/runtime/web_worker.rs
+++ b/runtime/web_worker.rs
@@ -3,7 +3,7 @@ use crate::colors;
use crate::inspector::DenoInspector;
use crate::inspector::InspectorServer;
use crate::js;
-use crate::metrics::RuntimeMetrics;
+use crate::metrics;
use crate::ops;
use crate::permissions::Permissions;
use crate::tokio_util::create_basic_runtime;
@@ -18,6 +18,7 @@ use deno_core::serde_json;
use deno_core::serde_json::json;
use deno_core::url::Url;
use deno_core::v8;
+use deno_core::Extension;
use deno_core::GetErrorClassFn;
use deno_core::JsErrorCreateFn;
use deno_core::JsRuntime;
@@ -176,11 +177,37 @@ impl WebWorker {
worker_id: u32,
options: &WebWorkerOptions,
) -> Self {
+ let extensions: Vec<Extension> = vec![
+ // Web APIs
+ deno_webidl::init(),
+ deno_console::init(),
+ deno_url::init(),
+ deno_web::init(),
+ deno_file::init(
+ options.blob_url_store.clone(),
+ Some(main_module.clone()),
+ ),
+ deno_fetch::init::<Permissions>(
+ options.user_agent.clone(),
+ options.ca_data.clone(),
+ ),
+ deno_websocket::init::<Permissions>(
+ options.user_agent.clone(),
+ options.ca_data.clone(),
+ ),
+ deno_crypto::init(options.seed),
+ deno_webgpu::init(options.unstable),
+ deno_timers::init::<Permissions>(),
+ // Metrics
+ metrics::init(),
+ ];
+
let mut js_runtime = JsRuntime::new(RuntimeOptions {
module_loader: Some(options.module_loader.clone()),
startup_snapshot: Some(js::deno_isolate_init()),
js_error_create_fn: options.js_error_create_fn.clone(),
get_error_class_fn: options.get_error_class_fn,
+ extensions,
..Default::default()
});
@@ -220,21 +247,16 @@ impl WebWorker {
{
let op_state = js_runtime.op_state();
let mut op_state = op_state.borrow_mut();
- op_state.put(RuntimeMetrics::default());
op_state.put::<Permissions>(permissions);
op_state.put(ops::UnstableChecker {
unstable: options.unstable,
});
}
+ js_runtime.init_extension_ops().unwrap();
+
ops::web_worker::init(js_runtime, sender.clone(), handle);
- ops::runtime::init(js_runtime, main_module.clone());
- ops::fetch::init(
- js_runtime,
- options.user_agent.clone(),
- options.ca_data.clone(),
- );
- ops::timers::init(js_runtime);
+ ops::runtime::init(js_runtime, main_module);
ops::worker_host::init(
js_runtime,
Some(sender),
@@ -242,20 +264,7 @@ impl WebWorker {
);
ops::reg_sync(js_runtime, "op_close", deno_core::op_close);
ops::reg_sync(js_runtime, "op_resources", deno_core::op_resources);
- ops::url::init(js_runtime);
- ops::file::init(
- js_runtime,
- options.blob_url_store.clone(),
- Some(main_module),
- );
ops::io::init(js_runtime);
- ops::webgpu::init(js_runtime);
- ops::websocket::init(
- js_runtime,
- options.user_agent.clone(),
- options.ca_data.clone(),
- );
- ops::crypto::init(js_runtime, options.seed);
if options.use_deno_namespace {
ops::fs_events::init(js_runtime);
diff --git a/runtime/worker.rs b/runtime/worker.rs
index 6dbf8e7ec..fddaf1f01 100644
--- a/runtime/worker.rs
+++ b/runtime/worker.rs
@@ -4,7 +4,7 @@ use crate::inspector::DenoInspector;
use crate::inspector::InspectorServer;
use crate::inspector::InspectorSession;
use crate::js;
-use crate::metrics::RuntimeMetrics;
+use crate::metrics;
use crate::ops;
use crate::permissions::Permissions;
use deno_core::error::AnyError;
@@ -15,6 +15,7 @@ use deno_core::futures::stream::StreamExt;
use deno_core::serde_json;
use deno_core::serde_json::json;
use deno_core::url::Url;
+use deno_core::Extension;
use deno_core::GetErrorClassFn;
use deno_core::JsErrorCreateFn;
use deno_core::JsRuntime;
@@ -77,11 +78,35 @@ impl MainWorker {
permissions: Permissions,
options: &WorkerOptions,
) -> Self {
+ // Internal modules
+ let extensions: Vec<Extension> = vec![
+ // Web APIs
+ deno_webidl::init(),
+ deno_console::init(),
+ deno_url::init(),
+ deno_web::init(),
+ deno_file::init(options.blob_url_store.clone(), options.location.clone()),
+ deno_fetch::init::<Permissions>(
+ options.user_agent.clone(),
+ options.ca_data.clone(),
+ ),
+ deno_websocket::init::<Permissions>(
+ options.user_agent.clone(),
+ options.ca_data.clone(),
+ ),
+ deno_crypto::init(options.seed),
+ deno_webgpu::init(options.unstable),
+ deno_timers::init::<Permissions>(),
+ // Metrics
+ metrics::init(),
+ ];
+
let mut js_runtime = JsRuntime::new(RuntimeOptions {
module_loader: Some(options.module_loader.clone()),
startup_snapshot: Some(js::deno_isolate_init()),
js_error_create_fn: options.js_error_create_fn.clone(),
get_error_class_fn: options.get_error_class_fn,
+ extensions,
..Default::default()
});
@@ -109,34 +134,22 @@ impl MainWorker {
{
let op_state = js_runtime.op_state();
let mut op_state = op_state.borrow_mut();
- op_state.put(RuntimeMetrics::default());
op_state.put::<Permissions>(permissions);
op_state.put(ops::UnstableChecker {
unstable: options.unstable,
});
}
+ js_runtime.init_extension_ops().unwrap();
+
ops::runtime::init(js_runtime, main_module);
- ops::fetch::init(
- js_runtime,
- options.user_agent.clone(),
- options.ca_data.clone(),
- );
- ops::timers::init(js_runtime);
ops::worker_host::init(
js_runtime,
None,
options.create_web_worker_cb.clone(),
);
- ops::crypto::init(js_runtime, options.seed);
ops::reg_sync(js_runtime, "op_close", deno_core::op_close);
ops::reg_sync(js_runtime, "op_resources", deno_core::op_resources);
- ops::url::init(js_runtime);
- ops::file::init(
- js_runtime,
- options.blob_url_store.clone(),
- options.location.clone(),
- );
ops::fs_events::init(js_runtime);
ops::fs::init(js_runtime);
ops::http::init(js_runtime);
@@ -149,12 +162,6 @@ impl MainWorker {
ops::signal::init(js_runtime);
ops::tls::init(js_runtime);
ops::tty::init(js_runtime);
- ops::webgpu::init(js_runtime);
- ops::websocket::init(
- js_runtime,
- options.user_agent.clone(),
- options.ca_data.clone(),
- );
}
{
let op_state = js_runtime.op_state();