summaryrefslogtreecommitdiff
path: root/cli/worker.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-05-16 00:09:35 -0700
committerGitHub <noreply@github.com>2024-05-16 07:09:35 +0000
commit88983fb3eb5a085f7d358a7a98d5c738a21b5d27 (patch)
treed4d83c5bd668edc25d30616fd4a3decc1cea3fb9 /cli/worker.rs
parentbba553bea5938932518dc6382e464968ce8374b4 (diff)
fix(node): seperate worker module cache (#23634)
Construct a new module graph container for workers instead of sharing it with the main worker. Fixes #17248 Fixes #23461 --------- Co-authored-by: David Sherret <dsherret@gmail.com>
Diffstat (limited to 'cli/worker.rs')
-rw-r--r--cli/worker.rs29
1 files changed, 17 insertions, 12 deletions
diff --git a/cli/worker.rs b/cli/worker.rs
index a49929ca5..151a4ec4f 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -58,20 +58,23 @@ use crate::util::file_watcher::WatcherCommunicator;
use crate::util::file_watcher::WatcherRestartMode;
use crate::version;
+pub struct ModuleLoaderAndSourceMapGetter {
+ pub module_loader: Rc<dyn ModuleLoader>,
+ pub source_map_getter: Option<Rc<dyn SourceMapGetter>>,
+}
+
pub trait ModuleLoaderFactory: Send + Sync {
fn create_for_main(
&self,
root_permissions: PermissionsContainer,
dynamic_permissions: PermissionsContainer,
- ) -> Rc<dyn ModuleLoader>;
+ ) -> ModuleLoaderAndSourceMapGetter;
fn create_for_worker(
&self,
root_permissions: PermissionsContainer,
dynamic_permissions: PermissionsContainer,
- ) -> Rc<dyn ModuleLoader>;
-
- fn create_source_map_getter(&self) -> Option<Rc<dyn SourceMapGetter>>;
+ ) -> ModuleLoaderAndSourceMapGetter;
}
#[async_trait::async_trait(?Send)]
@@ -549,11 +552,12 @@ impl CliMainWorkerFactory {
(main_module, false)
};
- let module_loader = shared
+ let ModuleLoaderAndSourceMapGetter {
+ module_loader,
+ source_map_getter,
+ } = shared
.module_loader_factory
.create_for_main(PermissionsContainer::allow_all(), permissions.clone());
- let maybe_source_map_getter =
- shared.module_loader_factory.create_source_map_getter();
let maybe_inspector_server = shared.maybe_inspector_server.clone();
let create_web_worker_cb =
@@ -627,7 +631,7 @@ impl CliMainWorkerFactory {
.clone(),
root_cert_store_provider: Some(shared.root_cert_store_provider.clone()),
seed: shared.options.seed,
- source_map_getter: maybe_source_map_getter,
+ source_map_getter,
format_js_error_fn: Some(Arc::new(format_js_error)),
create_web_worker_cb,
maybe_inspector_server,
@@ -769,12 +773,13 @@ fn create_web_worker_callback(
Arc::new(move |args| {
let maybe_inspector_server = shared.maybe_inspector_server.clone();
- let module_loader = shared.module_loader_factory.create_for_worker(
+ let ModuleLoaderAndSourceMapGetter {
+ module_loader,
+ source_map_getter,
+ } = shared.module_loader_factory.create_for_worker(
args.parent_permissions.clone(),
args.permissions.clone(),
);
- let maybe_source_map_getter =
- shared.module_loader_factory.create_source_map_getter();
let create_web_worker_cb =
create_web_worker_callback(mode, shared.clone(), stdio.clone());
@@ -839,7 +844,7 @@ fn create_web_worker_callback(
seed: shared.options.seed,
create_web_worker_cb,
format_js_error_fn: Some(Arc::new(format_js_error)),
- source_map_getter: maybe_source_map_getter,
+ source_map_getter,
module_loader,
fs: shared.fs.clone(),
npm_resolver: Some(shared.npm_resolver.clone().into_npm_resolver()),