Skip to content

Commit b278105

Browse files
smyrickShane Myrick
and
Shane Myrick
authored
Replace regex with printer option (ExpediaGroup#743)
Co-authored-by: Shane Myrick <[email protected]>
1 parent fc4c386 commit b278105

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/federation/FederatedSchemaGeneratorHooks.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ import kotlin.reflect.full.findAnnotation
5252
* Hooks for generating federated GraphQL schema.
5353
*/
5454
open class FederatedSchemaGeneratorHooks(private val federatedTypeRegistry: FederatedTypeRegistry) : SchemaGeneratorHooks {
55-
private val directiveDefinitionRegex = "(^\".+\"$[\\r\\n])?^directive @\\w+\\(.+\\) on .+?\$[\\r\\n]*".toRegex(setOf(RegexOption.MULTILINE, RegexOption.IGNORE_CASE, RegexOption.DOT_MATCHES_ALL))
5655
private val scalarDefinitionRegex = "(^\".+\"$[\\r\\n])?^scalar (_FieldSet|_Any)$[\\r\\n]*".toRegex(setOf(RegexOption.MULTILINE, RegexOption.IGNORE_CASE))
5756
private val emptyQueryRegex = "^type Query(?!\\s*\\{)\\s+".toRegex(setOf(RegexOption.MULTILINE, RegexOption.IGNORE_CASE))
5857
private val validator = FederatedSchemaValidator()
@@ -94,9 +93,11 @@ open class FederatedSchemaGeneratorHooks(private val federatedTypeRegistry: Fede
9493
* - any custom directives
9594
* - new federated scalars
9695
*/
97-
val sdl = originalSchema.print(includeDefaultSchemaDefinition = false, includeDirectivesFilter = customDirectivePredicate)
98-
.replace(directiveDefinitionRegex, "")
99-
.replace(scalarDefinitionRegex, "")
96+
val sdl = originalSchema.print(
97+
includeDefaultSchemaDefinition = false,
98+
includeDirectiveDefinitions = false,
99+
includeDirectivesFilter = customDirectivePredicate
100+
).replace(scalarDefinitionRegex, "")
100101
.replace(emptyQueryRegex, "")
101102
.trim()
102103
federatedCodeRegistry.dataFetcher(FieldCoordinates.coordinates(originalQuery.name, SERVICE_FIELD_DEFINITION.name), DataFetcher { _Service(sdl) })

graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/extensions/GraphQLSchemaExtensions.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@ import java.util.function.Predicate
3030
* default root type names
3131
* @param includeDirectives boolean flag indicating whether SDL should include directive information
3232
* @param includeDirectivesFilter Predicate to filter out specifc directives. Defaults to filter all directives by the value of [includeDirectives]
33+
* @param includeDirectiveDefinitions Include the definitions of directives at the top of the schema
3334
*/
3435
fun GraphQLSchema.print(
3536
includeIntrospectionTypes: Boolean = false,
3637
includeScalarTypes: Boolean = true,
3738
includeDefaultSchemaDefinition: Boolean = true,
3839
includeDirectives: Boolean = true,
39-
includeDirectivesFilter: Predicate<GraphQLDirective> = Predicate { includeDirectives }
40+
includeDirectivesFilter: Predicate<GraphQLDirective> = Predicate { includeDirectives },
41+
includeDirectiveDefinitions: Boolean = true
4042
): String {
4143
val schemaPrinter = SchemaPrinter(
4244
SchemaPrinter.Options.defaultOptions()
@@ -45,6 +47,7 @@ fun GraphQLSchema.print(
4547
.includeSchemaDefinition(includeDefaultSchemaDefinition)
4648
.includeDirectives(includeDirectives)
4749
.includeDirectives(includeDirectivesFilter)
50+
.includeDirectiveDefinitions(includeDirectiveDefinitions)
4851
)
4952
return schemaPrinter.print(this)
5053
}

0 commit comments

Comments
 (0)