summaryrefslogtreecommitdiff
path: root/cli/args
diff options
context:
space:
mode:
Diffstat (limited to 'cli/args')
-rw-r--r--cli/args/flags.rs16
-rw-r--r--cli/args/mod.rs68
2 files changed, 56 insertions, 28 deletions
diff --git a/cli/args/flags.rs b/cli/args/flags.rs
index 138d77359..588f75dbb 100644
--- a/cli/args/flags.rs
+++ b/cli/args/flags.rs
@@ -407,6 +407,7 @@ pub struct Flags {
pub seed: Option<u64>,
pub unstable: bool,
pub unstable_bare_node_builtlins: bool,
+ pub unstable_byonm: bool,
pub unsafely_ignore_certificate_errors: Option<Vec<String>>,
pub v8_flags: Vec<String>,
}
@@ -803,9 +804,9 @@ pub fn flags_from_vec(args: Vec<String>) -> clap::error::Result<Flags> {
flags.unstable = true;
}
- if matches.get_flag("unstable-bare-node-builtins") {
- flags.unstable_bare_node_builtlins = true;
- }
+ flags.unstable_bare_node_builtlins =
+ matches.get_flag("unstable-bare-node-builtins");
+ flags.unstable_byonm = matches.get_flag("unstable-byonm");
if matches.get_flag("quiet") {
flags.log_level = Some(Level::Error);
@@ -912,6 +913,15 @@ fn clap_root() -> Command {
.global(true),
)
.arg(
+ Arg::new("unstable-byonm")
+ .long("unstable-byonm")
+ .help("Enable unstable 'bring your own node_modules' feature")
+ .env("DENO_UNSTABLE_BYONM")
+ .value_parser(FalseyValueParser::new())
+ .action(ArgAction::SetTrue)
+ .global(true),
+ )
+ .arg(
Arg::new("log-level")
.short('L')
.long("log-level")
diff --git a/cli/args/mod.rs b/cli/args/mod.rs
index 390e16698..ab8d6b503 100644
--- a/cli/args/mod.rs
+++ b/cli/args/mod.rs
@@ -76,25 +76,29 @@ use deno_config::FmtConfig;
use deno_config::LintConfig;
use deno_config::TestConfig;
-static NPM_REGISTRY_DEFAULT_URL: Lazy<Url> = Lazy::new(|| {
- let env_var_name = "NPM_CONFIG_REGISTRY";
- if let Ok(registry_url) = std::env::var(env_var_name) {
- // ensure there is a trailing slash for the directory
- let registry_url = format!("{}/", registry_url.trim_end_matches('/'));
- match Url::parse(&registry_url) {
- Ok(url) => {
- return url;
- }
- Err(err) => {
- log::debug!("Invalid {} environment variable: {:#}", env_var_name, err,);
+pub fn npm_registry_default_url() -> &'static Url {
+ static NPM_REGISTRY_DEFAULT_URL: Lazy<Url> = Lazy::new(|| {
+ let env_var_name = "NPM_CONFIG_REGISTRY";
+ if let Ok(registry_url) = std::env::var(env_var_name) {
+ // ensure there is a trailing slash for the directory
+ let registry_url = format!("{}/", registry_url.trim_end_matches('/'));
+ match Url::parse(&registry_url) {
+ Ok(url) => {
+ return url;
+ }
+ Err(err) => {
+ log::debug!(
+ "Invalid {} environment variable: {:#}",
+ env_var_name,
+ err,
+ );
+ }
}
}
- }
- Url::parse("https://registry.npmjs.org").unwrap()
-});
+ Url::parse("https://registry.npmjs.org").unwrap()
+ });
-pub fn npm_registry_default_url() -> &'static Url {
&NPM_REGISTRY_DEFAULT_URL
}
@@ -570,10 +574,16 @@ pub fn get_root_cert_store(
/// State provided to the process via an environment variable.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct NpmProcessState {
- pub snapshot: deno_npm::resolution::SerializedNpmResolutionSnapshot,
+ pub kind: NpmProcessStateKind,
pub local_node_modules_path: Option<String>,
}
+#[derive(Clone, Debug, Serialize, Deserialize)]
+pub enum NpmProcessStateKind {
+ Snapshot(deno_npm::resolution::SerializedNpmResolutionSnapshot),
+ Byonm,
+}
+
const RESOLUTION_STATE_ENV_VAR_NAME: &str =
"DENO_DONT_USE_INTERNAL_NODE_COMPAT_STATE";
@@ -875,9 +885,11 @@ impl CliOptions {
pub fn resolve_npm_resolution_snapshot(
&self,
) -> Result<Option<ValidSerializedNpmResolutionSnapshot>, AnyError> {
- if let Some(state) = &*NPM_PROCESS_STATE {
+ if let Some(NpmProcessStateKind::Snapshot(snapshot)) =
+ NPM_PROCESS_STATE.as_ref().map(|s| &s.kind)
+ {
// TODO(bartlomieju): remove this clone
- Ok(Some(state.snapshot.clone().into_valid()?))
+ Ok(Some(snapshot.clone().into_valid()?))
} else {
Ok(None)
}
@@ -926,13 +938,6 @@ impl CliOptions {
})
}
- pub fn node_modules_dir_specifier(&self) -> Option<ModuleSpecifier> {
- self
- .maybe_node_modules_folder
- .as_ref()
- .map(|path| ModuleSpecifier::from_directory_path(path).unwrap())
- }
-
pub fn vendor_dir_path(&self) -> Option<&PathBuf> {
self.maybe_vendor_folder.as_ref()
}
@@ -1226,6 +1231,19 @@ impl CliOptions {
.unwrap_or(false)
}
+ pub fn unstable_byonm(&self) -> bool {
+ self.flags.unstable_byonm
+ || NPM_PROCESS_STATE
+ .as_ref()
+ .map(|s| matches!(s.kind, NpmProcessStateKind::Byonm))
+ .unwrap_or(false)
+ || self
+ .maybe_config_file()
+ .as_ref()
+ .map(|c| c.json.unstable.iter().any(|c| c == "byonm"))
+ .unwrap_or(false)
+ }
+
pub fn v8_flags(&self) -> &Vec<String> {
&self.flags.v8_flags
}