void OnSolutionConfiguration(object sender, SolutionConfigurationEventArgs e) { if (!ReadNPMProjects(e.Monitor)) { e.PreventSolutionUse("NPM project error."); return; } if (!ReadAngularWorkspace(e.Monitor)) { e.PreventSolutionUse("NPM project error inside an Angular Workspace."); } bool somePublished = false; //Dependency model stuff: ensuring project, adding generated artifacts and synchronize the package references. foreach (var p in AllNpmProjects) { var(project, isNew) = e.Solution.AddOrFindProject(p.Specification.Folder, "js", p.PackageJson.SafeName); p.Associate(project); if (isNew) { if (p.PackageJson.IsPublished) //add generated artifact if needed. { project.AddGeneratedArtifacts(new Artifact(NPMClient.NPMType, p.PackageJson.Name)); somePublished = true; } } p.SynchronizePackageReferences(e.Monitor); } foreach (var p in AllNpmProjects) { if (!p.SynchronizeProjectReferences(e.Monitor)) //Project reference { e.PreventSolutionUse("NPM project path relative error."); } } if (!AllNpmProjects.Any()) { var sources = e.Solution.ArtifactSources.Where(s => s.ArtifactType == NPMClient.NPMType).ToList(); if (sources.Count > 0) { e.Monitor.Info($"Removing sources: {sources.Select( t => t.TypedName ).Concatenate()} since there is no NPM projetcs."); foreach (var s in sources) { e.Solution.RemoveArtifactSource(s); } } } if (!somePublished) { var targets = e.Solution.ArtifactTargets.Where(t => t.HandleArtifactType(NPMClient.NPMType)).ToList(); if (targets.Count > 0) { e.Monitor.Info($"Removing targets: {targets.Select( t => t.UniqueRepositoryName ).Concatenate()} since no published NPM projetcs exist."); foreach (var t in targets) { e.Solution.RemoveArtifactTarget(t); } } } }