Browse Source

Repalce theme package in `package.json`

Resolve #18968
pull/18978/head
maliming 2 years ago
parent
commit
8fa04cbfae
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 1
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
  2. 61
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
  3. 51
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceDependencyFromPackageJsonFileStep.cs
  4. 45
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs
  5. 45
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  6. 45
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs

1
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs

@ -104,7 +104,6 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
await CheckCreatedRequirements(projectArgs);
ConfigureNpmPackagesForTheme(projectArgs);
await CreateOpenIddictPfxFilesAsync(projectArgs);
await RunGraphBuildForMicroserviceServiceTemplate(projectArgs);
await CreateInitialMigrationsAsync(projectArgs);

61
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs

@ -720,67 +720,6 @@ public abstract class ProjectCreationCommandBase
};
}
protected void ConfigureNpmPackagesForTheme(ProjectBuildArgs projectArgs)
{
if (!projectArgs.Theme.HasValue)
{
return;
}
switch (projectArgs.Theme)
{
case Theme.Basic:
ConfigureNpmPackagesForBasicTheme(projectArgs);
break;
case Theme.Lepton:
ConfigureNpmPackagesForLeptonTheme(projectArgs);
break;
case Theme.NotSpecified:
case Theme.LeptonXLite:
case Theme.LeptonX:
break;
default:
throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage(Options.Theme.Long));
}
}
private void ConfigureNpmPackagesForBasicTheme(ProjectBuildArgs projectArgs)
{
if (projectArgs.UiFramework is not UiFramework.None or UiFramework.Angular)
{
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@abp/aspnetcore.mvc.ui.theme.basic", projectArgs.Version);
}
if (projectArgs.UiFramework is UiFramework.BlazorServer)
{
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@abp/aspnetcore.components.server.basictheme", projectArgs.Version);
}
if (projectArgs.UiFramework is UiFramework.Angular)
{
ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@abp/ng.theme.basic", projectArgs.Version);
}
}
private void ConfigureNpmPackagesForLeptonTheme(ProjectBuildArgs projectArgs)
{
if (projectArgs.UiFramework is not UiFramework.None or UiFramework.Angular)
{
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.mvc.ui.theme.lepton", projectArgs.Version);
}
if (projectArgs.UiFramework is UiFramework.BlazorServer)
{
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.components.server.leptontheme", projectArgs.Version);
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.mvc.ui.theme.lepton", projectArgs.Version);
}
if (projectArgs.UiFramework is UiFramework.Angular)
{
ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@volo/abp.ng.theme.lepton", projectArgs.Version);
}
}
protected void ConfigureAngularJsonForThemeSelection(ProjectBuildArgs projectArgs)
{
if (projectArgs.TemplateName == ModuleTemplate.TemplateName)

51
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceDependencyFromPackageJsonFileStep.cs

@ -0,0 +1,51 @@
using System.Linq;
using System.Text.RegularExpressions;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class ReplaceDependencyFromPackageJsonFileStep : ProjectBuildPipelineStep
{
private readonly string _packageJsonFilePath;
private readonly string _packageName;
private readonly string _newPackageName;
private readonly string _newPackageVersion;
public ReplaceDependencyFromPackageJsonFileStep(string packageJsonFilePath, string packageName, string newPackageName, string newPackageVersion)
{
_packageJsonFilePath = packageJsonFilePath;
_packageName = packageName;
_newPackageName = newPackageName;
_newPackageVersion = newPackageVersion;
}
public override void Execute(ProjectBuildContext context)
{
var packageJsonFile = context.Files.FirstOrDefault(f => f.Name.Contains(_packageJsonFilePath) && !f.Name.Contains("node_modules"));
if (packageJsonFile == null)
{
return;
}
var lines = packageJsonFile.GetLines();
for (var i = 0; i < lines.Length; i++)
{
if (lines[i].Contains(_packageName))
{
if (_newPackageVersion == null)
{
lines[i] = lines[i].Replace(_packageName, _newPackageName);
}
else
{
var space = Regex.Match(lines[i], @"\s+").Value;
var hasComma = lines[i].Contains(",") ? "," : "";
var caret = lines[i].Contains("^");
var tilde = lines[i].Contains("~");
var prefix = caret ? "^" : tilde ? "~" : "";
lines[i] = $"{space}\"{_newPackageName}\": \"{prefix}{_newPackageVersion}\"{hasComma}";
}
}
}
packageJsonFile.SetLines(lines);
}
}

45
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs

@ -256,7 +256,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo
}
steps.Add(new ChangeThemeStep());
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework);
ReplaceLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework, theme: context.BuildArgs.Theme, version: context.BuildArgs.Version);
}
private static void RemoveBlazorWasmProjects(List<ProjectBuildPipelineStep> steps)
@ -324,9 +324,21 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo
return templateThemes.TryGetValue(args.TemplateName!, out var templateTheme) && templateTheme == args.Theme;
}
private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, bool isProTemplate, UiFramework uiFramework)
private static void ReplaceLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, bool isProTemplate, UiFramework uiFramework, Theme? theme, string version)
{
var mvcUiPackageName = isProTemplate ? "@volo/abp.aspnetcore.mvc.ui.theme.leptonx" : "@abp/aspnetcore.mvc.ui.theme.leptonxlite";
var newMvcUiPackageName = theme switch
{
Theme.Basic => "@abp/aspnetcore.mvc.ui.theme.basic",
Theme.Lepton => "@volo/abp.aspnetcore.mvc.ui.theme.lepton",
Theme.LeptonXLite => "@abp/aspnetcore.mvc.ui.theme.leptonxlite",
Theme.LeptonX => "@volo/abp.aspnetcore.mvc.ui.theme.leptonx",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
if (theme == Theme.LeptonX || theme == Theme.LeptonXLite)
{
version = null;
}
var packageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Web/package.json",
@ -338,12 +350,20 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo
foreach (var packageJsonFilePath in packageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version));
}
if (uiFramework == UiFramework.BlazorServer)
{
var blazorServerUiPackageName = isProTemplate ? "@volo/aspnetcore.components.server.leptonxtheme" : "@abp/aspnetcore.components.server.leptonxlitetheme";
var newBlazorServerUiPackageName = theme switch
{
Theme.Basic => "@abp/aspnetcore.components.server.basictheme",
Theme.Lepton => "@volo/abp.aspnetcore.components.server.leptontheme",
Theme.LeptonXLite => "@abp/aspnetcore.components.server.leptonxlitetheme",
Theme.LeptonX => "@volo/aspnetcore.components.server.leptonxtheme",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
var blazorServerPackageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName/package.json",
@ -353,13 +373,21 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo
foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName, newBlazorServerUiPackageName, version));
}
}
else if (uiFramework == UiFramework.Angular)
{
var ngUiPackageName = isProTemplate ? "@volosoft/abp.ng.theme.lepton-x" : "@abp/ng.theme.lepton-x";
var newNgUiPackageName = theme switch
{
Theme.Basic => "@abp/ng.theme.basic",
Theme.Lepton => "@volo/abp.ng.theme.lepton",
Theme.LeptonXLite => "@abp/ng.theme.lepton-x",
Theme.LeptonX => "@volosoft/abp.ng.theme.lepton-x",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
var angularPackageJsonFilePaths = new List<string>
{
"/angular/package.json"
@ -367,8 +395,11 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo
foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName, newNgUiPackageName, version));
if (theme == Theme.Basic || theme == Theme.Lepton)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
}
}
}
}

