in lib/src/pkg_resolution.dart [230:320]
List<PkgDependency> _buildDeps(Pubspec pubspec,
Map<String, Version> pkgVersions, Map<String, Version> availVersions) {
var deps = <PkgDependency>[];
void addDetail(
String package, Dependency? dependency, String dependencyType) {
String constraintType;
final errors = <String>[];
VersionConstraint? constraint;
if (dependencyType == DependencyTypes.transitive) {
constraintType = ConstraintTypes.inherited;
} else {
if (dependency is SdkDependency) {
constraintType = ConstraintTypes.sdk;
if (dependency.sdk != 'flutter') {
errors.add('Unsupported SDK for package $package: ${dependency.sdk}');
}
} else if (dependency is GitDependency) {
constraintType = ConstraintTypes.git;
if (dependencyType != DependencyTypes.dev) {
errors.add('Git constraint for package $package: ${dependency.url}');
}
} else if (dependency is PathDependency) {
constraintType = ConstraintTypes.path;
errors.add('Path constraint for package $package: ${dependency.path}');
} else if (dependency is HostedDependency) {
constraintType = ConstraintTypes.normal;
constraint = dependency.version;
} else {
constraintType = ConstraintTypes.unknown;
errors.add('Unknown constraint for package $package: $dependency');
}
}
var resolved = pkgVersions[package];
var available = availVersions[package];
if (resolved == null && dependencyType != DependencyTypes.dev) {
errors.add('No resolved version for package $package');
}
if (resolved != null &&
constraint != null &&
!constraint.allows(resolved)) {
errors.add(
'Package $package has version $resolved but $constraint does not allow it!');
}
for (final error in errors) {
log.info('Weird: $error');
}
deps.add(PkgDependency(
package: package,
dependencyType: dependencyType,
constraintType: constraintType,
constraint: constraint,
resolved: resolved,
available: available,
errors: errors.isEmpty ? null : errors,
));
}
final packageNames = <String>{};
pubspec.dependencies.forEach((k, v) {
if (packageNames.add(k)) {
addDetail(k, v, DependencyTypes.direct);
}
});
pubspec.devDependencies.forEach((k, v) {
if (packageNames.add(k)) {
addDetail(k, v, DependencyTypes.dev);
}
});
pkgVersions.forEach((k, v) {
if (packageNames.add(k)) {
addDetail(k, null, DependencyTypes.transitive);
}
});
availVersions.forEach((k, v) {
if (packageNames.add(k)) {
addDetail(k, null, DependencyTypes.transitive);
}
});
deps.sort((a, b) => a.package.compareTo(b.package));
return deps;
}