Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions UseNodeModules.sln
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2005
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OdeToCode.UseNodeModules", "src\OdeToCode.UseNodeModules\OdeToCode.UseNodeModules.xproj", "{7A277FDD-6FE5-42D5-A1B2-8D7F3FC07590}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7D9FC821-A71B-48F8-BFBF-7523C6F85C37}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7FBF1E34-35D4-4A17-9029-295D55D9F692}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "OdeToCode.UseNodeModules.Tests", "test\OdeToCode.UseNodeModules.Tests\OdeToCode.UseNodeModules.Tests.xproj", "{8F8317A2-95F9-4BA7-B390-F876F08FD6B1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7DEEA18D-41F7-4B5A-8482-5D9577D839DF}"
ProjectSection(SolutionItems) = preProject
.gitignore = .gitignore
appveyor.yml = appveyor.yml
build.ps1 = build.ps1
global.json = global.json
LICENSE = LICENSE
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OdeToCode.UseNodeModules", "src\OdeToCode.UseNodeModules\OdeToCode.UseNodeModules.csproj", "{7A277FDD-6FE5-42D5-A1B2-8D7F3FC07590}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OdeToCode.UseNodeModules.Tests", "test\OdeToCode.UseNodeModules.Tests\OdeToCode.UseNodeModules.Tests.csproj", "{8F8317A2-95F9-4BA7-B390-F876F08FD6B1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -43,4 +42,7 @@ Global
{7A277FDD-6FE5-42D5-A1B2-8D7F3FC07590} = {7D9FC821-A71B-48F8-BFBF-7523C6F85C37}
{8F8317A2-95F9-4BA7-B390-F876F08FD6B1} = {7FBF1E34-35D4-4A17-9029-295D55D9F692}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E59ADB13-BC9F-457D-9FB8-9E4F0219FB06}
EndGlobalSection
EndGlobal
2 changes: 1 addition & 1 deletion build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ pushd .\test\OdeToCode.UseNodeModules.Tests\
exec { & dotnet test -c Release }
popd

exec { & dotnet pack .\src\OdeToCode.UseNodeModules -c Release -o .\artifacts --version-suffix=$revision }
exec { & dotnet pack .\src\OdeToCode.UseNodeModules -c Release -o .\artifacts --version-suffix=build-$revision }
6 changes: 0 additions & 6 deletions global.json

This file was deleted.

33 changes: 24 additions & 9 deletions src/OdeToCode.UseNodeModules/ApplicationBuilderExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.FileProviders;

// ReSharper disable once CheckNamespace
// ReSharper disable once CheckNamespace
namespace Microsoft.AspNetCore.Builder
{
using System;
using System.IO;

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.FileProviders;
using Microsoft.Net.Http.Headers;

public static class ApplicationBuilderExtensions
{
/// <summary>
Expand All @@ -14,25 +17,37 @@ public static class ApplicationBuilderExtensions
/// </summary>
/// <param name="app">The IApplicationBuilder object</param>
/// <param name="environment">The IHostingEnvironment object</param>
/// <param name="maxAge">If specified, the max time that a static file can be cached</param>
/// <returns>The IApplicationBuilder object</returns>
public static IApplicationBuilder UseNodeModules(this IApplicationBuilder app,
IHostingEnvironment environment)
IHostingEnvironment environment,
TimeSpan? maxAge = null)
{
if (app == null) throw new ArgumentNullException(nameof(app));
if (environment == null) throw new ArgumentNullException(nameof(environment));

AddMiddleware(app, environment);
AddMiddleware(app, environment, maxAge);

return app;
}

private static void AddMiddleware(IApplicationBuilder app, IHostingEnvironment environment)
private static void AddMiddleware(IApplicationBuilder app, IHostingEnvironment environment, TimeSpan? maxAge)
{
var path = Path.Combine(environment.ContentRootPath, "node_modules");
var provider = new PhysicalFileProvider(path);

var options = new FileServerOptions {RequestPath = "/node_modules"};
options.StaticFileOptions.FileProvider = provider;

if (maxAge != null)
{
options.StaticFileOptions.OnPrepareResponse = context =>
{
var headers = context.Context.Response.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue { MaxAge = maxAge, Public = true };
};
}

options.EnableDirectoryBrowsing = false;
app.UseFileServer(options);
}
Expand Down
34 changes: 34 additions & 0 deletions src/OdeToCode.UseNodeModules/OdeToCode.UseNodeModules.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Description>Serve static files from node_modules in ASP.NET Core</Description>
<Copyright>OdeToCode LLC</Copyright>
<VersionPrefix>1.0.1</VersionPrefix>
<Authors>K. Scott Allen</Authors>
<TargetFrameworks>net46;netstandard1.3</TargetFrameworks>
<AssemblyName>OdeToCode.UseNodeModules</AssemblyName>
<PackageId>OdeToCode.UseNodeModules</PackageId>
<PackageTags>middleware;static files;node_modules</PackageTags>
<PackageProjectUrl>https://github.com/OdeToCode/UseNodeModules</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/OdeToCode/UseNodeModules/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/OdeToCode/UseNodeModules</RepositoryUrl>
<NetStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard1.3' ">1.6.0</NetStandardImplicitPackageVersion>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="1.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.0.2" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.0.2" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="1.0.1" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net46' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>

</Project>
21 changes: 0 additions & 21 deletions src/OdeToCode.UseNodeModules/OdeToCode.UseNodeModules.xproj

This file was deleted.

29 changes: 0 additions & 29 deletions src/OdeToCode.UseNodeModules/project.json

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp1.0</TargetFramework>
<AssemblyName>OdeToCode.UseNodeModules.Tests</AssemblyName>
<PackageId>OdeToCode.UseNodeModules.Tests</PackageId>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\OdeToCode.UseNodeModules\OdeToCode.UseNodeModules.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta5-build1225" />
<PackageReference Include="xunit" Version="2.2.0-beta5-build3474" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.0.2" />
</ItemGroup>

<ItemGroup>
<None Update="node_modules\hello.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>

This file was deleted.

12 changes: 7 additions & 5 deletions test/OdeToCode.UseNodeModules.Tests/TestStartup.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;

namespace OdeToCode.UseNodeModules.Tests
namespace OdeToCode.UseNodeModules.Tests
{
using System;

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;

public class TestStartup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment environment)
{
app.UseNodeModules(environment);
app.UseNodeModules(environment, TimeSpan.FromSeconds(600));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System.IO;
using System.Net;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Xunit;

namespace OdeToCode.UseNodeModules.Tests
namespace OdeToCode.UseNodeModules.Tests
{
using System;
using System.IO;
using System.Net;

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;

using Xunit;

public class UseNodeModulesIntegrationTest
{
[Fact]
Expand All @@ -17,9 +20,10 @@ public async void RespondsToFileInNodeModules()
var server = new TestServer(builder);
var client = server.CreateClient();

var result = await client.GetStringAsync("/node_modules/hello.txt");
var result = await client.GetAsync("/node_modules/hello.txt");

Assert.Equal("hello!", result);
Assert.Equal(TimeSpan.FromSeconds(600), result.Headers.CacheControl.MaxAge);
Assert.Equal("hello!", await result.Content.ReadAsStringAsync());
}

[Fact]
Expand Down
20 changes: 0 additions & 20 deletions test/OdeToCode.UseNodeModules.Tests/project.json

This file was deleted.