From da62450614c335eb4840b40f2d79d25f139a8e0e Mon Sep 17 00:00:00 2001 From: Matthew Hsu Date: Mon, 29 Jun 2026 16:47:18 -0600 Subject: [PATCH 01/19] Adapt plan MAUI-task verification for no-JDK/Android-SDK host --- .../2026-06-29-maui-react-hybrid-scaffold.md | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/docs/superpowers/plans/2026-06-29-maui-react-hybrid-scaffold.md b/docs/superpowers/plans/2026-06-29-maui-react-hybrid-scaffold.md index ed05ef8..fac1880 100644 --- a/docs/superpowers/plans/2026-06-29-maui-react-hybrid-scaffold.md +++ b/docs/superpowers/plans/2026-06-29-maui-react-hybrid-scaffold.md @@ -17,7 +17,8 @@ - Dependency rule: no inner layer references an outer one. Domain references nothing. Application references Domain only. Infrastructure references Application (+ Domain). Maui references Application + Infrastructure. - Target frameworks for `AppName.Maui`: `net10.0-android;net10.0-ios;net10.0-maccatalyst;net10.0-windows10.0.19041.0` (Windows TFM only built on Windows). - Central NuGet versions via `Directory.Packages.props` (no inline `Version=` on `PackageReference`). -- **Host-platform note:** This dev machine is Linux. On Linux, only the `net10.0-android` target builds/runs; iOS/Mac Catalyst require macOS, Windows target requires Windows. Build/run verification steps below use Android (or `dotnet build` of the non-Maui projects, which are platform-neutral). Other targets are expected to compile on their respective hosts. +- **Host-platform note:** This dev machine is Linux **with no JDK and no Android SDK installed**, and no macOS/Windows host. Consequence: the platform-neutral projects (Domain, Application, Infrastructure + their tests) and the React app build and test fully here, but **no MAUI target framework can compile to completion on this machine** (android needs JDK + Android SDK; iOS/Mac Catalyst need macOS; the Windows target needs Windows). Per user decision, MAUI target builds are deferred to a configured machine. +- **MAUI-task verification protocol (Tasks 5, 6, 8, 9):** Do NOT expect a successful MAUI target build here. Verify instead by: (1) `dotnet workload install maui` succeeds; (2) `dotnet restore src/AppName.Maui/AppName.Maui.csproj` succeeds (proves project + package + project references resolve); (3) a build attempt `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` is allowed to FAIL, but ONLY at the missing-Android-SDK/JDK step — it must NOT fail with C# compile errors (`CS####`), missing-type, or unresolved-reference errors. If you see `CS####` or reference errors, that is a real defect to fix; failures mentioning Android SDK / `JAVA_HOME` / `aapt` / `Xamarin.Android` tooling are the expected environmental stop and count as "C# verified." Report the exact failure reason so the reviewer can confirm it is environmental. - TypeScript bridge DTOs mirror Application DTOs by hand; keep them in sync. --- @@ -774,10 +775,13 @@ Note: `.gitignore` ignores `Resources/Raw/web/`. Force-add this placeholder so t git add -f src/AppName.Maui/Resources/Raw/web/index.html ``` -- [ ] **Step 6: Build the Android target to verify (Linux-compatible target)** +- [ ] **Step 6: Verify per the MAUI-task verification protocol (see Global Constraints)** -Run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` -Expected: BUILD SUCCEEDED. (If Android SDK is missing, install via `dotnet workload` / Android SDK manager, or build a non-Maui-restricted check by confirming the solution restores: `dotnet restore`.) +Run: `dotnet restore src/AppName.Maui/AppName.Maui.csproj` +Expected: restore succeeds (project, package, and project references resolve). + +Then run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` +Expected: build attempt fails ONLY at the missing Android SDK / JDK step (e.g. message about Android SDK, `JAVA_HOME`, or Xamarin.Android tooling). It must NOT fail with `CS####` compile errors or unresolved references — those indicate real defects. Capture and report the exact failure reason. - [ ] **Step 7: Commit** @@ -856,10 +860,10 @@ In `src/AppName.Maui/MauiProgram.cs`, add after `AddInfrastructure(...)`: builder.Services.AddTransient(); ``` -- [ ] **Step 4: Build to verify the bridge compiles** +- [ ] **Step 4: Verify the bridge compiles (MAUI-task verification protocol)** Run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` -Expected: BUILD SUCCEEDED. +Expected: per the protocol in Global Constraints — failure ONLY at the missing Android SDK / JDK step, with NO `CS####` compile errors (which would mean the bridge code is wrong). Report the exact failure reason. - [ ] **Step 5: Commit** @@ -1129,15 +1133,15 @@ In `src/AppName.Maui/AppName.Maui.csproj`, add before ``: ``` -- [ ] **Step 2: Verify the target runs on build** +- [ ] **Step 2: Verify the target runs on build (MAUI-task verification protocol)** Run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` -Expected: log shows "Building React app in .../web"; BUILD SUCCEEDED; `Resources/Raw/web/index.html` is the React-built file. +Expected: log shows "Building React app in .../web" and the npm build runs (proving the target fires before the build), then the build reaches the expected environmental stop at the missing Android SDK / JDK step (no `CS####` errors). Confirm `src/AppName.Maui/Resources/Raw/web/index.html` was (re)generated by the React build. Report the exact failure reason. - [ ] **Step 3: Verify the skip switch works** Run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android -p:SkipReactBuild=true` -Expected: log does NOT show "Building React app"; BUILD SUCCEEDED. +Expected: log does NOT show "Building React app" (the npm build is skipped); the build then reaches the same expected environmental Android-SDK/JDK stop. Report the exact failure reason. - [ ] **Step 4: Commit** @@ -1224,10 +1228,13 @@ Expected: all test projects PASS. Run: `cd src/web && npm test && npm run build` Expected: tests PASS; build emits to `src/AppName.Maui/Resources/Raw/web`. -- [ ] **Step 4: Full verification — MAUI build** +- [ ] **Step 4: Full verification — MAUI restore + C# compile check (MAUI-task verification protocol)** -Run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` -Expected: BUILD SUCCEEDED. +Run: `dotnet restore src/AppName.Maui/AppName.Maui.csproj` +Expected: restore succeeds. + +Then run: `dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android` +Expected: per protocol — failure ONLY at the missing Android SDK / JDK step, no `CS####` errors. This confirms all C# across the MAUI host is consistent. Note in the README/report that completing an actual MAUI target build requires a configured Android/macOS/Windows host. - [ ] **Step 5: Commit** From 15a032f87aafefa56f3b75da79156dda760e4c00 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 16:48:27 -0600 Subject: [PATCH 02/19] chore: scaffold solution and shared build config --- .editorconfig | 10 ++++++++++ .gitignore | 16 ++++++++++++++++ AppName.sln | 14 ++++++++++++++ Directory.Build.props | 9 +++++++++ Directory.Packages.props | 6 ++++++ global.json | 6 ++++++ 6 files changed, 61 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 AppName.sln create mode 100644 Directory.Build.props create mode 100644 Directory.Packages.props create mode 100644 global.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a3548cf --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*.cs] +indent_style = space +indent_size = 4 +dotnet_sort_system_directives_first = true + +[*.{ts,tsx,js,jsx,json}] +indent_style = space +indent_size = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3064557 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# .NET +bin/ +obj/ +*.user +.vs/ + +# MAUI / mobile +*.binlog + +# Node / Vite +node_modules/ +dist/ +src/AppName.Maui/Resources/Raw/web/ + +# OS +.DS_Store diff --git a/AppName.sln b/AppName.sln new file mode 100644 index 0000000..bb32f59 --- /dev/null +++ b/AppName.sln @@ -0,0 +1,14 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..a47ff2d --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,9 @@ + + + enable + enable + latest + false + true + + diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..cd3407e --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,6 @@ + + + + + + diff --git a/global.json b/global.json new file mode 100644 index 0000000..512142d --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "version": "10.0.100", + "rollForward": "latestFeature" + } +} From 41ebbd1807f0ee3925d36e39d31f0a5c0dd22d98 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 16:51:44 -0600 Subject: [PATCH 03/19] feat(domain): add User entity and IUserRepository port --- AppName.sln | 70 +++++++++++++++---- Directory.Packages.props | 4 ++ .../Abstractions/IUserRepository.cs | 9 +++ src/AppName.Domain/AppName.Domain.csproj | 9 +++ src/AppName.Domain/Entities/User.cs | 22 ++++++ .../AppName.Domain.Tests.csproj | 25 +++++++ tests/AppName.Domain.Tests/UnitTest1.cs | 10 +++ tests/AppName.Domain.Tests/UserTests.cs | 26 +++++++ 8 files changed, 161 insertions(+), 14 deletions(-) create mode 100644 src/AppName.Domain/Abstractions/IUserRepository.cs create mode 100644 src/AppName.Domain/AppName.Domain.csproj create mode 100644 src/AppName.Domain/Entities/User.cs create mode 100644 tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj create mode 100644 tests/AppName.Domain.Tests/UnitTest1.cs create mode 100644 tests/AppName.Domain.Tests/UserTests.cs diff --git a/AppName.sln b/AppName.sln index bb32f59..93d0e62 100644 --- a/AppName.sln +++ b/AppName.sln @@ -1,14 +1,56 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Domain", "src\AppName.Domain\AppName.Domain.csproj", "{BE21E412-1CC0-4DDD-9604-733B75B00B26}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Domain.Tests", "tests\AppName.Domain.Tests\AppName.Domain.Tests.csproj", "{CA24E7F9-72FD-4649-8133-66E21452E65C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x64.ActiveCfg = Debug|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x64.Build.0 = Debug|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x86.ActiveCfg = Debug|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x86.Build.0 = Debug|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|Any CPU.Build.0 = Release|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x64.ActiveCfg = Release|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x64.Build.0 = Release|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x86.ActiveCfg = Release|Any CPU + {BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x86.Build.0 = Release|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x64.ActiveCfg = Debug|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x64.Build.0 = Debug|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x86.ActiveCfg = Debug|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x86.Build.0 = Debug|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|Any CPU.Build.0 = Release|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x64.ActiveCfg = Release|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x64.Build.0 = Release|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x86.ActiveCfg = Release|Any CPU + {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {BE21E412-1CC0-4DDD-9604-733B75B00B26} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {CA24E7F9-72FD-4649-8133-66E21452E65C} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + EndGlobalSection +EndGlobal diff --git a/Directory.Packages.props b/Directory.Packages.props index cd3407e..5cffb1e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -2,5 +2,9 @@ + + + + diff --git a/src/AppName.Domain/Abstractions/IUserRepository.cs b/src/AppName.Domain/Abstractions/IUserRepository.cs new file mode 100644 index 0000000..830520e --- /dev/null +++ b/src/AppName.Domain/Abstractions/IUserRepository.cs @@ -0,0 +1,9 @@ +using AppName.Domain.Entities; + +namespace AppName.Domain.Abstractions; + +public interface IUserRepository +{ + Task> GetAllAsync(CancellationToken ct = default); + Task AddAsync(User user, CancellationToken ct = default); +} diff --git a/src/AppName.Domain/AppName.Domain.csproj b/src/AppName.Domain/AppName.Domain.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/src/AppName.Domain/AppName.Domain.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/src/AppName.Domain/Entities/User.cs b/src/AppName.Domain/Entities/User.cs new file mode 100644 index 0000000..b74d05a --- /dev/null +++ b/src/AppName.Domain/Entities/User.cs @@ -0,0 +1,22 @@ +namespace AppName.Domain.Entities; + +public sealed class User +{ + public User(Guid id, string name, string email) + { + Id = id; + Name = name; + Email = email; + } + + public Guid Id { get; } + public string Name { get; private set; } + public string Email { get; } + + public void Rename(string newName) + { + if (string.IsNullOrWhiteSpace(newName)) + throw new ArgumentException("Name cannot be blank.", nameof(newName)); + Name = newName; + } +} diff --git a/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj b/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj new file mode 100644 index 0000000..c20db39 --- /dev/null +++ b/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj @@ -0,0 +1,25 @@ + + + + net10.0 + enable + enable + false + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/AppName.Domain.Tests/UnitTest1.cs b/tests/AppName.Domain.Tests/UnitTest1.cs new file mode 100644 index 0000000..f98c214 --- /dev/null +++ b/tests/AppName.Domain.Tests/UnitTest1.cs @@ -0,0 +1,10 @@ +namespace AppName.Domain.Tests; + +public class UnitTest1 +{ + [Fact] + public void Test1() + { + + } +} diff --git a/tests/AppName.Domain.Tests/UserTests.cs b/tests/AppName.Domain.Tests/UserTests.cs new file mode 100644 index 0000000..7cf24c0 --- /dev/null +++ b/tests/AppName.Domain.Tests/UserTests.cs @@ -0,0 +1,26 @@ +using AppName.Domain.Entities; + +namespace AppName.Domain.Tests; + +public class UserTests +{ + [Fact] + public void Rename_WithValidName_UpdatesName() + { + var user = new User(Guid.NewGuid(), "Old Name", "a@b.com"); + + user.Rename("New Name"); + + Assert.Equal("New Name", user.Name); + } + + [Theory] + [InlineData("")] + [InlineData(" ")] + public void Rename_WithBlankName_Throws(string blank) + { + var user = new User(Guid.NewGuid(), "Old Name", "a@b.com"); + + Assert.Throws(() => user.Rename(blank)); + } +} From 1860751a13ac9bdd9f705fdbc7f7bb685a93d729 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 16:55:33 -0600 Subject: [PATCH 04/19] fix(domain): remove template test, redundant props; add null Rename case --- src/AppName.Domain/AppName.Domain.csproj | 2 -- tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj | 2 -- tests/AppName.Domain.Tests/UnitTest1.cs | 10 ---------- tests/AppName.Domain.Tests/UserTests.cs | 3 ++- 4 files changed, 2 insertions(+), 15 deletions(-) delete mode 100644 tests/AppName.Domain.Tests/UnitTest1.cs diff --git a/src/AppName.Domain/AppName.Domain.csproj b/src/AppName.Domain/AppName.Domain.csproj index b760144..00b9359 100644 --- a/src/AppName.Domain/AppName.Domain.csproj +++ b/src/AppName.Domain/AppName.Domain.csproj @@ -2,8 +2,6 @@ net10.0 - enable - enable diff --git a/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj b/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj index c20db39..c774294 100644 --- a/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj +++ b/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj @@ -2,8 +2,6 @@ net10.0 - enable - enable false diff --git a/tests/AppName.Domain.Tests/UnitTest1.cs b/tests/AppName.Domain.Tests/UnitTest1.cs deleted file mode 100644 index f98c214..0000000 --- a/tests/AppName.Domain.Tests/UnitTest1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AppName.Domain.Tests; - -public class UnitTest1 -{ - [Fact] - public void Test1() - { - - } -} diff --git a/tests/AppName.Domain.Tests/UserTests.cs b/tests/AppName.Domain.Tests/UserTests.cs index 7cf24c0..9b8cc36 100644 --- a/tests/AppName.Domain.Tests/UserTests.cs +++ b/tests/AppName.Domain.Tests/UserTests.cs @@ -17,7 +17,8 @@ public void Rename_WithValidName_UpdatesName() [Theory] [InlineData("")] [InlineData(" ")] - public void Rename_WithBlankName_Throws(string blank) + [InlineData(null)] + public void Rename_WithBlankName_Throws(string? blank) { var user = new User(Guid.NewGuid(), "Old Name", "a@b.com"); From 0979bfef8e6a295872c5bfaaaa8302fafecbaf55 Mon Sep 17 00:00:00 2001 From: Matthew Hsu Date: Mon, 29 Jun 2026 16:57:35 -0600 Subject: [PATCH 05/19] build: disable SCM git queries (unreadable .gitmodules in build env) --- Directory.Build.props | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Directory.Build.props b/Directory.Build.props index a47ff2d..3c1cb80 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,5 +5,9 @@ latest false true + + false From b41170442b430f8c612c76de936b30553d6524c3 Mon Sep 17 00:00:00 2001 From: Matthew Hsu Date: Mon, 29 Jun 2026 16:58:07 -0600 Subject: [PATCH 06/19] test(domain): silence CS8604 on deliberate null Rename case --- tests/AppName.Domain.Tests/UserTests.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/AppName.Domain.Tests/UserTests.cs b/tests/AppName.Domain.Tests/UserTests.cs index 9b8cc36..b65d7a6 100644 --- a/tests/AppName.Domain.Tests/UserTests.cs +++ b/tests/AppName.Domain.Tests/UserTests.cs @@ -22,6 +22,7 @@ public void Rename_WithBlankName_Throws(string? blank) { var user = new User(Guid.NewGuid(), "Old Name", "a@b.com"); - Assert.Throws(() => user.Rename(blank)); + // blank! — deliberately passing null/blank to verify the guard rejects it + Assert.Throws(() => user.Rename(blank!)); } } From 65f70fdddb547cb123de8548bf93b5c228523cf5 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 17:02:36 -0600 Subject: [PATCH 07/19] feat(application): add user use cases, DTO, and DI registration --- AppName.sln | 30 ++++++++++++++++ Directory.Packages.props | 1 + .../AppName.Application.csproj | 15 ++++++++ .../DependencyInjection.cs | 14 ++++++++ src/AppName.Application/Dtos/UserDto.cs | 3 ++ .../UseCases/Users/AddUserUseCase.cs | 18 ++++++++++ .../UseCases/Users/GetUsersUseCase.cs | 16 +++++++++ .../AppName.Application.Tests.csproj | 24 +++++++++++++ .../GetUsersUseCaseTests.cs | 34 +++++++++++++++++++ 9 files changed, 155 insertions(+) create mode 100644 src/AppName.Application/AppName.Application.csproj create mode 100644 src/AppName.Application/DependencyInjection.cs create mode 100644 src/AppName.Application/Dtos/UserDto.cs create mode 100644 src/AppName.Application/UseCases/Users/AddUserUseCase.cs create mode 100644 src/AppName.Application/UseCases/Users/GetUsersUseCase.cs create mode 100644 tests/AppName.Application.Tests/AppName.Application.Tests.csproj create mode 100644 tests/AppName.Application.Tests/GetUsersUseCaseTests.cs diff --git a/AppName.sln b/AppName.sln index 93d0e62..cf5001e 100644 --- a/AppName.sln +++ b/AppName.sln @@ -11,6 +11,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Domain.Tests", "tests\AppName.Domain.Tests\AppName.Domain.Tests.csproj", "{CA24E7F9-72FD-4649-8133-66E21452E65C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Application", "src\AppName.Application\AppName.Application.csproj", "{8BE7AB9B-9344-4252-AA1C-825487314E58}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Application.Tests", "tests\AppName.Application.Tests\AppName.Application.Tests.csproj", "{7F395C90-4E7B-4827-BD62-762E4AA60AE4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -45,6 +49,30 @@ Global {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x64.Build.0 = Release|Any CPU {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x86.ActiveCfg = Release|Any CPU {CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x86.Build.0 = Release|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x64.ActiveCfg = Debug|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x64.Build.0 = Debug|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x86.ActiveCfg = Debug|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x86.Build.0 = Debug|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|Any CPU.Build.0 = Release|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x64.ActiveCfg = Release|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x64.Build.0 = Release|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x86.ActiveCfg = Release|Any CPU + {8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x86.Build.0 = Release|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x64.Build.0 = Debug|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x86.Build.0 = Debug|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|Any CPU.Build.0 = Release|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x64.ActiveCfg = Release|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x64.Build.0 = Release|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x86.ActiveCfg = Release|Any CPU + {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -52,5 +80,7 @@ Global GlobalSection(NestedProjects) = preSolution {BE21E412-1CC0-4DDD-9604-733B75B00B26} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {CA24E7F9-72FD-4649-8133-66E21452E65C} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + {8BE7AB9B-9344-4252-AA1C-825487314E58} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {7F395C90-4E7B-4827-BD62-762E4AA60AE4} = {0AB3BF05-4346-4AA6-1389-037BE0695223} EndGlobalSection EndGlobal diff --git a/Directory.Packages.props b/Directory.Packages.props index 5cffb1e..065c57c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -6,5 +6,6 @@ + diff --git a/src/AppName.Application/AppName.Application.csproj b/src/AppName.Application/AppName.Application.csproj new file mode 100644 index 0000000..dde67e6 --- /dev/null +++ b/src/AppName.Application/AppName.Application.csproj @@ -0,0 +1,15 @@ + + + + net10.0 + + + + + + + + + + + diff --git a/src/AppName.Application/DependencyInjection.cs b/src/AppName.Application/DependencyInjection.cs new file mode 100644 index 0000000..9e173e3 --- /dev/null +++ b/src/AppName.Application/DependencyInjection.cs @@ -0,0 +1,14 @@ +using AppName.Application.UseCases.Users; +using Microsoft.Extensions.DependencyInjection; + +namespace AppName.Application; + +public static class DependencyInjection +{ + public static IServiceCollection AddApplication(this IServiceCollection services) + { + services.AddTransient(); + services.AddTransient(); + return services; + } +} diff --git a/src/AppName.Application/Dtos/UserDto.cs b/src/AppName.Application/Dtos/UserDto.cs new file mode 100644 index 0000000..13fba65 --- /dev/null +++ b/src/AppName.Application/Dtos/UserDto.cs @@ -0,0 +1,3 @@ +namespace AppName.Application.Dtos; + +public record UserDto(Guid Id, string Name, string Email); diff --git a/src/AppName.Application/UseCases/Users/AddUserUseCase.cs b/src/AppName.Application/UseCases/Users/AddUserUseCase.cs new file mode 100644 index 0000000..1aad139 --- /dev/null +++ b/src/AppName.Application/UseCases/Users/AddUserUseCase.cs @@ -0,0 +1,18 @@ +using AppName.Application.Dtos; +using AppName.Domain.Abstractions; +using AppName.Domain.Entities; + +namespace AppName.Application.UseCases.Users; + +public sealed class AddUserUseCase +{ + private readonly IUserRepository _repo; + public AddUserUseCase(IUserRepository repo) => _repo = repo; + + public async Task ExecuteAsync(string name, string email, CancellationToken ct = default) + { + var user = new User(Guid.NewGuid(), name, email); + await _repo.AddAsync(user, ct); + return new UserDto(user.Id, user.Name, user.Email); + } +} diff --git a/src/AppName.Application/UseCases/Users/GetUsersUseCase.cs b/src/AppName.Application/UseCases/Users/GetUsersUseCase.cs new file mode 100644 index 0000000..dcb2594 --- /dev/null +++ b/src/AppName.Application/UseCases/Users/GetUsersUseCase.cs @@ -0,0 +1,16 @@ +using AppName.Application.Dtos; +using AppName.Domain.Abstractions; + +namespace AppName.Application.UseCases.Users; + +public sealed class GetUsersUseCase +{ + private readonly IUserRepository _repo; + public GetUsersUseCase(IUserRepository repo) => _repo = repo; + + public async Task> ExecuteAsync(CancellationToken ct = default) + { + var users = await _repo.GetAllAsync(ct); + return users.Select(u => new UserDto(u.Id, u.Name, u.Email)).ToList(); + } +} diff --git a/tests/AppName.Application.Tests/AppName.Application.Tests.csproj b/tests/AppName.Application.Tests/AppName.Application.Tests.csproj new file mode 100644 index 0000000..26b7fdd --- /dev/null +++ b/tests/AppName.Application.Tests/AppName.Application.Tests.csproj @@ -0,0 +1,24 @@ + + + + net10.0 + false + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs b/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs new file mode 100644 index 0000000..24342f4 --- /dev/null +++ b/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs @@ -0,0 +1,34 @@ +using AppName.Application.UseCases.Users; +using AppName.Domain.Abstractions; +using AppName.Domain.Entities; + +namespace AppName.Application.Tests; + +public class GetUsersUseCaseTests +{ + private sealed class FakeUserRepository : IUserRepository + { + private readonly List _users = new(); + public Task AddAsync(User user, CancellationToken ct = default) + { + _users.Add(user); + return Task.CompletedTask; + } + public Task> GetAllAsync(CancellationToken ct = default) + => Task.FromResult>(_users); + } + + [Fact] + public async Task ExecuteAsync_MapsEntitiesToDtos() + { + var repo = new FakeUserRepository(); + await repo.AddAsync(new User(Guid.NewGuid(), "Ada", "ada@x.com")); + var sut = new GetUsersUseCase(repo); + + var result = await sut.ExecuteAsync(); + + var dto = Assert.Single(result); + Assert.Equal("Ada", dto.Name); + Assert.Equal("ada@x.com", dto.Email); + } +} From d4973bbcf42a32039e2a4c5ca0a115525cbe694c Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 17:06:16 -0600 Subject: [PATCH 08/19] test(application): cover AddUserUseCase; fix trailing newline --- .../AppName.Application.Tests.csproj | 2 +- .../GetUsersUseCaseTests.cs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/AppName.Application.Tests/AppName.Application.Tests.csproj b/tests/AppName.Application.Tests/AppName.Application.Tests.csproj index 26b7fdd..1eb6285 100644 --- a/tests/AppName.Application.Tests/AppName.Application.Tests.csproj +++ b/tests/AppName.Application.Tests/AppName.Application.Tests.csproj @@ -21,4 +21,4 @@ - \ No newline at end of file + diff --git a/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs b/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs index 24342f4..97435ee 100644 --- a/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs +++ b/tests/AppName.Application.Tests/GetUsersUseCaseTests.cs @@ -31,4 +31,21 @@ public async Task ExecuteAsync_MapsEntitiesToDtos() Assert.Equal("Ada", dto.Name); Assert.Equal("ada@x.com", dto.Email); } + + [Fact] + public async Task AddUserUseCase_AddsUserAndReturnsMappedDto() + { + var repo = new FakeUserRepository(); + var sut = new AddUserUseCase(repo); + + var dto = await sut.ExecuteAsync("Bob", "bob@x.com"); + + Assert.Equal("Bob", dto.Name); + Assert.Equal("bob@x.com", dto.Email); + Assert.NotEqual(Guid.Empty, dto.Id); + + var all = await repo.GetAllAsync(); + var saved = Assert.Single(all); + Assert.Equal(dto.Id, saved.Id); + } } From ebf387aeef2c17292652c0bf26c61ad6b2675c96 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 17:10:40 -0600 Subject: [PATCH 09/19] feat(infrastructure): add EF Core SQLite UserRepository and DI --- AppName.sln | 30 ++++++++++++++ Directory.Packages.props | 1 + .../AppName.Infrastructure.csproj | 16 ++++++++ .../DependencyInjection.cs | 16 ++++++++ .../Persistence/AppDbContext.cs | 19 +++++++++ .../Persistence/UserRepository.cs | 20 ++++++++++ .../AppName.Infrastructure.Tests.csproj | 24 ++++++++++++ .../UserRepositoryTests.cs | 39 +++++++++++++++++++ 8 files changed, 165 insertions(+) create mode 100644 src/AppName.Infrastructure/AppName.Infrastructure.csproj create mode 100644 src/AppName.Infrastructure/DependencyInjection.cs create mode 100644 src/AppName.Infrastructure/Persistence/AppDbContext.cs create mode 100644 src/AppName.Infrastructure/Persistence/UserRepository.cs create mode 100644 tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj create mode 100644 tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs diff --git a/AppName.sln b/AppName.sln index cf5001e..4c7109d 100644 --- a/AppName.sln +++ b/AppName.sln @@ -15,6 +15,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Application", "src\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Application.Tests", "tests\AppName.Application.Tests\AppName.Application.Tests.csproj", "{7F395C90-4E7B-4827-BD62-762E4AA60AE4}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Infrastructure", "src\AppName.Infrastructure\AppName.Infrastructure.csproj", "{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Infrastructure.Tests", "tests\AppName.Infrastructure.Tests\AppName.Infrastructure.Tests.csproj", "{0F95507E-D2E4-48DD-AB43-70A0E26195E9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +77,30 @@ Global {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x64.Build.0 = Release|Any CPU {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x86.ActiveCfg = Release|Any CPU {7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x86.Build.0 = Release|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x64.ActiveCfg = Debug|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x64.Build.0 = Debug|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x86.ActiveCfg = Debug|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x86.Build.0 = Debug|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x64.ActiveCfg = Release|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x64.Build.0 = Release|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x86.ActiveCfg = Release|Any CPU + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x86.Build.0 = Release|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x64.ActiveCfg = Debug|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x64.Build.0 = Debug|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x86.ActiveCfg = Debug|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x86.Build.0 = Debug|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|Any CPU.Build.0 = Release|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x64.ActiveCfg = Release|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x64.Build.0 = Release|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x86.ActiveCfg = Release|Any CPU + {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -82,5 +110,7 @@ Global {CA24E7F9-72FD-4649-8133-66E21452E65C} = {0AB3BF05-4346-4AA6-1389-037BE0695223} {8BE7AB9B-9344-4252-AA1C-825487314E58} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {7F395C90-4E7B-4827-BD62-762E4AA60AE4} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + {B2CEEB9C-E4D3-4578-ABF3-261A249E0611} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {0F95507E-D2E4-48DD-AB43-70A0E26195E9} = {0AB3BF05-4346-4AA6-1389-037BE0695223} EndGlobalSection EndGlobal diff --git a/Directory.Packages.props b/Directory.Packages.props index 065c57c..78239c9 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -2,6 +2,7 @@ + diff --git a/src/AppName.Infrastructure/AppName.Infrastructure.csproj b/src/AppName.Infrastructure/AppName.Infrastructure.csproj new file mode 100644 index 0000000..84e47d2 --- /dev/null +++ b/src/AppName.Infrastructure/AppName.Infrastructure.csproj @@ -0,0 +1,16 @@ + + + + net10.0 + + + + + + + + + + + + diff --git a/src/AppName.Infrastructure/DependencyInjection.cs b/src/AppName.Infrastructure/DependencyInjection.cs new file mode 100644 index 0000000..f2e7bef --- /dev/null +++ b/src/AppName.Infrastructure/DependencyInjection.cs @@ -0,0 +1,16 @@ +using AppName.Domain.Abstractions; +using AppName.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; + +namespace AppName.Infrastructure; + +public static class DependencyInjection +{ + public static IServiceCollection AddInfrastructure(this IServiceCollection services, string dbPath) + { + services.AddDbContext(options => options.UseSqlite($"Data Source={dbPath}")); + services.AddScoped(); + return services; + } +} diff --git a/src/AppName.Infrastructure/Persistence/AppDbContext.cs b/src/AppName.Infrastructure/Persistence/AppDbContext.cs new file mode 100644 index 0000000..ce91ca3 --- /dev/null +++ b/src/AppName.Infrastructure/Persistence/AppDbContext.cs @@ -0,0 +1,19 @@ +using AppName.Domain.Entities; +using Microsoft.EntityFrameworkCore; + +namespace AppName.Infrastructure.Persistence; + +public sealed class AppDbContext : DbContext +{ + public AppDbContext(DbContextOptions options) : base(options) { } + + public DbSet Users => Set(); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var user = modelBuilder.Entity(); + user.HasKey(u => u.Id); + user.Property(u => u.Name).IsRequired(); + user.Property(u => u.Email).IsRequired(); + } +} diff --git a/src/AppName.Infrastructure/Persistence/UserRepository.cs b/src/AppName.Infrastructure/Persistence/UserRepository.cs new file mode 100644 index 0000000..98d72e4 --- /dev/null +++ b/src/AppName.Infrastructure/Persistence/UserRepository.cs @@ -0,0 +1,20 @@ +using AppName.Domain.Abstractions; +using AppName.Domain.Entities; +using Microsoft.EntityFrameworkCore; + +namespace AppName.Infrastructure.Persistence; + +public sealed class UserRepository : IUserRepository +{ + private readonly AppDbContext _db; + public UserRepository(AppDbContext db) => _db = db; + + public async Task AddAsync(User user, CancellationToken ct = default) + { + _db.Users.Add(user); + await _db.SaveChangesAsync(ct); + } + + public async Task> GetAllAsync(CancellationToken ct = default) + => await _db.Users.AsNoTracking().ToListAsync(ct); +} diff --git a/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj b/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj new file mode 100644 index 0000000..0fbf0ca --- /dev/null +++ b/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj @@ -0,0 +1,24 @@ + + + + net10.0 + false + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs b/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs new file mode 100644 index 0000000..b908c1e --- /dev/null +++ b/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs @@ -0,0 +1,39 @@ +using AppName.Domain.Entities; +using AppName.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace AppName.Infrastructure.Tests; + +public class UserRepositoryTests +{ + private static AppDbContext NewContext(string dbPath) + { + var options = new DbContextOptionsBuilder() + .UseSqlite($"Data Source={dbPath}") + .Options; + var ctx = new AppDbContext(options); + ctx.Database.EnsureCreated(); + return ctx; + } + + [Fact] + public async Task AddAsync_ThenGetAllAsync_ReturnsPersistedUser() + { + var dbPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.db"); + try + { + await using var ctx = NewContext(dbPath); + var repo = new UserRepository(ctx); + + await repo.AddAsync(new User(Guid.NewGuid(), "Ada", "ada@x.com")); + var all = await repo.GetAllAsync(); + + var user = Assert.Single(all); + Assert.Equal("Ada", user.Name); + } + finally + { + if (File.Exists(dbPath)) File.Delete(dbPath); + } + } +} From 07cd15541773fa476015293fed1d044181859299 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 17:21:49 -0600 Subject: [PATCH 10/19] feat(maui): add MAUI host with HybridWebView and DI wiring Creates AppName.Maui project: MAUI app with HybridWebView (HybridRoot="web", DefaultFile="index.html") serving React from Resources/Raw/web. MauiProgram wires AddApplication() + AddInfrastructure(dbPath). App resolves MainPage from DI. Workload: maui-android (includes MAUI core, controls, templates). --- AppName.sln | 15 + Directory.Packages.props | 2 + src/AppName.Maui/App.xaml | 14 + src/AppName.Maui/App.xaml.cs | 10 + src/AppName.Maui/AppName.Maui.csproj | 78 ++++ src/AppName.Maui/MainPage.xaml | 8 + src/AppName.Maui/MainPage.xaml.cs | 9 + src/AppName.Maui/MauiProgram.cs | 30 ++ .../Platforms/Android/AndroidManifest.xml | 6 + .../Platforms/Android/MainActivity.cs | 10 + .../Platforms/Android/MainApplication.cs | 15 + .../Android/Resources/values/colors.xml | 6 + .../Platforms/MacCatalyst/AppDelegate.cs | 9 + .../Platforms/MacCatalyst/Entitlements.plist | 14 + .../Platforms/MacCatalyst/Info.plist | 40 ++ .../Platforms/MacCatalyst/Program.cs | 15 + src/AppName.Maui/Platforms/Windows/App.xaml | 8 + .../Platforms/Windows/App.xaml.cs | 24 + .../Platforms/Windows/Package.appxmanifest | 46 ++ .../Platforms/Windows/app.manifest | 17 + src/AppName.Maui/Platforms/iOS/AppDelegate.cs | 9 + src/AppName.Maui/Platforms/iOS/Info.plist | 32 ++ src/AppName.Maui/Platforms/iOS/Program.cs | 15 + .../iOS/Resources/PrivacyInfo.xcprivacy | 51 ++ .../Properties/launchSettings.json | 8 + .../Resources/AppIcon/appicon.svg | 4 + .../Resources/AppIcon/appiconfg.svg | 8 + .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107276 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111164 bytes .../Resources/Images/dotnet_bot.png | Bin 0 -> 92532 bytes .../Resources/Raw/AboutAssets.txt | 15 + src/AppName.Maui/Resources/Raw/web/index.html | 5 + src/AppName.Maui/Resources/Splash/splash.svg | 8 + src/AppName.Maui/Resources/Styles/Colors.xaml | 44 ++ src/AppName.Maui/Resources/Styles/Styles.xaml | 434 ++++++++++++++++++ 35 files changed, 1009 insertions(+) create mode 100644 src/AppName.Maui/App.xaml create mode 100644 src/AppName.Maui/App.xaml.cs create mode 100644 src/AppName.Maui/AppName.Maui.csproj create mode 100644 src/AppName.Maui/MainPage.xaml create mode 100644 src/AppName.Maui/MainPage.xaml.cs create mode 100644 src/AppName.Maui/MauiProgram.cs create mode 100644 src/AppName.Maui/Platforms/Android/AndroidManifest.xml create mode 100644 src/AppName.Maui/Platforms/Android/MainActivity.cs create mode 100644 src/AppName.Maui/Platforms/Android/MainApplication.cs create mode 100644 src/AppName.Maui/Platforms/Android/Resources/values/colors.xml create mode 100644 src/AppName.Maui/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 src/AppName.Maui/Platforms/MacCatalyst/Entitlements.plist create mode 100644 src/AppName.Maui/Platforms/MacCatalyst/Info.plist create mode 100644 src/AppName.Maui/Platforms/MacCatalyst/Program.cs create mode 100644 src/AppName.Maui/Platforms/Windows/App.xaml create mode 100644 src/AppName.Maui/Platforms/Windows/App.xaml.cs create mode 100644 src/AppName.Maui/Platforms/Windows/Package.appxmanifest create mode 100644 src/AppName.Maui/Platforms/Windows/app.manifest create mode 100644 src/AppName.Maui/Platforms/iOS/AppDelegate.cs create mode 100644 src/AppName.Maui/Platforms/iOS/Info.plist create mode 100644 src/AppName.Maui/Platforms/iOS/Program.cs create mode 100644 src/AppName.Maui/Platforms/iOS/Resources/PrivacyInfo.xcprivacy create mode 100644 src/AppName.Maui/Properties/launchSettings.json create mode 100644 src/AppName.Maui/Resources/AppIcon/appicon.svg create mode 100644 src/AppName.Maui/Resources/AppIcon/appiconfg.svg create mode 100644 src/AppName.Maui/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 src/AppName.Maui/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 src/AppName.Maui/Resources/Images/dotnet_bot.png create mode 100644 src/AppName.Maui/Resources/Raw/AboutAssets.txt create mode 100644 src/AppName.Maui/Resources/Raw/web/index.html create mode 100644 src/AppName.Maui/Resources/Splash/splash.svg create mode 100644 src/AppName.Maui/Resources/Styles/Colors.xaml create mode 100644 src/AppName.Maui/Resources/Styles/Styles.xaml diff --git a/AppName.sln b/AppName.sln index 4c7109d..ce64bfc 100644 --- a/AppName.sln +++ b/AppName.sln @@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Infrastructure", "s EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Infrastructure.Tests", "tests\AppName.Infrastructure.Tests\AppName.Infrastructure.Tests.csproj", "{0F95507E-D2E4-48DD-AB43-70A0E26195E9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Maui", "src\AppName.Maui\AppName.Maui.csproj", "{89E211BB-FCAF-4A7D-8252-314AE63C4930}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -101,6 +103,18 @@ Global {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x64.Build.0 = Release|Any CPU {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x86.ActiveCfg = Release|Any CPU {0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x86.Build.0 = Release|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x64.ActiveCfg = Debug|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x64.Build.0 = Debug|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x86.ActiveCfg = Debug|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x86.Build.0 = Debug|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|Any CPU.ActiveCfg = Release|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|Any CPU.Build.0 = Release|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x64.ActiveCfg = Release|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x64.Build.0 = Release|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x86.ActiveCfg = Release|Any CPU + {89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -112,5 +126,6 @@ Global {7F395C90-4E7B-4827-BD62-762E4AA60AE4} = {0AB3BF05-4346-4AA6-1389-037BE0695223} {B2CEEB9C-E4D3-4578-ABF3-261A249E0611} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {0F95507E-D2E4-48DD-AB43-70A0E26195E9} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + {89E211BB-FCAF-4A7D-8252-314AE63C4930} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} EndGlobalSection EndGlobal diff --git a/Directory.Packages.props b/Directory.Packages.props index 78239c9..82be5c6 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -8,5 +8,7 @@ + + diff --git a/src/AppName.Maui/App.xaml b/src/AppName.Maui/App.xaml new file mode 100644 index 0000000..98c0924 --- /dev/null +++ b/src/AppName.Maui/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/src/AppName.Maui/App.xaml.cs b/src/AppName.Maui/App.xaml.cs new file mode 100644 index 0000000..131a5ae --- /dev/null +++ b/src/AppName.Maui/App.xaml.cs @@ -0,0 +1,10 @@ +namespace AppName.Maui; + +public partial class App : Application +{ + public App(MainPage mainPage) + { + InitializeComponent(); + MainPage = mainPage; + } +} diff --git a/src/AppName.Maui/AppName.Maui.csproj b/src/AppName.Maui/AppName.Maui.csproj new file mode 100644 index 0000000..982a8f7 --- /dev/null +++ b/src/AppName.Maui/AppName.Maui.csproj @@ -0,0 +1,78 @@ + + + + net10.0-android + $(TargetFrameworks);net10.0-ios;net10.0-maccatalyst + $(TargetFrameworks);net10.0-windows10.0.19041.0 + + + + + Exe + AppName.Maui + true + true + enable + enable + + + SourceGen + + + AppName.Maui + + + com.companyname.appname.maui + + + 1.0 + 1 + + + None + + 15.0 + 15.0 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AppName.Maui/MainPage.xaml b/src/AppName.Maui/MainPage.xaml new file mode 100644 index 0000000..39371d9 --- /dev/null +++ b/src/AppName.Maui/MainPage.xaml @@ -0,0 +1,8 @@ + + + + diff --git a/src/AppName.Maui/MainPage.xaml.cs b/src/AppName.Maui/MainPage.xaml.cs new file mode 100644 index 0000000..c109100 --- /dev/null +++ b/src/AppName.Maui/MainPage.xaml.cs @@ -0,0 +1,9 @@ +namespace AppName.Maui; + +public partial class MainPage : ContentPage +{ + public MainPage() + { + InitializeComponent(); + } +} diff --git a/src/AppName.Maui/MauiProgram.cs b/src/AppName.Maui/MauiProgram.cs new file mode 100644 index 0000000..a351759 --- /dev/null +++ b/src/AppName.Maui/MauiProgram.cs @@ -0,0 +1,30 @@ +using AppName.Application; +using AppName.Infrastructure; +using Microsoft.Extensions.Logging; + +namespace AppName.Maui; + +public static class MauiProgram +{ + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + }); + + var dbPath = Path.Combine(FileSystem.AppDataDirectory, "app.db"); + builder.Services.AddApplication(); + builder.Services.AddInfrastructure(dbPath); + + builder.Services.AddTransient(); + +#if DEBUG + builder.Logging.AddDebug(); +#endif + return builder.Build(); + } +} diff --git a/src/AppName.Maui/Platforms/Android/AndroidManifest.xml b/src/AppName.Maui/Platforms/Android/AndroidManifest.xml new file mode 100644 index 0000000..bdec9b5 --- /dev/null +++ b/src/AppName.Maui/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/AppName.Maui/Platforms/Android/MainActivity.cs b/src/AppName.Maui/Platforms/Android/MainActivity.cs new file mode 100644 index 0000000..50e6521 --- /dev/null +++ b/src/AppName.Maui/Platforms/Android/MainActivity.cs @@ -0,0 +1,10 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace AppName.Maui; + +[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] +public class MainActivity : MauiAppCompatActivity +{ +} diff --git a/src/AppName.Maui/Platforms/Android/MainApplication.cs b/src/AppName.Maui/Platforms/Android/MainApplication.cs new file mode 100644 index 0000000..13afafa --- /dev/null +++ b/src/AppName.Maui/Platforms/Android/MainApplication.cs @@ -0,0 +1,15 @@ +using Android.App; +using Android.Runtime; + +namespace AppName.Maui; + +[Application] +public class MainApplication : MauiApplication +{ + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/src/AppName.Maui/Platforms/Android/Resources/values/colors.xml b/src/AppName.Maui/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 0000000..5cd1604 --- /dev/null +++ b/src/AppName.Maui/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #512BD4 + #2B0B98 + #2B0B98 + \ No newline at end of file diff --git a/src/AppName.Maui/Platforms/MacCatalyst/AppDelegate.cs b/src/AppName.Maui/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 0000000..6657c17 --- /dev/null +++ b/src/AppName.Maui/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace AppName.Maui; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/src/AppName.Maui/Platforms/MacCatalyst/Entitlements.plist b/src/AppName.Maui/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 0000000..8e87c0c --- /dev/null +++ b/src/AppName.Maui/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + + + com.apple.security.app-sandbox + + + com.apple.security.network.client + + + + diff --git a/src/AppName.Maui/Platforms/MacCatalyst/Info.plist b/src/AppName.Maui/Platforms/MacCatalyst/Info.plist new file mode 100644 index 0000000..cfd1c83 --- /dev/null +++ b/src/AppName.Maui/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + UIDeviceFamily + + 2 + + LSApplicationCategoryType + public.app-category.lifestyle + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/src/AppName.Maui/Platforms/MacCatalyst/Program.cs b/src/AppName.Maui/Platforms/MacCatalyst/Program.cs new file mode 100644 index 0000000..a789cd6 --- /dev/null +++ b/src/AppName.Maui/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace AppName.Maui; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/src/AppName.Maui/Platforms/Windows/App.xaml b/src/AppName.Maui/Platforms/Windows/App.xaml new file mode 100644 index 0000000..8b0f8e9 --- /dev/null +++ b/src/AppName.Maui/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/src/AppName.Maui/Platforms/Windows/App.xaml.cs b/src/AppName.Maui/Platforms/Windows/App.xaml.cs new file mode 100644 index 0000000..154eca7 --- /dev/null +++ b/src/AppName.Maui/Platforms/Windows/App.xaml.cs @@ -0,0 +1,24 @@ +using Microsoft.UI.Xaml; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace AppName.Maui.WinUI; + +/// +/// Provides application-specific behavior to supplement the default Application class. +/// +public partial class App : MauiWinUIApplication +{ + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} + diff --git a/src/AppName.Maui/Platforms/Windows/Package.appxmanifest b/src/AppName.Maui/Platforms/Windows/Package.appxmanifest new file mode 100644 index 0000000..bff8395 --- /dev/null +++ b/src/AppName.Maui/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ + + + + + + + + + $placeholder$ + User Name + $placeholder$.png + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AppName.Maui/Platforms/Windows/app.manifest b/src/AppName.Maui/Platforms/Windows/app.manifest new file mode 100644 index 0000000..e6570d9 --- /dev/null +++ b/src/AppName.Maui/Platforms/Windows/app.manifest @@ -0,0 +1,17 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + true + + + diff --git a/src/AppName.Maui/Platforms/iOS/AppDelegate.cs b/src/AppName.Maui/Platforms/iOS/AppDelegate.cs new file mode 100644 index 0000000..6657c17 --- /dev/null +++ b/src/AppName.Maui/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace AppName.Maui; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/src/AppName.Maui/Platforms/iOS/Info.plist b/src/AppName.Maui/Platforms/iOS/Info.plist new file mode 100644 index 0000000..358337b --- /dev/null +++ b/src/AppName.Maui/Platforms/iOS/Info.plist @@ -0,0 +1,32 @@ + + + + + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/src/AppName.Maui/Platforms/iOS/Program.cs b/src/AppName.Maui/Platforms/iOS/Program.cs new file mode 100644 index 0000000..a789cd6 --- /dev/null +++ b/src/AppName.Maui/Platforms/iOS/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace AppName.Maui; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/src/AppName.Maui/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/src/AppName.Maui/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..1ea3a5d --- /dev/null +++ b/src/AppName.Maui/Platforms/iOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,51 @@ + + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + + diff --git a/src/AppName.Maui/Properties/launchSettings.json b/src/AppName.Maui/Properties/launchSettings.json new file mode 100644 index 0000000..f4c6c8d --- /dev/null +++ b/src/AppName.Maui/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "Project", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/src/AppName.Maui/Resources/AppIcon/appicon.svg b/src/AppName.Maui/Resources/AppIcon/appicon.svg new file mode 100644 index 0000000..5f04fcf --- /dev/null +++ b/src/AppName.Maui/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/AppName.Maui/Resources/AppIcon/appiconfg.svg b/src/AppName.Maui/Resources/AppIcon/appiconfg.svg new file mode 100644 index 0000000..62d66d7 --- /dev/null +++ b/src/AppName.Maui/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/AppName.Maui/Resources/Fonts/OpenSans-Regular.ttf b/src/AppName.Maui/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9b09396d20f615658d325a210f512f744aa46b5b GIT binary patch literal 107276 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

