diff --git a/src/DependencyUpdated.Projects.Npm/Models/PackageRoot.cs b/src/DependencyUpdated.Projects.Npm/Models/PackageRoot.cs index b16df89..6c26e90 100644 --- a/src/DependencyUpdated.Projects.Npm/Models/PackageRoot.cs +++ b/src/DependencyUpdated.Projects.Npm/Models/PackageRoot.cs @@ -1,3 +1,3 @@ namespace DependencyUpdated.Projects.Npm.Models; -public record PackageRoot(Dictionary Dependencies, Dictionary DevDependencies); \ No newline at end of file +public record PackageRoot(Dictionary? Dependencies, Dictionary? DevDependencies); \ No newline at end of file diff --git a/src/DependencyUpdated.Projects.Npm/NpmUpdater.cs b/src/DependencyUpdated.Projects.Npm/NpmUpdater.cs index 9a0b12e..5e6ff7b 100644 --- a/src/DependencyUpdated.Projects.Npm/NpmUpdater.cs +++ b/src/DependencyUpdated.Projects.Npm/NpmUpdater.cs @@ -25,8 +25,11 @@ internal sealed class NpmUpdater : IProjectUpdater public IReadOnlyCollection GetAllProjectFiles(string searchPath) { - return ValidNpmPatterns.SelectMany(dotnetPattern => + var allPaths = ValidNpmPatterns.SelectMany(dotnetPattern => Directory.GetFiles(searchPath, dotnetPattern, SearchOption.AllDirectories)).ToList(); + allPaths.RemoveAll(x => x.Contains("node_modules")); + allPaths.RemoveAll(x => x.Contains("dist")); + return allPaths; } public IReadOnlyCollection HandleProjectUpdate(IReadOnlyCollection fullPath, @@ -45,6 +48,11 @@ public IReadOnlyCollection HandleProjectUpdate(IReadOnlyCollection var projectDeps = ParseProject(path); foreach (var dependency in dependenciesToUpdate) { + if (projectDeps.All(x => x.Name != dependency.Name)) + { + continue; + } + var process = GetProcess(directory, dependency); process.WaitForExit(); var oldDep = projectDeps.First(x => x.Name == dependency.Name); @@ -182,13 +190,26 @@ private static HashSet ParseProject(string path) return new HashSet(); } - var dependencies = package.Dependencies - .Where(x => IsValidVersion(x.Value)) - .Select(d => new DependencyDetails(d.Key, ParseVersion(d.Value))).ToList(); - var devDependencies = package.DevDependencies + var dependencies = ConvertToDependencies(package.Dependencies); + var devDependencies = ConvertToDependencies(package.DevDependencies); + return dependencies.Concat(devDependencies).ToHashSet(); + } + + private static ICollection ConvertToDependencies(Dictionary? dependencies) + { + if (dependencies is null) + { + return Array.Empty(); + } + + if (dependencies.Count == 0) + { + return Array.Empty(); + } + + return dependencies .Where(x => IsValidVersion(x.Value)) .Select(d => new DependencyDetails(d.Key, ParseVersion(d.Value))).ToList(); - return dependencies.Concat(devDependencies).ToHashSet(); } private static Version ParseVersion(string data) diff --git a/tests/DependencyUpdated.Projects.Npm.UnitTests/DependencyUpdated.Projects.Npm.UnitTests.csproj b/tests/DependencyUpdated.Projects.Npm.UnitTests/DependencyUpdated.Projects.Npm.UnitTests.csproj index 14ce2e1..173dea2 100644 --- a/tests/DependencyUpdated.Projects.Npm.UnitTests/DependencyUpdated.Projects.Npm.UnitTests.csproj +++ b/tests/DependencyUpdated.Projects.Npm.UnitTests/DependencyUpdated.Projects.Npm.UnitTests.csproj @@ -12,6 +12,9 @@ Always + + Always +