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,327 @@
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 crypto = require('crypto');
24
+
25
+ var nullthrows = require('nullthrows');
26
+
27
+ var _require = require('./GraphQLASTUtils'),
28
+ getName = _require.getName;
29
+
30
+ function createEmptyState() {
31
+ return {
32
+ artifacts: new Map(),
33
+ metadata: new Map()
34
+ };
35
+ }
36
+
37
+ function serializeState(state) {
38
+ var json = [];
39
+
40
+ var _iterator = _createForOfIteratorHelper(state.artifacts),
41
+ _step;
42
+
43
+ try {
44
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
45
+ var _step$value = _step.value,
46
+ name = _step$value[0],
47
+ artifacts = _step$value[1];
48
+ json.push([name, Array.from(artifacts).map(function (filename) {
49
+ var _state$metadata$get;
50
+
51
+ return [filename, (_state$metadata$get = state.metadata.get(filename)) !== null && _state$metadata$get !== void 0 ? _state$metadata$get : ''];
52
+ })]);
53
+ }
54
+ } catch (err) {
55
+ _iterator.e(err);
56
+ } finally {
57
+ _iterator.f();
58
+ }
59
+
60
+ return json;
61
+ }
62
+
63
+ function deserializeState(json) {
64
+ var metadata = new Map();
65
+ var artifacts = new Map();
66
+ json.forEach(function (_ref) {
67
+ var name = _ref[0],
68
+ artifactArray = _ref[1];
69
+ var artifactsFiles = new Set();
70
+ artifactArray.forEach(function (_ref2) {
71
+ var filename = _ref2[0],
72
+ sha1hex = _ref2[1];
73
+ artifactsFiles.add(filename);
74
+ metadata.set(filename, sha1hex);
75
+ });
76
+ artifacts.set(name, artifactsFiles);
77
+ });
78
+ return {
79
+ artifacts: artifacts,
80
+ metadata: metadata
81
+ };
82
+ }
83
+
84
+ function updateState(state, changes, generatedArtifacts, filesystem, resolveFullPath) {
85
+ var nextState = {
86
+ artifacts: new Map(state.artifacts),
87
+ metadata: new Map(state.metadata)
88
+ };
89
+ var deletionCandidates = new Set();
90
+ var addedNames = new Set();
91
+
92
+ var _iterator2 = _createForOfIteratorHelper(changes.added),
93
+ _step2;
94
+
95
+ try {
96
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
97
+ var ast = _step2.value.ast;
98
+ addedNames.add(getName(ast));
99
+ } // For every removed AST node, delete the generated artifacts tracked for that
100
+ // node, unless the AST node was also added when the file was moved or the
101
+ // AST changed which shows up as added and removed in changes.
102
+
103
+ } catch (err) {
104
+ _iterator2.e(err);
105
+ } finally {
106
+ _iterator2.f();
107
+ }
108
+
109
+ var _iterator3 = _createForOfIteratorHelper(changes.removed),
110
+ _step3;
111
+
112
+ try {
113
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
114
+ var _ast = _step3.value.ast;
115
+ var name = getName(_ast);
116
+
117
+ if (addedNames.has(name)) {
118
+ // Update, we deal with that when iterating the added nodes.
119
+ continue;
120
+ }
121
+
122
+ var entry = nextState.artifacts.get(name);
123
+
124
+ if (entry == null) {
125
+ // No existing artifacts to delete
126
+ continue;
127
+ }
128
+
129
+ var _iterator7 = _createForOfIteratorHelper(entry.keys()),
130
+ _step7;
131
+
132
+ try {
133
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
134
+ var outdatedFile = _step7.value;
135
+ deletionCandidates.add(outdatedFile);
136
+ }
137
+ } catch (err) {
138
+ _iterator7.e(err);
139
+ } finally {
140
+ _iterator7.f();
141
+ }
142
+
143
+ nextState.artifacts["delete"](name);
144
+ }
145
+ } catch (err) {
146
+ _iterator3.e(err);
147
+ } finally {
148
+ _iterator3.f();
149
+ }
150
+
151
+ var _iterator4 = _createForOfIteratorHelper(generatedArtifacts.artifacts),
152
+ _step4;
153
+
154
+ try {
155
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
156
+ var _step4$value = _step4.value,
157
+ _name = _step4$value[0],
158
+ artifacts = _step4$value[1];
159
+ var oldEntry = nextState.artifacts.get(_name);
160
+
161
+ if (oldEntry != null) {
162
+ var _iterator8 = _createForOfIteratorHelper(oldEntry),
163
+ _step8;
164
+
165
+ try {
166
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
167
+ var _outdatedFile = _step8.value;
168
+
169
+ if (!artifacts.has(_outdatedFile)) {
170
+ deletionCandidates.add(_outdatedFile);
171
+ }
172
+ }
173
+ } catch (err) {
174
+ _iterator8.e(err);
175
+ } finally {
176
+ _iterator8.f();
177
+ }
178
+ }
179
+
180
+ nextState.artifacts.set(_name, artifacts);
181
+
182
+ var _iterator9 = _createForOfIteratorHelper(artifacts.keys()),
183
+ _step9;
184
+
185
+ try {
186
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
187
+ var _generatedArtifacts$m;
188
+
189
+ var filename = _step9.value;
190
+ nextState.metadata.set(filename, (_generatedArtifacts$m = generatedArtifacts.metadata.get(filename)) !== null && _generatedArtifacts$m !== void 0 ? _generatedArtifacts$m : '');
191
+ }
192
+ } catch (err) {
193
+ _iterator9.e(err);
194
+ } finally {
195
+ _iterator9.f();
196
+ }
197
+ }
198
+ } catch (err) {
199
+ _iterator4.e(err);
200
+ } finally {
201
+ _iterator4.f();
202
+ }
203
+
204
+ if (deletionCandidates.size === 0) {
205
+ return nextState;
206
+ }
207
+
208
+ var nextGeneratedArtifacts = new Set();
209
+
210
+ var _iterator5 = _createForOfIteratorHelper(eachNameAndArtifact(nextState)),
211
+ _step5;
212
+
213
+ try {
214
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
215
+ var _step5$value = _step5.value,
216
+ artifact = _step5$value[1];
217
+ nextGeneratedArtifacts.add(artifact);
218
+ }
219
+ } catch (err) {
220
+ _iterator5.e(err);
221
+ } finally {
222
+ _iterator5.f();
223
+ }
224
+
225
+ var _iterator6 = _createForOfIteratorHelper(deletionCandidates),
226
+ _step6;
227
+
228
+ try {
229
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
230
+ var candidate = _step6.value;
231
+ var someoneElseArtifact = nextGeneratedArtifacts.has(candidate);
232
+
233
+ if (someoneElseArtifact) {
234
+ // Sometimes, there are artifacts that are generated by multiple files
235
+ // If this candidate is also generated by someone else in
236
+ // artifact map, we just skip it here
237
+ continue;
238
+ }
239
+
240
+ var candidatePath = resolveFullPath(candidate);
241
+
242
+ if (filesystem.existsSync(candidatePath)) {
243
+ filesystem.unlinkSync(candidatePath);
244
+ nextState.metadata["delete"](candidate);
245
+ }
246
+ }
247
+ } catch (err) {
248
+ _iterator6.e(err);
249
+ } finally {
250
+ _iterator6.f();
251
+ }
252
+
253
+ return nextState;
254
+ }
255
+
256
+ function producedFiles(dirs, artifactsMetadata) {
257
+ var result = new Map();
258
+ dirs.forEach(function (_ref3) {
259
+ var baseDir = _ref3.baseDir,
260
+ dir = _ref3.dir;
261
+ var _dir$changes = dir.changes,
262
+ deleted = _dir$changes.deleted,
263
+ updated = _dir$changes.updated,
264
+ created = _dir$changes.created,
265
+ unchanged = _dir$changes.unchanged;
266
+
267
+ if (deleted.length > 0) {
268
+ throw new Error('Did not expect to see a deletion entry here.');
269
+ }
270
+
271
+ [].concat((0, _toConsumableArray2["default"])(updated), (0, _toConsumableArray2["default"])(created)).forEach(function (filename) {
272
+ var name = dir.getPath(filename).substr(baseDir.length + 1);
273
+ var sha1hex = sha1(nullthrows(dir.read(filename)));
274
+ result.set(name, sha1hex);
275
+ });
276
+ unchanged.forEach(function (filename) {
277
+ var name = dir.getPath(filename).substr(baseDir.length + 1);
278
+ var sha1hex = artifactsMetadata.get(name);
279
+ result.set(name, sha1hex !== null && sha1hex !== void 0 ? sha1hex : sha1(nullthrows(dir.read(filename))));
280
+ });
281
+ });
282
+ return result;
283
+ }
284
+
285
+ function* eachNameAndArtifact(artifacts) {
286
+ var _iterator10 = _createForOfIteratorHelper(artifacts.artifacts),
287
+ _step10;
288
+
289
+ try {
290
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
291
+ var _step10$value = _step10.value,
292
+ name = _step10$value[0],
293
+ artifactsForSource = _step10$value[1];
294
+
295
+ var _iterator11 = _createForOfIteratorHelper(artifactsForSource.keys()),
296
+ _step11;
297
+
298
+ try {
299
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
300
+ var artifactFile = _step11.value;
301
+ yield [name, artifactFile];
302
+ }
303
+ } catch (err) {
304
+ _iterator11.e(err);
305
+ } finally {
306
+ _iterator11.f();
307
+ }
308
+ }
309
+ } catch (err) {
310
+ _iterator10.e(err);
311
+ } finally {
312
+ _iterator10.f();
313
+ }
314
+ }
315
+
316
+ function sha1(content) {
317
+ return crypto.createHash('sha1').update(content).digest('hex');
318
+ }
319
+
320
+ module.exports = {
321
+ createEmptyState: createEmptyState,
322
+ serializeState: serializeState,
323
+ deserializeState: deserializeState,
324
+ updateState: updateState,
325
+ producedFiles: producedFiles,
326
+ eachNameAndArtifact: eachNameAndArtifact
327
+ };
@@ -0,0 +1,265 @@
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
+ * @emails oncall+relay
8
+ *
9
+ * @format
10
+ */
11
+ // flowlint ambiguous-object-type:error
12
+ 'use strict';
13
+
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
15
+
16
+ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
17
+
18
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
+
20
+ 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; } } }; }
21
+
22
+ 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); }
23
+
24
+ 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; }
25
+
26
+ var fs = require('fs');
27
+
28
+ var invariant = require("fbjs/lib/invariant");
29
+
30
+ /**
31
+ * A filesystem wrapper that buffers file reads and writes until `commit()` is
32
+ * called.
33
+ */
34
+ var BufferedFilesystem = /*#__PURE__*/function () {
35
+ function BufferedFilesystem() {
36
+ (0, _defineProperty2["default"])(this, "buffer", new Map());
37
+ (0, _defineProperty2["default"])(this, "committed", false);
38
+ }
39
+
40
+ var _proto = BufferedFilesystem.prototype;
41
+
42
+ _proto._assertNotComitted = function _assertNotComitted() {
43
+ !!this.committed ? process.env.NODE_ENV !== "production" ? invariant(false, 'BufferedFilesystem: no operations allowed after commit().') : invariant(false) : void 0;
44
+ };
45
+
46
+ _proto.commit = /*#__PURE__*/function () {
47
+ var _commit = _asyncToGenerator(function* (sourceControl) {
48
+ this._assertNotComitted();
49
+
50
+ this.committed = true;
51
+ var removed = [];
52
+ var added = [];
53
+
54
+ var _iterator = _createForOfIteratorHelper(this.buffer),
55
+ _step;
56
+
57
+ try {
58
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
59
+ var _step$value = _step.value,
60
+ path = _step$value[0],
61
+ data = _step$value[1];
62
+
63
+ if (data == null) {
64
+ removed.push(path);
65
+ fs.unlinkSync(path);
66
+ } else {
67
+ var fileExisits = fs.existsSync(path);
68
+ var currentData = fileExisits ? fs.readFileSync(path, 'utf8') : null;
69
+
70
+ if (currentData !== data) {
71
+ added.push(path);
72
+ fs.writeFileSync(path, data, 'utf8');
73
+ }
74
+ }
75
+ }
76
+ } catch (err) {
77
+ _iterator.e(err);
78
+ } finally {
79
+ _iterator.f();
80
+ }
81
+
82
+ if (sourceControl) {
83
+ yield sourceControl.addRemove(added, removed);
84
+ }
85
+ });
86
+
87
+ function commit(_x) {
88
+ return _commit.apply(this, arguments);
89
+ }
90
+
91
+ return commit;
92
+ }();
93
+
94
+ _proto.hasChanges = function hasChanges() {
95
+ this._assertNotComitted();
96
+
97
+ return this.buffer.size > 0;
98
+ };
99
+
100
+ _proto.getChangesSummary = function getChangesSummary() {
101
+ this._assertNotComitted();
102
+
103
+ var added = [];
104
+ var updated = [];
105
+ var removed = [];
106
+
107
+ var _iterator2 = _createForOfIteratorHelper(this.buffer),
108
+ _step2;
109
+
110
+ try {
111
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
112
+ var _step2$value = _step2.value,
113
+ path = _step2$value[0],
114
+ data = _step2$value[1];
115
+
116
+ if (data == null) {
117
+ removed.push(path);
118
+ } else {
119
+ if (!fs.existsSync(path)) {
120
+ added.push(path);
121
+ } else {
122
+ updated.push(path);
123
+ }
124
+ }
125
+ }
126
+ } catch (err) {
127
+ _iterator2.e(err);
128
+ } finally {
129
+ _iterator2.f();
130
+ }
131
+
132
+ return [added.length > 0 ? "Added:\n".concat(added.map(formatFilepath).join('')) : '', updated.length > 0 ? "Updated:\n".concat(updated.map(formatFilepath).join('')) : '', removed.length > 0 ? "Removed:\n".concat(removed.map(formatFilepath).join('')) : ''].filter(Boolean).join('\n');
133
+ };
134
+
135
+ _proto.getAddedRemovedFiles = function getAddedRemovedFiles() {
136
+ this._assertNotComitted();
137
+
138
+ var added = [];
139
+ var removed = [];
140
+
141
+ var _iterator3 = _createForOfIteratorHelper(this.buffer),
142
+ _step3;
143
+
144
+ try {
145
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
146
+ var _step3$value = _step3.value,
147
+ path = _step3$value[0],
148
+ data = _step3$value[1];
149
+
150
+ if (data == null) {
151
+ removed.push(path);
152
+ } else {
153
+ if (!fs.existsSync(path)) {
154
+ added.push(path);
155
+ }
156
+ }
157
+ }
158
+ } catch (err) {
159
+ _iterator3.e(err);
160
+ } finally {
161
+ _iterator3.f();
162
+ }
163
+
164
+ return {
165
+ added: added,
166
+ removed: removed
167
+ };
168
+ };
169
+
170
+ _proto.existsSync = function existsSync(path) {
171
+ this._assertNotComitted();
172
+
173
+ return this.buffer.has(path) ? Boolean(this.buffer.get(path)) : fs.existsSync(path);
174
+ };
175
+
176
+ _proto.mkdirSync = function mkdirSync(path) {
177
+ this._assertNotComitted();
178
+
179
+ fs.mkdirSync(path);
180
+ };
181
+
182
+ _proto.readdirSync = function readdirSync(path) {
183
+ this._assertNotComitted();
184
+
185
+ throw new Error('BufferedFilesystem: readdirSync is not implemented.');
186
+ };
187
+
188
+ _proto.readFileSync = function readFileSync(path, encoding) {
189
+ this._assertNotComitted();
190
+
191
+ if (this.buffer.has(path)) {
192
+ var data = this.buffer.get(path);
193
+ !(data != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'BufferedFilesystem: trying to read deleted file.') : invariant(false) : void 0;
194
+ return data;
195
+ }
196
+
197
+ return fs.readFileSync(path, encoding);
198
+ };
199
+
200
+ _proto.statSync = function statSync(path) {
201
+ this._assertNotComitted();
202
+
203
+ return fs.statSync(path);
204
+ };
205
+
206
+ _proto.unlinkSync = function unlinkSync(path) {
207
+ this._assertNotComitted();
208
+
209
+ this.buffer.set(path, null);
210
+ };
211
+
212
+ _proto.writeFileSync = function writeFileSync(filename, data, encoding) {
213
+ this._assertNotComitted();
214
+
215
+ this.buffer.set(filename, data);
216
+ };
217
+
218
+ _proto.changedFilesToJSON = function changedFilesToJSON() {
219
+ this._assertNotComitted();
220
+
221
+ var changed = [];
222
+ var removed = [];
223
+
224
+ var _iterator4 = _createForOfIteratorHelper(this.buffer),
225
+ _step4;
226
+
227
+ try {
228
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
229
+ var _step4$value = _step4.value,
230
+ path = _step4$value[0],
231
+ data = _step4$value[1];
232
+
233
+ if (data == null) {
234
+ removed.push({
235
+ path: path
236
+ });
237
+ } else {
238
+ changed.push({
239
+ path: path,
240
+ data: data
241
+ });
242
+ }
243
+ }
244
+ } catch (err) {
245
+ _iterator4.e(err);
246
+ } finally {
247
+ _iterator4.f();
248
+ }
249
+
250
+ return {
251
+ removed: removed,
252
+ changed: changed
253
+ };
254
+ };
255
+
256
+ return BufferedFilesystem;
257
+ }();
258
+
259
+ function formatFilepath(filepath) {
260
+ var startIndex = filepath.length - 80;
261
+ var prefix = startIndex > 0 ? "\t - ".concat(filepath.substr(0, 8), "...") : '\t - ';
262
+ return prefix + filepath.substr(startIndex, filepath.length) + '\n';
263
+ }
264
+
265
+ module.exports = BufferedFilesystem;