graphql-tools icon indicating copy to clipboard operation
graphql-tools copied to clipboard

Cannot merge two directives if their descriptions differ (Part 2)

Open Friday32 opened this issue 3 years ago • 0 comments

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

    /**
     * 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: image

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

image

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:

Friday32 avatar Apr 05 '22 19:04 Friday32