in lib/src/sdk_env.dart [446:487]
Future<File> _stripAndAugmentPubspecYaml(String packageDir) async {
final now = DateTime.now();
final backup = File(
p.join(packageDir, 'pana-${now.millisecondsSinceEpoch}-pubspec.yaml'));
final pubspec = File(p.join(packageDir, 'pubspec.yaml'));
final original = await pubspec.readAsString();
final parsed = yamlToJson(original) ?? <String, dynamic>{};
parsed.remove('dev_dependencies');
parsed.remove('dependency_overrides');
// `pub` client checks if pubspec.yaml has no lower-bound SDK constraint,
// and throws an exception if it is missing. While we no longer accept
// new packages without such constraint, the old versions are still valid
// and should be analyzed.
final environment = parsed.putIfAbsent('environment', () => {});
if (environment is Map) {
VersionConstraint? vc;
if (environment['sdk'] is String) {
try {
vc = VersionConstraint.parse(environment['sdk'] as String);
} catch (_) {}
}
final range = vc is VersionRange ? vc : null;
if (range != null &&
range.min != null &&
!range.min!.isAny &&
!range.min!.isEmpty) {
// looks good
} else {
final maxValue = range?.max == null
? '<=${_runtimeInfo!.sdkVersion}'
: '${range!.includeMax ? '<=' : '<'}${range.max}';
environment['sdk'] = '>=1.0.0 $maxValue';
}
}
await pubspec.rename(backup.path);
await pubspec.writeAsString(json.encode(parsed));
return backup;
}