Skip to content

Commit aa8cea3

Browse files
authored
fix(core): support arrays as alias targets (#7453)
1 parent 9f7ae54 commit aa8cea3

File tree

8 files changed

+58
-2
lines changed

8 files changed

+58
-2
lines changed

.changeset/aliased-alleys-align.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@biomejs/biome": patch
3+
---
4+
5+
Fixed [#7242](https://github.com/biomejs/biome/issues/7242): Aliases specified in `package.json`'s `imports` section now support having multiple targets as part of an array.

crates/biome_resolver/src/lib.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,10 @@ fn resolve_import_alias(
235235
fs: &dyn ResolverFsProxy,
236236
options: &ResolveOptions,
237237
) -> Result<Utf8PathBuf, ResolveError> {
238-
let imports = package_json.imports.clone().ok_or(ResolveError::NotFound)?;
238+
let imports = package_json
239+
.imports
240+
.as_ref()
241+
.ok_or(ResolveError::NotFound)?;
239242
let imports = imports
240243
.as_object()
241244
.ok_or(ResolveError::InvalidMappingTarget)?;
@@ -438,6 +441,12 @@ fn resolve_target_value(
438441
}
439442
None => resolve_string(target.as_str()),
440443
},
444+
JsonValue::Array(targets) => targets
445+
.iter()
446+
.find_map(|target| {
447+
resolve_target_value(target, glob_replacement, package_path, fs, options).ok()
448+
})
449+
.ok_or(ResolveError::NotFound),
441450
_ => Err(ResolveError::InvalidMappingTarget),
442451
}
443452
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
{
2-
"name": "resolver_cases_6"
2+
"name": "resolver_cases_6",
3+
"imports": {
4+
"#*": [
5+
"./src/*",
6+
"./src/*.ts",
7+
"./src/*.tsx",
8+
"./src/*/index.ts"
9+
]
10+
}
311
}

crates/biome_resolver/tests/fixtures/resolver_cases_6/src/lib/a.tsx

Whitespace-only changes.

crates/biome_resolver/tests/fixtures/resolver_cases_6/src/lib/b.ts

Whitespace-only changes.

crates/biome_resolver/tests/fixtures/resolver_cases_6/src/lib/c/index.ts

Whitespace-only changes.

crates/biome_resolver/tests/fixtures/resolver_cases_6/src/lib/d.js

Whitespace-only changes.

crates/biome_resolver/tests/spec_tests.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,3 +533,37 @@ fn test_resolve_type_definitions_without_type_specification() {
533533
)))
534534
);
535535
}
536+
537+
#[test]
538+
fn test_resolve_alias_with_multiple_target_values() {
539+
let base_dir = get_fixtures_path("resolver_cases_6");
540+
let fs = OsFileSystem::new(base_dir.clone());
541+
542+
let options = ResolveOptions {
543+
condition_names: &["types", "import", "default"],
544+
default_files: &["index"],
545+
extensions: &["ts", "js"],
546+
..Default::default()
547+
};
548+
549+
assert_eq!(
550+
resolve("#lib/a", &base_dir, &fs, &options),
551+
Ok(Utf8PathBuf::from(format!("{base_dir}/src/lib/a.tsx")))
552+
);
553+
assert_eq!(
554+
resolve("#lib/b", &base_dir, &fs, &options),
555+
Ok(Utf8PathBuf::from(format!("{base_dir}/src/lib/b.ts")))
556+
);
557+
assert_eq!(
558+
resolve("#lib/c", &base_dir, &fs, &options),
559+
Ok(Utf8PathBuf::from(format!("{base_dir}/src/lib/c/index.ts")))
560+
);
561+
assert_eq!(
562+
resolve("#lib/d", &base_dir, &fs, &options),
563+
Err(ResolveError::NotFound)
564+
);
565+
assert_eq!(
566+
resolve("#lib/d.js", &base_dir, &fs, &options),
567+
Ok(Utf8PathBuf::from(format!("{base_dir}/src/lib/d.js")))
568+
);
569+
}

0 commit comments

Comments
 (0)