Skip to content

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

@Friday32

Description

@Friday32

This issue seems like a continuation of #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:

  • @graphql-tools/merge@8.2.6:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions