summaryrefslogtreecommitdiff
path: root/cli/args/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/args/mod.rs')
-rw-r--r--cli/args/mod.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/cli/args/mod.rs b/cli/args/mod.rs
index 71cc4e218..5be5fc7ab 100644
--- a/cli/args/mod.rs
+++ b/cli/args/mod.rs
@@ -12,6 +12,7 @@ use self::package_json::PackageJsonDeps;
use ::import_map::ImportMap;
use indexmap::IndexMap;
+use crate::npm::NpmRegistryApi;
use crate::npm::NpmResolutionSnapshot;
pub use config_file::BenchConfig;
pub use config_file::CompilerOptions;
@@ -664,13 +665,31 @@ impl CliOptions {
.map(Some)
}
- pub fn get_npm_resolution_snapshot(&self) -> Option<NpmResolutionSnapshot> {
+ pub async fn resolve_npm_resolution_snapshot(
+ &self,
+ api: &NpmRegistryApi,
+ ) -> Result<Option<NpmResolutionSnapshot>, AnyError> {
if let Some(state) = &*NPM_PROCESS_STATE {
// TODO(bartlomieju): remove this clone
- return Some(state.snapshot.clone());
+ return Ok(Some(state.snapshot.clone()));
+ }
+
+ if let Some(lockfile) = self.maybe_lock_file() {
+ if !lockfile.lock().overwrite {
+ return Ok(Some(
+ NpmResolutionSnapshot::from_lockfile(lockfile.clone(), api)
+ .await
+ .with_context(|| {
+ format!(
+ "failed reading lockfile '{}'",
+ lockfile.lock().filename.display()
+ )
+ })?,
+ ));
+ }
}
- None
+ Ok(None)
}
// If the main module should be treated as being in an npm package.