Skip to content

Commit de7ec4d

Browse files
committed
fix: ObjectTypeDefinitionBuilder greedy matching ignore types
1 parent 9a286a8 commit de7ec4d

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

src/graphql.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const ObjectTypeDefinitionBuilder = (
1414
): ObjectTypeDefinitionFn | undefined => {
1515
if (!useObjectTypes) return undefined;
1616
return node => {
17-
if (/^Query|Mutation|Subscription$/.test(node.name.value)) {
17+
if (/^(Query|Mutation|Subscription)$/.test(node.name.value)) {
1818
return;
1919
}
2020
return callback(node);

tests/graphql.spec.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { Kind, ObjectTypeDefinitionNode } from 'graphql';
2+
import { ObjectTypeDefinitionBuilder } from '../src/graphql';
3+
4+
describe('graphql', () => {
5+
describe('ObjectTypeDefinitionBuilder', () => {
6+
describe('useObjectTypes === true', () => {
7+
test.each([
8+
['Query', false],
9+
['Mutation', false],
10+
['Subscription', false],
11+
['QueryFoo', true],
12+
['MutationFoo', true],
13+
['SubscriptionFoo', true],
14+
['FooQuery', true],
15+
['FooMutation', true],
16+
['FooSubscription', true],
17+
['Foo', true],
18+
])(`A node with a name of "%s" returns callback? %s`, (nodeName, returnsCallback) => {
19+
const node: ObjectTypeDefinitionNode = {
20+
name: {
21+
kind: Kind.NAME,
22+
value: nodeName,
23+
},
24+
kind: Kind.OBJECT_TYPE_DEFINITION,
25+
};
26+
27+
const objectTypeDefFn = ObjectTypeDefinitionBuilder(true, (n: ObjectTypeDefinitionNode) => n);
28+
29+
expect(objectTypeDefFn).toBeDefined();
30+
31+
if (returnsCallback) {
32+
expect(objectTypeDefFn?.(node)).toBe(node);
33+
} else {
34+
expect(objectTypeDefFn?.(node)).toBeUndefined();
35+
}
36+
});
37+
});
38+
39+
describe('useObjectTypes === false', () => {
40+
test('should not return an ObjectTypeDefinitionFn', () => {
41+
const objectTypeDefFn = ObjectTypeDefinitionBuilder(false, (n: ObjectTypeDefinitionNode) => n);
42+
expect(objectTypeDefFn).toBeUndefined();
43+
});
44+
});
45+
});
46+
});

0 commit comments

Comments
 (0)