Skip to content

Commit 2c60d90

Browse files
authored
Make maxStale not clear existing cache headers, and add addCacheHeader (#50)
1 parent c9936c7 commit 2c60d90

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

normalized-cache-incubating/api/normalized-cache-incubating.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public final class com/apollographql/cache/normalized/FetchPolicyInterceptors {
8787
public final class com/apollographql/cache/normalized/NormalizedCache {
8888
public static final fun -logCacheMisses (Lcom/apollographql/apollo/ApolloClient$Builder;Lkotlin/jvm/functions/Function1;)Lcom/apollographql/apollo/ApolloClient$Builder;
8989
public static synthetic fun -logCacheMisses$default (Lcom/apollographql/apollo/ApolloClient$Builder;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lcom/apollographql/apollo/ApolloClient$Builder;
90+
public static final fun addCacheHeader (Lcom/apollographql/apollo/api/MutableExecutionOptions;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
9091
public static final fun cacheHeaders (Lcom/apollographql/apollo/api/ApolloResponse$Builder;Lcom/apollographql/cache/normalized/api/CacheHeaders;)Lcom/apollographql/apollo/api/ApolloResponse$Builder;
9192
public static final fun cacheHeaders (Lcom/apollographql/apollo/api/MutableExecutionOptions;Lcom/apollographql/cache/normalized/api/CacheHeaders;)Ljava/lang/Object;
9293
public static final fun configureApolloClientBuilder2 (Lcom/apollographql/apollo/ApolloClient$Builder;Lcom/apollographql/cache/normalized/api/NormalizedCacheFactory;)Lcom/apollographql/apollo/ApolloClient$Builder;

normalized-cache-incubating/api/normalized-cache-incubating.klib.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ final fun <#A: com.apollographql.apollo.api/Operation.Data> (com.apollographql.a
326326
final fun <#A: com.apollographql.apollo.api/Operation.Data> (com.apollographql.apollo.api/Operation<#A>).com.apollographql.cache.normalized.api/normalize(#A, com.apollographql.apollo.api/CustomScalarAdapters, com.apollographql.cache.normalized.api/CacheKeyGenerator, com.apollographql.cache.normalized.api/MetadataGenerator = ..., com.apollographql.cache.normalized.api/FieldKeyGenerator = ..., com.apollographql.cache.normalized.api/EmbeddedFieldsProvider = ...): kotlin.collections/Map<kotlin/String, com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.api/normalize|[email protected]<0:0>(0:0;com.apollographql.apollo.api.CustomScalarAdapters;com.apollographql.cache.normalized.api.CacheKeyGenerator;com.apollographql.cache.normalized.api.MetadataGenerator;com.apollographql.cache.normalized.api.FieldKeyGenerator;com.apollographql.cache.normalized.api.EmbeddedFieldsProvider){0§<com.apollographql.apollo.api.Operation.Data>}[0]
327327
final fun <#A: com.apollographql.apollo.api/Query.Data> (com.apollographql.apollo/ApolloCall<#A>).com.apollographql.cache.normalized/watch(#A?): kotlinx.coroutines.flow/Flow<com.apollographql.apollo.api/ApolloResponse<#A>> // com.apollographql.cache.normalized/watch|[email protected]<0:0>(0:0?){0§<com.apollographql.apollo.api.Query.Data>}[0]
328328
final fun <#A: com.apollographql.apollo.api/Query.Data> (com.apollographql.apollo/ApolloCall<#A>).com.apollographql.cache.normalized/watch(): kotlinx.coroutines.flow/Flow<com.apollographql.apollo.api/ApolloResponse<#A>> // com.apollographql.cache.normalized/watch|[email protected]<0:0>(){0§<com.apollographql.apollo.api.Query.Data>}[0]
329+
final fun <#A: kotlin/Any?> (com.apollographql.apollo.api/MutableExecutionOptions<#A>).com.apollographql.cache.normalized/addCacheHeader(kotlin/String, kotlin/String): #A // com.apollographql.cache.normalized/addCacheHeader|addCacheHeader@com.apollographql.apollo.api.MutableExecutionOptions<0:0>(kotlin.String;kotlin.String){0§<kotlin.Any?>}[0]
329330
final fun <#A: kotlin/Any?> (com.apollographql.apollo.api/MutableExecutionOptions<#A>).com.apollographql.cache.normalized/cacheHeaders(com.apollographql.cache.normalized.api/CacheHeaders): #A // com.apollographql.cache.normalized/cacheHeaders|cacheHeaders@com.apollographql.apollo.api.MutableExecutionOptions<0:0>(com.apollographql.cache.normalized.api.CacheHeaders){0§<kotlin.Any?>}[0]
330331
final fun <#A: kotlin/Any?> (com.apollographql.apollo.api/MutableExecutionOptions<#A>).com.apollographql.cache.normalized/doNotStore(kotlin/Boolean): #A // com.apollographql.cache.normalized/doNotStore|[email protected]<0:0>(kotlin.Boolean){0§<kotlin.Any?>}[0]
331332
final fun <#A: kotlin/Any?> (com.apollographql.apollo.api/MutableExecutionOptions<#A>).com.apollographql.cache.normalized/fetchPolicy(com.apollographql.cache.normalized/FetchPolicy): #A // com.apollographql.cache.normalized/fetchPolicy|[email protected]<0:0>(com.apollographql.cache.normalized.FetchPolicy){0§<kotlin.Any?>}[0]

normalized-cache-incubating/src/commonMain/kotlin/com/apollographql/cache/normalized/ClientCacheExtensions.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.apollographql.apollo.CacheDumpProviderContext
88
import com.apollographql.apollo.api.ApolloRequest
99
import com.apollographql.apollo.api.ApolloResponse
1010
import com.apollographql.apollo.api.ExecutionContext
11+
import com.apollographql.apollo.api.ExecutionOptions
1112
import com.apollographql.apollo.api.MutableExecutionOptions
1213
import com.apollographql.apollo.api.Mutation
1314
import com.apollographql.apollo.api.Operation
@@ -111,6 +112,7 @@ fun ApolloClient.Builder.store(store: ApolloStore, writeToCacheAsynchronously: B
111112
.writeToCacheAsynchronously(writeToCacheAsynchronously)
112113
.addExecutionContext(CacheDumpProviderContext(store.cacheDumpProvider()))
113114
}
115+
114116
/**
115117
* Gets initial response(s) then observes the cache for any changes.
116118
*
@@ -247,6 +249,7 @@ fun <T> MutableExecutionOptions<T>.doNotStore(doNotStore: Boolean) = addExecutio
247249
fun <T> MutableExecutionOptions<T>.memoryCacheOnly(memoryCacheOnly: Boolean) = addExecutionContext(
248250
MemoryCacheOnlyContext(memoryCacheOnly)
249251
)
252+
250253
/**
251254
* @param storePartialResponses Whether to store partial responses.
252255
*
@@ -333,11 +336,18 @@ fun <T> MutableExecutionOptions<T>.cacheHeaders(cacheHeaders: CacheHeaders) = ad
333336
CacheHeadersContext(cacheHeaders)
334337
)
335338

339+
/**
340+
* Add a cache header to be passed to your [com.apollographql.cache.normalized.api.NormalizedCache]
341+
*/
342+
fun <T> MutableExecutionOptions<T>.addCacheHeader(key: String, value: String) = cacheHeaders(
343+
cacheHeaders.newBuilder().addHeader(key, value).build()
344+
)
345+
336346
/**
337347
* @param maxStale how long to accept stale fields
338348
*/
339-
fun <T> MutableExecutionOptions<T>.maxStale(maxStale: Duration) = cacheHeaders(
340-
CacheHeaders.Builder().addHeader(ApolloCacheHeaders.MAX_STALE, maxStale.inWholeSeconds.toString()).build()
349+
fun <T> MutableExecutionOptions<T>.maxStale(maxStale: Duration) = addCacheHeader(
350+
ApolloCacheHeaders.MAX_STALE, maxStale.inWholeSeconds.toString()
341351
)
342352

343353
/**
@@ -389,7 +399,7 @@ internal val <D : Operation.Data> ApolloRequest<D>.writeToCacheAsynchronously
389399
internal val <D : Mutation.Data> ApolloRequest<D>.optimisticData
390400
get() = executionContext[OptimisticUpdatesContext]?.value
391401

392-
internal val <D : Operation.Data> ApolloRequest<D>.cacheHeaders
402+
internal val ExecutionOptions.cacheHeaders: CacheHeaders
393403
get() = executionContext[CacheHeadersContext]?.value ?: CacheHeaders.NONE
394404

395405
internal val <D : Operation.Data> ApolloRequest<D>.watchContext: WatchContext?

0 commit comments

Comments
 (0)