From e7367044d933ee3518ae583a43876a0ddab5b17e Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 23 Aug 2022 10:39:19 -0400 Subject: feat: binary npm commands (#15542) --- test_util/src/lib.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'test_util/src') 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::>(); + let package_name = if url_parts[0].starts_with('@') { + url_parts.into_iter().take(2).collect::>().join("/") + } else { + url_parts.into_iter().take(1).collect::>().join("/") + }; let url = if is_tarball { let file_name = file_path.file_name().unwrap().to_string_lossy(); format!( -- cgit v1.2.3