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
@@ -1,344 +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
- 'use strict';
11
-
12
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
13
-
14
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
-
16
- var invariant = require("fbjs/lib/invariant");
17
-
18
- var _require = require('./RelayCompilerError'),
19
- eachWithCombinedError = _require.eachWithCombinedError;
20
-
21
- /**
22
- * @public
23
- *
24
- * Helper for writing compiler transforms that apply "map" and/or "filter"-style
25
- * operations to compiler contexts. The `visitor` argument accepts a map of IR
26
- * kinds to user-defined functions that can map nodes of that kind to new values
27
- * (of the same kind).
28
- *
29
- * If a visitor function is defined for a kind, the visitor function is
30
- * responsible for traversing its children (by calling `this.traverse(node)`)
31
- * and returning either the input (to indicate no changes), a new node (to
32
- * indicate changes), or null/undefined (to indicate the removal of that node
33
- * from the output).
34
- *
35
- * If a visitor function is *not* defined for a kind, a default traversal is
36
- * used to evaluate its children.
37
- *
38
- * The `stateInitializer` argument accepts an optional function to construct the
39
- * state for each document (fragment or root) in the context. Any documents for
40
- * which the initializer returns null/undefined is deleted from the context
41
- * without being traversed.
42
- *
43
- * Example: Alias all scalar fields with the reverse of their name:
44
- *
45
- * ```
46
- * transform(context, {
47
- * ScalarField: visitScalarField,
48
- * });
49
- *
50
- * function visitScalarField(field: ScalarField, state: State): ?ScalarField {
51
- * // Traverse child nodes - for a scalar field these are the arguments &
52
- * // directives.
53
- * const nextField = this.traverse(field, state);
54
- * // Return a new node with a different alias.
55
- * return {
56
- * ...nextField,
57
- * alias: nextField.name.split('').reverse().join(''),
58
- * };
59
- * }
60
- * ```
61
- */
62
- function transform(context, visitor, stateInitializer) {
63
- var transformer = new Transformer(context, visitor);
64
- return context.withMutations(function (ctx) {
65
- var nextContext = ctx;
66
- eachWithCombinedError(context.documents(), function (prevNode) {
67
- var nextNode;
68
-
69
- if (stateInitializer === undefined) {
70
- nextNode = transformer.visit(prevNode, undefined);
71
- } else {
72
- var _state = stateInitializer(prevNode);
73
-
74
- if (_state != null) {
75
- nextNode = transformer.visit(prevNode, _state);
76
- }
77
- }
78
-
79
- if (!nextNode) {
80
- nextContext = nextContext.remove(prevNode.name);
81
- } else if (nextNode !== prevNode) {
82
- nextContext = nextContext.replace(nextNode);
83
- }
84
- });
85
- return nextContext;
86
- });
87
- }
88
- /**
89
- * @internal
90
- */
91
-
92
-
93
- var Transformer =
94
- /*#__PURE__*/
95
- function () {
96
- function Transformer(context, visitor) {
97
- this._context = context;
98
- this._states = [];
99
- this._visitor = visitor;
100
- }
101
- /**
102
- * @public
103
- *
104
- * Returns the original compiler context that is being transformed. This can
105
- * be used to look up fragments by name, for example.
106
- */
107
-
108
-
109
- var _proto = Transformer.prototype;
110
-
111
- _proto.getContext = function getContext() {
112
- return this._context;
113
- }
114
- /**
115
- * @public
116
- *
117
- * Transforms the node, calling a user-defined visitor function if defined for
118
- * the node's kind. Uses the given state for this portion of the traversal.
119
- *
120
- * Note: This differs from `traverse` in that it calls a visitor function for
121
- * the node itself.
122
- */
123
- ;
124
-
125
- _proto.visit = function visit(node, state) {
126
- this._states.push(state);
127
-
128
- var nextNode = this._visit(node);
129
-
130
- this._states.pop();
131
-
132
- return nextNode;
133
- }
134
- /**
135
- * @public
136
- *
137
- * Transforms the children of the given node, skipping the user-defined
138
- * visitor function for the node itself. Uses the given state for this portion
139
- * of the traversal.
140
- *
141
- * Note: This differs from `visit` in that it does not call a visitor function
142
- * for the node itself.
143
- */
144
- ;
145
-
146
- _proto.traverse = function traverse(node, state) {
147
- this._states.push(state);
148
-
149
- var nextNode = this._traverse(node);
150
-
151
- this._states.pop();
152
-
153
- return nextNode;
154
- };
155
-
156
- _proto._visit = function _visit(node) {
157
- var nodeVisitor = this._visitor[node.kind];
158
-
159
- if (nodeVisitor) {
160
- // If a handler for the kind is defined, it is responsible for calling
161
- // `traverse` to transform children as necessary.
162
- var _state2 = this._getState();
163
-
164
- var nextNode = nodeVisitor.call(this, node, _state2);
165
- return nextNode;
166
- } // Otherwise traverse is called automatically.
167
-
168
-
169
- return this._traverse(node);
170
- };
171
-
172
- _proto._traverse = function _traverse(prevNode) {
173
- var nextNode;
174
-
175
- switch (prevNode.kind) {
176
- case 'Argument':
177
- nextNode = this._traverseChildren(prevNode, null, ['value']);
178
- break;
179
-
180
- case 'Literal':
181
- case 'LocalArgumentDefinition':
182
- case 'RootArgumentDefinition':
183
- case 'Variable':
184
- nextNode = prevNode;
185
- break;
186
-
187
- case 'Defer':
188
- nextNode = this._traverseChildren(prevNode, ['selections'], ['if']);
189
- break;
190
-
191
- case 'Stream':
192
- nextNode = this._traverseChildren(prevNode, ['selections'], ['if', 'initialCount']);
193
- break;
194
-
195
- case 'ClientExtension':
196
- nextNode = this._traverseChildren(prevNode, ['selections']);
197
- break;
198
-
199
- case 'Directive':
200
- nextNode = this._traverseChildren(prevNode, ['args']);
201
- break;
202
-
203
- case 'ModuleImport':
204
- nextNode = this._traverseChildren(prevNode, ['selections']);
205
-
206
- if (!nextNode.selections.length) {
207
- nextNode = null;
208
- }
209
-
210
- break;
211
-
212
- case 'FragmentSpread':
213
- case 'ScalarField':
214
- nextNode = this._traverseChildren(prevNode, ['args', 'directives']);
215
- break;
216
-
217
- case 'InlineDataFragmentSpread':
218
- nextNode = this._traverseChildren(prevNode, ['selections']);
219
- break;
220
-
221
- case 'ConnectionField':
222
- case 'LinkedField':
223
- nextNode = this._traverseChildren(prevNode, ['args', 'directives', 'selections']);
224
-
225
- if (!nextNode.selections.length) {
226
- nextNode = null;
227
- }
228
-
229
- break;
230
-
231
- case 'Connection':
232
- nextNode = this._traverseChildren(prevNode, ['args', 'selections']);
233
-
234
- if (!nextNode.selections.length) {
235
- nextNode = null;
236
- }
237
-
238
- break;
239
-
240
- case 'Condition':
241
- nextNode = this._traverseChildren(prevNode, ['directives', 'selections'], ['condition']);
242
-
243
- if (!nextNode.selections.length) {
244
- nextNode = null;
245
- }
246
-
247
- break;
248
-
249
- case 'InlineFragment':
250
- nextNode = this._traverseChildren(prevNode, ['directives', 'selections']);
251
-
252
- if (!nextNode.selections.length) {
253
- nextNode = null;
254
- }
255
-
256
- break;
257
-
258
- case 'Fragment':
259
- case 'Root':
260
- nextNode = this._traverseChildren(prevNode, ['argumentDefinitions', 'directives', 'selections']);
261
- break;
262
-
263
- case 'Request':
264
- nextNode = this._traverseChildren(prevNode, null, ['fragment', 'root']);
265
- break;
266
-
267
- case 'SplitOperation':
268
- nextNode = this._traverseChildren(prevNode, ['selections']);
269
- break;
270
-
271
- default:
272
- prevNode;
273
- !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRTransformer: Unknown kind `%s`.', prevNode.kind) : invariant(false) : void 0;
274
- }
275
-
276
- return nextNode;
277
- };
278
-
279
- _proto._traverseChildren = function _traverseChildren(prevNode, pluralKeys, singularKeys) {
280
- var _this = this;
281
-
282
- var nextNode;
283
- pluralKeys && pluralKeys.forEach(function (key) {
284
- var prevItems = prevNode[key];
285
-
286
- if (!prevItems) {
287
- return;
288
- }
289
-
290
- !Array.isArray(prevItems) ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRTransformer: Expected data for `%s` to be an array, got `%s`.', key, prevItems) : invariant(false) : void 0;
291
-
292
- var nextItems = _this._map(prevItems);
293
-
294
- if (nextNode || nextItems !== prevItems) {
295
- nextNode = nextNode || (0, _objectSpread2["default"])({}, prevNode);
296
- nextNode[key] = nextItems;
297
- }
298
- });
299
- singularKeys && singularKeys.forEach(function (key) {
300
- var prevItem = prevNode[key];
301
-
302
- if (!prevItem) {
303
- return;
304
- }
305
-
306
- var nextItem = _this._visit(prevItem);
307
-
308
- if (nextNode || nextItem !== prevItem) {
309
- nextNode = nextNode || (0, _objectSpread2["default"])({}, prevNode);
310
- nextNode[key] = nextItem;
311
- }
312
- });
313
- return nextNode || prevNode;
314
- };
315
-
316
- _proto._map = function _map(prevItems) {
317
- var _this2 = this;
318
-
319
- var nextItems;
320
- prevItems.forEach(function (prevItem, index) {
321
- var nextItem = _this2._visit(prevItem);
322
-
323
- if (nextItems || nextItem !== prevItem) {
324
- nextItems = nextItems || prevItems.slice(0, index);
325
-
326
- if (nextItem) {
327
- nextItems.push(nextItem);
328
- }
329
- }
330
- });
331
- return nextItems || prevItems;
332
- };
333
-
334
- _proto._getState = function _getState() {
335
- !this._states.length ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRTransformer: Expected a current state to be set but found none. ' + 'This is usually the result of mismatched number of pushState()/popState() ' + 'calls.') : invariant(false) : void 0;
336
- return this._states[this._states.length - 1];
337
- };
338
-
339
- return Transformer;
340
- }();
341
-
342
- module.exports = {
343
- transform: transform
344
- };
@@ -1,218 +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
- 'use strict';
11
-
12
- var invariant = require("fbjs/lib/invariant");
13
-
14
- var _require = require('./RelayCompilerError'),
15
- eachWithCombinedError = _require.eachWithCombinedError;
16
-
17
- /**
18
- * @public
19
- *
20
- * Helper for writing AST validators that shares the same logic with
21
- * the transfomer
22
- *
23
- */
24
- function validate(context, visitor, stateInitializer) {
25
- var validator = new Validator(context, visitor);
26
- eachWithCombinedError(context.documents(), function (prevNode) {
27
- if (stateInitializer === undefined) {
28
- validator.visit(prevNode, undefined);
29
- } else {
30
- var _state = stateInitializer(prevNode);
31
-
32
- if (_state != null) {
33
- validator.visit(prevNode, _state);
34
- }
35
- }
36
- });
37
- }
38
- /**
39
- * @internal
40
- */
41
-
42
-
43
- var Validator =
44
- /*#__PURE__*/
45
- function () {
46
- function Validator(context, visitor) {
47
- this._context = context;
48
- this._states = [];
49
- this._visitor = visitor;
50
- }
51
-
52
- var _proto = Validator.prototype;
53
-
54
- _proto.getContext = function getContext() {
55
- return this._context;
56
- };
57
-
58
- _proto.visit = function visit(node, state) {
59
- this._states.push(state);
60
-
61
- this._visit(node);
62
-
63
- this._states.pop();
64
- };
65
-
66
- _proto.traverse = function traverse(node, state) {
67
- this._states.push(state);
68
-
69
- this._traverse(node);
70
-
71
- this._states.pop();
72
- };
73
-
74
- _proto._visit = function _visit(node) {
75
- var nodeVisitor = this._visitor[node.kind];
76
-
77
- if (nodeVisitor) {
78
- // If a handler for the kind is defined, it is responsible for calling
79
- // `traverse` to transform children as necessary.
80
- var _state2 = this._getState();
81
-
82
- nodeVisitor.call(this, node, _state2);
83
- return;
84
- } // Otherwise traverse is called automatically.
85
-
86
-
87
- this._traverse(node);
88
- };
89
-
90
- _proto._traverse = function _traverse(prevNode) {
91
- switch (prevNode.kind) {
92
- case 'Argument':
93
- this._traverseChildren(prevNode, null, ['value']);
94
-
95
- break;
96
-
97
- case 'Literal':
98
- case 'LocalArgumentDefinition':
99
- case 'RootArgumentDefinition':
100
- case 'Variable':
101
- break;
102
-
103
- case 'Defer':
104
- this._traverseChildren(prevNode, ['selections'], ['if']);
105
-
106
- break;
107
-
108
- case 'Stream':
109
- this._traverseChildren(prevNode, ['selections'], ['if', 'initialCount']);
110
-
111
- break;
112
-
113
- case 'ClientExtension':
114
- this._traverseChildren(prevNode, ['selections']);
115
-
116
- break;
117
-
118
- case 'Directive':
119
- this._traverseChildren(prevNode, ['args']);
120
-
121
- break;
122
-
123
- case 'ModuleImport':
124
- this._traverseChildren(prevNode, ['selections']);
125
-
126
- break;
127
-
128
- case 'FragmentSpread':
129
- case 'ScalarField':
130
- this._traverseChildren(prevNode, ['args', 'directives']);
131
-
132
- break;
133
-
134
- case 'InlineDataFragmentSpread':
135
- this._traverseChildren(prevNode, ['selections']);
136
-
137
- break;
138
-
139
- case 'ConnectionField':
140
- case 'LinkedField':
141
- this._traverseChildren(prevNode, ['args', 'directives', 'selections']);
142
-
143
- break;
144
-
145
- case 'Connection':
146
- this._traverseChildren(prevNode, ['args', 'selections']);
147
-
148
- break;
149
-
150
- case 'Condition':
151
- this._traverseChildren(prevNode, ['directives', 'selections'], ['condition']);
152
-
153
- break;
154
-
155
- case 'InlineFragment':
156
- this._traverseChildren(prevNode, ['directives', 'selections']);
157
-
158
- break;
159
-
160
- case 'Fragment':
161
- case 'Root':
162
- this._traverseChildren(prevNode, ['argumentDefinitions', 'directives', 'selections']);
163
-
164
- break;
165
-
166
- case 'Request':
167
- this._traverseChildren(prevNode, null, ['fragment', 'root']);
168
-
169
- break;
170
-
171
- case 'SplitOperation':
172
- this._traverseChildren(prevNode, ['selections']);
173
-
174
- break;
175
-
176
- default:
177
- prevNode;
178
- !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRValidator: Unknown kind `%s`.', prevNode.kind) : invariant(false) : void 0;
179
- }
180
- };
181
-
182
- _proto._traverseChildren = function _traverseChildren(prevNode, pluralKeys, singularKeys) {
183
- var _this = this;
184
-
185
- pluralKeys && pluralKeys.forEach(function (key) {
186
- var prevItems = prevNode[key];
187
-
188
- if (!prevItems) {
189
- return;
190
- }
191
-
192
- !Array.isArray(prevItems) ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRValidator: Expected data for `%s` to be an array, got `%s`.', key, prevItems) : invariant(false) : void 0;
193
- prevItems.forEach(function (prevItem) {
194
- return _this._visit(prevItem);
195
- });
196
- });
197
- singularKeys && singularKeys.forEach(function (key) {
198
- var prevItem = prevNode[key];
199
-
200
- if (!prevItem) {
201
- return;
202
- }
203
-
204
- _this._visit(prevItem);
205
- });
206
- };
207
-
208
- _proto._getState = function _getState() {
209
- !this._states.length ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRValidator: Expected a current state to be set but found none. ' + 'This is usually the result of mismatched number of pushState()/popState() ' + 'calls.') : invariant(false) : void 0;
210
- return this._states[this._states.length - 1];
211
- };
212
-
213
- return Validator;
214
- }();
215
-
216
- module.exports = {
217
- validate: validate
218
- };
@@ -1,46 +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
- 'use strict';
11
-
12
- var _require = require('graphql'),
13
- visit = _require.visit;
14
-
15
- var NodeKeys = {
16
- Argument: ['value'],
17
- ClientExtension: ['selections'],
18
- Condition: ['condition', 'selections'],
19
- Defer: ['selections', 'if'],
20
- Connection: ['args', 'selections'],
21
- ConnectionField: ['args', 'directives', 'selections'],
22
- Directive: ['args'],
23
- Fragment: ['argumentDefinitions', 'directives', 'selections'],
24
- FragmentSpread: ['args', 'directives'],
25
- InlineDataFragmentSpread: ['selections'],
26
- InlineFragment: ['directives', 'selections'],
27
- LinkedField: ['args', 'directives', 'selections'],
28
- Literal: [],
29
- LocalArgumentDefinition: [],
30
- ModuleImport: ['selections'],
31
- Request: ['fragment', 'root'],
32
- Root: ['argumentDefinitions', 'directives', 'selections'],
33
- RootArgumentDefinition: [],
34
- ScalarField: ['args', 'directives'],
35
- SplitOperation: ['selections'],
36
- Stream: ['selections', 'if', 'initialCount'],
37
- Variable: []
38
- };
39
-
40
- function visitIR(root, visitor) {
41
- return visit(root, visitor, NodeKeys);
42
- }
43
-
44
- module.exports = {
45
- visit: visitIR
46
- };