Compare commits

..

40 Commits

Author SHA1 Message Date
Ryan Brandenburg
2c81117b4b Merge remote-tracking branch 'origin/release/2.1' into rybrande/MergeRelease21IntoDev 2018-04-16 14:40:52 -07:00
Steve Sanderson
4d151a599e Dynamically expand timeout when waiting for Angular CLI to be ready. Fixes #1611 2018-04-16 14:54:52 +01:00
Tadas Mazutis
78f7dccfab Performance fix
- Usage of resolved loopback IP address instead of 'localhost'

Addresses #1588
2018-04-16 14:45:16 +01:00
ASP.NET CI
7f550fb469 Update dependencies.props
[auto-updated: dependencies]
2018-04-15 14:16:02 -07:00
ASP.NET CI
087a459c9c Update dependencies.props
[auto-updated: dependencies]
2018-04-03 22:32:08 +00:00
Nate McMaster (automated)
f22297a4db Update dependencies.props
[auto-updated: dependencies]
2018-03-28 10:51:38 -07:00
ASP.NET CI
61b4951961 Update dependencies.props
[auto-updated: dependencies]
2018-03-25 15:44:49 -07:00
Nate McMaster
02beb11a5c Merge branch 'release/2.1' into dev 2018-03-21 10:35:53 -07:00
Nate McMaster
c42db123bd Add NuGetPackageVerifier 2018-03-21 10:35:29 -07:00
Pranav K
04b8c17bdd Merge branch 'release/2.1' into dev 2018-03-16 12:30:48 -07:00
Pranav K
8583f205f9 Update KoreBuild channel 2018-03-16 12:30:44 -07:00
Pranav K
e6af1b892e Update version prefix to preview3 2018-03-16 11:26:52 -07:00
Pranav K
24766621e1 Merge remote-tracking branch 'origin/release/2.1' into dev 2018-03-16 11:26:52 -07:00
Pranav K
ae4c4d6e8f Branching for 2.1.0-preview2 2018-03-16 11:15:16 -07:00
Ryan Brandenburg
8553647ce8 Set 2.0 baselines 2018-03-16 10:50:18 -07:00
ASP.NET CI
67560266ab Update dependencies.props
[auto-updated: dependencies]
2018-03-08 13:04:43 -08:00
Pranav K
ce49379afb Prepend FeatureBranchVersionPrefix if FeatureBranchVersionSuffix is specified 2018-03-06 10:04:26 -08:00
Pranav K
4dc05d96ac Use dotnet-core feed in repos 2018-03-06 10:04:26 -08:00
Nate McMaster
53742ad649 Merge branch 'release/2.1' into dev 2018-03-02 14:26:50 -08:00
ASP.NET CI
91a1d83acd Update dependencies.props
[auto-updated: dependencies]
2018-02-26 11:06:22 -08:00
Pranav K
1d504e4565 Use FeatureBranchVersionSuffix when generating VersionSuffix 2018-02-21 18:27:00 -08:00
Steve Sanderson
873cfa9adf In SpaProxy, don't fail if there are non-forwardable headers. Fixes #1543. 2018-02-21 14:03:30 +00:00
ASP.NET CI
41b8642c2d Update dependencies.props
[auto-updated: dependencies]
2018-02-18 12:22:24 -08:00
ASP.NET CI
d6b67ca75d Update dependencies.props
[auto-updated: dependencies]
2018-02-11 12:29:16 -08:00
ASP.NET CI
4af70a0907 Update dependencies.props
[auto-updated: dependencies]
2018-02-09 11:47:59 -08:00
Steve Sanderson
bf5f40b1ed In Websocket proxy, don't forward User-Agent. Fixes #1469. 2018-02-08 11:40:14 +00:00
ASP.NET CI
a515f6bb0a Update dependencies.props
[auto-updated: dependencies]
2018-02-03 02:51:14 +00:00
ASP.NET CI
12a2314a5e Update dependencies.props
[auto-updated: dependencies]
2018-02-01 03:41:40 +00:00
Steve Sanderson
dbaa453d18 Bump aspnet-webpack version to 2.0.3 for release 2018-01-25 12:58:55 -08:00
Steve Sanderson
b2373e157e Support Webpack configs authored in TypeScript. Covers #1301 2018-01-25 12:14:43 -08:00
Steve Sanderson
08c2f231ea Bump aspnet-webpack version to 2.0.2. Also, further minor tweak to TypeScript annotations. 2018-01-24 17:49:51 -08:00
Steve Sanderson
6274733565 TypeScript annotation fixes 2018-01-24 17:44:47 -08:00
waterfoul
5f6f288056 Added support for Thenables 2018-01-24 17:26:38 -08:00
Steve Sanderson
78e583d0fb Comment and XML doc tweaks 2018-01-24 17:00:59 -08:00
Jordan McDonald
7c07beb494 adding support to pass Env param to webpack 2018-01-24 17:00:59 -08:00
Sławomir Rosiek
e7ffb8bb71 Returning provided promise in addTask 2018-01-25 00:42:58 +00:00
Steve Sanderson
3e6f7f3e45 Loosen aspnet-webpack peerDependency requirement back to cover what it allowed before (so it's not a breaking change) 2018-01-24 16:39:20 -08:00
Keven van Zuijlen
0d83504863 Bump webpack peerDependency version so NPM doesn't give a warning 2018-01-24 16:38:08 -08:00
Pranav K
370b5f7341 Updating version to preview2 2018-01-24 15:00:28 -08:00
Pranav K
0b53b92bc6 Merge branch 'release/2.1' into dev 2018-01-23 15:49:47 -08:00
20 changed files with 2480 additions and 936 deletions

View File

@@ -0,0 +1,7 @@
{
"Default": {
"rules": [
"DefaultCompositeRule"
]
}
}

View File

@@ -3,25 +3,25 @@
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects> <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Package Versions"> <PropertyGroup Label="Package Versions">
<InternalAspNetCoreSdkPackageVersion>2.1.0-preview1-1010</InternalAspNetCoreSdkPackageVersion> <InternalAspNetCoreSdkPackageVersion>2.1.0-preview3-17018</InternalAspNetCoreSdkPackageVersion>
<MicrosoftAspNetCoreDiagnosticsPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreDiagnosticsPackageVersion> <MicrosoftAspNetCoreDiagnosticsPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreDiagnosticsPackageVersion>
<MicrosoftAspNetCoreHostingAbstractionsPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreHostingAbstractionsPackageVersion> <MicrosoftAspNetCoreHostingAbstractionsPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreHostingAbstractionsPackageVersion>
<MicrosoftAspNetCoreHostingPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreHostingPackageVersion> <MicrosoftAspNetCoreHostingPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreHostingPackageVersion>
<MicrosoftAspNetCoreMvcPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreMvcPackageVersion> <MicrosoftAspNetCoreMvcPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreMvcPackageVersion>
<MicrosoftAspNetCoreMvcTagHelpersPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreMvcTagHelpersPackageVersion> <MicrosoftAspNetCoreMvcTagHelpersPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreMvcTagHelpersPackageVersion>
<MicrosoftAspNetCoreMvcViewFeaturesPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreMvcViewFeaturesPackageVersion> <MicrosoftAspNetCoreMvcViewFeaturesPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreMvcViewFeaturesPackageVersion>
<MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreServerIISIntegrationPackageVersion> <MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreServerKestrelPackageVersion> <MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreServerKestrelPackageVersion>
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreStaticFilesPackageVersion> <MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreStaticFilesPackageVersion>
<MicrosoftAspNetCoreWebSocketsPackageVersion>2.1.0-preview1-28193</MicrosoftAspNetCoreWebSocketsPackageVersion> <MicrosoftAspNetCoreWebSocketsPackageVersion>2.1.0-preview3-32233</MicrosoftAspNetCoreWebSocketsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>2.1.0-preview1-28193</MicrosoftExtensionsDependencyInjectionPackageVersion> <MicrosoftExtensionsDependencyInjectionPackageVersion>2.1.0-preview3-32233</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>2.1.0-preview1-28193</MicrosoftExtensionsFileProvidersPhysicalPackageVersion> <MicrosoftExtensionsFileProvidersPhysicalPackageVersion>2.1.0-preview3-32233</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview1-28193</MicrosoftExtensionsLoggingConsolePackageVersion> <MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview3-32233</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>2.1.0-preview1-28193</MicrosoftExtensionsLoggingDebugPackageVersion> <MicrosoftExtensionsLoggingDebugPackageVersion>2.1.0-preview3-32233</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion> <MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion>
<MicrosoftNETCoreApp21PackageVersion>2.1.0-preview1-26122-01</MicrosoftNETCoreApp21PackageVersion> <MicrosoftNETCoreApp21PackageVersion>2.1.0-preview3-26413-05</MicrosoftNETCoreApp21PackageVersion>
<NewtonsoftJsonPackageVersion>10.0.1</NewtonsoftJsonPackageVersion> <NewtonsoftJsonPackageVersion>11.0.2</NewtonsoftJsonPackageVersion>
<SystemThreadingTasksDataflowPackageVersion>4.9.0-preview1-26119-06</SystemThreadingTasksDataflowPackageVersion> <SystemThreadingTasksDataflowPackageVersion>4.9.0-preview3-26413-02</SystemThreadingTasksDataflowPackageVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " /> <Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
</Project> </Project>

View File

@@ -1,10 +1,10 @@
<Project> <Project>
<Import Project="dependencies.props" /> <Import Project="dependencies.props" />
<PropertyGroup> <PropertyGroup>
<!-- These properties are use by the automation that updates dependencies.props --> <!-- These properties are use by the automation that updates dependencies.props -->
<LineupPackageId>Internal.AspNetCore.Universe.Lineup</LineupPackageId> <LineupPackageId>Internal.AspNetCore.Universe.Lineup</LineupPackageId>
<LineupPackageRestoreSource>https://dotnet.myget.org/F/aspnetcore-release/api/v3/index.json</LineupPackageRestoreSource> <LineupPackageRestoreSource>https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json</LineupPackageRestoreSource>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@@ -5,7 +5,8 @@
<RestoreSources>$(DotNetRestoreSources)</RestoreSources> <RestoreSources>$(DotNetRestoreSources)</RestoreSources>
<RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' "> <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' ">
$(RestoreSources); $(RestoreSources);
https://dotnet.myget.org/F/aspnetcore-release/api/v3/index.json; https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json; https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
</RestoreSources> </RestoreSources>
<RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'"> <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'">

View File

@@ -1,2 +1,2 @@
version:2.1.0-preview1-1010 version:2.1.0-preview3-17018
commithash:75ca924dfbd673c38841025b04c4dcd93b84f56d commithash:af264ca131f212b5ba8aafbc5110fc0fc510a2be

View File

@@ -1,6 +1,6 @@
{ {
"$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/release/2.1/tools/korebuild.schema.json", "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/dev/tools/korebuild.schema.json",
"channel": "release/2.1", "channel": "dev",
"toolsets": { "toolsets": {
"nodejs": { "nodejs": {
"required": true, "required": true,

View File

@@ -0,0 +1,109 @@
{
"AssemblyIdentity": "Microsoft.AspNetCore.NodeServices.Sockets, Version=2.0.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
"Types": [
{
"Name": "Microsoft.AspNetCore.NodeServices.Sockets.NodeServicesOptionsExtensions",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "UseSocketHosting",
"Parameters": [
{
"Name": "options",
"Type": "Microsoft.AspNetCore.NodeServices.NodeServicesOptions"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.Sockets.VirtualConnections.VirtualConnectionReadErrorHandler",
"Visibility": "Public",
"Kind": "Class",
"Sealed": true,
"BaseType": "System.MulticastDelegate",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "Invoke",
"Parameters": [
{
"Name": "ex",
"Type": "System.Exception"
}
],
"ReturnType": "System.Void",
"Virtual": true,
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "BeginInvoke",
"Parameters": [
{
"Name": "ex",
"Type": "System.Exception"
},
{
"Name": "callback",
"Type": "System.AsyncCallback"
},
{
"Name": "object",
"Type": "System.Object"
}
],
"ReturnType": "System.IAsyncResult",
"Virtual": true,
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "EndInvoke",
"Parameters": [
{
"Name": "result",
"Type": "System.IAsyncResult"
}
],
"ReturnType": "System.Void",
"Virtual": true,
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "object",
"Type": "System.Object"
},
{
"Name": "method",
"Type": "System.IntPtr"
}
],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
}
]
}

View File

@@ -121,8 +121,8 @@
var parsedArgs = ArgsUtil_1.parseArgs(process.argv); var parsedArgs = ArgsUtil_1.parseArgs(process.argv);
var requestedPortOrZero = parsedArgs.port || 0; // 0 means 'let the OS decide' var requestedPortOrZero = parsedArgs.port || 0; // 0 means 'let the OS decide'
server.listen(requestedPortOrZero, 'localhost', function () { server.listen(requestedPortOrZero, 'localhost', function () {
// Signal to HttpNodeHost which port it should make its HTTP connections on // Signal to HttpNodeHost which loopback IP address (IPv4 or IPv6) and port it should make its HTTP connections on
console.log('[Microsoft.AspNetCore.NodeServices.HttpNodeHost:Listening on port ' + server.address().port + '\]'); console.log('[Microsoft.AspNetCore.NodeServices.HttpNodeHost:Listening on {' + server.address().address + '} port ' + server.address().port + '\]');
// Signal to the NodeServices base class that we're ready to accept invocations // Signal to the NodeServices base class that we're ready to accept invocations
console.log('[Microsoft.AspNetCore.NodeServices:Listening]'); console.log('[Microsoft.AspNetCore.NodeServices:Listening]');
}); });

View File

@@ -21,8 +21,8 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
/// <seealso cref="Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance" /> /// <seealso cref="Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance" />
internal class HttpNodeInstance : OutOfProcessNodeInstance internal class HttpNodeInstance : OutOfProcessNodeInstance
{ {
private static readonly Regex PortMessageRegex = private static readonly Regex EndpointMessageRegex =
new Regex(@"^\[Microsoft.AspNetCore.NodeServices.HttpNodeHost:Listening on port (\d+)\]$"); new Regex(@"^\[Microsoft.AspNetCore.NodeServices.HttpNodeHost:Listening on {(.*?)} port (\d+)\]$");
private static readonly JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings private static readonly JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
{ {
@@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
private readonly HttpClient _client; private readonly HttpClient _client;
private bool _disposed; private bool _disposed;
private int _portNumber; private string _endpoint;
public HttpNodeInstance(NodeServicesOptions options, int port = 0) public HttpNodeInstance(NodeServicesOptions options, int port = 0)
: base( : base(
@@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
{ {
var payloadJson = JsonConvert.SerializeObject(invocationInfo, jsonSerializerSettings); var payloadJson = JsonConvert.SerializeObject(invocationInfo, jsonSerializerSettings);
var payload = new StringContent(payloadJson, Encoding.UTF8, "application/json"); var payload = new StringContent(payloadJson, Encoding.UTF8, "application/json");
var response = await _client.PostAsync("http://localhost:" + _portNumber, payload, cancellationToken); var response = await _client.PostAsync(_endpoint, payload, cancellationToken);
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{ {
@@ -111,13 +111,19 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
protected override void OnOutputDataReceived(string outputData) protected override void OnOutputDataReceived(string outputData)
{ {
// Watch for "port selected" messages, and when observed, store the port number // Watch for "port selected" messages, and when observed,
// store the IP (IPv4/IPv6) and port number
// so we can use it when making HTTP requests. The child process will always send // so we can use it when making HTTP requests. The child process will always send
// one of these messages before it sends a "ready for connections" message. // one of these messages before it sends a "ready for connections" message.
var match = _portNumber != 0 ? null : PortMessageRegex.Match(outputData); var match = string.IsNullOrEmpty(_endpoint) ? EndpointMessageRegex.Match(outputData) : null;
if (match != null && match.Success) if (match != null && match.Success)
{ {
_portNumber = int.Parse(match.Groups[1].Captures[0].Value); var port = int.Parse(match.Groups[2].Captures[0].Value);
var resolvedIpAddress = match.Groups[1].Captures[0].Value;
//IPv6 must be wrapped with [] brackets
resolvedIpAddress = resolvedIpAddress == "::1" ? $"[{resolvedIpAddress}]" : resolvedIpAddress;
_endpoint = $"http://{resolvedIpAddress}:{port}";
} }
else else
{ {

View File

@@ -70,8 +70,8 @@ const server = http.createServer((req, res) => {
const parsedArgs = parseArgs(process.argv); const parsedArgs = parseArgs(process.argv);
const requestedPortOrZero = parsedArgs.port || 0; // 0 means 'let the OS decide' const requestedPortOrZero = parsedArgs.port || 0; // 0 means 'let the OS decide'
server.listen(requestedPortOrZero, 'localhost', function () { server.listen(requestedPortOrZero, 'localhost', function () {
// Signal to HttpNodeHost which port it should make its HTTP connections on // Signal to HttpNodeHost which loopback IP address (IPv4 or IPv6) and port it should make its HTTP connections on
console.log('[Microsoft.AspNetCore.NodeServices.HttpNodeHost:Listening on port ' + server.address().port + '\]'); console.log('[Microsoft.AspNetCore.NodeServices.HttpNodeHost:Listening on {' + server.address().address + '} port ' + server.address().port + '\]');
// Signal to the NodeServices base class that we're ready to accept invocations // Signal to the NodeServices base class that we're ready to accept invocations
console.log('[Microsoft.AspNetCore.NodeServices:Listening]'); console.log('[Microsoft.AspNetCore.NodeServices:Listening]');

View File

@@ -0,0 +1,935 @@
{
"AssemblyIdentity": "Microsoft.AspNetCore.NodeServices, Version=2.0.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
"Types": [
{
"Name": "Microsoft.Extensions.DependencyInjection.NodeServicesServiceCollectionExtensions",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "AddNodeServices",
"Parameters": [
{
"Name": "serviceCollection",
"Type": "Microsoft.Extensions.DependencyInjection.IServiceCollection"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "AddNodeServices",
"Parameters": [
{
"Name": "serviceCollection",
"Type": "Microsoft.Extensions.DependencyInjection.IServiceCollection"
},
{
"Name": "setupAction",
"Type": "System.Action<Microsoft.AspNetCore.NodeServices.NodeServicesOptions>"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.NodeServicesFactory",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "CreateNodeServices",
"Parameters": [
{
"Name": "options",
"Type": "Microsoft.AspNetCore.NodeServices.NodeServicesOptions"
}
],
"ReturnType": "Microsoft.AspNetCore.NodeServices.INodeServices",
"Static": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.NodeServicesOptions",
"Visibility": "Public",
"Kind": "Class",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_NodeInstanceFactory",
"Parameters": [],
"ReturnType": "System.Func<Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance>",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_NodeInstanceFactory",
"Parameters": [
{
"Name": "value",
"Type": "System.Func<Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance>"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ProjectPath",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ProjectPath",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_WatchFileExtensions",
"Parameters": [],
"ReturnType": "System.String[]",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_WatchFileExtensions",
"Parameters": [
{
"Name": "value",
"Type": "System.String[]"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_NodeInstanceOutputLogger",
"Parameters": [],
"ReturnType": "Microsoft.Extensions.Logging.ILogger",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_NodeInstanceOutputLogger",
"Parameters": [
{
"Name": "value",
"Type": "Microsoft.Extensions.Logging.ILogger"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_LaunchWithDebugging",
"Parameters": [],
"ReturnType": "System.Boolean",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_LaunchWithDebugging",
"Parameters": [
{
"Name": "value",
"Type": "System.Boolean"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_DebuggingPort",
"Parameters": [],
"ReturnType": "System.Int32",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_DebuggingPort",
"Parameters": [
{
"Name": "value",
"Type": "System.Int32"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_EnvironmentVariables",
"Parameters": [],
"ReturnType": "System.Collections.Generic.IDictionary<System.String, System.String>",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_EnvironmentVariables",
"Parameters": [
{
"Name": "value",
"Type": "System.Collections.Generic.IDictionary<System.String, System.String>"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_InvocationTimeoutMilliseconds",
"Parameters": [],
"ReturnType": "System.Int32",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_InvocationTimeoutMilliseconds",
"Parameters": [
{
"Name": "value",
"Type": "System.Int32"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ApplicationStoppingToken",
"Parameters": [],
"ReturnType": "System.Threading.CancellationToken",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ApplicationStoppingToken",
"Parameters": [
{
"Name": "value",
"Type": "System.Threading.CancellationToken"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "serviceProvider",
"Type": "System.IServiceProvider"
}
],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.INodeServices",
"Visibility": "Public",
"Kind": "Interface",
"Abstract": true,
"ImplementedInterfaces": [
"System.IDisposable"
],
"Members": [
{
"Kind": "Method",
"Name": "InvokeAsync<T0>",
"Parameters": [
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "args",
"Type": "System.Object[]",
"IsParams": true
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
},
{
"Kind": "Method",
"Name": "InvokeAsync<T0>",
"Parameters": [
{
"Name": "cancellationToken",
"Type": "System.Threading.CancellationToken"
},
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "args",
"Type": "System.Object[]",
"IsParams": true
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
},
{
"Kind": "Method",
"Name": "InvokeExportAsync<T0>",
"Parameters": [
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "exportedFunctionName",
"Type": "System.String"
},
{
"Name": "args",
"Type": "System.Object[]",
"IsParams": true
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
},
{
"Kind": "Method",
"Name": "InvokeExportAsync<T0>",
"Parameters": [
{
"Name": "cancellationToken",
"Type": "System.Threading.CancellationToken"
},
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "exportedFunctionName",
"Type": "System.String"
},
{
"Name": "args",
"Type": "System.Object[]",
"IsParams": true
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.EmbeddedResourceReader",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "Read",
"Parameters": [
{
"Name": "assemblyContainingType",
"Type": "System.Type"
},
{
"Name": "path",
"Type": "System.String"
}
],
"ReturnType": "System.String",
"Static": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.StringAsTempFile",
"Visibility": "Public",
"Kind": "Class",
"Sealed": true,
"ImplementedInterfaces": [
"System.IDisposable"
],
"Members": [
{
"Kind": "Method",
"Name": "get_FileName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "Dispose",
"Parameters": [],
"ReturnType": "System.Void",
"Sealed": true,
"Virtual": true,
"ImplementedInterface": "System.IDisposable",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "Finalize",
"Parameters": [],
"ReturnType": "System.Void",
"Virtual": true,
"Override": true,
"Visibility": "Protected",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "content",
"Type": "System.String"
},
{
"Name": "applicationStoppingToken",
"Type": "System.Threading.CancellationToken"
}
],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance",
"Visibility": "Public",
"Kind": "Interface",
"Abstract": true,
"ImplementedInterfaces": [
"System.IDisposable"
],
"Members": [
{
"Kind": "Method",
"Name": "InvokeExportAsync<T0>",
"Parameters": [
{
"Name": "cancellationToken",
"Type": "System.Threading.CancellationToken"
},
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "exportNameOrNull",
"Type": "System.String"
},
{
"Name": "args",
"Type": "System.Object[]",
"IsParams": true
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException",
"Visibility": "Public",
"Kind": "Class",
"BaseType": "System.Exception",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_NodeInstanceUnavailable",
"Parameters": [],
"ReturnType": "System.Boolean",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_AllowConnectionDraining",
"Parameters": [],
"ReturnType": "System.Boolean",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "message",
"Type": "System.String"
},
{
"Name": "details",
"Type": "System.String"
}
],
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "message",
"Type": "System.String"
},
{
"Name": "details",
"Type": "System.String"
},
{
"Name": "nodeInstanceUnavailable",
"Type": "System.Boolean"
},
{
"Name": "allowConnectionDraining",
"Type": "System.Boolean"
}
],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationInfo",
"Visibility": "Public",
"Kind": "Class",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_ModuleName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ModuleName",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ExportedFunctionName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ExportedFunctionName",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_Args",
"Parameters": [],
"ReturnType": "System.Object[]",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_Args",
"Parameters": [
{
"Name": "value",
"Type": "System.Object[]"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.HostingModels.NodeServicesOptionsExtensions",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "UseHttpHosting",
"Parameters": [
{
"Name": "options",
"Type": "Microsoft.AspNetCore.NodeServices.NodeServicesOptions"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"ImplementedInterfaces": [
"Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance"
],
"Members": [
{
"Kind": "Method",
"Name": "InvokeExportAsync<T0>",
"Parameters": [
{
"Name": "cancellationToken",
"Type": "System.Threading.CancellationToken"
},
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "exportNameOrNull",
"Type": "System.String"
},
{
"Name": "args",
"Type": "System.Object[]",
"IsParams": true
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"Sealed": true,
"Virtual": true,
"ImplementedInterface": "Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance",
"Visibility": "Public",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
},
{
"Kind": "Method",
"Name": "Dispose",
"Parameters": [],
"ReturnType": "System.Void",
"Sealed": true,
"Virtual": true,
"ImplementedInterface": "System.IDisposable",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "InvokeExportAsync<T0>",
"Parameters": [
{
"Name": "invocationInfo",
"Type": "Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationInfo"
},
{
"Name": "cancellationToken",
"Type": "System.Threading.CancellationToken"
}
],
"ReturnType": "System.Threading.Tasks.Task<T0>",
"Virtual": true,
"Abstract": true,
"Visibility": "Protected",
"GenericParameter": [
{
"ParameterName": "T",
"ParameterPosition": 0,
"BaseTypeOrInterfaces": []
}
]
},
{
"Kind": "Method",
"Name": "PrepareNodeProcessStartInfo",
"Parameters": [
{
"Name": "entryPointFilename",
"Type": "System.String"
},
{
"Name": "projectPath",
"Type": "System.String"
},
{
"Name": "commandLineArguments",
"Type": "System.String"
},
{
"Name": "environmentVars",
"Type": "System.Collections.Generic.IDictionary<System.String, System.String>"
},
{
"Name": "launchWithDebugging",
"Type": "System.Boolean"
},
{
"Name": "debuggingPort",
"Type": "System.Int32"
}
],
"ReturnType": "System.Diagnostics.ProcessStartInfo",
"Virtual": true,
"Visibility": "Protected",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "OnOutputDataReceived",
"Parameters": [
{
"Name": "outputData",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Virtual": true,
"Visibility": "Protected",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "OnErrorDataReceived",
"Parameters": [
{
"Name": "errorData",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Virtual": true,
"Visibility": "Protected",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "Dispose",
"Parameters": [
{
"Name": "disposing",
"Type": "System.Boolean"
}
],
"ReturnType": "System.Void",
"Virtual": true,
"Visibility": "Protected",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "Finalize",
"Parameters": [],
"ReturnType": "System.Void",
"Virtual": true,
"Override": true,
"Visibility": "Protected",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "entryPointScript",
"Type": "System.String"
},
{
"Name": "projectPath",
"Type": "System.String"
},
{
"Name": "watchFileExtensions",
"Type": "System.String[]"
},
{
"Name": "commandLineArguments",
"Type": "System.String"
},
{
"Name": "applicationStoppingToken",
"Type": "System.Threading.CancellationToken"
},
{
"Name": "nodeOutputLogger",
"Type": "Microsoft.Extensions.Logging.ILogger"
},
{
"Name": "environmentVars",
"Type": "System.Collections.Generic.IDictionary<System.String, System.String>"
},
{
"Name": "invocationTimeoutMilliseconds",
"Type": "System.Int32"
},
{
"Name": "launchWithDebugging",
"Type": "System.Boolean"
},
{
"Name": "debuggingPort",
"Type": "System.Int32"
}
],
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Field",
"Name": "OutputLogger",
"Parameters": [],
"ReturnType": "Microsoft.Extensions.Logging.ILogger",
"ReadOnly": true,
"Visibility": "Protected",
"GenericParameter": []
}
],
"GenericParameters": []
}
]
}

View File

@@ -105,6 +105,7 @@ namespace Microsoft.AspNetCore.SpaServices.AngularCli
// connection then it's not ready. We keep trying forever because this is dev-mode // connection then it's not ready. We keep trying forever because this is dev-mode
// only, and only a single startup attempt will be made, and there's a further level // only, and only a single startup attempt will be made, and there's a further level
// of timeouts enforced on a per-request basis. // of timeouts enforced on a per-request basis.
var timeoutMilliseconds = 1000;
using (var client = new HttpClient()) using (var client = new HttpClient())
{ {
while (true) while (true)
@@ -114,12 +115,23 @@ namespace Microsoft.AspNetCore.SpaServices.AngularCli
// If we get any HTTP response, the CLI server is ready // If we get any HTTP response, the CLI server is ready
await client.SendAsync( await client.SendAsync(
new HttpRequestMessage(HttpMethod.Head, cliServerUri), new HttpRequestMessage(HttpMethod.Head, cliServerUri),
new CancellationTokenSource(1000).Token); new CancellationTokenSource(timeoutMilliseconds).Token);
return; return;
} }
catch (Exception) catch (Exception)
{ {
await Task.Delay(1000); // 1 second await Task.Delay(500);
// Depending on the host's networking configuration, the requests can take a while
// to go through, most likely due to the time spent resolving 'localhost'.
// Each time we have a failure, allow a bit longer next time (up to a maximum).
// This only influences the time until we regard the dev server as 'ready', so it
// doesn't affect the runtime perf (even in dev mode) once the first connection is made.
// Resolves https://github.com/aspnet/JavaScriptServices/issues/1611
if (timeoutMilliseconds < 10000)
{
timeoutMilliseconds += 3000;
}
} }
} }
} }

View File

@@ -22,7 +22,9 @@ namespace Microsoft.AspNetCore.SpaServices.Extensions.Proxy
private const int DefaultWebSocketBufferSize = 4096; private const int DefaultWebSocketBufferSize = 4096;
private const int StreamCopyBufferSize = 81920; private const int StreamCopyBufferSize = 81920;
private static readonly string[] NotForwardedWebSocketHeaders = new[] { "Connection", "Host", "Upgrade", "Sec-WebSocket-Key", "Sec-WebSocket-Version" }; // Don't forward User-Agent/Accept because of https://github.com/aspnet/JavaScriptServices/issues/1469
// Others just aren't applicable in proxy scenarios
private static readonly string[] NotForwardedWebSocketHeaders = new[] { "Accept", "Connection", "Host", "User-Agent", "Upgrade", "Sec-WebSocket-Key", "Sec-WebSocket-Version" };
public static HttpClient CreateHttpClientForProxy(TimeSpan requestTimeout) public static HttpClient CreateHttpClientForProxy(TimeSpan requestTimeout)
{ {
@@ -203,9 +205,21 @@ namespace Microsoft.AspNetCore.SpaServices.Extensions.Proxy
foreach (var headerEntry in context.Request.Headers) foreach (var headerEntry in context.Request.Headers)
{ {
if (!NotForwardedWebSocketHeaders.Contains(headerEntry.Key, StringComparer.OrdinalIgnoreCase)) if (!NotForwardedWebSocketHeaders.Contains(headerEntry.Key, StringComparer.OrdinalIgnoreCase))
{
try
{ {
client.Options.SetRequestHeader(headerEntry.Key, headerEntry.Value); client.Options.SetRequestHeader(headerEntry.Key, headerEntry.Value);
} }
catch (ArgumentException)
{
// On net461, certain header names are reserved and can't be set.
// We filter out the known ones via the test above, but there could
// be others arbitrarily set by the client. It's not helpful to
// consider it an error, so just skip non-forwardable headers.
// The perf implications of handling this via a catch aren't an
// issue since this is a dev-time only feature.
}
}
} }
try try

View File

@@ -50,5 +50,12 @@ namespace Microsoft.AspNetCore.SpaServices.Webpack
/// the webpack compiler. /// the webpack compiler.
/// </summary> /// </summary>
public IDictionary<string, string> EnvironmentVariables { get; set; } public IDictionary<string, string> EnvironmentVariables { get; set; }
/// <summary>
/// Specifies a value for the "env" parameter to be passed into the Webpack configuration
/// function. The value must be JSON-serializable, and will only be used if the Webpack
/// configuration is exported as a function.
/// </summary>
public object EnvParam { get; set; }
} }
} }

View File

@@ -0,0 +1,730 @@
{
"AssemblyIdentity": "Microsoft.AspNetCore.SpaServices, Version=2.0.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
"Types": [
{
"Name": "Microsoft.Extensions.DependencyInjection.PrerenderingServiceCollectionExtensions",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "AddSpaPrerenderer",
"Parameters": [
{
"Name": "serviceCollection",
"Type": "Microsoft.Extensions.DependencyInjection.IServiceCollection"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.Builder.SpaRouteExtensions",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "MapSpaFallbackRoute",
"Parameters": [
{
"Name": "routeBuilder",
"Type": "Microsoft.AspNetCore.Routing.IRouteBuilder"
},
{
"Name": "name",
"Type": "System.String"
},
{
"Name": "defaults",
"Type": "System.Object"
},
{
"Name": "constraints",
"Type": "System.Object",
"DefaultValue": "null"
},
{
"Name": "dataTokens",
"Type": "System.Object",
"DefaultValue": "null"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "MapSpaFallbackRoute",
"Parameters": [
{
"Name": "routeBuilder",
"Type": "Microsoft.AspNetCore.Routing.IRouteBuilder"
},
{
"Name": "name",
"Type": "System.String"
},
{
"Name": "templatePrefix",
"Type": "System.String"
},
{
"Name": "defaults",
"Type": "System.Object"
},
{
"Name": "constraints",
"Type": "System.Object",
"DefaultValue": "null"
},
{
"Name": "dataTokens",
"Type": "System.Object",
"DefaultValue": "null"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.Builder.WebpackDevMiddleware",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "UseWebpackDevMiddleware",
"Parameters": [
{
"Name": "appBuilder",
"Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
},
{
"Name": "options",
"Type": "Microsoft.AspNetCore.SpaServices.Webpack.WebpackDevMiddlewareOptions",
"DefaultValue": "null"
}
],
"ReturnType": "System.Void",
"Static": true,
"Extension": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.SpaServices.Webpack.WebpackDevMiddlewareOptions",
"Visibility": "Public",
"Kind": "Class",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_HotModuleReplacement",
"Parameters": [],
"ReturnType": "System.Boolean",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_HotModuleReplacement",
"Parameters": [
{
"Name": "value",
"Type": "System.Boolean"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_HotModuleReplacementEndpoint",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_HotModuleReplacementEndpoint",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_HotModuleReplacementServerPort",
"Parameters": [],
"ReturnType": "System.Int32",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_HotModuleReplacementServerPort",
"Parameters": [
{
"Name": "value",
"Type": "System.Int32"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ReactHotModuleReplacement",
"Parameters": [],
"ReturnType": "System.Boolean",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ReactHotModuleReplacement",
"Parameters": [
{
"Name": "value",
"Type": "System.Boolean"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_HotModuleReplacementClientOptions",
"Parameters": [],
"ReturnType": "System.Collections.Generic.IDictionary<System.String, System.String>",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_HotModuleReplacementClientOptions",
"Parameters": [
{
"Name": "value",
"Type": "System.Collections.Generic.IDictionary<System.String, System.String>"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ConfigFile",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ConfigFile",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ProjectPath",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ProjectPath",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_EnvironmentVariables",
"Parameters": [],
"ReturnType": "System.Collections.Generic.IDictionary<System.String, System.String>",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_EnvironmentVariables",
"Parameters": [
{
"Name": "value",
"Type": "System.Collections.Generic.IDictionary<System.String, System.String>"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerenderer",
"Visibility": "Public",
"Kind": "Interface",
"Abstract": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "RenderToString",
"Parameters": [
{
"Name": "moduleName",
"Type": "System.String"
},
{
"Name": "exportName",
"Type": "System.String",
"DefaultValue": "null"
},
{
"Name": "customDataParameter",
"Type": "System.Object",
"DefaultValue": "null"
},
{
"Name": "timeoutMilliseconds",
"Type": "System.Int32",
"DefaultValue": "0"
}
],
"ReturnType": "System.Threading.Tasks.Task<Microsoft.AspNetCore.SpaServices.Prerendering.RenderToStringResult>",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.SpaServices.Prerendering.JavaScriptModuleExport",
"Visibility": "Public",
"Kind": "Class",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_ModuleName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ExportName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ExportName",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "moduleName",
"Type": "System.String"
}
],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.SpaServices.Prerendering.Prerenderer",
"Visibility": "Public",
"Kind": "Class",
"Abstract": true,
"Static": true,
"Sealed": true,
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "RenderToString",
"Parameters": [
{
"Name": "applicationBasePath",
"Type": "System.String"
},
{
"Name": "nodeServices",
"Type": "Microsoft.AspNetCore.NodeServices.INodeServices"
},
{
"Name": "applicationStoppingToken",
"Type": "System.Threading.CancellationToken"
},
{
"Name": "bootModule",
"Type": "Microsoft.AspNetCore.SpaServices.Prerendering.JavaScriptModuleExport"
},
{
"Name": "requestAbsoluteUrl",
"Type": "System.String"
},
{
"Name": "requestPathAndQuery",
"Type": "System.String"
},
{
"Name": "customDataParameter",
"Type": "System.Object"
},
{
"Name": "timeoutMilliseconds",
"Type": "System.Int32"
},
{
"Name": "requestPathBase",
"Type": "System.String"
}
],
"ReturnType": "System.Threading.Tasks.Task<Microsoft.AspNetCore.SpaServices.Prerendering.RenderToStringResult>",
"Static": true,
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper",
"Visibility": "Public",
"Kind": "Class",
"BaseType": "Microsoft.AspNetCore.Razor.TagHelpers.TagHelper",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_ModuleName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ModuleName",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ExportName",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ExportName",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_CustomDataParameter",
"Parameters": [],
"ReturnType": "System.Object",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_CustomDataParameter",
"Parameters": [
{
"Name": "value",
"Type": "System.Object"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_TimeoutMillisecondsParameter",
"Parameters": [],
"ReturnType": "System.Int32",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_TimeoutMillisecondsParameter",
"Parameters": [
{
"Name": "value",
"Type": "System.Int32"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_ViewContext",
"Parameters": [],
"ReturnType": "Microsoft.AspNetCore.Mvc.Rendering.ViewContext",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_ViewContext",
"Parameters": [
{
"Name": "value",
"Type": "Microsoft.AspNetCore.Mvc.Rendering.ViewContext"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "ProcessAsync",
"Parameters": [
{
"Name": "context",
"Type": "Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext"
},
{
"Name": "output",
"Type": "Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput"
}
],
"ReturnType": "System.Threading.Tasks.Task",
"Virtual": true,
"Override": true,
"ImplementedInterface": "Microsoft.AspNetCore.Razor.TagHelpers.ITagHelperComponent",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [
{
"Name": "serviceProvider",
"Type": "System.IServiceProvider"
}
],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
},
{
"Name": "Microsoft.AspNetCore.SpaServices.Prerendering.RenderToStringResult",
"Visibility": "Public",
"Kind": "Class",
"ImplementedInterfaces": [],
"Members": [
{
"Kind": "Method",
"Name": "get_Globals",
"Parameters": [],
"ReturnType": "Newtonsoft.Json.Linq.JObject",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_Globals",
"Parameters": [
{
"Name": "value",
"Type": "Newtonsoft.Json.Linq.JObject"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_Html",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_Html",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_RedirectUrl",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_RedirectUrl",
"Parameters": [
{
"Name": "value",
"Type": "System.String"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "get_StatusCode",
"Parameters": [],
"ReturnType": "System.Nullable<System.Int32>",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "set_StatusCode",
"Parameters": [
{
"Name": "value",
"Type": "System.Nullable<System.Int32>"
}
],
"ReturnType": "System.Void",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Method",
"Name": "CreateGlobalsAssignmentScript",
"Parameters": [],
"ReturnType": "System.String",
"Visibility": "Public",
"GenericParameter": []
},
{
"Kind": "Constructor",
"Name": ".ctor",
"Parameters": [],
"Visibility": "Public",
"GenericParameter": []
}
],
"GenericParameters": []
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "aspnet-webpack", "name": "aspnet-webpack",
"version": "2.0.1", "version": "2.0.3",
"description": "Helpers for using Webpack in ASP.NET Core projects. Works in conjunction with the Microsoft.AspNetCore.SpaServices NuGet package.", "description": "Helpers for using Webpack in ASP.NET Core projects. Works in conjunction with the Microsoft.AspNetCore.SpaServices NuGet package.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@@ -33,6 +33,6 @@
"webpack": "^1.13.2" "webpack": "^1.13.2"
}, },
"peerDependencies": { "peerDependencies": {
"webpack": "^1.13.2 || ^2.1.0-beta" "webpack": "^1.13.2 || ^2.1.0-beta || ^3.0.0"
} }
} }

View File

@@ -32,17 +32,28 @@ interface DevServerOptions {
HotModuleReplacementServerPort: number; HotModuleReplacementServerPort: number;
HotModuleReplacementClientOptions: StringMap<string>; HotModuleReplacementClientOptions: StringMap<string>;
ReactHotModuleReplacement: boolean; ReactHotModuleReplacement: boolean;
EnvParam: any;
} }
// We support these three kinds of webpack.config.js export. We don't currently support exported promises // Interface as defined in es6-promise
// (though we might be able to add that in the future, if there's a need). interface Thenable<T> {
type WebpackConfigOrArray = webpack.Configuration | webpack.Configuration[]; then<U>(onFulfilled?: (value: T) => U | Thenable<U>, onRejected?: (error: any) => U | Thenable<U>): Thenable<U>;
interface WebpackConfigFunc { then<U>(onFulfilled?: (value: T) => U | Thenable<U>, onRejected?: (error: any) => void): Thenable<U>;
(env?: any): WebpackConfigOrArray;
} }
type WebpackConfigExport = WebpackConfigOrArray | WebpackConfigFunc;
// We support these four kinds of webpack.config.js export
type WebpackConfigOrArray = webpack.Configuration | webpack.Configuration[];
type WebpackConfigOrArrayOrThenable = WebpackConfigOrArray | Thenable<WebpackConfigOrArray>;
interface WebpackConfigFunc {
(env?: any): WebpackConfigOrArrayOrThenable;
}
type WebpackConfigExport = WebpackConfigOrArrayOrThenable | WebpackConfigFunc;
type WebpackConfigModuleExports = WebpackConfigExport | EsModuleExports<WebpackConfigExport>; type WebpackConfigModuleExports = WebpackConfigExport | EsModuleExports<WebpackConfigExport>;
function isThenable<T>(obj: any): obj is Thenable<T> {
return obj && typeof (<Thenable<any>>obj).then === 'function';
}
function attachWebpackDevMiddleware(app: any, webpackConfig: webpack.Configuration, enableHotModuleReplacement: boolean, enableReactHotModuleReplacement: boolean, hmrClientOptions: StringMap<string>, hmrServerEndpoint: string) { function attachWebpackDevMiddleware(app: any, webpackConfig: webpack.Configuration, enableHotModuleReplacement: boolean, enableReactHotModuleReplacement: boolean, hmrClientOptions: StringMap<string>, hmrServerEndpoint: string) {
// Build the final Webpack config based on supplied options // Build the final Webpack config based on supplied options
if (enableHotModuleReplacement) { if (enableHotModuleReplacement) {
@@ -226,6 +237,15 @@ function beginWebpackWatcher(webpackConfig: webpack.Configuration) {
export function createWebpackDevServer(callback: CreateDevServerCallback, optionsJson: string) { export function createWebpackDevServer(callback: CreateDevServerCallback, optionsJson: string) {
const options: CreateDevServerOptions = JSON.parse(optionsJson); const options: CreateDevServerOptions = JSON.parse(optionsJson);
// Enable TypeScript loading if the webpack config is authored in TypeScript
if (path.extname(options.webpackConfigPath) === '.ts') {
try {
require('ts-node/register');
} catch (ex) {
throw new Error('Error while attempting to enable support for Webpack config file written in TypeScript. Make sure your project depends on the "ts-node" NPM package. The underlying error was: ' + ex.stack);
}
}
// See the large comment in WebpackTestPermissions.ts for details about this // See the large comment in WebpackTestPermissions.ts for details about this
if (!hasSufficientPermissions()) { if (!hasSufficientPermissions()) {
console.log('WARNING: Webpack dev middleware is not enabled because the server process does not have sufficient permissions. You should either remove the UseWebpackDevMiddleware call from your code, or to make it work, give your server process user account permission to write to your application directory and to read all ancestor-level directories.'); console.log('WARNING: Webpack dev middleware is not enabled because the server process does not have sufficient permissions. You should either remove the UseWebpackDevMiddleware call from your code, or to make it work, give your server process user account permission to write to your application directory and to read all ancestor-level directories.');
@@ -243,14 +263,20 @@ export function createWebpackDevServer(callback: CreateDevServerCallback, option
: (webpackConfigModuleExports as WebpackConfigExport); : (webpackConfigModuleExports as WebpackConfigExport);
if (webpackConfigExport instanceof Function) { if (webpackConfigExport instanceof Function) {
// If you export a function, we'll call it with an undefined 'env' arg, since we have nothing else // If you export a function, then Webpack convention is that it takes zero or one param,
// to pass. This is the same as what the webpack CLI tool does if you specify no '--env.x' values. // and that param is called `env` and reflects the `--env.*` args you can specify on
// In the future, we could add support for configuring the 'env' param in Startup.cs. But right // the command line (e.g., `--env.prod`).
// now, it's not clear that people will want to do that (and they can always make up their own // When invoking it via WebpackDevMiddleware, we let you configure the `env` param in
// default env values in their webpack.config.js). // your Startup.cs.
webpackConfigExport = webpackConfigExport(); webpackConfigExport = webpackConfigExport(options.suppliedOptions.EnvParam);
} }
const webpackConfigArray = webpackConfigExport instanceof Array ? webpackConfigExport : [webpackConfigExport];
const webpackConfigThenable = isThenable<WebpackConfigOrArray>(webpackConfigExport)
? webpackConfigExport
: { then: callback => callback(webpackConfigExport) } as Thenable<WebpackConfigOrArray>;
webpackConfigThenable.then(webpackConfigResolved => {
const webpackConfigArray = webpackConfigResolved instanceof Array ? webpackConfigResolved : [webpackConfigResolved];
const enableHotModuleReplacement = options.suppliedOptions.HotModuleReplacement; const enableHotModuleReplacement = options.suppliedOptions.HotModuleReplacement;
const enableReactHotModuleReplacement = options.suppliedOptions.ReactHotModuleReplacement; const enableReactHotModuleReplacement = options.suppliedOptions.ReactHotModuleReplacement;
@@ -320,6 +346,9 @@ export function createWebpackDevServer(callback: CreateDevServerCallback, option
callback(ex.stack, null); callback(ex.stack, null);
} }
}); });
},
err => callback(err.stack, null)
);
} }
function removeLeadingSlash(str: string) { function removeLeadingSlash(str: string) {

View File

@@ -7,7 +7,7 @@ const domainTaskBaseUrlStateKey = '__DOMAIN_TASK_INTERNAL_FETCH_BASEURL__DO_NOT_
let noDomainBaseUrl: string; let noDomainBaseUrl: string;
export function addTask(task: PromiseLike<any>) { export function addTask<T>(task: PromiseLike<T>): PromiseLike<T> {
if (task && domain.active) { if (task && domain.active) {
const state = domainContext.get(domainTasksStateKey) as DomainTasksState; const state = domainContext.get(domainTasksStateKey) as DomainTasksState;
if (state) { if (state) {
@@ -32,6 +32,8 @@ export function addTask(task: PromiseLike<any>) {
}); });
} }
} }
return task;
} }
export function run<T>(codeToRun: () => T, completionCallback: (error: any) => void): T { export function run<T>(codeToRun: () => T, completionCallback: (error: any) => void): T {

View File

@@ -1,10 +1,12 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<VersionPrefix>2.1.0</VersionPrefix> <VersionPrefix>2.1.0</VersionPrefix>
<VersionSuffix>preview1</VersionSuffix> <VersionSuffix>preview3</VersionSuffix>
<PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' == 'rtm' ">$(VersionPrefix)</PackageVersion> <PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' == 'rtm' ">$(VersionPrefix)</PackageVersion>
<PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' != 'rtm' ">$(VersionPrefix)-$(VersionSuffix)-final</PackageVersion> <PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' != 'rtm' ">$(VersionPrefix)-$(VersionSuffix)-final</PackageVersion>
<BuildNumber Condition="'$(BuildNumber)' == ''">t000</BuildNumber> <BuildNumber Condition="'$(BuildNumber)' == ''">t000</BuildNumber>
<FeatureBranchVersionPrefix Condition="'$(FeatureBranchVersionPrefix)' == ''">a-</FeatureBranchVersionPrefix>
<VersionSuffix Condition="'$(VersionSuffix)' != '' And '$(FeatureBranchVersionSuffix)' != ''">$(FeatureBranchVersionPrefix)$(VersionSuffix)-$([System.Text.RegularExpressions.Regex]::Replace('$(FeatureBranchVersionSuffix)', '[^\w-]', '-'))</VersionSuffix>
<VersionSuffix Condition="'$(VersionSuffix)' != '' And '$(BuildNumber)' != ''">$(VersionSuffix)-$(BuildNumber)</VersionSuffix> <VersionSuffix Condition="'$(VersionSuffix)' != '' And '$(BuildNumber)' != ''">$(VersionSuffix)-$(BuildNumber)</VersionSuffix>
</PropertyGroup> </PropertyGroup>
</Project> </Project>