UNPKG

4.65 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.merge = exports.graphql = void 0;
4var apollo_utilities_1 = require("apollo-utilities");
5function graphql(resolver, document, rootValue, contextValue, variableValues, execOptions) {
6 if (variableValues === void 0) { variableValues = {}; }
7 if (execOptions === void 0) { execOptions = {}; }
8 var mainDefinition = (0, apollo_utilities_1.getMainDefinition)(document);
9 var fragments = (0, apollo_utilities_1.getFragmentDefinitions)(document);
10 var fragmentMap = (0, apollo_utilities_1.createFragmentMap)(fragments);
11 var resultMapper = execOptions.resultMapper;
12 var fragmentMatcher = execOptions.fragmentMatcher || (function () { return true; });
13 var execContext = {
14 fragmentMap: fragmentMap,
15 contextValue: contextValue,
16 variableValues: variableValues,
17 resultMapper: resultMapper,
18 resolver: resolver,
19 fragmentMatcher: fragmentMatcher,
20 };
21 return executeSelectionSet(mainDefinition.selectionSet, rootValue, execContext);
22}
23exports.graphql = graphql;
24function executeSelectionSet(selectionSet, rootValue, execContext) {
25 var fragmentMap = execContext.fragmentMap, contextValue = execContext.contextValue, variables = execContext.variableValues;
26 var result = {};
27 selectionSet.selections.forEach(function (selection) {
28 if (variables && !(0, apollo_utilities_1.shouldInclude)(selection, variables)) {
29 return;
30 }
31 if ((0, apollo_utilities_1.isField)(selection)) {
32 var fieldResult = executeField(selection, rootValue, execContext);
33 var resultFieldKey = (0, apollo_utilities_1.resultKeyNameFromField)(selection);
34 if (fieldResult !== undefined) {
35 if (result[resultFieldKey] === undefined) {
36 result[resultFieldKey] = fieldResult;
37 }
38 else {
39 merge(result[resultFieldKey], fieldResult);
40 }
41 }
42 }
43 else {
44 var fragment = void 0;
45 if ((0, apollo_utilities_1.isInlineFragment)(selection)) {
46 fragment = selection;
47 }
48 else {
49 fragment = fragmentMap[selection.name.value];
50 if (!fragment) {
51 throw new Error("No fragment named ".concat(selection.name.value));
52 }
53 }
54 var typeCondition = fragment.typeCondition.name.value;
55 if (execContext.fragmentMatcher(rootValue, typeCondition, contextValue)) {
56 var fragmentResult = executeSelectionSet(fragment.selectionSet, rootValue, execContext);
57 merge(result, fragmentResult);
58 }
59 }
60 });
61 if (execContext.resultMapper) {
62 return execContext.resultMapper(result, rootValue);
63 }
64 return result;
65}
66function executeField(field, rootValue, execContext) {
67 var variables = execContext.variableValues, contextValue = execContext.contextValue, resolver = execContext.resolver;
68 var fieldName = field.name.value;
69 var args = (0, apollo_utilities_1.argumentsObjectFromField)(field, variables);
70 var info = {
71 isLeaf: !field.selectionSet,
72 resultKey: (0, apollo_utilities_1.resultKeyNameFromField)(field),
73 directives: (0, apollo_utilities_1.getDirectiveInfoFromField)(field, variables),
74 field: field,
75 };
76 var result = resolver(fieldName, rootValue, args, contextValue, info);
77 if (!field.selectionSet) {
78 return result;
79 }
80 if (result == null) {
81 return result;
82 }
83 if (Array.isArray(result)) {
84 return executeSubSelectedArray(field, result, execContext);
85 }
86 return executeSelectionSet(field.selectionSet, result, execContext);
87}
88function executeSubSelectedArray(field, result, execContext) {
89 return result.map(function (item) {
90 if (item === null) {
91 return null;
92 }
93 if (Array.isArray(item)) {
94 return executeSubSelectedArray(field, item, execContext);
95 }
96 return executeSelectionSet(field.selectionSet, item, execContext);
97 });
98}
99var hasOwn = Object.prototype.hasOwnProperty;
100function merge(dest, src) {
101 if (src !== null && typeof src === 'object') {
102 Object.keys(src).forEach(function (key) {
103 var srcVal = src[key];
104 if (!hasOwn.call(dest, key)) {
105 dest[key] = srcVal;
106 }
107 else {
108 merge(dest[key], srcVal);
109 }
110 });
111 }
112}
113exports.merge = merge;
114//# sourceMappingURL=graphql.js.map
\No newline at end of file