This PR contains the work done to introduce a new Web Swift package that provides a reusable, declarative way to register route controllers on a Hummingbird router, then adopt it in the Website service.
To provide further details about the work:
* Web package
* The `RouterController` protocol — a Sendable protocol to group controllers behind one `routes` property.
* The `RouteCollectionBuilder` — a result builder that collects controllers' route collections into a stack, with full support for optionals, conditionals, and arrays.
* The `addController(_:)` method — a `RouterMethods` extension letting controllers be listed declaratively and adding each one's routes at the router root.
* Website service
* Added Web as a dependency of the _WebsiteLibrary_ target.
* Conformed the `RootController` and `HealthController`controllers to the `RouterController` protocol.
* Updated the `App+Build` extension to to use the cleaner `router.addController { … }` instead.
Reviewed-on: rock-n-code/loud-amsterdam#17
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
59 lines
1.3 KiB
Plaintext
59 lines
1.3 KiB
Plaintext
{
|
|
"configurations" : [
|
|
{
|
|
"id" : "F3231E68-357B-4ED7-98E9-F5767AB17024",
|
|
"name" : "Test Scheme Action",
|
|
"options" : {
|
|
|
|
}
|
|
}
|
|
],
|
|
"defaultOptions" : {
|
|
"performanceAntipatternCheckerEnabled" : true,
|
|
"targetForVariableExpansion" : {
|
|
"containerPath" : "container:",
|
|
"identifier" : "Website",
|
|
"name" : "Website"
|
|
},
|
|
"testInteropMode" : "complete"
|
|
},
|
|
"testTargets" : [
|
|
{
|
|
"target" : {
|
|
"containerPath" : "container:",
|
|
"identifier" : "WebsiteTests",
|
|
"name" : "WebsiteTests"
|
|
}
|
|
},
|
|
{
|
|
"target" : {
|
|
"containerPath" : "container:",
|
|
"identifier" : "WebsiteLibraryTests",
|
|
"name" : "WebsiteLibraryTests"
|
|
}
|
|
},
|
|
{
|
|
"target" : {
|
|
"containerPath" : "container:..\/..\/Packages\/Persistence",
|
|
"identifier" : "PersistenceTests",
|
|
"name" : "PersistenceTests"
|
|
}
|
|
},
|
|
{
|
|
"target" : {
|
|
"containerPath" : "container:..\/..\/Packages\/Localization",
|
|
"identifier" : "LocalizationTests",
|
|
"name" : "LocalizationTests"
|
|
}
|
|
},
|
|
{
|
|
"target" : {
|
|
"containerPath" : "container:..\/..\/Packages\/Web",
|
|
"identifier" : "WebTests",
|
|
"name" : "WebTests"
|
|
}
|
|
}
|
|
],
|
|
"version" : 1
|
|
}
|