^^HzNyPfE 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 Z+*4FI`tfXNcYgb5j(Cej1P$z#{C~E6Unl?o literal 0 HcmV?d00001 diff --git a/src/AppName.Maui/Resources/Images/dotnet_bot.png b/src/AppName.Maui/Resources/Images/dotnet_bot.png new file mode 100644 index 0000000000000000000000000000000000000000..054167e59747d8174d8f31cd0e92e169c55e2206 GIT binary patch literal 92532 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 L^wq0WQQ`jseOuUX literal 0 HcmV?d00001 diff --git a/src/AppName.Maui/Resources/Raw/AboutAssets.txt b/src/AppName.Maui/Resources/Raw/AboutAssets.txt new file mode 100644 index 0000000..f22d3bf --- /dev/null +++ b/src/AppName.Maui/Resources/Raw/AboutAssets.txt @@ -0,0 +1,15 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories). Deployment of the asset to your application +is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. + + + +These files will be deployed with your package and will be accessible using Essentials: + + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + var contents = reader.ReadToEnd(); + } diff --git a/src/AppName.Maui/Resources/Raw/web/index.html b/src/AppName.Maui/Resources/Raw/web/index.html new file mode 100644 index 0000000..3e84848 --- /dev/null +++ b/src/AppName.Maui/Resources/Raw/web/index.html @@ -0,0 +1,5 @@ + + + AppName +

