summaryrefslogtreecommitdiff
path: root/cli/npm
diff options
context:
space:
mode:
Diffstat (limited to 'cli/npm')
-rw-r--r--cli/npm/resolution.rs26
-rw-r--r--cli/npm/resolvers/common.rs1
-rw-r--r--cli/npm/resolvers/global.rs48
-rw-r--r--cli/npm/resolvers/local.rs9
-rw-r--r--cli/npm/resolvers/mod.rs4
5 files changed, 54 insertions, 34 deletions
diff --git a/cli/npm/resolution.rs b/cli/npm/resolution.rs
index edc7ec647..3e9438ffa 100644
--- a/cli/npm/resolution.rs
+++ b/cli/npm/resolution.rs
@@ -23,6 +23,7 @@ use deno_npm::resolution::ValidSerializedNpmResolutionSnapshot;
use deno_npm::NpmPackageCacheFolderId;
use deno_npm::NpmPackageId;
use deno_npm::NpmResolutionPackage;
+use deno_npm::NpmSystemInfo;
use deno_semver::npm::NpmPackageNv;
use deno_semver::npm::NpmPackageNvReference;
use deno_semver::npm::NpmPackageReq;
@@ -237,12 +238,21 @@ impl NpmResolution {
Ok(nv)
}
- pub fn all_packages(&self) -> Vec<NpmResolutionPackage> {
- self.snapshot.read().all_packages()
+ pub fn all_system_packages(
+ &self,
+ system_info: &NpmSystemInfo,
+ ) -> Vec<NpmResolutionPackage> {
+ self.snapshot.read().all_system_packages(system_info)
}
- pub fn all_packages_partitioned(&self) -> NpmPackagesPartitioned {
- self.snapshot.read().all_packages_partitioned()
+ pub fn all_system_packages_partitioned(
+ &self,
+ system_info: &NpmSystemInfo,
+ ) -> NpmPackagesPartitioned {
+ self
+ .snapshot
+ .read()
+ .all_system_packages_partitioned(system_info)
}
pub fn has_packages(&self) -> bool {
@@ -322,7 +332,7 @@ fn populate_lockfile_from_snapshot(
.as_serialized(),
);
}
- for package in snapshot.all_packages() {
+ for package in snapshot.all_packages_for_every_system() {
lockfile
.check_or_insert_npm_package(npm_package_to_lockfile_info(package))?;
}
@@ -330,13 +340,13 @@ fn populate_lockfile_from_snapshot(
}
fn npm_package_to_lockfile_info(
- pkg: NpmResolutionPackage,
+ pkg: &NpmResolutionPackage,
) -> NpmPackageLockfileInfo {
let dependencies = pkg
.dependencies
- .into_iter()
+ .iter()
.map(|(name, id)| NpmPackageDependencyLockfileInfo {
- name,
+ name: name.clone(),
id: id.as_serialized(),
})
.collect();
diff --git a/cli/npm/resolvers/common.rs b/cli/npm/resolvers/common.rs
index c91b206cf..abfdd6371 100644
--- a/cli/npm/resolvers/common.rs
+++ b/cli/npm/resolvers/common.rs
@@ -69,7 +69,6 @@ pub async fn cache_packages(
let mut handles = Vec::with_capacity(packages.len());
for package in packages {
- assert_eq!(package.copy_index, 0); // the caller should not provide any of these
let cache = cache.clone();
let registry_url = registry_url.clone();
let handle = spawn(async move {
diff --git a/cli/npm/resolvers/global.rs b/cli/npm/resolvers/global.rs
index fe8764b0c..22211071a 100644
--- a/cli/npm/resolvers/global.rs
+++ b/cli/npm/resolvers/global.rs
@@ -14,6 +14,7 @@ use deno_npm::resolution::PackageNotFoundFromReferrerError;
use deno_npm::NpmPackageCacheFolderId;
use deno_npm::NpmPackageId;
use deno_npm::NpmResolutionPackage;
+use deno_npm::NpmSystemInfo;
use deno_runtime::deno_fs::FileSystem;
use deno_runtime::deno_node::NodePermissions;
use deno_runtime::deno_node::NodeResolutionMode;
@@ -33,6 +34,7 @@ pub struct GlobalNpmPackageResolver {
cache: Arc<NpmCache>,
resolution: Arc<NpmResolution>,
registry_url: Url,
+ system_info: NpmSystemInfo,
}
impl GlobalNpmPackageResolver {
@@ -41,12 +43,14 @@ impl GlobalNpmPackageResolver {
cache: Arc<NpmCache>,
registry_url: Url,
resolution: Arc<NpmResolution>,
+ system_info: NpmSystemInfo,
) -> Self {
Self {
fs,
cache,
resolution,
registry_url,
+ system_info,
}
}
@@ -125,7 +129,26 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver {
}
async fn cache_packages(&self) -> Result<(), AnyError> {
- cache_packages_in_resolver(self).await
+ let package_partitions = self
+ .resolution
+ .all_system_packages_partitioned(&self.system_info);
+
+ cache_packages(
+ package_partitions.packages,
+ &self.cache,
+ &self.registry_url,
+ )
+ .await?;
+
+ // create the copy package folders
+ for copy in package_partitions.copy_packages {
+ self.cache.ensure_copy_package(
+ &copy.get_package_cache_folder_id(),
+ &self.registry_url,
+ )?;
+ }
+
+ Ok(())
}
fn ensure_read_permission(
@@ -137,26 +160,3 @@ impl NpmPackageFsResolver for GlobalNpmPackageResolver {
ensure_registry_read_permission(&self.fs, permissions, &registry_path, path)
}
}
-
-async fn cache_packages_in_resolver(
- resolver: &GlobalNpmPackageResolver,
-) -> Result<(), AnyError> {
- let package_partitions = resolver.resolution.all_packages_partitioned();
-
- cache_packages(
- package_partitions.packages,
- &resolver.cache,
- &resolver.registry_url,
- )
- .await?;
-
- // create the copy package folders
- for copy in package_partitions.copy_packages {
- resolver.cache.ensure_copy_package(
- &copy.get_package_cache_folder_id(),
- &resolver.registry_url,
- )?;
- }
-
- Ok(())
-}
diff --git a/cli/npm/resolvers/local.rs b/cli/npm/resolvers/local.rs
index b2ad08357..e14d7e0c5 100644
--- a/cli/npm/resolvers/local.rs
+++ b/cli/npm/resolvers/local.rs
@@ -24,6 +24,7 @@ use deno_core::url::Url;
use deno_npm::resolution::NpmResolutionSnapshot;
use deno_npm::NpmPackageCacheFolderId;
use deno_npm::NpmPackageId;
+use deno_npm::NpmSystemInfo;
use deno_runtime::deno_core::futures;
use deno_runtime::deno_fs;
use deno_runtime::deno_node::NodePermissions;
@@ -52,6 +53,7 @@ pub struct LocalNpmPackageResolver {
registry_url: Url,
root_node_modules_path: PathBuf,
root_node_modules_url: Url,
+ system_info: NpmSystemInfo,
}
impl LocalNpmPackageResolver {
@@ -62,6 +64,7 @@ impl LocalNpmPackageResolver {
registry_url: Url,
node_modules_folder: PathBuf,
resolution: Arc<NpmResolution>,
+ system_info: NpmSystemInfo,
) -> Self {
Self {
fs,
@@ -72,6 +75,7 @@ impl LocalNpmPackageResolver {
root_node_modules_url: Url::from_directory_path(&node_modules_folder)
.unwrap(),
root_node_modules_path: node_modules_folder,
+ system_info,
}
}
@@ -205,6 +209,7 @@ impl NpmPackageFsResolver for LocalNpmPackageResolver {
&self.progress_bar,
&self.registry_url,
&self.root_node_modules_path,
+ &self.system_info,
)
.await
}
@@ -230,6 +235,7 @@ async fn sync_resolution_with_fs(
progress_bar: &ProgressBar,
registry_url: &Url,
root_node_modules_dir_path: &Path,
+ system_info: &NpmSystemInfo,
) -> Result<(), AnyError> {
if snapshot.is_empty() {
return Ok(()); // don't create the directory
@@ -254,7 +260,8 @@ async fn sync_resolution_with_fs(
// Copy (hardlink in future) <global_registry_cache>/<package_id>/ to
// node_modules/.deno/<package_folder_id_folder_name>/node_modules/<package_name>
let sync_download = should_sync_download();
- let mut package_partitions = snapshot.all_packages_partitioned();
+ let mut package_partitions =
+ snapshot.all_system_packages_partitioned(system_info);
if sync_download {
// we're running the tests not with --quiet
// and we want the output to be deterministic
diff --git a/cli/npm/resolvers/mod.rs b/cli/npm/resolvers/mod.rs
index f54e509f0..a41727dda 100644
--- a/cli/npm/resolvers/mod.rs
+++ b/cli/npm/resolvers/mod.rs
@@ -18,6 +18,7 @@ use deno_npm::resolution::NpmResolutionSnapshot;
use deno_npm::resolution::PackageReqNotFoundError;
use deno_npm::resolution::SerializedNpmResolutionSnapshot;
use deno_npm::NpmPackageId;
+use deno_npm::NpmSystemInfo;
use deno_runtime::deno_fs::FileSystem;
use deno_runtime::deno_node::NodePermissions;
use deno_runtime::deno_node::NodeResolutionMode;
@@ -289,6 +290,7 @@ pub fn create_npm_fs_resolver(
registry_url: Url,
resolution: Arc<NpmResolution>,
maybe_node_modules_path: Option<PathBuf>,
+ system_info: NpmSystemInfo,
) -> Arc<dyn NpmPackageFsResolver> {
match maybe_node_modules_path {
Some(node_modules_folder) => Arc::new(LocalNpmPackageResolver::new(
@@ -298,12 +300,14 @@ pub fn create_npm_fs_resolver(
registry_url,
node_modules_folder,
resolution,
+ system_info,
)),
None => Arc::new(GlobalNpmPackageResolver::new(
fs,
cache,
registry_url,
resolution,
+ system_info,
)),
}
}