public async Task <FindBestPackageVersionMatchOutput> FindBestPackageVersionMatchAsync( FindBestPackageVersionMatchInput input, CancellationToken cancellationToken) { var output = new FindBestPackageVersionMatchOutput { InputStatus = InputStatus.Missing, Input = input, }; if (input == null) { return(output); } var validatedPackageId = InputValidator.PackageId(input.PackageId); var validatedVersionRange = InputValidator.VersionRange(input.VersionRange); if (validatedPackageId.IsMissing || validatedPackageId.IsMissing) { return(output); } if (validatedVersionRange.IsInvalid || validatedVersionRange.IsInvalid) { output.InputStatus = InputStatus.Invalid; return(output); } IEnumerable <NuGetVersion> versions; HashSet <NuGetVersion> listed; using (var cache = new SourceCacheContext()) { var resource = await _metadataResourceTask; var metadata = await resource.GetMetadataAsync( input.PackageId, includePrerelease : true, includeUnlisted : true, cache, _nuGetLogger, cancellationToken); listed = new HashSet <NuGetVersion>(metadata.Where(x => x.IsListed).Select(x => x.Identity.Version)); versions = metadata.Select(x => x.Identity.Version).ToList(); } output.InputStatus = InputStatus.Valid; output.PackageId = validatedPackageId.Data; output.ShowUnlisted = input.ShowUnlisted; output.Result = GetBestVersionMatch(validatedVersionRange.Data, versions.ToList(), listed, output.ShowUnlisted); return(output); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var validated = InputValidator.PackageId(value); if (validated.IsValid) { return(ValidationResult.Success); } else { return(new ValidationResult(validated.ErrorMessage, new[] { validationContext.MemberName })); } }