UNPKG

3.87 kBJavaScriptView Raw
1"use strict";
2var definition_1 = require("graphql/type/definition");
3var kinds_1 = require("graphql/language/kinds");
4var utils_1 = require("./utils");
5var pascalCase = require("pascal-case");
6var typeFromAST_1 = require("graphql/utilities/typeFromAST");
7exports.buildInnerModelsArray = function (schema, rootObject, selections, primitivesMap, appendTo, result) {
8 if (result === void 0) { result = []; }
9 (selections ? selections.selections : []).forEach(function (selectionNode) {
10 switch (selectionNode.kind) {
11 case kinds_1.FIELD:
12 var fieldName = selectionNode.name.value;
13 var propertyName = selectionNode.alias ? selectionNode.alias.value : fieldName;
14 var field = utils_1.getFieldDef(rootObject, selectionNode);
15 var rawType = field.type;
16 var actualType = definition_1.getNamedType(rawType);
17 if (actualType instanceof definition_1.GraphQLObjectType) {
18 var modelName = utils_1.handleNameDuplications(pascalCase(fieldName), result);
19 var model = {
20 name: modelName,
21 fields: [],
22 fragmentsUsed: [],
23 inlineFragments: []
24 };
25 result.push(model);
26 exports.buildInnerModelsArray(schema, actualType, selectionNode.selectionSet, primitivesMap, model, result);
27 if (!appendTo) {
28 // Means we are on the root object, and we need to create the Result interface
29 appendTo = {
30 name: 'Result',
31 fields: [],
32 fragmentsUsed: [],
33 inlineFragments: []
34 };
35 result.push(appendTo);
36 }
37 appendTo.fields.push({
38 name: propertyName,
39 type: modelName,
40 isArray: utils_1.isArray(rawType),
41 isRequired: utils_1.isRequired(rawType)
42 });
43 }
44 else {
45 appendTo.fields.push({
46 name: propertyName,
47 type: utils_1.getTypeName(primitivesMap, actualType),
48 isArray: utils_1.isArray(rawType),
49 isRequired: utils_1.isRequired(rawType)
50 });
51 }
52 break;
53 case kinds_1.FRAGMENT_SPREAD:
54 var fragmentName = selectionNode.name.value;
55 appendTo.fragmentsUsed.push(pascalCase(fragmentName));
56 appendTo.usingFragments = appendTo.fragmentsUsed.length > 0;
57 break;
58 case kinds_1.INLINE_FRAGMENT:
59 var root = typeFromAST_1.typeFromAST(schema, selectionNode.typeCondition);
60 var name_1 = selectionNode.typeCondition.name.value + 'InlineFragment';
61 var fragmentModel = {
62 name: name_1,
63 fields: [],
64 fragmentsUsed: [],
65 inlineFragments: []
66 };
67 appendTo.inlineFragments.push({
68 typeName: name_1,
69 onModel: selectionNode.typeCondition.name.value,
70 });
71 appendTo.hasInlineFragments = appendTo.inlineFragments.length > 0;
72 result.push(fragmentModel);
73 exports.buildInnerModelsArray(schema, root, selectionNode.selectionSet, primitivesMap, fragmentModel, result);
74 break;
75 default:
76 break;
77 }
78 });
79 return result;
80};
81//# sourceMappingURL=inner-models-builer.js.map
\No newline at end of file