diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-08-23 10:39:19 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-23 10:39:19 -0400 |
commit | e7367044d933ee3518ae583a43876a0ddab5b17e (patch) | |
tree | e557e3ea4faad632bcfafa6539f3bd0115dc6426 /test_util/src | |
parent | 362af63c6f45e98948536d08d2d6195af87f729c (diff) |
feat: binary npm commands (#15542)
Diffstat (limited to 'test_util/src')
-rw-r--r-- | test_util/src/lib.rs | 18 |
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!( |