From 348f22daa2213a89d561041d7e2f92fee93d7a83 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Mon, 28 Sep 2026 16:58:15 +0200 Subject: [PATCH] Remove hidden commands from JSON output exceptions --- .../rules/command-json-output.js | 1 + .../rules/command-json-output.test.js | 18 ++++++++++++++++++ .../rules/json-output-command-exceptions.js | 18 ------------------ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/eslint-plugin-cli/rules/command-json-output.js b/packages/eslint-plugin-cli/rules/command-json-output.js index 175c5d1a046..a6493344283 100644 --- a/packages/eslint-plugin-cli/rules/command-json-output.js +++ b/packages/eslint-plugin-cli/rules/command-json-output.js @@ -36,6 +36,7 @@ module.exports = { if (node.declaration.type !== 'ClassDeclaration') return const classMembers = node.declaration.body.body + if (classMembers.some((member) => isStaticMemberNamed(member, 'hidden') && member.value?.value === true)) return if (!hasJsonOutputSchema(classMembers)) { context.report({node: node.declaration, messageId: 'missingJsonOutputSchema'}) diff --git a/packages/eslint-plugin-cli/rules/command-json-output.test.js b/packages/eslint-plugin-cli/rules/command-json-output.test.js index fa92f248e49..5eaa3d46144 100644 --- a/packages/eslint-plugin-cli/rules/command-json-output.test.js +++ b/packages/eslint-plugin-cli/rules/command-json-output.test.js @@ -13,6 +13,12 @@ const ruleTester = new RuleTester({ ruleTester.run('command-json-output', rule, { valid: [ + { + name: 'hidden command without JSON support', + filename: '/repo/packages/app/src/cli/commands/app/widgets/hidden.ts', + options: [{exceptions: []}], + code: 'export default class Hidden extends Command { static hidden = true }', + }, { name: 'finite query command', filename: '/repo/packages/app/src/cli/commands/app/widgets/list.ts', @@ -72,6 +78,18 @@ ruleTester.run('command-json-output', rule, { }, ], invalid: [ + { + name: 'explicitly visible command without JSON support', + filename: '/repo/packages/app/src/cli/commands/app/widgets/visible.ts', + code: 'export default class Visible extends Command { static hidden = false }', + errors: [{messageId: 'missingJsonOutputSchema'}, {messageId: 'missingJsonFlag'}], + }, + { + name: 'instance hidden property does not hide a command', + filename: '/repo/packages/app/src/cli/commands/app/widgets/visible.ts', + code: 'export default class Visible extends Command { hidden = true }', + errors: [{messageId: 'missingJsonOutputSchema'}, {messageId: 'missingJsonFlag'}], + }, { name: 'custom exceptions do not exempt new subcommands', filename: '/hydrogen/packages/cli/src/commands/hydrogen/dev/status.ts', diff --git a/packages/eslint-plugin-cli/rules/json-output-command-exceptions.js b/packages/eslint-plugin-cli/rules/json-output-command-exceptions.js index 935a2f7c923..a74387bce8f 100644 --- a/packages/eslint-plugin-cli/rules/json-output-command-exceptions.js +++ b/packages/eslint-plugin-cli/rules/json-output-command-exceptions.js @@ -12,9 +12,6 @@ const commandExceptions = [ 'packages/app/src/cli/commands/app/config/validate.ts', 'packages/app/src/cli/commands/app/deploy.ts', 'packages/app/src/cli/commands/app/dev/clean.ts', - 'packages/app/src/cli/commands/app/security/check.ts', - 'packages/app/src/cli/commands/app/security/instructions.ts', - 'packages/app/src/cli/commands/app/security/submit.ts', 'packages/app/src/cli/commands/app/env/pull.ts', 'packages/app/src/cli/commands/app/env/show.ts', 'packages/app/src/cli/commands/app/execute.ts', @@ -25,8 +22,6 @@ const commandExceptions = [ 'packages/app/src/cli/commands/app/function/schema.ts', 'packages/app/src/cli/commands/app/function/typegen.ts', 'packages/app/src/cli/commands/app/generate/extension.ts', - 'packages/app/src/cli/commands/app/import-custom-data-definitions.ts', - 'packages/app/src/cli/commands/app/import-extensions.ts', 'packages/app/src/cli/commands/app/import/custom-data-definitions.ts', 'packages/app/src/cli/commands/app/import/dashboard-extensions.ts', 'packages/app/src/cli/commands/app/init.ts', @@ -39,23 +34,11 @@ const commandExceptions = [ 'packages/app/src/cli/commands/app/webhook/trigger.ts', 'packages/cli/src/cli/commands/auth/login.ts', 'packages/cli/src/cli/commands/auth/logout.ts', - 'packages/cli/src/cli/commands/cache/clear.ts', 'packages/cli/src/cli/commands/config/autoupgrade/off.ts', 'packages/cli/src/cli/commands/config/autoupgrade/on.ts', 'packages/cli/src/cli/commands/config/autoupgrade/status.ts', - 'packages/cli/src/cli/commands/debug/command-flags.ts', 'packages/cli/src/cli/commands/doc/fetch.ts', 'packages/cli/src/cli/commands/doc/search.ts', - 'packages/cli/src/cli/commands/docs/generate.ts', - 'packages/cli/src/cli/commands/doctor-release/doctor-release.ts', - 'packages/cli/src/cli/commands/doctor-release/theme/index.ts', - 'packages/cli/src/cli/commands/kitchen-sink/async.ts', - 'packages/cli/src/cli/commands/kitchen-sink/index.ts', - 'packages/cli/src/cli/commands/kitchen-sink/prompts.ts', - 'packages/cli/src/cli/commands/kitchen-sink/static.ts', - 'packages/cli/src/cli/commands/notifications/generate.ts', - 'packages/cli/src/cli/commands/notifications/list.ts', - 'packages/cli/src/cli/commands/send-analytics.ts', 'packages/cli/src/cli/commands/upgrade.ts', 'packages/plugin-did-you-mean/src/commands/config/autocorrect/off.ts', 'packages/plugin-did-you-mean/src/commands/config/autocorrect/on.ts', @@ -78,7 +61,6 @@ const commandExceptions = [ 'packages/theme/src/cli/commands/theme/share.ts', // Streaming commands without a single finite result. - 'packages/app/src/cli/commands/app/demo/watcher.ts', 'packages/app/src/cli/commands/app/dev.ts', 'packages/app/src/cli/commands/app/graphiql.ts', 'packages/app/src/cli/commands/app/logs.ts',