From 7d0a009a9e79411a03f044b1a6a326fb0b46052e Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 14 Nov 2019 14:39:24 +0800 Subject: [PATCH] Minify the script returned by ServiceProxyScript. Resolve #2008 --- .../ProxyScripting/ServiceProxyGenerationModel.cs | 4 +++- framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj | 1 + .../Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs | 2 ++ .../Abp/Http/ProxyScripting/ProxyScriptManager.cs | 9 +++++++-- .../Abp/Http/ProxyScripting/ProxyScriptingModel.cs | 5 ++++- .../AbpServiceProxiesController_Tests.cs | 13 ++++++++++++- 6 files changed, 29 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs index 5cc9a0a3c5..20dae137e7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/ServiceProxyGenerationModel.cs @@ -11,6 +11,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ProxyScripting public bool UseCache { get; set; } + public bool Minify { get; set; } + public string Modules { get; set; } public string Controllers { get; set; } @@ -32,7 +34,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ProxyScripting public ProxyScriptingModel CreateOptions() { - var options = new ProxyScriptingModel(Type, UseCache); + var options = new ProxyScriptingModel(Type, UseCache, Minify); if (!Modules.IsNullOrEmpty()) { diff --git a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj index df1e907450..57f447604e 100644 --- a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj +++ b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj @@ -16,6 +16,7 @@ + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs index 171f54b85f..6cccb5ff6d 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs @@ -1,12 +1,14 @@ using Volo.Abp.Http.ProxyScripting.Configuration; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Json; +using Volo.Abp.Minify; using Volo.Abp.Modularity; namespace Volo.Abp.Http { [DependsOn(typeof(AbpHttpAbstractionsModule))] [DependsOn(typeof(AbpJsonModule))] + [DependsOn(typeof(AbpMinifyModule))] public class AbpHttpModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs index 1b89de2b3a..858b78a57f 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs @@ -7,6 +7,7 @@ using Volo.Abp.Http.Modeling; using Volo.Abp.Http.ProxyScripting.Configuration; using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Json; +using Volo.Abp.Minify.Scripts; namespace Volo.Abp.Http.ProxyScripting { @@ -17,18 +18,21 @@ namespace Volo.Abp.Http.ProxyScripting private readonly IJsonSerializer _jsonSerializer; private readonly IProxyScriptManagerCache _cache; private readonly AbpApiProxyScriptingOptions _options; + private readonly IJavascriptMinifier _javascriptMinifier; public ProxyScriptManager( IApiDescriptionModelProvider modelProvider, IServiceProvider serviceProvider, IJsonSerializer jsonSerializer, IProxyScriptManagerCache cache, - IOptions options) + IOptions options, + IJavascriptMinifier javascriptMinifier) { _modelProvider = modelProvider; _serviceProvider = serviceProvider; _jsonSerializer = jsonSerializer; _cache = cache; + _javascriptMinifier = javascriptMinifier; _options = options.Value; } @@ -63,7 +67,8 @@ namespace Volo.Abp.Http.ProxyScripting using (var scope = _serviceProvider.CreateScope()) { - return scope.ServiceProvider.GetRequiredService(generatorType).As().CreateScript(apiModel); + var script = scope.ServiceProvider.GetRequiredService(generatorType).As().CreateScript(apiModel); + return scriptingModel.Minify ? _javascriptMinifier.Minify(script) : script; } } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs index 5ab85a781b..6815c01ce5 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptingModel.cs @@ -8,6 +8,8 @@ namespace Volo.Abp.Http.ProxyScripting public bool UseCache { get; set; } + public bool Minify { get; set; } + public string[] Modules { get; set; } public string[] Controllers { get; set; } @@ -16,10 +18,11 @@ namespace Volo.Abp.Http.ProxyScripting public IDictionary Properties { get; set; } - public ProxyScriptingModel(string generatorType, bool useCache = true) + public ProxyScriptingModel(string generatorType, bool useCache = true, bool minify = false) { GeneratorType = generatorType; UseCache = useCache; + Minify = minify; Properties = new Dictionary(); } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs index 10fa9bd3e7..bd7366b931 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs @@ -9,8 +9,19 @@ namespace Volo.Abp.AspNetCore.Mvc.ProxyScripting [Fact] public async Task GetAll() { - var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript/"); + var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript?minify=true"); script.Length.ShouldBeGreaterThan(0); } + + [Fact] + public async Task GetAllWithMinify() + { + var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript"); + var minifyScript = await GetResponseAsStringAsync("/Abp/ServiceProxyScript?minify=true"); + + script.Length.ShouldBeGreaterThan(0); + minifyScript.Length.ShouldBeGreaterThan(0); + minifyScript.Length.ShouldBeLessThan(script.Length); + } } }