relay-compiler 11.0.1 → 13.0.0-rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. package/cli.js +23 -0
  2. package/index.js +21 -3
  3. package/linux-x64/relay +0 -0
  4. package/macos-arm64/relay +0 -0
  5. package/macos-x64/relay +0 -0
  6. package/package.json +2 -25
  7. package/win-x64/relay.exe +0 -0
  8. package/bin/RelayCompilerBin.js.flow +0 -169
  9. package/bin/RelayCompilerMain.js.flow +0 -515
  10. package/bin/__fixtures__/plugin-module.js.flow +0 -17
  11. package/bin/relay-compiler +0 -19007
  12. package/codegen/CodegenDirectory.js.flow +0 -375
  13. package/codegen/CodegenRunner.js.flow +0 -432
  14. package/codegen/CodegenTypes.js.flow +0 -28
  15. package/codegen/CodegenWatcher.js.flow +0 -254
  16. package/codegen/NormalizationCodeGenerator.js.flow +0 -571
  17. package/codegen/ReaderCodeGenerator.js.flow +0 -512
  18. package/codegen/RelayCodeGenerator.js.flow +0 -85
  19. package/codegen/RelayFileWriter.js.flow +0 -367
  20. package/codegen/SourceControl.js.flow +0 -58
  21. package/codegen/compileRelayArtifacts.js.flow +0 -182
  22. package/codegen/createPrintRequireModuleDependency.js.flow +0 -21
  23. package/codegen/sortObjectByKey.js.flow +0 -25
  24. package/codegen/writeRelayGeneratedFile.js.flow +0 -239
  25. package/core/ASTCache.js.flow +0 -74
  26. package/core/ASTConvert.js.flow +0 -233
  27. package/core/CompilerContext.js.flow +0 -191
  28. package/core/CompilerError.js.flow +0 -255
  29. package/core/DotGraphQLParser.js.flow +0 -39
  30. package/core/GraphQLCompilerProfiler.js.flow +0 -341
  31. package/core/GraphQLDerivedFromMetadata.js.flow +0 -36
  32. package/core/GraphQLWatchmanClient.js.flow +0 -111
  33. package/core/IR.js.flow +0 -326
  34. package/core/IRPrinter.js.flow +0 -478
  35. package/core/IRTransformer.js.flow +0 -377
  36. package/core/IRValidator.js.flow +0 -260
  37. package/core/IRVisitor.js.flow +0 -150
  38. package/core/JSModuleParser.js.flow +0 -24
  39. package/core/RelayCompilerScope.js.flow +0 -199
  40. package/core/RelayFindGraphQLTags.js.flow +0 -119
  41. package/core/RelayGraphQLEnumsGenerator.js.flow +0 -55
  42. package/core/RelayIRTransforms.js.flow +0 -138
  43. package/core/RelayParser.js.flow +0 -1734
  44. package/core/RelaySourceModuleParser.js.flow +0 -135
  45. package/core/Schema.js.flow +0 -2037
  46. package/core/SchemaUtils.js.flow +0 -120
  47. package/core/filterContextForNode.js.flow +0 -50
  48. package/core/getFieldDefinition.js.flow +0 -156
  49. package/core/getIdentifierForArgumentValue.js.flow +0 -49
  50. package/core/getIdentifierForSelection.js.flow +0 -69
  51. package/core/getLiteralArgumentValues.js.flow +0 -32
  52. package/core/getNormalizationOperationName.js.flow +0 -19
  53. package/core/inferRootArgumentDefinitions.js.flow +0 -323
  54. package/index.js.flow +0 -200
  55. package/language/RelayLanguagePluginInterface.js.flow +0 -283
  56. package/language/javascript/FindGraphQLTags.js.flow +0 -137
  57. package/language/javascript/RelayFlowBabelFactories.js.flow +0 -176
  58. package/language/javascript/RelayFlowGenerator.js.flow +0 -1100
  59. package/language/javascript/RelayFlowTypeTransformers.js.flow +0 -184
  60. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +0 -34
  61. package/language/javascript/formatGeneratedModule.js.flow +0 -65
  62. package/lib/bin/RelayCompilerBin.js +0 -143
  63. package/lib/bin/RelayCompilerMain.js +0 -486
  64. package/lib/bin/__fixtures__/plugin-module.js +0 -16
  65. package/lib/codegen/CodegenDirectory.js +0 -336
  66. package/lib/codegen/CodegenRunner.js +0 -433
  67. package/lib/codegen/CodegenTypes.js +0 -11
  68. package/lib/codegen/CodegenWatcher.js +0 -271
  69. package/lib/codegen/NormalizationCodeGenerator.js +0 -481
  70. package/lib/codegen/ReaderCodeGenerator.js +0 -472
  71. package/lib/codegen/RelayCodeGenerator.js +0 -68
  72. package/lib/codegen/RelayFileWriter.js +0 -270
  73. package/lib/codegen/SourceControl.js +0 -60
  74. package/lib/codegen/compileRelayArtifacts.js +0 -157
  75. package/lib/codegen/createPrintRequireModuleDependency.js +0 -19
  76. package/lib/codegen/sortObjectByKey.js +0 -41
  77. package/lib/codegen/writeRelayGeneratedFile.js +0 -208
  78. package/lib/core/ASTCache.js +0 -70
  79. package/lib/core/ASTConvert.js +0 -198
  80. package/lib/core/CompilerContext.js +0 -165
  81. package/lib/core/CompilerError.js +0 -251
  82. package/lib/core/DotGraphQLParser.js +0 -40
  83. package/lib/core/GraphQLCompilerProfiler.js +0 -299
  84. package/lib/core/GraphQLDerivedFromMetadata.js +0 -31
  85. package/lib/core/GraphQLWatchmanClient.js +0 -150
  86. package/lib/core/IR.js +0 -11
  87. package/lib/core/IRPrinter.js +0 -389
  88. package/lib/core/IRTransformer.js +0 -345
  89. package/lib/core/IRValidator.js +0 -226
  90. package/lib/core/IRVisitor.js +0 -45
  91. package/lib/core/JSModuleParser.js +0 -18
  92. package/lib/core/RelayCompilerScope.js +0 -149
  93. package/lib/core/RelayFindGraphQLTags.js +0 -79
  94. package/lib/core/RelayGraphQLEnumsGenerator.js +0 -50
  95. package/lib/core/RelayIRTransforms.js +0 -109
  96. package/lib/core/RelayParser.js +0 -1382
  97. package/lib/core/RelaySourceModuleParser.js +0 -104
  98. package/lib/core/Schema.js +0 -1877
  99. package/lib/core/SchemaUtils.js +0 -98
  100. package/lib/core/filterContextForNode.js +0 -49
  101. package/lib/core/getFieldDefinition.js +0 -145
  102. package/lib/core/getIdentifierForArgumentValue.js +0 -53
  103. package/lib/core/getIdentifierForSelection.js +0 -48
  104. package/lib/core/getLiteralArgumentValues.js +0 -26
  105. package/lib/core/getNormalizationOperationName.js +0 -17
  106. package/lib/core/inferRootArgumentDefinitions.js +0 -351
  107. package/lib/index.js +0 -178
  108. package/lib/language/RelayLanguagePluginInterface.js +0 -14
  109. package/lib/language/javascript/FindGraphQLTags.js +0 -126
  110. package/lib/language/javascript/RelayFlowBabelFactories.js +0 -160
  111. package/lib/language/javascript/RelayFlowGenerator.js +0 -857
  112. package/lib/language/javascript/RelayFlowTypeTransformers.js +0 -119
  113. package/lib/language/javascript/RelayLanguagePluginJavaScript.js +0 -30
  114. package/lib/language/javascript/formatGeneratedModule.js +0 -36
  115. package/lib/reporters/ConsoleReporter.js +0 -61
  116. package/lib/reporters/MultiReporter.js +0 -45
  117. package/lib/reporters/Reporter.js +0 -11
  118. package/lib/runner/Artifacts.js +0 -323
  119. package/lib/runner/BufferedFilesystem.js +0 -261
  120. package/lib/runner/GraphQLASTNodeGroup.js +0 -256
  121. package/lib/runner/GraphQLASTUtils.js +0 -23
  122. package/lib/runner/GraphQLNodeMap.js +0 -81
  123. package/lib/runner/Sources.js +0 -271
  124. package/lib/runner/StrictMap.js +0 -134
  125. package/lib/runner/compileArtifacts.js +0 -39
  126. package/lib/runner/extractAST.js +0 -77
  127. package/lib/runner/getChangedNodeNames.js +0 -82
  128. package/lib/runner/getSchemaInstance.js +0 -30
  129. package/lib/runner/types.js +0 -12
  130. package/lib/transforms/ApplyFragmentArgumentTransform.js +0 -393
  131. package/lib/transforms/ClientExtensionsTransform.js +0 -221
  132. package/lib/transforms/ConnectionTransform.js +0 -639
  133. package/lib/transforms/DeclarativeConnectionMutationTransform.js +0 -218
  134. package/lib/transforms/DeferStreamTransform.js +0 -246
  135. package/lib/transforms/DisallowIdAsAlias.js +0 -40
  136. package/lib/transforms/DisallowTypenameOnRoot.js +0 -53
  137. package/lib/transforms/FieldHandleTransform.js +0 -79
  138. package/lib/transforms/FilterCompilerDirectivesTransform.js +0 -29
  139. package/lib/transforms/FilterDirectivesTransform.js +0 -41
  140. package/lib/transforms/FlattenTransform.js +0 -306
  141. package/lib/transforms/GenerateIDFieldTransform.js +0 -135
  142. package/lib/transforms/GenerateTypeNameTransform.js +0 -149
  143. package/lib/transforms/InlineDataFragmentTransform.js +0 -100
  144. package/lib/transforms/InlineFragmentsTransform.js +0 -61
  145. package/lib/transforms/MaskTransform.js +0 -117
  146. package/lib/transforms/MatchTransform.js +0 -434
  147. package/lib/transforms/ReactFlightComponentTransform.js +0 -158
  148. package/lib/transforms/RefetchableFragmentTransform.js +0 -249
  149. package/lib/transforms/RelayDirectiveTransform.js +0 -83
  150. package/lib/transforms/RequiredFieldTransform.js +0 -369
  151. package/lib/transforms/SkipClientExtensionsTransform.js +0 -46
  152. package/lib/transforms/SkipHandleFieldTransform.js +0 -44
  153. package/lib/transforms/SkipRedundantNodesTransform.js +0 -254
  154. package/lib/transforms/SkipSplitOperationTransform.js +0 -32
  155. package/lib/transforms/SkipUnreachableNodeTransform.js +0 -158
  156. package/lib/transforms/SkipUnusedVariablesTransform.js +0 -74
  157. package/lib/transforms/SplitModuleImportTransform.js +0 -82
  158. package/lib/transforms/TestOperationTransform.js +0 -144
  159. package/lib/transforms/TransformUtils.js +0 -21
  160. package/lib/transforms/ValidateGlobalVariablesTransform.js +0 -91
  161. package/lib/transforms/ValidateRequiredArgumentsTransform.js +0 -114
  162. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +0 -108
  163. package/lib/transforms/ValidateUnusedVariablesTransform.js +0 -96
  164. package/lib/transforms/query-generators/FetchableQueryGenerator.js +0 -157
  165. package/lib/transforms/query-generators/NodeQueryGenerator.js +0 -166
  166. package/lib/transforms/query-generators/QueryQueryGenerator.js +0 -48
  167. package/lib/transforms/query-generators/ViewerQueryGenerator.js +0 -77
  168. package/lib/transforms/query-generators/index.js +0 -60
  169. package/lib/transforms/query-generators/utils.js +0 -92
  170. package/lib/util/CodeMarker.js +0 -80
  171. package/lib/util/DefaultHandleKey.js +0 -15
  172. package/lib/util/RelayCompilerCache.js +0 -98
  173. package/lib/util/Rollout.js +0 -40
  174. package/lib/util/TimeReporter.js +0 -83
  175. package/lib/util/areEqualOSS.js +0 -133
  176. package/lib/util/argumentContainsVariables.js +0 -37
  177. package/lib/util/dedupeJSONStringify.js +0 -160
  178. package/lib/util/generateAbstractTypeRefinementKey.js +0 -24
  179. package/lib/util/getDefinitionNodeHash.js +0 -22
  180. package/lib/util/getModuleName.js +0 -32
  181. package/lib/util/joinArgumentDefinitions.js +0 -66
  182. package/lib/util/md5.js +0 -17
  183. package/lib/util/murmurHash.js +0 -86
  184. package/lib/util/nullthrowsOSS.js +0 -23
  185. package/lib/util/orList.js +0 -36
  186. package/lib/util/partitionArray.js +0 -35
  187. package/relay-compiler.js +0 -17
  188. package/relay-compiler.min.js +0 -22
  189. package/reporters/ConsoleReporter.js.flow +0 -81
  190. package/reporters/MultiReporter.js.flow +0 -43
  191. package/reporters/Reporter.js.flow +0 -19
  192. package/runner/Artifacts.js.flow +0 -219
  193. package/runner/BufferedFilesystem.js.flow +0 -194
  194. package/runner/GraphQLASTNodeGroup.js.flow +0 -176
  195. package/runner/GraphQLASTUtils.js.flow +0 -26
  196. package/runner/GraphQLNodeMap.js.flow +0 -55
  197. package/runner/Sources.js.flow +0 -228
  198. package/runner/StrictMap.js.flow +0 -96
  199. package/runner/compileArtifacts.js.flow +0 -76
  200. package/runner/extractAST.js.flow +0 -100
  201. package/runner/getChangedNodeNames.js.flow +0 -48
  202. package/runner/getSchemaInstance.js.flow +0 -36
  203. package/runner/types.js.flow +0 -37
  204. package/transforms/ApplyFragmentArgumentTransform.js.flow +0 -526
  205. package/transforms/ClientExtensionsTransform.js.flow +0 -225
  206. package/transforms/ConnectionTransform.js.flow +0 -855
  207. package/transforms/DeclarativeConnectionMutationTransform.js.flow +0 -247
  208. package/transforms/DeferStreamTransform.js.flow +0 -265
  209. package/transforms/DisallowIdAsAlias.js.flow +0 -47
  210. package/transforms/DisallowTypenameOnRoot.js.flow +0 -45
  211. package/transforms/FieldHandleTransform.js.flow +0 -79
  212. package/transforms/FilterCompilerDirectivesTransform.js.flow +0 -33
  213. package/transforms/FilterDirectivesTransform.js.flow +0 -45
  214. package/transforms/FlattenTransform.js.flow +0 -457
  215. package/transforms/GenerateIDFieldTransform.js.flow +0 -152
  216. package/transforms/GenerateTypeNameTransform.js.flow +0 -161
  217. package/transforms/InlineDataFragmentTransform.js.flow +0 -125
  218. package/transforms/InlineFragmentsTransform.js.flow +0 -71
  219. package/transforms/MaskTransform.js.flow +0 -126
  220. package/transforms/MatchTransform.js.flow +0 -589
  221. package/transforms/ReactFlightComponentTransform.js.flow +0 -195
  222. package/transforms/RefetchableFragmentTransform.js.flow +0 -272
  223. package/transforms/RelayDirectiveTransform.js.flow +0 -97
  224. package/transforms/RequiredFieldTransform.js.flow +0 -415
  225. package/transforms/SkipClientExtensionsTransform.js.flow +0 -54
  226. package/transforms/SkipHandleFieldTransform.js.flow +0 -44
  227. package/transforms/SkipRedundantNodesTransform.js.flow +0 -258
  228. package/transforms/SkipSplitOperationTransform.js.flow +0 -37
  229. package/transforms/SkipUnreachableNodeTransform.js.flow +0 -149
  230. package/transforms/SkipUnusedVariablesTransform.js.flow +0 -59
  231. package/transforms/SplitModuleImportTransform.js.flow +0 -98
  232. package/transforms/TestOperationTransform.js.flow +0 -142
  233. package/transforms/TransformUtils.js.flow +0 -26
  234. package/transforms/ValidateGlobalVariablesTransform.js.flow +0 -81
  235. package/transforms/ValidateRequiredArgumentsTransform.js.flow +0 -127
  236. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +0 -112
  237. package/transforms/ValidateUnusedVariablesTransform.js.flow +0 -89
  238. package/transforms/query-generators/FetchableQueryGenerator.js.flow +0 -189
  239. package/transforms/query-generators/NodeQueryGenerator.js.flow +0 -219
  240. package/transforms/query-generators/QueryQueryGenerator.js.flow +0 -57
  241. package/transforms/query-generators/ViewerQueryGenerator.js.flow +0 -97
  242. package/transforms/query-generators/index.js.flow +0 -90
  243. package/transforms/query-generators/utils.js.flow +0 -76
  244. package/util/CodeMarker.js.flow +0 -79
  245. package/util/DefaultHandleKey.js.flow +0 -17
  246. package/util/RelayCompilerCache.js.flow +0 -88
  247. package/util/Rollout.js.flow +0 -39
  248. package/util/TimeReporter.js.flow +0 -79
  249. package/util/areEqualOSS.js.flow +0 -123
  250. package/util/argumentContainsVariables.js.flow +0 -38
  251. package/util/dedupeJSONStringify.js.flow +0 -152
  252. package/util/generateAbstractTypeRefinementKey.js.flow +0 -29
  253. package/util/getDefinitionNodeHash.js.flow +0 -25
  254. package/util/getModuleName.js.flow +0 -39
  255. package/util/joinArgumentDefinitions.js.flow +0 -105
  256. package/util/md5.js.flow +0 -22
  257. package/util/murmurHash.js.flow +0 -94
  258. package/util/nullthrowsOSS.js.flow +0 -25
  259. package/util/orList.js.flow +0 -37
  260. package/util/partitionArray.js.flow +0 -37
