@ardatan/relay-compiler 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/LICENSE +21 -0
  2. package/bin/RelayCompilerBin.js.flow +169 -0
  3. package/bin/RelayCompilerMain.js.flow +515 -0
  4. package/bin/__fixtures__/plugin-module.js.flow +17 -0
  5. package/bin/relay-compiler +19066 -0
  6. package/codegen/CodegenDirectory.js.flow +375 -0
  7. package/codegen/CodegenRunner.js.flow +432 -0
  8. package/codegen/CodegenTypes.js.flow +28 -0
  9. package/codegen/CodegenWatcher.js.flow +254 -0
  10. package/codegen/NormalizationCodeGenerator.js.flow +566 -0
  11. package/codegen/ReaderCodeGenerator.js.flow +512 -0
  12. package/codegen/RelayCodeGenerator.js.flow +85 -0
  13. package/codegen/RelayFileWriter.js.flow +367 -0
  14. package/codegen/SourceControl.js.flow +58 -0
  15. package/codegen/compileRelayArtifacts.js.flow +182 -0
  16. package/codegen/createPrintRequireModuleDependency.js.flow +19 -0
  17. package/codegen/sortObjectByKey.js.flow +25 -0
  18. package/codegen/writeRelayGeneratedFile.js.flow +239 -0
  19. package/core/ASTCache.js.flow +74 -0
  20. package/core/ASTConvert.js.flow +233 -0
  21. package/core/CompilerContext.js.flow +191 -0
  22. package/core/CompilerError.js.flow +255 -0
  23. package/core/DotGraphQLParser.js.flow +39 -0
  24. package/core/GraphQLCompilerProfiler.js.flow +341 -0
  25. package/core/GraphQLDerivedFromMetadata.js.flow +36 -0
  26. package/core/GraphQLWatchmanClient.js.flow +111 -0
  27. package/core/IR.js.flow +326 -0
  28. package/core/IRPrinter.js.flow +478 -0
  29. package/core/IRTransformer.js.flow +377 -0
  30. package/core/IRValidator.js.flow +260 -0
  31. package/core/IRVisitor.js.flow +150 -0
  32. package/core/JSModuleParser.js.flow +24 -0
  33. package/core/RelayCompilerScope.js.flow +199 -0
  34. package/core/RelayFindGraphQLTags.js.flow +119 -0
  35. package/core/RelayGraphQLEnumsGenerator.js.flow +55 -0
  36. package/core/RelayIRTransforms.js.flow +138 -0
  37. package/core/RelayParser.js.flow +1734 -0
  38. package/core/RelaySourceModuleParser.js.flow +135 -0
  39. package/core/Schema.js.flow +2037 -0
  40. package/core/SchemaUtils.js.flow +120 -0
  41. package/core/filterContextForNode.js.flow +50 -0
  42. package/core/getFieldDefinition.js.flow +156 -0
  43. package/core/getIdentifierForArgumentValue.js.flow +49 -0
  44. package/core/getIdentifierForSelection.js.flow +69 -0
  45. package/core/getLiteralArgumentValues.js.flow +32 -0
  46. package/core/getNormalizationOperationName.js.flow +19 -0
  47. package/core/inferRootArgumentDefinitions.js.flow +323 -0
  48. package/index.js +10 -0
  49. package/index.js.flow +200 -0
  50. package/language/RelayLanguagePluginInterface.js.flow +283 -0
  51. package/language/javascript/FindGraphQLTags.js.flow +137 -0
  52. package/language/javascript/RelayFlowBabelFactories.js.flow +176 -0
  53. package/language/javascript/RelayFlowGenerator.js.flow +1100 -0
  54. package/language/javascript/RelayFlowTypeTransformers.js.flow +184 -0
  55. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +34 -0
  56. package/language/javascript/formatGeneratedModule.js.flow +65 -0
  57. package/lib/bin/RelayCompilerBin.js +143 -0
  58. package/lib/bin/RelayCompilerMain.js +486 -0
  59. package/lib/bin/__fixtures__/plugin-module.js +16 -0
  60. package/lib/codegen/CodegenDirectory.js +336 -0
  61. package/lib/codegen/CodegenRunner.js +433 -0
  62. package/lib/codegen/CodegenTypes.js +11 -0
  63. package/lib/codegen/CodegenWatcher.js +271 -0
  64. package/lib/codegen/NormalizationCodeGenerator.js +480 -0
  65. package/lib/codegen/ReaderCodeGenerator.js +472 -0
  66. package/lib/codegen/RelayCodeGenerator.js +68 -0
  67. package/lib/codegen/RelayFileWriter.js +270 -0
  68. package/lib/codegen/SourceControl.js +60 -0
  69. package/lib/codegen/compileRelayArtifacts.js +157 -0
  70. package/lib/codegen/createPrintRequireModuleDependency.js +19 -0
  71. package/lib/codegen/sortObjectByKey.js +41 -0
  72. package/lib/codegen/writeRelayGeneratedFile.js +208 -0
  73. package/lib/core/ASTCache.js +70 -0
  74. package/lib/core/ASTConvert.js +198 -0
  75. package/lib/core/CompilerContext.js +165 -0
  76. package/lib/core/CompilerError.js +251 -0
  77. package/lib/core/DotGraphQLParser.js +40 -0
  78. package/lib/core/GraphQLCompilerProfiler.js +299 -0
  79. package/lib/core/GraphQLDerivedFromMetadata.js +31 -0
  80. package/lib/core/GraphQLWatchmanClient.js +150 -0
  81. package/lib/core/IR.js +11 -0
  82. package/lib/core/IRPrinter.js +389 -0
  83. package/lib/core/IRTransformer.js +345 -0
  84. package/lib/core/IRValidator.js +226 -0
  85. package/lib/core/IRVisitor.js +45 -0
  86. package/lib/core/JSModuleParser.js +18 -0
  87. package/lib/core/RelayCompilerScope.js +149 -0
  88. package/lib/core/RelayFindGraphQLTags.js +79 -0
  89. package/lib/core/RelayGraphQLEnumsGenerator.js +50 -0
  90. package/lib/core/RelayIRTransforms.js +109 -0
  91. package/lib/core/RelayParser.js +1382 -0
  92. package/lib/core/RelaySourceModuleParser.js +104 -0
  93. package/lib/core/Schema.js +1877 -0
  94. package/lib/core/SchemaUtils.js +98 -0
  95. package/lib/core/filterContextForNode.js +49 -0
  96. package/lib/core/getFieldDefinition.js +145 -0
  97. package/lib/core/getIdentifierForArgumentValue.js +53 -0
  98. package/lib/core/getIdentifierForSelection.js +48 -0
  99. package/lib/core/getLiteralArgumentValues.js +26 -0
  100. package/lib/core/getNormalizationOperationName.js +17 -0
  101. package/lib/core/inferRootArgumentDefinitions.js +351 -0
  102. package/lib/index.js +178 -0
  103. package/lib/language/RelayLanguagePluginInterface.js +14 -0
  104. package/lib/language/javascript/FindGraphQLTags.js +126 -0
  105. package/lib/language/javascript/RelayFlowBabelFactories.js +160 -0
  106. package/lib/language/javascript/RelayFlowGenerator.js +857 -0
  107. package/lib/language/javascript/RelayFlowTypeTransformers.js +119 -0
  108. package/lib/language/javascript/RelayLanguagePluginJavaScript.js +30 -0
  109. package/lib/language/javascript/formatGeneratedModule.js +36 -0
  110. package/lib/reporters/ConsoleReporter.js +61 -0
  111. package/lib/reporters/MultiReporter.js +45 -0
  112. package/lib/reporters/Reporter.js +11 -0
  113. package/lib/runner/Artifacts.js +323 -0
  114. package/lib/runner/BufferedFilesystem.js +261 -0
  115. package/lib/runner/GraphQLASTNodeGroup.js +256 -0
  116. package/lib/runner/GraphQLASTUtils.js +23 -0
  117. package/lib/runner/GraphQLNodeMap.js +81 -0
  118. package/lib/runner/Sources.js +271 -0
  119. package/lib/runner/StrictMap.js +134 -0
  120. package/lib/runner/compileArtifacts.js +39 -0
  121. package/lib/runner/extractAST.js +77 -0
  122. package/lib/runner/getChangedNodeNames.js +82 -0
  123. package/lib/runner/getSchemaInstance.js +30 -0
  124. package/lib/runner/types.js +12 -0
  125. package/lib/transforms/ApplyFragmentArgumentTransform.js +393 -0
  126. package/lib/transforms/ClientExtensionsTransform.js +222 -0
  127. package/lib/transforms/ConnectionTransform.js +643 -0
  128. package/lib/transforms/DeclarativeConnectionMutationTransform.js +221 -0
  129. package/lib/transforms/DeferStreamTransform.js +247 -0
  130. package/lib/transforms/DisallowIdAsAlias.js +41 -0
  131. package/lib/transforms/DisallowTypenameOnRoot.js +53 -0
  132. package/lib/transforms/FieldHandleTransform.js +81 -0
  133. package/lib/transforms/FilterCompilerDirectivesTransform.js +29 -0
  134. package/lib/transforms/FilterDirectivesTransform.js +41 -0
  135. package/lib/transforms/FlattenTransform.js +308 -0
  136. package/lib/transforms/GenerateIDFieldTransform.js +137 -0
  137. package/lib/transforms/GenerateTypeNameTransform.js +155 -0
  138. package/lib/transforms/InlineDataFragmentTransform.js +104 -0
  139. package/lib/transforms/InlineFragmentsTransform.js +63 -0
  140. package/lib/transforms/MaskTransform.js +121 -0
  141. package/lib/transforms/MatchTransform.js +438 -0
  142. package/lib/transforms/ReactFlightComponentTransform.js +161 -0
  143. package/lib/transforms/RefetchableFragmentTransform.js +249 -0
  144. package/lib/transforms/RelayDirectiveTransform.js +85 -0
  145. package/lib/transforms/RequiredFieldTransform.js +373 -0
  146. package/lib/transforms/SkipClientExtensionsTransform.js +49 -0
  147. package/lib/transforms/SkipHandleFieldTransform.js +45 -0
  148. package/lib/transforms/SkipRedundantNodesTransform.js +255 -0
  149. package/lib/transforms/SkipSplitOperationTransform.js +32 -0
  150. package/lib/transforms/SkipUnreachableNodeTransform.js +158 -0
  151. package/lib/transforms/SkipUnusedVariablesTransform.js +74 -0
  152. package/lib/transforms/SplitModuleImportTransform.js +85 -0
  153. package/lib/transforms/TestOperationTransform.js +145 -0
  154. package/lib/transforms/TransformUtils.js +21 -0
  155. package/lib/transforms/ValidateGlobalVariablesTransform.js +91 -0
  156. package/lib/transforms/ValidateRequiredArgumentsTransform.js +118 -0
  157. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +111 -0
  158. package/lib/transforms/ValidateUnusedVariablesTransform.js +96 -0
  159. package/lib/transforms/query-generators/FetchableQueryGenerator.js +157 -0
  160. package/lib/transforms/query-generators/NodeQueryGenerator.js +166 -0
  161. package/lib/transforms/query-generators/QueryQueryGenerator.js +48 -0
  162. package/lib/transforms/query-generators/ViewerQueryGenerator.js +77 -0
  163. package/lib/transforms/query-generators/index.js +60 -0
  164. package/lib/transforms/query-generators/utils.js +92 -0
  165. package/lib/util/CodeMarker.js +80 -0
  166. package/lib/util/DefaultHandleKey.js +15 -0
  167. package/lib/util/RelayCompilerCache.js +98 -0
  168. package/lib/util/Rollout.js +40 -0
  169. package/lib/util/TimeReporter.js +83 -0
  170. package/lib/util/areEqualArgValues.js +135 -0
  171. package/lib/util/argumentContainsVariables.js +37 -0
  172. package/lib/util/dedupeJSONStringify.js +160 -0
  173. package/lib/util/generateAbstractTypeRefinementKey.js +24 -0
  174. package/lib/util/getDefinitionNodeHash.js +22 -0
  175. package/lib/util/getModuleName.js +32 -0
  176. package/lib/util/joinArgumentDefinitions.js +66 -0
  177. package/lib/util/md5.js +17 -0
  178. package/lib/util/murmurHash.js +86 -0
  179. package/lib/util/nullthrowsOSS.js +23 -0
  180. package/lib/util/orList.js +36 -0
  181. package/lib/util/partitionArray.js +35 -0
  182. package/package.json +42 -0
  183. package/relay-compiler.js +17 -0
  184. package/relay-compiler.min.js +22 -0
  185. package/reporters/ConsoleReporter.js.flow +81 -0
  186. package/reporters/MultiReporter.js.flow +43 -0
  187. package/reporters/Reporter.js.flow +19 -0
  188. package/runner/Artifacts.js.flow +219 -0
  189. package/runner/BufferedFilesystem.js.flow +194 -0
  190. package/runner/GraphQLASTNodeGroup.js.flow +176 -0
  191. package/runner/GraphQLASTUtils.js.flow +26 -0
  192. package/runner/GraphQLNodeMap.js.flow +55 -0
  193. package/runner/Sources.js.flow +228 -0
  194. package/runner/StrictMap.js.flow +96 -0
  195. package/runner/compileArtifacts.js.flow +76 -0
  196. package/runner/extractAST.js.flow +100 -0
  197. package/runner/getChangedNodeNames.js.flow +48 -0
  198. package/runner/getSchemaInstance.js.flow +36 -0
  199. package/runner/types.js.flow +37 -0
  200. package/transforms/ApplyFragmentArgumentTransform.js.flow +526 -0
  201. package/transforms/ClientExtensionsTransform.js.flow +226 -0
  202. package/transforms/ConnectionTransform.js.flow +859 -0
  203. package/transforms/DeclarativeConnectionMutationTransform.js.flow +250 -0
  204. package/transforms/DeferStreamTransform.js.flow +266 -0
  205. package/transforms/DisallowIdAsAlias.js.flow +48 -0
  206. package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
  207. package/transforms/FieldHandleTransform.js.flow +81 -0
  208. package/transforms/FilterCompilerDirectivesTransform.js.flow +33 -0
  209. package/transforms/FilterDirectivesTransform.js.flow +45 -0
  210. package/transforms/FlattenTransform.js.flow +462 -0
  211. package/transforms/GenerateIDFieldTransform.js.flow +154 -0
  212. package/transforms/GenerateTypeNameTransform.js.flow +167 -0
  213. package/transforms/InlineDataFragmentTransform.js.flow +129 -0
  214. package/transforms/InlineFragmentsTransform.js.flow +73 -0
  215. package/transforms/MaskTransform.js.flow +130 -0
  216. package/transforms/MatchTransform.js.flow +593 -0
  217. package/transforms/ReactFlightComponentTransform.js.flow +198 -0
  218. package/transforms/RefetchableFragmentTransform.js.flow +272 -0
  219. package/transforms/RelayDirectiveTransform.js.flow +99 -0
  220. package/transforms/RequiredFieldTransform.js.flow +419 -0
  221. package/transforms/SkipClientExtensionsTransform.js.flow +57 -0
  222. package/transforms/SkipHandleFieldTransform.js.flow +45 -0
  223. package/transforms/SkipRedundantNodesTransform.js.flow +259 -0
  224. package/transforms/SkipSplitOperationTransform.js.flow +37 -0
  225. package/transforms/SkipUnreachableNodeTransform.js.flow +149 -0
  226. package/transforms/SkipUnusedVariablesTransform.js.flow +59 -0
  227. package/transforms/SplitModuleImportTransform.js.flow +101 -0
  228. package/transforms/TestOperationTransform.js.flow +143 -0
  229. package/transforms/TransformUtils.js.flow +26 -0
  230. package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
  231. package/transforms/ValidateRequiredArgumentsTransform.js.flow +131 -0
  232. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +115 -0
  233. package/transforms/ValidateUnusedVariablesTransform.js.flow +89 -0
  234. package/transforms/query-generators/FetchableQueryGenerator.js.flow +189 -0
  235. package/transforms/query-generators/NodeQueryGenerator.js.flow +219 -0
  236. package/transforms/query-generators/QueryQueryGenerator.js.flow +57 -0
  237. package/transforms/query-generators/ViewerQueryGenerator.js.flow +97 -0
  238. package/transforms/query-generators/index.js.flow +90 -0
  239. package/transforms/query-generators/utils.js.flow +76 -0
  240. package/util/CodeMarker.js.flow +79 -0
  241. package/util/DefaultHandleKey.js.flow +17 -0
  242. package/util/RelayCompilerCache.js.flow +88 -0
  243. package/util/Rollout.js.flow +39 -0
  244. package/util/TimeReporter.js.flow +79 -0
  245. package/util/areEqualArgValues.js.flow +126 -0
  246. package/util/argumentContainsVariables.js.flow +38 -0
  247. package/util/dedupeJSONStringify.js.flow +152 -0
  248. package/util/generateAbstractTypeRefinementKey.js.flow +29 -0
  249. package/util/getDefinitionNodeHash.js.flow +25 -0
  250. package/util/getModuleName.js.flow +39 -0
  251. package/util/joinArgumentDefinitions.js.flow +105 -0
  252. package/util/md5.js.flow +22 -0
  253. package/util/murmurHash.js.flow +94 -0
  254. package/util/nullthrowsOSS.js.flow +25 -0
  255. package/util/orList.js.flow +37 -0
  256. package/util/partitionArray.js.flow +37 -0
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ */
10
+ // flowlint ambiguous-object-type:error
11
+ 'use strict';
12
+
13
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
+
15
+ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
16
+
17
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
+
19
+ var Profiler = require('../core/GraphQLCompilerProfiler');
20
+
21
+ var crypto = require('crypto');
22
+
23
+ var invariant = require('invariant');
24
+
25
+ var path = require('path'); // flowlint nonstrict-import:warn
26
+
27
+
28
+ var CodegenDirectory = /*#__PURE__*/function () {
29
+ function CodegenDirectory(dir, options) {
30
+ var _this = this;
31
+
32
+ var _options$filesystem, _options$shards;
33
+
34
+ this._filesystem = (_options$filesystem = options.filesystem) !== null && _options$filesystem !== void 0 ? _options$filesystem : require('fs');
35
+ this.onlyValidate = options.onlyValidate;
36
+ this._shards = (_options$shards = options.shards) !== null && _options$shards !== void 0 ? _options$shards : 1;
37
+
38
+ if (this._filesystem.existsSync(dir)) {
39
+ !this._filesystem.statSync(dir).isDirectory() ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected `%s` to be a directory.', dir) : invariant(false) : void 0;
40
+ }
41
+
42
+ if (!this.onlyValidate) {
43
+ var dirs = [];
44
+ var parent = dir;
45
+
46
+ while (!this._filesystem.existsSync(parent)) {
47
+ dirs.unshift(parent);
48
+ parent = path.dirname(parent);
49
+ }
50
+
51
+ dirs.forEach(function (d) {
52
+ return _this._filesystem.mkdirSync(d);
53
+ });
54
+
55
+ if (this._shards > 1) {
56
+ for (var shard = 0; shard < this._shards; shard++) {
57
+ var shardDir = path.join(dir, this._getShardName(shard));
58
+
59
+ if (this._filesystem.existsSync(shardDir)) {
60
+ !this._filesystem.statSync(dir).isDirectory() ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected `%s` to be a directory.', dir) : invariant(false) : void 0;
61
+ } else {
62
+ this._filesystem.mkdirSync(shardDir);
63
+ }
64
+ }
65
+ }
66
+ }
67
+
68
+ this._files = new Set();
69
+ this.changes = {
70
+ deleted: [],
71
+ updated: [],
72
+ created: [],
73
+ unchanged: []
74
+ };
75
+ this._dir = dir;
76
+ }
77
+
78
+ CodegenDirectory.combineChanges = function combineChanges(dirs) {
79
+ var changes = {
80
+ deleted: [],
81
+ updated: [],
82
+ created: [],
83
+ unchanged: []
84
+ };
85
+ dirs.forEach(function (dir) {
86
+ var _changes$deleted, _changes$updated, _changes$created, _changes$unchanged;
87
+
88
+ (_changes$deleted = changes.deleted).push.apply(_changes$deleted, (0, _toConsumableArray2["default"])(dir.changes.deleted));
89
+
90
+ (_changes$updated = changes.updated).push.apply(_changes$updated, (0, _toConsumableArray2["default"])(dir.changes.updated));
91
+
92
+ (_changes$created = changes.created).push.apply(_changes$created, (0, _toConsumableArray2["default"])(dir.changes.created));
93
+
94
+ (_changes$unchanged = changes.unchanged).push.apply(_changes$unchanged, (0, _toConsumableArray2["default"])(dir.changes.unchanged));
95
+ });
96
+ return changes;
97
+ };
98
+
99
+ CodegenDirectory.hasChanges = function hasChanges(changes) {
100
+ return changes.created.length > 0 || changes.updated.length > 0 || changes.deleted.length > 0;
101
+ };
102
+
103
+ CodegenDirectory.formatChanges = function formatChanges(changes, options) {
104
+ var output = [];
105
+
106
+ function formatFiles(label, files) {
107
+ if (files.length > 0) {
108
+ output.push(label + ':');
109
+ files.forEach(function (file) {
110
+ output.push(' - ' + file);
111
+ });
112
+ }
113
+ }
114
+
115
+ if (options.onlyValidate) {
116
+ formatFiles('Missing', changes.created);
117
+ formatFiles('Out of date', changes.updated);
118
+ formatFiles('Extra', changes.deleted);
119
+ } else {
120
+ formatFiles('Created', changes.created);
121
+ formatFiles('Updated', changes.updated);
122
+ formatFiles('Deleted', changes.deleted);
123
+ output.push("Unchanged: ".concat(changes.unchanged.length, " files"));
124
+ }
125
+
126
+ return output.join('\n');
127
+ };
128
+
129
+ CodegenDirectory.printChanges = function printChanges(changes, options) {
130
+ Profiler.run('CodegenDirectory.printChanges', function () {
131
+ var output = CodegenDirectory.formatChanges(changes, options); // eslint-disable-next-line no-console
132
+
133
+ console.log(output);
134
+ });
135
+ };
136
+
137
+ CodegenDirectory.getAddedRemovedFiles = function getAddedRemovedFiles(dirs) {
138
+ var added = [];
139
+ var removed = [];
140
+ dirs.forEach(function (dir) {
141
+ dir.changes.created.forEach(function (name) {
142
+ added.push(dir.getPath(name));
143
+ });
144
+ dir.changes.deleted.forEach(function (name) {
145
+ removed.push(dir.getPath(name));
146
+ });
147
+ });
148
+ return {
149
+ added: added,
150
+ removed: removed
151
+ };
152
+ };
153
+
154
+ CodegenDirectory.sourceControlAddRemove = /*#__PURE__*/function () {
155
+ var _sourceControlAddRemove = _asyncToGenerator(function* (sourceControl, dirs) {
156
+ var _CodegenDirectory$get = CodegenDirectory.getAddedRemovedFiles(dirs),
157
+ added = _CodegenDirectory$get.added,
158
+ removed = _CodegenDirectory$get.removed;
159
+
160
+ sourceControl.addRemove(added, removed);
161
+ });
162
+
163
+ function sourceControlAddRemove(_x, _x2) {
164
+ return _sourceControlAddRemove.apply(this, arguments);
165
+ }
166
+
167
+ return sourceControlAddRemove;
168
+ }();
169
+
170
+ var _proto = CodegenDirectory.prototype;
171
+
172
+ _proto.printChanges = function printChanges() {
173
+ CodegenDirectory.printChanges(this.changes, {
174
+ onlyValidate: this.onlyValidate
175
+ });
176
+ };
177
+
178
+ _proto.read = function read(filename) {
179
+ var filePath = path.join(this._dir, filename);
180
+
181
+ if (this._filesystem.existsSync(filePath)) {
182
+ return this._filesystem.readFileSync(filePath, 'utf8');
183
+ }
184
+
185
+ return null;
186
+ };
187
+
188
+ _proto.markUnchanged = function markUnchanged(filename) {
189
+ this._addGenerated(filename);
190
+
191
+ this.changes.unchanged.push(filename);
192
+ }
193
+ /**
194
+ * Marks a files as updated or out of date without actually writing the file.
195
+ * This is probably only be useful when doing validation without intention to
196
+ * actually write to disk.
197
+ */
198
+ ;
199
+
200
+ _proto.markUpdated = function markUpdated(filename) {
201
+ this._addGenerated(filename);
202
+
203
+ this.changes.updated.push(filename);
204
+ };
205
+
206
+ _proto.writeFile = function writeFile(filename, content) {
207
+ var _this2 = this;
208
+
209
+ var shouldRepersist = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
210
+ Profiler.run('CodegenDirectory.writeFile', function () {
211
+ _this2._addGenerated(filename);
212
+
213
+ var filePath = _this2.getPath(filename);
214
+
215
+ if (_this2._filesystem.existsSync(filePath)) {
216
+ var existingContent = _this2._filesystem.readFileSync(filePath, 'utf8');
217
+
218
+ if (existingContent === content && !shouldRepersist) {
219
+ _this2.changes.unchanged.push(filename);
220
+ } else {
221
+ _this2._writeFile(filePath, content);
222
+
223
+ _this2.changes.updated.push(filename);
224
+ }
225
+ } else {
226
+ _this2._writeFile(filePath, content);
227
+
228
+ _this2.changes.created.push(filename);
229
+ }
230
+ });
231
+ };
232
+
233
+ _proto._writeFile = function _writeFile(filePath, content) {
234
+ if (!this.onlyValidate) {
235
+ this._filesystem.writeFileSync(filePath, content, 'utf8');
236
+ }
237
+ }
238
+ /**
239
+ * Deletes all non-generated files, except for invisible "dot" files (ie.
240
+ * files with names starting with ".").
241
+ */
242
+ ;
243
+
244
+ _proto.deleteExtraFiles = function deleteExtraFiles(keepExtraFile) {
245
+ var _this3 = this;
246
+
247
+ Profiler.run('CodegenDirectory.deleteExtraFiles', function () {
248
+ if (_this3._shards > 1) {
249
+ _this3._filesystem.readdirSync(_this3._dir).forEach(function (firstLevel) {
250
+ if (firstLevel.startsWith('.')) {
251
+ // allow hidden files on the first level of the codegen directory
252
+ return;
253
+ }
254
+
255
+ var firstLevelPath = path.join(_this3._dir, firstLevel);
256
+
257
+ if (!_this3._filesystem.statSync(firstLevelPath).isDirectory()) {
258
+ // Delete all files on the top level, all files need to be in a
259
+ // shard directory.
260
+ _this3._filesystem.unlinkSync(firstLevelPath);
261
+
262
+ return;
263
+ }
264
+
265
+ _this3._filesystem.readdirSync(firstLevelPath).forEach(function (actualFile) {
266
+ if (keepExtraFile && keepExtraFile(actualFile)) {
267
+ return;
268
+ }
269
+
270
+ if (_this3._files.has(actualFile)) {
271
+ return;
272
+ }
273
+
274
+ if (!_this3.onlyValidate) {
275
+ try {
276
+ _this3._filesystem.unlinkSync(path.join(firstLevelPath, actualFile));
277
+ } catch (_unused) {
278
+ throw new Error('CodegenDirectory: Failed to delete `' + actualFile + '` in `' + _this3._dir + '`.');
279
+ }
280
+ }
281
+
282
+ _this3.changes.deleted.push(actualFile);
283
+ });
284
+ });
285
+ } else {
286
+ _this3._filesystem.readdirSync(_this3._dir).forEach(function (actualFile) {
287
+ if (keepExtraFile && keepExtraFile(actualFile)) {
288
+ return;
289
+ }
290
+
291
+ if (actualFile.startsWith('.') || _this3._files.has(actualFile)) {
292
+ return;
293
+ }
294
+
295
+ if (!_this3.onlyValidate) {
296
+ try {
297
+ _this3._filesystem.unlinkSync(path.join(_this3._dir, actualFile));
298
+ } catch (_unused2) {
299
+ throw new Error('CodegenDirectory: Failed to delete `' + actualFile + '` in `' + _this3._dir + '`.');
300
+ }
301
+ }
302
+
303
+ _this3.changes.deleted.push(actualFile);
304
+ });
305
+ }
306
+ });
307
+ };
308
+
309
+ _proto.getPath = function getPath(filename) {
310
+ if (this._shards > 1) {
311
+ var hasher = crypto.createHash('md5');
312
+ hasher.update(filename, 'utf8');
313
+
314
+ var shard = hasher.digest().readUInt32BE(0) % this._shards;
315
+
316
+ return path.join(this._dir, this._getShardName(shard), filename);
317
+ }
318
+
319
+ return path.join(this._dir, filename);
320
+ };
321
+
322
+ _proto._getShardName = function _getShardName(shardNumber) {
323
+ var base16length = Math.ceil(Math.log2(256) / 4);
324
+ return shardNumber.toString(16).padStart(base16length, '0');
325
+ };
326
+
327
+ _proto._addGenerated = function _addGenerated(filename) {
328
+ !!this._files.has(filename) ? process.env.NODE_ENV !== "production" ? invariant(false, 'CodegenDirectory: Tried to generate `%s` twice in `%s`.', filename, this._dir) : invariant(false) : void 0;
329
+
330
+ this._files.add(filename);
331
+ };
332
+
333
+ return CodegenDirectory;
334
+ }();
335
+
336
+ module.exports = CodegenDirectory;