load method
Loads the project manifest from projectRoot.
Implementation
ProjectManifest load(String projectRoot, {ProjectIdentity? seedIdentity}) {
final String pubspecPath = p.join(projectRoot, 'pubspec.yaml');
if (!_fs.fileExists(pubspecPath)) {
throw FormatException('pubspec.yaml not found in $projectRoot');
}
final Object? decoded = loadYaml(_fs.readFile(pubspecPath));
if (decoded is! YamlMap) {
throw const FormatException('pubspec.yaml must contain a YAML map.');
}
final YamlMap deps = decoded['dependencies'] as YamlMap? ?? YamlMap();
final YamlMap devDeps =
decoded['dev_dependencies'] as YamlMap? ?? YamlMap();
final YamlMap environment = decoded['environment'] as YamlMap? ?? YamlMap();
final String? repositoryUrl = decoded['repository'] as String?;
return ProjectManifest(
name: decoded['name'] as String? ?? 'unknown',
version: decoded['version'] as String?,
dependencies: deps.keys.map((Object? key) => key.toString()).toSet(),
devDependencies:
devDeps.keys.map((Object? key) => key.toString()).toSet(),
environmentSdk: environment['sdk'] as String?,
usesFlutter: deps.containsKey('flutter'),
projectIdentity: ProjectIdentity(
publisher: seedIdentity?.publisher,
githubOrg: seedIdentity?.githubOrg ?? _extractGithubOrg(repositoryUrl),
repositoryUrl: seedIdentity?.repositoryUrl ?? repositoryUrl,
),
);
}