Skip to content

Commit f790b05

Browse files
committed
lsp: support configurable npm registry
1 parent 3b69d23 commit f790b05

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

cli/args/config_file.rs

+10
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use deno_core::serde::Serializer;
1616
use deno_core::serde_json;
1717
use deno_core::serde_json::json;
1818
use deno_core::serde_json::Value;
19+
use deno_core::url::Url;
1920
use deno_core::ModuleSpecifier;
2021
use indexmap::IndexMap;
2122
use std::borrow::Cow;
@@ -664,6 +665,7 @@ pub struct ConfigFileJson {
664665
pub lock: Option<Value>,
665666
pub exclude: Option<Value>,
666667
pub node_modules_dir: Option<bool>,
668+
pub npm_registry: Option<String>,
667669
}
668670

669671
#[derive(Clone, Debug)]
@@ -859,6 +861,14 @@ impl ConfigFile {
859861
self.json.node_modules_dir
860862
}
861863

864+
pub fn to_npm_registry(&self) -> Option<Url> {
865+
self
866+
.json
867+
.npm_registry
868+
.as_ref()
869+
.and_then(|r| Url::parse(r).ok())
870+
}
871+
862872
pub fn to_import_map_value(&self) -> Value {
863873
let mut value = serde_json::Map::with_capacity(2);
864874
if let Some(imports) = &self.json.imports {

cli/args/mod.rs

+7
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,13 @@ impl CliOptions {
655655
&self.initial_cwd
656656
}
657657

658+
pub fn maybe_npm_registry(&self) -> Option<Url> {
659+
self
660+
.maybe_config_file
661+
.as_ref()
662+
.and_then(|f| f.to_npm_registry())
663+
}
664+
658665
pub fn maybe_config_file_specifier(&self) -> Option<ModuleSpecifier> {
659666
self.maybe_config_file.as_ref().map(|f| f.specifier.clone())
660667
}

cli/factory.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ use crate::worker::HasNodeSpecifierChecker;
4646

4747
use deno_core::error::AnyError;
4848
use deno_core::parking_lot::Mutex;
49+
use deno_core::url::Url;
4950

5051
use deno_runtime::deno_fs;
5152
use deno_runtime::deno_node::analyze::NodeCodeTranslator;
@@ -266,6 +267,13 @@ impl CliFactory {
266267
.get_or_init(|| self.options.maybe_lockfile())
267268
}
268269

270+
fn npm_registry(&self) -> Url {
271+
self
272+
.options
273+
.maybe_npm_registry()
274+
.unwrap_or_else(|| CliNpmRegistryApi::default_url().to_owned())
275+
}
276+
269277
pub fn npm_cache(&self) -> Result<&Arc<NpmCache>, AnyError> {
270278
self.services.npm_cache.get_or_try_init(|| {
271279
Ok(Arc::new(NpmCache::new(
@@ -280,7 +288,7 @@ impl CliFactory {
280288
pub fn npm_api(&self) -> Result<&Arc<CliNpmRegistryApi>, AnyError> {
281289
self.services.npm_api.get_or_try_init(|| {
282290
Ok(Arc::new(CliNpmRegistryApi::new(
283-
CliNpmRegistryApi::default_url().to_owned(),
291+
self.npm_registry(),
284292
self.npm_cache()?.clone(),
285293
self.http_client().clone(),
286294
self.text_only_progress_bar().clone(),
@@ -317,7 +325,7 @@ impl CliFactory {
317325
fs.clone(),
318326
self.npm_cache()?.clone(),
319327
self.text_only_progress_bar(),
320-
CliNpmRegistryApi::default_url().to_owned(),
328+
self.npm_registry(),
321329
npm_resolution.clone(),
322330
self.options.node_modules_dir_path(),
323331
self.options.npm_system_info(),
@@ -340,7 +348,7 @@ impl CliFactory {
340348
self.fs().clone(),
341349
self.npm_cache()?.clone(),
342350
self.text_only_progress_bar(),
343-
CliNpmRegistryApi::default_url().to_owned(),
351+
self.npm_registry(),
344352
self.npm_resolution().await?.clone(),
345353
// when an explicit path is provided here, it will create the
346354
// local node_modules variant of an npm fs resolver

cli/lsp/language_server.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -966,12 +966,13 @@ impl Inner {
966966
return; // no need to do anything
967967
}
968968

969-
let registry_url = CliNpmRegistryApi::default_url();
969+
let registry_url = self.npm_registry();
970+
970971
let progress_bar = ProgressBar::new(ProgressBarStyle::TextOnly);
971972
(self.npm.api, self.npm.cache) = create_npm_api_and_cache(
972973
&deno_dir,
973974
self.http_client.clone(),
974-
registry_url,
975+
&registry_url,
975976
&progress_bar,
976977
);
977978
let maybe_snapshot = match self.maybe_lockfile() {
@@ -988,7 +989,7 @@ impl Inner {
988989
};
989990
(self.npm.resolver, self.npm.resolution) =
990991
create_npm_resolver_and_resolution(
991-
registry_url,
992+
&registry_url,
992993
progress_bar,
993994
self.npm.api.clone(),
994995
self.npm.cache.clone(),
@@ -1218,6 +1219,13 @@ impl Inner {
12181219
self.maybe_config_file_info.as_ref().map(|c| &c.config_file)
12191220
}
12201221

1222+
fn npm_registry(&self) -> Url {
1223+
self
1224+
.maybe_config_file()
1225+
.and_then(|f| f.to_npm_registry())
1226+
.unwrap_or_else(|| CliNpmRegistryApi::default_url().clone())
1227+
}
1228+
12211229
fn maybe_lockfile(&self) -> Option<&Arc<Mutex<Lockfile>>> {
12221230
self
12231231
.maybe_config_file_info

0 commit comments

Comments
 (0)