UNPKG

2.88 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const graphql_1 = require("graphql");
5function createResolversMap(schema) {
6 const typeMap = schema.getTypeMap();
7 return Object.keys(typeMap)
8 .filter(typeName => !typeName.includes("__"))
9 .reduce((resolversMap, typeName) => {
10 const type = typeMap[typeName];
11 if (type instanceof graphql_1.GraphQLObjectType) {
12 resolversMap[typeName] = Object.assign({}, (type.isTypeOf && {
13 __isTypeOf: type.isTypeOf,
14 }), generateFieldsResolvers(type.getFields()));
15 }
16 if (type instanceof graphql_1.GraphQLInterfaceType) {
17 resolversMap[typeName] = Object.assign({ __resolveType: generateTypeResolver(type, schema) }, generateFieldsResolvers(type.getFields()));
18 }
19 if (type instanceof graphql_1.GraphQLScalarType) {
20 resolversMap[typeName] = type;
21 }
22 if (type instanceof graphql_1.GraphQLEnumType) {
23 const enumValues = type.getValues();
24 resolversMap[typeName] = enumValues.reduce((enumMap, { name, value }) => {
25 enumMap[name] = value;
26 return enumMap;
27 }, {});
28 }
29 if (type instanceof graphql_1.GraphQLUnionType) {
30 resolversMap[typeName] = {
31 __resolveType: generateTypeResolver(type, schema),
32 };
33 }
34 return resolversMap;
35 }, {});
36}
37exports.createResolversMap = createResolversMap;
38function generateTypeResolver(abstractType, schema) {
39 if (abstractType.resolveType) {
40 return (source, context, info) => tslib_1.__awaiter(this, void 0, void 0, function* () {
41 const detectedType = yield abstractType.resolveType(source, context, info);
42 if (detectedType instanceof graphql_1.GraphQLObjectType) {
43 return detectedType.name;
44 }
45 return detectedType;
46 });
47 }
48 const possibleObjectTypes = schema.getPossibleTypes(abstractType);
49 return (source, context, info) => tslib_1.__awaiter(this, void 0, void 0, function* () {
50 for (const objectType of possibleObjectTypes) {
51 if (objectType.isTypeOf && (yield objectType.isTypeOf(source, context, info))) {
52 return objectType.name;
53 }
54 }
55 return null;
56 });
57}
58function generateFieldsResolvers(fields) {
59 return Object.keys(fields).reduce((fieldsMap, fieldName) => {
60 const field = fields[fieldName];
61 if (field.subscribe) {
62 fieldsMap[fieldName] = {
63 subscribe: field.subscribe,
64 resolve: field.resolve,
65 };
66 }
67 else if (field.resolve) {
68 fieldsMap[fieldName] = field.resolve;
69 }
70 return fieldsMap;
71 }, {});
72}