diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-06-20 11:20:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-20 11:20:52 -0400 |
commit | a7a64438e2cb054700cb35936c941b7444b8bd2d (patch) | |
tree | 3e6794d39e6be0edd044b9c606812b52eeb22097 | |
parent | a0fc43c2c51e1a8a9a618c51c2edbbb0104b9810 (diff) |
fix: do not panic running .d.cts and .d.mts files (#14917)
-rw-r--r-- | cli/proc_state.rs | 23 | ||||
-rw-r--r-- | 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 9e948643d..0ad0cd093 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 2ba22d748..fb0d6313b 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()); + } +} |