From af8f63821540a0d405b6655e12433746cf10ace6 Mon Sep 17 00:00:00 2001 From: Kyri Petrou Date: Sun, 31 Dec 2023 14:23:14 +1100 Subject: [PATCH 1/2] Fix content type performance issue --- .../quick/src/main/scala/caliban/QuickRequestHandler.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala index 78df1c68f6..1d8f43fcce 100644 --- a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala +++ b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala @@ -210,13 +210,13 @@ object QuickRequestHandler { Response(Status.BadRequest, body = Body.fromString(msg)) private val ContentTypeJson = - Headers(Header.ContentType(MediaType.application.json)) + Headers(Header.ContentType(MediaType.application.json).untyped) private val ContentTypeGql = - Headers(Header.ContentType(MediaType("application", "graphql-response+json"))) + Headers(Header.ContentType(MediaType("application", "graphql-response+json")).untyped) private val ContentTypeMultipart = - Headers(Header.ContentType(MediaType.multipart.mixed.copy(parameters = DeferMultipart.DeferHeaderParams))) + Headers(Header.ContentType(MediaType.multipart.mixed.copy(parameters = DeferMultipart.DeferHeaderParams)).untyped) private val BodyDecodeErrorResponse = badRequest("Failed to decode json body") From 1ff9bfe259d5445a5c47b0643934928d7a841e62 Mon Sep 17 00:00:00 2001 From: Kyri Petrou Date: Mon, 1 Jan 2024 18:32:20 +1100 Subject: [PATCH 2/2] Fix performance of `isGqlJson` --- .../src/main/scala/caliban/QuickRequestHandler.scala | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala index 1d8f43fcce..fea2913294 100644 --- a/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala +++ b/adapters/quick/src/main/scala/caliban/QuickRequestHandler.scala @@ -9,6 +9,7 @@ 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.ZStream @@ -63,9 +64,13 @@ final private class QuickRequestHandler[-R, E](interpreter: GraphQLInterpreter[R ) def isGqlJson = - httpReq.header(Header.ContentType).exists { h => - h.mediaType.subType.equalsIgnoreCase("graphql") && - h.mediaType.mainType.equalsIgnoreCase("application") + 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") + } + } } def decodeApplicationGql() =