summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-09-29 20:07:50 -0400
committerGitHub <noreply@github.com>2024-09-29 20:07:50 -0400
commit183130ff31d49d4774dc9c6ca1098567b04b1bcf (patch)
treecfc99a308bd0493e72b15a18ee823f6ed915d459 /cli
parent5faf769ac61b627d14710cdf487de7cd4eb3f9d3 (diff)
refactor: cleanup for creating worker structs (#25933)
Diffstat (limited to 'cli')
-rw-r--r--cli/factory.rs2
-rw-r--r--cli/module_loader.rs5
-rw-r--r--cli/resolver.rs3
-rw-r--r--cli/worker.rs111
4 files changed, 75 insertions, 46 deletions
diff --git a/cli/factory.rs b/cli/factory.rs
index 5e525ee32..770aeefa1 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -782,6 +782,7 @@ impl CliFactory {
let npm_resolver = self.npm_resolver().await?;
let fs = self.fs();
let cli_node_resolver = self.cli_node_resolver().await?;
+ let cli_npm_resolver = self.npm_resolver().await?.clone();
let maybe_file_watcher_communicator = if cli_options.has_hmr() {
Some(self.watcher_communicator.clone().unwrap())
} else {
@@ -811,6 +812,7 @@ impl CliFactory {
self.main_module_graph_container().await?.clone(),
self.module_load_preparer().await?.clone(),
cli_node_resolver.clone(),
+ cli_npm_resolver.clone(),
NpmModuleLoader::new(
self.cjs_resolutions().clone(),
self.node_code_translator().await?.clone(),
diff --git a/cli/module_loader.rs b/cli/module_loader.rs
index f4e219bea..293f41dda 100644
--- a/cli/module_loader.rs
+++ b/cli/module_loader.rs
@@ -23,6 +23,7 @@ use crate::graph_container::ModuleGraphUpdatePermit;
use crate::graph_util::CreateGraphOptions;
use crate::graph_util::ModuleGraphBuilder;
use crate::node;
+use crate::npm::CliNpmResolver;
use crate::resolver::CliGraphResolver;
use crate::resolver::CliNodeResolver;
use crate::resolver::ModuleCodeStringSource;
@@ -203,6 +204,7 @@ struct SharedCliModuleLoaderState {
main_module_graph_container: Arc<MainModuleGraphContainer>,
module_load_preparer: Arc<ModuleLoadPreparer>,
node_resolver: Arc<CliNodeResolver>,
+ npm_resolver: Arc<dyn CliNpmResolver>,
npm_module_loader: NpmModuleLoader,
parsed_source_cache: Arc<ParsedSourceCache>,
resolver: Arc<CliGraphResolver>,
@@ -221,6 +223,7 @@ impl CliModuleLoaderFactory {
main_module_graph_container: Arc<MainModuleGraphContainer>,
module_load_preparer: Arc<ModuleLoadPreparer>,
node_resolver: Arc<CliNodeResolver>,
+ npm_resolver: Arc<dyn CliNpmResolver>,
npm_module_loader: NpmModuleLoader,
parsed_source_cache: Arc<ParsedSourceCache>,
resolver: Arc<CliGraphResolver>,
@@ -241,6 +244,7 @@ impl CliModuleLoaderFactory {
main_module_graph_container,
module_load_preparer,
node_resolver,
+ npm_resolver,
npm_module_loader,
parsed_source_cache,
resolver,
@@ -478,7 +482,6 @@ impl<TGraphContainer: ModuleGraphContainer>
Some(Module::Npm(module)) => {
let package_folder = self
.shared
- .node_resolver
.npm_resolver
.as_managed()
.unwrap() // byonm won't create a Module::Npm
diff --git a/cli/resolver.rs b/cli/resolver.rs
index d6e14c39d..211f8aba1 100644
--- a/cli/resolver.rs
+++ b/cli/resolver.rs
@@ -66,8 +66,7 @@ pub struct CliNodeResolver {
cjs_resolutions: Arc<CjsResolutionStore>,
fs: Arc<dyn deno_fs::FileSystem>,
node_resolver: Arc<NodeResolver>,
- // todo(dsherret): remove this pub(crate)
- pub(crate) npm_resolver: Arc<dyn CliNpmResolver>,
+ npm_resolver: Arc<dyn CliNpmResolver>,
}
impl CliNodeResolver {
diff --git a/cli/worker.rs b/cli/worker.rs
index c355d18bd..71bdfd661 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -34,8 +34,10 @@ use deno_runtime::ops::worker_host::CreateWebWorkerCb;
use deno_runtime::permissions::RuntimePermissionDescriptorParser;
use deno_runtime::web_worker::WebWorker;
use deno_runtime::web_worker::WebWorkerOptions;
+use deno_runtime::web_worker::WebWorkerServiceOptions;
use deno_runtime::worker::MainWorker;
use deno_runtime::worker::WorkerOptions;
+use deno_runtime::worker::WorkerServiceOptions;
use deno_runtime::BootstrapOptions;
use deno_runtime::WorkerExecutionMode;
use deno_runtime::WorkerLogLevel;
@@ -570,6 +572,23 @@ impl CliMainWorkerFactory {
}
}
+ let services = WorkerServiceOptions {
+ root_cert_store_provider: Some(shared.root_cert_store_provider.clone()),
+ module_loader,
+ fs: shared.fs.clone(),
+ node_services: Some(shared.create_node_init_services()),
+ npm_process_state_provider: Some(shared.npm_process_state_provider()),
+ blob_store: shared.blob_store.clone(),
+ broadcast_channel: shared.broadcast_channel.clone(),
+ shared_array_buffer_store: Some(shared.shared_array_buffer_store.clone()),
+ compiled_wasm_module_store: Some(
+ shared.compiled_wasm_module_store.clone(),
+ ),
+ feature_checker,
+ permissions,
+ permission_desc_parser: shared.permission_desc_parser.clone(),
+ v8_code_cache: shared.code_cache.clone(),
+ };
let options = WorkerOptions {
bootstrap: BootstrapOptions {
deno_version: crate::version::DENO_VERSION_INFO.deno.to_string(),
@@ -604,7 +623,6 @@ impl CliMainWorkerFactory {
.options
.unsafely_ignore_certificate_errors
.clone(),
- root_cert_store_provider: Some(shared.root_cert_store_provider.clone()),
seed: shared.options.seed,
format_js_error_fn: Some(Arc::new(format_js_error)),
create_web_worker_cb,
@@ -612,29 +630,16 @@ impl CliMainWorkerFactory {
should_break_on_first_statement: shared.options.inspect_brk,
should_wait_for_inspector_session: shared.options.inspect_wait,
strace_ops: shared.options.strace_ops.clone(),
- module_loader,
- fs: shared.fs.clone(),
- node_services: Some(shared.create_node_init_services()),
- npm_process_state_provider: Some(shared.npm_process_state_provider()),
get_error_class_fn: Some(&errors::get_error_class_name),
cache_storage_dir,
origin_storage_dir,
- blob_store: shared.blob_store.clone(),
- broadcast_channel: shared.broadcast_channel.clone(),
- shared_array_buffer_store: Some(shared.shared_array_buffer_store.clone()),
- compiled_wasm_module_store: Some(
- shared.compiled_wasm_module_store.clone(),
- ),
stdio,
- feature_checker,
- permission_desc_parser: shared.permission_desc_parser.clone(),
skip_op_registration: shared.options.skip_op_registration,
- v8_code_cache: shared.code_cache.clone(),
};
let mut worker = MainWorker::bootstrap_from_options(
main_module.clone(),
- permissions,
+ services,
options,
);
@@ -766,7 +771,27 @@ fn create_web_worker_callback(
}
}
+ let services = WebWorkerServiceOptions {
+ root_cert_store_provider: Some(shared.root_cert_store_provider.clone()),
+ module_loader,
+ fs: shared.fs.clone(),
+ node_services: Some(shared.create_node_init_services()),
+ blob_store: shared.blob_store.clone(),
+ broadcast_channel: shared.broadcast_channel.clone(),
+ shared_array_buffer_store: Some(shared.shared_array_buffer_store.clone()),
+ compiled_wasm_module_store: Some(
+ shared.compiled_wasm_module_store.clone(),
+ ),
+ maybe_inspector_server,
+ feature_checker,
+ permission_desc_parser: shared.permission_desc_parser.clone(),
+ npm_process_state_provider: Some(shared.npm_process_state_provider()),
+ permissions: args.permissions,
+ };
let options = WebWorkerOptions {
+ name: args.name,
+ main_module: args.main_module.clone(),
+ worker_id: args.worker_id,
bootstrap: BootstrapOptions {
deno_version: crate::version::DENO_VERSION_INFO.deno.to_string(),
args: shared.options.argv.clone(),
@@ -777,7 +802,7 @@ fn create_web_worker_callback(
enable_op_summary_metrics: shared.options.enable_op_summary_metrics,
enable_testing_features: shared.options.enable_testing_features,
locale: deno_core::v8::icu::get_language_tag(),
- location: Some(args.main_module.clone()),
+ location: Some(args.main_module),
no_color: !colors::use_color(),
color_level: colors::get_color_level(),
is_stdout_tty: deno_terminal::is_stdout_tty(),
@@ -799,39 +824,19 @@ fn create_web_worker_callback(
.options
.unsafely_ignore_certificate_errors
.clone(),
- root_cert_store_provider: Some(shared.root_cert_store_provider.clone()),
seed: shared.options.seed,
create_web_worker_cb,
format_js_error_fn: Some(Arc::new(format_js_error)),
- module_loader,
- fs: shared.fs.clone(),
- node_services: Some(shared.create_node_init_services()),
worker_type: args.worker_type,
- maybe_inspector_server,
get_error_class_fn: Some(&errors::get_error_class_name),
- blob_store: shared.blob_store.clone(),
- broadcast_channel: shared.broadcast_channel.clone(),
- shared_array_buffer_store: Some(shared.shared_array_buffer_store.clone()),
- compiled_wasm_module_store: Some(
- shared.compiled_wasm_module_store.clone(),
- ),
stdio: stdio.clone(),
cache_storage_dir,
- feature_checker,
- permission_desc_parser: shared.permission_desc_parser.clone(),
strace_ops: shared.options.strace_ops.clone(),
close_on_idle: args.close_on_idle,
maybe_worker_metadata: args.maybe_worker_metadata,
- npm_process_state_provider: Some(shared.npm_process_state_provider()),
};
- WebWorker::bootstrap_from_options(
- args.name,
- args.permissions,
- args.main_module,
- args.worker_id,
- options,
- )
+ WebWorker::bootstrap_from_options(services, options)
})
}
@@ -841,23 +846,43 @@ fn create_web_worker_callback(
mod tests {
use super::*;
use deno_core::resolve_path;
+ use deno_core::FsModuleLoader;
use deno_fs::RealFs;
use deno_runtime::deno_permissions::Permissions;
fn create_test_worker() -> MainWorker {
let main_module =
resolve_path("./hello.js", &std::env::current_dir().unwrap()).unwrap();
- let permissions = PermissionsContainer::new(
- Arc::new(RuntimePermissionDescriptorParser::new(Arc::new(RealFs))),
- Permissions::none_without_prompt(),
- );
-
+ let fs = Arc::new(RealFs);
+ let permission_desc_parser =
+ Arc::new(RuntimePermissionDescriptorParser::new(fs.clone()));
let options = WorkerOptions {
startup_snapshot: crate::js::deno_isolate_init(),
..Default::default()
};
- MainWorker::bootstrap_from_options(main_module, permissions, options)
+ MainWorker::bootstrap_from_options(
+ main_module,
+ WorkerServiceOptions {
+ module_loader: Rc::new(FsModuleLoader),
+ permissions: PermissionsContainer::new(
+ permission_desc_parser.clone(),
+ Permissions::none_without_prompt(),
+ ),
+ blob_store: Default::default(),
+ broadcast_channel: Default::default(),
+ feature_checker: Default::default(),
+ node_services: Default::default(),
+ npm_process_state_provider: Default::default(),
+ permission_desc_parser,
+ root_cert_store_provider: Default::default(),
+ shared_array_buffer_store: Default::default(),
+ compiled_wasm_module_store: Default::default(),
+ v8_code_cache: Default::default(),
+ fs,
+ },
+ options,
+ )
}
#[tokio::test]