mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 19:08:15 +00:00
fix(node): handle resolving ".//<something>" in npm packages (#26920)
The issue was this package had an import like: `".//index.js"` and we resolved that as specified, but node normalizes it to `"./index.js"` so we have to copy node.
This commit is contained in:
parent
661aa22c03
commit
186b52731c
7 changed files with 30 additions and 16 deletions
|
@ -202,7 +202,7 @@ impl<TEnv: NodeResolverEnv> NodeResolver<TEnv> {
|
|||
mode: NodeResolutionMode,
|
||||
) -> Result<Url, NodeResolveError> {
|
||||
if should_be_treated_as_relative_or_absolute_path(specifier) {
|
||||
Ok(referrer.join(specifier).map_err(|err| {
|
||||
Ok(node_join_url(referrer, specifier).map_err(|err| {
|
||||
NodeResolveRelativeJoinError {
|
||||
path: specifier.to_string(),
|
||||
base: referrer.clone(),
|
||||
|
@ -1763,6 +1763,17 @@ fn get_module_name_from_builtin_node_module_specifier(
|
|||
Some(specifier)
|
||||
}
|
||||
|
||||
/// Node is more lenient joining paths than the url crate is,
|
||||
/// so this function handles that.
|
||||
fn node_join_url(url: &Url, path: &str) -> Result<Url, url::ParseError> {
|
||||
if let Some(suffix) = path.strip_prefix(".//") {
|
||||
// specifier had two leading slashes
|
||||
url.join(&format!("./{}", suffix))
|
||||
} else {
|
||||
url.join(path)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use serde_json::json;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue