Skip to content

Commit

Permalink
Banana Cake Pop Middleware (#2417)
Browse files Browse the repository at this point in the history
Co-authored-by: Michael Staib <michael@chillicream.com>
  • Loading branch information
rstaib and michaelstaib committed Oct 12, 2020
1 parent b0e061e commit 8673af5
Show file tree
Hide file tree
Showing 112 changed files with 1,169 additions and 85 deletions.
62 changes: 29 additions & 33 deletions src/HotChocolate/AspNetCore/.vscode/launch.json
@@ -1,34 +1,30 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/sample/StarWars/bin/Debug/netcoreapp3.1/StarWars.dll",
"args": [],
"cwd": "${workspaceFolder}/sample/StarWars",
"stopAtEntry": false,
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/sample/StarWars/bin/Debug/netcoreapp5.0/StarWars.dll",
"args": [],
"cwd": "${workspaceFolder}/sample/StarWars",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
16 changes: 8 additions & 8 deletions src/HotChocolate/AspNetCore/sample/StarWars/Startup.cs
Expand Up @@ -38,14 +38,14 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseDeveloperExceptionPage();
}

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapGraphQL();
endpoints.MapGraphQL("/hello", schemaName: "hello_world");
endpoints.MapGraphQL("/filtering", schemaName: "filtering");
});
app
.UseRouting()
.UseEndpoints(endpoints =>
{
endpoints.MapGraphQL();
endpoints.MapGraphQL("/hello", schemaName: "hello_world");
endpoints.MapGraphQL("/filtering", schemaName: "filtering");
});
}
}

Expand Down
@@ -1,9 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
20 changes: 10 additions & 10 deletions src/HotChocolate/AspNetCore/sample/StarWars/appsettings.json
@@ -1,10 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Expand Up @@ -2,10 +2,7 @@
using HotChocolate.AspNetCore.Subscriptions;
using HotChocolate.AspNetCore.Subscriptions.Messages;
using HotChocolate.AspNetCore.Utilities;
using HotChocolate.Execution;
using HotChocolate.Execution.Configuration;
using HotChocolate.Language;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;

namespace Microsoft.Extensions.DependencyInjection
Expand Down
@@ -1,42 +1,44 @@
using System;
using HotChocolate;
using HotChocolate.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Routing.Patterns;
using Microsoft.Extensions.FileProviders;

namespace Microsoft.AspNetCore.Builder
{
public static class HttpEndpointRouteBuilderExtensions
{
public static IEndpointConventionBuilder MapGraphQL(
this IEndpointRouteBuilder endpointRouteBuilder,
string pattern = "/graphql",
string path = "/graphql",
NameString schemaName = default) =>
MapGraphQL(endpointRouteBuilder, RoutePatternFactory.Parse(pattern), schemaName);
MapGraphQL(endpointRouteBuilder, new PathString(path), schemaName);

public static IEndpointConventionBuilder MapGraphQL(
this IEndpointRouteBuilder endpointRouteBuilder,
RoutePattern pattern,
PathString path,
NameString schemaName = default)
{
if (endpointRouteBuilder == null)
if (endpointRouteBuilder is null)
{
throw new ArgumentNullException(nameof(endpointRouteBuilder));
}

IApplicationBuilder requestPipeline =
endpointRouteBuilder.CreateApplicationBuilder();
path = path.ToString().TrimEnd('/');

requestPipeline.UseMiddleware<WebSocketSubscriptionMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
requestPipeline.UseMiddleware<HttpPostMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
requestPipeline.UseMiddleware<HttpGetSchemaMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
requestPipeline.UseMiddleware<HttpGetMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
RoutePattern pattern = RoutePatternFactory.Parse(path + "/{**slug}");
IApplicationBuilder requestPipeline = endpointRouteBuilder.CreateApplicationBuilder();
NameString schemaNameOrDefault = schemaName.HasValue ? schemaName : Schema.DefaultName;
IFileProvider fileProvider = CreateFileProvider();

requestPipeline.UseMiddleware<WebSocketSubscriptionMiddleware>(schemaNameOrDefault);
requestPipeline.UseMiddleware<HttpPostMiddleware>(schemaNameOrDefault);
requestPipeline.UseMiddleware<HttpGetSchemaMiddleware>(schemaNameOrDefault);
requestPipeline.UseMiddleware<ToolDefaultFileMiddleware>(fileProvider, path);
requestPipeline.UseMiddleware<ToolStaticFileMiddleware>(fileProvider, path);
requestPipeline.UseMiddleware<HttpGetMiddleware>(schemaNameOrDefault);

return endpointRouteBuilder
.Map(pattern, requestPipeline.Build())
Expand All @@ -49,24 +51,30 @@ public static class HttpEndpointRouteBuilderExtensions
PathString pathMatch = default,
NameString schemaName = default)
{
if (applicationBuilder == null)
if (applicationBuilder is null)
{
throw new ArgumentNullException(nameof(applicationBuilder));
}

NameString schemaNameOrDefault = schemaName.HasValue ? schemaName : Schema.DefaultName;

return applicationBuilder.Map(
pathMatch,
app =>
{
app.UseMiddleware<WebSocketSubscriptionMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
app.UseMiddleware<HttpPostMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
app.UseMiddleware<HttpGetSchemaMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
app.UseMiddleware<HttpGetMiddleware>(
schemaName.HasValue ? schemaName : Schema.DefaultName);
app.UseMiddleware<WebSocketSubscriptionMiddleware>(schemaNameOrDefault);
app.UseMiddleware<HttpPostMiddleware>(schemaNameOrDefault);
app.UseMiddleware<HttpGetSchemaMiddleware>(schemaNameOrDefault);
app.UseMiddleware<HttpGetMiddleware>(schemaNameOrDefault);
});
}

private static IFileProvider CreateFileProvider()
{
Type type = typeof(HttpEndpointRouteBuilderExtensions);
string resourceNamespace = typeof(MiddlewareBase).Namespace + ".Resources";

return new EmbeddedFileProvider(type.Assembly, resourceNamespace);
}
}
}
Expand Up @@ -19,4 +19,9 @@
<PackageReference Include="System.IO.Pipelines" Version="4.7.0" />
</ItemGroup>

<ItemGroup>
<None Remove="Resources\**\*" />
<EmbeddedResource Include="Resources\**\*" />
</ItemGroup>

</Project>
@@ -0,0 +1,106 @@
{
"files": {
"static/js/0.5fec78fb.chunk.js": "./static/js/0.5fec78fb.chunk.js",
"static/js/1.087675eb.chunk.js": "./static/js/1.087675eb.chunk.js",
"static/js/2.dd7d449b.chunk.js": "./static/js/2.dd7d449b.chunk.js",
"main.css": "./static/css/main.cc3afb38.chunk.css",
"main.js": "./static/js/main.0605b397.chunk.js",
"runtime-main.js": "./static/js/runtime-main.e5a2cdf5.js",
"runtime-schema.worker.js": "./static/js/runtime-schema.worker.620115f9.js",
"schema.worker.js": "./schema.worker.js",
"static/css/7.82f2daa0.chunk.css": "./static/css/7.82f2daa0.chunk.css",
"static/js/7.1dd7a0a2.chunk.js": "./static/js/7.1dd7a0a2.chunk.js",
"static/js/8.7fd097f7.chunk.js": "./static/js/8.7fd097f7.chunk.js",
"static/js/9.ad25d044.chunk.js": "./static/js/9.ad25d044.chunk.js",
"static/js/10.5db60641.chunk.js": "./static/js/10.5db60641.chunk.js",
"static/js/11.6e6e2f2d.chunk.js": "./static/js/11.6e6e2f2d.chunk.js",
"static/js/12.71d55545.chunk.js": "./static/js/12.71d55545.chunk.js",
"static/js/13.eeaf08bf.chunk.js": "./static/js/13.eeaf08bf.chunk.js",
"static/js/14.e65fa1df.chunk.js": "./static/js/14.e65fa1df.chunk.js",
"static/js/15.c7ac0dfe.chunk.js": "./static/js/15.c7ac0dfe.chunk.js",
"static/js/16.e4ec7d01.chunk.js": "./static/js/16.e4ec7d01.chunk.js",
"static/js/17.2eabab40.chunk.js": "./static/js/17.2eabab40.chunk.js",
"static/js/18.e5da9742.chunk.js": "./static/js/18.e5da9742.chunk.js",
"static/js/19.7afcd7ad.chunk.js": "./static/js/19.7afcd7ad.chunk.js",
"static/js/20.6843bc8e.chunk.js": "./static/js/20.6843bc8e.chunk.js",
"static/js/21.6b5ff9d3.chunk.js": "./static/js/21.6b5ff9d3.chunk.js",
"static/js/22.32a7a263.chunk.js": "./static/js/22.32a7a263.chunk.js",
"static/js/23.d4dbd3b7.chunk.js": "./static/js/23.d4dbd3b7.chunk.js",
"static/js/24.589a5007.chunk.js": "./static/js/24.589a5007.chunk.js",
"static/js/25.fd8edece.chunk.js": "./static/js/25.fd8edece.chunk.js",
"static/js/26.b53d329a.chunk.js": "./static/js/26.b53d329a.chunk.js",
"static/js/27.457cfc7b.chunk.js": "./static/js/27.457cfc7b.chunk.js",
"static/js/28.6af565aa.chunk.js": "./static/js/28.6af565aa.chunk.js",
"static/js/29.8bc46dc3.chunk.js": "./static/js/29.8bc46dc3.chunk.js",
"static/js/30.cd1c7bc4.chunk.js": "./static/js/30.cd1c7bc4.chunk.js",
"static/js/31.40c825de.chunk.js": "./static/js/31.40c825de.chunk.js",
"static/js/32.7b284257.chunk.js": "./static/js/32.7b284257.chunk.js",
"static/js/33.8aa11618.chunk.js": "./static/js/33.8aa11618.chunk.js",
"static/js/34.6d79282a.chunk.js": "./static/js/34.6d79282a.chunk.js",
"static/js/35.ac1cef18.chunk.js": "./static/js/35.ac1cef18.chunk.js",
"static/js/36.7cc35780.chunk.js": "./static/js/36.7cc35780.chunk.js",
"static/js/37.9a0fa663.chunk.js": "./static/js/37.9a0fa663.chunk.js",
"static/js/38.38a4fc1c.chunk.js": "./static/js/38.38a4fc1c.chunk.js",
"static/js/39.f82b47e6.chunk.js": "./static/js/39.f82b47e6.chunk.js",
"static/js/40.b340d583.chunk.js": "./static/js/40.b340d583.chunk.js",
"static/js/41.5a800b04.chunk.js": "./static/js/41.5a800b04.chunk.js",
"static/js/42.b82cbf32.chunk.js": "./static/js/42.b82cbf32.chunk.js",
"static/js/43.49714bd3.chunk.js": "./static/js/43.49714bd3.chunk.js",
"static/js/44.0610ef82.chunk.js": "./static/js/44.0610ef82.chunk.js",
"static/js/45.5288fbb8.chunk.js": "./static/js/45.5288fbb8.chunk.js",
"static/js/46.eef65dad.chunk.js": "./static/js/46.eef65dad.chunk.js",
"static/js/47.ffeb2115.chunk.js": "./static/js/47.ffeb2115.chunk.js",
"static/js/48.58b30d2d.chunk.js": "./static/js/48.58b30d2d.chunk.js",
"static/js/49.d97f97ea.chunk.js": "./static/js/49.d97f97ea.chunk.js",
"static/js/50.cabae275.chunk.js": "./static/js/50.cabae275.chunk.js",
"static/js/51.32f41a56.chunk.js": "./static/js/51.32f41a56.chunk.js",
"static/js/52.f0059fa2.chunk.js": "./static/js/52.f0059fa2.chunk.js",
"static/js/53.4fc844bd.chunk.js": "./static/js/53.4fc844bd.chunk.js",
"static/js/54.c93490c7.chunk.js": "./static/js/54.c93490c7.chunk.js",
"static/js/55.6712ed93.chunk.js": "./static/js/55.6712ed93.chunk.js",
"static/js/56.da61cf62.chunk.js": "./static/js/56.da61cf62.chunk.js",
"static/js/57.e1a67ad2.chunk.js": "./static/js/57.e1a67ad2.chunk.js",
"static/js/58.a7af1415.chunk.js": "./static/js/58.a7af1415.chunk.js",
"static/js/59.590a1059.chunk.js": "./static/js/59.590a1059.chunk.js",
"static/js/60.b8514a46.chunk.js": "./static/js/60.b8514a46.chunk.js",
"static/js/61.f34e04ea.chunk.js": "./static/js/61.f34e04ea.chunk.js",
"static/js/62.05979145.chunk.js": "./static/js/62.05979145.chunk.js",
"static/js/63.38d34785.chunk.js": "./static/js/63.38d34785.chunk.js",
"static/js/64.5cd3e280.chunk.js": "./static/js/64.5cd3e280.chunk.js",
"static/js/65.5e8a6c68.chunk.js": "./static/js/65.5e8a6c68.chunk.js",
"static/js/66.140eb170.chunk.js": "./static/js/66.140eb170.chunk.js",
"static/js/67.edd6ecc9.chunk.js": "./static/js/67.edd6ecc9.chunk.js",
"static/js/68.9ae0a905.chunk.js": "./static/js/68.9ae0a905.chunk.js",
"static/js/69.2ef1ba59.chunk.js": "./static/js/69.2ef1ba59.chunk.js",
"static/js/70.eed36e20.chunk.js": "./static/js/70.eed36e20.chunk.js",
"static/js/71.fccc7c93.chunk.js": "./static/js/71.fccc7c93.chunk.js",
"static/js/72.d9705d79.chunk.js": "./static/js/72.d9705d79.chunk.js",
"static/js/73.f884e2d5.chunk.js": "./static/js/73.f884e2d5.chunk.js",
"static/js/74.7ad55ae4.chunk.js": "./static/js/74.7ad55ae4.chunk.js",
"static/js/75.b701bc2a.chunk.js": "./static/js/75.b701bc2a.chunk.js",
"static/js/76.91deb0d6.chunk.js": "./static/js/76.91deb0d6.chunk.js",
"css.worker.js": "./css.worker.js",
"editor.worker.js": "./editor.worker.js",
"html.worker.js": "./html.worker.js",
"index.html": "./index.html",
"json.worker.js": "./json.worker.js",
"precache-manifest.2513bae5eac7346a25b703a4352a1fbe.js": "./precache-manifest.2513bae5eac7346a25b703a4352a1fbe.js",
"schema.worker.js.LICENSE.txt": "./schema.worker.js.LICENSE.txt",
"service-worker.js": "./service-worker.js",
"static/js/0.5fec78fb.chunk.js.LICENSE.txt": "./static/js/0.5fec78fb.chunk.js.LICENSE.txt",
"static/js/69.2ef1ba59.chunk.js.LICENSE.txt": "./static/js/69.2ef1ba59.chunk.js.LICENSE.txt",
"static/js/7.1dd7a0a2.chunk.js.LICENSE.txt": "./static/js/7.1dd7a0a2.chunk.js.LICENSE.txt",
"static/js/8.7fd097f7.chunk.js.LICENSE.txt": "./static/js/8.7fd097f7.chunk.js.LICENSE.txt",
"static/media/codicon.css": "./static/media/codicon.22349029.ttf",
"ts.worker.js": "./ts.worker.js",
"ts.worker.js.LICENSE.txt": "./ts.worker.js.LICENSE.txt"
},
"entrypoints": [
"static/js/runtime-main.e5a2cdf5.js",
"static/js/0.5fec78fb.chunk.js",
"static/css/7.82f2daa0.chunk.css",
"static/js/7.1dd7a0a2.chunk.js",
"static/css/main.cc3afb38.chunk.css",
"static/js/main.0605b397.chunk.js"
]
}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.

0 comments on commit 8673af5

Please sign in to comment.