diff options
Diffstat (limited to 'ext/node/resolution.rs')
-rw-r--r-- | ext/node/resolution.rs | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/ext/node/resolution.rs b/ext/node/resolution.rs index 21ce589c2..d6734066c 100644 --- a/ext/node/resolution.rs +++ b/ext/node/resolution.rs @@ -548,7 +548,9 @@ fn parse_package_name( } else if specifier.starts_with('@') { is_scoped = true; if let Some(index) = separator_index { - separator_index = specifier[index + 1..].find('/'); + separator_index = specifier[index + 1..] + .find('/') + .map(|new_index| index + 1 + new_index); } else { valid_package_name = false; } @@ -707,9 +709,9 @@ pub fn legacy_main_resolve( ) -> Result<PathBuf, AnyError> { let maybe_main = if referrer_kind == NodeModuleKind::Esm && package_json.typ == "module" { - &package_json.module + package_json.module.as_ref().or(package_json.main.as_ref()) } else { - &package_json.main + package_json.main.as_ref() }; let mut guess; @@ -791,3 +793,31 @@ pub fn legacy_main_resolve( Err(generic_error("not found")) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_parse_package_name() { + let dummy_referrer = Url::parse("http://example.com").unwrap(); + + assert_eq!( + parse_package_name("fetch-blob", &dummy_referrer).unwrap(), + ("fetch-blob".to_string(), ".".to_string(), false) + ); + assert_eq!( + parse_package_name("@vue/plugin-vue", &dummy_referrer).unwrap(), + ("@vue/plugin-vue".to_string(), ".".to_string(), true) + ); + assert_eq!( + parse_package_name("@astrojs/prism/dist/highlighter", &dummy_referrer) + .unwrap(), + ( + "@astrojs/prism".to_string(), + "./dist/highlighter".to_string(), + true + ) + ); + } +} |