11package com.expedia.graphql.schema
22
3- import com.expedia.graphql.KotlinDataFetcher
4- import com.expedia.graphql.Parameter
53import com.expedia.graphql.TopLevelObjectDef
64import com.expedia.graphql.schema.exceptions.ConflictingTypesException
75import com.expedia.graphql.schema.exceptions.CouldNotGetNameOfEnumException
86import com.expedia.graphql.schema.exceptions.TypeNotSupportedException
9- import com.expedia.graphql.schema.hooks.SchemaGeneratorHooks
107import com.expedia.graphql.schema.models.KGraphQLType
118import graphql.TypeResolutionEnvironment
129import graphql.schema.DataFetcher
@@ -37,18 +34,15 @@ import kotlin.reflect.jvm.jvmErasure
3734internal class SchemaGenerator (
3835 private val queries : List <TopLevelObjectDef >,
3936 private val mutations : List <TopLevelObjectDef >,
40- private val config : SchemaConfig ,
41- private val hooks : SchemaGeneratorHooks
37+ private val config : SchemaGeneratorConfig
4238) {
4339
4440 private val typesCache: MutableMap <String , KGraphQLType > = mutableMapOf ()
45- private val propertyFilters: List <PropertyFilter > = listOf (isPublic, isNotGraphQLIgnored)
46- private val functionFilters: List <FunctionFilter > = listOf (isPublic, isNotGraphQLIgnored, isNotBlackListed)
4741 private val additionTypes = mutableSetOf<GraphQLType >()
4842
4943 internal fun generate (): GraphQLSchema {
5044 val builder = generateWithReflection()
51- return hooks.willBuildSchema(builder).build()
45+ return config. hooks.willBuildSchema(builder).build()
5246 }
5347
5448 private fun generateWithReflection (): GraphQLSchema .Builder {
@@ -68,11 +62,11 @@ internal class SchemaGenerator(
6862 queryBuilder.name(config.topLevelQueryName)
6963 for (query in queries) {
7064 query.klazz.declaredMemberFunctions
71- .filter { hooks.isValidFunction(it) }
65+ .filter { config. hooks.isValidFunction(it) }
7266 .filter { func -> functionFilters.all { it.invoke(func) } }
7367 .forEach {
7468 val function = function(it, query.obj)
75- val functionFromHook = hooks.didGenerateQueryType(it, function)
69+ val functionFromHook = config. hooks.didGenerateQueryType(it, function)
7670 queryBuilder.field(functionFromHook)
7771 }
7872 }
@@ -86,11 +80,11 @@ internal class SchemaGenerator(
8680
8781 for (mutation in mutations) {
8882 mutation.klazz.declaredMemberFunctions
89- .filter { hooks.isValidFunction(it) }
83+ .filter { config. hooks.isValidFunction(it) }
9084 .filter { func -> functionFilters.all { it.invoke(func) } }
9185 .forEach {
9286 val function = function(it, mutation.obj)
93- val functionFromHook = hooks.didGenerateMutationType(it, function)
87+ val functionFromHook = config. hooks.didGenerateMutationType(it, function)
9488 mutationBuilder.field(functionFromHook)
9589 }
9690 }
@@ -123,7 +117,7 @@ internal class SchemaGenerator(
123117 }
124118 }
125119 val dataFetcher: DataFetcher <* > = KotlinDataFetcher (target, fn, args, fn.isGraphQLInstrumentable())
126- val hookDataFetcher = hooks.didGenerateDataFetcher(fn, dataFetcher)
120+ val hookDataFetcher = config. hooks.didGenerateDataFetcher(fn, dataFetcher)
127121 builder.dataFetcher(hookDataFetcher)
128122 builder.type(graphQLTypeOf(fn.returnType) as GraphQLOutputType )
129123 return builder.build()
@@ -143,10 +137,10 @@ internal class SchemaGenerator(
143137 .build()
144138
145139 private fun graphQLTypeOf (type : KType , inputType : Boolean = false): GraphQLType {
146- val hookGraphQLType = hooks.willGenerateGraphQLType(type)
140+ val hookGraphQLType = config. hooks.willGenerateGraphQLType(type)
147141 val graphQLType = hookGraphQLType ? : graphQLScalar(type) ? : objectFromReflection(type, inputType)
148142 val typeWithNullityTakenIntoAccount = graphQLType.wrapInNonNull(type)
149- hooks.didGenerateGraphQLType(type, typeWithNullityTakenIntoAccount)
143+ config. hooks.didGenerateGraphQLType(type, typeWithNullityTakenIntoAccount)
150144 return typeWithNullityTakenIntoAccount
151145 }
152146
@@ -228,12 +222,12 @@ internal class SchemaGenerator(
228222 if (interfaceType != null ) builder.withInterface(interfaceType)
229223
230224 klass.declaredMemberProperties
231- .filter { hooks.isValidProperty(it) }
225+ .filter { config. hooks.isValidProperty(it) }
232226 .filter { prop -> propertyFilters.all { it.invoke(prop) } }
233227 .forEach { builder.field(property(it)) }
234228
235229 klass.declaredMemberFunctions
236- .filter { hooks.isValidFunction(it) }
230+ .filter { config. hooks.isValidFunction(it) }
237231 .filter { func -> functionFilters.all { it.invoke(func) } }
238232 .forEach { builder.field(function(it)) }
239233
@@ -249,7 +243,7 @@ internal class SchemaGenerator(
249243
250244 // It does not make sense to run functions against the input types so we only process data fields
251245 klass.declaredMemberProperties
252- .filter { hooks.isValidProperty(it) }
246+ .filter { config. hooks.isValidProperty(it) }
253247 .filter { prop -> propertyFilters.all { it.invoke(prop) } }
254248 .forEach { builder.field(inputProperty(it)) }
255249
@@ -273,7 +267,7 @@ internal class SchemaGenerator(
273267 builder.description(kClass.graphQLDescription())
274268
275269 kClass.declaredMemberProperties
276- .filter { hooks.isValidProperty(it) }
270+ .filter { config. hooks.isValidProperty(it) }
277271 .filter { prop -> propertyFilters.all { it.invoke(prop) } }
278272 .forEach { builder.field(property(it)) }
279273
0 commit comments