Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1134af2

Browse files
BoDmartinbonnin
andauthored
Implement@defer and@stream as ofincremental/v0.2 (#6331)
* Update `DeferredJsonMerger` to take `pending` and `completed` into account.* Track pending fragment ids rather than completed ones.* Update more tests* Add Apollo Server end-to-end tests* Add a few more edge case tests* Fix missed test* Support appending lists in DeferredJsonMerger (for@stream)* Rename DeferredJsonMerger -> IncrementalResultsMerger and DeferredFragmentIdentifier -> IncrementalResultIdentifier* Fix running tests hardcoded to true* Support both legacy and modern incremental delivery protocols, with a configuration. Defaults to the legacy one.* Simplify CI job* Do not expose accept headers in DefaultHttpRequestComposer's public API* Make more symbols internal* Mark IncrementalDeliveryProtocol @ApolloExperimental* Rename Defer20220824 protocol to GraphQL17Alpha2 fpr consistency* Keep symbols public but deprecated* Let HttpNetworkTransport handle the Accept header* Rename Defer20220824 protocol to GraphQL17Alpha2 for consistency* Revert typealiases and use DeferredFragmentIdentifier again* Revert handling incremental results in WebSocket* Default to `application/graphql-response+json, application/json` in DefaultHttpRequestComposer* Update package-lock.json* Rename incremental delivery protocol enum/classes to DraftInitial and Draft0_1.* Update API dump* Update package-lock.json* Update the accept header with the value agreed upon* Clarify comment* Rename incremental delivery protocol enums to V0_0 and V0_1* Fix API Dump after rebase* Rename v0.0 -> v0.1 and v0.1 -> v0.2* Update API dump* Use Apollo Server 5.1.0-rc.0 instead of 4.11.2 + ad hoc patch.* Update libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/http/DefaultHttpRequestComposer.ktCo-authored-by: Martin Bonnin <martin@mbonnin.net>* Update libraries/apollo-runtime/src/commonMain/kotlin/com/apollographql/apollo/network/IncrementalDeliveryProtocol.ktCo-authored-by: Martin Bonnin <martin@mbonnin.net>* Update libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/BooleanExpression.ktCo-authored-by: Martin Bonnin <martin@mbonnin.net>* Update libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/BooleanExpression.ktCo-authored-by: Martin Bonnin <martin@mbonnin.net>* Use Apollo Server 5.1.0 and fix README and CI job* Fix HttpNetworkTransport.newBuilder---------Co-authored-by: Martin Bonnin <martin@mbonnin.net>
1 parent82b1b5b commit1134af2

File tree

41 files changed

+5679
-1030
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+5679
-1030
lines changed

‎.github/workflows/defer-with-router-tests.yml‎renamed to ‎.github/workflows/defer-integration-tests.yml‎

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name:defer-with-router-tests
1+
name:defer-integration-tests
22

33
on:
44
schedule:
@@ -24,9 +24,22 @@ jobs:
2424
-run:|
2525
./router --supergraph tests/defer/router/simple-supergraph.graphqls &
2626
27-
-uses:gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda#v3.4.2
28-
2927
-env:
3028
DEFER_WITH_ROUTER_TESTS:true
3129
run:|
3230
./gradlew --no-daemon --console plain -p tests :defer:allTests
31+
defer-with-apollo-server-tests:
32+
runs-on:ubuntu-latest
33+
if:github.repository == 'apollographql/apollo-kotlin'
34+
steps:
35+
-uses:actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332#v4.1.7
36+
37+
-working-directory:tests/defer/apollo-server/
38+
run:|
39+
npm install --legacy-peer-deps
40+
APOLLO_PORT=4000 npm start &
41+
42+
-env:
43+
DEFER_WITH_APOLLO_SERVER_TESTS:true
44+
run:|
45+
./gradlew --no-daemon --console plain -p tests :defer:allTests

‎libraries/apollo-api/api/apollo-api.api‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@ public final class com/apollographql/apollo/api/DefaultUploadKt {
530530
}
531531

532532
public final class com/apollographql/apollo/api/DeferredFragmentIdentifier {
533+
public static final field Companion Lcom/apollographql/apollo/api/DeferredFragmentIdentifier$Companion;
533534
public fun <init> (Ljava/util/List;Ljava/lang/String;)V
534535
public final fun component1 ()Ljava/util/List;
535536
public final fun component2 ()Ljava/lang/String;
@@ -542,6 +543,10 @@ public final class com/apollographql/apollo/api/DeferredFragmentIdentifier {
542543
public fun toString ()Ljava/lang/String;
543544
}
544545

546+
public final class com/apollographql/apollo/api/DeferredFragmentIdentifier$Companion {
547+
public final fun getPending ()Lcom/apollographql/apollo/api/DeferredFragmentIdentifier;
548+
}
549+
545550
public final class com/apollographql/apollo/api/EnumType : com/apollographql/apollo/api/CompiledNamedType {
546551
public fun <init> (Ljava/lang/String;Ljava/util/List;)V
547552
public final fun getValues ()Ljava/util/List;

‎libraries/apollo-api/api/apollo-api.klib.api‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,6 +1009,11 @@ final class com.apollographql.apollo.api/DeferredFragmentIdentifier { // com.apo
10091009
final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.apollo.api/DeferredFragmentIdentifier.equals|equals(kotlin.Any?){}[0]
10101010
final fun hashCode(): kotlin/Int // com.apollographql.apollo.api/DeferredFragmentIdentifier.hashCode|hashCode(){}[0]
10111011
final fun toString(): kotlin/String // com.apollographql.apollo.api/DeferredFragmentIdentifier.toString|toString(){}[0]
1012+
1013+
final object Companion { // com.apollographql.apollo.api/DeferredFragmentIdentifier.Companion|null[0]
1014+
final val Pending // com.apollographql.apollo.api/DeferredFragmentIdentifier.Companion.Pending|{}Pending[0]
1015+
final fun <get-Pending>(): com.apollographql.apollo.api/DeferredFragmentIdentifier // com.apollographql.apollo.api/DeferredFragmentIdentifier.Companion.Pending.<get-Pending>|<get-Pending>(){}[0]
1016+
}
10121017
}
10131018

10141019
final class com.apollographql.apollo.api/EnumType : com.apollographql.apollo.api/CompiledNamedType { // com.apollographql.apollo.api/EnumType|null[0]

‎libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/BooleanExpression.kt‎

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ fun <T : Any> and(vararg other: BooleanExpression<T>): BooleanExpression<T> = Bo
5050
fun <T:Any>not(other:BooleanExpression<T>):BooleanExpression<T>=BooleanExpression.Not(other)
5151
funvariable(name:String):BooleanExpression<BVariable>=BooleanExpression.Element(BVariable(name))
5252
funlabel(label:String? = null):BooleanExpression<BLabel>=BooleanExpression.Element(BLabel(label))
53-
funpossibleTypes(varargtypenames:String):BooleanExpression<BPossibleTypes>=BooleanExpression.Element(BPossibleTypes(typenames.toSet()))
53+
funpossibleTypes(varargtypenames:String):BooleanExpression<BPossibleTypes>=
54+
BooleanExpression.Element(BPossibleTypes(typenames.toSet()))
5455

5556
internalfun <T:Any> BooleanExpression<T>.evaluate(block: (T)->Boolean):Boolean {
5657
returnwhen (this) {
@@ -74,18 +75,29 @@ fun BooleanExpression<BTerm>.evaluate(
7475
return evaluate {
7576
when (it) {
7677
isBVariable->!(variables?.contains(it.name)?:false)
77-
isBLabel->hasDeferredFragment(deferredFragmentIdentifiers, croppedPath!!, it.label)
78+
isBLabel->shouldParseFragment(deferredFragmentIdentifiers, croppedPath!!, it.label)
7879
isBPossibleTypes-> it.possibleTypes.contains(typename)
7980
}
8081
}
8182
}
8283

83-
privatefunhasDeferredFragment(deferredFragmentIdentifiers:Set<DeferredFragmentIdentifier>?,path:List<Any>,label:String?):Boolean {
84+
privatefunshouldParseFragment(deferredFragmentIdentifiers:Set<DeferredFragmentIdentifier>?,path:List<Any>,label:String?):Boolean {
8485
if (deferredFragmentIdentifiers==null) {
8586
// By default, parse all deferred fragments - this is the case when parsing from the normalized cache.
8687
returntrue
8788
}
88-
return deferredFragmentIdentifiers.contains(DeferredFragmentIdentifier(path, label))
89+
val identifier=DeferredFragmentIdentifier(path, label)
90+
returnif (deferredFragmentIdentifiers.isPending()) {
91+
// v0.2: parse fragments that are _not_ pending
92+
!deferredFragmentIdentifiers.contains(identifier)
93+
}else {
94+
// v0.1: parse fragments that have been merged
95+
deferredFragmentIdentifiers.contains(identifier)
96+
}
97+
}
98+
99+
privatefun Set<DeferredFragmentIdentifier>.isPending():Boolean {
100+
return any { it===DeferredFragmentIdentifier.Pending }
89101
}
90102

91103
/**

‎libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/CustomScalarAdapters.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class CustomScalarAdapters private constructor(
1919
@JvmField
2020
valfalseVariables:Set<String>?,
2121
/**
22-
*Defer identifiersused to determine whether the parser must parse@defer fragments
22+
*Identifiersused to determine whether the parser must parsedeferred fragments
2323
*/
2424
@JvmField
2525
valdeferredFragmentIdentifiers:Set<DeferredFragmentIdentifier>?,
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
packagecom.apollographql.apollo.api
22

3+
importcom.apollographql.apollo.annotations.ApolloInternal
4+
35
data classDeferredFragmentIdentifier(
46
/**
57
* Path of the fragment in the overall JSON response. The elements can either be Strings (names) or Integers (array indices).
68
*/
79
valpath:List<Any>,
810
vallabel:String?,
9-
)
11+
) {
12+
companionobject {
13+
/**
14+
* Special identifier to signal that the identifiers are pending, as in the modern version of the protocol.
15+
*/
16+
@ApolloInternal
17+
valPending=DeferredFragmentIdentifier(emptyList(),"__pending")
18+
}
19+
}

‎libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/http/DefaultHttpRequestComposer.kt‎

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.apollographql.apollo.api.Operation
88
importcom.apollographql.apollo.api.Query
99
importcom.apollographql.apollo.api.Subscription
1010
importcom.apollographql.apollo.api.Upload
11+
importcom.apollographql.apollo.api.http.DefaultHttpRequestComposer.Companion.composePostParams
1112
importcom.apollographql.apollo.api.http.internal.urlEncode
1213
importcom.apollographql.apollo.api.json.BufferedSinkJsonWriter
1314
importcom.apollographql.apollo.api.json.JsonWriter
@@ -38,24 +39,34 @@ import okio.buffer
3839
*/
3940
classDefaultHttpRequestComposer(
4041
privatevalserverUrl:String,
41-
privatevalenablePostCaching:Boolean
42+
privatevalenablePostCaching:Boolean,
4243
) : HttpRequestComposer {
4344

44-
constructor(serverUrl:String):this(serverUrl,false)
45+
constructor(serverUrl:String):this(serverUrl,false)
4546

4647
overridefun <D:Operation.Data>compose(apolloRequest:ApolloRequest<D>):HttpRequest {
4748
val operation= apolloRequest.operation
4849
val customScalarAdapters= apolloRequest.executionContext[CustomScalarAdapters]?:CustomScalarAdapters.Empty
4950

5051
val requestHeaders= mutableListOf<HttpHeader>().apply {
51-
if (apolloRequest.operationisSubscription<*>) {
52-
add(HttpHeader(HEADER_ACCEPT_NAME,HEADER_ACCEPT_VALUE_MULTIPART))
53-
}else {
54-
add(HttpHeader(HEADER_ACCEPT_NAME,HEADER_ACCEPT_VALUE_DEFER))
55-
}
5652
if (apolloRequest.httpHeaders!=null) {
5753
addAll(apolloRequest.httpHeaders)
5854
}
55+
if (get("accept")==null) {
56+
/**
57+
* This is for backward compatibility reasons only.
58+
* We should encourage users to set the accept headers before calling DefaultHttpRequestComposer
59+
*/
60+
add(
61+
HttpHeader("accept",
62+
if (apolloRequest.operationisSubscription<*>) {
63+
"multipart/mixed;subscriptionSpec=1.0, application/graphql-response+json, application/json"
64+
}else {
65+
"application/graphql-response+json, application/json"
66+
}
67+
)
68+
)
69+
}
5970
}
6071

6172
val sendApqExtensions= apolloRequest.sendApqExtensions?:false
@@ -119,14 +130,18 @@ class DefaultHttpRequestComposer(
119130
// and thus is safe to execute.
120131
// See https://www.apollographql.com/docs/apollo-server/security/cors/#preventing-cross-site-request-forgery-csrf
121132
// for details.
122-
internalvalHEADER_APOLLO_REQUIRE_PREFLIGHT="Apollo-Require-Preflight"
133+
privateconstvalHEADER_APOLLO_REQUIRE_PREFLIGHT="Apollo-Require-Preflight"
123134

135+
@Deprecated("This was made public by mistake and will be removed in a future version, please use your own constants instead")
136+
@ApolloDeprecatedSince(ApolloDeprecatedSince.Version.v5_0_0)
124137
valHEADER_ACCEPT_NAME="Accept"
125138

126-
// TODO The deferSpec=20220824 part is a temporary measure so early backend implementations of the @defer directive
127-
// can recognize early client implementations and potentially reply in a compatible way.
128-
// This should be removed in later versions.
139+
@Deprecated("This was made public by mistake and will be removed in a future version, please use your own constants instead")
140+
@ApolloDeprecatedSince(ApolloDeprecatedSince.Version.v5_0_0)
129141
valHEADER_ACCEPT_VALUE_DEFER="multipart/mixed;deferSpec=20220824, application/graphql-response+json, application/json"
142+
143+
@Deprecated("This was made public by mistake and will be removed in a future version, please use your own constants instead")
144+
@ApolloDeprecatedSince(ApolloDeprecatedSince.Version.v5_0_0)
130145
valHEADER_ACCEPT_VALUE_MULTIPART="multipart/mixed;subscriptionSpec=1.0, application/graphql-response+json, application/json"
131146

132147
privatefun <D:Operation.Data>buildGetUrl(

‎libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/internal/ResponseParser.kt‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ internal object ResponseParser {
3838
val falseVariables= operation.falseVariables(customScalarAdapters)
3939
data= operation.parseData(jsonReader, customScalarAdapters, falseVariables, deferredFragmentIds, errors)
4040
}
41+
4142
"errors"-> errors= jsonReader.readErrors()
4243
"extensions"-> extensions= jsonReader.readAny()as?Map<String,Any?>
4344
else-> {
@@ -100,7 +101,8 @@ private fun JsonReader.readError(): Error {
100101

101102

102103
@Suppress("DEPRECATION")
103-
returnError.Builder(message= message).locations(locations).path(path).extensions(extensions).nonStandardFields(nonStandardFields).build()
104+
returnError.Builder(message= message).locations(locations).path(path).extensions(extensions).nonStandardFields(nonStandardFields)
105+
.build()
104106
}
105107

106108
privatefun JsonReader.readPath():List<Any>? {
@@ -164,4 +166,4 @@ fun JsonReader.readErrors(): List<Error> {
164166
}
165167
endArray()
166168
return list
167-
}
169+
}

‎libraries/apollo-runtime/api/android/apollo-runtime.api‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,14 @@ public final class com/apollographql/apollo/interceptor/RetryOnErrorInterceptorK
215215
public static final fun RetryOnErrorInterceptor (Lcom/apollographql/apollo/network/NetworkMonitor;)Lcom/apollographql/apollo/interceptor/ApolloInterceptor;
216216
}
217217

218+
public final class com/apollographql/apollo/network/IncrementalDeliveryProtocol : java/lang/Enum {
219+
public static final field V0_1 Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;
220+
public static final field V0_2 Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;
221+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
222+
public static fun valueOf (Ljava/lang/String;)Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;
223+
public static fun values ()[Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;
224+
}
225+
218226
public abstract interface class com/apollographql/apollo/network/NetworkMonitor : java/io/Closeable {
219227
public abstract fun isOnline ()Lkotlinx/coroutines/flow/StateFlow;
220228
}
@@ -326,7 +334,7 @@ public abstract interface class com/apollographql/apollo/network/http/HttpInterc
326334
}
327335

328336
public final class com/apollographql/apollo/network/http/HttpNetworkTransport : com/apollographql/apollo/network/NetworkTransport {
329-
public synthetic fun <init> (Lcom/apollographql/apollo/api/http/HttpRequestComposer;Lcom/apollographql/apollo/network/http/HttpEngine;Ljava/util/List;ZLkotlin/jvm/internal/DefaultConstructorMarker;)V
337+
public synthetic fun <init> (Lcom/apollographql/apollo/api/http/HttpRequestComposer;Lcom/apollographql/apollo/network/http/HttpEngine;Ljava/util/List;ZLcom/apollographql/apollo/network/IncrementalDeliveryProtocol;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
330338
public fun dispose ()V
331339
public fun execute (Lcom/apollographql/apollo/api/ApolloRequest;)Lkotlinx/coroutines/flow/Flow;
332340
public final fun getInterceptors ()Ljava/util/List;
@@ -342,6 +350,7 @@ public final class com/apollographql/apollo/network/http/HttpNetworkTransport$Bu
342350
public final fun httpEngine (Lcom/apollographql/apollo/network/http/HttpEngine;)Lcom/apollographql/apollo/network/http/HttpNetworkTransport$Builder;
343351
public final fun httpHeaders (Ljava/util/List;)Lcom/apollographql/apollo/network/http/HttpNetworkTransport$Builder;
344352
public final fun httpRequestComposer (Lcom/apollographql/apollo/api/http/HttpRequestComposer;)Lcom/apollographql/apollo/network/http/HttpNetworkTransport$Builder;
353+
public final fun incrementalDeliveryProtocol (Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;)Lcom/apollographql/apollo/network/http/HttpNetworkTransport$Builder;
345354
public final fun interceptors (Ljava/util/List;)Lcom/apollographql/apollo/network/http/HttpNetworkTransport$Builder;
346355
public final fun serverUrl (Ljava/lang/String;)Lcom/apollographql/apollo/network/http/HttpNetworkTransport$Builder;
347356
}
@@ -522,6 +531,7 @@ public final class com/apollographql/apollo/network/websocket/WebSocketNetworkTr
522531
public final fun build ()Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport;
523532
public final fun connectionAcknowledgeTimeout-BwNAW2A (Lkotlin/time/Duration;)Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport$Builder;
524533
public final fun idleTimeout-BwNAW2A (Lkotlin/time/Duration;)Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport$Builder;
534+
public final fun incrementalDeliveryProtocol (Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;)Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport$Builder;
525535
public final fun parserFactory (Lcom/apollographql/apollo/network/websocket/SubscriptionParserFactory;)Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport$Builder;
526536
public final fun pingInterval-BwNAW2A (Lkotlin/time/Duration;)Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport$Builder;
527537
public final fun serverUrl (Ljava/lang/String;)Lcom/apollographql/apollo/network/websocket/WebSocketNetworkTransport$Builder;
@@ -650,7 +660,7 @@ public final class com/apollographql/apollo/network/ws/WebSocketEngineKt {
650660
}
651661

652662
public final class com/apollographql/apollo/network/ws/WebSocketNetworkTransport : com/apollographql/apollo/network/NetworkTransport {
653-
public synthetic fun <init> (Lkotlin/jvm/functions/Function1;Ljava/util/List;Lcom/apollographql/apollo/network/ws/WebSocketEngine;JLcom/apollographql/apollo/network/ws/WsProtocol$Factory;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
663+
public synthetic fun <init> (Lkotlin/jvm/functions/Function1;Ljava/util/List;Lcom/apollographql/apollo/network/ws/WebSocketEngine;JLcom/apollographql/apollo/network/ws/WsProtocol$Factory;Lkotlin/jvm/functions/Function3;Lcom/apollographql/apollo/internal/incremental/IncrementalDeliveryProtocolImpl;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
654664
public final fun closeConnection (Ljava/lang/Throwable;)V
655665
public fun dispose ()V
656666
public fun execute (Lcom/apollographql/apollo/api/ApolloRequest;)Lkotlinx/coroutines/flow/Flow;
@@ -664,6 +674,7 @@ public final class com/apollographql/apollo/network/ws/WebSocketNetworkTransport
664674
public final fun build ()Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport;
665675
public final fun headers (Ljava/util/List;)Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport$Builder;
666676
public final fun idleTimeoutMillis (J)Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport$Builder;
677+
public final fun incrementalDeliveryProtocol (Lcom/apollographql/apollo/network/IncrementalDeliveryProtocol;)Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport$Builder;
667678
public final fun protocol (Lcom/apollographql/apollo/network/ws/WsProtocol$Factory;)Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport$Builder;
668679
public final fun reopenWhen (Lkotlin/jvm/functions/Function3;)Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport$Builder;
669680
public final fun serverUrl (Ljava/lang/String;)Lcom/apollographql/apollo/network/ws/WebSocketNetworkTransport$Builder;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp