summaryrefslogtreecommitdiff
path: root/cli/npm/resolvers/common.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2022-11-15 21:48:29 -0500
committerGitHub <noreply@github.com>2022-11-15 21:48:29 -0500
commit38542e849d3d1f3fbb1328b82afa135486ef6c2a (patch)
treeb1ee805c2ce6278f9b8b59c4541ad6ad0775b650 /cli/npm/resolvers/common.rs
parent6da6ed89852ed40a984097d2341e43f8c263cee5 (diff)
fix(npm): properly handle getting `@types` package for scoped packages (#16655)
Diffstat (limited to 'cli/npm/resolvers/common.rs')
-rw-r--r--cli/npm/resolvers/common.rs22
1 files changed, 22 insertions, 0 deletions
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"
+ );
+ }
+}