diff options
Diffstat (limited to 'cli/proc_state.rs')
-rw-r--r-- | cli/proc_state.rs | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/cli/proc_state.rs b/cli/proc_state.rs index bbfc3cbad..ac06e6c72 100644 --- a/cli/proc_state.rs +++ b/cli/proc_state.rs @@ -77,7 +77,7 @@ pub struct ProcState(Arc<Inner>); pub struct Inner { pub dir: DenoDir, - pub file_fetcher: FileFetcher, + pub file_fetcher: Arc<FileFetcher>, pub http_client: HttpClient, pub options: Arc<CliOptions>, pub emit_cache: EmitCache, @@ -147,6 +147,38 @@ impl ProcState { Ok(ps) } + /// Reset all runtime state to its default. This should be used on file + /// watcher restarts. + pub fn reset_for_file_watcher(&mut self) { + self.0 = Arc::new(Inner { + dir: self.dir.clone(), + options: self.options.clone(), + emit_cache: self.emit_cache.clone(), + emit_options_hash: self.emit_options_hash, + emit_options: self.emit_options.clone(), + file_fetcher: self.file_fetcher.clone(), + http_client: self.http_client.clone(), + graph_data: Default::default(), + lockfile: self.lockfile.clone(), + maybe_import_map: self.maybe_import_map.clone(), + maybe_inspector_server: self.maybe_inspector_server.clone(), + root_cert_store: self.root_cert_store.clone(), + blob_store: Default::default(), + broadcast_channel: Default::default(), + shared_array_buffer_store: Default::default(), + compiled_wasm_module_store: Default::default(), + parsed_source_cache: self.parsed_source_cache.reset_for_file_watcher(), + maybe_resolver: self.maybe_resolver.clone(), + maybe_file_watcher_reporter: self.maybe_file_watcher_reporter.clone(), + node_analysis_cache: self.node_analysis_cache.clone(), + npm_cache: self.npm_cache.clone(), + npm_resolver: self.npm_resolver.clone(), + cjs_resolutions: Default::default(), + progress_bar: self.progress_bar.clone(), + node_std_graph_prepared: AtomicBool::new(false), + }); + } + async fn build_with_sender( cli_options: Arc<CliOptions>, maybe_sender: Option<tokio::sync::mpsc::UnboundedSender<Vec<PathBuf>>>, @@ -256,7 +288,7 @@ impl ProcState { .write_hashable(&emit_options) .finish(), emit_options, - file_fetcher, + file_fetcher: Arc::new(file_fetcher), http_client, graph_data: Default::default(), lockfile, @@ -291,7 +323,6 @@ impl ProcState { lib: TsTypeLib, root_permissions: PermissionsContainer, dynamic_permissions: PermissionsContainer, - reload_on_watch: bool, ) -> Result<(), AnyError> { log::debug!("Preparing module load."); let _pb_clear_guard = self.progress_bar.clear_guard(); @@ -304,7 +335,7 @@ impl ProcState { .map(|s| (s, ModuleKind::Esm)) .collect::<Vec<_>>(); - if !reload_on_watch && !has_root_npm_specifier { + if !has_root_npm_specifier { let graph_data = self.graph_data.read(); if self.options.type_check_mode() == TypeCheckMode::None || graph_data.is_type_checked(&roots, &lib) @@ -338,7 +369,6 @@ impl ProcState { struct ProcStateLoader<'a> { inner: &'a mut cache::FetchCacher, graph_data: Arc<RwLock<GraphData>>, - reload: bool, } impl Loader for ProcStateLoader<'_> { fn get_cache_info( @@ -355,9 +385,7 @@ impl ProcState { let graph_data = self.graph_data.read(); let found_specifier = graph_data.follow_redirect(specifier); match graph_data.get(&found_specifier) { - Some(_) if !self.reload => { - Box::pin(futures::future::ready(Err(anyhow!("")))) - } + Some(_) => Box::pin(futures::future::ready(Err(anyhow!("")))), _ => self.inner.load(specifier, is_dynamic), } } @@ -365,7 +393,6 @@ impl ProcState { let mut loader = ProcStateLoader { inner: &mut cache, graph_data: self.graph_data.clone(), - reload: reload_on_watch, }; let maybe_file_watcher_reporter: Option<&dyn deno_graph::source::Reporter> = @@ -404,7 +431,7 @@ impl ProcState { let npm_package_reqs = { let mut graph_data = self.graph_data.write(); - graph_data.add_graph(&graph, reload_on_watch); + graph_data.add_graph(&graph); let check_js = self.options.check_js(); graph_data .check( @@ -492,7 +519,6 @@ impl ProcState { lib, PermissionsContainer::allow_all(), PermissionsContainer::allow_all(), - false, ) .await } @@ -506,7 +532,7 @@ impl ProcState { let node_std_graph = self .create_graph(vec![(node::MODULE_ALL_URL.clone(), ModuleKind::Esm)]) .await?; - self.graph_data.write().add_graph(&node_std_graph, false); + self.graph_data.write().add_graph(&node_std_graph); self.node_std_graph_prepared.store(true, Ordering::Relaxed); Ok(()) } @@ -747,7 +773,7 @@ pub fn import_map_from_text( Ok(result.import_map) } -#[derive(Debug)] +#[derive(Clone, Debug)] struct FileWatcherReporter { sender: tokio::sync::mpsc::UnboundedSender<Vec<PathBuf>>, file_paths: Arc<Mutex<Vec<PathBuf>>>, |