code: func (cons ProviderVersionConstraints) RequiredRanges() map[string]semver.Range {
  	ret := make(map[string]semver.Range, len(cons))
  
  	for _, con := range cons {
  		spec := semver.MustParseRange(con.Constraint)
  		if existing, exists := ret[con.ProviderType]; exists {
  			ret[con.ProviderType] = existing.AND(spec)
  		} else {
  			ret[con.ProviderType] = spec
  		}
  	}
  
  	return ret
  }
docs: // RequiredRanges returns a semver.Range for each distinct provider type in
  // the constraint map. If the same provider type appears more than once
  // (e.g. because aliases are in use) then their respective constraints are
  // combined such that they must *all* apply.
  //
  // The result of this method can be passed to the
  // PluginMetaSet.ConstrainVersions method within the plugin/discovery
  // package in order to filter down the available plugins to those which
  // satisfy the given constraints.
  //
  // This function will panic if any of the constraints within cannot be
  // parsed as semver ranges. This is guaranteed to never happen for a
  // constraint set that was built from a configuration that passed validation.