@@ -25,6 +25,7 @@ import kotlin.reflect.full.findAnnotation
25
25
open class FederatedSchemaGeneratorHooks (private val federatedTypeRegistry : FederatedTypeRegistry ) : SchemaGeneratorHooks {
26
26
private val directiveRegex = " (^#.+$[\\ r\\ n])?^directive @\\ w+.+$[\\ r\\ n]*" .toRegex(setOf (RegexOption .MULTILINE , RegexOption .IGNORE_CASE ))
27
27
private val scalarRegex = " (^#.+$[\\ r\\ n])?^scalar (_FieldSet|_Any)$[\\ r\\ n]*" .toRegex(setOf (RegexOption .MULTILINE , RegexOption .IGNORE_CASE ))
28
+ private val emptyQuery = " ^type Query \\ {$\\ s+^\\ }$\\ s+" .toRegex(setOf (RegexOption .MULTILINE , RegexOption .IGNORE_CASE ))
28
29
private val validator = FederatedSchemaValidator ()
29
30
30
31
override fun willGenerateGraphQLType (type : KType ): GraphQLType ? = when (type.classifier) {
@@ -58,10 +59,16 @@ open class FederatedSchemaGeneratorHooks(private val federatedTypeRegistry: Fede
58
59
val entityField = generateEntityFieldDefinition(entityTypeNames)
59
60
federatedQuery.field(entityField)
60
61
61
- // SDL returned by _service query should not contain directives or new scalars
62
- val sdl = originalSchema.print ()
62
+ // SDL returned by _service query should NOT contain
63
+ // - default schema definition
64
+ // - empty Query type
65
+ // - directives
66
+ // - new scalars
67
+ val sdl = originalSchema.print (includeDefaultSchemaDefinition = false )
63
68
.replace(directiveRegex, " " )
64
69
.replace(scalarRegex, " " )
70
+ .replace(emptyQuery, " " )
71
+ .replace(" type ${originalQuery.name} " , " type ${originalQuery.name} @extends" )
65
72
.trim()
66
73
federatedCodeRegistry.dataFetcher(FieldCoordinates .coordinates(originalQuery.name, SERVICE_FIELD_DEFINITION .name), DataFetcher { _Service (sdl) })
67
74
federatedCodeRegistry.dataFetcher(FieldCoordinates .coordinates(originalQuery.name, entityField.name), DataFetcher {
0 commit comments