Browse Source

Merge pull request #12264 from abpframework/enisn/cli-pwa-changes

PWA Support for Angular in CLI
pull/12312/head
Yunus Emre Kalkan 5 years ago
committed by GitHub
parent
commit
793b07126c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
  2. 20
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
  3. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs
  4. 36
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  5. 35
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs

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

@ -12,6 +12,7 @@ using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.LIbs;
using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -24,14 +25,15 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
protected TemplateProjectBuilder TemplateProjectBuilder { get; } protected TemplateProjectBuilder TemplateProjectBuilder { get; }
public ITemplateInfoProvider TemplateInfoProvider { get; } public ITemplateInfoProvider TemplateInfoProvider { get; }
public NewCommand(TemplateProjectBuilder templateProjectBuilder public NewCommand(TemplateProjectBuilder templateProjectBuilder
, ITemplateInfoProvider templateInfoProvider, , ITemplateInfoProvider templateInfoProvider,
ConnectionStringProvider connectionStringProvider, ConnectionStringProvider connectionStringProvider,
SolutionPackageVersionFinder solutionPackageVersionFinder, SolutionPackageVersionFinder solutionPackageVersionFinder,
ICmdHelper cmdHelper, ICmdHelper cmdHelper,
IInstallLibsService installLibsService) IInstallLibsService installLibsService,
: base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService) AngularPwaSupportAdder angularPwaSupportAdder)
: base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService, angularPwaSupportAdder)
{ {
TemplateProjectBuilder = templateProjectBuilder; TemplateProjectBuilder = templateProjectBuilder;
TemplateInfoProvider = templateInfoProvider; TemplateInfoProvider = templateInfoProvider;
@ -78,6 +80,8 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
RunGraphBuildForMicroserviceServiceTemplate(projectArgs); RunGraphBuildForMicroserviceServiceTemplate(projectArgs);
await RunInstallLibsForWebTemplateAsync(projectArgs); await RunInstallLibsForWebTemplateAsync(projectArgs);
ConfigurePwaSupportForAngular(projectArgs);
OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs);
} }

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

@ -25,18 +25,21 @@ public abstract class ProjectCreationCommandBase
public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; } public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; }
public ICmdHelper CmdHelper { get; } public ICmdHelper CmdHelper { get; }
public IInstallLibsService InstallLibsService { get; } public IInstallLibsService InstallLibsService { get; }
public AngularPwaSupportAdder AngularPwaSupportAdder { get; }
public ILogger<NewCommand> Logger { get; set; } public ILogger<NewCommand> Logger { get; set; }
public ProjectCreationCommandBase( public ProjectCreationCommandBase(
ConnectionStringProvider connectionStringProvider, ConnectionStringProvider connectionStringProvider,
SolutionPackageVersionFinder solutionPackageVersionFinder, SolutionPackageVersionFinder solutionPackageVersionFinder,
ICmdHelper cmdHelper, ICmdHelper cmdHelper,
IInstallLibsService installLibsService) IInstallLibsService installLibsService,
AngularPwaSupportAdder angularPwaSupportAdder)
{ {
ConnectionStringProvider = connectionStringProvider; ConnectionStringProvider = connectionStringProvider;
SolutionPackageVersionFinder = solutionPackageVersionFinder; SolutionPackageVersionFinder = solutionPackageVersionFinder;
CmdHelper = cmdHelper; CmdHelper = cmdHelper;
InstallLibsService = installLibsService; InstallLibsService = installLibsService;
AngularPwaSupportAdder = angularPwaSupportAdder;
Logger = NullLogger<NewCommand>.Instance; Logger = NullLogger<NewCommand>.Instance;
} }
@ -176,7 +179,8 @@ public abstract class ProjectCreationCommandBase
gitHubVoloLocalRepositoryPath, gitHubVoloLocalRepositoryPath,
templateSource, templateSource,
commandLineArgs.Options, commandLineArgs.Options,
connectionString connectionString,
pwa
); );
} }
@ -333,6 +337,18 @@ public abstract class ProjectCreationCommandBase
} }
} }
protected void ConfigurePwaSupportForAngular(ProjectBuildArgs projectArgs)
{
var isAngular = projectArgs.UiFramework == UiFramework.Angular;
var isPwa = projectArgs.Pwa;
if (isAngular && isPwa)
{
Logger.LogInformation("Adding PWA Support to Angular app.");
AngularPwaSupportAdder.AddPwaSupport(projectArgs.OutputFolder);
}
}
protected virtual DatabaseManagementSystem GetDatabaseManagementSystem(CommandLineArgs commandLineArgs) protected virtual DatabaseManagementSystem GetDatabaseManagementSystem(CommandLineArgs commandLineArgs)
{ {
var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseManagementSystem.Short, Options.DatabaseManagementSystem.Long); var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseManagementSystem.Short, Options.DatabaseManagementSystem.Long);

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs

