summaryrefslogtreecommitdiff
path: root/cli/standalone/binary.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-09-29 09:26:25 -0400
committerGitHub <noreply@github.com>2023-09-29 09:26:25 -0400
commit5edd102f3f912a53c7bcad3b0fa4feb672ada323 (patch)
tree2402b64e527bd859f3a2c71d3e96a89992002aa2 /cli/standalone/binary.rs
parentd43e48c4e96b02289d505cd2558ba85d7d6cb57b (diff)
refactor(cli): make `CliNpmResolver` a trait (#20732)
This makes `CliNpmResolver` a trait. The terminology used is: - **managed** - Deno manages the node_modules folder and does an auto-install (ex. `ManagedCliNpmResolver`) - **byonm** - "Bring your own node_modules" (ex. `ByonmCliNpmResolver`, which is in this PR, but unimplemented at the moment) Part of #18967
Diffstat (limited to 'cli/standalone/binary.rs')
-rw-r--r--cli/standalone/binary.rs54
1 files changed, 31 insertions, 23 deletions
diff --git a/cli/standalone/binary.rs b/cli/standalone/binary.rs
index 48ef043da..38fb3b08f 100644
--- a/cli/standalone/binary.rs
+++ b/cli/standalone/binary.rs
@@ -38,6 +38,7 @@ use crate::file_fetcher::FileFetcher;
use crate::http_util::HttpClient;
use crate::npm::CliNpmRegistryApi;
use crate::npm::CliNpmResolver;
+use crate::npm::InnerCliNpmResolverRef;
use crate::npm::NpmCache;
use crate::npm::NpmResolution;
use crate::util::progress_bar::ProgressBar;
@@ -344,7 +345,7 @@ pub struct DenoCompileBinaryWriter<'a> {
npm_api: &'a CliNpmRegistryApi,
npm_cache: &'a NpmCache,
npm_resolution: &'a NpmResolution,
- npm_resolver: &'a CliNpmResolver,
+ npm_resolver: &'a dyn CliNpmResolver,
npm_system_info: NpmSystemInfo,
package_json_deps_provider: &'a PackageJsonDepsProvider,
}
@@ -358,7 +359,7 @@ impl<'a> DenoCompileBinaryWriter<'a> {
npm_api: &'a CliNpmRegistryApi,
npm_cache: &'a NpmCache,
npm_resolution: &'a NpmResolution,
- npm_resolver: &'a CliNpmResolver,
+ npm_resolver: &'a dyn CliNpmResolver,
npm_system_info: NpmSystemInfo,
package_json_deps_provider: &'a PackageJsonDepsProvider,
) -> Self {
@@ -545,28 +546,35 @@ impl<'a> DenoCompileBinaryWriter<'a> {
}
fn build_vfs(&self) -> Result<VfsBuilder, AnyError> {
- if let Some(node_modules_path) = self.npm_resolver.node_modules_path() {
- let mut builder = VfsBuilder::new(node_modules_path.clone())?;
- builder.add_dir_recursive(&node_modules_path)?;
- Ok(builder)
- } else {
- // DO NOT include the user's registry url as it may contain credentials,
- // but also don't make this dependent on the registry url
- let registry_url = self.npm_api.base_url();
- let root_path = self.npm_cache.registry_folder(registry_url);
- let mut builder = VfsBuilder::new(root_path)?;
- for package in self
- .npm_resolution
- .all_system_packages(&self.npm_system_info)
- {
- let folder = self
- .npm_resolver
- .resolve_pkg_folder_from_pkg_id(&package.id)?;
- builder.add_dir_recursive(&folder)?;
+ match self.npm_resolver.as_inner() {
+ InnerCliNpmResolverRef::Managed(npm_resolver) => {
+ if let Some(node_modules_path) = npm_resolver.node_modules_path() {
+ let mut builder = VfsBuilder::new(node_modules_path.clone())?;
+ builder.add_dir_recursive(&node_modules_path)?;
+ Ok(builder)
+ } else {
+ // DO NOT include the user's registry url as it may contain credentials,
+ // but also don't make this dependent on the registry url
+ let registry_url = self.npm_api.base_url();
+ let root_path = self.npm_cache.registry_folder(registry_url);
+ let mut builder = VfsBuilder::new(root_path)?;
+ for package in self
+ .npm_resolution
+ .all_system_packages(&self.npm_system_info)
+ {
+ let folder =
+ npm_resolver.resolve_pkg_folder_from_pkg_id(&package.id)?;
+ builder.add_dir_recursive(&folder)?;
+ }
+ // overwrite the root directory's name to obscure the user's registry url
+ builder.set_root_dir_name("node_modules".to_string());
+ Ok(builder)
+ }
+ }
+ InnerCliNpmResolverRef::Byonm(_) => {
+ // todo(#18967): should use the node_modules directory
+ todo!()
}
- // overwrite the root directory's name to obscure the user's registry url
- builder.set_root_dir_name("node_modules".to_string());
- Ok(builder)
}
}
}