summaryrefslogtreecommitdiff
path: root/test_util/src
diff options
context:
space:
mode:
Diffstat (limited to 'test_util/src')
-rw-r--r--test_util/src/lib.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/test_util/src/lib.rs b/test_util/src/lib.rs
index 038045a5c..1e80c0d1d 100644
--- a/test_util/src/lib.rs
+++ b/test_util/src/lib.rs
@@ -963,7 +963,7 @@ async fn main_server(
return Ok(file_resp);
} else if should_download_npm_packages() {
if let Err(err) =
- download_npm_registry_file(&file_path, is_tarball).await
+ download_npm_registry_file(req.uri(), &file_path, is_tarball).await
{
return Response::builder()
.status(StatusCode::INTERNAL_SERVER_ERROR)
@@ -992,15 +992,21 @@ fn should_download_npm_packages() -> bool {
}
async fn download_npm_registry_file(
+ uri: &hyper::Uri,
file_path: &PathBuf,
is_tarball: bool,
) -> Result<(), anyhow::Error> {
- let package_name = file_path
- .parent()
- .unwrap()
- .file_name()
+ let url_parts = uri
+ .path()
+ .strip_prefix("/npm/registry/")
.unwrap()
- .to_string_lossy();
+ .split('/')
+ .collect::<Vec<_>>();
+ let package_name = if url_parts[0].starts_with('@') {
+ url_parts.into_iter().take(2).collect::<Vec<_>>().join("/")
+ } else {
+ url_parts.into_iter().take(1).collect::<Vec<_>>().join("/")
+ };
let url = if is_tarball {
let file_name = file_path.file_name().unwrap().to_string_lossy();
format!(