diff --git a/lib/src/commands/create/commands/commands.dart b/lib/src/commands/create/commands/commands.dart index b59085112..966230a00 100644 --- a/lib/src/commands/create/commands/commands.dart +++ b/lib/src/commands/create/commands/commands.dart @@ -1,2 +1,3 @@ +export 'dart_package.dart'; export 'flutter_app.dart'; export 'legacy.dart'; diff --git a/lib/src/commands/create/commands/dart_package.dart b/lib/src/commands/create/commands/dart_package.dart new file mode 100644 index 000000000..e46a25cea --- /dev/null +++ b/lib/src/commands/create/commands/dart_package.dart @@ -0,0 +1,35 @@ +import 'package:mason_logger/mason_logger.dart'; +import 'package:usage/usage.dart'; +import 'package:very_good_cli/src/commands/create/create_subcommand.dart'; +import 'package:very_good_cli/src/commands/create/templates/templates.dart'; + +/// {@template very_good_create_dart_package_command} +/// A [CreateSubCommand] for creating Dart packages. +/// {@endtemplate} +class CreateDartPackage extends CreateSubCommand with Publishable { + /// {@macro very_good_create_dart_package_command} + CreateDartPackage({ + required Analytics analytics, + required Logger logger, + required MasonGeneratorFromBundle? generatorFromBundle, + required MasonGeneratorFromBrick? generatorFromBrick, + }) : super( + analytics: analytics, + logger: logger, + generatorFromBundle: generatorFromBundle, + generatorFromBrick: generatorFromBrick, + ); + + @override + String get name => 'dart_package'; + + @override + List get aliases => ['dart_pkg']; + + @override + String get description => + 'Creates a new very good Dart package in the specified directory.'; + + @override + Template get template => DartPkgTemplate(); +} diff --git a/lib/src/commands/create/create.dart b/lib/src/commands/create/create.dart index f2eeb9fd6..cd1e997f2 100644 --- a/lib/src/commands/create/create.dart +++ b/lib/src/commands/create/create.dart @@ -39,6 +39,16 @@ class CreateCommand extends Command { generatorFromBrick: generatorFromBrick, ), ); + + // very_good create dart_pkg + addSubcommand( + CreateDartPackage( + analytics: analytics, + logger: logger, + generatorFromBundle: generatorFromBundle, + generatorFromBrick: generatorFromBrick, + ), + ); } @override diff --git a/lib/src/commands/create/create_subcommand.dart b/lib/src/commands/create/create_subcommand.dart index af6ea3f26..c20bf1682 100644 --- a/lib/src/commands/create/create_subcommand.dart +++ b/lib/src/commands/create/create_subcommand.dart @@ -97,6 +97,14 @@ abstract class CreateSubCommand extends Command { aliases: ['org'], ); } + + if (this is Publishable) { + argParser.addFlag( + 'publishable', + negatable: false, + help: 'Whether the generated project is intended to be published.', + ); + } } final Analytics _analytics; @@ -236,6 +244,7 @@ abstract class CreateSubCommand extends Command { 'project_name': projectName, 'description': projectDescription, if (this is OrgName) 'org_name': (this as OrgName).orgName, + if (this is Publishable) 'publishable': (this as Publishable).publishable, }; } } @@ -298,3 +307,13 @@ mixin MultiTemplates on CreateSubCommand { ); } } + +/// Mixin for [CreateSubCommand] subclasses that receives the publishable +/// flag. +/// +/// Takes care of parsing it from [argResults] and pass it +/// to the brick generator. +mixin Publishable on CreateSubCommand { + /// Gets the publishable flag. + bool get publishable => argResults['publishable'] as bool? ?? false; +}