Skip to content

Commit 439fc49

Browse files
authored
Merge pull request #688 from gemini-hlsw/better-ws-ids
Add type and name of query to ids used in websockets
2 parents a62c573 + a249bdb commit 439fc49

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

core/src/main/scala/clue/websocket/ApolloClient.scala

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -451,14 +451,24 @@ class ApolloClient[F[_], P, S](
451451
val halt: F[Unit] = queue.offer(none)
452452
}
453453

454+
private def queryTypeAndName(query: String): Option[(String, String)] = {
455+
val TypeAndName = "(\\w+).*\\{(?:.|\\s)*?(\\w+)".r.unanchored
456+
query match {
457+
case TypeAndName(queryType, name) => (queryType, name).some
458+
case _ => none
459+
}
460+
}
461+
454462
private def buildQueue[D: Decoder](
455463
request: GraphQLRequest[JsonObject]
456464
): F[(String, QueueEmitter[D])] =
457465
for {
458-
queue <- Queue.unbounded[F, DataQueueType[D]]
459-
id <- UUIDGen.randomString[F]
460-
emitter = QueueEmitter(queue, request)
461-
_ <- s"Building queue with id [$id] for query [${request.query}]}]".traceF
466+
queue <- Queue.unbounded[F, DataQueueType[D]]
467+
uuid <- UUIDGen.randomString[F]
468+
typeAndName = queryTypeAndName(request.query)
469+
id = typeAndName.fold(uuid) { case (queryType, name) => s"$name-$queryType-$uuid" }
470+
emitter = QueueEmitter(queue, request)
471+
_ <- s"Building queue with id [$id] for query [${request.query}]}]".traceF
462472
} yield (id, emitter)
463473

464474
// TODO Handle interruptions in subscription and query.

0 commit comments

Comments
 (0)