Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c9e062a

Browse files
authored
Complexity for meta fields + test (#92)
1 parent fa1f9d5 commit c9e062a

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

‎src/QueryComplexity.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ import {
3535
Kind,
3636
getNamedType,
3737
GraphQLError,
38+
SchemaMetaFieldDef,
39+
TypeMetaFieldDef,
40+
TypeNameMetaFieldDef,
3841
} from 'graphql';
3942

4043
export type ComplexityEstimatorArgs = {
@@ -307,7 +310,23 @@ export default class QueryComplexity {
307310

308311
switch (childNode.kind) {
309312
case Kind.FIELD: {
310-
const field = fields[childNode.name.value];
313+
let field = null;
314+
315+
switch (childNode.name.value) {
316+
case SchemaMetaFieldDef.name:
317+
field = SchemaMetaFieldDef;
318+
break;
319+
case TypeMetaFieldDef.name:
320+
field = TypeMetaFieldDef;
321+
break;
322+
case TypeNameMetaFieldDef.name:
323+
field = TypeNameMetaFieldDef;
324+
break;
325+
default:
326+
field = fields[childNode.name.value];
327+
break;
328+
}
329+
311330
// Invalid field, should be caught by other validation rules
312331
if (!field) {
313332
break;

‎src/__tests__/QueryComplexity-test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,33 @@ describe('QueryComplexity analysis', () => {
611611
expect(complexity2).to.equal(20);
612612
});
613613

614+
it('should calculate complexity for meta fields', () => {
615+
const query = parse(`
616+
query Primary {
617+
__typename
618+
__type(name: "Primary") {
619+
name
620+
}
621+
__schema {
622+
types {
623+
name
624+
}
625+
}
626+
}
627+
`);
628+
629+
const complexity = getComplexity({
630+
estimators: [
631+
fieldExtensionsEstimator(),
632+
simpleEstimator({ defaultComplexity: 1 }),
633+
],
634+
schema,
635+
query,
636+
});
637+
638+
expect(complexity).to.equal(6);
639+
});
640+
614641
it('should calculate max complexity for fragment on union type', () => {
615642
const query = parse(`
616643
query Primary {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /