public async Task Update(string rootDirectory, bool includePreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false, string version = null) { var fileList = _packageJsonFileFinder.Find(rootDirectory); if (!fileList.Any()) { return; } _npmGlobalPackagesChecker.Check(); var packagesUpdated = new ConcurrentDictionary <string, bool>(); async Task UpdateAsync(string file) { var updated = await UpdatePackagesInFile(file, includePreviews, includeReleaseCandidates, switchToStable, version); packagesUpdated.TryAdd(file, updated); } Task.WaitAll(fileList.Select(UpdateAsync).ToArray()); foreach (var file in packagesUpdated.Where(x => x.Value)) { var fileDirectory = Path.GetDirectoryName(file.Key).EnsureEndsWith(Path.DirectorySeparatorChar); if (includePreviews) { await CreateNpmrcFileAsync(Path.GetDirectoryName(file.Key)); } else if (switchToStable) { await DeleteNpmrcFileAsync(Path.GetDirectoryName(file.Key)); } if (await NpmrcFileExistAsync(fileDirectory)) { RunNpmInstall(fileDirectory); } else { RunYarn(fileDirectory); } if (!IsAngularProject(fileDirectory)) { Thread.Sleep(1000); RunInstallLibsAsync(fileDirectory); } } }
private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles, bool useDotnetCliToInstall) { var webPackagesWillBeAddedToBlazorServerProject = SouldWebPackagesBeAddedToBlazorServerProject(module, projectFiles); foreach (var nugetPackage in module.NugetPackages) { var nugetTarget = await IsProjectTiered(projectFiles) && nugetPackage.TieredTarget != NuGetPackageTarget.Undefined ? nugetPackage.TieredTarget : nugetPackage.Target; if (webPackagesWillBeAddedToBlazorServerProject && nugetTarget == NuGetPackageTarget.Web) { nugetTarget = NuGetPackageTarget.BlazorServer; } var targetProjectFile = ProjectFinder.FindNuGetTargetProjectFile(projectFiles, nugetTarget); if (targetProjectFile == null) { Logger.LogDebug($"Target project is not available for this NuGet package '{nugetPackage.Name}'"); continue; } await ProjectNugetPackageAdder.AddAsync(null, targetProjectFile, nugetPackage, null, useDotnetCliToInstall); } var mvcNpmPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc)) .ToList(); if (!mvcNpmPackages.IsNullOrEmpty()) { var targetProjects = ProjectFinder.FindNpmTargetProjectFile(projectFiles); if (targetProjects.Any()) { NpmGlobalPackagesChecker.Check(); foreach (var targetProject in targetProjects) { foreach (var npmPackage in mvcNpmPackages) { await ProjectNpmPackageAdder.AddMvcPackageAsync(Path.GetDirectoryName(targetProject), npmPackage); } } } else { Logger.LogDebug("Target project is not available for NPM packages."); } } }