relay-compiler 9.0.0 → 10.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (217) hide show
  1. package/bin/RelayCompilerBin.js.flow +169 -0
  2. package/bin/RelayCompilerMain.js.flow +515 -0
  3. package/bin/__fixtures__/plugin-module.js.flow +17 -0
  4. package/bin/relay-compiler +3862 -2505
  5. package/codegen/CodegenDirectory.js.flow +375 -0
  6. package/codegen/CodegenRunner.js.flow +432 -0
  7. package/codegen/CodegenTypes.js.flow +28 -0
  8. package/codegen/CodegenWatcher.js.flow +254 -0
  9. package/codegen/NormalizationCodeGenerator.js.flow +571 -0
  10. package/codegen/ReaderCodeGenerator.js.flow +512 -0
  11. package/codegen/RelayCodeGenerator.js.flow +85 -0
  12. package/codegen/RelayFileWriter.js.flow +367 -0
  13. package/codegen/SourceControl.js.flow +58 -0
  14. package/codegen/compileRelayArtifacts.js.flow +182 -0
  15. package/codegen/createPrintRequireModuleDependency.js.flow +21 -0
  16. package/codegen/sortObjectByKey.js.flow +25 -0
  17. package/codegen/writeRelayGeneratedFile.js.flow +223 -0
  18. package/core/ASTCache.js.flow +74 -0
  19. package/core/ASTConvert.js.flow +233 -0
  20. package/core/CompilerContext.js.flow +191 -0
  21. package/core/CompilerError.js.flow +250 -0
  22. package/core/DotGraphQLParser.js.flow +39 -0
  23. package/core/GraphQLCompilerProfiler.js.flow +341 -0
  24. package/core/GraphQLDerivedFromMetadata.js.flow +36 -0
  25. package/core/GraphQLWatchmanClient.js.flow +111 -0
  26. package/core/IR.js.flow +326 -0
  27. package/core/IRPrinter.js.flow +477 -0
  28. package/core/IRTransformer.js.flow +377 -0
  29. package/core/IRValidator.js.flow +260 -0
  30. package/core/IRVisitor.js.flow +150 -0
  31. package/core/JSModuleParser.js.flow +24 -0
  32. package/core/RelayCompilerScope.js.flow +199 -0
  33. package/core/RelayFindGraphQLTags.js.flow +119 -0
  34. package/core/RelayGraphQLEnumsGenerator.js.flow +55 -0
  35. package/core/RelayIRTransforms.js.flow +138 -0
  36. package/core/RelayParser.js.flow +1731 -0
  37. package/core/RelaySourceModuleParser.js.flow +135 -0
  38. package/core/Schema.js.flow +2037 -0
  39. package/core/SchemaUtils.js.flow +120 -0
  40. package/core/filterContextForNode.js.flow +50 -0
  41. package/core/getFieldDefinition.js.flow +156 -0
  42. package/core/getIdentifierForArgumentValue.js.flow +49 -0
  43. package/core/getIdentifierForSelection.js.flow +69 -0
  44. package/core/getLiteralArgumentValues.js.flow +32 -0
  45. package/core/getNormalizationOperationName.js.flow +19 -0
  46. package/core/inferRootArgumentDefinitions.js.flow +323 -0
  47. package/index.js +1 -1
  48. package/index.js.flow +200 -0
  49. package/language/RelayLanguagePluginInterface.js.flow +283 -0
  50. package/language/javascript/FindGraphQLTags.js.flow +137 -0
  51. package/language/javascript/RelayFlowBabelFactories.js.flow +176 -0
  52. package/language/javascript/RelayFlowGenerator.js.flow +1099 -0
  53. package/language/javascript/RelayFlowTypeTransformers.js.flow +184 -0
  54. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +34 -0
  55. package/language/javascript/formatGeneratedModule.js.flow +65 -0
  56. package/lib/bin/RelayCompilerBin.js +10 -0
  57. package/lib/bin/RelayCompilerMain.js +127 -130
  58. package/lib/codegen/CodegenDirectory.js +2 -6
  59. package/lib/codegen/CodegenRunner.js +37 -76
  60. package/lib/codegen/CodegenWatcher.js +13 -21
  61. package/lib/codegen/NormalizationCodeGenerator.js +131 -50
  62. package/lib/codegen/ReaderCodeGenerator.js +116 -49
  63. package/lib/codegen/RelayCodeGenerator.js +17 -6
  64. package/lib/codegen/RelayFileWriter.js +15 -37
  65. package/lib/codegen/compileRelayArtifacts.js +16 -30
  66. package/lib/codegen/sortObjectByKey.js +43 -0
  67. package/lib/codegen/writeRelayGeneratedFile.js +86 -96
  68. package/lib/core/ASTCache.js +3 -4
  69. package/lib/core/CompilerContext.js +3 -4
  70. package/lib/core/CompilerError.js +27 -54
  71. package/lib/core/GraphQLCompilerProfiler.js +8 -12
  72. package/lib/core/GraphQLDerivedFromMetadata.js +1 -10
  73. package/lib/core/GraphQLWatchmanClient.js +4 -12
  74. package/lib/core/IRPrinter.js +16 -21
  75. package/lib/core/IRTransformer.js +8 -6
  76. package/lib/core/IRValidator.js +1 -3
  77. package/lib/core/RelayCompilerScope.js +4 -4
  78. package/lib/core/RelayGraphQLEnumsGenerator.js +12 -15
  79. package/lib/core/RelayIRTransforms.js +23 -13
  80. package/lib/core/RelayParser.js +53 -89
  81. package/lib/core/RelaySourceModuleParser.js +1 -3
  82. package/lib/core/Schema.js +106 -77
  83. package/lib/core/SchemaUtils.js +15 -1
  84. package/lib/core/getFieldDefinition.js +12 -15
  85. package/lib/core/getIdentifierForSelection.js +1 -1
  86. package/lib/core/inferRootArgumentDefinitions.js +27 -36
  87. package/lib/index.js +1 -3
  88. package/lib/language/javascript/FindGraphQLTags.js +7 -72
  89. package/lib/language/javascript/RelayFlowBabelFactories.js +5 -5
  90. package/lib/language/javascript/RelayFlowGenerator.js +131 -108
  91. package/lib/language/javascript/RelayFlowTypeTransformers.js +1 -3
  92. package/lib/reporters/ConsoleReporter.js +1 -3
  93. package/lib/reporters/MultiReporter.js +1 -3
  94. package/lib/runner/Artifacts.js +69 -170
  95. package/lib/runner/BufferedFilesystem.js +32 -66
  96. package/lib/runner/GraphQLASTNodeGroup.js +54 -120
  97. package/lib/runner/GraphQLNodeMap.js +14 -19
  98. package/lib/runner/Sources.js +70 -85
  99. package/lib/runner/StrictMap.js +21 -37
  100. package/lib/runner/getChangedNodeNames.js +30 -62
  101. package/lib/transforms/ApplyFragmentArgumentTransform.js +71 -31
  102. package/lib/transforms/ClientExtensionsTransform.js +15 -15
  103. package/lib/transforms/ConnectionTransform.js +26 -38
  104. package/lib/transforms/DeclarativeConnectionMutationTransform.js +225 -0
  105. package/lib/transforms/DeferStreamTransform.js +27 -17
  106. package/lib/transforms/DisallowTypenameOnRoot.js +55 -0
  107. package/lib/transforms/FieldHandleTransform.js +7 -3
  108. package/lib/transforms/FilterCompilerDirectivesTransform.js +29 -0
  109. package/lib/transforms/FlattenTransform.js +23 -19
  110. package/lib/transforms/GenerateIDFieldTransform.js +56 -35
  111. package/lib/transforms/GenerateTypeNameTransform.js +84 -10
  112. package/lib/transforms/InlineDataFragmentTransform.js +9 -4
  113. package/lib/transforms/MaskTransform.js +17 -17
  114. package/lib/transforms/MatchTransform.js +114 -32
  115. package/lib/transforms/ReactFlightComponentTransform.js +162 -0
  116. package/lib/transforms/RefetchableFragmentTransform.js +21 -17
  117. package/lib/transforms/RelayDirectiveTransform.js +8 -3
  118. package/lib/transforms/RequiredFieldTransform.js +380 -0
  119. package/lib/transforms/SkipClientExtensionsTransform.js +8 -0
  120. package/lib/transforms/SkipHandleFieldTransform.js +6 -2
  121. package/lib/transforms/SkipRedundantNodesTransform.js +9 -2
  122. package/lib/transforms/SkipSplitOperationTransform.js +32 -0
  123. package/lib/transforms/SkipUnreachableNodeTransform.js +9 -2
  124. package/lib/transforms/SkipUnusedVariablesTransform.js +18 -17
  125. package/lib/transforms/SplitModuleImportTransform.js +2 -2
  126. package/lib/transforms/TestOperationTransform.js +26 -20
  127. package/lib/transforms/ValidateGlobalVariablesTransform.js +18 -30
  128. package/lib/transforms/ValidateRequiredArgumentsTransform.js +12 -15
  129. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +16 -30
  130. package/lib/transforms/ValidateUnusedVariablesTransform.js +18 -30
  131. package/lib/transforms/query-generators/FetchableQueryGenerator.js +161 -0
  132. package/lib/transforms/query-generators/NodeQueryGenerator.js +22 -3
  133. package/lib/transforms/query-generators/QueryQueryGenerator.js +2 -1
  134. package/lib/transforms/query-generators/ViewerQueryGenerator.js +1 -0
  135. package/lib/transforms/query-generators/index.js +23 -6
  136. package/lib/transforms/query-generators/utils.js +17 -16
  137. package/lib/util/RelayCompilerCache.js +2 -4
  138. package/lib/util/argumentContainsVariables.js +37 -0
  139. package/lib/util/dedupeJSONStringify.js +15 -12
  140. package/lib/util/generateAbstractTypeRefinementKey.js +24 -0
  141. package/lib/util/getModuleName.js +1 -1
  142. package/lib/util/joinArgumentDefinitions.js +3 -1
  143. package/package.json +7 -7
  144. package/relay-compiler.js +4 -4
  145. package/relay-compiler.min.js +4 -4
  146. package/reporters/ConsoleReporter.js.flow +81 -0
  147. package/reporters/MultiReporter.js.flow +43 -0
  148. package/reporters/Reporter.js.flow +19 -0
  149. package/runner/Artifacts.js.flow +219 -0
  150. package/runner/BufferedFilesystem.js.flow +194 -0
  151. package/runner/GraphQLASTNodeGroup.js.flow +176 -0
  152. package/runner/GraphQLASTUtils.js.flow +26 -0
  153. package/runner/GraphQLNodeMap.js.flow +55 -0
  154. package/runner/Sources.js.flow +228 -0
  155. package/runner/StrictMap.js.flow +96 -0
  156. package/runner/compileArtifacts.js.flow +76 -0
  157. package/runner/extractAST.js.flow +100 -0
  158. package/runner/getChangedNodeNames.js.flow +48 -0
  159. package/runner/getSchemaInstance.js.flow +36 -0
  160. package/runner/types.js.flow +37 -0
  161. package/transforms/ApplyFragmentArgumentTransform.js.flow +526 -0
  162. package/transforms/ClientExtensionsTransform.js.flow +224 -0
  163. package/transforms/ConnectionTransform.js.flow +855 -0
  164. package/transforms/DeclarativeConnectionMutationTransform.js.flow +246 -0
  165. package/transforms/DeferStreamTransform.js.flow +265 -0
  166. package/transforms/DisallowIdAsAlias.js.flow +47 -0
  167. package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
  168. package/transforms/FieldHandleTransform.js.flow +79 -0
  169. package/transforms/FilterCompilerDirectivesTransform.js.flow +33 -0
  170. package/transforms/FilterDirectivesTransform.js.flow +45 -0
  171. package/transforms/FlattenTransform.js.flow +454 -0
  172. package/transforms/GenerateIDFieldTransform.js.flow +152 -0
  173. package/transforms/GenerateTypeNameTransform.js.flow +161 -0
  174. package/transforms/InlineDataFragmentTransform.js.flow +125 -0
  175. package/transforms/InlineFragmentsTransform.js.flow +71 -0
  176. package/transforms/MaskTransform.js.flow +126 -0
  177. package/transforms/MatchTransform.js.flow +589 -0
  178. package/transforms/ReactFlightComponentTransform.js.flow +195 -0
  179. package/transforms/RefetchableFragmentTransform.js.flow +272 -0
  180. package/transforms/RelayDirectiveTransform.js.flow +97 -0
  181. package/transforms/RequiredFieldTransform.js.flow +415 -0
  182. package/transforms/SkipClientExtensionsTransform.js.flow +54 -0
  183. package/transforms/SkipHandleFieldTransform.js.flow +44 -0
  184. package/transforms/SkipRedundantNodesTransform.js.flow +257 -0
  185. package/transforms/SkipSplitOperationTransform.js.flow +37 -0
  186. package/transforms/SkipUnreachableNodeTransform.js.flow +149 -0
  187. package/transforms/SkipUnusedVariablesTransform.js.flow +59 -0
  188. package/transforms/SplitModuleImportTransform.js.flow +98 -0
  189. package/transforms/TestOperationTransform.js.flow +142 -0
  190. package/transforms/TransformUtils.js.flow +26 -0
  191. package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
  192. package/transforms/ValidateRequiredArgumentsTransform.js.flow +127 -0
  193. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +112 -0
  194. package/transforms/ValidateUnusedVariablesTransform.js.flow +89 -0
  195. package/transforms/query-generators/FetchableQueryGenerator.js.flow +189 -0
  196. package/transforms/query-generators/NodeQueryGenerator.js.flow +219 -0
  197. package/transforms/query-generators/QueryQueryGenerator.js.flow +57 -0
  198. package/transforms/query-generators/ViewerQueryGenerator.js.flow +97 -0
  199. package/transforms/query-generators/index.js.flow +90 -0
  200. package/transforms/query-generators/utils.js.flow +76 -0
  201. package/util/CodeMarker.js.flow +79 -0
  202. package/util/DefaultHandleKey.js.flow +17 -0
  203. package/util/RelayCompilerCache.js.flow +88 -0
  204. package/util/Rollout.js.flow +39 -0
  205. package/util/TimeReporter.js.flow +79 -0
  206. package/util/areEqualOSS.js.flow +123 -0
  207. package/util/argumentContainsVariables.js.flow +38 -0
  208. package/util/dedupeJSONStringify.js.flow +152 -0
  209. package/util/generateAbstractTypeRefinementKey.js.flow +29 -0
  210. package/util/getDefinitionNodeHash.js.flow +25 -0
  211. package/util/getModuleName.js.flow +39 -0
  212. package/util/joinArgumentDefinitions.js.flow +105 -0
  213. package/util/md5.js.flow +22 -0
  214. package/util/murmurHash.js.flow +94 -0
  215. package/util/nullthrowsOSS.js.flow +25 -0
  216. package/util/orList.js.flow +37 -0
  217. package/util/partitionArray.js.flow +37 -0
