relay-compiler 7.0.0 → 9.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (242) hide show
  1. package/bin/RelayCompilerBin.js.flow +169 -0
  2. package/bin/RelayCompilerMain.js.flow +508 -0
  3. package/bin/__fixtures__/plugin-module.js.flow +17 -0
  4. package/bin/relay-compiler +8554 -8142
  5. package/codegen/CodegenDirectory.js.flow +375 -0
  6. package/codegen/CodegenRunner.js.flow +431 -0
  7. package/codegen/CodegenTypes.js.flow +28 -0
  8. package/codegen/CodegenWatcher.js.flow +254 -0
  9. package/codegen/NormalizationCodeGenerator.js.flow +499 -0
  10. package/codegen/ReaderCodeGenerator.js.flow +453 -0
  11. package/codegen/RelayCodeGenerator.js.flow +76 -0
  12. package/codegen/RelayFileWriter.js.flow +366 -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/writeRelayGeneratedFile.js.flow +194 -0
  17. package/core/ASTCache.js.flow +73 -0
  18. package/core/ASTConvert.js.flow +233 -0
  19. package/core/CompilerContext.js.flow +190 -0
  20. package/core/CompilerError.js.flow +250 -0
  21. package/core/DotGraphQLParser.js.flow +39 -0
  22. package/core/GraphQLCompilerProfiler.js.flow +341 -0
  23. package/core/GraphQLDerivedFromMetadata.js.flow +48 -0
  24. package/core/GraphQLWatchmanClient.js.flow +111 -0
  25. package/core/IR.js.flow +329 -0
  26. package/core/IRPrinter.js.flow +488 -0
  27. package/core/IRTransformer.js.flow +377 -0
  28. package/core/IRValidator.js.flow +260 -0
  29. package/core/IRVisitor.js.flow +150 -0
  30. package/core/JSModuleParser.js.flow +24 -0
  31. package/core/RelayCompilerScope.js.flow +199 -0
  32. package/core/RelayFindGraphQLTags.js.flow +119 -0
  33. package/core/RelayGraphQLEnumsGenerator.js.flow +55 -0
  34. package/core/RelayIRTransforms.js.flow +130 -0
  35. package/core/RelayParser.js.flow +1759 -0
  36. package/core/RelaySourceModuleParser.js.flow +135 -0
  37. package/core/Schema.js.flow +1985 -0
  38. package/core/SchemaUtils.js.flow +109 -0
  39. package/core/filterContextForNode.js.flow +50 -0
  40. package/core/getFieldDefinition.js.flow +156 -0
  41. package/core/getIdentifierForArgumentValue.js.flow +49 -0
  42. package/core/getIdentifierForSelection.js.flow +69 -0
  43. package/core/getLiteralArgumentValues.js.flow +32 -0
  44. package/core/getNormalizationOperationName.js.flow +19 -0
  45. package/core/inferRootArgumentDefinitions.js.flow +323 -0
  46. package/index.js +1 -1
  47. package/index.js.flow +202 -0
  48. package/language/RelayLanguagePluginInterface.js.flow +283 -0
  49. package/language/javascript/FindGraphQLTags.js.flow +233 -0
  50. package/language/javascript/RelayFlowBabelFactories.js.flow +180 -0
  51. package/language/javascript/RelayFlowGenerator.js.flow +1040 -0
  52. package/language/javascript/RelayFlowTypeTransformers.js.flow +184 -0
  53. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +34 -0
  54. package/language/javascript/formatGeneratedModule.js.flow +65 -0
  55. package/lib/bin/RelayCompilerBin.js +25 -7
  56. package/lib/bin/RelayCompilerMain.js +134 -125
  57. package/lib/bin/__fixtures__/plugin-module.js +1 -0
  58. package/lib/codegen/CodegenDirectory.js +14 -8
  59. package/lib/codegen/CodegenRunner.js +35 -75
  60. package/lib/codegen/CodegenTypes.js +1 -0
  61. package/lib/codegen/CodegenWatcher.js +14 -21
  62. package/lib/codegen/NormalizationCodeGenerator.js +80 -127
  63. package/lib/codegen/ReaderCodeGenerator.js +85 -111
  64. package/lib/codegen/RelayCodeGenerator.js +9 -6
  65. package/lib/codegen/RelayFileWriter.js +22 -41
  66. package/lib/codegen/SourceControl.js +1 -0
  67. package/lib/codegen/compileRelayArtifacts.js +18 -31
  68. package/lib/codegen/createPrintRequireModuleDependency.js +1 -0
  69. package/lib/codegen/writeRelayGeneratedFile.js +62 -90
  70. package/lib/core/ASTCache.js +4 -4
  71. package/lib/core/ASTConvert.js +1 -0
  72. package/lib/core/{GraphQLCompilerContext.js → CompilerContext.js} +10 -11
  73. package/lib/core/{RelayCompilerError.js → CompilerError.js} +29 -55
  74. package/lib/core/DotGraphQLParser.js +1 -0
  75. package/lib/core/GraphQLCompilerProfiler.js +9 -12
  76. package/lib/core/GraphQLDerivedFromMetadata.js +1 -0
  77. package/lib/core/GraphQLWatchmanClient.js +5 -12
  78. package/lib/core/{GraphQLIR.js → IR.js} +1 -0
  79. package/lib/core/{GraphQLIRPrinter.js → IRPrinter.js} +39 -17
  80. package/lib/core/{GraphQLIRTransformer.js → IRTransformer.js} +21 -16
  81. package/lib/core/{GraphQLIRValidator.js → IRValidator.js} +18 -10
  82. package/lib/core/{GraphQLIRVisitor.js → IRVisitor.js} +1 -2
  83. package/lib/core/JSModuleParser.js +18 -0
  84. package/lib/core/RelayCompilerScope.js +6 -5
  85. package/lib/core/RelayFindGraphQLTags.js +1 -0
  86. package/lib/core/RelayGraphQLEnumsGenerator.js +26 -12
  87. package/lib/core/RelayIRTransforms.js +12 -9
  88. package/lib/core/RelayParser.js +113 -75
  89. package/lib/core/RelaySourceModuleParser.js +4 -3
  90. package/lib/core/Schema.js +808 -317
  91. package/lib/core/SchemaUtils.js +1 -0
  92. package/lib/core/filterContextForNode.js +5 -4
  93. package/lib/core/getFieldDefinition.js +14 -16
  94. package/lib/core/getIdentifierForArgumentValue.js +18 -0
  95. package/lib/core/getIdentifierForSelection.js +4 -5
  96. package/lib/core/getLiteralArgumentValues.js +1 -0
  97. package/lib/core/getNormalizationOperationName.js +1 -0
  98. package/lib/core/inferRootArgumentDefinitions.js +79 -99
  99. package/lib/index.js +69 -19
  100. package/lib/language/RelayLanguagePluginInterface.js +1 -0
  101. package/lib/language/javascript/FindGraphQLTags.js +1 -0
  102. package/lib/language/javascript/RelayFlowBabelFactories.js +15 -0
  103. package/lib/language/javascript/RelayFlowGenerator.js +94 -173
  104. package/lib/language/javascript/RelayFlowTypeTransformers.js +2 -3
  105. package/lib/language/javascript/RelayLanguagePluginJavaScript.js +7 -4
  106. package/lib/language/javascript/formatGeneratedModule.js +14 -4
  107. package/lib/reporters/ConsoleReporter.js +2 -3
  108. package/lib/reporters/MultiReporter.js +2 -3
  109. package/lib/reporters/Reporter.js +1 -0
  110. package/lib/runner/Artifacts.js +327 -0
  111. package/lib/runner/BufferedFilesystem.js +265 -0
  112. package/lib/runner/GraphQLASTNodeGroup.js +260 -0
  113. package/lib/runner/GraphQLASTUtils.js +23 -0
  114. package/lib/runner/GraphQLNodeMap.js +85 -0
  115. package/lib/runner/Sources.js +266 -0
  116. package/lib/runner/StrictMap.js +136 -0
  117. package/lib/runner/compileArtifacts.js +39 -0
  118. package/lib/runner/extractAST.js +77 -0
  119. package/lib/runner/getChangedNodeNames.js +84 -0
  120. package/lib/runner/getSchemaInstance.js +30 -0
  121. package/lib/runner/types.js +12 -0
  122. package/lib/transforms/ApplyFragmentArgumentTransform.js +49 -55
  123. package/lib/transforms/ClientExtensionsTransform.js +11 -17
  124. package/lib/transforms/ConnectionTransform.js +35 -28
  125. package/lib/transforms/DeferStreamTransform.js +26 -74
  126. package/lib/transforms/DisallowIdAsAlias.js +5 -4
  127. package/lib/transforms/DisallowTypenameOnRoot.js +55 -0
  128. package/lib/transforms/FieldHandleTransform.js +8 -3
  129. package/lib/transforms/FilterDirectivesTransform.js +4 -3
  130. package/lib/transforms/FlattenTransform.js +23 -47
  131. package/lib/transforms/GenerateIDFieldTransform.js +9 -4
  132. package/lib/transforms/GenerateTypeNameTransform.js +8 -3
  133. package/lib/transforms/InlineDataFragmentTransform.js +11 -6
  134. package/lib/transforms/InlineFragmentsTransform.js +3 -2
  135. package/lib/transforms/MaskTransform.js +20 -19
  136. package/lib/transforms/MatchTransform.js +113 -34
  137. package/lib/transforms/RefetchableFragmentTransform.js +25 -41
  138. package/lib/transforms/RelayDirectiveTransform.js +13 -4
  139. package/lib/transforms/SkipClientExtensionsTransform.js +11 -2
  140. package/lib/transforms/SkipHandleFieldTransform.js +8 -3
  141. package/lib/transforms/SkipRedundantNodesTransform.js +9 -6
  142. package/lib/transforms/SkipSplitOperationTransform.js +32 -0
  143. package/lib/transforms/SkipUnreachableNodeTransform.js +12 -12
  144. package/lib/transforms/SkipUnusedVariablesTransform.js +19 -17
  145. package/lib/transforms/SplitModuleImportTransform.js +4 -3
  146. package/lib/transforms/TestOperationTransform.js +9 -6
  147. package/lib/transforms/TransformUtils.js +1 -0
  148. package/lib/transforms/ValidateGlobalVariablesTransform.js +20 -31
  149. package/lib/transforms/ValidateRequiredArgumentsTransform.js +17 -20
  150. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +20 -33
  151. package/lib/transforms/ValidateUnusedVariablesTransform.js +20 -31
  152. package/lib/transforms/query-generators/FetchableQueryGenerator.js +161 -0
  153. package/lib/transforms/query-generators/NodeQueryGenerator.js +9 -3
  154. package/lib/transforms/query-generators/QueryQueryGenerator.js +2 -0
  155. package/lib/transforms/query-generators/ViewerQueryGenerator.js +6 -3
  156. package/lib/transforms/query-generators/index.js +25 -7
  157. package/lib/transforms/query-generators/utils.js +13 -15
  158. package/lib/util/CodeMarker.js +1 -0
  159. package/lib/util/DefaultHandleKey.js +1 -0
  160. package/lib/util/RelayCompilerCache.js +2 -3
  161. package/lib/util/Rollout.js +1 -0
  162. package/lib/util/TimeReporter.js +83 -0
  163. package/lib/util/areEqualOSS.js +1 -0
  164. package/lib/util/dedupeJSONStringify.js +16 -12
  165. package/lib/util/getDefinitionNodeHash.js +22 -0
  166. package/lib/util/getModuleName.js +4 -5
  167. package/lib/util/joinArgumentDefinitions.js +2 -1
  168. package/lib/util/md5.js +17 -0
  169. package/lib/util/murmurHash.js +1 -0
  170. package/lib/util/nullthrowsOSS.js +1 -0
  171. package/lib/util/orList.js +2 -1
  172. package/lib/util/partitionArray.js +1 -0
  173. package/package.json +4 -4
  174. package/relay-compiler.js +4 -4
  175. package/relay-compiler.min.js +4 -4
  176. package/reporters/ConsoleReporter.js.flow +81 -0
  177. package/reporters/MultiReporter.js.flow +43 -0
  178. package/reporters/Reporter.js.flow +19 -0
  179. package/runner/Artifacts.js.flow +219 -0
  180. package/runner/BufferedFilesystem.js.flow +194 -0
  181. package/runner/GraphQLASTNodeGroup.js.flow +176 -0
  182. package/runner/GraphQLASTUtils.js.flow +26 -0
  183. package/runner/GraphQLNodeMap.js.flow +55 -0
  184. package/runner/Sources.js.flow +218 -0
  185. package/runner/StrictMap.js.flow +96 -0
  186. package/runner/compileArtifacts.js.flow +76 -0
  187. package/runner/extractAST.js.flow +100 -0
  188. package/runner/getChangedNodeNames.js.flow +48 -0
  189. package/runner/getSchemaInstance.js.flow +36 -0
  190. package/runner/types.js.flow +37 -0
  191. package/transforms/ApplyFragmentArgumentTransform.js.flow +474 -0
  192. package/transforms/ClientExtensionsTransform.js.flow +220 -0
  193. package/transforms/ConnectionTransform.js.flow +869 -0
  194. package/transforms/DeferStreamTransform.js.flow +258 -0
  195. package/transforms/DisallowIdAsAlias.js.flow +47 -0
  196. package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
  197. package/transforms/FieldHandleTransform.js.flow +80 -0
  198. package/transforms/FilterDirectivesTransform.js.flow +45 -0
  199. package/transforms/FlattenTransform.js.flow +456 -0
  200. package/transforms/GenerateIDFieldTransform.js.flow +134 -0
  201. package/transforms/GenerateTypeNameTransform.js.flow +81 -0
  202. package/transforms/InlineDataFragmentTransform.js.flow +124 -0
  203. package/transforms/InlineFragmentsTransform.js.flow +71 -0
  204. package/transforms/MaskTransform.js.flow +126 -0
  205. package/transforms/MatchTransform.js.flow +583 -0
  206. package/transforms/RefetchableFragmentTransform.js.flow +272 -0
  207. package/transforms/RelayDirectiveTransform.js.flow +99 -0
  208. package/transforms/SkipClientExtensionsTransform.js.flow +54 -0
  209. package/transforms/SkipHandleFieldTransform.js.flow +44 -0
  210. package/transforms/SkipRedundantNodesTransform.js.flow +253 -0
  211. package/transforms/SkipSplitOperationTransform.js.flow +37 -0
  212. package/transforms/SkipUnreachableNodeTransform.js.flow +149 -0
  213. package/transforms/SkipUnusedVariablesTransform.js.flow +59 -0
  214. package/transforms/SplitModuleImportTransform.js.flow +98 -0
  215. package/transforms/TestOperationTransform.js.flow +138 -0
  216. package/transforms/TransformUtils.js.flow +26 -0
  217. package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
  218. package/transforms/ValidateRequiredArgumentsTransform.js.flow +127 -0
  219. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +112 -0
  220. package/transforms/ValidateUnusedVariablesTransform.js.flow +89 -0
  221. package/transforms/query-generators/FetchableQueryGenerator.js.flow +190 -0
  222. package/transforms/query-generators/NodeQueryGenerator.js.flow +206 -0
  223. package/transforms/query-generators/QueryQueryGenerator.js.flow +57 -0
  224. package/transforms/query-generators/ViewerQueryGenerator.js.flow +97 -0
  225. package/transforms/query-generators/index.js.flow +90 -0
  226. package/transforms/query-generators/utils.js.flow +72 -0
  227. package/util/CodeMarker.js.flow +79 -0
  228. package/util/DefaultHandleKey.js.flow +17 -0
  229. package/util/RelayCompilerCache.js.flow +88 -0
  230. package/util/Rollout.js.flow +39 -0
  231. package/util/TimeReporter.js.flow +79 -0
  232. package/util/areEqualOSS.js.flow +123 -0
  233. package/util/dedupeJSONStringify.js.flow +152 -0
  234. package/util/getDefinitionNodeHash.js.flow +25 -0
  235. package/util/getModuleName.js.flow +39 -0
  236. package/util/joinArgumentDefinitions.js.flow +99 -0
  237. package/util/md5.js.flow +22 -0
  238. package/util/murmurHash.js.flow +94 -0
  239. package/util/nullthrowsOSS.js.flow +25 -0
  240. package/util/orList.js.flow +37 -0
  241. package/util/partitionArray.js.flow +37 -0
  242. package/lib/transforms/ConnectionFieldTransform.js +0 -275
