readLockfileDartSdk static method

({String? constraint, List<String> issues}) readLockfileDartSdk(
  1. File lockfile
)

Reads the Dart SDK constraint recorded as sdks.dart in lockfile.

The constraint is null if the lockfile is missing, cannot be read or parsed, or records no Dart SDK constraint. The issues describe the cases where the lockfile itself could not be read.

Implementation

static ({String? constraint, List<String> issues}) readLockfileDartSdk(
  File lockfile,
) {
  if (!lockfile.existsSync()) {
    return (constraint: null, issues: const []);
  }

  final String rawContent;
  try {
    rawContent = lockfile.readAsStringSync();
  } catch (e) {
    return (
      constraint: null,
      issues: ['Failed to read pubspec.lock: ${e.toString()}'],
    );
  }

  final YamlNode document;
  try {
    document = loadYamlNode(rawContent);
  } catch (e) {
    return (
      constraint: null,
      issues: ['Failed to parse pubspec.lock: ${e.toString()}'],
    );
  }

  if (document is! YamlMap) {
    return (
      constraint: null,
      issues: const ['Failed to parse pubspec.lock: expected a YAML map'],
    );
  }

  final sdks = document.value['sdks'];
  if (sdks is! YamlMap) {
    return (constraint: null, issues: const []);
  }

  final dartSdk = sdks.value['dart']?.toString().trim();
  if (dartSdk == null || dartSdk.isEmpty) {
    return (constraint: null, issues: const []);
  }

  return (constraint: dartSdk, issues: const []);
}