From 38542e849d3d1f3fbb1328b82afa135486ef6c2a Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 15 Nov 2022 21:48:29 -0500 Subject: fix(npm): properly handle getting `@types` package for scoped packages (#16655) --- cli/npm/resolvers/common.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'cli/npm/resolvers/common.rs') diff --git a/cli/npm/resolvers/common.rs b/cli/npm/resolvers/common.rs index 32b8293cd..11fa6512c 100644 --- a/cli/npm/resolvers/common.rs +++ b/cli/npm/resolvers/common.rs @@ -128,3 +128,25 @@ pub fn ensure_registry_read_permission( format!("Reading {} is not allowed", path.display()), )) } + +/// Gets the corresponding @types package for the provided package name. +pub fn types_package_name(package_name: &str) -> String { + debug_assert!(!package_name.starts_with("@types/")); + // Scoped packages will get two underscores for each slash + // https://github.com/DefinitelyTyped/DefinitelyTyped/tree/15f1ece08f7b498f4b9a2147c2a46e94416ca777#what-about-scoped-packages + format!("@types/{}", package_name.replace('/', "__")) +} + +#[cfg(test)] +mod test { + use super::types_package_name; + + #[test] + fn test_types_package_name() { + assert_eq!(types_package_name("name"), "@types/name"); + assert_eq!( + types_package_name("@scoped/package"), + "@types/@scoped__package" + ); + } +} -- cgit v1.2.3