validateSpmSourcesStructure function

SpmSourcesValidation validateSpmSourcesStructure(
  1. String baseDir,
  2. String platform,
  3. String className
)

Validates the SPM Sources directory structure for a platform.

Implementation

SpmSourcesValidation validateSpmSourcesStructure(
  String baseDir,
  String platform,
  String className,
) {
  final platformDir = Directory(p.join(baseDir, platform));
  if (!platformDir.existsSync()) {
    return SpmSourcesValidation(isValid: false, issues: ['$platform/ directory not found']);
  }

  final sourcesDir = Directory(p.join(platformDir.path, 'Sources'));
  if (!sourcesDir.existsSync()) {
    return SpmSourcesValidation(isValid: false, issues: ['$platform/Sources/ directory not found']);
  }

  final swiftDir = Directory(p.join(sourcesDir.path, className));
  final cppDir = Directory(p.join(sourcesDir.path, '${className}Cpp'));

  final missingDirs = <String>[];
  final missingSymlinks = <String>[];
  final issues = <String>[];

  if (!swiftDir.existsSync()) {
    missingDirs.add('$platform/Sources/$className');
  }
  if (!cppDir.existsSync()) {
    missingDirs.add('$platform/Sources/${className}Cpp');
  }

  // Check for include directory in Cpp target
  if (cppDir.existsSync()) {
    final includeDir = Directory(p.join(cppDir.path, 'include'));
    final includeLink = Link(p.join(cppDir.path, 'include'));
    if (!includeDir.existsSync() && !includeLink.existsSync()) {
      missingSymlinks.add('$platform/Sources/${className}Cpp/include');
    }
  }

  return SpmSourcesValidation(
    isValid: missingDirs.isEmpty && issues.isEmpty,
    missingDirs: missingDirs,
    missingSymlinks: missingSymlinks,
    issues: issues,
  );
}