Skip to content

Commit c4432a5

Browse files
authored
fix: browser field resolving relative to path to itself (#34)
1 parent b3d8f7c commit c4432a5

File tree

3 files changed

+8
-0
lines changed

3 files changed

+8
-0
lines changed

fixtures/enhanced_resolve/test/fixtures/browser-module/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"module-b": "module-c",
77
"module-c": "module-c",
88
"./toString": "./lib/toString.js",
9+
"./lib/main.js": "./lib/main.js",
910
".": false
1011
},
1112
"innerBrowser1": {

src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,12 @@ impl<Fs: FileSystem + Default> ResolverGeneric<Fs> {
788788
let Some(new_specifier) = package_json.resolve_browser_field(path, specifier)? else {
789789
return Ok(None);
790790
};
791+
// Finish when resolving to self `{"./a.js": "./a.js"}`
792+
if let Some(new_specifier) = new_specifier.strip_prefix("./") {
793+
if path.ends_with(Path::new(new_specifier)) {
794+
return Ok(Some(cached_path.clone()));
795+
}
796+
}
791797
if specifier.is_some_and(|s| s == new_specifier) {
792798
return Ok(None);
793799
}

src/tests/browser_field.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ fn replace_file() {
6161
("should check only alias field properties", f.clone(), "./toString", f.join("lib/toString.js")),
6262
// not part of enhanced-resolve
6363
("recursion", f.clone(), "module-c", f.join("node_modules/module-c.js")),
64+
("resolve self", f.clone(), "./lib/main.js", f.join("lib/main.js")),
6465
];
6566

6667
for (comment, path, request, expected) in data {

0 commit comments

Comments
 (0)