writeFiles method

ValidationResult writeFiles(
  1. List<GeneratedFile> files,
  2. AssetConfig config
)

Writes multiple files to the file system atomically.

Attempts to write all files and provides rollback capability if any operation fails to maintain consistency.

Parameters:

  • files: List of GeneratedFile instances to write
  • config: Asset configuration for path resolution

Returns a ValidationResult indicating success or failure.

Implementation

ValidationResult writeFiles(List<GeneratedFile> files, AssetConfig config) {
  final errors = <ValidationError>[];
  final warnings = <ValidationWarning>[];
  final suggestions = <String>[];
  final writtenFiles = <String>[];

  try {
    // Create directory structure first
    final dirResult = createDirectoryStructure(config);
    if (!dirResult.isValid) {
      return dirResult;
    }

    // Write each file
    for (final file in files) {
      try {
        _writeFileSafely(file);
        writtenFiles.add(file.path);
      } catch (e) {
        errors.add(ValidationError(
          message: 'Failed to write file ${file.path}: $e',
          type: ValidationErrorType.fileSystem,
        ));

        // Attempt rollback for already written files
        _rollbackFiles(writtenFiles);

        suggestions.add('Check write permissions for the target directory');
        suggestions.add('Ensure sufficient disk space is available');
        suggestions.add('Verify the file path is valid');

        return ValidationResult.failure(
          errors: errors,
          suggestions: suggestions,
        );
      }
    }

    return ValidationResult.success(
      warnings: warnings,
    );
  } catch (e) {
    errors.add(ValidationError(
      message: 'Unexpected error during file writing: $e',
      type: ValidationErrorType.fileSystem,
    ));

    return ValidationResult.failure(
      errors: errors,
      suggestions: suggestions,
    );
  }
}