From a7a64438e2cb054700cb35936c941b7444b8bd2d Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 20 Jun 2022 11:20:52 -0400 Subject: [PATCH] fix: do not panic running .d.cts and .d.mts files (#14917) --- cli/proc_state.rs | 23 +++++++++++++++-------- cli/tests/integration/run_tests.rs | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/cli/proc_state.rs b/cli/proc_state.rs index 9e948643db..0ad0cd093d 100644 --- a/cli/proc_state.rs +++ b/cli/proc_state.rs @@ -609,8 +609,8 @@ impl ProcState { ); let graph_data = self.graph_data.read(); - let found = graph_data.follow_redirect(&specifier); - match graph_data.get(&found) { + let found_url = graph_data.follow_redirect(&specifier); + match graph_data.get(&found_url) { Some(ModuleEntry::Module { code, media_type, .. }) => { @@ -627,25 +627,32 @@ impl ProcState { code.to_string() } } - MediaType::Dts => "".to_string(), - _ => { + MediaType::Dts | MediaType::Dcts | MediaType::Dmts => "".to_string(), + MediaType::TypeScript + | MediaType::Mts + | MediaType::Cts + | MediaType::Jsx + | MediaType::Tsx => { let emit_path = self .dir .gen_cache - .get_cache_filename_with_extension(&found, "js") + .get_cache_filename_with_extension(&found_url, "js") .unwrap_or_else(|| { - unreachable!("Unable to get cache filename: {}", &found) + unreachable!("Unable to get cache filename: {}", &found_url) }); match self.dir.gen_cache.get(&emit_path) { Ok(b) => String::from_utf8(b).unwrap(), - Err(_) => unreachable!("Unexpected missing emit: {}", found), + Err(_) => unreachable!("Unexpected missing emit: {}\n\nTry reloading with the --reload CLI flag or deleting your DENO_DIR.", found_url), } } + MediaType::TsBuildInfo | MediaType::Wasm | MediaType::SourceMap => { + panic!("Unexpected media type {} for {}", media_type, found_url) + } }; Ok(ModuleSource { code: code.into_bytes().into_boxed_slice(), module_url_specified: specifier.to_string(), - module_url_found: found.to_string(), + module_url_found: found_url.to_string(), module_type: match media_type { MediaType::Json => ModuleType::Json, _ => ModuleType::JavaScript, diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index 2ba22d748c..fb0d6313b9 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -2709,3 +2709,22 @@ itest!(custom_inspect_url { args: "run custom_inspect_url.js", output: "custom_inspect_url.js.out", }); + +#[test] +fn running_declaration_files() { + let temp_dir = TempDir::new(); + let files = vec!["file.d.ts", "file.d.cts", "file.d.mts"]; + + for file in files { + temp_dir.write(file, ""); + let mut deno_cmd = util::deno_cmd_with_deno_dir(&temp_dir); + let output = deno_cmd + .current_dir(temp_dir.path()) + .args(["run", file]) + .spawn() + .unwrap() + .wait_with_output() + .unwrap(); + assert!(output.status.success()); + } +}