diff options
Diffstat (limited to 'cli/args')
-rw-r--r-- | cli/args/flags.rs | 16 | ||||
-rw-r--r-- | cli/args/mod.rs | 68 |
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(®istry_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(®istry_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 } |