/
rootTypes.ts
56 lines (47 loc) · 1.63 KB
/
rootTypes.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { ASTNode, GraphQLObjectType, GraphQLSchema, OperationTypeNode } from 'graphql';
import { createGraphQLError } from './errors.js';
import { memoize1 } from './memoize.js';
export function getDefinedRootType(
schema: GraphQLSchema,
operation: OperationTypeNode,
nodes?: ASTNode[],
): GraphQLObjectType {
const rootTypeMap = getRootTypeMap(schema);
const rootType = rootTypeMap.get(operation);
if (rootType == null) {
throw createGraphQLError(`Schema is not configured to execute ${operation} operation.`, {
nodes,
});
}
return rootType;
}
export const getRootTypeNames = memoize1(function getRootTypeNames(
schema: GraphQLSchema,
): Set<string> {
const rootTypes = getRootTypes(schema);
return new Set([...rootTypes].map(type => type.name));
});
export const getRootTypes = memoize1(function getRootTypes(
schema: GraphQLSchema,
): Set<GraphQLObjectType> {
const rootTypeMap = getRootTypeMap(schema);
return new Set(rootTypeMap.values());
});
export const getRootTypeMap = memoize1(function getRootTypeMap(
schema: GraphQLSchema,
): Map<OperationTypeNode, GraphQLObjectType> {
const rootTypeMap: Map<OperationTypeNode, GraphQLObjectType> = new Map();
const queryType = schema.getQueryType();
if (queryType) {
rootTypeMap.set('query' as OperationTypeNode, queryType);
}
const mutationType = schema.getMutationType();
if (mutationType) {
rootTypeMap.set('mutation' as OperationTypeNode, mutationType);
}
const subscriptionType = schema.getSubscriptionType();
if (subscriptionType) {
rootTypeMap.set('subscription' as OperationTypeNode, subscriptionType);
}
return rootTypeMap;
});