|
| 1 | +import '/metro/ny_cli.dart'; |
| 2 | +import '/metro/stubs/deep_link_provider_stub.dart'; |
| 3 | +import 'package:recase/recase.dart'; |
| 4 | + |
| 5 | +/// Entry point for the make:deep_link_provider command. |
| 6 | +Future<void> main(List<String> arguments) async => |
| 7 | + await _MakeDeepLinkProviderCommand(arguments).run(); |
| 8 | + |
| 9 | +/// Make Deep Link Provider Command |
| 10 | +/// |
| 11 | +/// Usage: |
| 12 | +/// [From Terminal] metro make:deep_link_provider |
| 13 | +/// [From Terminal] metro make:deep_link_provider my_deep_link |
| 14 | +class _MakeDeepLinkProviderCommand extends NyCustomCommand { |
| 15 | + _MakeDeepLinkProviderCommand(super.arguments); |
| 16 | + |
| 17 | + @override |
| 18 | + CommandBuilder builder(CommandBuilder command) { |
| 19 | + command.addFlag("help", abbr: "h", help: "e.g. make:deep_link_provider"); |
| 20 | + command.addFlag( |
| 21 | + "force", |
| 22 | + abbr: "f", |
| 23 | + help: "Creates a new deep link provider even if it already exists.", |
| 24 | + ); |
| 25 | + |
| 26 | + return command; |
| 27 | + } |
| 28 | + |
| 29 | + @override |
| 30 | + Future<void> handle(CommandResult result) async { |
| 31 | + // Default to "deep_link" so `metro make:deep_link_provider` with no args |
| 32 | + // produces lib/app/providers/deep_link_provider.dart -> DeepLinkProvider. |
| 33 | + final String providerName = result.rest.isNotEmpty |
| 34 | + ? result.rest.first |
| 35 | + : 'deep_link'; |
| 36 | + |
| 37 | + MetroProjectFile projectFile = MetroService.createMetroProjectFile( |
| 38 | + providerName, |
| 39 | + prefix: RegExp(r'(_?provider)'), |
| 40 | + ); |
| 41 | + |
| 42 | + String cleanProviderName = projectFile.name.snakeCase.replaceAll( |
| 43 | + RegExp(r'(_?provider)'), |
| 44 | + "", |
| 45 | + ); |
| 46 | + |
| 47 | + ReCase classReCase = ReCase(cleanProviderName); |
| 48 | + |
| 49 | + String stub = deepLinkProviderStub(classReCase); |
| 50 | + await MetroService.makeProvider( |
| 51 | + classReCase.snakeCase, |
| 52 | + stub, |
| 53 | + forceCreate: result.hasForceFlag, |
| 54 | + addToConfig: true, |
| 55 | + creationPath: projectFile.creationPath, |
| 56 | + ); |
| 57 | + } |
| 58 | +} |
0 commit comments