relay-compiler 8.0.0 → 10.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. package/bin/RelayCompilerBin.js.flow +169 -0
  2. package/bin/RelayCompilerMain.js.flow +515 -0
  3. package/bin/__fixtures__/plugin-module.js.flow +17 -0
  4. package/bin/relay-compiler +8930 -8967
  5. package/codegen/CodegenDirectory.js.flow +375 -0
  6. package/codegen/CodegenRunner.js.flow +432 -0
  7. package/codegen/CodegenTypes.js.flow +28 -0
  8. package/codegen/CodegenWatcher.js.flow +254 -0
  9. package/codegen/NormalizationCodeGenerator.js.flow +563 -0
  10. package/codegen/ReaderCodeGenerator.js.flow +477 -0
  11. package/codegen/RelayCodeGenerator.js.flow +85 -0
  12. package/codegen/RelayFileWriter.js.flow +365 -0
  13. package/codegen/SourceControl.js.flow +58 -0
  14. package/codegen/compileRelayArtifacts.js.flow +182 -0
  15. package/codegen/createPrintRequireModuleDependency.js.flow +21 -0
  16. package/codegen/sortObjectByKey.js.flow +25 -0
  17. package/codegen/writeRelayGeneratedFile.js.flow +223 -0
  18. package/core/ASTCache.js.flow +73 -0
  19. package/core/ASTConvert.js.flow +233 -0
  20. package/core/CompilerContext.js.flow +190 -0
  21. package/core/CompilerError.js.flow +250 -0
  22. package/core/DotGraphQLParser.js.flow +39 -0
  23. package/core/GraphQLCompilerProfiler.js.flow +341 -0
  24. package/core/GraphQLDerivedFromMetadata.js.flow +36 -0
  25. package/core/GraphQLWatchmanClient.js.flow +111 -0
  26. package/core/IR.js.flow +327 -0
  27. package/core/IRPrinter.js.flow +482 -0
  28. package/core/IRTransformer.js.flow +377 -0
  29. package/core/IRValidator.js.flow +260 -0
  30. package/core/IRVisitor.js.flow +150 -0
  31. package/core/JSModuleParser.js.flow +24 -0
  32. package/core/RelayCompilerScope.js.flow +199 -0
  33. package/core/RelayFindGraphQLTags.js.flow +119 -0
  34. package/core/RelayGraphQLEnumsGenerator.js.flow +55 -0
  35. package/core/RelayIRTransforms.js.flow +131 -0
  36. package/core/RelayParser.js.flow +1731 -0
  37. package/core/RelaySourceModuleParser.js.flow +135 -0
  38. package/core/Schema.js.flow +1983 -0
  39. package/core/SchemaUtils.js.flow +120 -0
  40. package/core/filterContextForNode.js.flow +50 -0
  41. package/core/getFieldDefinition.js.flow +156 -0
  42. package/core/getIdentifierForArgumentValue.js.flow +49 -0
  43. package/core/getIdentifierForSelection.js.flow +69 -0
  44. package/core/getLiteralArgumentValues.js.flow +32 -0
  45. package/core/getNormalizationOperationName.js.flow +19 -0
  46. package/core/inferRootArgumentDefinitions.js.flow +323 -0
  47. package/index.js +1 -1
  48. package/index.js.flow +200 -0
  49. package/language/RelayLanguagePluginInterface.js.flow +283 -0
  50. package/language/javascript/FindGraphQLTags.js.flow +232 -0
  51. package/language/javascript/RelayFlowBabelFactories.js.flow +180 -0
  52. package/language/javascript/RelayFlowGenerator.js.flow +1042 -0
  53. package/language/javascript/RelayFlowTypeTransformers.js.flow +184 -0
  54. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +34 -0
  55. package/language/javascript/formatGeneratedModule.js.flow +65 -0
  56. package/lib/bin/RelayCompilerBin.js +24 -7
  57. package/lib/bin/RelayCompilerMain.js +141 -136
  58. package/lib/codegen/CodegenDirectory.js +13 -8
  59. package/lib/codegen/CodegenRunner.js +37 -76
  60. package/lib/codegen/CodegenWatcher.js +13 -21
  61. package/lib/codegen/NormalizationCodeGenerator.js +117 -140
  62. package/lib/codegen/ReaderCodeGenerator.js +76 -117
  63. package/lib/codegen/RelayCodeGenerator.js +17 -6
  64. package/lib/codegen/RelayFileWriter.js +19 -40
  65. package/lib/codegen/compileRelayArtifacts.js +16 -30
  66. package/lib/codegen/sortObjectByKey.js +43 -0
  67. package/lib/codegen/writeRelayGeneratedFile.js +86 -95
  68. package/lib/core/ASTCache.js +2 -4
  69. package/lib/core/CompilerContext.js +2 -4
  70. package/lib/core/CompilerError.js +27 -54
  71. package/lib/core/GraphQLCompilerProfiler.js +8 -12
  72. package/lib/core/GraphQLDerivedFromMetadata.js +1 -10
  73. package/lib/core/GraphQLWatchmanClient.js +4 -12
  74. package/lib/core/IRPrinter.js +23 -21
  75. package/lib/core/IRTransformer.js +8 -16
  76. package/lib/core/IRValidator.js +1 -9
  77. package/lib/core/IRVisitor.js +0 -2
  78. package/lib/core/RelayCompilerScope.js +4 -4
  79. package/lib/core/RelayGraphQLEnumsGenerator.js +12 -15
  80. package/lib/core/RelayIRTransforms.js +16 -14
  81. package/lib/core/RelayParser.js +53 -89
  82. package/lib/core/RelaySourceModuleParser.js +3 -3
  83. package/lib/core/Schema.js +61 -73
  84. package/lib/core/SchemaUtils.js +15 -1
  85. package/lib/core/getFieldDefinition.js +12 -15
  86. package/lib/core/getIdentifierForSelection.js +2 -4
  87. package/lib/core/inferRootArgumentDefinitions.js +33 -73
  88. package/lib/index.js +4 -5
  89. package/lib/language/javascript/FindGraphQLTags.js +4 -3
  90. package/lib/language/javascript/RelayFlowGenerator.js +82 -171
  91. package/lib/language/javascript/RelayFlowTypeTransformers.js +1 -3
  92. package/lib/language/javascript/RelayLanguagePluginJavaScript.js +6 -4
  93. package/lib/language/javascript/formatGeneratedModule.js +11 -2
  94. package/lib/reporters/ConsoleReporter.js +1 -3
  95. package/lib/reporters/MultiReporter.js +1 -3
  96. package/lib/runner/Artifacts.js +69 -170
  97. package/lib/runner/BufferedFilesystem.js +32 -66
  98. package/lib/runner/GraphQLASTNodeGroup.js +54 -120
  99. package/lib/runner/GraphQLNodeMap.js +14 -19
  100. package/lib/runner/Sources.js +51 -85
  101. package/lib/runner/StrictMap.js +21 -37
  102. package/lib/runner/getChangedNodeNames.js +30 -62
  103. package/lib/transforms/ApplyFragmentArgumentTransform.js +73 -59
  104. package/lib/transforms/ClientExtensionsTransform.js +12 -16
  105. package/lib/transforms/ConnectionTransform.js +30 -37
  106. package/lib/transforms/DeclarativeConnectionMutationTransform.js +167 -0
  107. package/lib/transforms/DeferStreamTransform.js +30 -73
  108. package/lib/transforms/DisallowTypenameOnRoot.js +55 -0
  109. package/lib/transforms/FieldHandleTransform.js +6 -2
  110. package/lib/transforms/FlattenTransform.js +18 -45
  111. package/lib/transforms/GenerateIDFieldTransform.js +56 -35
  112. package/lib/transforms/GenerateTypeNameTransform.js +84 -10
  113. package/lib/transforms/InlineDataFragmentTransform.js +9 -4
  114. package/lib/transforms/MaskTransform.js +17 -17
  115. package/lib/transforms/MatchTransform.js +110 -32
  116. package/lib/transforms/RefetchableFragmentTransform.js +21 -38
  117. package/lib/transforms/RelayDirectiveTransform.js +8 -3
  118. package/lib/transforms/SkipClientExtensionsTransform.js +8 -0
  119. package/lib/transforms/SkipHandleFieldTransform.js +6 -2
  120. package/lib/transforms/SkipRedundantNodesTransform.js +7 -4
  121. package/lib/transforms/SkipSplitOperationTransform.js +32 -0
  122. package/lib/transforms/SkipUnreachableNodeTransform.js +9 -10
  123. package/lib/transforms/SkipUnusedVariablesTransform.js +18 -17
  124. package/lib/transforms/SplitModuleImportTransform.js +2 -2
  125. package/lib/transforms/TestOperationTransform.js +26 -22
  126. package/lib/transforms/ValidateGlobalVariablesTransform.js +18 -30
  127. package/lib/transforms/ValidateRequiredArgumentsTransform.js +12 -16
  128. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +16 -30
  129. package/lib/transforms/ValidateUnusedVariablesTransform.js +18 -30
  130. package/lib/transforms/query-generators/FetchableQueryGenerator.js +161 -0
  131. package/lib/transforms/query-generators/NodeQueryGenerator.js +22 -3
  132. package/lib/transforms/query-generators/QueryQueryGenerator.js +2 -1
  133. package/lib/transforms/query-generators/ViewerQueryGenerator.js +1 -0
  134. package/lib/transforms/query-generators/index.js +23 -6
  135. package/lib/transforms/query-generators/utils.js +17 -16
  136. package/lib/util/RelayCompilerCache.js +2 -4
  137. package/lib/util/argumentContainsVariables.js +37 -0
  138. package/lib/util/dedupeJSONStringify.js +15 -12
  139. package/lib/util/generateAbstractTypeRefinementKey.js +24 -0
  140. package/lib/util/getModuleName.js +3 -5
  141. package/lib/util/joinArgumentDefinitions.js +3 -1
  142. package/package.json +6 -6
  143. package/relay-compiler.js +4 -4
  144. package/relay-compiler.min.js +4 -4
  145. package/reporters/ConsoleReporter.js.flow +81 -0
  146. package/reporters/MultiReporter.js.flow +43 -0
  147. package/reporters/Reporter.js.flow +19 -0
  148. package/runner/Artifacts.js.flow +219 -0
  149. package/runner/BufferedFilesystem.js.flow +194 -0
  150. package/runner/GraphQLASTNodeGroup.js.flow +176 -0
  151. package/runner/GraphQLASTUtils.js.flow +26 -0
  152. package/runner/GraphQLNodeMap.js.flow +55 -0
  153. package/runner/Sources.js.flow +214 -0
  154. package/runner/StrictMap.js.flow +96 -0
  155. package/runner/compileArtifacts.js.flow +76 -0
  156. package/runner/extractAST.js.flow +100 -0
  157. package/runner/getChangedNodeNames.js.flow +48 -0
  158. package/runner/getSchemaInstance.js.flow +36 -0
  159. package/runner/types.js.flow +37 -0
  160. package/transforms/ApplyFragmentArgumentTransform.js.flow +526 -0
  161. package/transforms/ClientExtensionsTransform.js.flow +222 -0
  162. package/transforms/ConnectionTransform.js.flow +856 -0
  163. package/transforms/DeclarativeConnectionMutationTransform.js.flow +157 -0
  164. package/transforms/DeferStreamTransform.js.flow +265 -0
  165. package/transforms/DisallowIdAsAlias.js.flow +47 -0
  166. package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
  167. package/transforms/FieldHandleTransform.js.flow +80 -0
  168. package/transforms/FilterDirectivesTransform.js.flow +45 -0
  169. package/transforms/FlattenTransform.js.flow +453 -0
  170. package/transforms/GenerateIDFieldTransform.js.flow +152 -0
  171. package/transforms/GenerateTypeNameTransform.js.flow +161 -0
  172. package/transforms/InlineDataFragmentTransform.js.flow +125 -0
  173. package/transforms/InlineFragmentsTransform.js.flow +71 -0
  174. package/transforms/MaskTransform.js.flow +126 -0
  175. package/transforms/MatchTransform.js.flow +583 -0
  176. package/transforms/RefetchableFragmentTransform.js.flow +272 -0
  177. package/transforms/RelayDirectiveTransform.js.flow +97 -0
  178. package/transforms/SkipClientExtensionsTransform.js.flow +54 -0
  179. package/transforms/SkipHandleFieldTransform.js.flow +44 -0
  180. package/transforms/SkipRedundantNodesTransform.js.flow +254 -0
  181. package/transforms/SkipSplitOperationTransform.js.flow +37 -0
  182. package/transforms/SkipUnreachableNodeTransform.js.flow +149 -0
  183. package/transforms/SkipUnusedVariablesTransform.js.flow +59 -0
  184. package/transforms/SplitModuleImportTransform.js.flow +98 -0
  185. package/transforms/TestOperationTransform.js.flow +142 -0
  186. package/transforms/TransformUtils.js.flow +26 -0
  187. package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
  188. package/transforms/ValidateRequiredArgumentsTransform.js.flow +127 -0
  189. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +112 -0
  190. package/transforms/ValidateUnusedVariablesTransform.js.flow +89 -0
  191. package/transforms/query-generators/FetchableQueryGenerator.js.flow +189 -0
  192. package/transforms/query-generators/NodeQueryGenerator.js.flow +219 -0
  193. package/transforms/query-generators/QueryQueryGenerator.js.flow +57 -0
  194. package/transforms/query-generators/ViewerQueryGenerator.js.flow +97 -0
  195. package/transforms/query-generators/index.js.flow +90 -0
  196. package/transforms/query-generators/utils.js.flow +76 -0
  197. package/util/CodeMarker.js.flow +79 -0
  198. package/{lib/core/GraphQLIR.js → util/DefaultHandleKey.js.flow} +9 -2
  199. package/util/RelayCompilerCache.js.flow +88 -0
  200. package/util/Rollout.js.flow +39 -0
  201. package/util/TimeReporter.js.flow +79 -0
  202. package/util/areEqualOSS.js.flow +123 -0
  203. package/util/argumentContainsVariables.js.flow +38 -0
  204. package/util/dedupeJSONStringify.js.flow +152 -0
  205. package/util/generateAbstractTypeRefinementKey.js.flow +29 -0
  206. package/util/getDefinitionNodeHash.js.flow +25 -0
  207. package/util/getModuleName.js.flow +39 -0
  208. package/util/joinArgumentDefinitions.js.flow +105 -0
  209. package/util/md5.js.flow +22 -0
  210. package/util/murmurHash.js.flow +94 -0
  211. package/util/nullthrowsOSS.js.flow +25 -0
  212. package/util/orList.js.flow +37 -0
  213. package/util/partitionArray.js.flow +37 -0
  214. package/lib/core/GraphQLCompilerContext.js +0 -165
  215. package/lib/core/GraphQLIRPrinter.js +0 -371
  216. package/lib/core/GraphQLIRTransformer.js +0 -344
  217. package/lib/core/GraphQLIRValidator.js +0 -218
  218. package/lib/core/GraphQLIRVisitor.js +0 -46
  219. package/lib/core/RelayCompilerError.js +0 -277
  220. package/lib/transforms/ConnectionFieldTransform.js +0 -276