@@ -0,0 +1,323 @@
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
+ * @flow strict-local
8
+ * @format
9
+ */
10
+
11
+ // flowlint ambiguous-object-type:error
12
+
13
+ 'use strict';
14
+
15
+ const CompilerContext = require('./CompilerContext');
16
+ const IRVisitor = require('./IRVisitor');
17
+ const SchemaUtils = require('./SchemaUtils');
18
+
19
+ const {createCompilerError} = require('./CompilerError');
20
+
21
+ import type {
22
+ Argument,
23
+ ArgumentDefinition,
24
+ Condition,
25
+ Defer,
26
+ Fragment,
27
+ FragmentSpread,
28
+ LinkedField,
29
+ Root,
30
+ SplitOperation,
31
+ Stream,
32
+ } from './IR';
33
+
34
+ type ArgumentMap = Map<string, ArgumentDefinition>;
35
+
36
+ /**
37
+ * Returns a transformed version of the input context where each document's
38
+ * argument definitions are updated to accurately describe the root variables
39
+ * used (or reachable) from that document:
40
+ * - Fragment argument definitions are updated to include local argument
41
+ * definitions and any root variables that are referenced
42
+ * by the fragment (or any fragments it transitively spreads).
43
+ * - Root argument definitions are updated to reflect the variables
44
+ * referenced locally and all root variables referenced by any
45
+ * fragments it (transitively) spreads.
46
+ */
47
+ function inferRootArgumentDefinitions(
48
+ context: CompilerContext,
49
+ ): CompilerContext {
50
+ // This transform does two main tasks:
51
+ // - Determine the set of root variables referenced locally in each
52
+ // fragment. Note that RootArgumentDefinitions in the fragment's
53
+ // argumentDefinitions can contain spurious entries for legacy
54
+ // reasons. Instead of using those the fragment is traversed
55
+ // to reanalyze variable usage.
56
+ // - Determine the set of root variables that are transitively referenced
57
+ // by each fragment, ie the union of all root variables used in the
58
+ // fragment and any fragments it transitively spreads.
59
+
60
+ // Cache fragments as they are transformed to avoid duplicate processing.
61
+ // Because @argument values don't matter (only variable names/types),
62
+ // each reachable fragment only has to be checked once.
63
+ const transformed = new Map<string, ArgumentMap>();
64
+ const nextContext = new CompilerContext(context.getSchema());
65
+ return nextContext.addAll(
66
+ Array.from(context.documents(), node => {
67
+ switch (node.kind) {
68
+ case 'Fragment': {
69
+ const argumentDefinitions = transformFragmentArguments(
70
+ context,
71
+ transformed,
72
+ node,
73
+ );
74
+ return ({
75
+ ...node,
76
+ argumentDefinitions: Array.from(argumentDefinitions.values()),
77
+ }: Fragment);
78
+ }
79
+ case 'Root': {
80
+ return transformRoot(context, transformed, node);
81
+ }
82
+ case 'SplitOperation': {
83
+ return (node: SplitOperation);
84
+ }
85
+ default: {
86
+ (node: empty);
87
+ throw createCompilerError(
88
+ `inferRootArgumentDefinitions: Unsupported kind '${node.kind}'.`,
89
+ );
90
+ }
91
+ }
92
+ }),
93
+ );
94
+ }
95
+
96
+ function transformRoot(
97
+ context: CompilerContext,
98
+ transformed: Map<string, ArgumentMap>,
99
+ root: Root,
100
+ ): Root {
101
+ // Ignore argument definitions, determine what root variables are
102
+ // transitively referenced
103
+ const argumentDefinitions = new Map();
104
+ const localArgumentDefinitions = new Map();
105
+ for (const [name, argDef] of root.argumentDefinitions.entries()) {
106
+ if (argDef.kind === 'LocalArgumentDefinition') {
107
+ localArgumentDefinitions.set(name, argDef);
108
+ }
109
+ }
110
+ visit(context, transformed, argumentDefinitions, root);
111
+ return {
112
+ ...root,
113
+ argumentDefinitions: Array.from(argumentDefinitions.values(), argDef => {
114
+ if (argDef.kind !== 'RootArgumentDefinition') {
115
+ throw createCompilerError(
116
+ `inferRootArgumentDefinitions: Expected inferred variable '\$${argDef.name}' to be a root variables.`,
117
+ [argDef.loc],
118
+ );
119
+ }
120
+ const localDefinition = localArgumentDefinitions.get(argDef.name);
121
+ const type = localDefinition?.type ?? argDef.type;
122
+ return {
123
+ defaultValue: localDefinition?.defaultValue ?? null,
124
+ kind: 'LocalArgumentDefinition',
125
+ loc: argDef.loc,
126
+ name: argDef.name,
127
+ type: type,
128
+ };
129
+ }),
130
+ };
131
+ }
132
+
133
+ function transformFragmentArguments(
134
+ context: CompilerContext,
135
+ transformed: Map<string, ArgumentMap>,
136
+ fragment: Fragment,
137
+ ): ArgumentMap {
138
+ const name = fragment.name;
139
+ const transformedArguments = transformed.get(name);
140
+ if (transformedArguments != null) {
141
+ return transformedArguments;
142
+ }
143
+ // Start with only the explicitly defined local arguments, recover the
144
+ // correct set of root variables excluding invalid @arguments values.
145
+ const argumentDefinitions: ArgumentMap = new Map();
146
+ fragment.argumentDefinitions.forEach(argDef => {
147
+ if (argDef.kind === 'LocalArgumentDefinition') {
148
+ argumentDefinitions.set(argDef.name, argDef);
149
+ }
150
+ });
151
+ // Break cycles by initially caching a version that only has local
152
+ // arguments. If the current fragment is reached again, it won't have
153
+ // any root variables to add to its parents. The traversal below will
154
+ // find any root variables and update the cached version of the
155
+ // fragment.
156
+ transformed.set(name, argumentDefinitions);
157
+ visit(context, transformed, argumentDefinitions, fragment);
158
+ transformed.set(name, argumentDefinitions);
159
+ return argumentDefinitions;
160
+ }
161
+
162
+ function visit(
163
+ context: CompilerContext,
164
+ transformed: Map<string, ArgumentMap>,
165
+ argumentDefinitions: ArgumentMap,
166
+ node: Fragment | Root,
167
+ ): void {
168
+ IRVisitor.visit(node, {
169
+ FragmentSpread(fragmentSpread: FragmentSpread) {
170
+ const fragment = context.getFragment(
171
+ fragmentSpread.name,
172
+ fragmentSpread.loc,
173
+ );
174
+ const referencedFragmentArguments = transformFragmentArguments(
175
+ context,
176
+ transformed,
177
+ fragment,
178
+ );
179
+ // Detect root variables being passed as the value of @arguments;
180
+ // recover the expected type from the corresponding argument definitions.
181
+ fragmentSpread.args.forEach(arg => {
182
+ const argDef = referencedFragmentArguments.get(arg.name);
183
+ if (
184
+ argDef != null &&
185
+ arg.value.kind === 'Variable' &&
186
+ !argumentDefinitions.has(arg.value.variableName)
187
+ ) {
188
+ argumentDefinitions.set(arg.value.variableName, {
189
+ kind: 'RootArgumentDefinition',
190
+ loc: {kind: 'Derived', source: arg.loc},
191
+ name: arg.value.variableName,
192
+ type: argDef.type,
193
+ });
194
+ }
195
+ });
196
+ // Merge any root variables referenced by the spread fragment
197
+ // into this (parent) fragment's arguments.
198
+ for (const argDef of referencedFragmentArguments.values()) {
199
+ if (argDef.kind === 'RootArgumentDefinition') {
200
+ argumentDefinitions.set(argDef.name, argDef);
201
+ }
202
+ }
203
+ },
204
+ Argument(argument: Argument) {
205
+ if (argument.value.kind === 'Literal') {
206
+ return false;
207
+ }
208
+ const values = [argument.value];
209
+ while (values.length > 0) {
210
+ const currentValue = values.pop();
211
+ if (currentValue.kind === 'Variable') {
212
+ const type = currentValue.type ?? argument.type;
213
+ if (type == null) {
214
+ continue;
215
+ }
216
+ if (!argumentDefinitions.has(currentValue.variableName)) {
217
+ // root variable
218
+ argumentDefinitions.set(currentValue.variableName, {
219
+ kind: 'RootArgumentDefinition',
220
+ loc: {kind: 'Derived', source: argument.loc},
221
+ name: currentValue.variableName,
222
+ type: type,
223
+ });
224
+ }
225
+ } else if (currentValue.kind === 'ObjectValue') {
226
+ currentValue.fields.forEach(fieldValue => {
227
+ if (fieldValue.value.kind !== 'Literal') {
228
+ values.push(fieldValue.value);
229
+ }
230
+ });
231
+ } else if (currentValue.kind === 'ListValue') {
232
+ currentValue.items.forEach(listValue => {
233
+ if (listValue.kind !== 'Literal') {
234
+ values.push(listValue);
235
+ }
236
+ });
237
+ }
238
+ }
239
+ return false;
240
+ },
241
+ Condition(condition: Condition) {
242
+ const variable = condition.condition;
243
+ if (variable.kind !== 'Variable') {
244
+ return;
245
+ }
246
+ const type =
247
+ variable.type ??
248
+ SchemaUtils.getNonNullBooleanInput(context.getSchema());
249
+ if (!argumentDefinitions.has(variable.variableName)) {
250
+ // root variable
251
+ argumentDefinitions.set(variable.variableName, {
252
+ kind: 'RootArgumentDefinition',
253
+ loc: {kind: 'Derived', source: variable.loc},
254
+ name: variable.variableName,
255
+ type: type,
256
+ });
257
+ }
258
+ },
259
+ Defer(defer: Defer) {
260
+ const variable = defer.if;
261
+ if (variable == null || variable.kind !== 'Variable') {
262
+ return;
263
+ }
264
+ const type =
265
+ variable.type ??
266
+ SchemaUtils.getNonNullBooleanInput(context.getSchema());
267
+ if (!argumentDefinitions.has(variable.variableName)) {
268
+ // root variable
269
+ argumentDefinitions.set(variable.variableName, {
270
+ kind: 'RootArgumentDefinition',
271
+ loc: {kind: 'Derived', source: variable.loc},
272
+ name: variable.variableName,
273
+ type: type,
274
+ });
275
+ }
276
+ },
277
+ Stream(stream: Stream) {
278
+ [stream.if, stream.initialCount].forEach(variable => {
279
+ if (variable == null || variable.kind !== 'Variable') {
280
+ return;
281
+ }
282
+
283
+ const type =
284
+ variable.type ??
285
+ SchemaUtils.getNonNullBooleanInput(context.getSchema());
286
+ if (!argumentDefinitions.has(variable.variableName)) {
287
+ // root variable
288
+ argumentDefinitions.set(variable.variableName, {
289
+ kind: 'RootArgumentDefinition',
290
+ loc: {kind: 'Derived', source: variable.loc},
291
+ name: variable.variableName,
292
+ type,
293
+ });
294
+ }
295
+ });
296
+ },
297
+ LinkedField(field: LinkedField) {
298
+ if (!field.handles) {
299
+ return;
300
+ }
301
+ field.handles.forEach(handle => {
302
+ const variable = handle.dynamicKey;
303
+ if (variable == null) {
304
+ return;
305
+ }
306
+ const type =
307
+ variable.type ??
308
+ SchemaUtils.getNullableStringInput(context.getSchema());
309
+ if (!argumentDefinitions.has(variable.variableName)) {
310
+ // root variable
311
+ argumentDefinitions.set(variable.variableName, {
312
+ kind: 'RootArgumentDefinition',
313
+ loc: {kind: 'Derived', source: variable.loc},
314
+ name: variable.variableName,
315
+ type: type,
316
+ });
317
+ }
318
+ });
319
+ },
320
+ });
321
+ }
322
+
323
+ module.exports = inferRootArgumentDefinitions;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v9.0.0
2
+ * Relay v10.1.0
3
3
  *