@@ -1,857 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- *
8
- * @format
9
- */
10
- // flowlint ambiguous-object-type:error
11
- 'use strict';
12
-
13
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
-
15
- var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
16
-
17
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
18
-
19
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
20
-
21
- var FlattenTransform = require('../../transforms/FlattenTransform');
22
-
23
- var IRVisitor = require('../../core/IRVisitor');
24
-
25
- var MaskTransform = require('../../transforms/MaskTransform');
26
-
27
- var MatchTransform = require('../../transforms/MatchTransform');
28
-
29
- var Profiler = require('../../core/GraphQLCompilerProfiler');
30
-
31
- var RefetchableFragmentTransform = require('../../transforms/RefetchableFragmentTransform');
32
-
33
- var RelayDirectiveTransform = require('../../transforms/RelayDirectiveTransform');
34
-
35
- var RequiredFieldTransform = require('../../transforms/RequiredFieldTransform');
36
-
37
- var generateAbstractTypeRefinementKey = require('../../util/generateAbstractTypeRefinementKey');
38
-
39
- var partitionArray = require('../../util/partitionArray');
40
-
41
- var _require = require('./RelayFlowBabelFactories'),
42
- anyTypeAlias = _require.anyTypeAlias,
43
- declareExportOpaqueType = _require.declareExportOpaqueType,
44
- exactObjectTypeAnnotation = _require.exactObjectTypeAnnotation,
45
- exportType = _require.exportType,
46
- exportTypes = _require.exportTypes,
47
- importTypes = _require.importTypes,
48
- inexactObjectTypeAnnotation = _require.inexactObjectTypeAnnotation,
49
- intersectionTypeAnnotation = _require.intersectionTypeAnnotation,
50
- lineComments = _require.lineComments,
51
- readOnlyArrayOfType = _require.readOnlyArrayOfType,
52
- readOnlyObjectTypeProperty = _require.readOnlyObjectTypeProperty,
53
- unionTypeAnnotation = _require.unionTypeAnnotation;
54
-
55
- var _require2 = require('./RelayFlowTypeTransformers'),
56
- transformInputType = _require2.transformInputType,
57
- transformScalarType = _require2.transformScalarType;
58
-
59
- var babelGenerator = require('@babel/generator')["default"];
60
-
61
- var t = require('@babel/types');
62
-
63
- var invariant = require("fbjs/lib/invariant");
64
-
65
- var nullthrows = require('nullthrows');
66
-
67
- function generate(schema, node, options) {
68
- var ast = IRVisitor.visit(node, createVisitor(schema, options));
69
- return babelGenerator(ast).code;
70
- }
71
-
72
- function makeProp(schema, _ref, state, unmasked, concreteType) {
73
- var key = _ref.key,
74
- schemaName = _ref.schemaName,
75
- value = _ref.value,
76
- conditional = _ref.conditional,
77
- nodeType = _ref.nodeType,
78
- nodeSelections = _ref.nodeSelections;
79
-
80
- if (schemaName === '__typename' && concreteType) {
81
- value = t.stringLiteralTypeAnnotation(concreteType);
82
- } else if (nodeType) {
83
- value = transformScalarType(schema, nodeType, state, selectionsToBabel(schema, [Array.from(nullthrows(nodeSelections).values())], state, unmasked));
84
- }
85
-
86
- var typeProperty = readOnlyObjectTypeProperty(key, value);
87
-
88
- if (conditional) {
89
- typeProperty.optional = true;
90
- }
91
-
92
- return typeProperty;
93
- }
94
-
95
- var isTypenameSelection = function isTypenameSelection(selection) {
96
- return selection.schemaName === '__typename';
97
- };
98
-
99
- var hasTypenameSelection = function hasTypenameSelection(selections) {
100
- return selections.some(isTypenameSelection);
101
- };
102
-
103
- var onlySelectsTypename = function onlySelectsTypename(selections) {
104
- return selections.every(isTypenameSelection);
105
- };
106
-
107
- function selectionsToBabel(schema, selections, state, unmasked, fragmentTypeName) {
108
- var baseFields = new Map();
109
- var byConcreteType = {};
110
- flattenArray(selections).forEach(function (selection) {
111
- var concreteType = selection.concreteType;
112
-
113
- if (concreteType) {
114
- var _byConcreteType$concr;
115
-
116
- byConcreteType[concreteType] = (_byConcreteType$concr = byConcreteType[concreteType]) !== null && _byConcreteType$concr !== void 0 ? _byConcreteType$concr : [];
117
- byConcreteType[concreteType].push(selection);
118
- } else {
119
- var previousSel = baseFields.get(selection.key);
120
- baseFields.set(selection.key, previousSel ? mergeSelection(selection, previousSel) : selection);
121
- }
122
- });
123
- var types = [];
124
-
125
- if (Object.keys(byConcreteType).length > 0 && onlySelectsTypename(Array.from(baseFields.values())) && (hasTypenameSelection(Array.from(baseFields.values())) || Object.keys(byConcreteType).every(function (type) {
126
- return hasTypenameSelection(byConcreteType[type]);
127
- }))) {
128
- (function () {
129
- var typenameAliases = new Set();
130
-
131
- var _loop = function _loop(concreteType) {
132
- types.push(groupRefs([].concat((0, _toConsumableArray2["default"])(Array.from(baseFields.values())), (0, _toConsumableArray2["default"])(byConcreteType[concreteType]))).map(function (selection) {
133
- if (selection.schemaName === '__typename') {
134
- typenameAliases.add(selection.key);
135
- }
136
-
137
- return makeProp(schema, selection, state, unmasked, concreteType);
138
- }));
139
- };
140
-
141
- for (var concreteType in byConcreteType) {
142
- _loop(concreteType);
143
- } // It might be some other type then the listed concrete types. Ideally, we
144
- // would set the type to diff(string, set of listed concrete types), but
145
- // this doesn't exist in Flow at the time.
146
-
147
-
148
- types.push(Array.from(typenameAliases).map(function (typenameAlias) {
149
- var otherProp = readOnlyObjectTypeProperty(typenameAlias, t.stringLiteralTypeAnnotation('%other'));
150
- otherProp.leadingComments = lineComments("This will never be '%other', but we need some", 'value in case none of the concrete values match.');
151
- return otherProp;
152
- }));
153
- })();
154
- } else {
155
- var selectionMap = selectionsToMap(Array.from(baseFields.values()));
156
-
157
- for (var concreteType in byConcreteType) {
158
- selectionMap = mergeSelections(selectionMap, selectionsToMap(byConcreteType[concreteType].map(function (sel) {
159
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, sel), {}, {
160
- conditional: true
161
- });
162
- })));
163
- }
164
-
165
- var selectionMapValues = groupRefs(Array.from(selectionMap.values())).map(function (sel) {
166
- return isTypenameSelection(sel) && sel.concreteType ? makeProp(schema, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, sel), {}, {
167
- conditional: false
168
- }), state, unmasked, sel.concreteType) : makeProp(schema, sel, state, unmasked);
169
- });
170
- types.push(selectionMapValues);
171
- }
172
-
173
- return unionTypeAnnotation(types.map(function (props) {
174
- if (fragmentTypeName) {
175
- props.push(readOnlyObjectTypeProperty('$refType', t.genericTypeAnnotation(t.identifier(fragmentTypeName))));
176
- }
177
-
178
- return unmasked ? inexactObjectTypeAnnotation(props) : exactObjectTypeAnnotation(props);
179
- }));
180
- }
181
-
182
- function mergeSelection(a, b) {
183
- var shouldSetConditional = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
184
-
185
- if (!a) {
186
- if (shouldSetConditional) {
187
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, b), {}, {
188
- conditional: true
189
- });
190
- }
191
-
192
- return b;
193
- }
194
-
195
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, a), {}, {
196
- nodeSelections: a.nodeSelections ? mergeSelections(a.nodeSelections, nullthrows(b.nodeSelections), shouldSetConditional) : null,
197
- conditional: a.conditional && b.conditional
198
- });
199
- }
200
-
201
- function mergeSelections(a, b) {
202
- var shouldSetConditional = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
203
- var merged = new Map();
204
-
205
- var _iterator = (0, _createForOfIteratorHelper2["default"])(a.entries()),
206
- _step;
207
-
208
- try {
209
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
210
- var _step$value = _step.value,
211
- key = _step$value[0],
212
- value = _step$value[1];
213
- merged.set(key, value);
214
- }
215
- } catch (err) {
216
- _iterator.e(err);
217
- } finally {
218
- _iterator.f();
219
- }
220
-
221
- var _iterator2 = (0, _createForOfIteratorHelper2["default"])(b.entries()),
222
- _step2;
223
-
224
- try {
225
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
226
- var _step2$value = _step2.value,
227
- _key = _step2$value[0],
228
- _value = _step2$value[1];
229
- merged.set(_key, mergeSelection(a.get(_key), _value, shouldSetConditional));
230
- }
231
- } catch (err) {
232
- _iterator2.e(err);
233
- } finally {
234
- _iterator2.f();
235
- }
236
-
237
- return merged;
238
- }
239
-
240
- function isPlural(node) {
241
- return Boolean(node.metadata && node.metadata.plural);
242
- }
243
-
244
- function createVisitor(schema, options) {
245
- var state = {
246
- customScalars: options.customScalars,
247
- enumsHasteModule: options.enumsHasteModule,
248
- generatedFragments: new Set(),
249
- generatedInputObjectTypes: {},
250
- optionalInputFields: options.optionalInputFields,
251
- usedEnums: {},
252
- usedFragments: new Set(),
253
- useHaste: options.useHaste,
254
- useSingleArtifactDirectory: options.useSingleArtifactDirectory,
255
- noFutureProofEnums: options.noFutureProofEnums,
256
- matchFields: new Map(),
257
- runtimeImports: new Set()
258
- };
259
- return {
260
- leave: {
261
- Root: function Root(node) {
262
- var _node$metadata;
263
-
264
- var inputVariablesType = generateInputVariablesType(schema, node, state);
265
- var inputObjectTypes = generateInputObjectTypes(state);
266
- var responseTypeDefinition = selectionsToBabel(schema,
267
- /* $FlowFixMe: selections have already been transformed */
268
- node.selections, state, false);
269
-
270
- if (((_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.childrenCanBubbleNull) === true) {
271
- responseTypeDefinition = t.nullableTypeAnnotation(responseTypeDefinition);
272
- }
273
-
274
- var responseType = exportType("".concat(node.name, "Response"), responseTypeDefinition);
275
- var operationTypes = [t.objectTypeProperty(t.identifier('variables'), t.genericTypeAnnotation(t.identifier("".concat(node.name, "Variables")))), t.objectTypeProperty(t.identifier('response'), t.genericTypeAnnotation(t.identifier("".concat(node.name, "Response"))))]; // Generate raw response type
276
-
277
- var rawResponseType;
278
- var normalizationIR = options.normalizationIR;
279
-
280
- if (normalizationIR && node.directives.some(function (d) {
281
- return d.name === DIRECTIVE_NAME;
282
- })) {
283
- rawResponseType = IRVisitor.visit(normalizationIR, createRawResponseTypeVisitor(schema, state));
284
- }
285
-
286
- var refetchableFragmentName = getRefetchableQueryParentFragmentName(state, node.metadata);
287
-
288
- if (refetchableFragmentName != null) {
289
- state.runtimeImports.add('FragmentReference');
290
- }
291
-
292
- var babelNodes = [];
293
-
294
- if (state.runtimeImports.size) {
295
- babelNodes.push(importTypes(Array.from(state.runtimeImports).sort(), 'relay-runtime'));
296
- }
297
-
298
- babelNodes.push.apply(babelNodes, (0, _toConsumableArray2["default"])(refetchableFragmentName ? generateFragmentRefsForRefetchable(refetchableFragmentName) : getFragmentImports(state)).concat((0, _toConsumableArray2["default"])(getEnumDefinitions(schema, state)), (0, _toConsumableArray2["default"])(inputObjectTypes), [inputVariablesType, responseType]));
299
-
300
- if (rawResponseType) {
301
- var _iterator3 = (0, _createForOfIteratorHelper2["default"])(state.matchFields),
302
- _step3;
303
-
304
- try {
305
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
306
- var _step3$value = _step3.value,
307
- key = _step3$value[0],
308
- ast = _step3$value[1];
309
- babelNodes.push(exportType(key, ast));
310
- }
311
- } catch (err) {
312
- _iterator3.e(err);
313
- } finally {
314
- _iterator3.f();
315
- }
316
-
317
- operationTypes.push(t.objectTypeProperty(t.identifier('rawResponse'), t.genericTypeAnnotation(t.identifier("".concat(node.name, "RawResponse")))));
318
- babelNodes.push(rawResponseType);
319
- }
320
-
321
- babelNodes.push(exportType(node.name, exactObjectTypeAnnotation(operationTypes))); // $FlowFixMe[incompatible-call]
322
-
323
- return t.program(babelNodes);
324
- },
325
- Fragment: function Fragment(node) {
326
- var _node$metadata2;
327
-
328
- var selections = flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
329
- node.selections);
330
- var numConecreteSelections = selections.filter(function (s) {
331
- return s.concreteType;
332
- }).length;
333
- selections = selections.map(function (selection) {
334
- if (numConecreteSelections <= 1 && isTypenameSelection(selection) && !schema.isAbstractType(node.type)) {
335
- return [(0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, selection), {}, {
336
- concreteType: schema.getTypeString(node.type)
337
- })];
338
- }
339
-
340
- return [selection];
341
- });
342
- state.generatedFragments.add(node.name);
343
- var fragmentTypes = getFragmentTypes(node.name, getRefetchableQueryPath(state, node.directives));
344
- var refTypeName = getRefTypeName(node.name);
345
- var refTypeDataProperty = readOnlyObjectTypeProperty('$data', t.genericTypeAnnotation(t.identifier("".concat(node.name, "$data"))));
346
- refTypeDataProperty.optional = true;
347
- var refTypeFragmentRefProperty = readOnlyObjectTypeProperty('$fragmentRefs', t.genericTypeAnnotation(t.identifier(getOldFragmentTypeName(node.name))));
348
- var isPluralFragment = isPlural(node);
349
- var refType = inexactObjectTypeAnnotation([refTypeDataProperty, refTypeFragmentRefProperty]);
350
- var dataTypeName = getDataTypeName(node.name);
351
- var dataType = t.genericTypeAnnotation(t.identifier(node.name));
352
- var unmasked = node.metadata != null && node.metadata.mask === false;
353
- var baseType = selectionsToBabel(schema, selections, state, unmasked, unmasked ? undefined : getOldFragmentTypeName(node.name));
354
- var type = isPluralFragment ? readOnlyArrayOfType(baseType) : baseType;
355
-
356
- if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.childrenCanBubbleNull) === true) {
357
- type = t.nullableTypeAnnotation(type);
358
- }
359
-
360
- state.runtimeImports.add('FragmentReference');
361
- return t.program([].concat((0, _toConsumableArray2["default"])(getFragmentImports(state)), (0, _toConsumableArray2["default"])(getEnumDefinitions(schema, state)), [importTypes(Array.from(state.runtimeImports).sort(), 'relay-runtime')], (0, _toConsumableArray2["default"])(fragmentTypes), [exportType(node.name, type), exportType(dataTypeName, dataType), exportType(refTypeName, isPluralFragment ? readOnlyArrayOfType(refType) : refType)]));
362
- },
363
- InlineFragment: function InlineFragment(node) {
364
- return flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
365
- node.selections).map(function (typeSelection) {
366
- return schema.isAbstractType(node.typeCondition) ? (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, typeSelection), {}, {
367
- conditional: true
368
- }) : (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, typeSelection), {}, {
369
- concreteType: schema.getTypeString(node.typeCondition)
370
- });
371
- });
372
- },
373
- Condition: function Condition(node) {
374
- return flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
375
- node.selections).map(function (selection) {
376
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, selection), {}, {
377
- conditional: true
378
- });
379
- });
380
- },
381
- ScalarField: function ScalarField(node) {
382
- return visitScalarField(schema, node, state);
383
- },
384
- LinkedField: function LinkedField(node) {
385
- return visitLinkedField(schema, node);
386
- },
387
- ModuleImport: function ModuleImport(node) {
388
- return [{
389
- key: '__fragmentPropName',
390
- conditional: true,
391
- value: transformScalarType(schema, schema.expectStringType(), state)
392
- }, {
393
- key: '__module_component',
394
- conditional: true,
395
- value: transformScalarType(schema, schema.expectStringType(), state)
396
- }, {
397
- key: '__fragments_' + node.name,
398
- ref: node.name
399
- }];
400
- },
401
- FragmentSpread: function FragmentSpread(node) {
402
- state.usedFragments.add(node.name);
403
- return [{
404
- key: '__fragments_' + node.name,
405
- ref: node.name
406
- }];
407
- }
408
- }
409
- };
410
- }
411
-
412
- function visitNodeWithSelectionsOnly(node) {
413
- return flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
414
- node.selections);
415
- }
416
-
417
- function visitScalarField(schema, node, state) {
418
- var _node$metadata3;
419
-
420
- var requiredMetadata = (_node$metadata3 = node.metadata) === null || _node$metadata3 === void 0 ? void 0 : _node$metadata3.required;
421
- var nodeType = requiredMetadata != null ? schema.getNonNullType(node.type) : node.type;
422
- return [{
423
- key: node.alias,
424
- schemaName: node.name,
425
- value: transformScalarType(schema, nodeType, state)
426
- }];
427
- }
428
-
429
- function getLinkedFieldNodeType(schema, node) {
430
- var _node$metadata4, _node$metadata5;
431
-
432
- var requiredMetadata = (_node$metadata4 = node.metadata) === null || _node$metadata4 === void 0 ? void 0 : _node$metadata4.required;
433
-
434
- if (requiredMetadata != null) {
435
- return schema.getNonNullType(node.type);
436
- }
437
-
438
- if (((_node$metadata5 = node.metadata) === null || _node$metadata5 === void 0 ? void 0 : _node$metadata5.childrenCanBubbleNull) === true) {
439
- if (schema.isList(node.type)) {
440
- // In a plural field, nulls bubble up to the item, resulting in a list of nullable items.
441
- return schema.mapListItemType(node.type, function (inner) {
442
- return schema.getNullableType(inner);
443
- });
444
- } else if (schema.isNonNull(node.type)) {
445
- var nullable = schema.getNullableType(node.type);
446
-
447
- if (schema.isList(nullable)) {
448
- return schema.getNonNullType(schema.mapListItemType(nullable, function (inner) {
449
- return schema.getNullableType(inner);
450
- }));
451
- }
452
-
453
- return nullable;
454
- }
455
-
456
- return node.type;
457
- }
458
-
459
- return node.type;
460
- }
461
-
462
- function visitLinkedField(schema, node) {
463
- return [{
464
- key: node.alias,
465
- schemaName: node.name,
466
- nodeType: getLinkedFieldNodeType(schema, node),
467
- nodeSelections: selectionsToMap(flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
468
- node.selections),
469
- /*
470
- * append concreteType to key so overlapping fields with different
471
- * concreteTypes don't get overwritten by each other
472
- */
473
- true)
474
- }];
475
- }
476
-
477
- function makeRawResponseProp(schema, _ref2, state, concreteType) {
478
- var key = _ref2.key,
479
- schemaName = _ref2.schemaName,
480
- value = _ref2.value,
481
- conditional = _ref2.conditional,
482
- nodeType = _ref2.nodeType,
483
- nodeSelections = _ref2.nodeSelections,
484
- kind = _ref2.kind;
485
-
486
- if (kind === 'ModuleImport') {
487
- return t.objectTypeSpreadProperty(t.genericTypeAnnotation(t.identifier(key)));
488
- }
489
-
490
- if (schemaName === '__typename' && concreteType) {
491
- value = t.stringLiteralTypeAnnotation(concreteType);
492
- } else if (nodeType) {
493
- value = transformScalarType(schema, nodeType, state, selectionsToRawResponseBabel(schema, [Array.from(nullthrows(nodeSelections).values())], state, schema.isAbstractType(nodeType) || schema.isWrapper(nodeType) ? null : schema.getTypeString(nodeType)));
494
- }
495
-
496
- var typeProperty = readOnlyObjectTypeProperty(key, value);
497
-
498
- if (conditional) {
499
- typeProperty.optional = true;
500
- }
501
-
502
- return typeProperty;
503
- } // Trasform the codegen IR selections into Babel flow types
504
-
505
-
506
- function selectionsToRawResponseBabel(schema, selections, state, nodeTypeName) {
507
- var baseFields = [];
508
- var byConcreteType = {};
509
- flattenArray(selections).forEach(function (selection) {
510
- var concreteType = selection.concreteType;
511
-
512
- if (concreteType) {
513
- var _byConcreteType$concr2;
514
-
515
- byConcreteType[concreteType] = (_byConcreteType$concr2 = byConcreteType[concreteType]) !== null && _byConcreteType$concr2 !== void 0 ? _byConcreteType$concr2 : [];
516
- byConcreteType[concreteType].push(selection);
517
- } else {
518
- baseFields.push(selection);
519
- }
520
- });
521
- var types = [];
522
-
523
- if (Object.keys(byConcreteType).length) {
524
- var baseFieldsMap = selectionsToMap(baseFields);
525
-
526
- var _loop2 = function _loop2(concreteType) {
527
- var mergedSeletions = Array.from(mergeSelections(baseFieldsMap, selectionsToMap(byConcreteType[concreteType]), false).values());
528
- types.push(exactObjectTypeAnnotation(mergedSeletions.map(function (selection) {
529
- return makeRawResponseProp(schema, selection, state, concreteType);
530
- })));
531
- appendLocal3DPayload(types, mergedSeletions, schema, state, concreteType);
532
- };
533
-
534
- for (var concreteType in byConcreteType) {
535
- _loop2(concreteType);
536
- }
537
- }
538
-
539
- if (baseFields.length > 0) {
540
- types.push(exactObjectTypeAnnotation(baseFields.map(function (selection) {
541
- return makeRawResponseProp(schema, selection, state, nodeTypeName);
542
- })));
543
- appendLocal3DPayload(types, baseFields, schema, state, nodeTypeName);
544
- }
545
-
546
- return unionTypeAnnotation(types);
547
- }
548
-
549
- function appendLocal3DPayload(types, selections, schema, state, currentType) {
550
- var moduleImport = selections.find(function (sel) {
551
- return sel.kind === 'ModuleImport';
552
- });
553
-
554
- if (moduleImport) {
555
- // Generate an extra opaque type for client 3D fields
556
- state.runtimeImports.add('Local3DPayload');
557
- types.push(t.genericTypeAnnotation(t.identifier('Local3DPayload'), t.typeParameterInstantiation([t.stringLiteralTypeAnnotation(nullthrows(moduleImport.documentName)), exactObjectTypeAnnotation(selections.filter(function (sel) {
558
- return sel.schemaName !== 'js';
559
- }).map(function (selection) {
560
- return makeRawResponseProp(schema, selection, state, currentType);
561
- }))])));
562
- }
563
- } // Visitor for generating raw response type
564
-
565
-
566
- function createRawResponseTypeVisitor(schema, state) {
567
- return {
568
- leave: {
569
- Root: function Root(node) {
570
- return exportType("".concat(node.name, "RawResponse"), selectionsToRawResponseBabel(schema, // $FlowFixMe[incompatible-cast] : selections have already been transformed
571
- node.selections, state, null));
572
- },
573
- InlineFragment: function InlineFragment(node) {
574
- var typeCondition = node.typeCondition;
575
- return flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
576
- node.selections).map(function (typeSelection) {
577
- return schema.isAbstractType(typeCondition) ? typeSelection : (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, typeSelection), {}, {
578
- concreteType: schema.getTypeString(typeCondition)
579
- });
580
- });
581
- },
582
- ScalarField: function ScalarField(node) {
583
- return visitScalarField(schema, node, state);
584
- },
585
- ClientExtension: function ClientExtension(node) {
586
- return flattenArray( // $FlowFixMe[incompatible-cast] : selections have already been transformed
587
- node.selections).map(function (sel) {
588
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, sel), {}, {
589
- conditional: true
590
- });
591
- });
592
- },
593
- LinkedField: function LinkedField(node) {
594
- return visitLinkedField(schema, node);
595
- },
596
- Condition: visitNodeWithSelectionsOnly,
597
- Defer: visitNodeWithSelectionsOnly,
598
- Stream: visitNodeWithSelectionsOnly,
599
- ModuleImport: function ModuleImport(node) {
600
- return visitRawResposneModuleImport(schema, node, state);
601
- },
602
- FragmentSpread: function FragmentSpread(node) {
603
- !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'A fragment spread is found when traversing the AST, ' + 'make sure you are passing the codegen IR') : invariant(false) : void 0;
604
- }
605
- }
606
- };
607
- } // Dedupe the generated type of module selections to reduce file size
608
-
609
-
610
- function visitRawResposneModuleImport(schema, node, state) {
611
- var selections = node.selections,
612
- key = node.name;
613
- var moduleSelections = selections.filter( // $FlowFixMe[prop-missing] selections have already been transformed
614
- function (sel) {
615
- return sel.length && sel[0].schemaName === 'js';
616
- }).map(function (arr) {
617
- return arr[0];
618
- });
619
-
620
- if (!state.matchFields.has(key)) {
621
- var ast = selectionsToRawResponseBabel(schema, // $FlowFixMe[incompatible-cast] : selections have already been transformed
622
- node.selections.filter(function (sel) {
623
- return sel.length > 1 || sel[0].schemaName !== 'js';
624
- }), state, null);
625
- state.matchFields.set(key, ast);
626
- }
627
-
628
- return [].concat((0, _toConsumableArray2["default"])(moduleSelections), [{
629
- key: key,
630
- kind: 'ModuleImport',
631
- documentName: node.key
632
- }]);
633
- }
634
-
635
- function selectionsToMap(selections, appendType) {
636
- var map = new Map();
637
- selections.forEach(function (selection) {
638
- var key = appendType && selection.concreteType ? "".concat(selection.key, "::").concat(selection.concreteType) : selection.key;
639
- var previousSel = map.get(key);
640
- map.set(key, previousSel ? mergeSelection(previousSel, selection) : selection);
641
- });
642
- return map;
643
- }
644
-
645
- function flattenArray(arrayOfArrays) {
646
- var result = [];
647
- arrayOfArrays.forEach(function (array) {
648
- result.push.apply(result, (0, _toConsumableArray2["default"])(array));
649
- });
650
- return result;
651
- }
652
-
653
- function generateInputObjectTypes(state) {
654
- return Object.keys(state.generatedInputObjectTypes).map(function (typeIdentifier) {
655
- var inputObjectType = state.generatedInputObjectTypes[typeIdentifier];
656
- !(typeof inputObjectType !== 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayCompilerFlowGenerator: Expected input object type to have been' + ' defined before calling `generateInputObjectTypes`') : invariant(false) : void 0;
657
- return exportType(typeIdentifier, inputObjectType);
658
- });
659
- }
660
-
661
- function generateInputVariablesType(schema, node, state) {
662
- return exportType("".concat(node.name, "Variables"), exactObjectTypeAnnotation(node.argumentDefinitions.map(function (arg) {
663
- var property = t.objectTypeProperty(t.identifier(arg.name), transformInputType(schema, arg.type, state));
664
-
665
- if (!schema.isNonNull(arg.type)) {
666
- property.optional = true;
667
- }
668
-
669
- return property;
670
- })));
671
- }
672
-
673
- function groupRefs(props) {
674
- var result = [];
675
- var refs = [];
676
- props.forEach(function (prop) {
677
- if (prop.ref) {
678
- refs.push(prop.ref);
679
- } else {
680
- result.push(prop);
681
- }
682
- });
683
-
684
- if (refs.length > 0) {
685
- var value = intersectionTypeAnnotation(refs.map(function (ref) {
686
- return t.genericTypeAnnotation(t.identifier(getOldFragmentTypeName(ref)));
687
- }));
688
- result.push({
689
- key: '$fragmentRefs',
690
- conditional: false,
691
- value: value
692
- });
693
- }
694
-
695
- return result;
696
- }
697
-
698
- function getFragmentImports(state) {
699
- var imports = [];
700
-
701
- if (state.usedFragments.size > 0) {
702
- var usedFragments = Array.from(state.usedFragments).sort();
703
-
704
- var _iterator4 = (0, _createForOfIteratorHelper2["default"])(usedFragments),
705
- _step4;
706
-
707
- try {
708
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
709
- var usedFragment = _step4.value;
710
- var fragmentTypeName = getOldFragmentTypeName(usedFragment);
711
-
712
- if (!state.generatedFragments.has(usedFragment)) {
713
- if (state.useHaste) {
714
- // TODO(T22653277) support non-haste environments when importing
715
- // fragments
716
- imports.push(importTypes([fragmentTypeName], usedFragment + '.graphql'));
717
- } else if (state.useSingleArtifactDirectory) {
718
- imports.push(importTypes([fragmentTypeName], './' + usedFragment + '.graphql'));
719
- } else {
720
- imports.push(anyTypeAlias(fragmentTypeName));
721
- }
722
- }
723
- }
724
- } catch (err) {
725
- _iterator4.e(err);
726
- } finally {
727
- _iterator4.f();
728
- }
729
- }
730
-
731
- return imports;
732
- }
733
-
734
- function getEnumDefinitions(schema, _ref3) {
735
- var enumsHasteModule = _ref3.enumsHasteModule,
736
- usedEnums = _ref3.usedEnums,
737
- noFutureProofEnums = _ref3.noFutureProofEnums;
738
- var enumNames = Object.keys(usedEnums).sort();
739
-
740
- if (enumNames.length === 0) {
741
- return [];
742
- }
743
-
744
- if (typeof enumsHasteModule === 'string') {
745
- return [importTypes(enumNames, enumsHasteModule)];
746
- }
747
-
748
- if (typeof enumsHasteModule === 'function') {
749
- return enumNames.map(function (enumName) {
750
- return importTypes([enumName], enumsHasteModule(enumName));
751
- });
752
- }
753
-
754
- return enumNames.map(function (name) {
755
- var values = [].concat(schema.getEnumValues(usedEnums[name]));
756
- values.sort();
757
-
758
- if (!noFutureProofEnums) {
759
- values.push('%future added value');
760
- }
761
-
762
- return exportType(name, t.unionTypeAnnotation(values.map(function (value) {
763
- return t.stringLiteralTypeAnnotation(value);
764
- })));
765
- });
766
- } // If it's a @refetchable fragment, we generate the $fragmentRef in generated
767
- // query, and import it in the fragment to avoid circular dependencies
768
-
769
-
770
- function getRefetchableQueryParentFragmentName(state, metadata) {
771
- if (!(metadata === null || metadata === void 0 ? void 0 : metadata.isRefetchableQuery) || !state.useHaste && !state.useSingleArtifactDirectory) {
772
- return null;
773
- }
774
-
775
- var derivedFrom = metadata === null || metadata === void 0 ? void 0 : metadata.derivedFrom;
776
-
777
- if (derivedFrom != null && typeof derivedFrom === 'string') {
778
- return derivedFrom;
779
- }
780
-
781
- return null;
782
- }
783
-
784
- function getRefetchableQueryPath(state, directives) {
785
- var _directives$find;
786
-
787
- var refetchableQuery;
788
-
789
- if (!state.useHaste && !state.useSingleArtifactDirectory) {
790
- return;
791
- }
792
-
793
- var refetchableArgs = (_directives$find = directives.find(function (d) {
794
- return d.name === 'refetchable';
795
- })) === null || _directives$find === void 0 ? void 0 : _directives$find.args;
796
-
797
- if (!refetchableArgs) {
798
- return;
799
- }
800
-
801
- var argument = refetchableArgs.find(function (arg) {
802
- return arg.kind === 'Argument' && arg.name === 'queryName';
803
- });
804
-
805
- if (argument && argument.value && argument.value.kind === 'Literal' && typeof argument.value.value === 'string') {
806
- refetchableQuery = argument.value.value;
807
-
808
- if (!state.useHaste) {
809
- refetchableQuery = './' + refetchableQuery;
810
- }
811
-
812
- refetchableQuery += '.graphql';
813
- }
814
-
815
- return refetchableQuery;
816
- }
817
-
818
- function generateFragmentRefsForRefetchable(name) {
819
- var oldFragmentTypeName = getOldFragmentTypeName(name);
820
- var newFragmentTypeName = getNewFragmentTypeName(name);
821
- return [declareExportOpaqueType(oldFragmentTypeName, 'FragmentReference'), declareExportOpaqueType(newFragmentTypeName, oldFragmentTypeName)];
822
- }
823
-
824
- function getFragmentTypes(name, refetchableQueryPath) {
825
- var oldFragmentTypeName = getOldFragmentTypeName(name);
826
- var newFragmentTypeName = getNewFragmentTypeName(name);
827
-
828
- if (refetchableQueryPath) {
829
- return [importTypes([oldFragmentTypeName, newFragmentTypeName], refetchableQueryPath), exportTypes([oldFragmentTypeName, newFragmentTypeName])];
830
- }
831
-
832
- return [declareExportOpaqueType(oldFragmentTypeName, 'FragmentReference'), declareExportOpaqueType(newFragmentTypeName, oldFragmentTypeName)];
833
- }
834
-
835
- function getOldFragmentTypeName(name) {
836
- return "".concat(name, "$ref");
837
- }
838
-
839
- function getNewFragmentTypeName(name) {
840
- return "".concat(name, "$fragmentType");
841
- }
842
-
843
- function getRefTypeName(name) {
844
- return "".concat(name, "$key");
845
- }
846
-
847
- function getDataTypeName(name) {
848
- return "".concat(name, "$data");
849
- }
850
-
851
- var FLOW_TRANSFORMS = [RelayDirectiveTransform.transform, MaskTransform.transform, MatchTransform.transform, RequiredFieldTransform.transform, FlattenTransform.transformWithOptions({}), RefetchableFragmentTransform.transform];
852
- var DIRECTIVE_NAME = 'raw_response_type';
853
- module.exports = {
854
- generate: Profiler.instrument(generate, 'RelayFlowGenerator.generate'),
855
- transforms: FLOW_TRANSFORMS,
856
- SCHEMA_EXTENSION: "directive @".concat(DIRECTIVE_NAME, " on QUERY | MUTATION | SUBSCRIPTION")
857
- };