Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
2e4dcd4
Fix hanging requests after a topic stops
bwatts Dec 19, 2019
a1da899
Add ThenCreated overloads to Totem.Timeline.Mvc.When
bwatts Dec 19, 2019
8d56094
Bind the checkpoint position when clients read queries
bwatts Jan 24, 2020
d3d3007
Modernize AppVeyor and pin SDK
AlexanderJohnston Feb 5, 2026
e1beaf9
Retarget app projects to net10.0
AlexanderJohnston Feb 5, 2026
31f5a2e
Retarget ASP.NET libraries to net10.0
AlexanderJohnston Feb 5, 2026
670c72e
Update MVC and SignalR for net10
AlexanderJohnston Feb 5, 2026
6c17c51
Add endpoint routing extensions
AlexanderJohnston Feb 5, 2026
6dbc004
Update hosting to HostBuilder
AlexanderJohnston Feb 5, 2026
beb05af
Upgrade Newtonsoft.Json
AlexanderJohnston Feb 5, 2026
0e3dd75
Replace PackageIconUrl with PackageIcon
AlexanderJohnston Feb 5, 2026
56b67d7
Modernize test host + gate integration tests
AlexanderJohnston Feb 5, 2026
e00f918
Use Environments.Development
AlexanderJohnston Feb 5, 2026
11098a9
Disable endpoint routing and enable newtonsoft for dotnet10 support.
AlexanderJohnston Feb 6, 2026
43453b8
Rollback skip testing in the integration suite.
AlexanderJohnston Feb 6, 2026
25d1c4a
Return to expression body methods in the app host test file.
AlexanderJohnston Feb 6, 2026
4fbd325
Merge remote-tracking branch 'bwatts/dev' into feature/dotnet10-upgrade
AlexanderJohnston Feb 16, 2026
2ade7f4
Revert AppHost.Open to return instead of await
AlexanderJohnston Feb 16, 2026
f2ecab1
Add Outermind projects, update solution, and ignore copilot session f…
AlexanderJohnston Feb 16, 2026
d2aec5b
Migrate Totem.Timeline.EventStore from TCP to gRPC client
AlexanderJohnston Feb 16, 2026
dca2341
Drop TLS credentials when insecure is true.
AlexanderJohnston Feb 16, 2026
df36740
Fixed the resume flow.
AlexanderJohnston Feb 16, 2026
7d11a80
Merge pull request #8 from AlexanderJohnston/feature/dotnet10-upgrade
AlexanderJohnston Feb 17, 2026
735a31d
Merge pull request #9 from AlexanderJohnston/feature/grpc-Cleanup
AlexanderJohnston Feb 17, 2026
6867914
Transition core standard libraries to net10.
AlexanderJohnston Feb 17, 2026
9fe882e
Merge pull request #10 from AlexanderJohnston/refactor/netStandard_net10
AlexanderJohnston Feb 17, 2026
0135b1c
Phase 1: Upgrade TFMs to net10.0 and modernize obsolete APIs
AlexanderJohnston Feb 17, 2026
343030a
Phase 2: Core System.Text.Json implementation
AlexanderJohnston Feb 17, 2026
6ffe134
Phase 3-5: Migrate Timeline converters, EventStore, and MVC layers to…
AlexanderJohnston Feb 17, 2026
44cfe16
Phase 6: Remove Newtonsoft.Json package dependencies and delete old f…
AlexanderJohnston Feb 17, 2026
f4e6ab4
Fix: Scan all JSON properties for \ discriminator, not just first
AlexanderJohnston Feb 17, 2026
9e00c5a
Add TypeConverterJsonConverterFactory to bridge TypeConverter types t…
AlexanderJohnston Feb 17, 2026
a6aa10e
Merge pull request #11 from AlexanderJohnston/refactor/TypeContractFa…
AlexanderJohnston Feb 17, 2026
6d2abf5
Narrow TypeConverterJsonConverterFactory.CanConvert to TextConverter …
AlexanderJohnston Feb 17, 2026
cc0de28
Fix dictionary keys when writing ID through custom text converter.
AlexanderJohnston Feb 17, 2026
45c1472
Merge pull request #12 from AlexanderJohnston/refactor/type_conversion
AlexanderJohnston Feb 17, 2026
7b56465
Merge branch 'dev' into refactor/Newtonsoft_to_STJ
AlexanderJohnston Feb 17, 2026
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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ nuget.exe
*.*sdf
*.ipch
/*.vspx
*.metaproj*
*.metaproj*
copilot-session-*.md
22 changes: 20 additions & 2 deletions Totem.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27428.2037
# Visual Studio Version 18
VisualStudioVersion = 18.2.11415.280 d18.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Totem", "src\Totem\Totem.csproj", "{591C4A49-8193-4780-BEF3-F3420EC3C65C}"
EndProject
Expand All @@ -25,6 +25,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Totem.Timeline.IntegrationT
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Totem.App.Tests", "src\Totem.App.Tests\Totem.App.Tests.csproj", "{AD26407A-1944-4507-A296-56338B4AF0EA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quantum", "Outermind\Quantum.csproj", "{89918063-7F9C-CBEB-B994-FF7BF0890257}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quantum.Service", "Outermind.Service\Quantum.Service.csproj", "{FBE4A23E-67C6-598A-4049-9E22DE4CC45D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quantum.Web", "Outermind.Web\Quantum.Web.csproj", "{861C1243-1602-028F-98DA-4C83BEE0FF51}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -71,6 +77,18 @@ Global
{AD26407A-1944-4507-A296-56338B4AF0EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AD26407A-1944-4507-A296-56338B4AF0EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AD26407A-1944-4507-A296-56338B4AF0EA}.Release|Any CPU.Build.0 = Release|Any CPU
{89918063-7F9C-CBEB-B994-FF7BF0890257}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89918063-7F9C-CBEB-B994-FF7BF0890257}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89918063-7F9C-CBEB-B994-FF7BF0890257}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89918063-7F9C-CBEB-B994-FF7BF0890257}.Release|Any CPU.Build.0 = Release|Any CPU
{FBE4A23E-67C6-598A-4049-9E22DE4CC45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FBE4A23E-67C6-598A-4049-9E22DE4CC45D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FBE4A23E-67C6-598A-4049-9E22DE4CC45D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FBE4A23E-67C6-598A-4049-9E22DE4CC45D}.Release|Any CPU.Build.0 = Release|Any CPU
{861C1243-1602-028F-98DA-4C83BEE0FF51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{861C1243-1602-028F-98DA-4C83BEE0FF51}.Debug|Any CPU.Build.0 = Debug|Any CPU
{861C1243-1602-028F-98DA-4C83BEE0FF51}.Release|Any CPU.ActiveCfg = Release|Any CPU
{861C1243-1602-028F-98DA-4C83BEE0FF51}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
14 changes: 5 additions & 9 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: 1.0.0-beta.{build}

image: Visual Studio 2017
image: Visual Studio 2022
configuration: Release
platform: Any CPU

Expand Down Expand Up @@ -37,14 +37,10 @@ environment:
ASPNETCORE_ENVIRONMENT: Production

before_build:
- nuget restore -verbosity quiet
- dotnet restore

build:
project: Totem.sln
publish_nuget: false
publish_nuget_symbols: false
include_nuget_references: false
verbosity: minimal
build_script:
- dotnet build .\Totem.sln -c Release

test: off

Expand All @@ -60,4 +56,4 @@ deploy:
artifact: /.*\.nupkg/

cache:
- '%LocalAppData%\NuGet\v3-cache'
- '%LocalAppData%\NuGet\v3-cache'
5 changes: 5 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"sdk": {
"version": "10.0.102"
}
}
8 changes: 4 additions & 4 deletions src/Totem.App.Service/ConfigureServiceApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public void ApplyHostConfiguration(IHostBuilder host) =>
{
var pairs = new Dictionary<string, string>
{
[HostDefaults.EnvironmentKey] = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT") ?? EnvironmentName.Development
[HostDefaults.EnvironmentKey] = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT") ?? Environments.Development
};

hostConfiguration.AddInMemoryCollection(pairs);
Expand Down Expand Up @@ -187,8 +187,8 @@ public void ApplyAppConfiguration(IHostBuilder host) =>
timeline.AddEventStore().BindOptionsToConfiguration()));

// Allow an external host (such as a Windows Service) to stop the application
services.AddSingleton<IHostedService>(p =>
new ServiceAppCancellation(p.GetService<IApplicationLifetime>(), _cancellationToken));
services.AddSingleton<IHostedService>(p =>
new ServiceAppCancellation(p.GetService<IHostApplicationLifetime>(), _cancellationToken));
}));

public void ApplySerilog(IHostBuilder host)
Expand Down Expand Up @@ -222,4 +222,4 @@ public void ApplySerilog(IHostBuilder host)
}));
}
}
}
}
4 changes: 2 additions & 2 deletions src/Totem.App.Service/ServiceAppCancellation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Totem.App.Service
/// </summary>
public sealed class ServiceAppCancellation : IHostedService
{
public ServiceAppCancellation(IApplicationLifetime lifetimeService, CancellationToken stopToken)
public ServiceAppCancellation(IHostApplicationLifetime lifetimeService, CancellationToken stopToken)
{
stopToken.Register(lifetimeService.StopApplication);
}
Expand All @@ -20,4 +20,4 @@ public Task StartAsync(CancellationToken cancellationToken) =>
public Task StopAsync(CancellationToken cancellationToken) =>
Task.CompletedTask;
}
}
}
23 changes: 14 additions & 9 deletions src/Totem.App.Service/Totem.App.Service.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>7.1</LangVersion>
<RootNamespace>Totem.App.Service</RootNamespace>
<Company>Totem</Company>
Expand All @@ -14,7 +14,7 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageProjectUrl>https://github.com/bwatts/Totem</PackageProjectUrl>
<PackageIconUrl>https://raw.githubusercontent.com/bwatts/totem/master/icon.png</PackageIconUrl>
<PackageIcon>icon.png</PackageIcon>
<PackageReleaseNotes>https://github.com/bwatts/Totem/releases</PackageReleaseNotes>
<PackageTags>totem;ddd;cqrs;event-sourcing;dotnet;dotnet-core;csharp</PackageTags>
<RepositoryUrl>https://github.com/bwatts/Totem</RepositoryUrl>
Expand All @@ -23,13 +23,14 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="2.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
Expand All @@ -42,4 +43,8 @@
<ProjectReference Include="..\Totem\Totem.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\icon.png" Pack="true" PackagePath="/" />
</ItemGroup>

</Project>
8 changes: 5 additions & 3 deletions src/Totem.App.Tests/Hosting/AppHost.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Xunit.Sdk;
using Totem.Runtime;
using Totem.Threading;

Expand All @@ -12,7 +14,7 @@ public abstract class AppHost : Connection
{
readonly TaskSource _startup = new TaskSource();
readonly TaskSource _shutdown = new TaskSource();
IApplicationLifetime _lifetimeService;
IHostApplicationLifetime _lifetimeService;

protected override Task Open()
{
Expand All @@ -33,7 +35,7 @@ void BuildAndRun() =>

protected abstract IHostBuilder CreateBuilder();

internal void SetLifetimeService(IApplicationLifetime lifetimeService)
internal void SetLifetimeService(IHostApplicationLifetime lifetimeService)
{
_lifetimeService = lifetimeService;

Expand All @@ -51,4 +53,4 @@ void StopHost(Task runTask)
_shutdown.TrySetResult();
}
}
}
}
3 changes: 2 additions & 1 deletion src/Totem.App.Tests/Hosting/AppTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Threading.Tasks;
using Totem.Runtime;
using Xunit.Sdk;

namespace Totem.App.Tests.Hosting
{
Expand Down Expand Up @@ -49,4 +50,4 @@ async Task StopHost()

protected IClock Clock => Notion.Traits.Clock.Get(this);
}
}
}
4 changes: 2 additions & 2 deletions src/Totem.App.Tests/Hosting/QueryAppLifetime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Totem.App.Tests.Hosting
/// </summary>
internal sealed class QueryAppLifetime : IHostLifetime
{
public QueryAppLifetime(QueryAppHost host, QueryApp app, IApplicationLifetime lifetimeService)
public QueryAppLifetime(QueryAppHost host, QueryApp app, IHostApplicationLifetime lifetimeService)
{
host.SetApp(app);
host.SetLifetimeService(lifetimeService);
Expand All @@ -21,4 +21,4 @@ public Task WaitForStartAsync(CancellationToken cancellationToken) =>
public Task StopAsync(CancellationToken cancellationToken) =>
Task.CompletedTask;
}
}
}
4 changes: 2 additions & 2 deletions src/Totem.App.Tests/Hosting/TopicAppLifetime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Totem.App.Tests.Hosting
/// </summary>
internal sealed class TopicAppLifetime : IHostLifetime
{
public TopicAppLifetime(TopicAppHost host, TopicApp app, IApplicationLifetime lifetimeService)
public TopicAppLifetime(TopicAppHost host, TopicApp app, IHostApplicationLifetime lifetimeService)
{
host.SetApp(app);
host.SetLifetimeService(lifetimeService);
Expand All @@ -21,4 +21,4 @@ public Task WaitForStartAsync(CancellationToken cancellationToken) =>
public Task StopAsync(CancellationToken cancellationToken) =>
Task.CompletedTask;
}
}
}
16 changes: 11 additions & 5 deletions src/Totem.App.Tests/Totem.App.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>7.1</LangVersion>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Totem.App.Tests</RootNamespace>
<Company>Totem</Company>
<Authors>Totem Contributors</Authors>
Expand All @@ -14,17 +13,20 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageProjectUrl>https://github.com/bwatts/Totem</PackageProjectUrl>
<PackageIconUrl>https://raw.githubusercontent.com/bwatts/totem/master/icon.png</PackageIconUrl>
<PackageIcon>icon.png</PackageIcon>
<PackageReleaseNotes>https://github.com/bwatts/Totem/releases</PackageReleaseNotes>
<PackageTags>totem;ddd;cqrs;event-sourcing;dotnet;dotnet-core;csharp</PackageTags>
<RepositoryUrl>https://github.com/bwatts/Totem</RepositoryUrl>
<Description>A base configuration for testing applications, including an in-memory timeline and support for any test framework</Description>
<NoWarn>1591;NU5105</NoWarn>
<IsTestProject>false</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
<PackageReference Include="xunit" Version="2.9.3" />
</ItemGroup>

<ItemGroup>
Expand All @@ -33,4 +35,8 @@
<ProjectReference Include="..\Totem\Totem.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\icon.png" Pack="true" PackagePath="/" />
</ItemGroup>

</Project>
8 changes: 4 additions & 4 deletions src/Totem.App.Web/Configure.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public static ConfigureWebApp BeforeSignalR(Action<WebHostBuilderContext, IServi
public static ConfigureWebApp BeforeMvcRoutes(Action<IRouteBuilder> configure) =>
new ConfigureWebApp().BeforeMvcRoutes(configure);

public static ConfigureWebApp BeforeSignalRRoutes(Action<HubRouteBuilder> configure) =>
public static ConfigureWebApp BeforeSignalRRoutes(Action<IEndpointRouteBuilder> configure) =>
new ConfigureWebApp().BeforeSignalRRoutes(configure);

public static ConfigureWebApp BeforeMvcApp(Action<IApplicationBuilder> configure) =>
Expand Down Expand Up @@ -81,7 +81,7 @@ public static ConfigureWebApp AfterSignalR(Action<WebHostBuilderContext, IServic
public static ConfigureWebApp AfterMvcRoutes(Action<IRouteBuilder> configure) =>
new ConfigureWebApp().AfterMvcRoutes(configure);

public static ConfigureWebApp AfterSignalRRoutes(Action<HubRouteBuilder> configure) =>
public static ConfigureWebApp AfterSignalRRoutes(Action<IEndpointRouteBuilder> configure) =>
new ConfigureWebApp().AfterSignalRRoutes(configure);

public static ConfigureWebApp AfterMvcApp(Action<IApplicationBuilder> configure) =>
Expand Down Expand Up @@ -117,7 +117,7 @@ public static ConfigureWebApp ReplaceSignalR(Action<WebHostBuilderContext, IServ
public static ConfigureWebApp ReplaceMvcRoutes(Action<IRouteBuilder> configure) =>
new ConfigureWebApp().ReplaceMvcRoutes(configure);

public static ConfigureWebApp ReplaceSignalRRoutes(Action<HubRouteBuilder> configure) =>
public static ConfigureWebApp ReplaceSignalRRoutes(Action<IEndpointRouteBuilder> configure) =>
new ConfigureWebApp().ReplaceSignalRRoutes(configure);

public static ConfigureWebApp ReplaceMvcApp(Action<IApplicationBuilder> configure) =>
Expand Down Expand Up @@ -184,4 +184,4 @@ public static ConfigureWebApp ReplaceMvc(Action<IServiceCollection> configure) =
public static ConfigureWebApp ReplaceSignalR(Action<IServiceCollection> configure) =>
new ConfigureWebApp().ReplaceSignalR(configure);
}
}
}
Loading