@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,251 @@
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 _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
16
+
17
+ var _require = require('graphql'),
18
+ GraphQLError = _require.GraphQLError;
19
+
20
+ /**
21
+ * Creates an error describing invalid application code (GraphQL/Schema)
22
+ * that must be fixed by the end developer. This should only be used
23
+ * for local errors that don't affect processing of other user code.
24
+ */
25
+ function createUserError(message, locations, nodes) {
26
+ var messageWithLocations = message;
27
+
28
+ if (locations != null) {
29
+ var printedLocations = printLocations(locations);
30
+ messageWithLocations = printedLocations.length === 0 ? message : [message].concat(printedLocations).join('\n\n') + '\n';
31
+ }
32
+
33
+ return new GraphQLError(messageWithLocations, nodes !== null && nodes !== void 0 ? nodes : []);
34
+ }
35
+ /**
36
+ * Similar to createUserError but for errors that are *not* recoverable:
37
+ * the compiler should not continue to process other inputs because their
38
+ * validity can't be determined.
39
+ */
40
+
41
+
42
+ function createNonRecoverableUserError(message, locations, nodes) {
43
+ var messageWithLocations = message;
44
+
45
+ if (locations != null) {
46
+ var printedLocations = printLocations(locations);
47
+ messageWithLocations = printedLocations.length === 0 ? message : [message].concat(printedLocations).join('\n\n') + '\n';
48
+ }
49
+
50
+ var error = new GraphQLError(messageWithLocations, nodes !== null && nodes !== void 0 ? nodes : []);
51
+ return new Error(error.message);
52
+ }
53
+ /**
54
+ * Creates an error describing a problem with the compiler itself - such
55
+ * as a broken invariant - that must be fixed within the compiler.
56
+ */
57
+
58
+
59
+ function createCompilerError(message, locations, nodes) {
60
+ var messageWithLocations = message;
61
+
62
+ if (locations != null) {
63
+ var printedLocations = printLocations(locations);
64
+ messageWithLocations = printedLocations.length === 0 ? message : [message].concat(printedLocations).join('\n\n') + '\n';
65
+ }
66
+
67
+ var error = new GraphQLError("Internal Error: ".concat(messageWithLocations), nodes !== null && nodes !== void 0 ? nodes : []);
68
+ return new Error(error.message);
69
+ }
70
+ /**
71
+ * Iterates over the elements of some iterable value, calling the
72
+ * supplied callback for each item with a guard for user errors.
73
+ *
74
+ * Non-user errors abort the iteration and are instantly rethrown.
75
+ * User errors are collected and rethrown at the end, if multiple user errors
76
+ * occur, a combined error is thrown.
77
+ */
78
+
79
+
80
+ function eachWithCombinedError(iterable, fn) {
81
+ var errors = [];
82
+
83
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(iterable),
84
+ _step;
85
+
86
+ try {
87
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
88
+ var item = _step.value;
89
+
90
+ try {
91
+ fn(item);
92
+ } catch (error) {
93
+ if (error instanceof GraphQLError) {
94
+ errors.push(error);
95
+ } else {
96
+ throw error;
97
+ }
98
+ }
99
+ }
100
+ } catch (err) {
101
+ _iterator.e(err);
102
+ } finally {
103
+ _iterator.f();
104
+ }
105
+
106
+ if (errors.length > 0) {
107
+ if (errors.length === 1) {
108
+ throw createUserError(String(errors[0]).split('\n').map(function (line, index) {
109
+ return index === 0 ? "- ".concat(line) : " ".concat(line);
110
+ }).join('\n'));
111
+ }
112
+
113
+ throw createUserError("Encountered ".concat(errors.length, " errors:\n") + errors.map(function (error) {
114
+ return String(error).split('\n').map(function (line, index) {
115
+ return index === 0 ? "- ".concat(line) : " ".concat(line);
116
+ }).join('\n');
117
+ }).join('\n'));
118
+ }
119
+ }
120
+
121
+ function printLocations(locations) {
122
+ var printedLocations = [];
123
+
124
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(locations),
125
+ _step2;
126
+
127
+ try {
128
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
129
+ var location = _step2.value;
130
+ var sourceLocation = location;
131
+
132
+ while (sourceLocation.kind === 'Derived') {
133
+ sourceLocation = sourceLocation.source;
134
+ }
135
+
136
+ switch (sourceLocation.kind) {
137
+ case 'Source':
138
+ {
139
+ // source location
140
+ var prefix = sourceLocation === location ? 'Source: ' : 'Source (derived): ';
141
+ printedLocations.push(prefix + highlightSourceAtLocation(sourceLocation.source, getLocation(sourceLocation.source, sourceLocation.start)));
142
+ break;
143
+ }
144
+
145
+ case 'Generated':
146
+ {
147
+ printedLocations.push('Source: (generated)');
148
+ break;
149
+ }
150
+
151
+ case 'Unknown':
152
+ {
153
+ printedLocations.push('Source: (unknown)');
154
+ break;
155
+ }
156
+
157
+ default:
158
+ {
159
+ sourceLocation;
160
+ throw createCompilerError("CompilerError: cannot print location '".concat(String(sourceLocation), "'."));
161
+ }
162
+ }
163
+ }
164
+ } catch (err) {
165
+ _iterator2.e(err);
166
+ } finally {
167
+ _iterator2.f();
168
+ }
169
+
170
+ return printedLocations;
171
+ }
172
+ /**
173
+ * Render a helpful description of the location of the error in the GraphQL
174
+ * Source document.
175
+ */
176
+
177
+
178
+ function highlightSourceAtLocation(source, location) {
179
+ var firstLineColumnOffset = source.locationOffset.column - 1;
180
+ var body = whitespace(firstLineColumnOffset) + source.body;
181
+ var lineIndex = location.line - 1;
182
+ var lineOffset = source.locationOffset.line - 1;
183
+ var lineNum = location.line + lineOffset;
184
+ var columnOffset = location.line === 1 ? firstLineColumnOffset : 0;
185
+ var columnNum = location.column + columnOffset;
186
+ var lines = body.split(/\r\n|[\n\r]/g);
187
+ return "".concat(source.name, " (").concat(lineNum, ":").concat(columnNum, ")\n") + printPrefixedLines([// Lines specified like this: ["prefix", "string"],
188
+ ["".concat(lineNum - 1, ": "), lines[lineIndex - 1]], ["".concat(lineNum, ": "), lines[lineIndex]], ['', whitespace(columnNum - 1) + '^'], ["".concat(lineNum + 1, ": "), lines[lineIndex + 1]]]);
189
+ }
190
+
191
+ function printPrefixedLines(lines) {
192
+ var existingLines = lines.filter(function (_ref) {
193
+ var _ = _ref[0],
194
+ line = _ref[1];
195
+ return line !== undefined;
196
+ });
197
+ var padLen = 0;
198
+
199
+ var _iterator3 = (0, _createForOfIteratorHelper2["default"])(existingLines),
200
+ _step3;
201
+
202
+ try {
203
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
204
+ var _step3$value = _step3.value,
205
+ prefix = _step3$value[0];
206
+ padLen = Math.max(padLen, prefix.length);
207
+ }
208
+ } catch (err) {
209
+ _iterator3.e(err);
210
+ } finally {
211
+ _iterator3.f();
212
+ }
213
+
214
+ return existingLines.map(function (_ref2) {
215
+ var prefix = _ref2[0],
216
+ line = _ref2[1];
217
+ return lpad(padLen, prefix) + line;
218
+ }).join('\n');
219
+ }
220
+
221
+ function whitespace(len) {
222
+ return Array(len + 1).join(' ');
223
+ }
224
+
225
+ function lpad(len, str) {
226
+ return whitespace(len - str.length) + str;
227
+ }
228
+
229
+ function getLocation(source, position) {
230
+ var lineRegexp = /\r\n|[\n\r]/g;
231
+ var line = 1;
232
+ var column = position + 1;
233
+ var match;
234
+
235
+ while ((match = lineRegexp.exec(source.body)) && match.index < position) {
236
+ line += 1;
237
+ column = position + 1 - (match.index + match[0].length);
238
+ }
239
+
240
+ return {
241
+ line: line,
242
+ column: column
243
+ };
244
+ }
245
+
246
+ module.exports = {
247
+ createCompilerError: createCompilerError,
248
+ createNonRecoverableUserError: createNonRecoverableUserError,
249
+ createUserError: createUserError,
250
+ eachWithCombinedError: eachWithCombinedError
251
+ };
@@ -0,0 +1,40 @@
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 ASTCache = require('./ASTCache');
14
+
15
+ var fs = require('fs');
16
+
17
+ var path = require('path');
18
+
19
+ var _require = require('graphql'),
20
+ parse = _require.parse,
21
+ Source = _require.Source;
22
+
23
+ function parseFile(baseDir, file) {
24
+ var text = fs.readFileSync(path.join(baseDir, file.relPath), 'utf8');
25
+ return parse(new Source(text, file.relPath), {
26
+ experimentalFragmentVariables: true
27
+ });
28
+ }
29
+
30
+ function getParser(baseDir) {
31
+ return new ASTCache({
32
+ baseDir: baseDir,
33
+ parse: parseFile
34
+ });
35
+ }
36
+
37
+ module.exports = {
38
+ parseFile: parseFile,
39
+ getParser: getParser
40
+ };
@@ -0,0 +1,299 @@
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 _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
14
+
15
+ var invariant = require('invariant');
16
+ /**
17
+ * The compiler profiler builds a "call graph" of high level operations as a
18
+ * means of tracking time spent over the course of running the compiler.
19
+ */
20
+
21
+
22
+ var enabled = false;
23
+ var traces = [{
24
+ ph: 'M',
25
+ pid: 0,
26
+ tid: 0,
27
+ name: 'process_name',
28
+ args: {
29
+ name: 'relay-compiler'
30
+ }
31
+ }, {
32
+ ph: 'M',
33
+ pid: 0,
34
+ tid: 0,
35
+ name: 'thread_name',
36
+ args: {
37
+ name: 'relay-compiler'
38
+ }
39
+ }];
40
+ var stack = [];
41
+
42
+ function enable() {
43
+ enabled = true;
44
+ }
45
+
46
+ function getTraces() {
47
+ return traces;
48
+ }
49
+ /**
50
+ * Run the provided function as part of a stack profile.
51
+ */
52
+
53
+
54
+ function run(name, fn) {
55
+ return instrument(fn, name)();
56
+ }
57
+ /**
58
+ * Run the provided async function as part context in a stack profile.
59
+ * See instrumentAsyncContext() for limitations and usage notes.
60
+ */
61
+
62
+
63
+ function asyncContext(name, fn) {
64
+ return instrumentAsyncContext(fn, name)();
65
+ }
66
+ /**
67
+ * Wait for the provided async operation as an async profile.
68
+ */
69
+
70
+
71
+ function waitFor(name, fn) {
72
+ return instrumentWait(fn, name)();
73
+ }
74
+ /**
75
+ * Return a new instrumented sync function to be part of a stack profile.
76
+ *
77
+ * This instruments synchronous functions to be displayed in a stack
78
+ * visualization. To instrument async functions, see instrumentAsyncContext()
79
+ * and instrumentWait().
80
+ */
81
+
82
+
83
+ function instrument(fn, name) {
84
+ var _ref;
85
+
86
+ if (!enabled) {
87
+ return fn;
88
+ }
89
+
90
+ var profileName = (_ref = name !== null && name !== void 0 ? name : // $FlowFixMe[prop-missing] - Flow no longer considers statics of functions as any
91
+ fn.displayName) !== null && _ref !== void 0 ? _ref : fn.name;
92
+
93
+ var instrumented = function instrumented() {
94
+ var traceId = start(profileName);
95
+
96
+ try {
97
+ return fn.apply(this, arguments);
98
+ } finally {
99
+ end(traceId);
100
+ }
101
+ };
102
+
103
+ instrumented.displayName = profileName;
104
+ return instrumented;
105
+ }
106
+ /**
107
+ * Return a new instrumented async function which provides context for a stack.
108
+ *
109
+ * Because the resulting profiling information will be incorporated into a
110
+ * stack visualization, the instrumented function must represent a distinct
111
+ * region of time which does not overlap with any other async context.
112
+ *
113
+ * In other words, functions instrumented with instrumentAsyncContext must not
114
+ * run in parallel via Promise.all().
115
+ *
116
+ * To instrument functions which will run in parallel, use instrumentWait().
117
+ */
118
+
119
+
120
+ function instrumentAsyncContext(fn, name) {
121
+ var _ref2;
122
+
123
+ if (!enabled) {
124
+ return fn;
125
+ }
126
+
127
+ var profileName = (_ref2 = name !== null && name !== void 0 ? name : // $FlowFixMe[prop-missing] - Flow no longer considers statics of functions as any
128
+ fn.displayName) !== null && _ref2 !== void 0 ? _ref2 : fn.name;
129
+
130
+ var instrumented = /*#__PURE__*/function () {
131
+ var _instrumented = _asyncToGenerator(function* () {
132
+ var traceId = start(profileName);
133
+
134
+ try {
135
+ return yield fn.apply(this, arguments);
136
+ } finally {
137
+ end(traceId);
138
+ }
139
+ });
140
+
141
+ function instrumented() {
142
+ return _instrumented.apply(this, arguments);
143
+ }
144
+
145
+ return instrumented;
146
+ }();
147
+
148
+ instrumented.displayName = profileName;
149
+ return instrumented;
150
+ }
151
+ /**
152
+ * Return a new instrumented function which performs an awaited async operation.
153
+ *
154
+ * The instrumented function is not included in the overall run time of the
155
+ * compiler, instead it captures the time waiting on some asynchronous external
156
+ * resource such as network or filesystem which are often run in parallel.
157
+ */
158
+
159
+
160
+ function instrumentWait(fn, name) {
161
+ var _ref3;
162
+
163
+ if (!enabled) {
164
+ return fn;
165
+ }
166
+
167
+ var profileName = (_ref3 = name !== null && name !== void 0 ? name : // $FlowFixMe[prop-missing] - Flow no longer considers statics of functions as any
168
+ fn.displayName) !== null && _ref3 !== void 0 ? _ref3 : fn.name;
169
+
170
+ var instrumented = /*#__PURE__*/function () {
171
+ var _instrumented2 = _asyncToGenerator(function* () {
172
+ var traceId = startWait(profileName);
173
+
174
+ try {
175
+ return yield fn.apply(this, arguments);
176
+ } finally {
177
+ end(traceId);
178
+ }
179
+ });
180
+
181
+ function instrumented() {
182
+ return _instrumented2.apply(this, arguments);
183
+ }
184
+
185
+ return instrumented;
186
+ }();
187
+
188
+ instrumented.displayName = profileName;
189
+ return instrumented;
190
+ }
191
+
192
+ var T_ZERO = process.hrtime(); // Return a Uint32 of microtime duration since program start.
193
+
194
+ function microtime() {
195
+ var hrtime = process.hrtime(T_ZERO); // eslint-disable-next-line no-bitwise
196
+
197
+ return 0 | hrtime[0] * 1e6 + Math.round(hrtime[1] / 1e3);
198
+ }
199
+ /**
200
+ * Start a stack profile with a particular name, returns an ID to pass to end().
201
+ *
202
+ * Other profiles may start before this one ends, which will be represented as
203
+ * nested operations, however all nested operations must end before this ends.
204
+ *
205
+ * In particular, be careful to end after errors.
206
+ */
207
+
208
+
209
+ function start(name) {
210
+ var beginTrace = {
211
+ ph: 'B',
212
+ name: name,
213
+ pid: 0,
214
+ tid: 0,
215
+ ts: microtime()
216
+ };
217
+ traces.push(beginTrace);
218
+ stack.push(beginTrace);
219
+ return traces.length - 1;
220
+ }
221
+
222
+ var asyncID = 0;
223
+ /**
224
+ * Start an async wait profile with a particular name, returns an ID to pass
225
+ * to end().
226
+ *
227
+ * Other profiles may start before this one ends, which will be represented as
228
+ * nested operations, however all nested operations must end before this ends.
229
+ *
230
+ * In particular, be careful to end after errors.
231
+ */
232
+
233
+ function startWait(name) {
234
+ traces.push({
235
+ ph: 'b',
236
+ name: name,
237
+ cat: 'wait',
238
+ id: asyncID++,
239
+ pid: 0,
240
+ tid: 0,
241
+ ts: microtime()
242
+ });
243
+ return traces.length - 1;
244
+ }
245
+
246
+ function end(traceIdx) {
247
+ var trace = traces[traceIdx];
248
+
249
+ if (trace.ph === 'b') {
250
+ traces.push({
251
+ ph: 'e',
252
+ cat: trace.cat,
253
+ name: trace.name,
254
+ id: trace.id,
255
+ pid: trace.pid,
256
+ tid: trace.tid,
257
+ ts: microtime()
258
+ });
259
+ return;
260
+ }
261
+
262
+ !(trace.ph === 'B') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Begin trace phase') : invariant(false) : void 0;
263
+ !(stack.pop() === trace) ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLCompilerProfiler: The profile trace %s ended before nested traces. ' + 'If it is async, try using Profile.waitFor or Profile.profileWait.', trace.name) : invariant(false) : void 0;
264
+ var prevTrace = traces[traces.length - 1];
265
+
266
+ if (trace === prevTrace) {
267
+ traces[traceIdx] = {
268
+ ph: 'X',
269
+ name: trace.name,
270
+ pid: trace.pid,
271
+ tid: trace.tid,
272
+ ts: trace.ts,
273
+ dur: microtime() - trace.ts
274
+ };
275
+ return;
276
+ }
277
+
278
+ traces.push({
279
+ ph: 'E',
280
+ name: trace.name,
281
+ pid: trace.pid,
282
+ tid: trace.tid,
283
+ ts: microtime()
284
+ });
285
+ }
286
+
287
+ module.exports = {
288
+ enable: enable,
289
+ getTraces: getTraces,
290
+ run: run,
291
+ asyncContext: asyncContext,
292
+ waitFor: waitFor,
293
+ instrument: instrument,
294
+ instrumentAsyncContext: instrumentAsyncContext,
295
+ instrumentWait: instrumentWait,
296
+ start: start,
297
+ startWait: startWait,
298
+ end: end
299
+ };
@@ -0,0 +1,31 @@
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
+ /**
14
+ * Helpers to retieve the name of the document from which the input derives:
15
+ * this is either the name of the input itself (if it is not a derived node)
16
+ * or the metadata.derivedFrom property for derived nodes.
17
+ */
18
+ // Version for generated nodes
19
+ function getReaderSourceDefinitionName(node) {
20
+ var _node$params$metadata, _node$metadata;
21
+
22
+ var _ref = node.kind === 'Request' ? [node.params.name, (_node$params$metadata = node.params.metadata) === null || _node$params$metadata === void 0 ? void 0 : _node$params$metadata.derivedFrom] : node.kind === 'SplitOperation' ? [node.name, (_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.derivedFrom] : [node.name, null],
23
+ name = _ref[0],
24
+ derivedFrom = _ref[1];
25
+
26
+ return typeof derivedFrom === 'string' ? derivedFrom : name;
27
+ }
28
+
29
+ module.exports = {
30
+ getReaderSourceDefinitionName: getReaderSourceDefinitionName
31
+ };