in lib/src/command/deps.dart [66:167]
Future<void> runProtected() async {
// Explicitly Run this in the directorycase we don't access `entrypoint.packageGraph`.
entrypoint.assertUpToDate();
_buffer.clear();
if (argResults['json']) {
if (argResults.wasParsed('dev')) {
usageException(
'Cannot combine --json and --dev.\nThe json output contains the dependency type in the output.');
}
if (argResults.wasParsed('executables')) {
usageException(
'Cannot combine --json and --executables.\nThe json output always lists available executables.');
}
if (argResults.wasParsed('style')) {
usageException('Cannot combine --json and --style.');
}
final visited = <String>[];
final toVisit = [entrypoint.root.name];
final packagesJson = <dynamic>[];
while (toVisit.isNotEmpty) {
final current = toVisit.removeLast();
if (visited.contains(current)) continue;
visited.add(current);
final currentPackage = entrypoint.packageGraph.packages[current]!;
final next = (current == entrypoint.root.name
? entrypoint.root.immediateDependencies
: currentPackage.dependencies)
.keys
.toList();
final dependencyType = entrypoint.root.dependencyType(current);
final kind = currentPackage == entrypoint.root
? 'root'
: (dependencyType == DependencyType.direct
? 'direct'
: (dependencyType == DependencyType.dev
? 'dev'
: 'transitive'));
final source =
entrypoint.packageGraph.lockFile.packages[current]?.source?.name ??
'root';
packagesJson.add({
'name': current,
'version': currentPackage.version.toString(),
'kind': kind,
'source': source,
'dependencies': next
});
toVisit.addAll(next);
}
var executables = [
for (final package in [
entrypoint.root,
...entrypoint.root.immediateDependencies.keys
.map((name) => entrypoint.packageGraph.packages[name])
])
...package!.executableNames.map((name) => package == entrypoint.root
? ':$name'
: (package.name == name ? name : '${package.name}:$name'))
];
_buffer.writeln(
JsonEncoder.withIndent(' ').convert(
{
'root': entrypoint.root.name,
'packages': packagesJson,
'sdks': [
for (var sdk in sdks.values)
if (sdk.version != null)
{'name': sdk.name, 'version': sdk.version.toString()}
],
'executables': executables
},
),
);
} else {
if (argResults['executables']) {
_outputExecutables();
} else {
for (var sdk in sdks.values) {
if (!sdk.isAvailable) continue;
_buffer.writeln("${log.bold('${sdk.name} SDK')} ${sdk.version}");
}
_buffer.writeln(_labelPackage(entrypoint.root));
switch (argResults['style']) {
case 'compact':
_outputCompact();
break;
case 'list':
_outputList();
break;
case 'tree':
_outputTree();
break;
}
}
}
log.message(_buffer);
}