summaryrefslogtreecommitdiff
path: root/cli/npm
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-04-13 10:47:45 -0400
committerGitHub <noreply@github.com>2023-04-13 10:47:45 -0400
commitefa7c19890f58d9d446477e03e460b1190023c85 (patch)
treecce52a3abd56dd0a65adbedd2b94bc88ea68f1c2 /cli/npm
parent2eb0f9fb5cc3fd4c0d318cd04bdc03603b9ef70a (diff)
refactor: upgrade to deno_npm 0.3.0 (#18671)
This allows us to specify the `@types/node` version constraint in the CLI instead of in deno_npm.
Diffstat (limited to 'cli/npm')
-rw-r--r--cli/npm/cache.rs2
-rw-r--r--cli/npm/resolution.rs38
-rw-r--r--cli/npm/resolvers/mod.rs5
3 files changed, 36 insertions, 9 deletions
diff --git a/cli/npm/cache.rs b/cli/npm/cache.rs
index 3c37aebe9..1ad6bf72a 100644
--- a/cli/npm/cache.rs
+++ b/cli/npm/cache.rs
@@ -277,7 +277,7 @@ impl ReadonlyNpmCache {
let name = parts.join("/");
let (version, copy_index) =
if let Some((version, copy_count)) = version_part.split_once('_') {
- (version, copy_count.parse::<usize>().ok()?)
+ (version, copy_count.parse::<u8>().ok()?)
} else {
(version_part, 0)
};
diff --git a/cli/npm/resolution.rs b/cli/npm/resolution.rs
index 7d1619b94..dbfbb9665 100644
--- a/cli/npm/resolution.rs
+++ b/cli/npm/resolution.rs
@@ -14,9 +14,12 @@ use deno_npm::resolution::NpmPackageVersionResolutionError;
use deno_npm::resolution::NpmPackagesPartitioned;
use deno_npm::resolution::NpmResolutionError;
use deno_npm::resolution::NpmResolutionSnapshot;
+use deno_npm::resolution::NpmResolutionSnapshotCreateOptions;
use deno_npm::resolution::PackageNotFoundFromReferrerError;
use deno_npm::resolution::PackageNvNotFoundError;
use deno_npm::resolution::PackageReqNotFoundError;
+use deno_npm::resolution::SerializedNpmResolutionSnapshot;
+use deno_npm::resolution::ValidSerializedNpmResolutionSnapshot;
use deno_npm::NpmPackageCacheFolderId;
use deno_npm::NpmPackageId;
use deno_npm::NpmResolutionPackage;
@@ -24,6 +27,7 @@ use deno_semver::npm::NpmPackageNv;
use deno_semver::npm::NpmPackageNvReference;
use deno_semver::npm::NpmPackageReq;
use deno_semver::npm::NpmPackageReqReference;
+use deno_semver::VersionReq;
use crate::args::Lockfile;
@@ -48,20 +52,38 @@ impl std::fmt::Debug for NpmResolution {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let snapshot = self.0.snapshot.read();
f.debug_struct("NpmResolution")
- .field("snapshot", &snapshot)
+ .field("snapshot", &snapshot.as_serialized())
.finish()
}
}
impl NpmResolution {
+ pub fn from_serialized(
+ api: CliNpmRegistryApi,
+ initial_snapshot: Option<ValidSerializedNpmResolutionSnapshot>,
+ maybe_lockfile: Option<Arc<Mutex<Lockfile>>>,
+ ) -> Self {
+ let snapshot =
+ NpmResolutionSnapshot::new(NpmResolutionSnapshotCreateOptions {
+ api: Arc::new(api.clone()),
+ snapshot: initial_snapshot.unwrap_or_default(),
+ // WARNING: When bumping this version, check if anything needs to be
+ // updated in the `setNodeOnlyGlobalNames` call in 99_main_compiler.js
+ types_node_version_req: Some(
+ VersionReq::parse_from_npm("18.0.0 - 18.11.18").unwrap(),
+ ),
+ });
+ Self::new(api, snapshot, maybe_lockfile)
+ }
+
pub fn new(
api: CliNpmRegistryApi,
- initial_snapshot: Option<NpmResolutionSnapshot>,
+ initial_snapshot: NpmResolutionSnapshot,
maybe_lockfile: Option<Arc<Mutex<Lockfile>>>,
) -> Self {
Self(Arc::new(NpmResolutionInner {
api,
- snapshot: RwLock::new(initial_snapshot.unwrap_or_default()),
+ snapshot: RwLock::new(initial_snapshot),
update_queue: Default::default(),
maybe_lockfile,
}))
@@ -108,7 +130,7 @@ impl NpmResolution {
.all(|req| reqs_set.contains(req));
// if any packages were removed, we need to completely recreate the npm resolution snapshot
if has_removed_package {
- NpmResolutionSnapshot::default()
+ snapshot.into_empty()
} else {
snapshot
}
@@ -240,6 +262,10 @@ impl NpmResolution {
self.0.snapshot.read().clone()
}
+ pub fn serialized_snapshot(&self) -> SerializedNpmResolutionSnapshot {
+ self.0.snapshot.read().as_serialized()
+ }
+
pub fn lock(&self, lockfile: &mut Lockfile) -> Result<(), AnyError> {
let snapshot = self.0.snapshot.read();
populate_lockfile_from_snapshot(lockfile, &snapshot)
@@ -264,7 +290,7 @@ async fn add_package_reqs_to_snapshot(
return Ok(snapshot); // already up to date
}
- let result = snapshot.resolve_pending(package_reqs.clone(), api).await;
+ let result = snapshot.resolve_pending(package_reqs.clone()).await;
api.clear_memory_cache();
let snapshot = match result {
Ok(snapshot) => snapshot,
@@ -274,7 +300,7 @@ async fn add_package_reqs_to_snapshot(
// try again
let snapshot = get_new_snapshot();
- let result = snapshot.resolve_pending(package_reqs, api).await;
+ let result = snapshot.resolve_pending(package_reqs).await;
api.clear_memory_cache();
// now surface the result after clearing the cache
result?
diff --git a/cli/npm/resolvers/mod.rs b/cli/npm/resolvers/mod.rs
index a490dbf3f..31218f356 100644
--- a/cli/npm/resolvers/mod.rs
+++ b/cli/npm/resolvers/mod.rs
@@ -16,6 +16,7 @@ use deno_core::serde_json;
use deno_core::url::Url;
use deno_npm::resolution::NpmResolutionSnapshot;
use deno_npm::resolution::PackageReqNotFoundError;
+use deno_npm::resolution::SerializedNpmResolutionSnapshot;
use deno_npm::NpmPackageId;
use deno_runtime::deno_node::NodePermissions;
use deno_runtime::deno_node::NodeResolutionMode;
@@ -41,7 +42,7 @@ use super::NpmCache;
/// State provided to the process via an environment variable.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NpmProcessState {
- pub snapshot: NpmResolutionSnapshot,
+ pub snapshot: SerializedNpmResolutionSnapshot,
pub local_node_modules_path: Option<String>,
}
@@ -205,7 +206,7 @@ impl NpmPackageResolver {
/// Gets the state of npm for the process.
pub fn get_npm_process_state(&self) -> String {
serde_json::to_string(&NpmProcessState {
- snapshot: self.snapshot(),
+ snapshot: self.resolution.serialized_snapshot(),
local_node_modules_path: self
.fs_resolver
.node_modules_path()