|
|
|
@ -22,6 +22,7 @@ using Volo.Abp.Cli.Utils; |
|
|
|
using Volo.Abp.DependencyInjection; |
|
|
|
using Volo.Abp.EventBus.Local; |
|
|
|
using Volo.Abp.Json; |
|
|
|
using System.Text.RegularExpressions; |
|
|
|
|
|
|
|
namespace Volo.Abp.Cli.ProjectModification; |
|
|
|
|
|
|
|
@ -114,12 +115,11 @@ public class SolutionModuleAdder : ITransientDependency |
|
|
|
var projectFiles = ProjectFinder.GetProjectFiles(solutionFile); |
|
|
|
|
|
|
|
await AddNugetAndNpmReferences(module, projectFiles, !(newTemplate || newProTemplate)); |
|
|
|
|
|
|
|
|
|
|
|
var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); |
|
|
|
|
|
|
|
if (withSourceCode || newTemplate || newProTemplate) |
|
|
|
{ |
|
|
|
|
|
|
|
await PublishEventAsync(5, $"Downloading source code of {moduleName}"); |
|
|
|
await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version, newTemplate, newProTemplate); |
|
|
|
|
|
|
|
@ -147,6 +147,8 @@ public class SolutionModuleAdder : ITransientDependency |
|
|
|
else |
|
|
|
{ |
|
|
|
await AddAngularPackages(solutionFile, module); |
|
|
|
|
|
|
|
await TryConfigureModuleConfigurationsForAngular(solutionFile, module); |
|
|
|
} |
|
|
|
|
|
|
|
await RunBundleForBlazorAsync(projectFiles, module); |
|
|
|
@ -167,10 +169,83 @@ public class SolutionModuleAdder : ITransientDependency |
|
|
|
return module; |
|
|
|
} |
|
|
|
|
|
|
|
private async Task TryConfigureModuleConfigurationsForAngular(string solutionFilePath, ModuleWithMastersInfo module) |
|
|
|
{ |
|
|
|
var angularPath = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(solutionFilePath)), "angular"); |
|
|
|
|
|
|
|
if (!Directory.Exists(angularPath)) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var angularPackages = module.NpmPackages? |
|
|
|
.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Angular)) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
if (!angularPackages.Any()) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
await PublishEventAsync(6, "Configuring angular projects..."); |
|
|
|
|
|
|
|
var moduleName = module.Name.Split('.').Last(); |
|
|
|
|
|
|
|
ConfigureAngularPackagesForAppModuleFile(angularPath, angularPackages, moduleName); |
|
|
|
|
|
|
|
ConfigureAngularPackagesForAppRoutingModuleFile(angularPath, angularPackages, moduleName); |
|
|
|
} |
|
|
|
|
|
|
|
private void ConfigureAngularPackagesForAppModuleFile(string angularPath, List<NpmPackageInfo> angularPackages, string moduleName) |
|
|
|
{ |
|
|
|
var appModulePath = Path.Combine(angularPath, "src", "app", "app.module.ts"); |
|
|
|
if (!File.Exists(appModulePath)) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var appModuleFileContent = File.ReadAllText(appModulePath); |
|
|
|
|
|
|
|
foreach (var angularPackage in angularPackages) |
|
|
|
{ |
|
|
|
var moduleNameAsConfigPath = angularPackage.Name.EnsureStartsWith('@').EnsureEndsWith('/') + "config"; |
|
|
|
|
|
|
|
appModuleFileContent = "import { " + moduleName + "ConfigModule } from '" + moduleNameAsConfigPath + "';" + Environment.NewLine + appModuleFileContent; |
|
|
|
appModuleFileContent = Regex.Replace(appModuleFileContent, "imports\\s*:\\s*\\[", |
|
|
|
"imports: [" + Environment.NewLine + |
|
|
|
" " + moduleName + "ConfigModule.forRoot(),"); |
|
|
|
} |
|
|
|
|
|
|
|
File.WriteAllText(appModulePath, appModuleFileContent); |
|
|
|
} |
|
|
|
|
|
|
|
private void ConfigureAngularPackagesForAppRoutingModuleFile(string angularPath, List<NpmPackageInfo> angularPackages, string moduleName) |
|
|
|
{ |
|
|
|
var appRoutingModulePath = Path.Combine(angularPath, "src", "app", "app-routing.module.ts"); |
|
|
|
if (!File.Exists(appRoutingModulePath)) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var appRoutingModuleFileContent = File.ReadAllText(appRoutingModulePath); |
|
|
|
|
|
|
|
foreach (var angularPackage in angularPackages) |
|
|
|
{ |
|
|
|
appRoutingModuleFileContent = Regex.Replace(appRoutingModuleFileContent, "Routes\\s*=\\s*\\[", |
|
|
|
"Routes = [" + Environment.NewLine + |
|
|
|
" " + "{" + Environment.NewLine + |
|
|
|
" " + "path: '" + moduleName.ToLower() + "'," + Environment.NewLine + |
|
|
|
" " + "loadChildren: () => " + $"import('{angularPackage.Name.EnsureStartsWith('@')}').then(m => m.{moduleName}Module.forLazy())," + Environment.NewLine + |
|
|
|
" " + "},"); |
|
|
|
} |
|
|
|
|
|
|
|
File.WriteAllText(appRoutingModulePath, appRoutingModuleFileContent); |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SetLeptonXAbpVersionsAsync(string solutionFile, string combine) |
|
|
|
{ |
|
|
|
var abpVersion = SolutionPackageVersionFinder.FindByCsprojVersion(solutionFile); |
|
|
|
|
|
|
|
|
|
|
|
var projects = Directory.GetFiles(Path.GetDirectoryName(solutionFile)!, "*.csproj", SearchOption.AllDirectories); |
|
|
|
|
|
|
|
foreach (var project in projects) |
|
|
|
@ -183,7 +258,8 @@ public class SolutionModuleAdder : ITransientDependency |
|
|
|
|
|
|
|
private async Task PublishEventAsync(int currentStep, string message) |
|
|
|
{ |
|
|
|
await LocalEventBus.PublishAsync(new ModuleInstallingProgressEvent { |
|
|
|
await LocalEventBus.PublishAsync(new ModuleInstallingProgressEvent |
|
|
|
{ |
|
|
|
CurrentStep = currentStep, |
|
|
|
Message = message |
|
|
|
}, false); |
|
|
|
@ -562,7 +638,7 @@ public class SolutionModuleAdder : ITransientDependency |
|
|
|
|
|
|
|
if (webPackagesWillBeAddedToBlazorServerProject) |
|
|
|
{ |
|
|
|
if ( nugetTarget == NuGetPackageTarget.Web) |
|
|
|
if (nugetTarget == NuGetPackageTarget.Web) |
|
|
|
{ |
|
|
|
nugetTarget = NuGetPackageTarget.BlazorServer; |
|
|
|
} |
|
|
|
@ -636,7 +712,7 @@ public class SolutionModuleAdder : ITransientDependency |
|
|
|
} |
|
|
|
|
|
|
|
var dbMigrationsProject = projectFiles.FirstOrDefault(p => p.EndsWith(".DbMigrations.csproj")) |
|
|
|
?? projectFiles.FirstOrDefault(p => p.EndsWith(".EntityFrameworkCore.csproj")) ; |
|
|
|
?? projectFiles.FirstOrDefault(p => p.EndsWith(".EntityFrameworkCore.csproj")); |
|
|
|
|
|
|
|
if (dbMigrationsProject == null) |
|
|
|
{ |
|
|
|
|