|
|
|
@ -26,19 +26,15 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
|
|
|
|
private readonly PackageJsonFileFinder _packageJsonFileFinder; |
|
|
|
private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker; |
|
|
|
private readonly MyGetPackageListFinder _myGetPackageListFinder; |
|
|
|
private readonly Dictionary<string, string> _fileVersionStorage = new Dictionary<string, string>(); |
|
|
|
private MyGetApiResponse _myGetApiResponse; |
|
|
|
|
|
|
|
public NpmPackagesUpdater( |
|
|
|
PackageJsonFileFinder packageJsonFileFinder, |
|
|
|
NpmGlobalPackagesChecker npmGlobalPackagesChecker, |
|
|
|
MyGetPackageListFinder myGetPackageListFinder, |
|
|
|
ICancellationTokenProvider cancellationTokenProvider) |
|
|
|
{ |
|
|
|
_packageJsonFileFinder = packageJsonFileFinder; |
|
|
|
_npmGlobalPackagesChecker = npmGlobalPackagesChecker; |
|
|
|
_myGetPackageListFinder = myGetPackageListFinder; |
|
|
|
CancellationTokenProvider = cancellationTokenProvider; |
|
|
|
Logger = NullLogger<NpmPackagesUpdater>.Instance; |
|
|
|
} |
|
|
|
@ -58,7 +54,7 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
|
|
|
|
async Task UpdateAsync(string file) |
|
|
|
{ |
|
|
|
var updated = await UpdatePackagesInFile(file, includePreviews,includeReleaseCandidates, switchToStable, version); |
|
|
|
var updated = await UpdatePackagesInFile(file, includePreviews, includeReleaseCandidates, switchToStable, version); |
|
|
|
packagesUpdated.TryAdd(file, updated); |
|
|
|
} |
|
|
|
|
|
|
|
@ -103,7 +99,7 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
|
|
|
|
private static async Task<bool> NpmrcFileExistAsync(string directoryName) |
|
|
|
{ |
|
|
|
return File.Exists(Path.Combine(directoryName, ".npmrc")); |
|
|
|
return await Task.FromResult(File.Exists(Path.Combine(directoryName, ".npmrc"))); |
|
|
|
} |
|
|
|
|
|
|
|
private async Task CreateNpmrcFileAsync(string directoryName) |
|
|
|
@ -157,18 +153,19 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
{ |
|
|
|
using (var client = new CliHttpClient(TimeSpan.FromMinutes(1))) |
|
|
|
{ |
|
|
|
var response = await client.GetHttpResponseMessageWithRetryAsync( |
|
|
|
using (var response = await client.GetHttpResponseMessageWithRetryAsync( |
|
|
|
url: $"{CliUrls.WwwAbpIo}api/myget/apikey/", |
|
|
|
cancellationToken: CancellationTokenProvider.Token, |
|
|
|
logger: Logger |
|
|
|
); |
|
|
|
|
|
|
|
return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); |
|
|
|
)) |
|
|
|
{ |
|
|
|
return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception) |
|
|
|
{ |
|
|
|
return ""; |
|
|
|
return string.Empty; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -219,9 +216,10 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
bool switchToStable = false, |
|
|
|
string specifiedVersion = null) |
|
|
|
{ |
|
|
|
var currentVersion = (string) package.Value; |
|
|
|
var currentVersion = (string)package.Value; |
|
|
|
|
|
|
|
var version = string.Empty; |
|
|
|
|
|
|
|
var version = ""; |
|
|
|
if (!specifiedVersion.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
if (!SpecifiedVersionExists(specifiedVersion, package)) |
|
|
|
@ -237,7 +235,7 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if ((includePreviews || (!switchToStable && currentVersion.Contains("-preview"))) && !includeReleaseCandidates) |
|
|
|
if ((includePreviews || (!switchToStable && (currentVersion != null && currentVersion.Contains("-preview")))) && !includeReleaseCandidates) |
|
|
|
{ |
|
|
|
version = "preview"; |
|
|
|
} |
|
|
|
@ -277,13 +275,11 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
return version.Split("-", StringSplitOptions.RemoveEmptyEntries).Length > 1; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual async Task<string> GetLatestVersion( |
|
|
|
JProperty package, |
|
|
|
bool includeReleaseCandidates = false) |
|
|
|
protected virtual async Task<string> GetLatestVersion(JProperty package, bool includeReleaseCandidates = false) |
|
|
|
{ |
|
|
|
if (_fileVersionStorage.ContainsKey(package.Name)) |
|
|
|
{ |
|
|
|
return _fileVersionStorage[package.Name]; |
|
|
|
return await Task.FromResult(_fileVersionStorage[package.Name]); |
|
|
|
} |
|
|
|
|
|
|
|
var versionList = GetPackageVersionList(package); |
|
|
|
@ -295,24 +291,24 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
if (string.IsNullOrEmpty(newVersion)) |
|
|
|
{ |
|
|
|
_fileVersionStorage[package.Name] = newVersion; |
|
|
|
return newVersion; |
|
|
|
return await Task.FromResult(newVersion); |
|
|
|
} |
|
|
|
|
|
|
|
var newVersionWithPrefix = $"~{newVersion}"; |
|
|
|
|
|
|
|
_fileVersionStorage[package.Name] = newVersionWithPrefix; |
|
|
|
|
|
|
|
return newVersionWithPrefix; |
|
|
|
return await Task.FromResult(newVersionWithPrefix); |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual List<JProperty> GetAbpPackagesFromPackageJson(JObject fileObject) |
|
|
|
{ |
|
|
|
var dependencyList = new[] {"dependencies", "devDependencies", "peerDependencies"}; |
|
|
|
var dependencyList = new[] { "dependencies", "devDependencies", "peerDependencies" }; |
|
|
|
var abpPackages = new List<JProperty>(); |
|
|
|
|
|
|
|
foreach (var dependencyListName in dependencyList) |
|
|
|
{ |
|
|
|
var dependencies = (JObject) fileObject[dependencyListName]; |
|
|
|
var dependencies = (JObject)fileObject[dependencyListName]; |
|
|
|
|
|
|
|
if (dependencies == null) |
|
|
|
{ |
|
|
|
@ -320,7 +316,9 @@ namespace Volo.Abp.Cli.ProjectModification |
|
|
|
} |
|
|
|
|
|
|
|
var properties = dependencies.Properties().ToList(); |
|
|
|
abpPackages.AddRange(properties.Where(p => p.Name.StartsWith("@abp/") || p.Name.StartsWith("@volo/")) |
|
|
|
|
|
|
|
abpPackages |
|
|
|
.AddRange(properties.Where(p => p.Name.StartsWith("@abp/") || p.Name.StartsWith("@volo/")) |
|
|
|
.ToList()); |
|
|
|
} |
|
|
|
|
|
|
|
|