{"record":{"id":"b45bc1a61e4f0f52","repo":"denoland/deno","slug":"invalid-filter-input","errorCode":null,"errorMessage":"Invalid filter \"{input}\"","messagePattern":"Invalid filter \"(.+?)\"","errorType":"validation","errorClass":"AnyError","httpStatus":null,"severity":"error","filePath":"cli/tools/pm/outdated/mod.rs","lineNumber":753,"sourceCode":"        if let Some(scope_name) = s.strip_prefix('@') {\n          if let Some(idx) = scope_name.find('@') {\n            let (pattern, version_spec) = s.split_at(idx + 1);\n            (\n              pattern,\n              Some(\n                VersionReq::parse_from_specifier(\n                  version_spec.trim_start_matches('@'),\n                )\n                .with_context(|| format!(\"Invalid filter \\\"{input}\\\"\"))?,\n              ),\n            )\n          } else {\n            (s, None)\n          }\n        } else {\n          let mut parts = s.split('@');\n          let Some(pattern) = parts.next() else {\n            return Err(anyhow!(\"Invalid filter \\\"{input}\\\"\"));\n          };\n          (\n            pattern,\n            parts\n              .next()\n              .map(VersionReq::parse_from_specifier)\n              .transpose()\n              .with_context(|| format!(\"Invalid filter \\\"{input}\\\"\"))?,\n          )\n        };\n\n      Ok(Filter {\n        kind,\n        regex: pattern_to_regex(pattern)\n          .with_context(|| format!(\"Invalid filter \\\"{input}\\\"\"))?,\n        version_spec,\n      })\n    }","sourceCodeStart":735,"sourceCodeEnd":771,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/cli/tools/pm/outdated/mod.rs#L735-L771","documentation":"Thrown by `deno outdated` / `deno pm outdated` when a string passed via `--filters` cannot be parsed into a package pattern plus optional version requirement. The parser splits the filter on '@' (special-casing '@scope/name@version') and feeds the version part to `deno_semver`'s `VersionReq::parse_from_specifier`; anything that fails semver parsing, or a filter with an empty pattern, produces this error with the raw input echoed back.","triggerScenarios":"Running `deno outdated --filters \"foo=^2.0.0\"` (using '=' instead of '@'); a version segment that is not a valid semver range such as `@2.` or `@latest`; a filter like `\"@\"` where split('@') yields no pattern; a scoped filter `\"@scope/pkg@not-a-version\"`. The same message is also attached as context when the pattern fails regex compilation.","commonSituations":"Muscle memory from npm/jest CLI syntax (`pkg=^2`), copying a filter from another tool that uses commas differently, or typos in the version range. Note that `--filters` takes the version after '@', not after '=' or ':'.","solutions":["Correct the separator: use `@` between name and version, e.g. `--filters \"foo@^2.0.0\"` instead of `\"foo=^2.0.0\"`.","Remove or fix the version segment so it is a valid semver range accepted by Deno (`^1.2.3`, `~1.2`, `1.x`, `*`); bare `foo` with no version is also valid.","For scoped packages keep the full form `@scope/pkg@^1.0.0`; a leading '!' negates (`!@scope/pkg`).","Use '*' as a wildcard inside the pattern (`foo*`), never inside the version segment."],"exampleFix":"# before\ndeno outdated --filters \"foo=^2.0.0\"\n\n# after\ndeno outdated --filters \"foo@^2.0.0\"","handlingStrategy":"validation","validationCode":"const FILTER_RE = /^!?(@[\\w.-]+\\/)?[\\w.*-]+(@[^@\\s]+)?$/;\nfunction assertValidFilter(filter: string): void {\n  if (!FILTER_RE.test(filter)) {\n    throw new Error(`Invalid filter \"${filter}\"`);\n  }\n}","typeGuard":"function isValidFilter(f: string): boolean {\n  return /^!?(@[\\w.-]+\\/)?[\\w.*-]+(@[^@\\s]+)?$/.test(f);\n}","tryCatchPattern":"try {\n  await runDeno(['outdated', `--filters=${filter}`]);\n} catch (e) {\n  if (String(e.message).includes('Invalid filter')) {\n    // show the expected '<name>[@<semver-range>]' syntax to the user\n  }\n}","preventionTips":["Use '@' (not '=' or ':') between package name and version range in --filters.","Validate filter strings in tooling/scripts before shelling out to deno.","Keep version segments to plain semver ranges (^1.2.3, ~1.2, 1.x, *)."],"tags":["cli","outdated","filters","semver","argument-parsing"],"backgroundTag":"invalid-cli-argument","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}