@@ -12,16 +12,27 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
16
 
17
17
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
18
 
19
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
20
+
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
22
+
23
+ var argumentContainsVariables = require('../util/argumentContainsVariables');
24
+
25
+ var generateAbstractTypeRefinementKey = require('../util/generateAbstractTypeRefinementKey');
26
+
27
+ var partitionArray = require('../util/partitionArray');
28
+
29
+ var sortObjectByKey = require('./sortObjectByKey');
30
+
19
31
  var _require = require('../core/CompilerError'),
20
32
  createCompilerError = _require.createCompilerError,
21
33
  createUserError = _require.createUserError;
22
34
 
23
35
  var _require2 = require('relay-runtime'),
24
- ConnectionInterface = _require2.ConnectionInterface,
25
36
  getStorageKey = _require2.getStorageKey,
26
37
  stableCopy = _require2.stableCopy;
27
38
 
@@ -40,9 +51,9 @@ function generate(schema, node) {
40
51
 
41
52
  function generateRoot(schema, node) {
42
53
  return {
54
+ argumentDefinitions: generateArgumentDefinitions(schema, node.argumentDefinitions),
43
55
  kind: 'Operation',
44
56
  name: node.name,
45
- argumentDefinitions: generateArgumentDefinitions(schema, node.argumentDefinitions),
46
57
  selections: generateSelections(schema, node.selections)
47
58
  };
48
59
  }
@@ -50,8 +61,8 @@ function generateRoot(schema, node) {
50
61
  function generateSplitOperation(schema, node) {
51
62
  return {
52
63
  kind: 'SplitOperation',
64
+ metadata: sortObjectByKey(node.metadata),
53
65
  name: node.name,
54
- metadata: node.metadata,
55
66
  selections: generateSelections(schema, node.selections)
56
67
  };
57
68
  }
@@ -59,6 +70,8 @@ function generateSplitOperation(schema, node) {
59
70
  function generateSelections(schema, selections) {
60
71
  var normalizationSelections = [];
61
72
  selections.forEach(function (selection) {
73
+ var _selection$metadata;
74
+
62
75
  switch (selection.kind) {
63
76
  case 'Condition':
64
77
  normalizationSelections.push(generateCondition(schema, selection));
@@ -69,7 +82,18 @@ function generateSelections(schema, selections) {
69
82
  break;
70
83
 
71
84
  case 'ScalarField':
72
- normalizationSelections.push.apply(normalizationSelections, (0, _toConsumableArray2["default"])(generateScalarField(selection)));
85
+ // NOTE: Inline fragments in normalization ast have the abstractKey
86
+ // but we skip the corresponding ScalarField for the type discriminator
87
+ // selection, since it's guaranteed to be a duplicate of a parent __typename
88
+ // selection.
89
+ var abstractKey = (_selection$metadata = selection.metadata) === null || _selection$metadata === void 0 ? void 0 : _selection$metadata.abstractKey;
90
+
91
+ if (typeof abstractKey === 'string') {
92
+ normalizationSelections.push(generateTypeDiscriminator(abstractKey));
93
+ } else {
94
+ normalizationSelections.push.apply(normalizationSelections, (0, _toConsumableArray2["default"])(generateScalarField(selection)));
95
+ }
96
+
73
97
  break;
74
98
 
75
99
  case 'ModuleImport':
@@ -84,14 +108,6 @@ function generateSelections(schema, selections) {
84
108
  normalizationSelections.push.apply(normalizationSelections, (0, _toConsumableArray2["default"])(generateLinkedField(schema, selection)));
85
109
  break;
86
110
 
87
- case 'ConnectionField':
88
- normalizationSelections.push.apply(normalizationSelections, (0, _toConsumableArray2["default"])(generateConnectionField(schema, selection)));
89
- break;
90
-
91
- case 'Connection':
92
- normalizationSelections.push(generateConnection(schema, selection));
93
- break;
94
-
95
111
  case 'Defer':
96
112
  normalizationSelections.push(generateDefer(schema, selection));
97
113
  break;
@@ -115,10 +131,9 @@ function generateSelections(schema, selections) {
115
131
  function generateArgumentDefinitions(schema, nodes) {
116
132
  return nodes.map(function (node) {
117
133
  return {
134
+ defaultValue: stableCopy(node.defaultValue),
118
135
  kind: 'LocalArgument',
119
- name: node.name,
120
- type: schema.getTypeString(node.type),
121
- defaultValue: node.defaultValue
136
+ name: node.name
122
137
  };
123
138
  });
124
139
  }
@@ -136,34 +151,64 @@ function generateCondition(schema, node) {
136
151
  }
137
152
 
138
153
  return {
154
+ condition: node.condition.variableName,
139
155
  kind: 'Condition',
140
156
  passingValue: node.passingValue,
141
- condition: node.condition.variableName,
142
157
  selections: generateSelections(schema, node.selections)
143
158
  };
144
159
  }
145
160
 
146
161
  function generateDefer(schema, node) {
147
162
  if (!(node["if"] == null || node["if"].kind === 'Variable' || node["if"].kind === 'Literal' && node["if"].value === true)) {
148
- var _ref, _node$if;
163
+ var _node$if$loc, _node$if;
149
164
 
150
- throw createCompilerError('NormalizationCodeGenerator: Expected @defer `if` condition to be ' + 'a variable, unspecified, or the literal `true`.', [(_ref = (_node$if = node["if"]) === null || _node$if === void 0 ? void 0 : _node$if.loc) !== null && _ref !== void 0 ? _ref : node.loc]);
165
+ throw createCompilerError('NormalizationCodeGenerator: Expected @defer `if` condition to be ' + 'a variable, unspecified, or the literal `true`.', [(_node$if$loc = (_node$if = node["if"]) === null || _node$if === void 0 ? void 0 : _node$if.loc) !== null && _node$if$loc !== void 0 ? _node$if$loc : node.loc]);
151
166
  }
152
167
 
153
168
  return {
154
169
  "if": node["if"] != null && node["if"].kind === 'Variable' ? node["if"].variableName : null,
155
170
  kind: 'Defer',
156
171
  label: node.label,
157
- metadata: node.metadata,
158
172
  selections: generateSelections(schema, node.selections)
159
173
  };
160
174
  }
161
175
 
162
176
  function generateInlineFragment(schema, node) {
177
+ var rawType = schema.getRawType(node.typeCondition);
178
+ var isAbstractType = schema.isAbstractType(rawType);
179
+ var abstractKey = isAbstractType ? generateAbstractTypeRefinementKey(schema, rawType) : null;
180
+ var selections = generateSelections(schema, node.selections);
181
+
182
+ if (isAbstractType) {
183
+ // Maintain a few invariants:
184
+ // - InlineFragment (and `selections` arrays generally) cannot be empty
185
+ // - Don't emit a TypeDiscriminator under an InlineFragment unless it has
186
+ // a different abstractKey
187
+ // This means we have to handle two cases:
188
+ // - The inline fragment only contains a TypeDiscriminator with the same
189
+ // abstractKey: replace the Fragment w the Discriminator
190
+ // - The inline fragment contains other selections: return all the selections
191
+ // minus any Discriminators w the same key
192
+ var _partitionArray = partitionArray(selections, function (selection) {
193
+ return selection.kind === 'TypeDiscriminator' && selection.abstractKey === abstractKey;
194
+ }),
195
+ discriminators = _partitionArray[0],
196
+ otherSelections = _partitionArray[1];
197
+
198
+ var discriminator = discriminators[0];
199
+
200
+ if (discriminator != null && otherSelections.length === 0) {
201
+ return discriminator;
202
+ } else {
203
+ selections = otherSelections;
204
+ }
205
+ }
206
+
163
207
  return {
164
208
  kind: 'InlineFragment',
165
- type: schema.getTypeString(node.typeCondition),
166
- selections: generateSelections(schema, node.selections)
209
+ selections: selections,
210
+ type: schema.getTypeString(rawType),
211
+ abstractKey: abstractKey
167
212
  };
168
213
  }
169
214
 
@@ -173,13 +218,13 @@ function generateLinkedField(schema, node) {
173
218
  // which may have originally appeared in different orders across an app.
174
219
  var handles = node.handles && node.handles.map(function (handle) {
175
220
  var handleNode = {
176
- kind: 'LinkedHandle',
177
221
  alias: node.alias === node.name ? null : node.alias,
178
- name: node.name,
179
222
  args: generateArgs(node.args),
223
+ filters: handle.filters,
180
224
  handle: handle.name,
181
225
  key: handle.key,
182
- filters: handle.filters
226
+ kind: 'LinkedHandle',
227
+ name: node.name
183
228
  }; // T45504512: new connection model
184
229
  // NOTE: this intentionally adds a dynamic key in order to avoid
185
230
  // triggering updates to existing queries that do not use dynamic
@@ -187,7 +232,7 @@ function generateLinkedField(schema, node) {
187
232
 
188
233
  if (handle.dynamicKey != null) {
189
234
  var dynamicKeyArgName = '__dynamicKey';
190
- handleNode = (0, _objectSpread2["default"])({}, handleNode, {
235
+ handleNode = _objectSpread({}, handleNode, {
191
236
  dynamicKey: {
192
237
  kind: 'Variable',
193
238
  name: dynamicKeyArgName,
@@ -196,24 +241,34 @@ function generateLinkedField(schema, node) {
196
241
  });
197
242
  }
198
243
 
244
+ if (handle.handleArgs != null) {
245
+ var handleArgs = generateArgs(handle.handleArgs);
246
+
247
+ if (handleArgs != null) {
248
+ handleNode = _objectSpread({}, handleNode, {
249
+ handleArgs: handleArgs
250
+ });
251
+ }
252
+ }
253
+
199
254
  return handleNode;
200
255
  }) || [];
201
256
  var type = schema.getRawType(node.type);
202
257
  var field = {
203
- kind: 'LinkedField',
204
258
  alias: node.alias === node.name ? null : node.alias,
205
- name: node.name,
206
- storageKey: null,
207
259
  args: generateArgs(node.args),
208
260
  concreteType: !schema.isAbstractType(type) ? schema.getTypeString(type) : null,
261
+ kind: 'LinkedField',
262
+ name: node.name,
209
263
  plural: isPlural(schema, node.type),
210
- selections: generateSelections(schema, node.selections)
264
+ selections: generateSelections(schema, node.selections),
265
+ storageKey: null
211
266
  }; // Precompute storageKey if possible
212
267
 
213
268
  var storageKey = getStaticStorageKey(field, node.metadata);
214
269
 
215
270
  if (storageKey != null) {
216
- field = (0, _objectSpread2["default"])({}, field, {
271
+ field = _objectSpread({}, field, {
217
272
  storageKey: storageKey
218
273
  });
219
274
  }
@@ -221,91 +276,7 @@ function generateLinkedField(schema, node) {
221
276
  return [field].concat(handles);
222
277
  }
223
278
 
224
- function generateConnectionField(schema, node) {
225
- return generateLinkedField(schema, {
226
- name: node.name,
227
- alias: node.alias,
228
- loc: node.loc,
229
- directives: node.directives,
230
- metadata: node.metadata,
231
- selections: node.selections,
232
- type: node.type,
233
- handles: null,
234
- connection: false,
235
- // this is only on the linked fields with @conneciton
236
- args: node.args.filter(function (arg) {
237
- return !ConnectionInterface.isConnectionCall({
238
- name: arg.name,
239
- value: null
240
- });
241
- }),
242
- kind: 'LinkedField'
243
- });
244
- }
245
-
246
- function generateConnection(schema, node) {
247
- var _ConnectionInterface$ = ConnectionInterface.get(),
248
- EDGES = _ConnectionInterface$.EDGES,
249
- PAGE_INFO = _ConnectionInterface$.PAGE_INFO;
250
-
251
- var selections = generateSelections(schema, node.selections);
252
- var edges;
253
- var pageInfo;
254
- selections.forEach(function (selection) {
255
- if (selection.kind === 'LinkedField') {
256
- if (selection.name === EDGES) {
257
- edges = selection;
258
- } else if (selection.name === PAGE_INFO) {
259
- pageInfo = selection;
260
- }
261
- } else if (selection.kind === 'Stream') {
262
- selection.selections.forEach(function (subselection) {
263
- if (subselection.kind === 'LinkedField' && subselection.name === EDGES) {
264
- edges = subselection;
265
- }
266
- });
267
- } else if (selection.kind === 'Defer') {
268
- selection.selections.forEach(function (subselection) {
269
- if (subselection.kind === 'LinkedField' && subselection.name === PAGE_INFO) {
270
- pageInfo = subselection;
271
- }
272
- });
273
- }
274
- });
275
-
276
- if (edges == null || pageInfo == null) {
277
- throw createUserError("Invalid connection, expected the '".concat(EDGES, "' and '").concat(PAGE_INFO, "' fields ") + 'to exist.', [node.loc]);
278
- }
279
-
280
- var stream = null;
281
-
282
- if (node.stream != null) {
283
- var _generateArgumentValu;
284
-
285
- var trueLiteral = {
286
- kind: 'Literal',
287
- name: 'if',
288
- value: true
289
- };
290
- stream = {
291
- "if": node.stream["if"] != null ? (_generateArgumentValu = generateArgumentValue('if', node.stream["if"])) !== null && _generateArgumentValu !== void 0 ? _generateArgumentValu : trueLiteral : trueLiteral,
292
- deferLabel: node.stream.deferLabel,
293
- streamLabel: node.stream.streamLabel
294
- };
295
- }
296
-
297
- return {
298
- kind: 'Connection',
299
- label: node.label,
300
- name: node.name,
301
- args: generateArgs(node.args),
302
- edges: edges,
303
- pageInfo: pageInfo,
304
- stream: stream
305
- };
306
- }
307
-
308
- function generateModuleImport(node, key) {
279
+ function generateModuleImport(node) {
309
280
  var fragmentName = node.name;
310
281
  var regExpMatch = fragmentName.match(/^([a-zA-Z][a-zA-Z0-9]*)(?:_([a-zA-Z][_a-zA-Z0-9]*))?$/);
311
282
 
@@ -320,10 +291,17 @@ function generateModuleImport(node, key) {
320
291
  }
321
292
 
322
293
  return {
323
- kind: 'ModuleImport',
324
- documentName: node.documentName,
294
+ documentName: node.key,
325
295
  fragmentName: fragmentName,
326
- fragmentPropName: fragmentPropName
296
+ fragmentPropName: fragmentPropName,
297
+ kind: 'ModuleImport'
298
+ };
299
+ }
300
+
301
+ function generateTypeDiscriminator(abstractKey) {
302
+ return {
303
+ kind: 'TypeDiscriminator',
304
+ abstractKey: abstractKey
327
305
  };
328
306
  }
329
307
 
@@ -344,27 +322,27 @@ function generateScalarField(node) {
344
322
  }
345
323
 
346
324
  return {
347
- kind: 'ScalarHandle',
348
325
  alias: node.alias === node.name ? null : node.alias,
349
- name: node.name,
350
326
  args: generateArgs(node.args),
327
+ filters: handle.filters,
351
328
  handle: handle.name,
352
329
  key: handle.key,
353
- filters: handle.filters
330
+ kind: 'ScalarHandle',
331
+ name: node.name
354
332
  };
355
333
  }) || [];
356
334
  var field = {
357
- kind: 'ScalarField',
358
335
  alias: node.alias === node.name ? null : node.alias,
359
- name: node.name,
360
336
  args: generateArgs(node.args),
337
+ kind: 'ScalarField',
338
+ name: node.name,
361
339
  storageKey: null
362
340
  }; // Precompute storageKey if possible
363
341
 
364
342
  var storageKey = getStaticStorageKey(field, node.metadata);
365
343
 
366
344
  if (storageKey != null) {
367
- field = (0, _objectSpread2["default"])({}, field, {
345
+ field = _objectSpread({}, field, {
368
346
  storageKey: storageKey
369
347
  });
370
348
  }
@@ -374,17 +352,18 @@ function generateScalarField(node) {
374
352
 
375
353
  function generateStream(schema, node) {
376
354
  if (!(node["if"] == null || node["if"].kind === 'Variable' || node["if"].kind === 'Literal' && node["if"].value === true)) {
377
- var _ref2, _node$if2;
355
+ var _node$if$loc2, _node$if2;
378
356
 
379
- throw createCompilerError('NormalizationCodeGenerator: Expected @stream `if` condition to be ' + 'a variable, unspecified, or the literal `true`.', [(_ref2 = (_node$if2 = node["if"]) === null || _node$if2 === void 0 ? void 0 : _node$if2.loc) !== null && _ref2 !== void 0 ? _ref2 : node.loc]);
357
+ throw createCompilerError('NormalizationCodeGenerator: Expected @stream `if` condition to be ' + 'a variable, unspecified, or the literal `true`.', [(_node$if$loc2 = (_node$if2 = node["if"]) === null || _node$if2 === void 0 ? void 0 : _node$if2.loc) !== null && _node$if$loc2 !== void 0 ? _node$if$loc2 : node.loc]);
380
358
  }
381
359
 
382
360
  return {
383
361
  "if": node["if"] != null && node["if"].kind === 'Variable' ? node["if"].variableName : null,
384
362
  kind: 'Stream',
385
363
  label: node.label,
386
- metadata: node.metadata,
387
- selections: generateSelections(schema, node.selections)
364
+ metadata: sortObjectByKey(node.metadata),
365
+ selections: generateSelections(schema, node.selections),
366
+ useCustomizedBatch: node.useCustomizedBatch != null && node.useCustomizedBatch.kind === 'Variable' ? node.useCustomizedBatch.variableName : null
388
367
  };
389
368
  }
390
369
 
@@ -413,10 +392,8 @@ function generateArgumentValue(name, value) {
413
392
  return [field.name, field.value];
414
393
  }));
415
394
  return {
416
- kind: 'ObjectValue',
417
- name: name,
418
395
  fields: objectKeys.map(function (fieldName) {
419
- var _generateArgumentValu2;
396
+ var _generateArgumentValu;
420
397
 
421
398
  var fieldValue = objectValues.get(fieldName);
422
399
 
@@ -424,23 +401,25 @@ function generateArgumentValue(name, value) {
424
401
  throw createCompilerError('Expected to have object field value');
425
402
  }
426
403
 
427
- return (_generateArgumentValu2 = generateArgumentValue(fieldName, fieldValue)) !== null && _generateArgumentValu2 !== void 0 ? _generateArgumentValu2 : {
404
+ return (_generateArgumentValu = generateArgumentValue(fieldName, fieldValue)) !== null && _generateArgumentValu !== void 0 ? _generateArgumentValu : {
428
405
  kind: 'Literal',
429
406
  name: fieldName,
430
407
  value: null
431
408
  };
432
- })
409
+ }),
410
+ kind: 'ObjectValue',
411
+ name: name
433
412
  };
434
413
  }
435
414
 
436
415
  case 'ListValue':
437
416
  {
438
417
  return {
439
- kind: 'ListValue',
440
- name: name,
441
418
  items: value.items.map(function (item, index) {
442
419
  return generateArgumentValue("".concat(name, ".").concat(index), item);
443
- })
420
+ }),
421
+ kind: 'ListValue',
422
+ name: name
444
423
  };
445
424
  }
446
425
 
@@ -478,9 +457,7 @@ function getStaticStorageKey(field, metadata) {
478
457
  return metadataStorageKey;
479
458
  }
480
459
 
481
- if (!field.args || field.args.length === 0 || field.args.some(function (arg) {
482
- return arg.kind !== 'Literal';
483
- })) {
460
+ if (!field.args || field.args.length === 0 || field.args.some(argumentContainsVariables)) {
484
461
  return null;
485
462
  }
486
463