@@ -0,0 +1,260 @@
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
+ * @format
8
+ *
9
+ */
10
+ // flowlint ambiguous-object-type:error
11
+ 'use strict';
12
+
13
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
+
15
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
+
17
+ function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
18
+
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
+
21
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22
+
23
+ var GraphQLNodeMap = require('./GraphQLNodeMap');
24
+
25
+ var _require = require('./GraphQLASTUtils'),
26
+ getName = _require.getName;
27
+
28
+ var _require2 = require('graphql'),
29
+ visit = _require2.visit;
30
+
31
+ function buildDependencyMap(nodes) {
32
+ var dependencyMap = new Map();
33
+
34
+ var _iterator = _createForOfIteratorHelper(nodes.values()),
35
+ _step;
36
+
37
+ try {
38
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
39
+ var node = _step.value;
40
+ var name = getName(node);
41
+
42
+ if (dependencyMap.has(name)) {
43
+ throw new Error("Duplicated definition for ".concat(name));
44
+ }
45
+
46
+ dependencyMap.set(name, findIncludedFragments(node));
47
+ }
48
+ } catch (err) {
49
+ _iterator.e(err);
50
+ } finally {
51
+ _iterator.f();
52
+ }
53
+
54
+ return dependencyMap;
55
+ }
56
+
57
+ function mergeMaps(maps) {
58
+ var result = new Map();
59
+
60
+ var _iterator2 = _createForOfIteratorHelper(maps),
61
+ _step2;
62
+
63
+ try {
64
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
65
+ var source = _step2.value;
66
+
67
+ var _iterator3 = _createForOfIteratorHelper(source.entries()),
68
+ _step3;
69
+
70
+ try {
71
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
72
+ var _step3$value = _step3.value,
73
+ key = _step3$value[0],
74
+ value = _step3$value[1];
75
+
76
+ if (result.has(key)) {
77
+ throw new Error("Duplicate entry for '".concat(key, "'."));
78
+ }
79
+
80
+ result.set(key, value);
81
+ }
82
+ } catch (err) {
83
+ _iterator3.e(err);
84
+ } finally {
85
+ _iterator3.f();
86
+ }
87
+ }
88
+ } catch (err) {
89
+ _iterator2.e(err);
90
+ } finally {
91
+ _iterator2.f();
92
+ }
93
+
94
+ return result;
95
+ }
96
+
97
+ function forFullBuild(nodes, baseNodes) {
98
+ var dependencyMap = mergeMaps([nodes].concat((0, _toConsumableArray2["default"])(baseNodes)).map(buildDependencyMap));
99
+ var includedNames = includeReachable(new Set(nodes.keys()), dependencyMap);
100
+ return buildResult(includedNames, nodes, mergeMaps(baseNodes));
101
+ }
102
+
103
+ function forChanges(nodes, changedNames) {
104
+ var baseNodes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
105
+ var projectDependencyMap = buildDependencyMap(nodes);
106
+ var baseDependencyMap = mergeMaps(baseNodes.map(buildDependencyMap));
107
+ var dependencyMap = mergeMaps([projectDependencyMap, baseDependencyMap]);
108
+ var invertedDependencyMap = inverseDependencyMap(dependencyMap);
109
+ var baseNameToNode = mergeMaps(baseNodes); // The first step of the process is to find all ancestors of changed nodes.
110
+ // And we perform this search on complete dependency map (project + base)
111
+
112
+ var directlyChangedAndAncestors = includeReachable(changedNames, invertedDependencyMap); // Now, we need to intersect obtained set with the project nodes
113
+
114
+ var directlyChangedRelatedToProject = new Set();
115
+
116
+ var _iterator4 = _createForOfIteratorHelper(directlyChangedAndAncestors),
117
+ _step4;
118
+
119
+ try {
120
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
121
+ var node = _step4.value;
122
+
123
+ if (nodes.has(node)) {
124
+ directlyChangedRelatedToProject.add(node);
125
+ }
126
+ } // Finally, we need to find all descendants of project-related changed nodes
127
+ // in the complete dependency map (project + base)
128
+
129
+ } catch (err) {
130
+ _iterator4.e(err);
131
+ } finally {
132
+ _iterator4.f();
133
+ }
134
+
135
+ var allRelated = includeReachable(directlyChangedRelatedToProject, dependencyMap);
136
+ return buildResult(allRelated, nodes, baseNameToNode);
137
+ }
138
+
139
+ function buildResult(includedNames, nameToNode, baseNameToNode) {
140
+ var baseNames = new Set();
141
+ var nodes = [];
142
+
143
+ var _iterator5 = _createForOfIteratorHelper(includedNames),
144
+ _step5;
145
+
146
+ try {
147
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
148
+ var name = _step5.value;
149
+ var baseNode = baseNameToNode.get(name);
150
+
151
+ if (baseNode != null) {
152
+ nodes.push(baseNode);
153
+ baseNames.add(name);
154
+ }
155
+
156
+ var node = nameToNode.get(name);
157
+
158
+ if (node != null) {
159
+ nodes.push(node);
160
+ }
161
+ }
162
+ } catch (err) {
163
+ _iterator5.e(err);
164
+ } finally {
165
+ _iterator5.f();
166
+ }
167
+
168
+ return {
169
+ baseNames: baseNames,
170
+ nodes: GraphQLNodeMap.from(nodes)
171
+ };
172
+ }
173
+
174
+ function includeReachable(changed, deps) {
175
+ var toVisit = Array.from(changed);
176
+ var visited = new Set();
177
+
178
+ while (toVisit.length > 0) {
179
+ var current = toVisit.pop();
180
+ visited.add(current);
181
+
182
+ var _iterator6 = _createForOfIteratorHelper(deps.get(current) || []),
183
+ _step6;
184
+
185
+ try {
186
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
187
+ var dep = _step6.value;
188
+
189
+ if (!visited.has(dep)) {
190
+ toVisit.push(dep);
191
+ }
192
+ }
193
+ } catch (err) {
194
+ _iterator6.e(err);
195
+ } finally {
196
+ _iterator6.f();
197
+ }
198
+ }
199
+
200
+ return visited;
201
+ }
202
+
203
+ function findIncludedFragments(node) {
204
+ var result = [];
205
+ visit(node, {
206
+ FragmentSpread: function FragmentSpread(spread) {
207
+ result.push(spread.name.value);
208
+ }
209
+ });
210
+ return result;
211
+ }
212
+
213
+ function inverseDependencyMap(map) {
214
+ var invertedMap = new Map();
215
+
216
+ var _iterator7 = _createForOfIteratorHelper(map.entries()),
217
+ _step7;
218
+
219
+ try {
220
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
221
+ var _step7$value = _step7.value,
222
+ source = _step7$value[0],
223
+ dests = _step7$value[1];
224
+ var inverseDest = source;
225
+
226
+ var _iterator8 = _createForOfIteratorHelper(dests),
227
+ _step8;
228
+
229
+ try {
230
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
231
+ var dest = _step8.value;
232
+ var inverseSource = dest;
233
+ var inverseDests = invertedMap.get(inverseSource);
234
+
235
+ if (inverseDests == null) {
236
+ inverseDests = [];
237
+ invertedMap.set(inverseSource, inverseDests);
238
+ }
239
+
240
+ inverseDests.push(inverseDest);
241
+ }
242
+ } catch (err) {
243
+ _iterator8.e(err);
244
+ } finally {
245
+ _iterator8.f();
246
+ }
247
+ }
248
+ } catch (err) {
249
+ _iterator7.e(err);
250
+ } finally {
251
+ _iterator7.f();
252
+ }
253
+
254
+ return invertedMap;
255
+ }
256
+
257
+ module.exports = {
258
+ forChanges: forChanges,
259
+ forFullBuild: forFullBuild
260
+ };
@@ -0,0 +1,23 @@
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
+ * @format
8
+ *
9
+ */
10
+ // flowlint ambiguous-object-type:error
11
+ 'use strict';
12
+
13
+ function getName(node) {
14
+ if (node.name == null) {
15
+ throw new Error('All fragments and operations have to have names in Relay');
16
+ }
17
+
18
+ return node.name.value;
19
+ }
20
+
21
+ module.exports = {
22
+ getName: getName
23
+ };
@@ -0,0 +1,85 @@
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
+ * @format
8
+ *
9
+ */
10
+ // flowlint ambiguous-object-type:error
11
+ 'use strict';
12
+
13
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
+
15
+ var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
16
+
17
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
18
+
19
+ function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
20
+
21
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22
+
23
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
24
+
25
+ var _require = require('../core/CompilerError'),
26
+ createUserError = _require.createUserError,
27
+ createCompilerError = _require.createCompilerError;
28
+
29
+ var _require2 = require('./GraphQLASTUtils'),
30
+ getName = _require2.getName;
31
+
32
+ var GraphQLNodeMap = /*#__PURE__*/function (_Map) {
33
+ (0, _inheritsLoose2["default"])(GraphQLNodeMap, _Map);
34
+
35
+ function GraphQLNodeMap() {
36
+ return _Map.apply(this, arguments) || this;
37
+ }
38
+
39
+ GraphQLNodeMap.from = function from(nodes) {
40
+ var result = new GraphQLNodeMap();
41
+
42
+ var _iterator = _createForOfIteratorHelper(nodes),
43
+ _step;
44
+
45
+ try {
46
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
47
+ var node = _step.value;
48
+ var name = getName(node);
49
+ var prevNode = result.get(name);
50
+
51
+ if (prevNode) {
52
+ throw createUserError("Duplicate node named '".concat(name, "'"), null, [node, prevNode]);
53
+ }
54
+
55
+ result.set(name, node);
56
+ }
57
+ } catch (err) {
58
+ _iterator.e(err);
59
+ } finally {
60
+ _iterator.f();
61
+ }
62
+
63
+ return result;
64
+ };
65
+
66
+ GraphQLNodeMap.fromSources = function fromSources(sources) {
67
+ return GraphQLNodeMap.from(sources.nodes());
68
+ };
69
+
70
+ var _proto = GraphQLNodeMap.prototype;
71
+
72
+ _proto.enforceGet = function enforceGet(name) {
73
+ var node = this.get(name);
74
+
75
+ if (!node) {
76
+ throw createCompilerError("GraphQLNodeMap: expected to have a node named ".concat(name, "."));
77
+ }
78
+
79
+ return node;
80
+ };
81
+
82
+ return GraphQLNodeMap;
83
+ }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(Map));
84
+
85
+ module.exports = GraphQLNodeMap;
@@ -0,0 +1,266 @@
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
+ * @format
8
+ *
9
+ * @emails oncall+relay
10
+ */
11
+ // flowlint ambiguous-object-type:error
12
+ 'use strict';
13
+
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ 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; }
19
+
20
+ 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; }
21
+
22
+ function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
23
+
24
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
25
+
26
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
27
+
28
+ var invariant = require("fbjs/lib/invariant");
29
+
30
+ var md5 = require('../util/md5');
31
+
32
+ var _require = require('./extractAST'),
33
+ toASTRecord = _require.toASTRecord;
34
+
35
+ var _require2 = require('graphql'),
36
+ Source = _require2.Source,
37
+ parse = _require2.parse;
38
+
39
+ var Sources = /*#__PURE__*/function () {
40
+ Sources.fromSavedState = function fromSavedState(_ref) {
41
+ var extractFromFile = _ref.extractFromFile,
42
+ savedState = _ref.savedState;
43
+ var state = {};
44
+
45
+ var _iterator = _createForOfIteratorHelper(savedState),
46
+ _step;
47
+
48
+ try {
49
+ var _loop = function _loop() {
50
+ var _step$value = _step.value,
51
+ file = _step$value.file,
52
+ savedStateSources = _step$value.sources;
53
+ var nodes = {};
54
+ var sources = [];
55
+
56
+ var _iterator2 = _createForOfIteratorHelper(savedStateSources),
57
+ _step2;
58
+
59
+ try {
60
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
61
+ var text = _step2.value;
62
+ var doc = parse(new Source(text, file));
63
+ !doc.definitions.length ? process.env.NODE_ENV !== "production" ? invariant(false, 'expected not empty list of definitions') : invariant(false) : void 0;
64
+ var entities = doc.definitions.map(function (node) {
65
+ return toASTRecord(node);
66
+ });
67
+ entities.forEach(function (astRecord) {
68
+ nodes[md5(astRecord.text)] = astRecord.ast;
69
+ });
70
+ sources.push(text);
71
+ }
72
+ } catch (err) {
73
+ _iterator2.e(err);
74
+ } finally {
75
+ _iterator2.f();
76
+ }
77
+
78
+ state[file] = {
79
+ nodes: nodes,
80
+ sources: sources
81
+ };
82
+ };
83
+
84
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
85
+ _loop();
86
+ }
87
+ } catch (err) {
88
+ _iterator.e(err);
89
+ } finally {
90
+ _iterator.f();
91
+ }
92
+
93
+ return new Sources({
94
+ extractFromFile: extractFromFile,
95
+ state: state
96
+ });
97
+ };
98
+
99
+ function Sources(_ref2) {
100
+ var extractFromFile = _ref2.extractFromFile,
101
+ state = _ref2.state;
102
+ this._extractFromFile = extractFromFile;
103
+ this._state = _objectSpread({}, state);
104
+ }
105
+
106
+ var _proto = Sources.prototype;
107
+
108
+ _proto.processChanges = function processChanges(baseDir, files) {
109
+ var added = [];
110
+ var removed = [];
111
+
112
+ var state = _objectSpread({}, this._state);
113
+
114
+ var _iterator3 = _createForOfIteratorHelper(files),
115
+ _step3;
116
+
117
+ try {
118
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
119
+ var _state$file$name$node, _state$file$name;
120
+
121
+ var _file = _step3.value;
122
+ var newDefs = void 0;
123
+ var newSources = void 0;
124
+
125
+ try {
126
+ var extracted = this._extractFromFile(baseDir, _file);
127
+
128
+ if (extracted != null) {
129
+ newDefs = extracted.nodes;
130
+ newSources = extracted.sources;
131
+ }
132
+ } catch (error) {
133
+ throw new Error("RelayCompiler: Sources module failed to parse ".concat(_file.name, ":\n").concat(error.message));
134
+ }
135
+
136
+ var hasEntry = state.hasOwnProperty(_file.name);
137
+ var oldEntry = (_state$file$name$node = (_state$file$name = state[_file.name]) === null || _state$file$name === void 0 ? void 0 : _state$file$name.nodes) !== null && _state$file$name$node !== void 0 ? _state$file$name$node : {}; // First case, we have new changes in the file
138
+ // for example changed Query or Fragment
139
+
140
+ if (newDefs != null && newDefs.length > 0) {
141
+ // We need to add all entities from the changed file to added arrays
142
+ var newEntry = {};
143
+ var newTexts = new Set();
144
+
145
+ var _iterator4 = _createForOfIteratorHelper(newDefs),
146
+ _step4;
147
+
148
+ try {
149
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
150
+ var _step4$value = _step4.value,
151
+ _ast = _step4$value.ast,
152
+ text = _step4$value.text;
153
+ var hashedText = md5(text);
154
+ newTexts.add(hashedText);
155
+
156
+ if (hasEntry && oldEntry[hashedText] != null) {
157
+ // Entity text did not change, so we
158
+ // don't need to change it in the state
159
+ newEntry[hashedText] = oldEntry[hashedText];
160
+ } else {
161
+ // Here we have completely new text.
162
+ // We need add it to the `added` changes
163
+ newEntry[hashedText] = _ast;
164
+ added.push({
165
+ file: _file.name,
166
+ ast: _ast
167
+ });
168
+ }
169
+ } // Also, we need to delete all old entities
170
+ // that are not included in the new changes
171
+
172
+ } catch (err) {
173
+ _iterator4.e(err);
174
+ } finally {
175
+ _iterator4.f();
176
+ }
177
+
178
+ if (hasEntry) {
179
+ for (var _i = 0, _Object$keys = Object.keys(oldEntry); _i < _Object$keys.length; _i++) {
180
+ var oldHashedText = _Object$keys[_i];
181
+ var ast = oldEntry[oldHashedText];
182
+
183
+ if (!newTexts.has(oldHashedText)) {
184
+ removed.push({
185
+ file: _file.name,
186
+ ast: ast
187
+ });
188
+ }
189
+ }
190
+ } // Finally, update the state with the changes
191
+
192
+
193
+ state[_file.name] = {
194
+ nodes: newEntry,
195
+
196
+ /* $FlowFixMe(>=0.111.0) This comment suppresses an error found when
197
+ * Flow v0.111.0 was deployed. To see the error, delete this comment
198
+ * and run Flow. */
199
+ sources: newSources
200
+ };
201
+ } else {
202
+ // Otherwise, file has been removed or there are no entities in the file
203
+ if (hasEntry) {
204
+ // We will put all ASTNodes from current state to removed collection
205
+ for (var _i2 = 0, _Object$keys2 = Object.keys(oldEntry); _i2 < _Object$keys2.length; _i2++) {
206
+ var _oldHashedText = _Object$keys2[_i2];
207
+ var _ast2 = oldEntry[_oldHashedText];
208
+ removed.push({
209
+ file: _file.name,
210
+ ast: _ast2
211
+ });
212
+ }
213
+
214
+ delete state[_file.name];
215
+ }
216
+ }
217
+ }
218
+ } catch (err) {
219
+ _iterator3.e(err);
220
+ } finally {
221
+ _iterator3.f();
222
+ }
223
+
224
+ return {
225
+ /* $FlowFixMe(>=0.111.0) This comment suppresses an error found when Flow
226
+ * v0.111.0 was deployed. To see the error, delete this comment and run
227
+ * Flow. */
228
+ changes: {
229
+ added: added,
230
+ removed: removed
231
+ },
232
+ sources: new Sources({
233
+ extractFromFile: this._extractFromFile,
234
+ state: state
235
+ })
236
+ };
237
+ };
238
+
239
+ _proto.nodes = function* nodes() {
240
+ for (var _file2 in this._state) {
241
+ var entry = this._state[_file2];
242
+
243
+ for (var _i3 = 0, _Object$values = Object.values(entry.nodes); _i3 < _Object$values.length; _i3++) {
244
+ var node = _Object$values[_i3];
245
+ yield node;
246
+ }
247
+ }
248
+ };
249
+
250
+ _proto.serializeState = function serializeState() {
251
+ var serializedState = [];
252
+
253
+ for (var _file3 in this._state) {
254
+ serializedState.push({
255
+ file: _file3,
256
+ sources: this._state[_file3].sources
257
+ });
258
+ }
259
+
260
+ return serializedState;
261
+ };
262
+
263
+ return Sources;
264
+ }();
265
+
266
+ module.exports = Sources;