| // Copyright 2014 The Flutter Authors. 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:collection/collection.dart'; | |
| import 'package:file/file.dart'; | |
| /// Writes a `.dart_tool/package_config.json` file at [directory]. | |
| /// | |
| /// Also writes a `.dart_tool/package_graph.json` file. | |
| /// | |
| /// If directory is not specified, it will be `globals.fs.currentDirectory`; | |
| /// | |
| /// `package_config.json` will contain a package entry for [mainLibName] with `rootUri` at | |
| /// [directory]. | |
| /// | |
| /// [packages] maps other package names to their `rootUri` relative to `directory`. | |
| /// | |
| /// [languageVersions] can map a package to a non-default language version. | |
| /// | |
| /// All [packages] will be marked as dependencies of [mainLibName]. Except those | |
| /// in [devDependencies] which will be marked as dev_dependencies. | |
| /// | |
| /// Returns the `File` object representing the package config. | |
| File writePackageConfigFiles({ | |
| required Directory directory, | |
| required String mainLibName, | |
| String mainLibRootUri = '.', | |
| Map<String, String> packages = const <String, String>{}, | |
| Map<String, String> languageVersions = const <String, String>{}, | |
| List<String> devDependencies = const <String>[], | |
| List<String>? dependencies, | |
| }) { | |
| directory.childDirectory('.dart_tool').childFile('package_graph.json') | |
| ..createSync(recursive: true) | |
| ..writeAsStringSync( | |
| json.encode(<String, Object?>{ | |
| 'roots': <Object?>[mainLibName], | |
| 'packages': <Object>[ | |
| <String, Object?>{ | |
| 'name': mainLibName, | |
| 'dependencies': | |
| dependencies ?? packages.keys.toList().whereNot(devDependencies.contains).toList(), | |
| 'devDependencies': devDependencies, | |
| }, | |
| ...packages.entries.map( | |
| (MapEntry<String, String> entry) => <String, Object?>{ | |
| 'name': entry.key, | |
| 'dependencies': <String>[], | |
| }, | |
| ), | |
| ], | |
| 'configVersion': 1, | |
| }), | |
| ); | |
| return directory.childDirectory('.dart_tool').childFile('package_config.json') | |
| ..createSync(recursive: true) | |
| ..writeAsStringSync( | |
| json.encode(<String, Object?>{ | |
| 'packages': <Object>[ | |
| <String, Object?>{ | |
| 'name': mainLibName, | |
| 'rootUri': Uri.parse('../').resolve(mainLibRootUri).toString(), | |
| 'packageUri': 'lib/', | |
| 'languageVersion': languageVersions[mainLibName] ?? '3.7', | |
| }, | |
| ...packages.entries.map( | |
| (MapEntry<String, String> entry) => <String, Object?>{ | |
| 'name': entry.key, | |
| 'rootUri': Uri.parse('../').resolve(entry.value).toString(), | |
| 'packageUri': 'lib/', | |
| 'languageVersion': languageVersions[entry.key] ?? '3.7', | |
| }, | |
| ), | |
| ], | |
| 'configVersion': 2, | |
| }), | |
| ); | |
| } |