summaryrefslogtreecommitdiff
path: root/resolvers/node/npm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'resolvers/node/npm.rs')
-rw-r--r--resolvers/node/npm.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/resolvers/node/npm.rs b/resolvers/node/npm.rs
new file mode 100644
index 000000000..77df57c48
--- /dev/null
+++ b/resolvers/node/npm.rs
@@ -0,0 +1,41 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+use std::path::Path;
+use std::path::PathBuf;
+
+use url::Url;
+
+use crate::errors;
+use crate::path::PathClean;
+use crate::sync::MaybeSend;
+use crate::sync::MaybeSync;
+
+#[allow(clippy::disallowed_types)]
+pub type NpmResolverRc = crate::sync::MaybeArc<dyn NpmResolver>;
+
+pub trait NpmResolver: std::fmt::Debug + MaybeSend + MaybeSync {
+ /// Resolves an npm package folder path from an npm package referrer.
+ fn resolve_package_folder_from_package(
+ &self,
+ specifier: &str,
+ referrer: &Url,
+ ) -> Result<PathBuf, errors::PackageFolderResolveError>;
+
+ fn in_npm_package(&self, specifier: &Url) -> bool;
+
+ fn in_npm_package_at_dir_path(&self, path: &Path) -> bool {
+ let specifier = match Url::from_directory_path(path.to_path_buf().clean()) {
+ Ok(p) => p,
+ Err(_) => return false,
+ };
+ self.in_npm_package(&specifier)
+ }
+
+ fn in_npm_package_at_file_path(&self, path: &Path) -> bool {
+ let specifier = match Url::from_file_path(path.to_path_buf().clean()) {
+ Ok(p) => p,
+ Err(_) => return false,
+ };
+ self.in_npm_package(&specifier)
+ }
+}