From a05fd629c82183cd87b01922d4d5bd7177d0e90a Mon Sep 17 00:00:00 2001 From: DCodeProg Date: Tue, 18 Nov 2025 10:02:12 +0100 Subject: [PATCH 1/3] feat: add SubCommandDeclaration interface --- lib/src/api/common/commands/sub_command_declaration.dart | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 lib/src/api/common/commands/sub_command_declaration.dart diff --git a/lib/src/api/common/commands/sub_command_declaration.dart b/lib/src/api/common/commands/sub_command_declaration.dart new file mode 100644 index 00000000..8d3f1e7a --- /dev/null +++ b/lib/src/api/common/commands/sub_command_declaration.dart @@ -0,0 +1,6 @@ +import 'package:mineral/src/api/common/commands/builder/sub_command_builder.dart'; +import 'package:mineral/src/domains/common/utils/listenable.dart'; + +abstract interface class SubCommandDeclaration implements Listenable { + SubCommandBuilder build(); +} From e249c5bbbd1e7d575e33d593a03f3357f93e1c4d Mon Sep 17 00:00:00 2001 From: DCodeProg Date: Tue, 18 Nov 2025 10:02:24 +0100 Subject: [PATCH 2/3] feat: add registerSubCommand method to CommandDeclarationBuilder --- .../builder/command_declaration_builder.dart | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/src/api/common/commands/builder/command_declaration_builder.dart b/lib/src/api/common/commands/builder/command_declaration_builder.dart index 3dd739b4..b34e463e 100644 --- a/lib/src/api/common/commands/builder/command_declaration_builder.dart +++ b/lib/src/api/common/commands/builder/command_declaration_builder.dart @@ -5,6 +5,7 @@ import 'package:mineral/src/api/common/commands/command_context_type.dart'; import 'package:mineral/src/api/common/commands/command_helper.dart'; import 'package:mineral/src/api/common/commands/command_option.dart'; import 'package:mineral/src/api/common/commands/command_type.dart'; +import 'package:mineral/src/api/common/commands/sub_command_declaration.dart'; import 'package:mineral/src/domains/commands/command_builder.dart'; import 'package:mineral/src/infrastructure/io/exceptions/missing_method_exception.dart'; import 'package:mineral/src/infrastructure/io/exceptions/missing_property_exception.dart'; @@ -71,6 +72,18 @@ final class CommandDeclarationBuilder implements CommandBuilder { return this; } + CommandDeclarationBuilder registerSubCommand(Function subCommandFactory) { + final instance = subCommandFactory(); + + if (instance is! SubCommandDeclaration) { + throw Exception('Factory must return a SubCommandDeclaration instance'); + } + + final builder = instance.build(); + subCommands.add(builder); + return this; + } + CommandDeclarationBuilder createGroup(Function(CommandGroupBuilder) group) { final builder = CommandGroupBuilder(); group(builder); From 23c2fb90f49f47ff6ca420d5ddf4848408f7c241 Mon Sep 17 00:00:00 2001 From: DCodeProg Date: Tue, 18 Nov 2025 10:02:34 +0100 Subject: [PATCH 3/3] feat: add export for SubCommandDeclaration in api.dart --- lib/api.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/api.dart b/lib/api.dart index 436357bf..0be04b53 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -27,6 +27,7 @@ export 'package:mineral/src/api/common/commands/command_helper.dart'; export 'package:mineral/src/api/common/commands/command_option.dart'; export 'package:mineral/src/api/common/commands/command_option_type.dart'; export 'package:mineral/src/api/common/commands/command_type.dart'; +export 'package:mineral/src/api/common/commands/sub_command_declaration.dart'; export 'package:mineral/src/api/common/components/action_row.dart'; export 'package:mineral/src/api/common/components/attached_file.dart'; // Commons