diff options
Diffstat (limited to 'cli/standalone')
-rw-r--r-- | cli/standalone/binary.rs | 42 | ||||
-rw-r--r-- | cli/standalone/mod.rs | 129 |
2 files changed, 72 insertions, 99 deletions
diff --git a/cli/standalone/binary.rs b/cli/standalone/binary.rs index afe5a1b57..412cea12c 100644 --- a/cli/standalone/binary.rs +++ b/cli/standalone/binary.rs @@ -36,11 +36,8 @@ use crate::args::PackageJsonDepsProvider; use crate::cache::DenoDir; 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; use crate::util::progress_bar::ProgressBarStyle; @@ -342,9 +339,6 @@ pub struct DenoCompileBinaryWriter<'a> { file_fetcher: &'a FileFetcher, client: &'a HttpClient, deno_dir: &'a DenoDir, - npm_api: &'a CliNpmRegistryApi, - npm_cache: &'a NpmCache, - npm_resolution: &'a NpmResolution, npm_resolver: &'a dyn CliNpmResolver, npm_system_info: NpmSystemInfo, package_json_deps_provider: &'a PackageJsonDepsProvider, @@ -356,9 +350,6 @@ impl<'a> DenoCompileBinaryWriter<'a> { file_fetcher: &'a FileFetcher, client: &'a HttpClient, deno_dir: &'a DenoDir, - npm_api: &'a CliNpmRegistryApi, - npm_cache: &'a NpmCache, - npm_resolution: &'a NpmResolution, npm_resolver: &'a dyn CliNpmResolver, npm_system_info: NpmSystemInfo, package_json_deps_provider: &'a PackageJsonDepsProvider, @@ -367,11 +358,8 @@ impl<'a> DenoCompileBinaryWriter<'a> { file_fetcher, client, deno_dir, - npm_api, - npm_cache, npm_resolver, npm_system_info, - npm_resolution, package_json_deps_provider, } } @@ -502,15 +490,22 @@ impl<'a> DenoCompileBinaryWriter<'a> { .resolve_import_map(self.file_fetcher) .await? .map(|import_map| (import_map.base_url().clone(), import_map.to_json())); - let (npm_vfs, npm_files) = if self.npm_resolution.has_packages() { - let (root_dir, files) = self.build_vfs()?.into_dir_and_files(); - let snapshot = self - .npm_resolution - .serialized_valid_snapshot_for_system(&self.npm_system_info); - eszip.add_npm_snapshot(snapshot); - (Some(root_dir), files) - } else { - (None, Vec::new()) + let (npm_vfs, npm_files) = match self.npm_resolver.as_inner() { + InnerCliNpmResolverRef::Managed(managed) => { + let snapshot = + managed.serialized_valid_snapshot_for_system(&self.npm_system_info); + if !snapshot.as_serialized().packages.is_empty() { + let (root_dir, files) = self.build_vfs()?.into_dir_and_files(); + eszip.add_npm_snapshot(snapshot); + (Some(root_dir), files) + } else { + (None, Vec::new()) + } + } + InnerCliNpmResolverRef::Byonm(_) => { + let (root_dir, files) = self.build_vfs()?.into_dir_and_files(); + (Some(root_dir), files) + } }; let metadata = Metadata { @@ -555,8 +550,9 @@ impl<'a> DenoCompileBinaryWriter<'a> { } 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 registry_url = npm_resolver.registry_base_url(); + let root_path = + npm_resolver.registry_folder_in_global_cache(registry_url); let mut builder = VfsBuilder::new(root_path)?; for package in npm_resolver.all_system_packages(&self.npm_system_info) { diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs index 442334e39..64d56e6a5 100644 --- a/cli/standalone/mod.rs +++ b/cli/standalone/mod.rs @@ -14,14 +14,12 @@ use crate::http_util::HttpClient; use crate::module_loader::CjsResolutionStore; use crate::module_loader::NpmModuleLoader; use crate::node::CliCjsCodeAnalyzer; -use crate::npm::create_npm_fs_resolver; -use crate::npm::CliNpmRegistryApi; -use crate::npm::CliNpmResolver; -use crate::npm::ManagedCliNpmResolver; -use crate::npm::NpmCache; +use crate::npm::create_cli_npm_resolver; +use crate::npm::CliNpmResolverCreateOptions; +use crate::npm::CliNpmResolverManagedCreateOptions; +use crate::npm::CliNpmResolverManagedPackageJsonInstallerOption; +use crate::npm::CliNpmResolverManagedSnapshotOption; use crate::npm::NpmCacheDir; -use crate::npm::NpmResolution; -use crate::npm::PackageJsonDepsInstaller; use crate::resolver::MappedSpecifierResolver; use crate::util::progress_bar::ProgressBar; use crate::util::progress_bar::ProgressBarStyle; @@ -40,7 +38,6 @@ use deno_core::ModuleLoader; use deno_core::ModuleSpecifier; use deno_core::ModuleType; use deno_core::ResolutionKind; -use deno_npm::NpmSystemInfo; use deno_runtime::deno_fs; use deno_runtime::deno_node::analyze::NodeCodeTranslator; use deno_runtime::deno_node::NodeResolver; @@ -309,82 +306,62 @@ pub async fn run( .join(format!("deno-compile-{}", current_exe_name)) .join("node_modules"); let npm_cache_dir = NpmCacheDir::new(root_path.clone()); - let (fs, vfs_root, node_modules_path, snapshot) = if let Some(snapshot) = - eszip.take_npm_snapshot() - { - let vfs_root_dir_path = if metadata.node_modules_dir { - root_path - } else { - npm_cache_dir.registry_folder(&npm_registry_url) - }; - let vfs = load_npm_vfs(vfs_root_dir_path.clone()) - .context("Failed to load npm vfs.")?; - let node_modules_path = if metadata.node_modules_dir { - Some(vfs.root().to_path_buf()) + let npm_global_cache_dir = npm_cache_dir.get_cache_location(); + let (fs, vfs_root, maybe_node_modules_path, maybe_snapshot) = + if let Some(snapshot) = eszip.take_npm_snapshot() { + let vfs_root_dir_path = if metadata.node_modules_dir { + root_path + } else { + npm_cache_dir.registry_folder(&npm_registry_url) + }; + let vfs = load_npm_vfs(vfs_root_dir_path.clone()) + .context("Failed to load npm vfs.")?; + let node_modules_path = if metadata.node_modules_dir { + Some(vfs.root().to_path_buf()) + } else { + None + }; + ( + Arc::new(DenoCompileFileSystem::new(vfs)) + as Arc<dyn deno_fs::FileSystem>, + Some(vfs_root_dir_path), + node_modules_path, + Some(snapshot), + ) } else { - None + ( + Arc::new(deno_fs::RealFs) as Arc<dyn deno_fs::FileSystem>, + None, + None, + None, + ) }; - ( - Arc::new(DenoCompileFileSystem::new(vfs)) as Arc<dyn deno_fs::FileSystem>, - Some(vfs_root_dir_path), - node_modules_path, - Some(snapshot), - ) - } else { - ( - Arc::new(deno_fs::RealFs) as Arc<dyn deno_fs::FileSystem>, - None, - None, - None, - ) - }; - let npm_cache = Arc::new(NpmCache::new( - npm_cache_dir, - CacheSetting::Only, - fs.clone(), - http_client.clone(), - progress_bar.clone(), - )); - let npm_api = Arc::new(CliNpmRegistryApi::new( - npm_registry_url.clone(), - npm_cache.clone(), - http_client.clone(), - progress_bar.clone(), - )); - let npm_resolution = Arc::new(NpmResolution::from_serialized( - npm_api.clone(), - snapshot, - None, - )); - let has_node_modules_dir = node_modules_path.is_some(); - let npm_fs_resolver = create_npm_fs_resolver( - fs.clone(), - npm_cache, - &progress_bar, - npm_registry_url, - npm_resolution.clone(), - node_modules_path, - NpmSystemInfo::default(), - ); + let has_node_modules_dir = maybe_node_modules_path.is_some(); let package_json_deps_provider = Arc::new(PackageJsonDepsProvider::new( metadata .package_json_deps .map(|serialized| serialized.into_deps()), )); - let package_json_installer = Arc::new(PackageJsonDepsInstaller::new( - package_json_deps_provider.clone(), - npm_api.clone(), - npm_resolution.clone(), - )); - let npm_resolver = Arc::new(ManagedCliNpmResolver::new( - npm_api.clone(), - fs.clone(), - npm_resolution.clone(), - npm_fs_resolver, - None, - package_json_installer, - )) as Arc<dyn CliNpmResolver>; + let npm_resolver = create_cli_npm_resolver( + CliNpmResolverCreateOptions::Managed(CliNpmResolverManagedCreateOptions { + snapshot: CliNpmResolverManagedSnapshotOption::Specified(maybe_snapshot), + maybe_lockfile: None, + fs: fs.clone(), + http_client: http_client.clone(), + npm_global_cache_dir, + cache_setting: CacheSetting::Only, + text_only_progress_bar: progress_bar, + maybe_node_modules_path, + package_json_installer: + CliNpmResolverManagedPackageJsonInstallerOption::ConditionalInstall( + package_json_deps_provider.clone(), + ), + npm_registry_url, + npm_system_info: Default::default(), + }), + ) + .await?; let node_resolver = Arc::new(NodeResolver::new( fs.clone(), npm_resolver.clone().into_npm_resolver(), |