1 | "use strict";
|
2 | var definition_1 = require("graphql/type/definition");
|
3 | var kinds_1 = require("graphql/language/kinds");
|
4 | var utils_1 = require("./utils");
|
5 | var pascalCase = require("pascal-case");
|
6 | var camelCase = require("camel-case");
|
7 | var typeFromAST_1 = require("graphql/utilities/typeFromAST");
|
8 | exports.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 |
|
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 |
|
\ | No newline at end of file |