summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-10-28 09:31:58 -0400
committerGitHub <noreply@github.com>2024-10-28 09:31:58 -0400
commitf61af864df4d7a2513f738ddf2d5fddf79c878af (patch)
tree9b4899fa5ce69fbc73031fd0e2c566735069fb9f
parent5389972ba5037b1ed48da11506f6798deec2b48e (diff)
fix(compile): regression handling redirects (#26586)
Closes https://github.com/denoland/deno/issues/26583
-rw-r--r--cli/standalone/serialization.rs12
-rw-r--r--tests/specs/compile/redirects/__test__.jsonc22
-rw-r--r--tests/specs/compile/redirects/main.out1
-rw-r--r--tests/specs/compile/redirects/main.ts1
4 files changed, 31 insertions, 5 deletions
diff --git a/cli/standalone/serialization.rs b/cli/standalone/serialization.rs
index 12927845b..7b63c584e 100644
--- a/cli/standalone/serialization.rs
+++ b/cli/standalone/serialization.rs
@@ -173,6 +173,7 @@ pub struct RemoteModulesStoreBuilder {
impl RemoteModulesStoreBuilder {
pub fn add(&mut self, specifier: &Url, media_type: MediaType, data: Vec<u8>) {
+ log::debug!("Adding '{}' ({})", specifier, media_type);
let specifier = specifier.to_string();
self.specifiers.push((specifier, self.data_byte_len));
self.data_byte_len += 1 + 8 + data.len() as u64; // media type (1 byte), data length (8 bytes), data
@@ -182,6 +183,7 @@ impl RemoteModulesStoreBuilder {
pub fn add_redirects(&mut self, redirects: &BTreeMap<Url, Url>) {
self.redirects.reserve(redirects.len());
for (from, to) in redirects {
+ log::debug!("Adding redirect '{}' -> '{}'", from, to);
let from = from.to_string();
let to = to.to_string();
self.redirects_len += (4 + from.len() + 4 + to.len()) as u64;
@@ -354,17 +356,17 @@ impl RemoteModulesStore {
pub fn read<'a>(
&'a self,
- specifier: &'a Url,
+ original_specifier: &'a Url,
) -> Result<Option<DenoCompileModuleData<'a>>, AnyError> {
let mut count = 0;
- let mut current = specifier;
+ let mut specifier = original_specifier;
loop {
if count > 10 {
- bail!("Too many redirects resolving '{}'", specifier);
+ bail!("Too many redirects resolving '{}'", original_specifier);
}
- match self.specifiers.get(current) {
+ match self.specifiers.get(specifier) {
Some(RemoteModulesStoreSpecifierValue::Redirect(to)) => {
- current = to;
+ specifier = to;
count += 1;
}
Some(RemoteModulesStoreSpecifierValue::Data(offset)) => {
diff --git a/tests/specs/compile/redirects/__test__.jsonc b/tests/specs/compile/redirects/__test__.jsonc
new file mode 100644
index 000000000..07ce69399
--- /dev/null
+++ b/tests/specs/compile/redirects/__test__.jsonc
@@ -0,0 +1,22 @@
+{
+ "tempDir": true,
+ "steps": [{
+ "if": "unix",
+ "args": "compile -A --output main main.ts",
+ "output": "[WILDCARD]"
+ }, {
+ "if": "unix",
+ "commandName": "./main",
+ "args": [],
+ "output": "main.out"
+ }, {
+ "if": "windows",
+ "args": "compile -A --output main.exe main.ts",
+ "output": "[WILDCARD]"
+ }, {
+ "if": "windows",
+ "commandName": "./main.exe",
+ "args": [],
+ "output": "main.out"
+ }]
+}
diff --git a/tests/specs/compile/redirects/main.out b/tests/specs/compile/redirects/main.out
new file mode 100644
index 000000000..e965047ad
--- /dev/null
+++ b/tests/specs/compile/redirects/main.out
@@ -0,0 +1 @@
+Hello
diff --git a/tests/specs/compile/redirects/main.ts b/tests/specs/compile/redirects/main.ts
new file mode 100644
index 000000000..439631901
--- /dev/null
+++ b/tests/specs/compile/redirects/main.ts
@@ -0,0 +1 @@
+import "http://localhost:4546/run/003_relative_import.ts";