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 typeFromAST_1 = require("graphql/utilities/typeFromAST");
|
7 | exports.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 |
|
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 |
|
\ | No newline at end of file |