UNPKG

1.48 kBJavaScriptView Raw
1import { GraphQLError } from "../../error/GraphQLError.mjs";
2
3/**
4 * No unused fragments
5 *
6 * A GraphQL document is only valid if all fragment definitions are spread
7 * within operations, or spread within other fragments spread within operations.
8 */
9export function NoUnusedFragmentsRule(context) {
10 var operationDefs = [];
11 var fragmentDefs = [];
12 return {
13 OperationDefinition: function OperationDefinition(node) {
14 operationDefs.push(node);
15 return false;
16 },
17 FragmentDefinition: function FragmentDefinition(node) {
18 fragmentDefs.push(node);
19 return false;
20 },
21 Document: {
22 leave: function leave() {
23 var fragmentNameUsed = Object.create(null);
24
25 for (var _i2 = 0; _i2 < operationDefs.length; _i2++) {
26 var operation = operationDefs[_i2];
27
28 for (var _i4 = 0, _context$getRecursive2 = context.getRecursivelyReferencedFragments(operation); _i4 < _context$getRecursive2.length; _i4++) {
29 var fragment = _context$getRecursive2[_i4];
30 fragmentNameUsed[fragment.name.value] = true;
31 }
32 }
33
34 for (var _i6 = 0; _i6 < fragmentDefs.length; _i6++) {
35 var fragmentDef = fragmentDefs[_i6];
36 var fragName = fragmentDef.name.value;
37
38 if (fragmentNameUsed[fragName] !== true) {
39 context.reportError(new GraphQLError("Fragment \"".concat(fragName, "\" is never used."), fragmentDef));
40 }
41 }
42 }
43 }
44 };
45}