run method

  1. @override
void run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
void run() async {
  final clearOldFiles = argResults?['clear-files'] as bool;
  isAllFlavor = argResults?['all-flavor'] as bool;

  if (argResults?.rest.firstOrNull == 'init') {
    init();
    return;
  }

  final argMorphemeYaml = argResults.getOptionMorphemeYaml();
  YamlHelper.validateMorphemeYaml(argMorphemeYaml);
  final morphemeYaml = YamlHelper.loadFileYaml(argMorphemeYaml);

  if (morphemeYaml['color2dart'] == null) {
    StatusHelper.failed('color2dart not found in $argMorphemeYaml');
  }

  final morphemeColor2dart = morphemeYaml['color2dart'] as Map;
  final color2dartDir = morphemeColor2dart['color2dart_dir']?.toString();
  final outputDir = morphemeColor2dart['output_dir']?.toString();

  if (outputDir != null) {
    pathColors = join(outputDir, 'morpheme_colors');
    pathThemes = join(outputDir, 'morpheme_themes');
  }

  if (clearOldFiles) deleteFiles();

  final argFlavor = argResults.getOptionFlavor(defaultTo: '');

  String pathColorYaml = color2dartDir != null
      ? join(current, color2dartDir, 'color2dart.yaml')
      : join(current, 'color2dart', 'color2dart.yaml');
  if (argFlavor.isNotEmpty) {
    pathColorYaml = color2dartDir != null
        ? join(current, color2dartDir, argFlavor, 'color2dart.yaml')
        : join(current, 'color2dart', argFlavor, 'color2dart.yaml');
  }

  List<String> allFlavorPath = isAllFlavor
      ? find(
          'color2dart.yaml',
          recursive: true,
          types: [Find.file],
          workingDirectory: color2dartDir ?? join(current),
        ).toList()
      : [pathColorYaml];

  final colorYaml = YamlHelper.loadFileYaml(allFlavorPath.first);
  generateBase(colorYaml.entries.firstOrNull);

  for (var path in allFlavorPath) {
    final flavor = path
        .replaceAll('${separator}color2dart.yaml', '')
        .split(separator)
        .last;

    final colorYaml = YamlHelper.loadFileYaml(path);

    colorYaml.forEach((theme, value) {
      generateTheme(theme, value, flavor);
      generateColors(theme, value, flavor);
    });
  }

  generateLibrary(colorYaml);

  await ModularHelper.format([pathColors, pathThemes]);

  StatusHelper.success('morpheme color2dart');
}