Repository: denoland/deno
Pull request: fix(outdated): error when there are no config files

This commit changes "deno outdated" subcommand to
error out if run in a directory that has no config file 
(including parent directories). This matches
"pnpm" behavior.

Also added tests for filtering that yields no results,
to ensure that it exists cleanly, that also matches "pnpm"
behavior.

Closes https://github.com/denoland/deno/issues/27287

Changed files:
filename: cli/tools/registry/pm/outdated.rs
patch: @@ -3,6 +3,7 @@
 use std::collections::HashSet;
 use std::sync::Arc;
 
+use deno_core::anyhow::bail;
 use deno_core::error::AnyError;
 use deno_semver::package::PackageNv;
 use deno_semver::package::PackageReq;
@@ -197,6 +198,15 @@ pub async fn outdated(
   let jsr_fetch_resolver =
     Arc::new(JsrFetchResolver::new(file_fetcher.clone()));
 
+  if !cli_options.start_dir.has_deno_json()
+    && !cli_options.start_dir.has_pkg_json()
+  {
+    bail!(
+      "No deno.json or package.json in \"{}\".",
+      cli_options.initial_cwd().display(),
+    );
+  }
+
   let args = dep_manager_args(
     &factory,
     cli_options,

filename: tests/specs/update/deno_json/__test__.jsonc
patch: @@ -27,6 +27,11 @@
           "args": "outdated",
           "output": "outdated.out"
         },
+        {
+          // Filtering that matches nothing, should exit cleanly
+          "args": "outdated foobar",
+          "output": ""
+        },
         {
           // Respect `--quiet flag and don't print hint how to update
           "args": "outdated --quiet",
@@ -43,6 +48,11 @@
         {
           "args": "outdated --compatible",
           "output": "outdated_compatible.out"
+        },
+        {
+          // Filtering that matches nothing, should exit cleanly
+          "args": "outdated --compatible foobar",
+          "output": ""
         }
       ]
     },

filename: tests/specs/update/mixed_workspace/__test__.jsonc
patch: @@ -26,6 +26,11 @@
         {
           "args": "outdated",
           "output": "print_outdated/root.out"
+        },
+        {
+          // Filtering that matches nothing, should exit cleanly
+          "args": "outdated foobar",
+          "output": ""
         }
       ]
     },
@@ -38,6 +43,11 @@
         {
           "args": "outdated --recursive",
           "output": "print_outdated/recursive.out"
+        },
+        {
+          // Filtering that matches nothing, should exit cleanly
+          "args": "outdated foobar",
+          "output": ""
         }
       ]
     },

filename: tests/specs/update/no_config_file/__test__.jsonc
patch: @@ -0,0 +1,6 @@
+{
+  "tempDir": true,
+  "args": "outdated",
+  "exitCode": 1,
+  "output": "error: No deno.json or package.json in \"[WILDLINE]\".\n"
+}

filename: tests/specs/update/package_json/__test__.jsonc
patch: @@ -25,6 +25,11 @@
         {
           "args": "outdated",
           "output": "outdated.out"
+        },
+        {
+          // Filtering that matches nothing, should exit cleanly
+          "args": "outdated foobar",
+          "output": ""
         }
       ]
     },
@@ -37,6 +42,11 @@
         {
           "args": "outdated --compatible",
           "output": "outdated_compatible.out"
+        },
+        {
+          // Filtering that matches nothing, should exit cleanly
+          "args": "outdated --compatible foobar",
+          "output": ""
         }
       ]
     },