Skip to content

Cleanup: remove ApolloResolver #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 16 additions & 51 deletions normalized-cache-incubating/api/normalized-cache-incubating.api

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.apollographql.cache.normalized

import com.apollographql.apollo.annotations.ApolloExperimental
import com.apollographql.apollo.api.CustomScalarAdapters
import com.apollographql.apollo.api.Fragment
import com.apollographql.apollo.api.Operation
import com.apollographql.apollo.interceptor.ApolloInterceptor
import com.apollographql.cache.normalized.api.ApolloResolver
import com.apollographql.cache.normalized.api.CacheHeaders
import com.apollographql.cache.normalized.api.CacheKey
import com.apollographql.cache.normalized.api.CacheKeyGenerator
Expand All @@ -16,7 +14,6 @@ import com.apollographql.cache.normalized.api.DefaultRecordMerger
import com.apollographql.cache.normalized.api.EmbeddedFieldsProvider
import com.apollographql.cache.normalized.api.EmptyMetadataGenerator
import com.apollographql.cache.normalized.api.FieldKeyGenerator
import com.apollographql.cache.normalized.api.FieldPolicyApolloResolver
import com.apollographql.cache.normalized.api.FieldPolicyCacheResolver
import com.apollographql.cache.normalized.api.MetadataGenerator
import com.apollographql.cache.normalized.api.NormalizedCache
Expand Down Expand Up @@ -204,34 +201,19 @@ interface ApolloStore {
fun dispose()
}

fun ApolloStore(
normalizedCacheFactory: NormalizedCacheFactory,
cacheKeyGenerator: CacheKeyGenerator = TypePolicyCacheKeyGenerator,
cacheResolver: CacheResolver = FieldPolicyCacheResolver,
): ApolloStore = DefaultApolloStore(
normalizedCacheFactory = normalizedCacheFactory,
cacheKeyGenerator = cacheKeyGenerator,
metadataGenerator = EmptyMetadataGenerator,
cacheResolver = cacheResolver,
recordMerger = DefaultRecordMerger,
fieldKeyGenerator = DefaultFieldKeyGenerator,
embeddedFieldsProvider = DefaultEmbeddedFieldsProvider,
)

