exec method

  1. @override
Future<void> exec(
  1. ExecContext context
)
override

Run command.

The contents of katana.yaml and the arguments of the command are passed to context.

コマンドを実行します。

contextにkatana.yamlの内容やコマンドの引数が渡されます。

Implementation

@override
Future<void> exec(ExecContext context) async {
  final flavors = context.args.skip(2).where((e) => !e.startsWith("-"));
  final paths = <String>[];
  if (flavors.isEmpty) {
    final directory = Directory("dart_defines");
    if (directory.existsSync()) {
      paths.addAll(
        directory
            .listSync()
            .whereType<File>()
            .map((e) => e.path)
            .where((e) => e.endsWith(".env"))
            .toList()
          ..sort(),
      );
    }
    if (paths.isEmpty) {
      error("Cannot find `dart_defines/*.env`.");
      return;
    }
  } else {
    for (final flavor in flavors) {
      if (!RegExp(r"^[A-Za-z0-9_-]+$").hasMatch(flavor)) {
        error("Invalid flavor: $flavor");
        return;
      }
      final path = "dart_defines/$flavor.env";
      if (!File(path).existsSync()) {
        error("Cannot find `$path`.");
        return;
      }
      paths.add(path);
    }
  }
  for (final path in paths) {
    try {
      final output = resolveDartDefinesFile(path, alwaysWrite: true);
      stdout.writeln("$path -> $output");
    } on KatanaEnvironmentVariableException catch (e) {
      error(e.toString());
      return;
    } on KatanaDartDefinesException catch (e) {
      error(e.toString());
      return;
    }
  }
}