45
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -232,7 +232,7 @@ public abstract class AppTemplateBase : TemplateInfo
}
steps.Add(new ChangeThemeStep());
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework);
ReplaceLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework, theme: context.BuildArgs.Theme, version: context.BuildArgs.Version);
}
protected void SetDbmsSymbols(ProjectBuildContext context)
@ -289,9 +289,21 @@ public abstract class AppTemplateBase : TemplateInfo
return templateThemes.TryGetValue(args.TemplateName!, out var templateTheme) && templateTheme == args.Theme;
}
private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, bool isProTemplate, UiFramework uiFramework)
private static void ReplaceLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, bool isProTemplate, UiFramework uiFramework, Theme? theme, string version)
{
var mvcUiPackageName = isProTemplate ? "@volo/abp.aspnetcore.mvc.ui.theme.leptonx" : "@abp/aspnetcore.mvc.ui.theme.leptonxlite";
var newMvcUiPackageName = theme switch
{
Theme.Basic => "@abp/aspnetcore.mvc.ui.theme.basic",
Theme.Lepton => "@volo/abp.aspnetcore.mvc.ui.theme.lepton",
Theme.LeptonXLite => "@abp/aspnetcore.mvc.ui.theme.leptonxlite",
Theme.LeptonX => "@volo/abp.aspnetcore.mvc.ui.theme.leptonx",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
if (theme == Theme.LeptonX || theme == Theme.LeptonXLite)
{
version = null;
}
var packageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Web/package.json",
@ -306,12 +318,20 @@ public abstract class AppTemplateBase : TemplateInfo
foreach (var packageJsonFilePath in packageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version));
}
if (uiFramework == UiFramework.BlazorServer)
{
var blazorServerUiPackageName = isProTemplate ? "@volo/aspnetcore.components.server.leptonxtheme" : "@abp/aspnetcore.components.server.leptonxlitetheme";
var newBlazorServerUiPackageName = theme switch
{
Theme.Basic => "@abp/aspnetcore.components.server.basictheme",
Theme.Lepton => "@volo/abp.aspnetcore.components.server.leptontheme",
Theme.LeptonXLite => "@abp/aspnetcore.components.server.leptonxlitetheme",
Theme.LeptonX => "@volo/aspnetcore.components.server.leptonxtheme",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
var blazorServerPackageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Blazor/package.json",
@ -320,13 +340,21 @@ public abstract class AppTemplateBase : TemplateInfo
foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName, newBlazorServerUiPackageName, version));
}
}
else if (uiFramework == UiFramework.Angular)
{
var ngUiPackageName = isProTemplate ? "@volosoft/abp.ng.theme.lepton-x" : "@abp/ng.theme.lepton-x";
var newNgUiPackageName = theme switch
{
Theme.Basic => "@abp/ng.theme.basic",
Theme.Lepton => "@volo/abp.ng.theme.lepton",
Theme.LeptonXLite => "@abp/ng.theme.lepton-x",
Theme.LeptonX => "@volosoft/abp.ng.theme.lepton-x",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
var angularPackageJsonFilePaths = new List<string>
{
"/angular/package.json"
@ -334,8 +362,11 @@ public abstract class AppTemplateBase : TemplateInfo
foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName, newNgUiPackageName, version));
if (theme == Theme.Basic || theme == Theme.Lepton)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
}
}
}
}

