From f1a691274e59d3f6a1aad19d1aec02a0ffaa51d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 27 Feb 2024 08:27:21 +0000 Subject: [PATCH] feat(publish): discover jsr.json and jsr.jsonc files (#22587) Closes https://github.com/denoland/deno/issues/22491 --- Cargo.lock | 4 ++-- cli/Cargo.toml | 2 +- cli/args/mod.rs | 7 +++++++ cli/lsp/language_server.rs | 3 ++- cli/tools/registry/mod.rs | 2 +- tests/integration/publish_tests.rs | 8 ++++++++ tests/testdata/publish/jsr_jsonc/jsr.jsonc | 11 +++++++++++ tests/testdata/publish/jsr_jsonc/mod.out | 6 ++++++ tests/testdata/publish/jsr_jsonc/mod.ts | 7 +++++++ tests/testdata/publish/jsr_jsonc/std_http.ts | 6 ++++++ tests/testdata/publish/missing_deno_json.out | 2 +- 11 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 tests/testdata/publish/jsr_jsonc/jsr.jsonc create mode 100644 tests/testdata/publish/jsr_jsonc/mod.out create mode 100644 tests/testdata/publish/jsr_jsonc/mod.ts create mode 100644 tests/testdata/publish/jsr_jsonc/std_http.ts diff --git a/Cargo.lock b/Cargo.lock index 21483e927f..cf4cf50389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1229,9 +1229,9 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc52f2cedd7f47b50fb67191f9cb1c5633b47017fb7da5b586278763110879e5" +checksum = "ebbc05e20df2d5b8562205f9b0c296bc528e833b0de126d489781952e13d939f" dependencies = [ "anyhow", "glob", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 1097d8d981..0d71eae1e9 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -64,7 +64,7 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = { workspace = true } -deno_config = "=0.11.0" +deno_config = "=0.12.0" deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_doc = { version = "=0.113.1", features = ["html"] } deno_emit = "=0.38.2" diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 9aa819a300..8103f489eb 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -759,10 +759,17 @@ impl CliOptions { pub fn from_flags(flags: Flags) -> Result { let initial_cwd = std::env::current_dir().with_context(|| "Failed getting cwd.")?; + let additional_config_file_names = + if matches!(flags.subcommand, DenoSubcommand::Publish(..)) { + Some(vec!["jsr.json", "jsr.jsonc"]) + } else { + None + }; let maybe_config_file = ConfigFile::discover( &flags.config_flag, flags.config_path_args(&initial_cwd), &initial_cwd, + additional_config_file_names, )?; let mut maybe_package_json = None; diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 185cde6f9b..45d1eed8a6 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -654,7 +654,8 @@ impl Inner { if let Some(root_uri) = self.config.root_uri() { let root_path = specifier_to_file_path(root_uri)?; let mut checked = std::collections::HashSet::new(); - let maybe_config = ConfigFile::discover_from(&root_path, &mut checked)?; + let maybe_config = + ConfigFile::discover_from(&root_path, &mut checked, None)?; Ok(maybe_config.map(|c| { lsp_log!(" Auto-resolved configuration file: \"{}\"", c.specifier); c diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs index ab02bc8d5e..52d303ae1d 100644 --- a/cli/tools/registry/mod.rs +++ b/cli/tools/registry/mod.rs @@ -817,7 +817,7 @@ pub async fn publish( let cli_options = cli_factory.cli_options(); let Some(config_file) = cli_options.maybe_config_file() else { bail!( - "Couldn't find a deno.json or a deno.jsonc configuration file in {}.", + "Couldn't find a deno.json, deno.jsonc, jsr.json or jsr.jsonc configuration file in {}.", directory_path.display() ); }; diff --git a/tests/integration/publish_tests.rs b/tests/integration/publish_tests.rs index e1626ae8db..d2ea279065 100644 --- a/tests/integration/publish_tests.rs +++ b/tests/integration/publish_tests.rs @@ -224,6 +224,14 @@ itest!(config_flag { http_server: true, }); +itest!(jsr_jsonc { + args: "publish --token 'sadfasdf'", + cwd: Some("publish/jsr_jsonc"), + output: "publish/jsr_jsonc/mod.out", + envs: env_vars_for_jsr_tests(), + http_server: true, +}); + #[test] fn ignores_gitignore() { let context = publish_context_builder().build(); diff --git a/tests/testdata/publish/jsr_jsonc/jsr.jsonc b/tests/testdata/publish/jsr_jsonc/jsr.jsonc new file mode 100644 index 0000000000..4c9dfb08cc --- /dev/null +++ b/tests/testdata/publish/jsr_jsonc/jsr.jsonc @@ -0,0 +1,11 @@ +{ + // It's .jsonc file so it can have comments + "name": "@foo/bar", + "version": "1.0.0", + "exports": { + ".": "./mod.ts" + }, + "imports": { + "@std/http": "./std_http.ts" + } +} diff --git a/tests/testdata/publish/jsr_jsonc/mod.out b/tests/testdata/publish/jsr_jsonc/mod.out new file mode 100644 index 0000000000..38b61d568a --- /dev/null +++ b/tests/testdata/publish/jsr_jsonc/mod.out @@ -0,0 +1,6 @@ +Check file:///[WILDCARD]/publish/jsr_jsonc/mod.ts +Checking for slow types in the public API... +Check file:///[WILDCARD]/publish/jsr_jsonc/mod.ts +Publishing @foo/bar@1.0.0 ... +Successfully published @foo/bar@1.0.0 +Visit http://127.0.0.1:4250/@foo/bar@1.0.0 for details diff --git a/tests/testdata/publish/jsr_jsonc/mod.ts b/tests/testdata/publish/jsr_jsonc/mod.ts new file mode 100644 index 0000000000..6e8a61bae9 --- /dev/null +++ b/tests/testdata/publish/jsr_jsonc/mod.ts @@ -0,0 +1,7 @@ +import http from "@std/http"; + +export function foobar(): { fileServer(): void } { + return { + fileServer: http.fileServer, + }; +} diff --git a/tests/testdata/publish/jsr_jsonc/std_http.ts b/tests/testdata/publish/jsr_jsonc/std_http.ts new file mode 100644 index 0000000000..9d57b36f34 --- /dev/null +++ b/tests/testdata/publish/jsr_jsonc/std_http.ts @@ -0,0 +1,6 @@ +// temp until we get jsr:@std/http in the test server +export default { + fileServer() { + console.log("Hi"); + }, +}; diff --git a/tests/testdata/publish/missing_deno_json.out b/tests/testdata/publish/missing_deno_json.out index adb472c715..2c074bf833 100644 --- a/tests/testdata/publish/missing_deno_json.out +++ b/tests/testdata/publish/missing_deno_json.out @@ -1 +1 @@ -error: Couldn't find a deno.json or a deno.jsonc configuration file in [WILDCARD] \ No newline at end of file +error: Couldn't find a deno.json, deno.jsonc, jsr.json or jsr.jsonc configuration file in [WILDCARD] \ No newline at end of file