UNPKG

5.51 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 camelCase = require("camel-case");
7var typeFromAST_1 = require("graphql/utilities/typeFromAST");
8exports.buildInnerModelsArray = function (schema, rootObject, flattenInnerTypes, selections, primitivesMap, appendTo, result) {
9 if (result === void 0) { result = []; }
10 (selections ? selections.selections : []).forEach(function (selectionNode) {
11 switch (selectionNode.kind) {
12 case kinds_1.FIELD:
13 var isAliased = false;
14 var fieldName = selectionNode.name.value;
15 var propertyName = fieldName;
16 if (selectionNode.alias && selectionNode.alias.value) {
17 isAliased = true;
18 propertyName = selectionNode.alias.value;
19 }
20 var field = utils_1.getFieldDef(rootObject, selectionNode);
21 var rawType = field.type;
22 var actualType = definition_1.getNamedType(rawType);
23 if (actualType instanceof definition_1.GraphQLObjectType || actualType instanceof definition_1.GraphQLInterfaceType) {
24 var modelName = utils_1.handleNameDuplications(pascalCase(fieldName), result);
25 if (!appendTo) {
26 // Means we are on the root object, and we need to create the root interface result
27 appendTo = {
28 isRoot: true,
29 name: fieldName,
30 fields: [],
31 fragmentsUsed: [],
32 inlineFragments: [],
33 innerTypes: []
34 };
35 result.push(appendTo);
36 }
37 appendTo.fields.push({
38 name: propertyName,
39 schemaFieldName: fieldName,
40 type: isAliased ? pascalCase(propertyName) + '_' + modelName : modelName,
41 isAliased: isAliased,
42 isArray: utils_1.isArray(rawType),
43 isRequired: utils_1.isRequired(rawType)
44 });
45 var model = {
46 name: isAliased ? pascalCase(propertyName) + '_' + modelName : modelName,
47 fields: [],
48 fragmentsUsed: [],
49 inlineFragments: [],
50 schemaTypeName: String(actualType)
51 };
52 var resultArr_1 = result;
53 if (!flattenInnerTypes) {
54 appendTo.innerTypes = resultArr_1 = appendTo.innerTypes || [];
55 resultArr_1.push(model);
56 }
57 else {
58 result.push(model);
59 }
60 exports.buildInnerModelsArray(schema, actualType, flattenInnerTypes, selectionNode.selectionSet, primitivesMap, model, resultArr_1);
61 }
62 else {
63 appendTo.fields.push({
64 name: propertyName,
65 isAliased: isAliased,
66 schemaFieldName: fieldName,
67 type: utils_1.getTypeName(primitivesMap, actualType),
68 isArray: utils_1.isArray(rawType),
69 isRequired: utils_1.isRequired(rawType)
70 });
71 }
72 break;
73 case kinds_1.FRAGMENT_SPREAD:
74 var fragmentName = selectionNode.name.value;
75 appendTo.fragmentsUsed.push({
76 fieldName: camelCase(fragmentName),
77 typeName: pascalCase(fragmentName)
78 });
79 appendTo.usingFragments = appendTo.fragmentsUsed.length > 0;
80 break;
81 case kinds_1.INLINE_FRAGMENT:
82 var root = typeFromAST_1.typeFromAST(schema, selectionNode.typeCondition);
83 var schemaTypeName = selectionNode.typeCondition.name.value;
84 var name_1 = schemaTypeName + 'InlineFragment';
85 var fragmentModel = {
86 name: name_1,
87 fields: [],
88 fragmentsUsed: [],
89 inlineFragments: [],
90 isInlineFragment: true,
91 schemaTypeName: schemaTypeName
92 };
93 appendTo.inlineFragments.push({
94 typeName: schemaTypeName,
95 onModel: selectionNode.typeCondition.name.value,
96 });
97 appendTo.hasInlineFragments = appendTo.inlineFragments.length > 0;
98 var resultArr = result;
99 if (!flattenInnerTypes) {
100 appendTo.innerTypes = resultArr = appendTo.innerTypes || [];
101 resultArr.push(fragmentModel);
102 }
103 else {
104 result.push(fragmentModel);
105 }
106 exports.buildInnerModelsArray(schema, root, flattenInnerTypes, selectionNode.selectionSet, primitivesMap, fragmentModel, resultArr);
107 break;
108 default:
109 break;
110 }
111 });
112 return result;
113};
114//# sourceMappingURL=inner-models-builer.js.map
\No newline at end of file