45
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs

@ -51,12 +51,24 @@ public abstract class MicroserviceTemplateBase : TemplateInfo
}
steps.Add(new ChangeThemeStep());
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, uiFramework: context.BuildArgs.UiFramework);
ReplaceLeptonXThemePackagesFromPackageJsonFiles(steps, uiFramework: context.BuildArgs.UiFramework, theme: context.BuildArgs.Theme, version: context.BuildArgs.Version);
}
private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, UiFramework uiFramework)
private static void ReplaceLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, UiFramework uiFramework, Theme? theme, string version)
{
var mvcUiPackageName = "@volo/abp.aspnetcore.mvc.ui.theme.leptonx";
var newMvcUiPackageName = theme switch
{
Theme.Basic => "@abp/aspnetcore.mvc.ui.theme.basic",
Theme.Lepton => "@volo/abp.aspnetcore.mvc.ui.theme.lepton",
Theme.LeptonXLite => "@abp/aspnetcore.mvc.ui.theme.leptonxlite",
Theme.LeptonX => "@volo/abp.aspnetcore.mvc.ui.theme.leptonx",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
if (theme == Theme.LeptonX || theme == Theme.LeptonXLite)
{
version = null;
}
var packageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.AuthServer/package.json",
@ -65,12 +77,20 @@ public abstract class MicroserviceTemplateBase : TemplateInfo
foreach (var packageJsonFilePath in packageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version));
}
if (uiFramework == UiFramework.BlazorServer)
{
var blazorServerUiPackageName = "@volo/aspnetcore.components.server.leptonxtheme";
var newBlazorServerUiPackageName = theme switch
{
Theme.Basic => "@abp/aspnetcore.components.server.basictheme",
Theme.Lepton => "@volo/abp.aspnetcore.components.server.leptontheme",
Theme.LeptonXLite => "@abp/aspnetcore.components.server.leptonxlitetheme",
Theme.LeptonX => "@volo/aspnetcore.components.server.leptonxtheme",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
var blazorServerPackageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Blazor/package.json"
@ -78,13 +98,21 @@ public abstract class MicroserviceTemplateBase : TemplateInfo
foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName, newBlazorServerUiPackageName, version));
}
}
else if (uiFramework == UiFramework.Angular)
{
var ngUiPackageName = "@volosoft/abp.ng.theme.lepton-x";
var newNgUiPackageName = theme switch
{
Theme.Basic => "@abp/ng.theme.basic",
Theme.Lepton => "@volo/abp.ng.theme.lepton",
Theme.LeptonXLite => "@abp/ng.theme.lepton-x",
Theme.LeptonX => "@volosoft/abp.ng.theme.lepton-x",
_ => throw new AbpException("Unknown theme: " + theme?.ToString())
};
var angularPackageJsonFilePaths = new List<string>
{
"/angular/package.json"
@ -92,8 +120,11 @@ public abstract class MicroserviceTemplateBase : TemplateInfo
foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
steps.Add(new ReplaceDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName, newNgUiPackageName, version));
if (theme == Theme.Basic || theme == Theme.Lepton)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
}
}
}
}

Loading…
Cancel
Save