getWorkspacePackages function

List<WorkspacePackage> getWorkspacePackages(
  1. WorkspaceInfo workspace
)

Gets all workspace packages with their names and directories

Implementation

List<WorkspacePackage> getWorkspacePackages(WorkspaceInfo workspace) {
  final packages = <WorkspacePackage>[];

  for (final memberPath in workspace.memberPaths) {
    // Resolve path relative to workspace root
    final packageDir =
        path.isAbsolute(memberPath) ? Directory(memberPath) : Directory(path.join(workspace.root.path, memberPath));

    if (!packageDir.existsSync()) {
      logger.warn('Workspace member path does not exist: ${packageDir.path}');
      continue;
    }

    final pubspecFile = File(path.join(packageDir.path, 'pubspec.yaml'));
    if (!pubspecFile.existsSync()) {
      logger.warn('pubspec.yaml not found for workspace member: ${packageDir.path}');
      continue;
    }

    try {
      final pubspecContent = pubspecFile.readAsStringSync();
      final packageName = PubspecUtils.getPackageName(pubspecContent);
      final relativePath = path.relative(packageDir.path, from: workspace.root.path);

      packages.add(WorkspacePackage(
        name: packageName,
        directory: packageDir,
        relativePath: relativePath,
      ));
    } catch (e) {
      logger.warn('Error reading package name from ${packageDir.path}: $e');
      continue;
    }
  }

  return packages;
}