ardatan / ardatan/graphql-tools
Cannot merge two directives if their descriptions differ (Part 2)
- Dominant language
- TypeScript
- Stars
- 5.4k
- Forks
- 830
- Avg merge
- 10h 59m
- Merged PRs (30d)
- 45
Description
This issue seems like a continuation of https://github.com/ardatan/graphql-tools/issues/3031 where merges conflict if descriptions differ.
We use **graphql-codegen** that uses **graphql-tools/merge** to combine schema. Schemas are generated by two tools: graphql-js and graphql-java. Both generate a directive that differs slightly in the description.
Example of the directive: [graphql-java/Directives.java at master · graphql-java/graphql-java · GitHub](https://github.com/graphql-java/graphql-java/blob/master/src/main/java/graphql/Directives.java#L116)
```
/**
* The "specifiedBy" directive allows to provide a specification URL for a Scalar
*/
public static final GraphQLDirective SpecifiedByDirective = GraphQLDirective.newDirective()
.name(SPECIFIED_BY)
.description("Exposes a URL that specifies the behaviour of this scalar.")
.argument(newArgument()
.name("url")
.type(nonNull(GraphQLString))
.description("The URL that specifies the behaviour of this scalar."))
.validLocations(SCALAR)
.definition(SPECIFIED_BY_DIRECTIVE_DEFINITION)
.build();
```
The **node** parameter of the function **validateInputs()** in directives.ts looks like:

The fix for issue 3031 does not handle the argument description.
Print out of "printedNode" and "existing PrintedNode" of **validateInputs()**:

The "sameArguments " comparision fail due to the spelling difference of "behaviour".
**Expected behavior**
When I tweaked the the validateInputs() function locally to ignore the argument description, the graphql-codegen tool seemed to work properly.
**Environment:**
- `@graphql-tools/merge@8.2.6`:
Contributor guide
Research direction
Start in directives.ts at validateInputs() and compare how directive arguments are checked when descriptions differ. Reproduce the graphql-codegen merge case using the graphql-js and graphql-java specifiedBy directive definitions, then verify that differing argument descriptions no longer cause a conflict while other argument differences still do.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- graphql, typescript
- Domain
- api, backend-api-design
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100