run method

Future<int> run()

Implementation

Future<int> run() async {
  final force = _hasFlag('--force', '-f');

  // ── nebula.config.json ────────────────────────────────────────────────
  if (await ConfigLoader.exists() && !force) {
    print('⚠️  nebula.config.json already exists. Use --force to overwrite.');
  } else {
    const config = NebulaProjectConfig(
      input:  'swagger.json',
      output: 'lib/api',
      format:           true,
      deduplicate:      true,
      inferNullability: true,
      verbose:          false,
      features: {
        'cache':   true,
        'retry':   true,
        'logging': true,
        'offline': false,
      },
    );
    await ConfigLoader.save(config);
    print('✅  Created nebula.config.json');
  }

  // ── Sample swagger stub ───────────────────────────────────────────────
  final swaggerFile = File('swagger.json');
  if (!await swaggerFile.exists() || force) {
    const encoder = JsonEncoder.withIndent('  ');
    await swaggerFile.writeAsString(encoder.convert(_sampleSpec));
    print('✅  Created swagger.json (sample OpenAPI 3.0 spec)');
  }

  // ── .gitignore hint ────────────────────────────────────────────────────
  final gitignore = File('.gitignore');
  if (await gitignore.exists()) {
    final content = await gitignore.readAsString();
    if (!content.contains('lib/api/')) {
      await gitignore.writeAsString('$content\n# Nebula generated\nlib/api/\n');
      print('✅  Added lib/api/ to .gitignore');
    }
  }

  // ── Next steps ─────────────────────────────────────────────────────────
  print('''
🌌 Nebula API Studio initialised!

Next steps:
1. Edit swagger.json (or replace with your real spec)
2. Run:  nebula generate
3. Or start watch mode:  nebula watch
4. Import the generated code:
   import 'lib/api/nebula_generated.dart';
''');

  return 0;
}