load method

ProjectManifest load(
  1. String projectRoot, {
  2. ProjectIdentity? seedIdentity,
})

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,
    ),
  );
}