summaryrefslogtreecommitdiff
path: root/cli/proc_state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/proc_state.rs')
-rw-r--r--cli/proc_state.rs52
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>>>,