diff --git a/.changeset/many-jobs-perform.md b/.changeset/many-jobs-perform.md new file mode 100644 index 000000000..83c5ff7bd --- /dev/null +++ b/.changeset/many-jobs-perform.md @@ -0,0 +1,5 @@ +--- +'@graphql-hive/client': minor +--- + +skip directive arguments during usage collection diff --git a/packages/libraries/client/src/internal/usage.ts b/packages/libraries/client/src/internal/usage.ts index 796f769cc..d3b1f08c7 100644 --- a/packages/libraries/client/src/internal/usage.ts +++ b/packages/libraries/client/src/internal/usage.ts @@ -379,6 +379,12 @@ export function createCollector({ collectInputType(resolveTypeName(inputType)); } }, + Directive(node) { + return { + ...node, + arguments: [], + }; + }, Argument(node) { const parent = typeInfo.getParentType()!; const field = typeInfo.getFieldDef()!; diff --git a/packages/libraries/client/tests/usage-collector.spec.ts b/packages/libraries/client/tests/usage-collector.spec.ts index 2f1ac382f..8ed394bbf 100644 --- a/packages/libraries/client/tests/usage-collector.spec.ts +++ b/packages/libraries/client/tests/usage-collector.spec.ts @@ -195,6 +195,34 @@ test('collect arguments', async () => { expect(info.fields).toContain(`Query.projects.filter`); }); +test('skips argument directives', async () => { + const collect = createCollector({ + schema, + max: 1, + }); + const info = collect( + parse(/* GraphQL */ ` + query getProjects($limit: Int!, $type: ProjectType!, $includeName: Boolean!) { + projects(filter: { pagination: { limit: $limit }, type: $type }) { + id + ...NestedFragment + } + } + + fragment NestedFragment on Project { + ...IncludeNameFragment @include(if: $includeName) + } + + fragment IncludeNameFragment on Project { + name + } + `), + {}, + ).value; + + expect(info.fields).toContain(`Query.projects.filter`); +}); + test('collect used-only input fields', async () => { const collect = createCollector({ schema,