Skip to content

Commit f6c5eb8

Browse files
authored
Better @link handling (#6417)
1 parent b65fa34 commit f6c5eb8

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

libraries/apollo-ast/src/commonMain/kotlin/com/apollographql/apollo/ast/internal/SchemaValidationScope.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ internal fun validateSchema(definitions: List<GQLDefinition>, options: SchemaVal
221221
*/
222222
issues.add(DirectiveRedefinition(entry.key, existing.sourceLocation, existing.sourceLocation))
223223
directiveDefinitions.put(entry.key, entry.value.definition)
224-
} else if (entry.value.linkedSchema.foreignSchema.name == "link") {
224+
} else if (entry.value.linkedSchema.foreignSchema.name == Schema.LINK) {
225225
/*
226226
* Since we don't support renaming @link just yet, there's no good resolution if the directive
227227
* is already defined in the API schema. Just ignore the schema one in this case
@@ -304,8 +304,9 @@ internal fun validateSchema(definitions: List<GQLDefinition>, options: SchemaVal
304304
mergedScope.validateNoIntrospectionNames()
305305

306306
// The cast never fails because we enforce a single schema definition above.
307-
val mergedSchemaDefinition = mergedDefinitions.single { it is GQLSchemaDefinition } as GQLSchemaDefinition
307+
var mergedSchemaDefinition = mergedDefinitions.single { it is GQLSchemaDefinition } as GQLSchemaDefinition
308308

309+
mergedSchemaDefinition = mergedSchemaDefinition.copy(directives = mergedSchemaDefinition.directives.filter { it.name != Schema.LINK })
309310
mergedScope.validateSchemaDefinition(mergedSchemaDefinition)
310311
mergedScope.validateInterfaces()
311312
mergedScope.validateObjects()
@@ -403,11 +404,10 @@ private fun List<GQLSchemaExtension>.getLinkedSchemas(
403404
val schemaExtensions = this
404405

405406
val linkedSchemas = mutableListOf<LinkedSchema>()
406-
val linkForeignSchema = ForeignSchema("link", "v1.0", linkDefinitions())
407-
val linkLinkedSchema = LinkedSchema(linkForeignSchema, linkForeignSchema.definitions, mapOf("link" to "link"), null)
407+
val linkLinkedSchema = ForeignSchema("link", "v1.0", linkDefinitions()).asNonPrefixedImport()
408408
schemaExtensions.forEach { schemaExtension ->
409409
schemaExtension.directives.forEach eachDirective@{ gqlDirective ->
410-
if (gqlDirective.name == "link") {
410+
if (gqlDirective.name == Schema.LINK) {
411411
if (!linkedSchemas.contains(linkLinkedSchema)) {
412412
linkedSchemas.add(linkLinkedSchema)
413413
}
@@ -416,7 +416,7 @@ private fun List<GQLSchemaExtension>.getLinkedSchemas(
416416
* Validate `@link` using a very minimal schema.
417417
* This ensures we can safely cast the arguments below
418418
*/
419-
val minimalSchema = builtinDefinitions() + linkForeignSchema.definitions
419+
val minimalSchema = builtinDefinitions() + linkLinkedSchema.foreignSchema.definitions
420420
val scope = DefaultValidationScope(
421421
minimalSchema.filterIsInstance<GQLTypeDefinition>().associateBy { it.name },
422422
minimalSchema.filterIsInstance<GQLDirectiveDefinition>().associateBy { it.name },

0 commit comments

Comments
 (0)