public async Task <string?> DownloadPackageAsync(PackageIdentity identity, CancellationToken cancellationToken)
        {
            var repository = Repository.Factory.GetCoreV3(Source.ToPackageSource());
            var resource   = await repository.GetResourceAsync <FindPackageByIdResource>(cancellationToken);

            var version      = identity.Version.ToNugetVersion();
            var tempFilePath = _fileService.GetNupkgTempFilePath(identity);

            using (var stream = _fileService.CreateWriteFileStream(tempFilePath))
            {
                var result = await resource.CopyNupkgToStreamAsync(identity.Id, version, stream, _cacheContext, _logger, cancellationToken);

                if (!result)
                {
                    LogHelper.LogWarning($"Package {identity.Id} not downloaded");
                    return(null);
                }
            }

            var packageDirectoryPath = _fileService.Unzip(tempFilePath, _configService.LocalRepositoryPath);

            if (!_fileService.RemoveFile(tempFilePath))
            {
                LogHelper.LogWarning($"Cannot remove temp file '{tempFilePath}'");
            }

            return(packageDirectoryPath);
        }
        public async Task <PackageInfo?> GetPackageAsync(PackageIdentity identity, CancellationToken cancellationToken)
        {
            var repository = Repository.Factory.GetCoreV3(Source.ToPackageSource());
            var resource   = await repository.GetResourceAsync <PackageMetadataResource>(cancellationToken);

            var packages =
                await resource.GetMetadataAsync(identity.Id, true, false, _cacheContext, _logger, cancellationToken);

            return(packages.Select(p => p.ToPackageInfo()).FirstOrDefault(p => p.Identity.Version.Equals(identity.Version)));
        }
        public async Task <IEnumerable <FrameworkGroup> > FindDependenciesAsync(PackageIdentity packageIdentity,
                                                                                CancellationToken cancellationToken)
        {
            var repositories     = new[] { Repository.Factory.GetCoreV3(Source.ToPackageSource()) };
            var currentFramework = _frameworkService.RequireCurrentFramework();
            var dependencies     = new HashSet <SourcePackageDependencyInfo>(PackageIdentityComparer.Default);

            await FindPackageDependenciesRecursive(
                packageIdentity.ToNugetPackageIdentity(),
                currentFramework.ToNugetFramework(),
                _cacheContext,
                repositories,
                dependencies,
                cancellationToken);

            return(new []
            {
                new FrameworkGroup(currentFramework, dependencies.Select(d => d.ToPackageIdentity()))
            });
        }