From fb493f13751e1f6715f27ff1fbd5da0501fff662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sat, 16 Mar 2024 15:50:54 +0100 Subject: [PATCH 1/4] feat: Rename the Typed module into just Spine --- README.md | 10 ---------- {typed-shared => api}/README.md | 6 +++--- {typed-shared => api}/build.gradle.kts | 6 +++--- .../src/commonMain/kotlin/DynamicResource.kt | 2 +- .../src/commonMain/kotlin/Endpoint.kt | 2 +- .../src/commonMain/kotlin/Parameters.kt | 2 +- .../src/commonMain/kotlin/Path.kt | 2 +- .../src/commonMain/kotlin/ResolvedEndpoint.kt | 2 +- .../src/commonMain/kotlin/ResolvedResource.kt | 2 +- .../src/commonMain/kotlin/Resource.kt | 2 +- .../src/commonMain/kotlin/RootResource.kt | 2 +- .../src/commonMain/kotlin/StaticResource.kt | 2 +- .../src/commonTest/kotlin/ParametersTest.kt | 2 +- .../src/commonTest/kotlin/PathTest.kt | 2 +- .../commonTest/kotlin/ResolvedRoutesTest.kt | 14 +++++++------- .../src/commonTest/kotlin/TypedTests.kt | 2 +- .../commonTest/kotlin/UsersAndDepartments.kt | 2 +- build.gradle.kts | 12 +++--------- {typed-client => client}/build.gradle.kts | 8 ++++---- .../src/commonMain/kotlin/Client.kt | 9 ++++----- .../src/commonMain/kotlin/SpineResponse.kt | 2 +- {typed-server => server}/build.gradle.kts | 10 +++++----- .../src/commonMain/kotlin/Server.kt | 10 +++++----- .../commonMain/kotlin/TypedResponseScope.kt | 7 +++---- .../src/commonTest/kotlin/RouteTest.kt | 7 ++++--- .../src/commonTest/kotlin/ServerTests.kt | 0 settings.gradle.kts | 18 +++--------------- typed-client/src/commonMain/kotlin/Marker.kt | 3 --- typed-server/src/commonMain/kotlin/Marker.kt | 3 --- 29 files changed, 58 insertions(+), 93 deletions(-) rename {typed-shared => api}/README.md (75%) rename {typed-shared => api}/build.gradle.kts (71%) rename {typed-shared => api}/src/commonMain/kotlin/DynamicResource.kt (93%) rename {typed-shared => api}/src/commonMain/kotlin/Endpoint.kt (99%) rename {typed-shared => api}/src/commonMain/kotlin/Parameters.kt (99%) rename {typed-shared => api}/src/commonMain/kotlin/Path.kt (97%) rename {typed-shared => api}/src/commonMain/kotlin/ResolvedEndpoint.kt (96%) rename {typed-shared => api}/src/commonMain/kotlin/ResolvedResource.kt (98%) rename {typed-shared => api}/src/commonMain/kotlin/Resource.kt (98%) rename {typed-shared => api}/src/commonMain/kotlin/RootResource.kt (92%) rename {typed-shared => api}/src/commonMain/kotlin/StaticResource.kt (88%) rename {typed-shared => api}/src/commonTest/kotlin/ParametersTest.kt (98%) rename {typed-shared => api}/src/commonTest/kotlin/PathTest.kt (96%) rename {typed-shared => api}/src/commonTest/kotlin/ResolvedRoutesTest.kt (68%) rename {typed-shared => api}/src/commonTest/kotlin/TypedTests.kt (87%) rename {typed-shared => api}/src/commonTest/kotlin/UsersAndDepartments.kt (97%) rename {typed-client => client}/build.gradle.kts (70%) rename {typed-client => client}/src/commonMain/kotlin/Client.kt (90%) rename {typed-client => client}/src/commonMain/kotlin/SpineResponse.kt (95%) rename {typed-server => server}/build.gradle.kts (73%) rename {typed-server => server}/src/commonMain/kotlin/Server.kt (85%) rename {typed-server => server}/src/commonMain/kotlin/TypedResponseScope.kt (90%) rename {typed-server => server}/src/commonTest/kotlin/RouteTest.kt (96%) rename {typed-server => server}/src/commonTest/kotlin/ServerTests.kt (100%) delete mode 100644 typed-client/src/commonMain/kotlin/Marker.kt delete mode 100644 typed-server/src/commonMain/kotlin/Marker.kt diff --git a/README.md b/README.md index 8bb6de9..78d7cbb 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ OpenSavvy Spine is a library to declare typesafe endpoints in code shared between your multiplatform clients and servers. -## Typed Ktor - Declare your endpoints and DTOs in your common code: ```kotlin @@ -59,14 +57,6 @@ client.request(Api.Users.create, user).isSuccessful() shouldBe true client.request(Api.Users.list).bodyOrNull() shouldContain user ``` -## Safe Ktor - -Safe Ktor is a collection of DSLs to make error management in HTTP endpoints explicit, using Arrow. - -## Spine - -Spine is the combination of Typed and Safe Ktor. - ## License This project is licensed under the [Apache 2.0 license](LICENSE). diff --git a/typed-shared/README.md b/api/README.md similarity index 75% rename from typed-shared/README.md rename to api/README.md index 4412a32..01e3a6e 100644 --- a/typed-shared/README.md +++ b/api/README.md @@ -1,8 +1,8 @@ -# Module Typed Ktor (shared code) +# Module Multiplatform API schema declaration Describe your Ktor API in code shared between the client and the server. - + @@ -12,7 +12,7 @@ Using Kotlin Multiplatform and KotlinX.Serialization, we can easily share DTOs, ## Declaring a schema -Typed Ktor is a library to declare a schema of our API in pure Kotlin. Once it is declared, we can use it identically on the client and server sides. +Spine is a library to declare a schema of our API in pure Kotlin. Once it is declared, we can use it identically on the client and server sides. We define that: diff --git a/typed-shared/build.gradle.kts b/api/build.gradle.kts similarity index 71% rename from typed-shared/build.gradle.kts rename to api/build.gradle.kts index 2f62256..41b5691 100644 --- a/typed-shared/build.gradle.kts +++ b/api/build.gradle.kts @@ -25,9 +25,9 @@ kotlin { } library { - name.set("Typed Ktor (shared code)") - description.set("Typesafe HTTP APIs with Ktor") - homeUrl.set("https://gitlab.com/opensavvy/spine") + name.set("Multiplatform API schema declaration") + description.set("Declare your Ktor API in code shared between your clients and servers") + homeUrl.set("https://gitlab.com/opensavvy/groundwork/spine") license.set { name.set("Apache 2.0") diff --git a/typed-shared/src/commonMain/kotlin/DynamicResource.kt b/api/src/commonMain/kotlin/DynamicResource.kt similarity index 93% rename from typed-shared/src/commonMain/kotlin/DynamicResource.kt rename to api/src/commonMain/kotlin/DynamicResource.kt index 627b6d4..3a3c034 100644 --- a/typed-shared/src/commonMain/kotlin/DynamicResource.kt +++ b/api/src/commonMain/kotlin/DynamicResource.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api abstract class DynamicResource( slug: String, diff --git a/typed-shared/src/commonMain/kotlin/Endpoint.kt b/api/src/commonMain/kotlin/Endpoint.kt similarity index 99% rename from typed-shared/src/commonMain/kotlin/Endpoint.kt rename to api/src/commonMain/kotlin/Endpoint.kt index 88d6c5a..13949a3 100644 --- a/typed-shared/src/commonMain/kotlin/Endpoint.kt +++ b/api/src/commonMain/kotlin/Endpoint.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import io.ktor.http.* import kotlin.reflect.KClass diff --git a/typed-shared/src/commonMain/kotlin/Parameters.kt b/api/src/commonMain/kotlin/Parameters.kt similarity index 99% rename from typed-shared/src/commonMain/kotlin/Parameters.kt rename to api/src/commonMain/kotlin/Parameters.kt index e3ce274..0bbecc5 100644 --- a/typed-shared/src/commonMain/kotlin/Parameters.kt +++ b/api/src/commonMain/kotlin/Parameters.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import kotlin.jvm.JvmInline import kotlin.reflect.KProperty diff --git a/typed-shared/src/commonMain/kotlin/Path.kt b/api/src/commonMain/kotlin/Path.kt similarity index 97% rename from typed-shared/src/commonMain/kotlin/Path.kt rename to api/src/commonMain/kotlin/Path.kt index f8f0eb4..edae159 100644 --- a/typed-shared/src/commonMain/kotlin/Path.kt +++ b/api/src/commonMain/kotlin/Path.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import kotlin.jvm.JvmInline diff --git a/typed-shared/src/commonMain/kotlin/ResolvedEndpoint.kt b/api/src/commonMain/kotlin/ResolvedEndpoint.kt similarity index 96% rename from typed-shared/src/commonMain/kotlin/ResolvedEndpoint.kt rename to api/src/commonMain/kotlin/ResolvedEndpoint.kt index d4e15b0..d98d49c 100644 --- a/typed-shared/src/commonMain/kotlin/ResolvedEndpoint.kt +++ b/api/src/commonMain/kotlin/ResolvedEndpoint.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api /** * A resolved [Endpoint][AnyEndpoint]. diff --git a/typed-shared/src/commonMain/kotlin/ResolvedResource.kt b/api/src/commonMain/kotlin/ResolvedResource.kt similarity index 98% rename from typed-shared/src/commonMain/kotlin/ResolvedResource.kt rename to api/src/commonMain/kotlin/ResolvedResource.kt index 9b831aa..5f71697 100644 --- a/typed-shared/src/commonMain/kotlin/ResolvedResource.kt +++ b/api/src/commonMain/kotlin/ResolvedResource.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api /** * A resolved [Resource]. diff --git a/typed-shared/src/commonMain/kotlin/Resource.kt b/api/src/commonMain/kotlin/Resource.kt similarity index 98% rename from typed-shared/src/commonMain/kotlin/Resource.kt rename to api/src/commonMain/kotlin/Resource.kt index a930d64..1030d9f 100644 --- a/typed-shared/src/commonMain/kotlin/Resource.kt +++ b/api/src/commonMain/kotlin/Resource.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import io.ktor.http.* diff --git a/typed-shared/src/commonMain/kotlin/RootResource.kt b/api/src/commonMain/kotlin/RootResource.kt similarity index 92% rename from typed-shared/src/commonMain/kotlin/RootResource.kt rename to api/src/commonMain/kotlin/RootResource.kt index 9a3c570..60931e4 100644 --- a/typed-shared/src/commonMain/kotlin/RootResource.kt +++ b/api/src/commonMain/kotlin/RootResource.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api abstract class RootResource( slug: String, diff --git a/typed-shared/src/commonMain/kotlin/StaticResource.kt b/api/src/commonMain/kotlin/StaticResource.kt similarity index 88% rename from typed-shared/src/commonMain/kotlin/StaticResource.kt rename to api/src/commonMain/kotlin/StaticResource.kt index 120adf1..5de8b90 100644 --- a/typed-shared/src/commonMain/kotlin/StaticResource.kt +++ b/api/src/commonMain/kotlin/StaticResource.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api abstract class StaticResource( slug: String, diff --git a/typed-shared/src/commonTest/kotlin/ParametersTest.kt b/api/src/commonTest/kotlin/ParametersTest.kt similarity index 98% rename from typed-shared/src/commonTest/kotlin/ParametersTest.kt rename to api/src/commonTest/kotlin/ParametersTest.kt index ad85871..d2858f9 100644 --- a/typed-shared/src/commonTest/kotlin/ParametersTest.kt +++ b/api/src/commonTest/kotlin/ParametersTest.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import io.kotest.assertions.assertSoftly import io.kotest.assertions.throwables.shouldThrow diff --git a/typed-shared/src/commonTest/kotlin/PathTest.kt b/api/src/commonTest/kotlin/PathTest.kt similarity index 96% rename from typed-shared/src/commonTest/kotlin/PathTest.kt rename to api/src/commonTest/kotlin/PathTest.kt index 0f84680..64a6dca 100644 --- a/typed-shared/src/commonTest/kotlin/PathTest.kt +++ b/api/src/commonTest/kotlin/PathTest.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import io.kotest.assertions.throwables.shouldThrow import io.kotest.assertions.withClue diff --git a/typed-shared/src/commonTest/kotlin/ResolvedRoutesTest.kt b/api/src/commonTest/kotlin/ResolvedRoutesTest.kt similarity index 68% rename from typed-shared/src/commonTest/kotlin/ResolvedRoutesTest.kt rename to api/src/commonTest/kotlin/ResolvedRoutesTest.kt index b5e60b4..1f00691 100644 --- a/typed-shared/src/commonTest/kotlin/ResolvedRoutesTest.kt +++ b/api/src/commonTest/kotlin/ResolvedRoutesTest.kt @@ -1,12 +1,12 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import opensavvy.prepared.suite.SuiteDsl -import opensavvy.spine.typed.Root.Departments -import opensavvy.spine.typed.Root.Departments.Department -import opensavvy.spine.typed.Root.Users -import opensavvy.spine.typed.Root.Users.User -import opensavvy.spine.typed.Root.Users.User.Departments as UserDepartments -import opensavvy.spine.typed.Root.Users.User.Departments.Department as UserDepartment +import opensavvy.spine.api.Root.Departments +import opensavvy.spine.api.Root.Departments.Department +import opensavvy.spine.api.Root.Users +import opensavvy.spine.api.Root.Users.User +import opensavvy.spine.api.Root.Users.User.Departments as UserDepartments +import opensavvy.spine.api.Root.Users.User.Departments.Department as UserDepartment fun SuiteDsl.resolvedRouteTests() = suite("Resolved resource tests") { test("Simple static routes") { diff --git a/typed-shared/src/commonTest/kotlin/TypedTests.kt b/api/src/commonTest/kotlin/TypedTests.kt similarity index 87% rename from typed-shared/src/commonTest/kotlin/TypedTests.kt rename to api/src/commonTest/kotlin/TypedTests.kt index be77b02..d58baa2 100644 --- a/typed-shared/src/commonTest/kotlin/TypedTests.kt +++ b/api/src/commonTest/kotlin/TypedTests.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api import io.kotest.core.spec.style.StringSpec import opensavvy.prepared.runner.kotest.preparedSuite diff --git a/typed-shared/src/commonTest/kotlin/UsersAndDepartments.kt b/api/src/commonTest/kotlin/UsersAndDepartments.kt similarity index 97% rename from typed-shared/src/commonTest/kotlin/UsersAndDepartments.kt rename to api/src/commonTest/kotlin/UsersAndDepartments.kt index 7d0dbfd..d209400 100644 --- a/typed-shared/src/commonTest/kotlin/UsersAndDepartments.kt +++ b/api/src/commonTest/kotlin/UsersAndDepartments.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed +package opensavvy.spine.api // This file is an API example that's meant to have a bit of everything // It is used as a data source in other tests diff --git a/build.gradle.kts b/build.gradle.kts index dd7cd02..c81492c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,15 +21,9 @@ plugins { dependencies { // List the 'library' projects - dokkatoo(projects.typedShared) - dokkatoo(projects.typedServer) - dokkatoo(projects.typedClient) - dokkatoo(projects.safeShared) - dokkatoo(projects.safeServer) - dokkatoo(projects.safeClient) - dokkatoo(projects.spineShared) - dokkatoo(projects.spineServer) - dokkatoo(projects.spineClient) + dokkatoo(projects.api) + dokkatoo(projects.server) + dokkatoo(projects.client) } // region Check the users of the project didn't forget to rename the group diff --git a/typed-client/build.gradle.kts b/client/build.gradle.kts similarity index 70% rename from typed-client/build.gradle.kts rename to client/build.gradle.kts index 16e58a2..e800fda 100644 --- a/typed-client/build.gradle.kts +++ b/client/build.gradle.kts @@ -15,7 +15,7 @@ kotlin { iosX64() sourceSets.commonMain.dependencies { - api(projects.typedShared) + api(projects.api) api(libs.kotlinx.coroutines) api(libs.ktor.client.core) @@ -28,9 +28,9 @@ kotlin { } library { - name.set("Typed Ktor (client-side)") - description.set("Typesafe HTTP APIs with Ktor") - homeUrl.set("https://gitlab.com/opensavvy/spine") + name.set("Client-side typesafe Spine schema usage") + description.set("Declare your Ktor client-side API from an HTTP schema shared with the server") + homeUrl.set("https://gitlab.com/opensavvy/groundwork/spine") license.set { name.set("Apache 2.0") diff --git a/typed-client/src/commonMain/kotlin/Client.kt b/client/src/commonMain/kotlin/Client.kt similarity index 90% rename from typed-client/src/commonMain/kotlin/Client.kt rename to client/src/commonMain/kotlin/Client.kt index bc2c8fe..0829da1 100644 --- a/typed-client/src/commonMain/kotlin/Client.kt +++ b/client/src/commonMain/kotlin/Client.kt @@ -1,14 +1,13 @@ @file:Suppress("DEPRECATION_ERROR") -package opensavvy.spine.typed.client +package opensavvy.spine.client import io.ktor.client.* import io.ktor.client.request.* import io.ktor.http.* -import opensavvy.spine.typed.Endpoint -import opensavvy.spine.typed.Parameters -import opensavvy.spine.typed.Parameters.Empty.data -import opensavvy.spine.typed.ResolvedEndpoint +import opensavvy.spine.api.Endpoint +import opensavvy.spine.api.Parameters +import opensavvy.spine.api.ResolvedEndpoint suspend inline fun HttpClient.request( endpoint: ResolvedEndpoint>, diff --git a/typed-client/src/commonMain/kotlin/SpineResponse.kt b/client/src/commonMain/kotlin/SpineResponse.kt similarity index 95% rename from typed-client/src/commonMain/kotlin/SpineResponse.kt rename to client/src/commonMain/kotlin/SpineResponse.kt index ed8a4fa..3713dda 100644 --- a/typed-client/src/commonMain/kotlin/SpineResponse.kt +++ b/client/src/commonMain/kotlin/SpineResponse.kt @@ -1,4 +1,4 @@ -package opensavvy.spine.typed.client +package opensavvy.spine.client import io.ktor.client.call.* import io.ktor.client.statement.* diff --git a/typed-server/build.gradle.kts b/server/build.gradle.kts similarity index 73% rename from typed-server/build.gradle.kts rename to server/build.gradle.kts index 09befcf..76d677f 100644 --- a/typed-server/build.gradle.kts +++ b/server/build.gradle.kts @@ -9,7 +9,7 @@ kotlin { linuxX64() sourceSets.commonMain.dependencies { - api(projects.typedShared) + api(projects.api) api(libs.kotlinx.coroutines) api(libs.ktor.server.core) @@ -22,14 +22,14 @@ kotlin { implementation(libs.ktor.server.contentNegotiation) implementation(libs.ktor.client.contentNegotiation) implementation(libs.ktor.kotlinxJson) - implementation(projects.typedClient) + implementation(projects.client) } } library { - name.set("Typed Ktor (server-side)") - description.set("Typesafe HTTP APIs with Ktor") - homeUrl.set("https://gitlab.com/opensavvy/spine") + name.set("Server-side typesafe Spine schema usage") + description.set("Declare your Ktor server-side API from an HTTP schema shared with the client") + homeUrl.set("https://gitlab.com/opensavvy/groundwork/spine") license.set { name.set("Apache 2.0") diff --git a/typed-server/src/commonMain/kotlin/Server.kt b/server/src/commonMain/kotlin/Server.kt similarity index 85% rename from typed-server/src/commonMain/kotlin/Server.kt rename to server/src/commonMain/kotlin/Server.kt index 1668649..a77348f 100644 --- a/typed-server/src/commonMain/kotlin/Server.kt +++ b/server/src/commonMain/kotlin/Server.kt @@ -1,6 +1,6 @@ @file:Suppress("DEPRECATION_ERROR") -package opensavvy.spine.typed.server +package opensavvy.spine.server import io.ktor.http.* import io.ktor.server.application.* @@ -8,10 +8,10 @@ import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* import io.ktor.util.* -import opensavvy.spine.typed.Endpoint -import opensavvy.spine.typed.ParameterStorage -import opensavvy.spine.typed.Parameters -import opensavvy.spine.typed.fullSlug +import opensavvy.spine.api.Endpoint +import opensavvy.spine.api.ParameterStorage +import opensavvy.spine.api.Parameters +import opensavvy.spine.api.fullSlug @KtorDsl inline fun Route.route( diff --git a/typed-server/src/commonMain/kotlin/TypedResponseScope.kt b/server/src/commonMain/kotlin/TypedResponseScope.kt similarity index 90% rename from typed-server/src/commonMain/kotlin/TypedResponseScope.kt rename to server/src/commonMain/kotlin/TypedResponseScope.kt index 7ec98f5..c55f4c2 100644 --- a/typed-server/src/commonMain/kotlin/TypedResponseScope.kt +++ b/server/src/commonMain/kotlin/TypedResponseScope.kt @@ -1,9 +1,8 @@ -package opensavvy.spine.typed.server +package opensavvy.spine.server import io.ktor.server.application.* -import io.ktor.util.debug.* -import opensavvy.spine.typed.DynamicResource -import opensavvy.spine.typed.Parameters +import opensavvy.spine.api.DynamicResource +import opensavvy.spine.api.Parameters interface TypedResponseScope { val call: ApplicationCall diff --git a/typed-server/src/commonTest/kotlin/RouteTest.kt b/server/src/commonTest/kotlin/RouteTest.kt similarity index 96% rename from typed-server/src/commonTest/kotlin/RouteTest.kt rename to server/src/commonTest/kotlin/RouteTest.kt index fcfccdb..8f3e888 100644 --- a/typed-server/src/commonTest/kotlin/RouteTest.kt +++ b/server/src/commonTest/kotlin/RouteTest.kt @@ -13,9 +13,10 @@ import kotlinx.serialization.Serializable import opensavvy.prepared.compat.ktor.preparedClient import opensavvy.prepared.compat.ktor.preparedServer import opensavvy.prepared.suite.* -import opensavvy.spine.typed.* -import opensavvy.spine.typed.client.bodyOrThrow -import opensavvy.spine.typed.client.request +import opensavvy.spine.api.* +import opensavvy.spine.client.bodyOrThrow +import opensavvy.spine.client.request +import opensavvy.spine.server.route import opensavvy.spine.typed.server.Routes.Users import opensavvy.spine.typed.server.Routes.Users.User import io.ktor.client.plugins.contentnegotiation.ContentNegotiation as ClientContentNegotiation diff --git a/typed-server/src/commonTest/kotlin/ServerTests.kt b/server/src/commonTest/kotlin/ServerTests.kt similarity index 100% rename from typed-server/src/commonTest/kotlin/ServerTests.kt rename to server/src/commonTest/kotlin/ServerTests.kt diff --git a/settings.gradle.kts b/settings.gradle.kts index f535a26..29255dc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -54,19 +54,7 @@ include( "gradle:templates:template-app", "gradle:templates:template-lib", - "typed-shared", - "typed-server", - "typed-client", - - "safe-shared", - "safe-server", - "safe-client", - - "spine-shared", - "spine-server", - "spine-client", - - "demo-shared", - "demo-server", - "demo-client", + "api", + "server", + "client", ) diff --git a/typed-client/src/commonMain/kotlin/Marker.kt b/typed-client/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index 2c0d554..0000000 --- a/typed-client/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.typed.client - -internal typealias Marker = Nothing diff --git a/typed-server/src/commonMain/kotlin/Marker.kt b/typed-server/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index dcb7c35..0000000 --- a/typed-server/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.typed.server - -internal typealias Marker = Nothing -- 2.51.2 From 8fb540b1f98ba49652c2c36b39ef801333d65913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sat, 16 Mar 2024 15:54:14 +0100 Subject: [PATCH 2/4] refactor: Remove the unused Safe and Spine modules --- safe-client/build.gradle.kts | 38 ------------------- safe-client/src/commonMain/kotlin/Marker.kt | 3 -- safe-server/build.gradle.kts | 31 ---------------- safe-server/src/commonMain/kotlin/Marker.kt | 3 -- safe-shared/build.gradle.kts | 37 ------------------- safe-shared/src/commonMain/kotlin/Marker.kt | 3 -- spine-client/build.gradle.kts | 39 -------------------- spine-client/src/commonMain/kotlin/Marker.kt | 3 -- spine-server/build.gradle.kts | 32 ---------------- spine-server/src/commonMain/kotlin/Marker.kt | 3 -- spine-shared/build.gradle.kts | 37 ------------------- spine-shared/src/commonMain/kotlin/Marker.kt | 3 -- 12 files changed, 232 deletions(-) delete mode 100644 safe-client/build.gradle.kts delete mode 100644 safe-client/src/commonMain/kotlin/Marker.kt delete mode 100644 safe-server/build.gradle.kts delete mode 100644 safe-server/src/commonMain/kotlin/Marker.kt delete mode 100644 safe-shared/build.gradle.kts delete mode 100644 safe-shared/src/commonMain/kotlin/Marker.kt delete mode 100644 spine-client/build.gradle.kts delete mode 100644 spine-client/src/commonMain/kotlin/Marker.kt delete mode 100644 spine-server/build.gradle.kts delete mode 100644 spine-server/src/commonMain/kotlin/Marker.kt delete mode 100644 spine-shared/build.gradle.kts delete mode 100644 spine-shared/src/commonMain/kotlin/Marker.kt diff --git a/safe-client/build.gradle.kts b/safe-client/build.gradle.kts deleted file mode 100644 index aea65e3..0000000 --- a/safe-client/build.gradle.kts +++ /dev/null @@ -1,38 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.library) -} - -kotlin { - jvm() - js { - browser() - nodejs() - } - linuxX64() - iosArm64() - iosSimulatorArm64() - iosX64() - - sourceSets.commonMain.dependencies { - api(projects.safeShared) - - api(libs.ktor.client.core) - } - - sourceSets.commonTest.dependencies { - implementation(libs.prepared) - implementation(libs.prepared.arrow) - } -} - -library { - name.set("Safe Ktor (shared code)") - description.set("Ktor endpoints with explicit error management using Arrow") - homeUrl.set("https://gitlab.com/opensavvy/spine") - - license.set { - name.set("Apache 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } -} diff --git a/safe-client/src/commonMain/kotlin/Marker.kt b/safe-client/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index e3f3184..0000000 --- a/safe-client/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.safe.client - -internal typealias Marker = Nothing diff --git a/safe-server/build.gradle.kts b/safe-server/build.gradle.kts deleted file mode 100644 index 7fbd5df..0000000 --- a/safe-server/build.gradle.kts +++ /dev/null @@ -1,31 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.library) -} - -kotlin { - jvm() - linuxX64() - - sourceSets.commonMain.dependencies { - api(projects.typedShared) - - api(libs.ktor.server.core) - } - - sourceSets.commonTest.dependencies { - implementation(libs.prepared) - implementation(libs.prepared.arrow) - } -} - -library { - name.set("Safe Ktor (server-side)") - description.set("Ktor endpoints with explicit error management using Arrow") - homeUrl.set("https://gitlab.com/opensavvy/spine") - - license.set { - name.set("Apache 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } -} diff --git a/safe-server/src/commonMain/kotlin/Marker.kt b/safe-server/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index a2ad7bc..0000000 --- a/safe-server/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.safe.server - -internal typealias Marker = Nothing diff --git a/safe-shared/build.gradle.kts b/safe-shared/build.gradle.kts deleted file mode 100644 index b8633e1..0000000 --- a/safe-shared/build.gradle.kts +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.library) -} - -kotlin { - jvm() - js { - browser() - nodejs() - } - linuxX64() - iosArm64() - iosSimulatorArm64() - iosX64() - - sourceSets.commonMain.dependencies { - api(libs.arrow.core) - api(libs.ktor.http) - } - - sourceSets.commonTest.dependencies { - implementation(libs.prepared) - implementation(libs.prepared.arrow) - } -} - -library { - name.set("Safe Ktor (shared code)") - description.set("Ktor endpoints with explicit error management using Arrow") - homeUrl.set("https://gitlab.com/opensavvy/spine") - - license.set { - name.set("Apache 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } -} diff --git a/safe-shared/src/commonMain/kotlin/Marker.kt b/safe-shared/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index 2ca8522..0000000 --- a/safe-shared/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.safe - -internal typealias Marker = Nothing diff --git a/spine-client/build.gradle.kts b/spine-client/build.gradle.kts deleted file mode 100644 index 773fac3..0000000 --- a/spine-client/build.gradle.kts +++ /dev/null @@ -1,39 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.library) -} - -kotlin { - jvm() - js { - browser() - nodejs() - } - linuxX64() - iosArm64() - iosSimulatorArm64() - iosX64() - - sourceSets.commonMain.dependencies { - api(projects.spineShared) - - api(projects.typedClient) - api(projects.safeClient) - } - - sourceSets.commonTest.dependencies { - implementation(libs.prepared) - implementation(libs.prepared.arrow) - } -} - -library { - name.set("Spine (server-side)") - description.set("Typesafe HTTP APIs with Ktor and Arrow") - homeUrl.set("https://gitlab.com/opensavvy/spine") - - license.set { - name.set("Apache 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } -} diff --git a/spine-client/src/commonMain/kotlin/Marker.kt b/spine-client/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index bd8ef75..0000000 --- a/spine-client/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.client - -internal typealias Marker = Nothing diff --git a/spine-server/build.gradle.kts b/spine-server/build.gradle.kts deleted file mode 100644 index 4881f19..0000000 --- a/spine-server/build.gradle.kts +++ /dev/null @@ -1,32 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.library) -} - -kotlin { - jvm() - linuxX64() - - sourceSets.commonMain.dependencies { - api(projects.spineShared) - - api(projects.typedServer) - api(projects.safeServer) - } - - sourceSets.commonTest.dependencies { - implementation(libs.prepared) - implementation(libs.prepared.arrow) - } -} - -library { - name.set("Spine (server-side)") - description.set("Typesafe HTTP APIs with Ktor and Arrow") - homeUrl.set("https://gitlab.com/opensavvy/spine") - - license.set { - name.set("Apache 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } -} diff --git a/spine-server/src/commonMain/kotlin/Marker.kt b/spine-server/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index 400c441..0000000 --- a/spine-server/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine.server - -internal typealias Marker = Nothing diff --git a/spine-shared/build.gradle.kts b/spine-shared/build.gradle.kts deleted file mode 100644 index 15c69cf..0000000 --- a/spine-shared/build.gradle.kts +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.library) -} - -kotlin { - jvm() - js { - browser() - nodejs() - } - linuxX64() - iosArm64() - iosSimulatorArm64() - iosX64() - - sourceSets.commonMain.dependencies { - api(projects.typedShared) - api(projects.safeShared) - } - - sourceSets.commonTest.dependencies { - implementation(libs.prepared) - implementation(libs.prepared.arrow) - } -} - -library { - name.set("Spine (shared code)") - description.set("Typesafe HTTP APIs with Ktor and Arrow") - homeUrl.set("https://gitlab.com/opensavvy/spine") - - license.set { - name.set("Apache 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } -} diff --git a/spine-shared/src/commonMain/kotlin/Marker.kt b/spine-shared/src/commonMain/kotlin/Marker.kt deleted file mode 100644 index 5b8d7cb..0000000 --- a/spine-shared/src/commonMain/kotlin/Marker.kt +++ /dev/null @@ -1,3 +0,0 @@ -package opensavvy.spine - -internal typealias Marker = Nothing -- 2.51.2 From 8c5e9ee27f6b60dcbd43420ed3fdd917ed5fd60b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sat, 16 Mar 2024 15:55:33 +0100 Subject: [PATCH 3/4] refactor: Delete the demo --- demo-client/build.gradle.kts | 21 --------- demo-server/build.gradle.kts | 14 ------ demo-server/src/commonMain/kotlin/Users.kt | 31 -------------- demo-shared/build.gradle.kts | 20 --------- demo-shared/src/commonMain/kotlin/Api.kt | 50 ---------------------- 5 files changed, 136 deletions(-) delete mode 100644 demo-client/build.gradle.kts delete mode 100644 demo-server/build.gradle.kts delete mode 100644 demo-server/src/commonMain/kotlin/Users.kt delete mode 100644 demo-shared/build.gradle.kts delete mode 100644 demo-shared/src/commonMain/kotlin/Api.kt diff --git a/demo-client/build.gradle.kts b/demo-client/build.gradle.kts deleted file mode 100644 index 33c27cd..0000000 --- a/demo-client/build.gradle.kts +++ /dev/null @@ -1,21 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.internal) -} - -kotlin { - jvm() - js { - browser() - nodejs() - } - linuxX64() - iosArm64() - iosSimulatorArm64() - iosX64() - - sourceSets.commonMain.dependencies { - api(projects.spineClient) - api(projects.demoShared) - } -} diff --git a/demo-server/build.gradle.kts b/demo-server/build.gradle.kts deleted file mode 100644 index 77d746f..0000000 --- a/demo-server/build.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.internal) -} - -kotlin { - jvm() - linuxX64() - - sourceSets.commonMain.dependencies { - api(projects.spineServer) - api(projects.demoShared) - } -} diff --git a/demo-server/src/commonMain/kotlin/Users.kt b/demo-server/src/commonMain/kotlin/Users.kt deleted file mode 100644 index 6855491..0000000 --- a/demo-server/src/commonMain/kotlin/Users.kt +++ /dev/null @@ -1,31 +0,0 @@ -package opensavvy.spine.demo.server - -import io.ktor.http.* -import io.ktor.server.routing.* -import opensavvy.spine.demo.Api -import opensavvy.spine.demo.UserDto -import opensavvy.spine.typed.server.route - -fun Route.users() { - route(Api.Users.get) { - println("The client requested users that are archived: ${parameters.archived}") - HttpStatusCode.OK to emptyList() - } - - route(Api.Users.create) { - println("Received a new user: $body") - HttpStatusCode.Created to Unit - } - - route(Api.Users.logIn) { - HttpStatusCode.OK to Unit - } - - route(Api.Users.User.get) { - HttpStatusCode.OK to UserDto() - } - - route(Api.Users.User.edit) { - HttpStatusCode.OK to Unit - } -} diff --git a/demo-shared/build.gradle.kts b/demo-shared/build.gradle.kts deleted file mode 100644 index 159e520..0000000 --- a/demo-shared/build.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ -plugins { - alias(opensavvyConventions.plugins.base) - alias(opensavvyConventions.plugins.kotlin.internal) -} - -kotlin { - jvm() - js { - browser() - nodejs() - } - linuxX64() - iosArm64() - iosSimulatorArm64() - iosX64() - - sourceSets.commonMain.dependencies { - api(projects.spineShared) - } -} diff --git a/demo-shared/src/commonMain/kotlin/Api.kt b/demo-shared/src/commonMain/kotlin/Api.kt deleted file mode 100644 index ccb526b..0000000 --- a/demo-shared/src/commonMain/kotlin/Api.kt +++ /dev/null @@ -1,50 +0,0 @@ -package opensavvy.spine.demo - -import opensavvy.spine.typed.* - -object Api : RootResource("v1") { - - object Users : StaticResource("users", Api) { - - val get by get() - .parameters(UserDto::Params) - .response>() - - val create by post() - .request() - - val logIn by post("/token") - .request() - - object User : DynamicResource("user", Users) { - - val get by get() - .response() - - val edit by patch() - .request() - - } - } -} - -data class Id(val segments: List) - -class UserDto { - - object New - - object LogIn - - object Edit - - class Params( - data: ParameterStorage, - ) : Parameters(data) { - var archived by parameter(false) - } -} - -data class Foo( - val username: String, -) -- 2.51.2 From 4238bc49aebf284bd7a79c5a49022faeebc42539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sat, 16 Mar 2024 16:01:02 +0100 Subject: [PATCH 4/4] build(gradle): Create the client-arrow and server-arrow modules They will replace what was previously called 'Safe Ktor'. --- client-arrow/build.gradle.kts | 36 +++++++++++++++++++++++++++++++++++ server-arrow/build.gradle.kts | 35 ++++++++++++++++++++++++++++++++++ settings.gradle.kts | 4 ++++ 3 files changed, 75 insertions(+) create mode 100644 client-arrow/build.gradle.kts create mode 100644 server-arrow/build.gradle.kts diff --git a/client-arrow/build.gradle.kts b/client-arrow/build.gradle.kts new file mode 100644 index 0000000..529a622 --- /dev/null +++ b/client-arrow/build.gradle.kts @@ -0,0 +1,36 @@ +plugins { + alias(opensavvyConventions.plugins.base) + alias(opensavvyConventions.plugins.kotlin.library) +} + +kotlin { + jvm() + js { + browser() + nodejs() + } + linuxX64() + iosArm64() + iosSimulatorArm64() + iosX64() + + sourceSets.commonMain.dependencies { + api(projects.client) + } + + sourceSets.commonTest.dependencies { + implementation(libs.prepared) + implementation(libs.prepared.arrow) + } +} + +library { + name.set("Client-side typesafe Spine schema usage (with Arrow typed errors)") + description.set("Declare your Ktor client-side API from an HTTP schema shared with the server") + homeUrl.set("https://gitlab.com/opensavvy/groundwork/spine") + + license.set { + name.set("Apache 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + } +} diff --git a/server-arrow/build.gradle.kts b/server-arrow/build.gradle.kts new file mode 100644 index 0000000..a3b83cd --- /dev/null +++ b/server-arrow/build.gradle.kts @@ -0,0 +1,35 @@ +plugins { + alias(opensavvyConventions.plugins.base) + alias(opensavvyConventions.plugins.kotlin.library) + alias(opensavvyConventions.plugins.aligned.kotlinx.serialization) +} + +kotlin { + jvm() + linuxX64() + + sourceSets.commonMain.dependencies { + api(projects.server) + } + + sourceSets.commonTest.dependencies { + implementation(libs.prepared) + implementation(libs.prepared.arrow) + implementation(libs.prepared.ktor) + implementation(libs.ktor.server.contentNegotiation) + implementation(libs.ktor.client.contentNegotiation) + implementation(libs.ktor.kotlinxJson) + implementation(projects.clientArrow) + } +} + +library { + name.set("Server-side typesafe Spine schema usage (with Arrow typed errors)") + description.set("Declare your Ktor server-side API from an HTTP schema shared with the client") + homeUrl.set("https://gitlab.com/opensavvy/groundwork/spine") + + license.set { + name.set("Apache 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 29255dc..deca89f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -55,6 +55,10 @@ include( "gradle:templates:template-lib", "api", + "server", + "server-arrow", + "client", + "client-arrow", ) -- 2.51.2