1
1
import { GraphQLSchema , TypeInfo , visit , visitWithTypeInfo } from 'graphql' ;
2
+ import { GraphQLProjectConfig } from 'graphql-config' ;
3
+ import { ModuleCache } from '../cache.js' ;
2
4
import { SiblingOperations } from '../siblings.js' ;
3
5
import { GraphQLESLintRule } from '../types.js' ;
4
6
import { requireGraphQLSchemaFromContext , requireSiblingsOperations } from '../utils.js' ;
@@ -7,13 +9,14 @@ const RULE_ID = 'no-unused-fields';
7
9
8
10
type UsedFields = Record < string , Set < string > > ;
9
11
10
- let usedFieldsCache : UsedFields ;
12
+ const usedFieldsCache = new ModuleCache < GraphQLProjectConfig [ 'schema' ] , UsedFields > ( ) ;
11
13
12
14
function getUsedFields ( schema : GraphQLSchema , operations : SiblingOperations ) : UsedFields {
13
15
// We don't want cache usedFields on test environment
14
16
// Otherwise usedFields will be same for all tests
15
- if ( process . env . NODE_ENV !== 'test' && usedFieldsCache ) {
16
- return usedFieldsCache ;
17
+ const cachedValue = usedFieldsCache . get ( schema ) ;
18
+ if ( process . env . NODE_ENV !== 'test' && cachedValue ) {
19
+ return cachedValue ;
17
20
}
18
21
const usedFields : UsedFields = Object . create ( null ) ;
19
22
const typeInfo = new TypeInfo ( schema ) ;
@@ -37,8 +40,8 @@ function getUsedFields(schema: GraphQLSchema, operations: SiblingOperations): Us
37
40
for ( const { document } of allDocuments ) {
38
41
visit ( document , visitor ) ;
39
42
}
40
- usedFieldsCache = usedFields ;
41
- return usedFieldsCache ;
43
+ usedFieldsCache . set ( schema , usedFields ) ;
44
+ return usedFields ;
42
45
}
43
46
44
47
export const rule : GraphQLESLintRule = {
0 commit comments