summaryrefslogtreecommitdiff
path: root/runtime/worker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/worker.rs')
-rw-r--r--runtime/worker.rs230
1 files changed, 160 insertions, 70 deletions
diff --git a/runtime/worker.rs b/runtime/worker.rs
index 42ff6b0f9..3d30b95a3 100644
--- a/runtime/worker.rs
+++ b/runtime/worker.rs
@@ -183,6 +183,160 @@ impl Default for WorkerOptions {
}
}
+#[cfg(not(feature = "dont_create_runtime_snapshot"))]
+fn get_extensions(
+ options: &mut WorkerOptions,
+ unstable: bool,
+ exit_code: ExitCode,
+ main_module: ModuleSpecifier,
+) -> Vec<Extension> {
+ let create_cache = options.cache_storage_dir.take().map(|storage_dir| {
+ let create_cache_fn = move || SqliteBackedCache::new(storage_dir.clone());
+ CreateCache(Arc::new(create_cache_fn))
+ });
+
+ vec![
+ // Web APIs
+ deno_webidl::init(),
+ deno_console::init(),
+ deno_url::init_ops(),
+ deno_web::init_ops::<PermissionsContainer>(
+ options.blob_store.clone(),
+ options.bootstrap.location.clone(),
+ ),
+ deno_fetch::init_ops::<PermissionsContainer>(deno_fetch::Options {
+ user_agent: options.bootstrap.user_agent.clone(),
+ root_cert_store: options.root_cert_store.clone(),
+ unsafely_ignore_certificate_errors: options
+ .unsafely_ignore_certificate_errors
+ .clone(),
+ file_fetch_handler: Rc::new(deno_fetch::FsFetchHandler),
+ ..Default::default()
+ }),
+ deno_cache::init_ops::<SqliteBackedCache>(create_cache),
+ deno_websocket::init_ops::<PermissionsContainer>(
+ options.bootstrap.user_agent.clone(),
+ options.root_cert_store.clone(),
+ options.unsafely_ignore_certificate_errors.clone(),
+ ),
+ deno_webstorage::init_ops(options.origin_storage_dir.clone()),
+ 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),
+ 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(std::mem::take(&mut options.stdio)),
+ deno_tls::init(),
+ deno_net::init_ops::<PermissionsContainer>(
+ options.root_cert_store.clone(),
+ unstable,
+ options.unsafely_ignore_certificate_errors.clone(),
+ ),
+ deno_napi::init::<PermissionsContainer>(),
+ deno_node::init_ops::<PermissionsContainer>(options.npm_resolver.take()),
+ ops::os::init(exit_code),
+ 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(),
+ deno_node::init_polyfill_ops(),
+ ]
+}
+
+#[cfg(feature = "dont_create_runtime_snapshot")]
+fn get_extensions(
+ options: &mut WorkerOptions,
+ unstable: bool,
+ exit_code: ExitCode,
+ main_module: ModuleSpecifier,
+) -> Vec<Extension> {
+ let create_cache = options.cache_storage_dir.take().map(|storage_dir| {
+ let create_cache_fn = move || SqliteBackedCache::new(storage_dir.clone());
+ CreateCache(Arc::new(create_cache_fn))
+ });
+
+ vec![
+ // Web APIs
+ deno_webidl::init_esm(),
+ deno_console::init_esm(),
+ deno_url::init_ops_and_esm(),
+ deno_web::init_ops_and_esm::<PermissionsContainer>(
+ options.blob_store.clone(),
+ options.bootstrap.location.clone(),
+ ),
+ deno_fetch::init_ops_and_esm::<PermissionsContainer>(deno_fetch::Options {
+ user_agent: options.bootstrap.user_agent.clone(),
+ root_cert_store: options.root_cert_store.clone(),
+ unsafely_ignore_certificate_errors: options
+ .unsafely_ignore_certificate_errors
+ .clone(),
+ file_fetch_handler: Rc::new(deno_fetch::FsFetchHandler),
+ ..Default::default()
+ }),
+ deno_cache::init_ops_and_esm::<SqliteBackedCache>(create_cache),
+ deno_websocket::init_ops_and_esm::<PermissionsContainer>(
+ options.bootstrap.user_agent.clone(),
+ options.root_cert_store.clone(),
+ options.unsafely_ignore_certificate_errors.clone(),
+ ),
+ deno_webstorage::init_ops_and_esm(options.origin_storage_dir.clone()),
+ deno_broadcast_channel::init_ops_and_esm(
+ options.broadcast_channel.clone(),
+ unstable,
+ ),
+ deno_crypto::init_ops_and_esm(options.seed),
+ deno_webgpu::init_ops_and_esm(unstable),
+ // ffi
+ deno_ffi::init_ops_and_esm::<PermissionsContainer>(unstable),
+ // Runtime ops
+ ops::runtime::init(main_module),
+ 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_and_esm::<PermissionsContainer>(unstable),
+ deno_io::init_ops_and_esm(std::mem::take(&mut options.stdio)),
+ deno_tls::init(),
+ deno_net::init_ops_and_esm::<PermissionsContainer>(
+ options.root_cert_store.clone(),
+ unstable,
+ options.unsafely_ignore_certificate_errors.clone(),
+ ),
+ deno_napi::init::<PermissionsContainer>(),
+ deno_node::init_ops_and_esm::<PermissionsContainer>(
+ options.npm_resolver.take(),
+ ),
+ ops::os::init(exit_code),
+ ops::permissions::init(),
+ ops::process::init_ops(),
+ ops::signal::init(),
+ ops::tty::init(),
+ deno_http::init_ops_and_esm(),
+ deno_flash::init_ops_and_esm::<PermissionsContainer>(unstable),
+ ops::http::init(),
+ deno_node::init_polyfill_ops_and_esm(),
+ ]
+}
+
impl MainWorker {
pub fn bootstrap_from_options(
main_module: ModuleSpecifier,
@@ -211,77 +365,13 @@ impl MainWorker {
})
.build();
let exit_code = ExitCode(Arc::new(AtomicI32::new(0)));
- let create_cache = options.cache_storage_dir.map(|storage_dir| {
- let create_cache_fn = move || SqliteBackedCache::new(storage_dir.clone());
- CreateCache(Arc::new(create_cache_fn))
- });
-
- let mut extensions = vec![
- // Web APIs
- deno_webidl::init(),
- deno_console::init(),
- deno_url::init(),
- deno_web::init::<PermissionsContainer>(
- options.blob_store.clone(),
- options.bootstrap.location.clone(),
- ),
- deno_fetch::init::<PermissionsContainer>(deno_fetch::Options {
- user_agent: options.bootstrap.user_agent.clone(),
- root_cert_store: options.root_cert_store.clone(),
- unsafely_ignore_certificate_errors: options
- .unsafely_ignore_certificate_errors
- .clone(),
- file_fetch_handler: Rc::new(deno_fetch::FsFetchHandler),
- ..Default::default()
- }),
- deno_cache::init::<SqliteBackedCache>(create_cache),
- deno_websocket::init::<PermissionsContainer>(
- options.bootstrap.user_agent.clone(),
- options.root_cert_store.clone(),
- options.unsafely_ignore_certificate_errors.clone(),
- ),
- deno_webstorage::init(options.origin_storage_dir.clone()),
- deno_broadcast_channel::init(options.broadcast_channel.clone(), unstable),
- deno_crypto::init(options.seed),
- deno_webgpu::init(unstable),
- // ffi
- deno_ffi::init::<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::<PermissionsContainer>(unstable),
- deno_io::init(options.stdio),
- deno_tls::init(),
- deno_net::init::<PermissionsContainer>(
- options.root_cert_store.clone(),
- unstable,
- options.unsafely_ignore_certificate_errors.clone(),
- ),
- deno_napi::init::<PermissionsContainer>(),
- deno_node::init::<PermissionsContainer>(options.npm_resolver),
- ops::os::init(exit_code.clone()),
- ops::permissions::init(),
- ops::process::init_ops(),
- ops::signal::init(),
- ops::tty::init(),
- deno_http::init(),
- deno_flash::init::<PermissionsContainer>(unstable),
- ops::http::init(),
- ];
-
- // TODO(bartlomieju): finish this work, currently only `deno_node` is different
- // as it has the most files
- #[cfg(feature = "dont_create_runtime_snapshot")]
- extensions.push(deno_node::init_polyfill_ops_and_esm());
- #[cfg(not(feature = "dont_create_runtime_snapshot"))]
- extensions.push(deno_node::init_polyfill_ops());
+ let mut extensions = get_extensions(
+ &mut options,
+ unstable,
+ exit_code.clone(),
+ main_module.clone(),
+ );
extensions.push(perm_ext);