1 | "use strict";
|
2 | var __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 | };
|
13 | Object.defineProperty(exports, "__esModule", { value: true });
|
14 | var types_1 = require("../types");
|
15 | var graphql_1 = require("graphql");
|
16 | var get_field_def_1 = require("../utils/get-field-def");
|
17 | var resolve_type_1 = require("../schema/resolve-type");
|
18 | var debugging_1 = require("../debugging");
|
19 | var resolve_type_indicators_1 = require("../schema/resolve-type-indicators");
|
20 | function 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 | }
|
33 | exports.separateSelectionSet = separateSelectionSet;
|
34 | function 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; });
|
75 | }
|
76 | exports.buildSelectionSet = buildSelectionSet;
|
77 |
|
\ | No newline at end of file |