@ -40,6 +40,8 @@ public class ProjectBuildArgs
[NotNull] [NotNull]
public string OutputFolder { get; set; } public string OutputFolder { get; set; }
public bool Pwa { get; set; }
[NotNull] [NotNull]
public Dictionary<string, string> ExtraProperties { get; set; } public Dictionary<string, string> ExtraProperties { get; set; }
@ -57,7 +59,8 @@ public class ProjectBuildArgs
[CanBeNull] string voloGitHubLocalRepositoryPath = null, [CanBeNull] string voloGitHubLocalRepositoryPath = null,
[CanBeNull] string templateSource = null, [CanBeNull] string templateSource = null,
Dictionary<string, string> extraProperties = null, Dictionary<string, string> extraProperties = null,
[CanBeNull] string connectionString = null) [CanBeNull] string connectionString = null,
bool pwa = false)
{ {
SolutionName = Check.NotNull(solutionName, nameof(solutionName)); SolutionName = Check.NotNull(solutionName, nameof(solutionName));
TemplateName = templateName; TemplateName = templateName;
@ -73,5 +76,6 @@ public class ProjectBuildArgs
TemplateSource = templateSource; TemplateSource = templateSource;
ExtraProperties = extraProperties ?? new Dictionary<string, string>(); ExtraProperties = extraProperties ?? new Dictionary<string, string>();
ConnectionString = connectionString; ConnectionString = connectionString;
Pwa = pwa;
} }
} }

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

@ -209,15 +209,6 @@ public abstract class AppTemplateBase : TemplateInfo
{ {
RemoveCmsKitDependenciesFromPackageJsonFiles(steps); RemoveCmsKitDependenciesFromPackageJsonFiles(steps);
} }
if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short))
{
context.Symbols.Add("PWA");
}
else
{
RemovePwaFiles(steps);
}
} }
protected static void RemoveCmsKitDependenciesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps) protected static void RemoveCmsKitDependenciesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps)
@ -247,15 +238,6 @@ public abstract class AppTemplateBase : TemplateInfo
} }
} }
protected static void RemovePwaFiles(List<ProjectBuildPipelineStep> steps)
{
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png"));
}
protected bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context) protected bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context)
{ {
if (string.IsNullOrWhiteSpace(context.BuildArgs.Version)) if (string.IsNullOrWhiteSpace(context.BuildArgs.Version))
@ -307,6 +289,19 @@ public abstract class AppTemplateBase : TemplateInfo
steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host")); steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305")); steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305"));
} }
if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short))
{
context.Symbols.Add("PWA");
}
else
{
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png"));
steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png"));
}
} }
protected void ConfigureWithBlazorServerUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) protected void ConfigureWithBlazorServerUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
@ -383,6 +378,11 @@ public abstract class AppTemplateBase : TemplateInfo
steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host")); steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305")); steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305"));
} }
if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short))
{
context.Symbols.Add("PWA");
}
} }
protected void RemoveUnnecessaryPorts(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) protected void RemoveUnnecessaryPorts(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)

35
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs

@ -0,0 +1,35 @@
using System;
using System.IO;
using System.Linq;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.ProjectModification;
public class AngularPwaSupportAdder : ITransientDependency
{
protected ICmdHelper CmdHelper { get; }
protected PackageJsonFileFinder PackageJsonFileFinder { get; }
public AngularPwaSupportAdder(
ICmdHelper cmdHelper,
PackageJsonFileFinder packageJsonFileFinder)
{
CmdHelper = cmdHelper;
PackageJsonFileFinder = packageJsonFileFinder;
}
public virtual void AddPwaSupport(string rootDirectory)
{
var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => File.Exists(x.RemovePostFix("package.json") + "angular.json")).ToList();
fileList.ForEach(AddPwaSupportToProject);
}
protected virtual void AddPwaSupportToProject(string filePath)
{
var directory = Path.GetDirectoryName(filePath).EnsureEndsWith(Path.DirectorySeparatorChar);
CmdHelper.RunCmd("ng add @angular/pwa --skip-confirmation", workingDirectory: directory);
}
}
Loading…
Cancel
Save