fetchDependencyRepoUrl function
Fetches the repository URL for a dependency from its registry: pub.dev for Dart/Flutter, the npm registry for TypeScript. Returns the URL if found, otherwise null.
Implementation
Future<String?> fetchDependencyRepoUrl(
String packageName, {
gg.ProjectType type = gg.ProjectType.dart,
Future<http.Response> Function(Uri)? packageFetcher,
}) async {
final fetcher = packageFetcher ?? http.get;
if (type == gg.ProjectType.typescript) {
return _fetchNpmRepoUrl(packageName, fetcher);
}
final url = Uri.parse('https://pub.dev/api/packages/$packageName');
final response = await fetcher(url);
if (response.statusCode != 200) {
throw Exception(
cError('Failed to fetch package info from pub.dev for $packageName'),
);
}
final data = jsonDecode(response.body) as Map<String, dynamic>;
if (data.containsKey('latest')) {
final latest = data['latest'] as Map<String, dynamic>;
if (latest.containsKey('pubspec')) {
final pubspec = latest['pubspec'] as Map<String, dynamic>;
if (pubspec.containsKey('repository')) {
final repoUrl = pubspec['repository'] as String;
return repoUrl;
}
}
}
return null;
}