node_resolver/
npm.rs

1// Copyright 2018-2025 the Deno authors. MIT license.
2
3use 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  /// Resolves an npm package folder path from the specified referrer.
16  fn resolve_package_folder_from_package(
17    &self,
18    specifier: &str,
19    referrer: &UrlOrPathRef,
20  ) -> Result<PathBuf, errors::PackageFolderResolveError>;
21}
22
23/// Checks if a provided specifier is in an npm package.
24pub 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}