summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-10-15 09:38:42 -0700
committerGitHub <noreply@github.com>2024-10-15 16:38:42 +0000
commit797405fc61b2d155941506fb53d498076e121017 (patch)
treed53cc3a2375ee64770ab0904804b0ecf512be0b1
parent533a9b108677f1560fe55882771a0be2bb0b0fd2 (diff)
fix(add): create deno.json when running `deno add jsr:<pkg>` (#26275)
Fixes https://github.com/denoland/deno/issues/26119. Originally I wanted to put them in package.json if there's no deno.json, but on second thought it makes more sense to just create a deno.json
-rw-r--r--cli/tools/registry/pm.rs13
-rw-r--r--tests/specs/add/jsr_prefers_deno_json/__test__.jsonc16
-rw-r--r--tests/specs/add/jsr_prefers_deno_json/add.out3
-rw-r--r--tests/specs/add/jsr_prefers_deno_json/deno.json.out5
-rw-r--r--tests/specs/add/jsr_prefers_deno_json/package.json1
5 files changed, 34 insertions, 4 deletions
diff --git a/cli/tools/registry/pm.rs b/cli/tools/registry/pm.rs
index 3276acfbf..ff900d113 100644
--- a/cli/tools/registry/pm.rs
+++ b/cli/tools/registry/pm.rs
@@ -400,14 +400,17 @@ impl std::fmt::Display for AddCommandName {
fn load_configs(
flags: &Arc<Flags>,
+ has_jsr_specifiers: impl FnOnce() -> bool,
) -> Result<(CliFactory, Option<NpmConfig>, Option<DenoConfig>), AnyError> {
let cli_factory = CliFactory::from_flags(flags.clone());
let options = cli_factory.cli_options()?;
let npm_config = NpmConfig::from_options(options)?;
let (cli_factory, deno_config) = match DenoConfig::from_options(options)? {
Some(config) => (cli_factory, Some(config)),
- None if npm_config.is_some() => (cli_factory, None),
- None => {
+ None if npm_config.is_some() && !has_jsr_specifiers() => {
+ (cli_factory, None)
+ }
+ _ => {
let factory = create_deno_json(flags, options)?;
let options = factory.cli_options()?.clone();
(
@@ -427,7 +430,9 @@ pub async fn add(
add_flags: AddFlags,
cmd_name: AddCommandName,
) -> Result<(), AnyError> {
- let (cli_factory, npm_config, deno_config) = load_configs(&flags)?;
+ let (cli_factory, npm_config, deno_config) = load_configs(&flags, || {
+ add_flags.packages.iter().any(|s| s.starts_with("jsr:"))
+ })?;
let mut npm_config = ConfigUpdater::maybe_new(npm_config).await?;
let mut deno_config = ConfigUpdater::maybe_new(deno_config).await?;
@@ -764,7 +769,7 @@ pub async fn remove(
flags: Arc<Flags>,
remove_flags: RemoveFlags,
) -> Result<(), AnyError> {
- let (_, npm_config, deno_config) = load_configs(&flags)?;
+ let (_, npm_config, deno_config) = load_configs(&flags, || false)?;
let mut configs = [
ConfigUpdater::maybe_new(npm_config).await?,
diff --git a/tests/specs/add/jsr_prefers_deno_json/__test__.jsonc b/tests/specs/add/jsr_prefers_deno_json/__test__.jsonc
new file mode 100644
index 000000000..ca9c4b4d9
--- /dev/null
+++ b/tests/specs/add/jsr_prefers_deno_json/__test__.jsonc
@@ -0,0 +1,16 @@
+{
+ "tempDir": true,
+ "steps": [
+ {
+ "args": "add jsr:@denotest/add",
+ "output": "add.out"
+ },
+ {
+ "args": [
+ "eval",
+ "console.log(Deno.readTextFileSync('./deno.json').trim())"
+ ],
+ "output": "deno.json.out"
+ }
+ ]
+}
diff --git a/tests/specs/add/jsr_prefers_deno_json/add.out b/tests/specs/add/jsr_prefers_deno_json/add.out
new file mode 100644
index 000000000..cb8140c6d
--- /dev/null
+++ b/tests/specs/add/jsr_prefers_deno_json/add.out
@@ -0,0 +1,3 @@
+Created deno.json configuration file.
+Add jsr:@denotest/add@1.0.0
+Download [WILDCARD]
diff --git a/tests/specs/add/jsr_prefers_deno_json/deno.json.out b/tests/specs/add/jsr_prefers_deno_json/deno.json.out
new file mode 100644
index 000000000..38ca2d4b8
--- /dev/null
+++ b/tests/specs/add/jsr_prefers_deno_json/deno.json.out
@@ -0,0 +1,5 @@
+{
+ "imports": {
+ "@denotest/add": "jsr:@denotest/add@^1.0.0"
+ }
+}
diff --git a/tests/specs/add/jsr_prefers_deno_json/package.json b/tests/specs/add/jsr_prefers_deno_json/package.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/tests/specs/add/jsr_prefers_deno_json/package.json
@@ -0,0 +1 @@
+{}