| // Copyright (c) 2024, 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 '../command.dart'; | |
| import '../log.dart'; | |
| import '../path.dart'; | |
| import '../utils.dart'; | |
| class WorkspaceListCommand extends PubCommand { | |
| @override | |
| String get description => | |
| 'List all packages in the workspace, and their directory'; | |
| @override | |
| String get name => 'list'; | |
| WorkspaceListCommand() { | |
| argParser.addFlag( | |
| 'json', | |
| negatable: false, | |
| help: 'output information in a json format', | |
| ); | |
| } | |
| @override | |
| void runProtected() { | |
| if (argResults.flag('json')) { | |
| message( | |
| const JsonEncoder.withIndent(' ').convert({ | |
| 'packages': [ | |
| ...entrypoint.workspaceRoot.transitiveWorkspace.map( | |
| (package) => { | |
| 'name': package.name, | |
| 'path': p.canonicalize(package.dir), | |
| }, | |
| ), | |
| ], | |
| }), | |
| ); | |
| } else { | |
| for (final line in renderTable([ | |
| [format('Package', bold), format('Path', bold)], | |
| for (final package in entrypoint.workspaceRoot.transitiveWorkspace) | |
| [ | |
| format(package.name, (x) => x), | |
| format( | |
| '${p.relative(p.absolute(package.dir))}${p.separator}', | |
| (x) => x, | |
| ), | |
| ], | |
| ], canUseAnsiCodes)) { | |
| message(line); | |
| } | |
| } | |
| } | |
| } |