summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-03-31 14:11:30 +0530
committerGitHub <noreply@github.com>2022-03-31 14:11:30 +0530
commitb0f974fbfd39db2d7c9d37d4c3ed3f21526d7ca3 (patch)
tree6efb0f69737993cfd0b7551e05a951162a73ede4
parent1d24b2cf6335d18ccf8c9c9840fd466011f546c3 (diff)
fix(compile): follow redirects when resolving (#14161)
-rw-r--r--cli/standalone.rs10
-rw-r--r--cli/tests/integration/compile_tests.rs33
-rw-r--r--cli/tests/testdata/standalone_follow_redirects.ts2
-rw-r--r--cli/tests/testdata/standalone_follow_redirects_2.js5
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";