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",
)