satisfies method
Check if this version is compatible with a version requirement Examples:
- "1.0.0" (exact)
- "^1.0.0" (compatible with 1.x.x)
- "~1.0.0" (compatible with 1.0.x)
- ">=1.0.0" (greater than or equal)
- ">=1.0.0 <2.0.0" (range)
Implementation
bool satisfies(String requirement) {
requirement = requirement.trim();
// Exact match
if (!requirement.startsWith('^') &&
!requirement.startsWith('~') &&
!requirement.startsWith('>') &&
!requirement.startsWith('<') &&
!requirement.startsWith('=')) {
final reqVersion = SemanticVersion.tryParse(requirement);
return reqVersion != null && this == reqVersion;
}
// Caret (^) - compatible with major version
if (requirement.startsWith('^')) {
final reqVersion = SemanticVersion.tryParse(requirement.substring(1));
if (reqVersion == null) return false;
return major == reqVersion.major && this >= reqVersion;
}
// Tilde (~) - compatible with minor version
if (requirement.startsWith('~')) {
final reqVersion = SemanticVersion.tryParse(requirement.substring(1));
if (reqVersion == null) return false;
return major == reqVersion.major &&
minor == reqVersion.minor &&
this >= reqVersion;
}
// Greater than or equal
if (requirement.startsWith('>=')) {
final parts = requirement.split(' ').where((s) => s.isNotEmpty).toList();
final minVersion = SemanticVersion.tryParse(parts[0].substring(2));
if (minVersion == null) return false;
if (!(this >= minVersion)) return false;
// Check for upper bound
if (parts.length > 1 && parts[1].startsWith('<')) {
final maxVersion = SemanticVersion.tryParse(parts[1].substring(1));
if (maxVersion != null && !(this < maxVersion)) return false;
}
return true;
}
// Greater than
if (requirement.startsWith('>') && !requirement.startsWith('>=')) {
final reqVersion = SemanticVersion.tryParse(requirement.substring(1));
return reqVersion != null && this > reqVersion;
}
// Less than
if (requirement.startsWith('<') && !requirement.startsWith('<=')) {
final reqVersion = SemanticVersion.tryParse(requirement.substring(1));
return reqVersion != null && this < reqVersion;
}
// Less than or equal
if (requirement.startsWith('<=')) {
final reqVersion = SemanticVersion.tryParse(requirement.substring(2));
return reqVersion != null && this <= reqVersion;
}
return false;
}