diff options
-rw-r--r-- | cli/standalone.rs | 10 | ||||
-rw-r--r-- | cli/tests/integration/compile_tests.rs | 33 | ||||
-rw-r--r-- | cli/tests/testdata/standalone_follow_redirects.ts | 2 | ||||
-rw-r--r-- | cli/tests/testdata/standalone_follow_redirects_2.js | 5 |
4 files changed, 48 insertions, 2 deletions
diff --git a/cli/standalone.rs b/cli/standalone.rs index bea29f263..5005fd142 100644 --- a/cli/standalone.rs +++ b/cli/standalone.rs @@ -135,7 +135,14 @@ impl ModuleLoader for EmbeddedModuleLoader { referrer: &str, _is_main: bool, ) -> Result<ModuleSpecifier, AnyError> { - let referrer = deno_core::resolve_url_or_path(referrer).unwrap(); + // Try to follow redirects when resolving. + let referrer = match self.eszip.get_module(referrer) { + Some(eszip::Module { ref specifier, .. }) => { + deno_core::resolve_url_or_path(specifier)? + } + None => deno_core::resolve_url_or_path(referrer)?, + }; + self.maybe_import_map_resolver.as_ref().map_or_else( || { deno_core::resolve_import(specifier, referrer.as_str()) @@ -154,7 +161,6 @@ impl ModuleLoader for EmbeddedModuleLoader { let module_specifier = module_specifier.clone(); let is_data_uri = get_source_from_data_url(&module_specifier).ok(); - let module = self .eszip .get_module(module_specifier.as_str()) diff --git a/cli/tests/integration/compile_tests.rs b/cli/tests/integration/compile_tests.rs index 9d1001ed6..82a98115a 100644 --- a/cli/tests/integration/compile_tests.rs +++ b/cli/tests/integration/compile_tests.rs @@ -186,6 +186,39 @@ fn standalone_load_datauri() { assert_eq!(output.stdout, b"Hello Deno!\n"); } +// https://github.com/denoland/deno/issues/13704 +#[test] +fn standalone_follow_redirects() { + let dir = TempDir::new().unwrap(); + let exe = if cfg!(windows) { + dir.path().join("follow_redirects.exe") + } else { + dir.path().join("follow_redirects") + }; + let output = util::deno_cmd() + .current_dir(util::testdata_path()) + .arg("compile") + .arg("--unstable") + .arg("--output") + .arg(&exe) + .arg("./standalone_follow_redirects.ts") + .stdout(std::process::Stdio::piped()) + .spawn() + .unwrap() + .wait_with_output() + .unwrap(); + assert!(output.status.success()); + let output = Command::new(exe) + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap() + .wait_with_output() + .unwrap(); + assert!(output.status.success()); + assert_eq!(output.stdout, b"Hello\n"); +} + #[test] fn standalone_compiler_ops() { let dir = TempDir::new().unwrap(); diff --git a/cli/tests/testdata/standalone_follow_redirects.ts b/cli/tests/testdata/standalone_follow_redirects.ts new file mode 100644 index 000000000..f0957bc3d --- /dev/null +++ b/cli/tests/testdata/standalone_follow_redirects.ts @@ -0,0 +1,2 @@ +import "./standalone_follow_redirects_2.js"; +console.log("Hello"); diff --git a/cli/tests/testdata/standalone_follow_redirects_2.js b/cli/tests/testdata/standalone_follow_redirects_2.js new file mode 100644 index 000000000..c0130ef5a --- /dev/null +++ b/cli/tests/testdata/standalone_follow_redirects_2.js @@ -0,0 +1,5 @@ +// unversioned import redirects with dependencies. +import { + assertNotEquals as _a, + assertStrictEquals as _b, +} from "https://deno.land/std/testing/asserts.ts"; |