diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-09-30 09:33:32 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-30 13:33:32 +0000 |
commit | 69ab72002550b5797185b7651de28c700b220bb2 (patch) | |
tree | ce224c0631f42e3ad73e6bd848d1a597d19f1a9f /resolvers/deno/npm/local.rs | |
parent | c8f692057b256dac57342867b7606a74309449fc (diff) |
refactor: move ByonmNpmResolver to deno_resolver (#25937)
Some more slow progress on moving all the resolution code into
deno_resolver.
Diffstat (limited to 'resolvers/deno/npm/local.rs')
-rw-r--r-- | resolvers/deno/npm/local.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/resolvers/deno/npm/local.rs b/resolvers/deno/npm/local.rs new file mode 100644 index 000000000..aef476ad9 --- /dev/null +++ b/resolvers/deno/npm/local.rs @@ -0,0 +1,27 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +use std::borrow::Cow; + +/// Normalizes a package name for use at `node_modules/.deno/<pkg-name>@<version>[_<copy_index>]` +pub fn normalize_pkg_name_for_node_modules_deno_folder(name: &str) -> Cow<str> { + let name = if name.to_lowercase() == name { + Cow::Borrowed(name) + } else { + Cow::Owned(format!("_{}", mixed_case_package_name_encode(name))) + }; + if name.starts_with('@') { + name.replace('/', "+").into() + } else { + name + } +} + +fn mixed_case_package_name_encode(name: &str) -> String { + // use base32 encoding because it's reversible and the character set + // only includes the characters within 0-9 and A-Z so it can be lower cased + base32::encode( + base32::Alphabet::Rfc4648Lower { padding: false }, + name.as_bytes(), + ) + .to_lowercase() +} |