@ApolloExperimental
fun ApolloStore(
normalizedCacheFactory: NormalizedCacheFactory,
cacheKeyGenerator: CacheKeyGenerator = TypePolicyCacheKeyGenerator,
metadataGenerator: MetadataGenerator = EmptyMetadataGenerator,
apolloResolver: ApolloResolver = FieldPolicyApolloResolver,
cacheResolver: CacheResolver = FieldPolicyCacheResolver,
recordMerger: RecordMerger = DefaultRecordMerger,
fieldKeyGenerator: FieldKeyGenerator = DefaultFieldKeyGenerator,
embeddedFieldsProvider: EmbeddedFieldsProvider = DefaultEmbeddedFieldsProvider,
): ApolloStore = DefaultApolloStore(
normalizedCacheFactory = normalizedCacheFactory,
cacheKeyGenerator = cacheKeyGenerator,
metadataGenerator = metadataGenerator,
cacheResolver = apolloResolver,
cacheResolver = cacheResolver,
recordMerger = recordMerger,
fieldKeyGenerator = fieldKeyGenerator,
embeddedFieldsProvider = embeddedFieldsProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import com.apollographql.apollo.ApolloCall
import com.apollographql.apollo.ApolloClient
import com.apollographql.apollo.annotations.ApolloDeprecatedSince
import com.apollographql.apollo.annotations.ApolloDeprecatedSince.Version.v4_0_0
import com.apollographql.apollo.annotations.ApolloExperimental
import com.apollographql.apollo.api.ApolloRequest
import com.apollographql.apollo.api.ApolloResponse
import com.apollographql.apollo.api.ExecutionContext
Expand All @@ -23,7 +22,6 @@ import com.apollographql.apollo.interceptor.AutoPersistedQueryInterceptor
import com.apollographql.apollo.mpp.currentTimeMillis
import com.apollographql.apollo.network.http.HttpInfo
import com.apollographql.cache.normalized.api.ApolloCacheHeaders
import com.apollographql.cache.normalized.api.ApolloResolver
import com.apollographql.cache.normalized.api.CacheHeaders
import com.apollographql.cache.normalized.api.CacheKeyGenerator
import com.apollographql.cache.normalized.api.CacheResolver
Expand All @@ -33,7 +31,6 @@ import com.apollographql.cache.normalized.api.DefaultRecordMerger
import com.apollographql.cache.normalized.api.EmbeddedFieldsProvider
import com.apollographql.cache.normalized.api.EmptyMetadataGenerator
import com.apollographql.cache.normalized.api.FieldKeyGenerator
import com.apollographql.cache.normalized.api.FieldPolicyApolloResolver
import com.apollographql.cache.normalized.api.FieldPolicyCacheResolver
import com.apollographql.cache.normalized.api.MetadataGenerator
import com.apollographql.cache.normalized.api.NormalizedCacheFactory
Expand Down Expand Up @@ -108,24 +105,12 @@ enum class FetchPolicy {
* This allows to display results faster
*/
@JvmOverloads
@JvmName("configureApolloClientBuilder")
fun ApolloClient.Builder.normalizedCache(
normalizedCacheFactory: NormalizedCacheFactory,
cacheKeyGenerator: CacheKeyGenerator = TypePolicyCacheKeyGenerator,
cacheResolver: CacheResolver = FieldPolicyCacheResolver,
writeToCacheAsynchronously: Boolean = false,
): ApolloClient.Builder {
return store(ApolloStore(normalizedCacheFactory, cacheKeyGenerator, cacheResolver), writeToCacheAsynchronously)
}

@ApolloExperimental
@JvmOverloads
@JvmName("configureApolloClientBuilder2")
fun ApolloClient.Builder.normalizedCache(
normalizedCacheFactory: NormalizedCacheFactory,
cacheKeyGenerator: CacheKeyGenerator = TypePolicyCacheKeyGenerator,
metadataGenerator: MetadataGenerator = EmptyMetadataGenerator,
apolloResolver: ApolloResolver = FieldPolicyApolloResolver,
cacheResolver: CacheResolver = FieldPolicyCacheResolver,
recordMerger: RecordMerger = DefaultRecordMerger,
fieldKeyGenerator: FieldKeyGenerator = DefaultFieldKeyGenerator,
embeddedFieldsProvider: EmbeddedFieldsProvider = DefaultEmbeddedFieldsProvider,
Expand All @@ -136,7 +121,7 @@ fun ApolloClient.Builder.normalizedCache(
normalizedCacheFactory = normalizedCacheFactory,
cacheKeyGenerator = cacheKeyGenerator,
metadataGenerator = metadataGenerator,
apolloResolver = apolloResolver,
cacheResolver = cacheResolver,
recordMerger = recordMerger,
fieldKeyGenerator = fieldKeyGenerator,
embeddedFieldsProvider = embeddedFieldsProvider
Expand Down Expand Up @@ -348,7 +333,6 @@ fun <T> MutableExecutionOptions<T>.storePartialResponses(storePartialResponses:
*
* Default: false
*/
@ApolloExperimental
fun <T> MutableExecutionOptions<T>.storeReceiveDate(storeReceiveDate: Boolean) = addExecutionContext(
StoreReceiveDateContext(storeReceiveDate)
)
Expand All @@ -360,7 +344,6 @@ fun <T> MutableExecutionOptions<T>.storeReceiveDate(storeReceiveDate: Boolean) =
*
* Default: false
*/
@ApolloExperimental
fun <T> MutableExecutionOptions<T>.storeExpirationDate(storeExpirationDate: Boolean): T {
addExecutionContext(StoreExpirationDateContext(storeExpirationDate))
if (this is ApolloClient.Builder) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.apollographql.cache.normalized.api

import com.apollographql.apollo.annotations.ApolloExperimental

/**
* A collection of cache headers that Apollo's implementations of [NormalizedCache] respect.
*/
Expand All @@ -24,12 +22,10 @@ object ApolloCacheHeaders {
/**
* The value of this header will be stored in the [Record] fields date
*/
@ApolloExperimental
const val DATE = "apollo-date"

/**
* How long to accept stale fields
*/
@ApolloExperimental
const val MAX_STALE = "apollo-max-stale"
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package com.apollographql.cache.normalized.api

import com.apollographql.apollo.annotations.ApolloExperimental
import com.apollographql.apollo.api.CompiledField
import com.apollographql.apollo.api.CompiledListType
import com.apollographql.apollo.api.CompiledNamedType
import com.apollographql.apollo.api.CompiledNotNullType
import com.apollographql.apollo.api.Executable
import com.apollographql.apollo.api.isComposite
import kotlin.jvm.JvmSuppressWildcards

/**
* A [CacheResolver] that resolves objects and list of objects and falls back to the default resolver for scalar fields.
Expand All @@ -19,74 +15,6 @@ import kotlin.jvm.JvmSuppressWildcards
* For simplicity, this only handles one level of lists. Implement [CacheResolver] if you need arbitrary nested lists of objects.
*/
abstract class CacheKeyResolver : CacheResolver {
/**
* Returns the computed cache key for a composite field.
*
* If the field is of object type, you can get the object typename with `field.type.rawType().name`.
* If the field is of interface or union type, the concrete object typename is not predictable and the returned [CacheKey] must be unique
* in the whole schema as it cannot be namespaced by the typename anymore.
*
* If the returned [CacheKey] is null, the resolver will use the default handling and use any previously cached value.
*/
abstract fun cacheKeyForField(field: CompiledField, variables: Executable.Variables): CacheKey?

/**
* For a field that contains a list of objects, [listOfCacheKeysForField] returns a list of [CacheKey]s where each [CacheKey] identifies an object.
*
* If the field is of object type, you can get the object typename with `field.type.rawType().name`.
* If the field is of interface or union type, the concrete object typename is not predictable and the returned [CacheKey] must be unique
* in the whole schema as it cannot be namespaced by the typename anymore.
*
* If an individual [CacheKey] is null, the resulting object will be null in the response.
* If the returned list of [CacheKey]s is null, the resolver will use the default handling and use any previously cached value.
*/
open fun listOfCacheKeysForField(field: CompiledField, variables: Executable.Variables): List<CacheKey?>? = null

final override fun resolveField(
field: CompiledField,
variables: Executable.Variables,
parent: Map<String, @JvmSuppressWildcards Any?>,
parentId: String,
): Any? {
var type = field.type
if (type is CompiledNotNullType) {
type = type.ofType
}
if (type is CompiledNamedType && type.isComposite()) {
val result = cacheKeyForField(field, variables)
if (result != null) {
return result
}
}

if (type is CompiledListType) {
type = type.ofType
if (type is CompiledNotNullType) {
type = type.ofType
}
if (type is CompiledNamedType && type.isComposite()) {
val result = listOfCacheKeysForField(field, variables)
if (result != null) {
return result
}
}
}

return DefaultCacheResolver.resolveField(field, variables, parent, parentId)
}
}

/**
* An [ApolloResolver] that resolves objects and list of objects and falls back to the default resolver for scalar fields.
* It is intended to simplify the usage of [ApolloResolver] when no special handling is needed for scalar fields.
*
* Override [cacheKeyForField] to compute a cache key for a field of composite type.
* Override [listOfCacheKeysForField] to compute a list of cache keys for a field of 'list-of-composite' type.
*
* For simplicity, this only handles one level of lists. Implement [ApolloResolver] if you need arbitrary nested lists of objects.
*/
@ApolloExperimental
abstract class CacheKeyApolloResolver : ApolloResolver {
/**
* Returns the computed cache key for a composite field.
*
Expand Down Expand Up @@ -135,6 +63,6 @@ abstract class CacheKeyApolloResolver : ApolloResolver {
}
}

return DefaultApolloResolver.resolveField(context)
return DefaultCacheResolver.resolveField(context)
}
}
Loading