detectProjectConfig function

Future<ProjectConfig?> detectProjectConfig()

Detect project context and determine output configuration Returns null if not a valid consumer project

Implementation

Future<ProjectConfig?> detectProjectConfig() async {
  final currentDir = Directory.current.path;

  // Check if we're in a Flutter project (has pubspec.yaml)
  final pubspecFile = File('$currentDir/pubspec.yaml');
  if (await pubspecFile.exists()) {
    final pubspecContent = await pubspecFile.readAsString();
    final pubspec = loadYaml(pubspecContent) as Map;

    // Check if we're running from within the library itself - reject this case
    final libDir = Directory('$currentDir/lib');
    if (await libDir.exists()) {
      final mainFile = File('$currentDir/lib/flutter_environment_config.dart');
      if (await mainFile.exists()) {
        // We're in the library project - don't generate here
        return null;
      }
    }

    // Check if this project uses flutter_environment_config
    final dependencies = pubspec['dependencies'] as Map?;
    final devDependencies = pubspec['dev_dependencies'] as Map?;

    final usesThisLibrary =
        dependencies?.containsKey('flutter_environment_config') == true ||
            devDependencies?.containsKey('flutter_environment_config') == true;

    if (usesThisLibrary) {
      // This is a consumer project
      final outputDir = _getOutputDirFromPubspec(pubspec);
      return ProjectConfig(
        workingDir: currentDir,
        outputPath: '$currentDir/$outputDir/flutter_environment_config.g.dart',
      );
    }

    // If root project doesn't have flutter_environment_config, search in packages
    final configFromPackages = await _findConfigInPackages(currentDir);
    if (configFromPackages != null) {
      return configFromPackages;
    }
  }

  // Not a valid consumer project
  return null;
}