runInit function

void runInit(
  1. InitOptions options
)

Entry point for river_cli init. Resolves the selected modules (via flags or interactive prompts), scaffolds their folders/files, and adds packages.

Implementation

void runInit(InitOptions options) {
  if (options.help) {
    printInitHelp();
    return;
  }
  if (options.list) {
    printModuleList();
    return;
  }

  if (!File('pubspec.yaml').existsSync()) {
    print('Error: pubspec.yaml not found. '
        'Run "river_cli init" in the root of a Flutter project.');
    exit(1);
  }

  final projectName = Utils.readPackageName();
  if (projectName != null) {
    print('Initializing project: $projectName\n');
  }

  if (options.unknownFlags.isNotEmpty) {
    print('Ignoring unknown option(s): ${options.unknownFlags.join(', ')}');
  }

  final selectedKeys = _resolveSelectedKeys(options);
  final modules = resolveModules(selectedKeys);

  final autoIncluded = modules
      .where((m) => m.key != coreModule.key && !selectedKeys.contains(m.key))
      .map((m) => m.key)
      .toList();
  if (autoIncluded.isNotEmpty) {
    print('Auto-including required dependencies: ${autoIncluded.join(', ')}');
  }

  final created = <String>[];
  final skipped = <String>[];
  final overwritten = <String>[];

  for (final module in modules) {
    for (final folder in module.folders) {
      final dir = Directory(folder);
      if (!dir.existsSync()) dir.createSync(recursive: true);
    }

    module.files.forEach((path, content) {
      final file = File(path);
      final exists = file.existsSync();
      if (exists && !options.force) {
        skipped.add(path);
        return;
      }
      file.parent.createSync(recursive: true);
      file.writeAsStringSync(_normalize(content));
      (exists ? overwritten : created).add(path);
    });
  }

  final deps = <String>{};
  final devDeps = <String>{};
  for (final module in modules) {
    deps.addAll(module.packages);
    devDeps.addAll(module.devPackages);
  }

  print('');
  Utils.addModulePackages(
    deps.toList(),
    devDeps.toList(),
    runPubGet: options.runPubGet,
  );

  _printSummary(
    modules: modules,
    created: created,
    overwritten: overwritten,
    skipped: skipped,
  );
}