satisfies method

bool satisfies(
  1. String requirement
)

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;
}