Skip to content

Commit

Permalink
fix(info): resolve workspace member mappings (denoland#26350)
Browse files Browse the repository at this point in the history
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 denoland#26138
Fixes denoland/fresh#2615

---------

Signed-off-by: Marvin Hagemeister <[email protected]>
Co-authored-by: David Sherret <[email protected]>
  • Loading branch information
marvinhagemeister and dsherret authored Oct 18, 2024
1 parent d047cab commit 0e60bb9
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 13 deletions.
23 changes: 13 additions & 10 deletions cli/tools/info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 7 additions & 3 deletions tests/specs/info/import_map/__test__.jsonc
Original file line number Diff line number Diff line change
@@ -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
}
]
}
16 changes: 16 additions & 0 deletions tests/specs/info/workspace_member/__test__.jsonc
Original file line number Diff line number Diff line change
@@ -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
}
}
}
3 changes: 3 additions & 0 deletions tests/specs/info/workspace_member/deno.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"workspace": ["./member"]
}
6 changes: 6 additions & 0 deletions tests/specs/info/workspace_member/info_workspace_member.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
local: [WILDCARD]file.ts
type: TypeScript
dependencies: 0 unique
size: [WILDCARD]

file://[WILDCARD]/member/sub/file.ts ([WILDCARD])
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
local: [WILDCARD]file.ts
type: TypeScript
dependencies: 0 unique
size: [WILDCARD]

file://[WILDCARD]/member/sub/file.ts ([WILDCARD])
5 changes: 5 additions & 0 deletions tests/specs/info/workspace_member/member/deno.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"imports": {
"foo": "./sub/file.ts"
}
}
1 change: 1 addition & 0 deletions tests/specs/info/workspace_member/member/sub/file.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {};

0 comments on commit 0e60bb9

Please sign in to comment.