-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathcreate_service_command.dart
More file actions
113 lines (103 loc) · 3.84 KB
/
create_service_command.dart
File metadata and controls
113 lines (103 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import 'dart:async';
import 'package:args/command_runner.dart';
import 'package:stacked_cli/src/constants/command_constants.dart';
import 'package:stacked_cli/src/constants/message_constants.dart';
import 'package:stacked_cli/src/locator.dart';
import 'package:stacked_cli/src/mixins/project_structure_validator_mixin.dart';
import 'package:stacked_cli/src/services/colorized_log_service.dart';
import 'package:stacked_cli/src/services/config_service.dart';
import 'package:stacked_cli/src/services/posthog_service.dart';
import 'package:stacked_cli/src/services/process_service.dart';
import 'package:stacked_cli/src/services/pubspec_service.dart';
import 'package:stacked_cli/src/services/template_service.dart';
import 'package:stacked_cli/src/templates/compiled_constants.dart';
import 'package:stacked_cli/src/templates/template_constants.dart';
class CreateServiceCommand extends Command with ProjectStructureValidator {
final _log = locator<ColorizedLogService>();
final _configService = locator<ConfigService>();
final _processService = locator<ProcessService>();
final _pubspecService = locator<PubspecService>();
final _templateService = locator<TemplateService>();
final _analyticsService = locator<PosthogService>();
@override
String get description =>
'Creates a service with all associated files and makes necessary code changes to include that service.';
@override
String get name => kTemplateNameService;
CreateServiceCommand() {
argParser
..addFlag(
ksExcludeDependency,
defaultsTo: false,
help: kCommandHelpExcludeRoute,
)
..addOption(
ksTemplateType,
abbr: 't',
allowed: kCompiledTemplateTypes[kTemplateNameService],
defaultsTo: 'empty',
help: kCommandHelpCreateServiceTemplate,
)
..addOption(
ksConfigPath,
abbr: 'c',
help: kCommandHelpConfigFilePath,
)
..addOption(
ksLineLength,
abbr: 'l',
help: kCommandHelpLineLength,
valueHelp: '80',
)
..addOption(
ksProjectPath,
help: kCommandHelpProjectPath,
);
}
@override
Future<void> run() async {
try {
final List<String> serviceNames = argResults!.rest;
final templateType = argResults![ksTemplateType];
await _configService.composeAndLoadConfigFile(
configFilePath: argResults![ksConfigPath],
projectPath: argResults![ksProjectPath],
);
_processService.formattingLineLength = argResults?[ksLineLength];
await _pubspecService.initialise(
workingDirectory: argResults![ksProjectPath]);
await validateStructure(outputPath: argResults![ksProjectPath]);
for (var i = 0; i < serviceNames.length; i++) {
// Parse the service name to support subdirectories
final servicePath = serviceNames[i];
final pathParts = servicePath.split('/');
final serviceName = pathParts.last;
final subfolders = pathParts.length > 1
? pathParts.sublist(0, pathParts.length - 1).join('/')
: null;
await _templateService.renderTemplate(
templateName: name,
name: serviceName,
subfolder: subfolders,
outputPath: argResults![ksProjectPath],
verbose: true,
excludeRoute: argResults![ksExcludeDependency],
templateType: templateType,
);
await _analyticsService.createServiceEvent(
name: servicePath,
arguments: argResults!.arguments,
);
}
await _processService.runBuildRunner(
workingDirectory: argResults![ksProjectPath]);
} catch (e, s) {
_log.error(message: e.toString());
unawaited(_analyticsService.logExceptionEvent(
runtimeType: e.runtimeType.toString(),
message: e.toString(),
stackTrace: s.toString(),
));
}
}
}