1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | 'use strict';
|
11 |
|
12 | function getInputObjectTypeIdentifier(type) {
|
13 | return type.name;
|
14 | }
|
15 |
|
16 | function transformScalarType(type, state, objectProps) {
|
17 | if (type instanceof require("graphql").GraphQLNonNull) {
|
18 | return transformNonNullableScalarType(type.ofType, state, objectProps);
|
19 | } else {
|
20 | return require("@babel/types").nullableTypeAnnotation(transformNonNullableScalarType(type, state, objectProps));
|
21 | }
|
22 | }
|
23 |
|
24 | function transformNonNullableScalarType(type, state, objectProps) {
|
25 | if (type instanceof require("graphql").GraphQLList) {
|
26 | return require("./RelayFlowBabelFactories").readOnlyArrayOfType(transformScalarType(type.ofType, state, objectProps));
|
27 | } else if (type instanceof require("graphql").GraphQLObjectType || type instanceof require("graphql").GraphQLUnionType || type instanceof require("graphql").GraphQLInterfaceType) {
|
28 | return objectProps;
|
29 | } else if (type instanceof require("graphql").GraphQLScalarType) {
|
30 | return transformGraphQLScalarType(type, state);
|
31 | } else if (type instanceof require("graphql").GraphQLEnumType) {
|
32 | return transformGraphQLEnumType(type, state);
|
33 | } else {
|
34 | throw new Error("Could not convert from GraphQL type ".concat(type.toString()));
|
35 | }
|
36 | }
|
37 |
|
38 | function transformGraphQLScalarType(type, state) {
|
39 | var customType = state.customScalars[type.name];
|
40 |
|
41 | switch (customType || type.name) {
|
42 | case 'ID':
|
43 | case 'String':
|
44 | return require("@babel/types").stringTypeAnnotation();
|
45 |
|
46 | case 'Float':
|
47 | case 'Int':
|
48 | return require("@babel/types").numberTypeAnnotation();
|
49 |
|
50 | case 'Boolean':
|
51 | return require("@babel/types").booleanTypeAnnotation();
|
52 |
|
53 | default:
|
54 | return customType == null ? require("@babel/types").anyTypeAnnotation() : require("@babel/types").genericTypeAnnotation(require("@babel/types").identifier(customType));
|
55 | }
|
56 | }
|
57 |
|
58 | function transformGraphQLEnumType(type, state) {
|
59 | state.usedEnums[type.name] = type;
|
60 | return require("@babel/types").genericTypeAnnotation(require("@babel/types").identifier(type.name));
|
61 | }
|
62 |
|
63 | function transformInputType(type, state) {
|
64 | if (type instanceof require("graphql").GraphQLNonNull) {
|
65 | return transformNonNullableInputType(type.ofType, state);
|
66 | } else {
|
67 | return require("@babel/types").nullableTypeAnnotation(transformNonNullableInputType(type, state));
|
68 | }
|
69 | }
|
70 |
|
71 | function transformNonNullableInputType(type, state) {
|
72 | if (type instanceof require("graphql").GraphQLList) {
|
73 | return require("./RelayFlowBabelFactories").readOnlyArrayOfType(transformInputType(type.ofType, state));
|
74 | } else if (type instanceof require("graphql").GraphQLScalarType) {
|
75 | return transformGraphQLScalarType(type, state);
|
76 | } else if (type instanceof require("graphql").GraphQLEnumType) {
|
77 | return transformGraphQLEnumType(type, state);
|
78 | } else if (type instanceof require("graphql").GraphQLInputObjectType) {
|
79 | var typeIdentifier = getInputObjectTypeIdentifier(type);
|
80 |
|
81 | if (state.generatedInputObjectTypes[typeIdentifier]) {
|
82 | return require("@babel/types").genericTypeAnnotation(require("@babel/types").identifier(typeIdentifier));
|
83 | }
|
84 |
|
85 | state.generatedInputObjectTypes[typeIdentifier] = 'pending';
|
86 | var fields = type.getFields();
|
87 | var props = Object.keys(fields).map(function (key) {
|
88 | return fields[key];
|
89 | }).map(function (field) {
|
90 | var property = require("@babel/types").objectTypeProperty(require("@babel/types").identifier(field.name), transformInputType(field.type, state));
|
91 |
|
92 | if (state.optionalInputFields.indexOf(field.name) >= 0 || !(field.type instanceof require("graphql").GraphQLNonNull)) {
|
93 | property.optional = true;
|
94 | }
|
95 |
|
96 | return property;
|
97 | });
|
98 | state.generatedInputObjectTypes[typeIdentifier] = require("./RelayFlowBabelFactories").exactObjectTypeAnnotation(props);
|
99 | return require("@babel/types").genericTypeAnnotation(require("@babel/types").identifier(typeIdentifier));
|
100 | } else {
|
101 | throw new Error("Could not convert from GraphQL type ".concat(type.toString()));
|
102 | }
|
103 | }
|
104 |
|
105 | module.exports = {
|
106 | transformInputType: transformInputType,
|
107 | transformScalarType: transformScalarType
|
108 | }; |
\ | No newline at end of file |