1use std::path::Path;
4use std::path::PathBuf;
5
6use deno_path_util::url_from_directory_path;
7use deno_path_util::url_from_file_path;
8use url::Url;
9
10use crate::errors;
11use crate::path::PathClean;
12use crate::path::UrlOrPathRef;
13
14pub trait NpmPackageFolderResolver {
15 fn resolve_package_folder_from_package(
17 &self,
18 specifier: &str,
19 referrer: &UrlOrPathRef,
20 ) -> Result<PathBuf, errors::PackageFolderResolveError>;
21}
22
23pub trait InNpmPackageChecker {
25 fn in_npm_package(&self, specifier: &Url) -> bool;
26
27 fn in_npm_package_at_dir_path(&self, path: &Path) -> bool {
28 let specifier = match url_from_directory_path(&path.to_path_buf().clean()) {
29 Ok(p) => p,
30 Err(_) => return false,
31 };
32 self.in_npm_package(&specifier)
33 }
34
35 fn in_npm_package_at_file_path(&self, path: &Path) -> bool {
36 let specifier = match url_from_file_path(&path.to_path_buf().clean()) {
37 Ok(p) => p,
38 Err(_) => return false,
39 };
40 self.in_npm_package(&specifier)
41 }
42}