| // Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'dart:convert'; | |
| import 'package:pub_semver/pub_semver.dart'; | |
| /// Updates the language version for [packageName] in the given | |
| /// [packageConfigJson] string. | |
| /// | |
| /// Returns the updated JSON string with indentation, or `null` if | |
| /// [packageConfigJson] is not valid JSON, does not conform to the package | |
| /// config format, or does not contain [packageName]. | |
| String? updatePackageLanguageVersion( | |
| String packageConfigJson, { | |
| required String packageName, | |
| required Version languageVersion, | |
| }) { | |
| try { | |
| var json = jsonDecode(packageConfigJson); | |
| if (json is! Map<String, Object?>) return null; | |
| var packages = json['packages']; | |
| if (packages is! List<Object?>) return null; | |
| for (var package in packages) { | |
| if (package is Map<String, Object?> && package['name'] == packageName) { | |
| package['languageVersion'] = | |
| '${languageVersion.major}.${languageVersion.minor}'; | |
| return JsonEncoder.withIndent(' ').convert(json); | |
| } | |
| } | |
| } on FormatException { | |
| return null; | |
| } | |
| return null; | |
| } |