From 5ac49203a1b4d5167b5aeacb42e476c4a55c87fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Thu, 23 Jan 2025 00:42:25 +0100 Subject: [PATCH] Move BaseUri middleware --- .../scala/playground/OperationRunner.scala | 35 +------------------ .../language/DiagnosticProviderTests.scala | 1 - .../scala/playground/lsp/LanguageClient.scala | 1 - .../scala/playground/lsp/LanguageServer.scala | 1 - .../scala/playground/lsp/ServerBuilder.scala | 24 +++++++++++-- 5 files changed, 23 insertions(+), 39 deletions(-) diff --git a/modules/core/src/main/scala/playground/OperationRunner.scala b/modules/core/src/main/scala/playground/OperationRunner.scala index f7b79102..55dfc657 100644 --- a/modules/core/src/main/scala/playground/OperationRunner.scala +++ b/modules/core/src/main/scala/playground/OperationRunner.scala @@ -13,11 +13,9 @@ import cats.data.NonEmptyList import cats.effect.Async import cats.effect.MonadCancelThrow import cats.effect.Resource -import cats.effect.implicits.* import cats.effect.std import cats.syntax.all.* import fs2.compression.Compression -import org.http4s.Uri import org.http4s.client.Client import playground.plugins.PlaygroundPlugin import playground.plugins.SimpleHttpBuilder @@ -117,39 +115,15 @@ object OperationRunner { } - // https://github.com/kubukoz/smithy-playground/issues/158 - def dynamicBaseUri[F[_]: MonadCancelThrow]( - getUri: F[Uri] - ): Client[F] => Client[F] = - client => - Client[F] { req => - getUri.toResource.flatMap { uri => - client.run( - req.withUri( - req - .uri - .copy( - scheme = uri.scheme, - authority = uri.authority, - // prefixing with uri.path - path = uri.path.addSegments(req.uri.path.segments), - ) - ) - ) - } - } - def forSchemaIndex[F[_]: StdlibRuntime: Async: Compression: std.Console]( dsi: DynamicSchemaIndex, client: Client[F], - baseUri: F[Uri], awsEnv: Resource[F, AwsEnvironment[F]], plugins: List[PlaygroundPlugin], ): Map[QualifiedIdentifier, Resolver[F]] = forServices( services = dsi.allServices.toList, getSchema = dsi.getSchema, client = client, - baseUri = baseUri, awsEnv = awsEnv, plugins = plugins, ) @@ -158,7 +132,6 @@ object OperationRunner { services: List[DynamicSchemaIndex.ServiceWrapper], getSchema: ShapeId => Option[Schema[?]], client: Client[F], - baseUri: F[Uri], awsEnv: Resource[F, AwsEnvironment[F]], plugins: List[PlaygroundPlugin], ): Map[QualifiedIdentifier, Resolver[F]] = @@ -167,7 +140,6 @@ object OperationRunner { OperationRunner.forService[svc.Alg, F]( svc.service, client, - baseUri, awsEnv, getSchema, plugins, @@ -201,7 +173,6 @@ object OperationRunner { def forService[Alg[_[_, _, _, _, _]], F[_]: StdlibRuntime: Async: Compression: std.Console]( service: Service[Alg], client: Client[F], - baseUri: F[Uri], awsEnv: Resource[F, AwsEnvironment[F]], schemaIndex: ShapeId => Option[Schema[?]], plugins: List[PlaygroundPlugin], @@ -224,11 +195,7 @@ object OperationRunner { builder .client( service, - dynamicBaseUri[F]( - baseUri.flatTap { uri => - std.Console[F].println(s"Using base URI: $uri") - } - ).apply(client), + client, ) .leftMap(e => Issue.InvalidProtocol(e.protocolTag.id, serviceProtocols)) .map(service.toPolyFunction(_)) diff --git a/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala b/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala index fcf19a40..5d0ed6ff 100644 --- a/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala +++ b/modules/language-support/src/test/scala/playground/language/DiagnosticProviderTests.scala @@ -85,7 +85,6 @@ object DiagnosticProviderTests extends SimpleIOSuite { services = services, getSchema = _ => None, client = client, - baseUri = IO.stub, awsEnv = Resource.eval(IO.stub: IO[AwsEnvironment[IO]]), plugins = Nil, ), diff --git a/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala b/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala index 4c3a9625..5d78530b 100644 --- a/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala +++ b/modules/lsp/src/main/scala/playground/lsp/LanguageClient.scala @@ -6,7 +6,6 @@ import cats.effect.kernel.Async import cats.syntax.all.* import cats.tagless.Derive import cats.tagless.FunctorK -import cats.tagless.catsTaglessApplyKForIdK import cats.tagless.implicits.* import cats.~> import com.google.gson.JsonElement diff --git a/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala b/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala index 5109ba22..a0e6fef4 100644 --- a/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala +++ b/modules/lsp/src/main/scala/playground/lsp/LanguageServer.scala @@ -9,7 +9,6 @@ import cats.parse.LocationMap import cats.syntax.all.* import cats.tagless.Derive import cats.tagless.FunctorK -import cats.tagless.catsTaglessApplyKForIdK import cats.tagless.implicits.* import cats.~> import com.google.gson.JsonElement diff --git a/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala b/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala index b7a4f935..dc8125a5 100644 --- a/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala +++ b/modules/lsp/src/main/scala/playground/lsp/ServerBuilder.scala @@ -2,6 +2,7 @@ package playground.lsp import cats.effect.implicits.* import cats.effect.kernel.Async +import cats.effect.kernel.MonadCancelThrow import cats.effect.kernel.Resource import cats.effect.std import cats.syntax.all.* @@ -45,6 +46,7 @@ object ServerBuilder { val makeClient = EmberClientBuilder .default[F] .build + .map(middleware.BaseUri[F]) .map(middleware.AuthorizationHeader[F]) .map( Logger[F]( @@ -79,7 +81,6 @@ object ServerBuilder { .forSchemaIndex[F]( dsi = dsi, client = client, - baseUri = LanguageClient[F].configuration(ConfigurationValue.baseUri), awsEnv = awsEnv, plugins = plugins, ) @@ -98,7 +99,26 @@ object ServerBuilder { private object middleware { - def AuthorizationHeader[F[_]: Async: LanguageClient]: Client[F] => Client[F] = + def BaseUri[F[_]: LanguageClient: MonadCancelThrow]: Client[F] => Client[F] = + client => + Client[F] { req => + LanguageClient[F].configuration(ConfigurationValue.baseUri).toResource.flatMap { uri => + client.run( + req.withUri( + req + .uri + .copy( + scheme = uri.scheme, + authority = uri.authority, + // prefixing with uri.path + path = uri.path.addSegments(req.uri.path.segments), + ) + ) + ) + } + } + + def AuthorizationHeader[F[_]: LanguageClient: MonadCancelThrow]: Client[F] => Client[F] = client => Client[F] { request => val updatedRequest =