summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Hagemeister <marvin@deno.com>2024-10-18 21:45:05 +0200
committerGitHub <noreply@github.com>2024-10-18 21:45:05 +0200
commit0e60bb9cf701fea3864403e6851abad86bc0b65d (patch)
tree628e0fb81761f795f915481ee688cde386b34eeb
parentd047cab14b754d20a43c7119e327b451440aaed9 (diff)
fix(info): resolve workspace member mappings (#26350)
This PR fixes the issue where mapped specifiers in a workspace member would never be found. Only mapped paths from the workspace root would resolve. This was caused by always passing the workspace root url to the import map resolver instead of the workspace member one. Fixes https://github.com/denoland/deno/issues/26138 Fixes https://github.com/denoland/fresh/issues/2615 --------- Signed-off-by: Marvin Hagemeister <marvinhagemeister50@gmail.com> Co-authored-by: David Sherret <dsherret@users.noreply.github.com>
-rw-r--r--cli/tools/info.rs23
-rw-r--r--tests/specs/info/import_map/__test__.jsonc10
-rw-r--r--tests/specs/info/workspace_member/__test__.jsonc16
-rw-r--r--tests/specs/info/workspace_member/deno.json3
-rw-r--r--tests/specs/info/workspace_member/info_workspace_member.out6
-rw-r--r--tests/specs/info/workspace_member/info_workspace_member_sub.out6
-rw-r--r--tests/specs/info/workspace_member/member/deno.json5
-rw-r--r--tests/specs/info/workspace_member/member/sub/file.ts1
8 files changed, 57 insertions, 13 deletions
diff --git a/cli/tools/info.rs b/cli/tools/info.rs
index 7f8d68ae1..3febaff57 100644
--- a/cli/tools/info.rs
+++ b/cli/tools/info.rs
@@ -11,6 +11,7 @@ use deno_core::anyhow::bail;
use deno_core::error::AnyError;
use deno_core::resolve_url_or_path;
use deno_core::serde_json;
+use deno_core::url;
use deno_graph::Dependency;
use deno_graph::GraphKind;
use deno_graph::Module;
@@ -51,18 +52,20 @@ pub async fn info(
let npmrc = cli_options.npmrc();
let resolver = factory.workspace_resolver().await?;
- let maybe_import_specifier =
- if let Some(import_map) = resolver.maybe_import_map() {
- if let Ok(imports_specifier) =
- import_map.resolve(&specifier, import_map.base_url())
- {
- Some(imports_specifier)
- } else {
- None
- }
+ let cwd_url =
+ url::Url::from_directory_path(cli_options.initial_cwd()).unwrap();
+
+ let maybe_import_specifier = if let Some(import_map) =
+ resolver.maybe_import_map()
+ {
+ if let Ok(imports_specifier) = import_map.resolve(&specifier, &cwd_url) {
+ Some(imports_specifier)
} else {
None
- };
+ }
+ } else {
+ None
+ };
let specifier = match maybe_import_specifier {
Some(specifier) => specifier,
diff --git a/tests/specs/info/import_map/__test__.jsonc b/tests/specs/info/import_map/__test__.jsonc
index 725276925..7aba603e0 100644
--- a/tests/specs/info/import_map/__test__.jsonc
+++ b/tests/specs/info/import_map/__test__.jsonc
@@ -1,5 +1,9 @@
{
- "args": "info preact/debug",
- "output": "with_import_map.out",
- "exitCode": 0
+ "steps": [
+ {
+ "args": "info preact/debug",
+ "output": "with_import_map.out",
+ "exitCode": 0
+ }
+ ]
}
diff --git a/tests/specs/info/workspace_member/__test__.jsonc b/tests/specs/info/workspace_member/__test__.jsonc
new file mode 100644
index 000000000..d13d3b03e
--- /dev/null
+++ b/tests/specs/info/workspace_member/__test__.jsonc
@@ -0,0 +1,16 @@
+{
+ "tests": {
+ "member_folder": {
+ "args": "info --quiet foo",
+ "cwd": "member",
+ "output": "info_workspace_member.out",
+ "exitCode": 0
+ },
+ "member_folder_sub": {
+ "args": "info --quiet foo",
+ "cwd": "member/sub",
+ "output": "info_workspace_member_sub.out",
+ "exitCode": 0
+ }
+ }
+}
diff --git a/tests/specs/info/workspace_member/deno.json b/tests/specs/info/workspace_member/deno.json
new file mode 100644
index 000000000..f88028aea
--- /dev/null
+++ b/tests/specs/info/workspace_member/deno.json
@@ -0,0 +1,3 @@
+{
+ "workspace": ["./member"]
+}
diff --git a/tests/specs/info/workspace_member/info_workspace_member.out b/tests/specs/info/workspace_member/info_workspace_member.out
new file mode 100644
index 000000000..e0dc0b675
--- /dev/null
+++ b/tests/specs/info/workspace_member/info_workspace_member.out
@@ -0,0 +1,6 @@
+local: [WILDCARD]file.ts
+type: TypeScript
+dependencies: 0 unique
+size: [WILDCARD]
+
+file://[WILDCARD]/member/sub/file.ts ([WILDCARD])
diff --git a/tests/specs/info/workspace_member/info_workspace_member_sub.out b/tests/specs/info/workspace_member/info_workspace_member_sub.out
new file mode 100644
index 000000000..e0dc0b675
--- /dev/null
+++ b/tests/specs/info/workspace_member/info_workspace_member_sub.out
@@ -0,0 +1,6 @@
+local: [WILDCARD]file.ts
+type: TypeScript
+dependencies: 0 unique
+size: [WILDCARD]
+
+file://[WILDCARD]/member/sub/file.ts ([WILDCARD])
diff --git a/tests/specs/info/workspace_member/member/deno.json b/tests/specs/info/workspace_member/member/deno.json
new file mode 100644
index 000000000..66aac2904
--- /dev/null
+++ b/tests/specs/info/workspace_member/member/deno.json
@@ -0,0 +1,5 @@
+{
+ "imports": {
+ "foo": "./sub/file.ts"
+ }
+}
diff --git a/tests/specs/info/workspace_member/member/sub/file.ts b/tests/specs/info/workspace_member/member/sub/file.ts
new file mode 100644
index 000000000..cb0ff5c3b
--- /dev/null
+++ b/tests/specs/info/workspace_member/member/sub/file.ts
@@ -0,0 +1 @@
+export {};