sortPubspec function

String sortPubspec(
  1. String content
)

Sorts pubspec.yaml content according to standard key order. Preserves comments (inline and standalone). Sorts package names alphabetically within dependency sections ONLY. Other nested maps (flutter, executables, etc.) are preserved as-is.

Implementation

String sortPubspec(String content) {
  if (content.trim().isEmpty) {
    return content;
  }

  // Parse original YAML to get structure and values
  final yaml = loadYaml(content);
  if (yaml is! YamlMap || yaml.isEmpty) {
    return content;
  }

  final originalValues = <String, dynamic>{};
  for (final MapEntry(:key, :value) in yaml.entries) {
    originalValues[key as String] = value;
  }

  // Extract key entries from raw string
  final entries = _extractKeyEntries(content);
  if (entries.isEmpty) {
    return content;
  }

  // Sort entries according to key order
  final sortedEntries = _sortEntries(entries);

  // Collect packages with complex values (to skip in placeholder filling)
  final complexValuePackages = <(String, String)>{};
  for (final entry in sortedEntries) {
    if (_dependencySections.contains(entry.keyName)) {
      for (final nested in entry.nestedEntries) {
        if (nested.hasComplexValue) {
          complexValuePackages.add((entry.keyName, nested.keyName));
        }
      }
    }
  }

  // Build placeholder skeleton
  final skeleton = _buildPlaceholderSkeleton(sortedEntries);

  // Fill placeholders with yaml_edit
  return _fillPlaceholders(skeleton, originalValues, complexValuePackages);
}