4
4
  * Copyright (c) Facebook, Inc. and its affiliates.
5
5
  *
package/index.js.flow ADDED
@@ -0,0 +1,200 @@
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
+ * @flow strict-local
8
+ * @format
9
+ */
10
+
11
+ // flowlint ambiguous-object-type:error
12
+
13
+ 'use strict';
14
+
15
+ const ASTCache = require('./core/ASTCache');
16
+ const ASTConvert = require('./core/ASTConvert');
17
+ const Artifacts = require('./runner/Artifacts');
18
+ const BufferedFilesystem = require('./runner/BufferedFilesystem');
19
+ const CodeMarker = require('./util/CodeMarker');
20
+ const CodegenDirectory = require('./codegen/CodegenDirectory');
21
+ const CodegenRunner = require('./codegen/CodegenRunner');
22
+ const CodegenWatcher = require('./codegen/CodegenWatcher');
23
+ const CompilerContext = require('./core/CompilerContext');
24
+ const CompilerError = require('./core/CompilerError');
25
+ const ConsoleReporter = require('./reporters/ConsoleReporter');
26
+ const DotGraphQLParser = require('./core/DotGraphQLParser');
27
+ const FindGraphQLTags = require('./language/javascript/FindGraphQLTags');
28
+ const GraphQLASTNodeGroup = require('./runner/GraphQLASTNodeGroup');
29
+ const GraphQLASTUtils = require('./runner/GraphQLASTUtils');
30
+ const GraphQLCompilerProfiler = require('./core/GraphQLCompilerProfiler');
31
+ const GraphQLNodeMap = require('./runner/GraphQLNodeMap');
32
+ const GraphQLWatchmanClient = require('./core/GraphQLWatchmanClient');
33
+ const IRPrinter = require('./core/IRPrinter');
34
+ const IRTransformer = require('./core/IRTransformer');
35
+ const IRVisitor = require('./core/IRVisitor');
36
+ const JSModuleParser = require('./core/JSModuleParser');
37
+ const MultiReporter = require('./reporters/MultiReporter');
38
+ const RelayCodeGenerator = require('./codegen/RelayCodeGenerator');
39
+ const RelayFileWriter = require('./codegen/RelayFileWriter');
40
+ const RelayFindGraphQLTags = require('./core/RelayFindGraphQLTags');
41
+ const RelayFlowGenerator = require('./language/javascript/RelayFlowGenerator');
42
+ const RelayIRTransforms = require('./core/RelayIRTransforms');
43
+ const RelayParser = require('./core/RelayParser');
44
+ const RelaySchema = require('./core/Schema');
45
+ const Rollout = require('./util/Rollout');
46
+ const SchemaUtils = require('./core/SchemaUtils');
47
+ const Sources = require('./runner/Sources');
48
+ const StrictMap = require('./runner/StrictMap');
49
+ const TimeReporter = require('./util/TimeReporter');
50
+
51
+ const compileArtifacts = require('./runner/compileArtifacts');
52
+ const compileRelayArtifacts = require('./codegen/compileRelayArtifacts');
53
+ const extractAST = require('./runner/extractAST');
54
+ const filterContextForNode = require('./core/filterContextForNode');
55
+ const getChangedNodeNames = require('./runner/getChangedNodeNames');
56
+ const getDefinitionNodeHash = require('./util/getDefinitionNodeHash');
57
+ const getIdentifierForArgumentValue = require('./core/getIdentifierForArgumentValue');
58
+ const getLiteralArgumentValues = require('./core/getLiteralArgumentValues');
59
+ const getNormalizationOperationName = require('./core/getNormalizationOperationName');
60
+ const getSchemaInstance = require('./runner/getSchemaInstance');
61
+ const md5 = require('./util/md5');
62
+ const writeRelayGeneratedFile = require('./codegen/writeRelayGeneratedFile');
63
+
64
+ const {main} = require('./bin/RelayCompilerMain');
65
+ const {SourceControlMercurial} = require('./codegen/SourceControl');
66
+ const {
67
+ getReaderSourceDefinitionName,
68
+ } = require('./core/GraphQLDerivedFromMetadata');
69
+ const {
70
+ formatGeneratedCommonjsModule: formatGeneratedModule,
71
+ } = require('./language/javascript/formatGeneratedModule');
72
+
73
+ export type {Filesystem} from './codegen/CodegenDirectory';
74
+ export type {
75
+ WriteFiles,
76
+ WriteFilesOptions,
77
+ ParserConfig,
78
+ WriterConfig,
79
+ } from './codegen/CodegenRunner';
80
+ export type {CompileResult, File} from './codegen/CodegenTypes';
81
+ export type {FileFilter, WatchmanExpression} from './codegen/CodegenWatcher';
82
+ export type {SourceControl} from './codegen/SourceControl';
83
+ export type {RelayCompilerTransforms} from './codegen/compileRelayArtifacts';
84
+ export type {IRTransform} from './core/CompilerContext';
85
+ export type {
86
+ Argument,
87
+ ArgumentDefinition,
88
+ ArgumentValue,
89
+ Condition,
90
+ Definition,
91
+ Directive,
92
+ Field,
93
+ Fragment,
94
+ FragmentSpread,
95
+ GeneratedDefinition,
96
+ Handle,
97
+ InlineFragment,
98
+ IR,
99
+ LinkedField,
100
+ ListValue,
101
+ Literal,
102
+ LocalArgumentDefinition,
103
+ ModuleImport,
104
+ Metadata,
105
+ Node,
106
+ ObjectFieldValue,
107
+ ObjectValue,
108
+ Request,
109
+ Root,
110
+ RootArgumentDefinition,
111
+ ScalarField,
112
+ Selection,
113
+ SplitOperation,
114
+ Variable,
115
+ } from './core/IR';
116
+ export type {Schema, TypeID, FieldID} from './core/Schema';
117
+ export type {
118
+ FormatModule,
119
+ TypeGenerator,
120
+ } from './language/RelayLanguagePluginInterface';
121
+ export type {Reporter} from './reporters/Reporter';
122
+ export type {
123
+ ArtifactMap,
124
+ ArtifactState,
125
+ SerializedArtifactState,
126
+ } from './runner/Artifacts';
127
+ export type {NodeGroup} from './runner/GraphQLASTNodeGroup';
128
+ export type {SourceChanges} from './runner/Sources';
129
+ export type {StrictMap} from './runner/StrictMap';
130
+ export type {ExtractFn} from './runner/extractAST';
131
+ export type {SavedStateCollection, WatchmanFile} from './runner/types';
132
+ export type {FlattenOptions} from './transforms/FlattenTransform';
133
+
134
+ module.exports = {
135
+ relayCompiler: main,
136
+
137
+ ASTConvert,
138
+ CodegenDirectory,
139
+ CodegenRunner,
140
+ CodegenWatcher,
141
+ CodeMarker,
142
+ CompilerContext,
143
+ CompilerError,
144
+ ConsoleReporter,
145
+ DotGraphQLParser,
146
+ ASTCache,
147
+ IRTransformer,
148
+ IRVisitor,
149
+ Printer: IRPrinter,
150
+ Profiler: GraphQLCompilerProfiler,
151
+ Rollout,
152
+ SchemaUtils,
153
+ SourceControlMercurial,
154
+ WatchmanClient: GraphQLWatchmanClient,
155
+
156
+ filterContextForNode,
157
+ getIdentifierForArgumentValue,
158
+ getNormalizationOperationName,
159
+ getLiteralArgumentValues,
160
+
161
+ Parser: RelayParser,
162
+ Schema: RelaySchema,
163
+ CodeGenerator: RelayCodeGenerator,
164
+ FlowGenerator: RelayFlowGenerator,
165
+
166
+ FileWriter: RelayFileWriter,
167
+ IRTransforms: RelayIRTransforms,
168
+ JSModuleParser,
169
+ MultiReporter,
170
+ Runner: CodegenRunner,
171
+ TimeReporter,
172
+ compileRelayArtifacts,
173
+ formatGeneratedModule,
174
+ convertASTDocuments: ASTConvert.convertASTDocuments,
175
+ transformASTSchema: ASTConvert.transformASTSchema,
176
+
177
+ getReaderSourceDefinitionName,
178
+
179
+ writeRelayGeneratedFile,
180
+
181
+ Sources,
182
+ __internal: {
183
+ Artifacts,
184
+ BufferedFilesystem,
185
+ GraphQLASTNodeGroup,
186
+ GraphQLASTUtils,
187
+ GraphQLNodeMap,
188
+ FindGraphQLTags,
189
+ StrictMap,
190
+ RelayFindGraphQLTags,
191
+ compileArtifacts,
192
+ extractFromJS: extractAST.extractFromJS,
193
+ getChangedNodeNames,
194
+ getDefinitionNodeHash,
195
+ getSchemaInstance,
196
+ md5,
197
+ parseExecutableNode: extractAST.parseExecutableNode,
198
+ toASTRecord: extractAST.toASTRecord,
199
+ },
200
+ };