DependencyConfig.fromYaml constructor

DependencyConfig.fromYaml(
  1. dynamic entry, {
  2. bool isDevDependency = false,
})

Parse a dependency entry from YAML (String or Map).

Implementation

factory DependencyConfig.fromYaml(dynamic entry,
    {bool isDevDependency = false}) {
  if (entry is String) {
    final trimmed = entry.trim();
    if (trimmed.contains(':')) {
      final parts = trimmed.split(':');
      final ver = parts.sublist(1).join(':').trim();
      return DependencyConfig(
        name: parts[0].trim(),
        version: ver.isNotEmpty ? ver : null,
        isDevDependency: isDevDependency,
      );
    }
    return DependencyConfig(
      name: trimmed,
      isDevDependency: isDevDependency,
    );
  } else if (entry is Map) {
    if (entry.containsKey('name')) {
      final name = entry['name'] as String?;
      if (name == null || name.isEmpty) {
        throw const FormatException(
            'Dependency entry must contain a non-empty "name" key.');
      }
      final ver = entry['version']?.toString().trim();
      return DependencyConfig(
        name: name.trim(),
        version: (ver != null && ver.isNotEmpty) ? ver : null,
        isDevDependency: isDevDependency,
      );
    } else if (entry.isNotEmpty) {
      // e.g. { dio: "^5.4.0" } or { dio: null }
      final key = entry.keys.first.toString().trim();
      final rawVal = entry.values.first;
      final ver = (rawVal != null && rawVal.toString().trim().isNotEmpty)
          ? rawVal.toString().trim()
          : null;
      return DependencyConfig(
        name: key,
        version: ver,
        isDevDependency: isDevDependency,
      );
    }
  }
  throw FormatException('Invalid dependency format: $entry');
}