UNPKG

4.68 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13Object.defineProperty(exports, "__esModule", { value: true });
14var types_1 = require("../types");
15var graphql_1 = require("graphql");
16var get_field_def_1 = require("../utils/get-field-def");
17var resolve_type_1 = require("../schema/resolve-type");
18var debugging_1 = require("../debugging");
19var resolve_type_indicators_1 = require("../schema/resolve-type-indicators");
20function separateSelectionSet(selectionSet) {
21 var fields = selectionSet.filter(function (n) { return types_1.isFieldNode(n); });
22 var fragmentsSpread = selectionSet.filter(function (n) { return types_1.isFragmentSpreadNode(n); });
23 var inlineFragments = selectionSet.filter(function (n) { return types_1.isInlineFragmentNode(n); });
24 return {
25 fragmentsSpread: fragmentsSpread,
26 fields: fields,
27 inlineFragments: inlineFragments,
28 hasFragmentsSpread: fragmentsSpread.length > 0,
29 hasFields: fields.length > 0,
30 hasInlineFragments: inlineFragments.length > 0
31 };
32}
33exports.separateSelectionSet = separateSelectionSet;
34function buildSelectionSet(schema, rootObject, node) {
35 return (node && node.selections ? node.selections : [])
36 .map(function (selectionNode) {
37 if (selectionNode.kind === graphql_1.Kind.FIELD) {
38 var fieldNode = selectionNode;
39 var name = fieldNode.alias && fieldNode.alias.value ? fieldNode.alias.value : fieldNode.name.value;
40 debugging_1.debugLog("[buildSelectionSet] transforming FIELD with name " + name);
41 var field = get_field_def_1.getFieldDef(rootObject, fieldNode);
42 if (!field) {
43 debugging_1.debugLog("[buildSelectionSet] Ignoring field because of null result from getFieldDef...");
44 return null;
45 }
46 var resolvedType = resolve_type_1.resolveType(field.type);
47 var childSelectionSet = buildSelectionSet(schema, graphql_1.getNamedType(field.type), fieldNode.selectionSet);
48 var namedType = graphql_1.getNamedType(field.type);
49 var indicators = resolve_type_indicators_1.resolveTypeIndicators(namedType);
50 return __assign({ isField: true, isFragmentSpread: false, isInlineFragment: false, isLeaf: childSelectionSet.length === 0, schemaFieldName: fieldNode.name.value, name: name, isAliased: fieldNode.alias && fieldNode.alias.value, selectionSet: childSelectionSet }, separateSelectionSet(childSelectionSet), { type: resolvedType.name, raw: resolvedType.raw, isRequired: resolvedType.isRequired, isNullableArray: resolvedType.isNullableArray, isArray: resolvedType.isArray, dimensionOfArray: resolvedType.dimensionOfArray, isEnum: indicators.isEnum, isScalar: indicators.isScalar, isInterface: indicators.isInterface, isUnion: indicators.isUnion, isInputType: indicators.isInputType, isType: indicators.isType });
51 }
52 else if (selectionNode.kind === graphql_1.Kind.FRAGMENT_SPREAD) {
53 var fieldNode = selectionNode;
54 debugging_1.debugLog("[buildSelectionSet] transforming FRAGMENT_SPREAD with name " + fieldNode.name.value + "...");
55 return {
56 isField: false,
57 isFragmentSpread: true,
58 isInlineFragment: false,
59 isLeaf: true,
60 fragmentName: fieldNode.name.value
61 };
62 }
63 else if (selectionNode.kind === graphql_1.Kind.INLINE_FRAGMENT) {
64 debugging_1.debugLog("[buildSelectionSet] transforming INLINE_FRAGMENT...");
65 var fieldNode = selectionNode;
66 var nextRoot = graphql_1.typeFromAST(schema, fieldNode.typeCondition);
67 var childSelectionSet = buildSelectionSet(schema, nextRoot, fieldNode.selectionSet);
68 return __assign({ isField: false, isFragmentSpread: false, isInlineFragment: true, isLeaf: childSelectionSet.length === 0, selectionSet: childSelectionSet }, separateSelectionSet(childSelectionSet), { onType: fieldNode.typeCondition.name.value });
69 }
70 else {
71 throw new Error("Unexpected GraphQL type: " + selectionNode.kind + "!");
72 }
73 })
74 .filter(function (item) { return item; }); // filter to remove null types
75}
76exports.buildSelectionSet = buildSelectionSet;
77//# sourceMappingURL=build-selection-set.js.map
\No newline at end of file