run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<int> run() async {
final initialProjectName =
argResults?.rest.isNotEmpty == true ? argResults!.rest.first : null;
final initialOrg = argResults?['org'] as String?;
final configPath = argResults?['config'] as String?;
try {
ProjectConfig config;
if (configPath != null) {
final configService = YamlConfigService();
await configService.load(configPath);
// Root key is expected to be 'project'
final projectMap =
configService.getValue<Map<String, dynamic>>('project');
if (projectMap != null) {
if (initialProjectName != null) {
projectMap['name'] = initialProjectName;
}
if (initialOrg != null) {
projectMap['org'] = initialOrg;
}
config = ProjectConfig.fromYamlMap(projectMap);
logger.success('Loaded configuration from $configPath');
} else {
logger.error('Invalid config file: missing "project" root key.');
return 1;
}
} else {
final wizard = locator<ProjectWizard>();
config = await wizard.runWizard(
initialProjectName: initialProjectName,
initialOrg: initialOrg,
);
}
final generator = locator<ProjectGenerator>();
final targetPath = p.join(Directory.current.path, config.projectName);
await generator.generate(config, targetPath);
return 0;
} catch (e, stack) {
logger.error('Failed to create project.', e, stack);
return 1;
}
}