HybridWebView placeholder — React build replaces this.

+ diff --git a/src/AppName.Maui/Resources/Splash/splash.svg b/src/AppName.Maui/Resources/Splash/splash.svg new file mode 100644 index 0000000..62d66d7 --- /dev/null +++ b/src/AppName.Maui/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/AppName.Maui/Resources/Styles/Colors.xaml b/src/AppName.Maui/Resources/Styles/Colors.xaml new file mode 100644 index 0000000..daae3bd --- /dev/null +++ b/src/AppName.Maui/Resources/Styles/Colors.xaml @@ -0,0 +1,44 @@ + + + + + + #512BD4 + #ac99ea + #242424 + #DFD8F7 + #9880e5 + #2B0B98 + + White + Black + #D600AA + #190649 + #1f1f1f + + #E1E1E1 + #C8C8C8 + #ACACAC + #919191 + #6E6E6E + #404040 + #212121 + #141414 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AppName.Maui/Resources/Styles/Styles.xaml b/src/AppName.Maui/Resources/Styles/Styles.xaml new file mode 100644 index 0000000..0dce374 --- /dev/null +++ b/src/AppName.Maui/Resources/Styles/Styles.xaml @@ -0,0 +1,434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1734feb35b8a9be827bc0edfdee4608ea1cb4e15 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Mon, 29 Jun 2026 17:32:12 -0600 Subject: [PATCH 11/19] fix(maui): use CreateWindow instead of deprecated Application.MainPage Override CreateWindow(IActivationState?) returning new Window(_mainPage) to replace the soft-deprecated Application.MainPage setter (Obsolete in .NET 10). --- src/AppName.Maui/App.xaml.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/AppName.Maui/App.xaml.cs b/src/AppName.Maui/App.xaml.cs index 131a5ae..a05b95f 100644 --- a/src/AppName.Maui/App.xaml.cs +++ b/src/AppName.Maui/App.xaml.cs @@ -2,9 +2,14 @@ namespace AppName.Maui; public partial class App : Application { + private readonly MainPage _mainPage; + public App(MainPage mainPage) { InitializeComponent(); - MainPage = mainPage; + _mainPage = mainPage; } + + protected override Window CreateWindow(IActivationState? activationState) + => new Window(_mainPage); } From 9b84fcff6872f01fde0f57d0dcf4e9a2bbd96aa6 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Tue, 30 Jun 2026 10:47:49 -0600 Subject: [PATCH 12/19] feat(maui): add UsersBridge JS<->C# endpoint --- src/AppName.Maui/Bridge/UsersBridge.cs | 21 +++++++++++++++++++++ src/AppName.Maui/MainPage.xaml.cs | 5 ++++- src/AppName.Maui/MauiProgram.cs | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/AppName.Maui/Bridge/UsersBridge.cs diff --git a/src/AppName.Maui/Bridge/UsersBridge.cs b/src/AppName.Maui/Bridge/UsersBridge.cs new file mode 100644 index 0000000..68e38e1 --- /dev/null +++ b/src/AppName.Maui/Bridge/UsersBridge.cs @@ -0,0 +1,21 @@ +using AppName.Application.Dtos; +using AppName.Application.UseCases.Users; + +namespace AppName.Maui.Bridge; + +// Methods on this object are invoked from JavaScript via HybridWebView. +public sealed class UsersBridge +{ + private readonly GetUsersUseCase _getUsers; + private readonly AddUserUseCase _addUser; + + public UsersBridge(GetUsersUseCase getUsers, AddUserUseCase addUser) + { + _getUsers = getUsers; + _addUser = addUser; + } + + public Task> GetUsers() => _getUsers.ExecuteAsync(); + + public Task AddUser(string name, string email) => _addUser.ExecuteAsync(name, email); +} diff --git a/src/AppName.Maui/MainPage.xaml.cs b/src/AppName.Maui/MainPage.xaml.cs index c109100..bd38dfc 100644 --- a/src/AppName.Maui/MainPage.xaml.cs +++ b/src/AppName.Maui/MainPage.xaml.cs @@ -1,9 +1,12 @@ +using AppName.Maui.Bridge; + namespace AppName.Maui; public partial class MainPage : ContentPage { - public MainPage() + public MainPage(UsersBridge usersBridge) { InitializeComponent(); + HybridView.SetInvokeJavaScriptTarget(usersBridge); } } diff --git a/src/AppName.Maui/MauiProgram.cs b/src/AppName.Maui/MauiProgram.cs index a351759..a17ce32 100644 --- a/src/AppName.Maui/MauiProgram.cs +++ b/src/AppName.Maui/MauiProgram.cs @@ -20,6 +20,7 @@ public static MauiApp CreateMauiApp() builder.Services.AddApplication(); builder.Services.AddInfrastructure(dbPath); + builder.Services.AddTransient(); builder.Services.AddTransient(); #if DEBUG From f6183c90b5bfed62813e4c8d39bf091e0e77f956 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Tue, 30 Jun 2026 10:52:59 -0600 Subject: [PATCH 13/19] feat(web): add Vite React TS app with typed bridge client --- src/web/.gitignore | 24 + src/web/.oxlintrc.json | 8 + src/web/README.md | 32 + src/web/index.html | 13 + src/web/package-lock.json | 2625 ++++++++++++++++++++++ src/web/package.json | 31 + src/web/public/favicon.svg | 1 + src/web/public/icons.svg | 24 + src/web/src/App.tsx | 10 + src/web/src/bridge/client.test.ts | 34 + src/web/src/bridge/client.ts | 20 + src/web/src/bridge/types.ts | 6 + src/web/src/features/users/UsersList.tsx | 26 + src/web/src/index.css | 111 + src/web/src/main.tsx | 10 + src/web/src/test/setup.ts | 1 + src/web/tsconfig.app.json | 26 + src/web/tsconfig.json | 7 + src/web/tsconfig.node.json | 23 + src/web/vite.config.ts | 12 + src/web/vitest.config.ts | 11 + 21 files changed, 3055 insertions(+) create mode 100644 src/web/.gitignore create mode 100644 src/web/.oxlintrc.json create mode 100644 src/web/README.md create mode 100644 src/web/index.html create mode 100644 src/web/package-lock.json create mode 100644 src/web/package.json create mode 100644 src/web/public/favicon.svg create mode 100644 src/web/public/icons.svg create mode 100644 src/web/src/App.tsx create mode 100644 src/web/src/bridge/client.test.ts create mode 100644 src/web/src/bridge/client.ts create mode 100644 src/web/src/bridge/types.ts create mode 100644 src/web/src/features/users/UsersList.tsx create mode 100644 src/web/src/index.css create mode 100644 src/web/src/main.tsx create mode 100644 src/web/src/test/setup.ts create mode 100644 src/web/tsconfig.app.json create mode 100644 src/web/tsconfig.json create mode 100644 src/web/tsconfig.node.json create mode 100644 src/web/vite.config.ts create mode 100644 src/web/vitest.config.ts diff --git a/src/web/.gitignore b/src/web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/src/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/src/web/.oxlintrc.json b/src/web/.oxlintrc.json new file mode 100644 index 0000000..6fa991d --- /dev/null +++ b/src/web/.oxlintrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "typescript", "oxc"], + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} diff --git a/src/web/README.md b/src/web/README.md new file mode 100644 index 0000000..d6af7e3 --- /dev/null +++ b/src/web/README.md @@ -0,0 +1,32 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the Oxlint configuration + +If you are developing a production application, we recommend enabling type-aware lint rules by installing `oxlint-tsgolint` and editing `.oxlintrc.json`: + +```json +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "typescript", "oxc"], + "options": { + "typeAware": true + }, + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} +``` + +See the [Oxlint rules documentation](https://oxc.rs/docs/guide/usage/linter/rules) for the full list of rules and categories. diff --git a/src/web/index.html b/src/web/index.html new file mode 100644 index 0000000..5e3836a --- /dev/null +++ b/src/web/index.html @@ -0,0 +1,13 @@ + + + + + + + web + + +
+ + + diff --git a/src/web/package-lock.json b/src/web/package-lock.json new file mode 100644 index 0000000..d4a9e45 --- /dev/null +++ b/src/web/package-lock.json @@ -0,0 +1,2625 @@ +{ + "name": "web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.0", + "dependencies": { + "react": "^19.2.7", + "react-dom": "^19.2.7" + }, + "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@types/node": "^24.13.2", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.3", + "jsdom": "^29.1.1", + "oxlint": "^1.71.0", + "typescript": "~6.0.2", + "vite": "^8.1.1", + "vitest": "^4.1.9" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz", + "integrity": "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", + "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.9.tgz", + "integrity": "sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.0", + "@csstools/css-calc": "^3.2.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz", + "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.72.0.tgz", + "integrity": "sha512-zhCmvn+1Mj3UchAc/90i99S0t7jJUsHmFVSPg4UWrjO8b8eaSGwscgO6QAUtvHBstkjQwBttQNswEnAF1mIQdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.72.0.tgz", + "integrity": "sha512-mtH+aY/ozv1eZoCUC2owjFAtyNBKHpJHygKeEu9zXXnQGW1Q2/qOpvx+I+Lf23+TvTz66F4iiXUbl2cGvoLPCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.72.0.tgz", + "integrity": "sha512-EvnajNPDtfknB3ZieeOOyDTwJn9QXDiwfnF4ZDQqART6RG6hjY4WigQcZdGoK2dkB3e1vrmEzN9aYbQCUkh/gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.72.0.tgz", + "integrity": "sha512-ZkCdEa/G80A7vEHfeCDz/+L3m33DE73v32mDKhgOIgz8Uwf0DFcK7+uu6qC+7LEhmz5fpOe1osWKyjSNMydFIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.72.0.tgz", + "integrity": "sha512-NroXv2vh+sxVY1uya/rM5pjhx1hm8BzlYpx9q67QP0Xhw5MH2bf5GJylpvLEC+781p1Xli/317EoV9AlGwViag==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.72.0.tgz", + "integrity": "sha512-0NDywYgfj279Ou/BcQuCYSj7NJwBfmWn5qc5uGO/Ny7fUWmXyIpvawqX/8acQlWG6IXelJsJhj+JAy6sjsKj0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.72.0.tgz", + "integrity": "sha512-4vpXB06h65Ezsy4hRyrGjGrfa1SkVPii09yaajiYhmVpgsFiLD+KNxIx/BNAY+XiO+i1yqp9HHdwqM8VTqa5XQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.72.0.tgz", + "integrity": "sha512-immaN4g2ZGFiOkKrvRX9LvzZdd2GkQM5wR+UyzYyUuyhUTXGQ4HKUJH18xp4G8OfhCVaVAJfKZxwE1r8+4hhaQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.72.0.tgz", + "integrity": "sha512-JGHS9Mnr7iWyyLDxgCv1MhzVpAckgptg00F2gnxt/GD7lQ2SW1BRcxHqhSTaSdDpjWRrBkBxMMh4+Hn3aVtExg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.72.0.tgz", + "integrity": "sha512-AOYgBZqxNshrg83P9v0RYv+m8s10Cqkj4/PxXFDhcS3k7FqsIG5+CxErshZCIN7G8iy4Y+VGfAsuEdar8AcbBg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.72.0.tgz", + "integrity": "sha512-QMybPS5ij3/vrKG67mqzHwW++91sYxK/PPUVi6SBtNCEzW4niS52fVBdXbQ6nou0wWbUPEpx8Sl/ZjtgE3clXA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.72.0.tgz", + "integrity": "sha512-gOc3W7JV0PXRpIL7stUlLe3Wa9Gp0Kdlup87IT3gHDvPKck2xNgMIl/Gs2lldYY2lyXZDC4rWi3hmoLUobkgbQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.72.0.tgz", + "integrity": "sha512-rpGxph+FjjHcYI5q6uxB3Az+tnfmEnDbSA8+PK9ZE/VzyUAkvBOMeuY7ZQMhu5mpZH7YQDsTdW6Cx4kV/msc6w==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.72.0.tgz", + "integrity": "sha512-WND+uhf/Ko13SLqQMWQUgsZuLvYYEvL0ZKgg0tgGYfLqxG7l8Ju123fHDMJyYSDl5E3bUbpFUuii/OvMreFQzw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.72.0.tgz", + "integrity": "sha512-SrpbrUL70nG9vh6zP4/oKHWgLuHquwsr7MW9XOn0olBVgh10Uqr8qscKhQoBGEn6olK/IUpn5GSKcdQ5AjUhGA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.72.0.tgz", + "integrity": "sha512-qkrsEn6NmgFKr7U/QnezQMb+q/vzAy0Dd9Y95gQGQTyjzDLN+HRZMuM5u70iyH4nBLCfKBzhjMsYCehKay2jyg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.72.0.tgz", + "integrity": "sha512-LWR6ZlFZph+KPjXv8opgZsXRDCdrdQe8VL8Cg9zxCoBS73h6znzZpydVgmdnwj8mB9AuSM5jxEgDJDpQkjboeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.72.0.tgz", + "integrity": "sha512-yt6HEh7IsHvtjRWtmeZRX134eaXKHq5Gnqlf1xBJdJl1JtdoRUEJw3nAxpZoUDS860cX/foKbztO441anVBtVQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.72.0.tgz", + "integrity": "sha512-b2eKFD2hX7tIwmo/cyH6TDq8vzWRZ2qNHrzoGntUTmq0h3zQh/uX3eTSHCwI8OB/ADQfJCRelLItK8BsxuucDA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.3.tgz", + "integrity": "sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", + "integrity": "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/jsdom": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/oxlint": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.72.0.tgz", + "integrity": "sha512-1rhdZIP/EvoI91ABIwNU5Q8+bWf8mjrS5UzIOZld4d4bXxJvtlUhlQvaoTogIGin/qdErMOrwaIJvCSIAKTLhA==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.72.0", + "@oxlint/binding-android-arm64": "1.72.0", + "@oxlint/binding-darwin-arm64": "1.72.0", + "@oxlint/binding-darwin-x64": "1.72.0", + "@oxlint/binding-freebsd-x64": "1.72.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.72.0", + "@oxlint/binding-linux-arm-musleabihf": "1.72.0", + "@oxlint/binding-linux-arm64-gnu": "1.72.0", + "@oxlint/binding-linux-arm64-musl": "1.72.0", + "@oxlint/binding-linux-ppc64-gnu": "1.72.0", + "@oxlint/binding-linux-riscv64-gnu": "1.72.0", + "@oxlint/binding-linux-riscv64-musl": "1.72.0", + "@oxlint/binding-linux-s390x-gnu": "1.72.0", + "@oxlint/binding-linux-x64-gnu": "1.72.0", + "@oxlint/binding-linux-x64-musl": "1.72.0", + "@oxlint/binding-openharmony-arm64": "1.72.0", + "@oxlint/binding-win32-arm64-msvc": "1.72.0", + "@oxlint/binding-win32-ia32-msvc": "1.72.0", + "@oxlint/binding-win32-x64-msvc": "1.72.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.22.1", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.137.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.5.tgz", + "integrity": "sha512-RfEzKWcq5fHUOFq7J3rl3Oz6ylKGtcHqUznzj4EcXsxLSIjJcvpbXAQtWGeJQ0xKnimR5e0Cn+cn9TssfMzm+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.5" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.5.tgz", + "integrity": "sha512-pGrwzZDvPwKe+7NNUqAunb6rqTfynr0VOUhCMdqbu5xlvNiszsAJygRzwvpVycdzejlbpY+SWJOn+s75Og7FEA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.2.tgz", + "integrity": "sha512-6YYPbRXTxx6bRXmOn7XdnQAy5DQNHhDgtjhDHI13oe4pY93kkcdGJWxpGwOm++/Wh0QpQhDrpIoVMrmrsI5AGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.16", + "rolldown": "~1.1.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/src/web/package.json b/src/web/package.json new file mode 100644 index 0000000..fd192aa --- /dev/null +++ b/src/web/package.json @@ -0,0 +1,31 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "oxlint", + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "react": "^19.2.7", + "react-dom": "^19.2.7" + }, + "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@types/node": "^24.13.2", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.3", + "jsdom": "^29.1.1", + "oxlint": "^1.71.0", + "typescript": "~6.0.2", + "vite": "^8.1.1", + "vitest": "^4.1.9" + } +} diff --git a/src/web/public/favicon.svg b/src/web/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/src/web/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/web/public/icons.svg b/src/web/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/src/web/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/src/App.tsx b/src/web/src/App.tsx new file mode 100644 index 0000000..f3a76d9 --- /dev/null +++ b/src/web/src/App.tsx @@ -0,0 +1,10 @@ +import { UsersList } from "./features/users/UsersList"; + +export default function App() { + return ( +
+

AppName

+ +
+ ); +} diff --git a/src/web/src/bridge/client.test.ts b/src/web/src/bridge/client.test.ts new file mode 100644 index 0000000..415339e --- /dev/null +++ b/src/web/src/bridge/client.test.ts @@ -0,0 +1,34 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import { bridge } from "./client"; +import type { UserDto } from "./types"; + +declare global { + // eslint-disable-next-line no-var + var HybridWebView: { InvokeDotNet: (name: string, args?: unknown[]) => Promise }; +} + +describe("bridge.users", () => { + beforeEach(() => { + globalThis.HybridWebView = { InvokeDotNet: vi.fn() }; + }); + + it("getAll calls GetUsers and returns the result", async () => { + const fake: UserDto[] = [{ id: "1", name: "Ada", email: "ada@x.com" }]; + (globalThis.HybridWebView.InvokeDotNet as ReturnType).mockResolvedValue(fake); + + const result = await bridge.users.getAll(); + + expect(globalThis.HybridWebView.InvokeDotNet).toHaveBeenCalledWith("GetUsers"); + expect(result).toEqual(fake); + }); + + it("add calls AddUser with name and email", async () => { + const created: UserDto = { id: "2", name: "Bob", email: "bob@x.com" }; + (globalThis.HybridWebView.InvokeDotNet as ReturnType).mockResolvedValue(created); + + const result = await bridge.users.add("Bob", "bob@x.com"); + + expect(globalThis.HybridWebView.InvokeDotNet).toHaveBeenCalledWith("AddUser", ["Bob", "bob@x.com"]); + expect(result).toEqual(created); + }); +}); diff --git a/src/web/src/bridge/client.ts b/src/web/src/bridge/client.ts new file mode 100644 index 0000000..43122e4 --- /dev/null +++ b/src/web/src/bridge/client.ts @@ -0,0 +1,20 @@ +import type { UserDto } from "./types"; + +// HybridWebView injects this global at runtime. +declare const HybridWebView: { + InvokeDotNet: (methodName: string, args?: unknown[]) => Promise; +}; + +function invoke(method: string, args?: unknown[]): Promise { + return (args !== undefined + ? HybridWebView.InvokeDotNet(method, args) + : HybridWebView.InvokeDotNet(method)) as Promise; +} + +export const bridge = { + users: { + getAll: (): Promise => invoke("GetUsers"), + add: (name: string, email: string): Promise => + invoke("AddUser", [name, email]), + }, +}; diff --git a/src/web/src/bridge/types.ts b/src/web/src/bridge/types.ts new file mode 100644 index 0000000..1bdbf0f --- /dev/null +++ b/src/web/src/bridge/types.ts @@ -0,0 +1,6 @@ +// Mirrors AppName.Application.Dtos.UserDto — keep in sync by hand. +export interface UserDto { + id: string; + name: string; + email: string; +} diff --git a/src/web/src/features/users/UsersList.tsx b/src/web/src/features/users/UsersList.tsx new file mode 100644 index 0000000..bb9dabc --- /dev/null +++ b/src/web/src/features/users/UsersList.tsx @@ -0,0 +1,26 @@ +import { useEffect, useState } from "react"; +import { bridge } from "../../bridge/client"; +import type { UserDto } from "../../bridge/types"; + +export function UsersList() { + const [users, setUsers] = useState([]); + const [error, setError] = useState(null); + + useEffect(() => { + bridge.users + .getAll() + .then(setUsers) + .catch((e: unknown) => setError(String(e))); + }, []); + + if (error) return

Bridge error: {error}

; + return ( +
    + {users.map((u) => ( +
  • + {u.name} — {u.email} +
  • + ))} +
+ ); +} diff --git a/src/web/src/index.css b/src/web/src/index.css new file mode 100644 index 0000000..5fb3313 --- /dev/null +++ b/src/web/src/index.css @@ -0,0 +1,111 @@ +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, 'Segoe UI', Roboto, sans-serif; + --heading: system-ui, 'Segoe UI', Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +#root { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +body { + margin: 0; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} diff --git a/src/web/src/main.tsx b/src/web/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/src/web/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/web/src/test/setup.ts b/src/web/src/test/setup.ts new file mode 100644 index 0000000..d0de870 --- /dev/null +++ b/src/web/src/test/setup.ts @@ -0,0 +1 @@ +import "@testing-library/jest-dom"; diff --git a/src/web/tsconfig.app.json b/src/web/tsconfig.app.json new file mode 100644 index 0000000..6830b6f --- /dev/null +++ b/src/web/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "types": ["vite/client"], + "allowArbitraryExtensions": true, + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/src/web/tsconfig.json b/src/web/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/src/web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/src/web/tsconfig.node.json b/src/web/tsconfig.node.json new file mode 100644 index 0000000..8455dcb --- /dev/null +++ b/src/web/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "module": "nodenext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/src/web/vite.config.ts b/src/web/vite.config.ts new file mode 100644 index 0000000..804be73 --- /dev/null +++ b/src/web/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +// HybridWebView serves from a virtual root; assets must use relative paths. +export default defineConfig({ + plugins: [react()], + base: "./", + build: { + outDir: "../AppName.Maui/Resources/Raw/web", + emptyOutDir: true, + }, +}); diff --git a/src/web/vitest.config.ts b/src/web/vitest.config.ts new file mode 100644 index 0000000..f409aba --- /dev/null +++ b/src/web/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "vitest/config"; +import react from "@vitejs/plugin-react"; + +export default defineConfig({ + plugins: [react()], + test: { + environment: "jsdom", + globals: true, + setupFiles: ["./src/test/setup.ts"], + }, +}); From fe063e7528e433bcbbcc3a40cd682813dabef31b Mon Sep 17 00:00:00 2001 From: Matthew Hsu Date: Tue, 30 Jun 2026 10:54:23 -0600 Subject: [PATCH 14/19] chore: untrack Resources/Raw/web build output (regenerated by Vite) --- src/AppName.Maui/Resources/Raw/web/index.html | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/AppName.Maui/Resources/Raw/web/index.html diff --git a/src/AppName.Maui/Resources/Raw/web/index.html b/src/AppName.Maui/Resources/Raw/web/index.html deleted file mode 100644 index 3e84848..0000000 --- a/src/AppName.Maui/Resources/Raw/web/index.html +++ /dev/null @@ -1,5 +0,0 @@ - - - AppName -

