From 797405fc61b2d155941506fb53d498076e121017 Mon Sep 17 00:00:00 2001 From: Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:38:42 -0700 Subject: fix(add): create deno.json when running `deno add jsr:` (#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 --- cli/tools/registry/pm.rs | 13 +++++++++---- tests/specs/add/jsr_prefers_deno_json/__test__.jsonc | 16 ++++++++++++++++ tests/specs/add/jsr_prefers_deno_json/add.out | 3 +++ tests/specs/add/jsr_prefers_deno_json/deno.json.out | 5 +++++ tests/specs/add/jsr_prefers_deno_json/package.json | 1 + 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 tests/specs/add/jsr_prefers_deno_json/__test__.jsonc create mode 100644 tests/specs/add/jsr_prefers_deno_json/add.out create mode 100644 tests/specs/add/jsr_prefers_deno_json/deno.json.out create mode 100644 tests/specs/add/jsr_prefers_deno_json/package.json 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, + has_jsr_specifiers: impl FnOnce() -> bool, ) -> Result<(CliFactory, Option, Option), 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, 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 @@ +{} -- cgit v1.2.3