public async Task <PackagesLock> DownloadModuleLock(string outputPath, IEnumerable <string> loadOnStartup) { var modulesLock = await ModulesResource.FetchModules(PrismModule.ClientFramework, _restClient); var requiredPackages = new Dictionary <PackageIdentity, IImmutableList <PackageIdentity> >(); void AddPackages(IEnumerable <PackageIdentity> identities) { foreach (var identity in identities) { if (!requiredPackages.ContainsKey(identity)) { var dependencies = modulesLock[identity]; requiredPackages.Add(identity, dependencies); AddPackages(dependencies); } } } AddPackages(loadOnStartup.Select(x => modulesLock.First(y => y.Key.Id.Equals(x, StringComparison.OrdinalIgnoreCase)).Key)); var requiredPackagesLock = new PackagesLock(requiredPackages); _fileSystem.File.WriteAllText(_fileSystem.Path.Combine(outputPath, "modules.lock"), JsonConvert.SerializeObject(requiredPackagesLock)); return(requiredPackagesLock); }
public async Task <PackagesLock> DownloadModuleLock(string outputPath, IEnumerable <string> loadOnStartup) { var modulesLock = await ModulesResource.FetchModules(PrismModule.ClientFramework, _restClient); var requiredPackages = new Dictionary <PackageIdentity, IImmutableList <PackageIdentity> >(); void AddPackages(IEnumerable <PackageIdentity> identities) { foreach (var identity in identities) { if (!requiredPackages.ContainsKey(identity)) { var dependencies = modulesLock[identity]; requiredPackages.Add(identity, dependencies); AddPackages(dependencies); } } } var loadOnStartupPackages = new List <PackageIdentity>(); foreach (var module in loadOnStartup) { var lockedPackage = modulesLock.Where(y => y.Key.Id.Equals(module, StringComparison.OrdinalIgnoreCase)); if (!lockedPackage.Any()) { _logger.LogWarning($"The module {module} is not installed on the server and cannot be loaded on startup. Please remove it from the config."); continue; } loadOnStartupPackages.Add(lockedPackage.First().Key); } AddPackages(loadOnStartupPackages); var requiredPackagesLock = new PackagesLock(requiredPackages); _fileSystem.File.WriteAllText(_fileSystem.Path.Combine(outputPath, "modules.lock"), JsonConvert.SerializeObject(requiredPackagesLock)); return(requiredPackagesLock); }