parse static method

Pubspec parse(
  1. String content
)

Implementation

static Pubspec parse(String content) {
  final parsed = loadYaml(content);
  final yaml = parsed is Map ? parsed : null;
  if (yaml == null) {
    throw const FormatException('pubspec.yaml is empty or not a map');
  }

  final name = (yaml['name'] as String?) ?? '';
  final version = yaml['version'] as String?;
  final description = yaml['description'] as String?;

  final deps = <String, String>{};
  final rawDeps = yaml['dependencies'] as Map? ?? {};
  for (final entry in rawDeps.entries) {
    final key = entry.key.toString();
    final value = entry.value;
    if (value is String) {
      deps[key] = value;
    } else if (value is YamlMap) {
      deps[key] = 'any';
    } else {
      deps[key] = value.toString();
    }
  }

  final devDeps = <String, String>{};
  final rawDevDeps = yaml['dev_dependencies'] as Map? ?? {};
  for (final entry in rawDevDeps.entries) {
    final key = entry.key.toString();
    final value = entry.value;
    if (value is String) {
      devDeps[key] = value;
    } else if (value is YamlMap) {
      devDeps[key] = 'any';
    } else {
      devDeps[key] = value.toString();
    }
  }

  final environment = yaml['environment'] as Map?;
  final flutterSdk = environment?['flutter'] as String?;
  final dartSdk = environment?['sdk'] as String?;

  final isFlutter =
      deps.containsKey('flutter') || devDeps.containsKey('flutter');

  return Pubspec(
    name: name,
    version: version,
    description: description,
    dependencies: deps,
    devDependencies: devDeps,
    flutterSdkConstraint: flutterSdk,
    dartSdkConstraint: dartSdk,
    isFlutterProject: isFlutter,
  );
}