UNPKG

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