HybridWebView placeholder — React build replaces this.

- From 54b9a1c0d836136870908c715a7acc140e9b89ba Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Tue, 30 Jun 2026 11:02:36 -0600 Subject: [PATCH 15/19] build(maui): run Vite build before MAUI build (toggleable) --- src/AppName.Maui/AppName.Maui.csproj | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/AppName.Maui/AppName.Maui.csproj b/src/AppName.Maui/AppName.Maui.csproj index 982a8f7..5df4793 100644 --- a/src/AppName.Maui/AppName.Maui.csproj +++ b/src/AppName.Maui/AppName.Maui.csproj @@ -70,9 +70,21 @@ - - - + + + + + + false + $(MSBuildProjectDirectory)/../web + + + + + + + + From b811ae7d580da170d7bd4e81ee45ac5eadfc3bb0 Mon Sep 17 00:00:00 2001 From: Matthew Hsu Date: Tue, 30 Jun 2026 11:06:12 -0600 Subject: [PATCH 16/19] build(maui): revert React-build hook to plain BeforeBuild (avoid internal-target coupling) --- src/AppName.Maui/AppName.Maui.csproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/AppName.Maui/AppName.Maui.csproj b/src/AppName.Maui/AppName.Maui.csproj index 5df4793..c527452 100644 --- a/src/AppName.Maui/AppName.Maui.csproj +++ b/src/AppName.Maui/AppName.Maui.csproj @@ -81,7 +81,10 @@ $(MSBuildProjectDirectory)/../web - + + From d7708d59b74722dde4c427df5fe481d1f888c68e Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Tue, 30 Jun 2026 11:10:06 -0600 Subject: [PATCH 17/19] docs: add README with layout, dev loop, bridge, and known issues --- README.md | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..72bd15c --- /dev/null +++ b/README.md @@ -0,0 +1,159 @@ +# AppName + +.NET MAUI app hosting a React (Vite + TypeScript) UI via `HybridWebView`, +structured with clean architecture. + +## Layout + +``` +src/ + AppName.Domain/ — entities, value objects, domain interfaces (no dependencies) + AppName.Application/ — use cases, DTOs, ports (depends on Domain only) + AppName.Infrastructure/ — EF Core/SQLite repository, DI wiring (implements ports) + AppName.Maui/ — MAUI host, HybridWebView, JS↔C# bridge, DI composition root + web/ — React + Vite + TypeScript UI (builds into AppName.Maui/Resources/Raw/web) +tests/ + AppName.Domain.Tests/ + AppName.Application.Tests/ + AppName.Infrastructure.Tests/ +``` + +The `src/AppName.Maui/Resources/Raw/web` directory is gitignored; it is produced +by `npm run build` in `src/web`. + +## Prerequisites + +- **.NET 10 SDK** (`dotnet --version` → `10.x`) +- **MAUI workload:** + - Linux: `dotnet workload install maui-android` + (full `maui` workload is not supported on Linux; only `net10.0-android` builds on Linux) + - Windows/macOS: `dotnet workload install maui` + (installs all targets; iOS/Mac Catalyst require macOS; Windows target requires Windows) +- **Node 24+** and npm (for the React front-end) +- **Platform SDKs** for the targets you want to deploy to: + - Android: Android SDK (required even on Linux) + - iOS / Mac Catalyst: macOS + Xcode + - Windows: Windows 10/11 + Windows App SDK + +## Platform build matrix + +| Target | Linux | macOS | Windows | +|-----------------------|-------|-------|---------| +| `net10.0-android` | yes | yes | yes | +| `net10.0-ios` | — | yes | — | +| `net10.0-maccatalyst` | — | yes | — | +| `net10.0-windows*` | — | — | yes | + +The `.csproj` gates `ios`/`maccatalyst` behind `!IsOSPlatform('linux')` and +the Windows target behind `IsOSPlatform('windows')`. + +## Run (bundled assets — production-like) + +```bash +# Build the React app first (or let the MSBuild target do it automatically): +cd src/web && npm install && npm run build && cd ../.. + +# Then build and deploy the MAUI app for Android: +dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android +# Deploy/run via your IDE, or: +dotnet build src/AppName.Maui/AppName.Maui.csproj -f net10.0-android -t:Run +``` + +The MAUI build automatically runs `npm install && npm run build` in `src/web` +via the `BuildReactApp` MSBuild target (`BeforeTargets="BeforeBuild"`). +Skip this step when using the Vite dev server: `-p:SkipReactBuild=true`. + +## Develop the UI with hot reload (Vite dev server) + +```bash +cd src/web && npm run dev # serves at http://localhost:5173 +``` + +Build MAUI with `-p:SkipReactBuild=true` to skip the Vite build step during +development. To point the `HybridWebView` at the dev server, add a dev-time +URL override in `MainPage` (see the comment stub there). + +## Test + +```bash +# C# — build each test project then run (single-process to avoid OOM on constrained hosts): +export DOTNET_CLI_TELEMETRY_OPTOUT=1 MSBUILDDISABLENODEREUSE=1 DOTNET_CLI_USE_MSBUILD_SERVER=0 +dotnet build tests/AppName.Domain.Tests -m:1 +dotnet test tests/AppName.Domain.Tests --no-build -m:1 # 4 tests + +dotnet build tests/AppName.Application.Tests -m:1 +dotnet test tests/AppName.Application.Tests --no-build -m:1 # 2 tests + +dotnet build tests/AppName.Infrastructure.Tests -m:1 +dotnet test tests/AppName.Infrastructure.Tests --no-build -m:1 # 1 test + +# React + bridge client +cd src/web && npm test # 2 tests (Vitest) +``` + +## The JS↔C# bridge + +`HybridWebView` injects a `HybridWebView.InvokeDotNet(methodName, args)` global +into the web page. The bridge target is `UsersBridge` (registered as a transient +in `MauiProgram`), set via `HybridView.SetInvokeJavaScriptTarget(usersBridge)` in +`MainPage`. + +**C# side** — `src/AppName.Maui/Bridge/UsersBridge.cs`: + +| Method | Signature | Description | +|--------|-----------|-------------| +| `GetUsers` | `Task> GetUsers()` | Returns all users from the SQLite repository | +| `AddUser` | `Task AddUser(string name, string email)` | Creates and persists a new user | + +**TypeScript side** — `src/web/src/bridge/`: + +- `types.ts` — mirrors `AppName.Application.Dtos.UserDto` as a TS interface + (`id: string`, `name: string`, `email: string` — camelCase) +- `client.ts` — typed wrapper around `InvokeDotNet`: + - `bridge.users.getAll()` → invokes `"GetUsers"` + - `bridge.users.add(name, email)` → invokes `"AddUser"` + +**Keeping types in sync:** C# `UserDto(Guid Id, string Name, string Email)` (PascalCase) +maps to TS `UserDto { id, name, email }` (camelCase). When you add new DTOs or +bridge methods, update both `AppName.Application/Dtos/` and `src/web/src/bridge/types.ts` +by hand. + +## Known issues + +### NU1903 — SQLitePCLRaw.lib.e_sqlite3 vulnerability advisory + +Restoring any project that transitively pulls in EF Core SQLite will surface: + +``` +warning NU1903: Package 'SQLitePCLRaw.lib.e_sqlite3' 2.1.10 has a known high severity +vulnerability, https://github.com/advisories/GHSA-2m69-gcr7-jv3q +``` + +This advisory (GHSA-2m69-gcr7-jv3q) currently affects **all published versions** of +`SQLitePCLRaw.lib.e_sqlite3` — there is no upstream patch. It is an inherent +consequence of using EF Core SQLite today. Options: + +1. **Accept for now** — treat it as a known advisory and monitor for an upstream release. +2. **Suppress the audit warning** — add `` to `Directory.Packages.props` + once you have assessed the risk for your deployment context. +3. **Switch DB provider** — replace EF Core SQLite with another provider + (e.g. EF Core InMemory for development/testing, or a different SQLite binding). + +## Build tips for memory-constrained machines + +MSBuild can OOM on machines with limited RAM when it spawns multiple worker nodes. +Use single-process mode for all builds: + +```bash +export DOTNET_CLI_USE_MSBUILD_SERVER=0 +export MSBUILDDISABLENODEREUSE=1 +dotnet build -m:1 +``` + +If you hit `MSB1025` (exit code 137 / OOM), also run: + +```bash +dotnet build-server shutdown +``` + +then retry with the flags above. From 4e5157d72f52097e852e19dbbcc8b7fe8c2dc961 Mon Sep 17 00:00:00 2001 From: MatthewHsu1 Date: Tue, 30 Jun 2026 11:21:57 -0600 Subject: [PATCH 18/19] fix: use IDbContextFactory for safe DbContext lifetime; review cleanups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch Infrastructure DI to AddDbContextFactory (singleton factory, each operation creates+disposes its own DbContext — safe in MAUI's single-scope env) - UserRepository now injects IDbContextFactory and uses await using per method - UserRepositoryTests uses a TestDbContextFactory for a genuine cross-context round-trip - Add trailing newlines to Domain and Infrastructure test csproj files - Remove dead .counter CSS selector from index.css (no .counter elements rendered) - Normalize tab indentation in AppName.Maui.csproj hand-added Target/PropertyGroup blocks --- .../DependencyInjection.cs | 2 +- .../Persistence/UserRepository.cs | 14 +++++--- src/AppName.Maui/AppName.Maui.csproj | 32 +++++++++---------- src/web/src/index.css | 3 +- .../AppName.Domain.Tests.csproj | 2 +- .../AppName.Infrastructure.Tests.csproj | 2 +- .../UserRepositoryTests.cs | 21 ++++++------ 7 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/AppName.Infrastructure/DependencyInjection.cs b/src/AppName.Infrastructure/DependencyInjection.cs index f2e7bef..6fb4536 100644 --- a/src/AppName.Infrastructure/DependencyInjection.cs +++ b/src/AppName.Infrastructure/DependencyInjection.cs @@ -9,7 +9,7 @@ public static class DependencyInjection { public static IServiceCollection AddInfrastructure(this IServiceCollection services, string dbPath) { - services.AddDbContext(options => options.UseSqlite($"Data Source={dbPath}")); + services.AddDbContextFactory(options => options.UseSqlite($"Data Source={dbPath}")); services.AddScoped(); return services; } diff --git a/src/AppName.Infrastructure/Persistence/UserRepository.cs b/src/AppName.Infrastructure/Persistence/UserRepository.cs index 98d72e4..2624e10 100644 --- a/src/AppName.Infrastructure/Persistence/UserRepository.cs +++ b/src/AppName.Infrastructure/Persistence/UserRepository.cs @@ -6,15 +6,19 @@ namespace AppName.Infrastructure.Persistence; public sealed class UserRepository : IUserRepository { - private readonly AppDbContext _db; - public UserRepository(AppDbContext db) => _db = db; + private readonly IDbContextFactory _factory; + public UserRepository(IDbContextFactory factory) => _factory = factory; public async Task AddAsync(User user, CancellationToken ct = default) { - _db.Users.Add(user); - await _db.SaveChangesAsync(ct); + await using var db = _factory.CreateDbContext(); + db.Users.Add(user); + await db.SaveChangesAsync(ct); } public async Task> GetAllAsync(CancellationToken ct = default) - => await _db.Users.AsNoTracking().ToListAsync(ct); + { + await using var db = _factory.CreateDbContext(); + return await db.Users.AsNoTracking().ToListAsync(ct); + } } diff --git a/src/AppName.Maui/AppName.Maui.csproj b/src/AppName.Maui/AppName.Maui.csproj index c527452..be9bc18 100644 --- a/src/AppName.Maui/AppName.Maui.csproj +++ b/src/AppName.Maui/AppName.Maui.csproj @@ -71,23 +71,23 @@ - - + + - - - false - $(MSBuildProjectDirectory)/../web - - - - - - - - + + + false + $(MSBuildProjectDirectory)/../web + + + + + + + + diff --git a/src/web/src/index.css b/src/web/src/index.css index 5fb3313..f6633a8 100644 --- a/src/web/src/index.css +++ b/src/web/src/index.css @@ -95,8 +95,7 @@ p { margin: 0; } -code, -.counter { +code { font-family: var(--mono); display: inline-flex; border-radius: 4px; diff --git a/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj b/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj index c774294..27e69b5 100644 --- a/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj +++ b/tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj b/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj index 0fbf0ca..5a0f504 100644 --- a/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj +++ b/tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj @@ -21,4 +21,4 @@ - \ No newline at end of file + diff --git a/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs b/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs index b908c1e..5fbf5f7 100644 --- a/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs +++ b/tests/AppName.Infrastructure.Tests/UserRepositoryTests.cs @@ -6,14 +6,13 @@ namespace AppName.Infrastructure.Tests; public class UserRepositoryTests { - private static AppDbContext NewContext(string dbPath) + private sealed class TestDbContextFactory : IDbContextFactory { - var options = new DbContextOptionsBuilder() - .UseSqlite($"Data Source={dbPath}") - .Options; - var ctx = new AppDbContext(options); - ctx.Database.EnsureCreated(); - return ctx; + private readonly DbContextOptions _options; + public TestDbContextFactory(string dbPath) + => _options = new DbContextOptionsBuilder() + .UseSqlite($"Data Source={dbPath}").Options; + public AppDbContext CreateDbContext() => new AppDbContext(_options); } [Fact] @@ -22,8 +21,12 @@ public async Task AddAsync_ThenGetAllAsync_ReturnsPersistedUser() var dbPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.db"); try { - await using var ctx = NewContext(dbPath); - var repo = new UserRepository(ctx); + var factory = new TestDbContextFactory(dbPath); + + using (var ctx = factory.CreateDbContext()) + ctx.Database.EnsureCreated(); + + var repo = new UserRepository(factory); await repo.AddAsync(new User(Guid.NewGuid(), "Ada", "ada@x.com")); var all = await repo.GetAllAsync(); From 555c3b83dbe468e420fef33064dc3af1b10e10e7 Mon Sep 17 00:00:00 2001 From: Matthew Hsu Date: Tue, 30 Jun 2026 11:28:43 -0600 Subject: [PATCH 19/19] ci: add GitHub Actions workflow (dotnet + web tests) --- .github/workflows/ci.yml | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c0a58e8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,57 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + dotnet-tests: + name: dotnet-tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + # The MAUI host project (src/AppName.Maui) is intentionally not built here: + # it requires the MAUI workload + platform SDKs. The platform-neutral layers + # (Domain / Application / Infrastructure) carry the unit tests and build on + # a plain runner. + - name: Test Domain + run: dotnet test tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj --configuration Release + + - name: Test Application + run: dotnet test tests/AppName.Application.Tests/AppName.Application.Tests.csproj --configuration Release + + - name: Test Infrastructure + run: dotnet test tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj --configuration Release + + web-tests: + name: web-tests + runs-on: ubuntu-latest + defaults: + run: + working-directory: src/web + steps: + - uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '24' + cache: 'npm' + cache-dependency-path: src/web/package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test + + - name: Build + run: npm run build