From 1239a9676483b3313da2f313f8e43b6c924b2b5d Mon Sep 17 00:00:00 2001 From: Kyri Petrou Date: Wed, 13 Mar 2024 07:33:26 -0400 Subject: [PATCH 1/2] Update zio-http to RC5 (caliban-quick) --- .../scala/caliban/QuickRequestHandler.scala | 23 ++++++++----------- build.sbt | 4 ++-- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala index b5192a68fc..066024530c 100644 --- a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala +++ b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala @@ -9,7 +9,6 @@ import caliban.wrappers.Caching import com.github.plokhotnyuk.jsoniter_scala.core._ import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker import zio._ -import zio.http.Header.ContentType import zio.http._ import zio.stacktracer.TracingImplicits.disableAutoTrace import zio.stream.{ UStream, ZStream } @@ -49,15 +48,15 @@ final private class QuickRequestHandler[-R](interpreter: GraphQLInterpreter[R, A def decodeQueryParams(queryParams: QueryParams): Either[Response, GraphQLRequest] = { def extractField(key: String) = - try Right(queryParams.get(key).map(readFromString[InputValue.ObjectValue](_).fields)) + try Right(queryParams.getAll(key).headOption.map(readFromString[InputValue.ObjectValue](_).fields)) catch { case NonFatal(_) => Left(badRequest(s"Invalid $key query param")) } for { vars <- extractField("variables") exts <- extractField("extensions") } yield GraphQLRequest( - query = queryParams.get("query"), - operationName = queryParams.get("operationName"), + query = queryParams.getAll("query").headOption, + operationName = queryParams.getAll("operationName").headOption, variables = vars, extensions = exts ) @@ -73,13 +72,9 @@ final private class QuickRequestHandler[-R](interpreter: GraphQLInterpreter[R, A .orElseFail(BodyDecodeErrorResponse) val isApplicationGql = - httpReq.headers.get(ContentType.name).exists { h => - h.length >= 19 && { // Length of "application/graphql" - MediaType.forContentType(h).exists { mt => - mt.subType.equalsIgnoreCase("graphql") && - mt.mainType.equalsIgnoreCase("application") - } - } + httpReq.body.mediaType.exists { mt => + mt.subType.equalsIgnoreCase("graphql") && + mt.mainType.equalsIgnoreCase("application") } if (isApplicationGql) decodeApplicationGql() else decodeJson() @@ -87,7 +82,7 @@ final private class QuickRequestHandler[-R](interpreter: GraphQLInterpreter[R, A val queryParams = httpReq.url.queryParams - (if (httpReq.method == Method.GET || queryParams.get("query").isDefined) { + (if (httpReq.method == Method.GET || queryParams.hasQueryParam("query")) { ZIO.fromEither(decodeQueryParams(queryParams)) } else { val req = decodeBody(httpReq.body) @@ -156,7 +151,7 @@ final private class QuickRequestHandler[-R](interpreter: GraphQLInterpreter[R, A Response( Status.Ok, headers = responseHeaders(ContentTypeMultipart, None), - body = Body.fromStream(encodeMultipartMixedResponse(resp, stream)) + body = Body.fromStreamChunked(encodeMultipartMixedResponse(resp, stream)) ) case resp if accepts.serverSentEvents => Response.fromServerSentEvents(encodeTextEventStream(resp)) @@ -186,7 +181,7 @@ final private class QuickRequestHandler[-R](interpreter: GraphQLInterpreter[R, A hasCacheDirective: Boolean ): Body = { val excludeExtensions = if (hasCacheDirective) Some(Set(Caching.DirectiveName)) else None - Body.fromChunk(Chunk.fromArray(writeToArray(resp.toResponseValue(keepDataOnErrors, excludeExtensions)))) + Body.fromArray(writeToArray(resp.toResponseValue(keepDataOnErrors, excludeExtensions))) } private def encodeMultipartMixedResponse( diff --git a/build.sbt b/build.sbt index c8dd844b9f..ce444e77ee 100644 --- a/build.sbt +++ b/build.sbt @@ -31,7 +31,7 @@ val zioInteropReactiveVersion = "2.0.2" val zioConfigVersion = "3.0.7" val zqueryVersion = "0.6.0" val zioJsonVersion = "0.6.2" -val zioHttpVersion = "3.0.0-RC4" +val zioHttpVersion = "3.0.0-RC5" val zioOpenTelemetryVersion = "3.0.0-RC21" val zioPreludeVersion = "1.0.0-RC23" @@ -378,7 +378,7 @@ lazy val zioHttp = project resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots", testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")), libraryDependencies ++= Seq( - "dev.zio" %% "zio-http" % zioHttpVersion, + "dev.zio" %% "zio-http" % "3.0.0-RC4", "com.softwaremill.sttp.tapir" %% "tapir-zio-http-server" % tapirVersion, "dev.zio" %% "zio-json" % zioJsonVersion % Test, "com.softwaremill.sttp.tapir" %% "tapir-json-zio" % tapirVersion % Test From 18fc2824d1c904357ac7d4eabcd8362a89bea84c Mon Sep 17 00:00:00 2001 From: Kyri Petrou Date: Mon, 8 Apr 2024 06:29:21 +1000 Subject: [PATCH 2/2] Update to zio-http RC6 --- .../quick/src/main/scala/caliban/QuickRequestHandler.scala | 3 +-- build.sbt | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala index 8fe3d79d24..562abe5663 100644 --- a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala +++ b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala @@ -11,7 +11,6 @@ import com.github.plokhotnyuk.jsoniter_scala.core._ import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker import zio._ import zio.http.ChannelEvent.UserEvent.HandshakeComplete -import zio.http.Header.ContentType import zio.http._ import zio.stacktracer.TracingImplicits.disableAutoTrace import zio.stream.{ UStream, ZPipeline, ZStream } @@ -104,7 +103,7 @@ final private class QuickRequestHandler[R]( val queryParams = httpReq.url.queryParams - (if (httpReq.method == Method.GET || queryParams.hasQueryParam("query")) { + (if ((httpReq.method eq Method.GET) || queryParams.hasQueryParam("query")) { ZIO.fromEither(decodeQueryParams(queryParams)) } else { val req = decodeBody(httpReq.body) diff --git a/build.sbt b/build.sbt index 35cbd2079b..6eb9621f08 100644 --- a/build.sbt +++ b/build.sbt @@ -23,7 +23,7 @@ val playVersion = "3.0.2" val playJsonVersion = "3.0.2" val scalafmtVersion = "3.8.0" val sttpVersion = "3.9.5" -val tapirVersion = "1.10.0" +val tapirVersion = "1.10.4" val zioVersion = "2.0.21" val zioInteropCats2Version = "22.0.0.0" val zioInteropCats3Version = "23.1.0.1" @@ -31,7 +31,7 @@ val zioInteropReactiveVersion = "2.0.2" val zioConfigVersion = "3.0.7" val zqueryVersion = "0.6.1" val zioJsonVersion = "0.6.2" -val zioHttpVersion = "3.0.0-RC5" +val zioHttpVersion = "3.0.0-RC6" val zioOpenTelemetryVersion = "3.0.0-RC21" val zioPreludeVersion = "1.0.0-RC23" @@ -378,7 +378,7 @@ lazy val zioHttp = project resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots", testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")), libraryDependencies ++= Seq( - "dev.zio" %% "zio-http" % "3.0.0-RC4", + "dev.zio" %% "zio-http" % zioHttpVersion, "com.softwaremill.sttp.tapir" %% "tapir-zio-http-server" % tapirVersion, "dev.zio" %% "zio-json" % zioJsonVersion % Test, "com.softwaremill.sttp.tapir" %% "tapir-json-zio" % tapirVersion % Test