in lib/src/tag/tagger.dart [127:180]
factory Tagger(String packageDir) {
final session = ContextBuilder()
.createContext(
contextRoot: ContextLocator().locateRoots(
includedPaths: [path.normalize(packageDir)],
).first,
)
.currentSession;
final pubspecCache = PubspecCache(session);
final pubspec = pubspecFromDir(packageDir);
final libDartFiles = dartFilesFromLib(packageDir);
final nonSrcDartFiles =
libDartFiles.where((p) => !p.startsWith('src/')).toList();
Uri? primaryLibrary;
if (libDartFiles.contains('${pubspec.name}.dart')) {
primaryLibrary =
Uri.parse('package:${pubspec.name}/${pubspec.name}.dart');
}
// If there is a primary library, use it as a single source for top libraries,
// otherwise take `lib/*.dart` or (if it was empty) `lib/**/*.dart`.
List<Uri> topLibraries;
if (primaryLibrary != null) {
topLibraries = <Uri>[primaryLibrary];
} else {
topLibraries = (nonSrcDartFiles.isEmpty ? libDartFiles : nonSrcDartFiles)
.map((name) => Uri.parse('package:${pubspec.name}/$name'))
.toList();
}
final binDir = Directory(path.join(packageDir, 'bin'));
final allBinFiles = binDir.existsSync()
? binDir
.listSync(recursive: true)
.where((e) => e is File && e.path.endsWith('.dart'))
.map((f) => path.relative(f.path, from: binDir.path))
.toList()
: <String>[];
final isBinaryOnly = nonSrcDartFiles.isEmpty && allBinFiles.isNotEmpty;
final publicLibraries = nonSrcDartFiles
.map((s) => Uri.parse('package:${pubspec.name}/$s'))
.toList();
return Tagger._(
pubspec.name,
session,
pubspecCache,
isBinaryOnly,
topLibraries,
publicLibraries,
);
}