relay-compiler 12.0.0 → 13.0.0-rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. package/cli.js +23 -0
  2. package/index.js +19 -3
  3. package/linux-x64/relay +0 -0
  4. package/macos-x64/relay +0 -0
  5. package/package.json +2 -26
  6. package/win-x64/relay.exe +0 -0
  7. package/bin/RelayCompilerBin.js.flow +0 -169
  8. package/bin/RelayCompilerMain.js.flow +0 -515
  9. package/bin/__fixtures__/plugin-module.js.flow +0 -17
  10. package/bin/relay-compiler +0 -19066
  11. package/codegen/CodegenDirectory.js.flow +0 -375
  12. package/codegen/CodegenRunner.js.flow +0 -432
  13. package/codegen/CodegenTypes.js.flow +0 -28
  14. package/codegen/CodegenWatcher.js.flow +0 -254
  15. package/codegen/NormalizationCodeGenerator.js.flow +0 -566
  16. package/codegen/ReaderCodeGenerator.js.flow +0 -512
  17. package/codegen/RelayCodeGenerator.js.flow +0 -85
  18. package/codegen/RelayFileWriter.js.flow +0 -367
  19. package/codegen/SourceControl.js.flow +0 -58
  20. package/codegen/compileRelayArtifacts.js.flow +0 -182
  21. package/codegen/createPrintRequireModuleDependency.js.flow +0 -19
  22. package/codegen/sortObjectByKey.js.flow +0 -25
  23. package/codegen/writeRelayGeneratedFile.js.flow +0 -239
  24. package/core/ASTCache.js.flow +0 -74
  25. package/core/ASTConvert.js.flow +0 -233
  26. package/core/CompilerContext.js.flow +0 -191
  27. package/core/CompilerError.js.flow +0 -255
  28. package/core/DotGraphQLParser.js.flow +0 -39
  29. package/core/GraphQLCompilerProfiler.js.flow +0 -341
  30. package/core/GraphQLDerivedFromMetadata.js.flow +0 -36
  31. package/core/GraphQLWatchmanClient.js.flow +0 -111
  32. package/core/IR.js.flow +0 -326
  33. package/core/IRPrinter.js.flow +0 -478
  34. package/core/IRTransformer.js.flow +0 -377
  35. package/core/IRValidator.js.flow +0 -260
  36. package/core/IRVisitor.js.flow +0 -150
  37. package/core/JSModuleParser.js.flow +0 -24
  38. package/core/RelayCompilerScope.js.flow +0 -199
  39. package/core/RelayFindGraphQLTags.js.flow +0 -119
  40. package/core/RelayGraphQLEnumsGenerator.js.flow +0 -55
  41. package/core/RelayIRTransforms.js.flow +0 -138
  42. package/core/RelayParser.js.flow +0 -1734
  43. package/core/RelaySourceModuleParser.js.flow +0 -135
  44. package/core/Schema.js.flow +0 -2037
  45. package/core/SchemaUtils.js.flow +0 -120
  46. package/core/filterContextForNode.js.flow +0 -50
  47. package/core/getFieldDefinition.js.flow +0 -156
  48. package/core/getIdentifierForArgumentValue.js.flow +0 -49
  49. package/core/getIdentifierForSelection.js.flow +0 -69
  50. package/core/getLiteralArgumentValues.js.flow +0 -32
  51. package/core/getNormalizationOperationName.js.flow +0 -19
  52. package/core/inferRootArgumentDefinitions.js.flow +0 -323
  53. package/index.js.flow +0 -200
  54. package/language/RelayLanguagePluginInterface.js.flow +0 -283
  55. package/language/javascript/FindGraphQLTags.js.flow +0 -137
  56. package/language/javascript/RelayFlowBabelFactories.js.flow +0 -176
  57. package/language/javascript/RelayFlowGenerator.js.flow +0 -1100
  58. package/language/javascript/RelayFlowTypeTransformers.js.flow +0 -184
  59. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +0 -34
  60. package/language/javascript/formatGeneratedModule.js.flow +0 -65
  61. package/lib/bin/RelayCompilerBin.js +0 -143
  62. package/lib/bin/RelayCompilerMain.js +0 -486
  63. package/lib/bin/__fixtures__/plugin-module.js +0 -16
  64. package/lib/codegen/CodegenDirectory.js +0 -336
  65. package/lib/codegen/CodegenRunner.js +0 -433
  66. package/lib/codegen/CodegenTypes.js +0 -11
  67. package/lib/codegen/CodegenWatcher.js +0 -271
  68. package/lib/codegen/NormalizationCodeGenerator.js +0 -480
  69. package/lib/codegen/ReaderCodeGenerator.js +0 -472
  70. package/lib/codegen/RelayCodeGenerator.js +0 -68
  71. package/lib/codegen/RelayFileWriter.js +0 -270
  72. package/lib/codegen/SourceControl.js +0 -60
  73. package/lib/codegen/compileRelayArtifacts.js +0 -157
  74. package/lib/codegen/createPrintRequireModuleDependency.js +0 -19
  75. package/lib/codegen/sortObjectByKey.js +0 -41
  76. package/lib/codegen/writeRelayGeneratedFile.js +0 -208
  77. package/lib/core/ASTCache.js +0 -70
  78. package/lib/core/ASTConvert.js +0 -198
  79. package/lib/core/CompilerContext.js +0 -165
  80. package/lib/core/CompilerError.js +0 -251
  81. package/lib/core/DotGraphQLParser.js +0 -40
  82. package/lib/core/GraphQLCompilerProfiler.js +0 -299
  83. package/lib/core/GraphQLDerivedFromMetadata.js +0 -31
  84. package/lib/core/GraphQLWatchmanClient.js +0 -150
  85. package/lib/core/IR.js +0 -11
  86. package/lib/core/IRPrinter.js +0 -389
  87. package/lib/core/IRTransformer.js +0 -345
  88. package/lib/core/IRValidator.js +0 -226
  89. package/lib/core/IRVisitor.js +0 -45
  90. package/lib/core/JSModuleParser.js +0 -18
  91. package/lib/core/RelayCompilerScope.js +0 -149
  92. package/lib/core/RelayFindGraphQLTags.js +0 -79
  93. package/lib/core/RelayGraphQLEnumsGenerator.js +0 -50
  94. package/lib/core/RelayIRTransforms.js +0 -109
  95. package/lib/core/RelayParser.js +0 -1382
  96. package/lib/core/RelaySourceModuleParser.js +0 -104
  97. package/lib/core/Schema.js +0 -1877
  98. package/lib/core/SchemaUtils.js +0 -98
  99. package/lib/core/filterContextForNode.js +0 -49
  100. package/lib/core/getFieldDefinition.js +0 -145
  101. package/lib/core/getIdentifierForArgumentValue.js +0 -53
  102. package/lib/core/getIdentifierForSelection.js +0 -48
  103. package/lib/core/getLiteralArgumentValues.js +0 -26
  104. package/lib/core/getNormalizationOperationName.js +0 -17
  105. package/lib/core/inferRootArgumentDefinitions.js +0 -351
  106. package/lib/index.js +0 -178
  107. package/lib/language/RelayLanguagePluginInterface.js +0 -14
  108. package/lib/language/javascript/FindGraphQLTags.js +0 -126
  109. package/lib/language/javascript/RelayFlowBabelFactories.js +0 -160
  110. package/lib/language/javascript/RelayFlowGenerator.js +0 -857
  111. package/lib/language/javascript/RelayFlowTypeTransformers.js +0 -119
  112. package/lib/language/javascript/RelayLanguagePluginJavaScript.js +0 -30
  113. package/lib/language/javascript/formatGeneratedModule.js +0 -36
  114. package/lib/reporters/ConsoleReporter.js +0 -61
  115. package/lib/reporters/MultiReporter.js +0 -45
  116. package/lib/reporters/Reporter.js +0 -11
  117. package/lib/runner/Artifacts.js +0 -323
  118. package/lib/runner/BufferedFilesystem.js +0 -261
  119. package/lib/runner/GraphQLASTNodeGroup.js +0 -256
  120. package/lib/runner/GraphQLASTUtils.js +0 -23
  121. package/lib/runner/GraphQLNodeMap.js +0 -81
  122. package/lib/runner/Sources.js +0 -271
  123. package/lib/runner/StrictMap.js +0 -134
  124. package/lib/runner/compileArtifacts.js +0 -39
  125. package/lib/runner/extractAST.js +0 -77
  126. package/lib/runner/getChangedNodeNames.js +0 -82
  127. package/lib/runner/getSchemaInstance.js +0 -30
  128. package/lib/runner/types.js +0 -12
  129. package/lib/transforms/ApplyFragmentArgumentTransform.js +0 -393
  130. package/lib/transforms/ClientExtensionsTransform.js +0 -222
  131. package/lib/transforms/ConnectionTransform.js +0 -643
  132. package/lib/transforms/DeclarativeConnectionMutationTransform.js +0 -221
  133. package/lib/transforms/DeferStreamTransform.js +0 -247
  134. package/lib/transforms/DisallowIdAsAlias.js +0 -41
  135. package/lib/transforms/DisallowTypenameOnRoot.js +0 -53
  136. package/lib/transforms/FieldHandleTransform.js +0 -81
  137. package/lib/transforms/FilterCompilerDirectivesTransform.js +0 -29
  138. package/lib/transforms/FilterDirectivesTransform.js +0 -41
  139. package/lib/transforms/FlattenTransform.js +0 -308
  140. package/lib/transforms/GenerateIDFieldTransform.js +0 -137
  141. package/lib/transforms/GenerateTypeNameTransform.js +0 -155
  142. package/lib/transforms/InlineDataFragmentTransform.js +0 -104
  143. package/lib/transforms/InlineFragmentsTransform.js +0 -63
  144. package/lib/transforms/MaskTransform.js +0 -121
  145. package/lib/transforms/MatchTransform.js +0 -438
  146. package/lib/transforms/ReactFlightComponentTransform.js +0 -161
  147. package/lib/transforms/RefetchableFragmentTransform.js +0 -249
  148. package/lib/transforms/RelayDirectiveTransform.js +0 -85
  149. package/lib/transforms/RequiredFieldTransform.js +0 -373
  150. package/lib/transforms/SkipClientExtensionsTransform.js +0 -49
  151. package/lib/transforms/SkipHandleFieldTransform.js +0 -45
  152. package/lib/transforms/SkipRedundantNodesTransform.js +0 -255
  153. package/lib/transforms/SkipSplitOperationTransform.js +0 -32
  154. package/lib/transforms/SkipUnreachableNodeTransform.js +0 -158
  155. package/lib/transforms/SkipUnusedVariablesTransform.js +0 -74
  156. package/lib/transforms/SplitModuleImportTransform.js +0 -85
  157. package/lib/transforms/TestOperationTransform.js +0 -145
  158. package/lib/transforms/TransformUtils.js +0 -21
  159. package/lib/transforms/ValidateGlobalVariablesTransform.js +0 -91
  160. package/lib/transforms/ValidateRequiredArgumentsTransform.js +0 -118
  161. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +0 -111
  162. package/lib/transforms/ValidateUnusedVariablesTransform.js +0 -96
  163. package/lib/transforms/query-generators/FetchableQueryGenerator.js +0 -157
  164. package/lib/transforms/query-generators/NodeQueryGenerator.js +0 -166
  165. package/lib/transforms/query-generators/QueryQueryGenerator.js +0 -48
  166. package/lib/transforms/query-generators/ViewerQueryGenerator.js +0 -77
  167. package/lib/transforms/query-generators/index.js +0 -60
  168. package/lib/transforms/query-generators/utils.js +0 -92
  169. package/lib/util/CodeMarker.js +0 -80
  170. package/lib/util/DefaultHandleKey.js +0 -15
  171. package/lib/util/RelayCompilerCache.js +0 -98
  172. package/lib/util/Rollout.js +0 -40
  173. package/lib/util/TimeReporter.js +0 -83
  174. package/lib/util/areEqualArgValues.js +0 -135
  175. package/lib/util/argumentContainsVariables.js +0 -37
  176. package/lib/util/dedupeJSONStringify.js +0 -160
  177. package/lib/util/generateAbstractTypeRefinementKey.js +0 -24
  178. package/lib/util/getDefinitionNodeHash.js +0 -22
  179. package/lib/util/getModuleName.js +0 -32
  180. package/lib/util/joinArgumentDefinitions.js +0 -66
  181. package/lib/util/md5.js +0 -17
  182. package/lib/util/murmurHash.js +0 -86
  183. package/lib/util/nullthrowsOSS.js +0 -23
  184. package/lib/util/orList.js +0 -36
  185. package/lib/util/partitionArray.js +0 -35
  186. package/relay-compiler.js +0 -17
  187. package/relay-compiler.min.js +0 -22
  188. package/reporters/ConsoleReporter.js.flow +0 -81
  189. package/reporters/MultiReporter.js.flow +0 -43
  190. package/reporters/Reporter.js.flow +0 -19
  191. package/runner/Artifacts.js.flow +0 -219
  192. package/runner/BufferedFilesystem.js.flow +0 -194
  193. package/runner/GraphQLASTNodeGroup.js.flow +0 -176
  194. package/runner/GraphQLASTUtils.js.flow +0 -26
  195. package/runner/GraphQLNodeMap.js.flow +0 -55
  196. package/runner/Sources.js.flow +0 -228
  197. package/runner/StrictMap.js.flow +0 -96
  198. package/runner/compileArtifacts.js.flow +0 -76
  199. package/runner/extractAST.js.flow +0 -100
  200. package/runner/getChangedNodeNames.js.flow +0 -48
  201. package/runner/getSchemaInstance.js.flow +0 -36
  202. package/runner/types.js.flow +0 -37
  203. package/transforms/ApplyFragmentArgumentTransform.js.flow +0 -526
  204. package/transforms/ClientExtensionsTransform.js.flow +0 -226
  205. package/transforms/ConnectionTransform.js.flow +0 -859
  206. package/transforms/DeclarativeConnectionMutationTransform.js.flow +0 -250
  207. package/transforms/DeferStreamTransform.js.flow +0 -266
  208. package/transforms/DisallowIdAsAlias.js.flow +0 -48
  209. package/transforms/DisallowTypenameOnRoot.js.flow +0 -45
  210. package/transforms/FieldHandleTransform.js.flow +0 -81
  211. package/transforms/FilterCompilerDirectivesTransform.js.flow +0 -33
  212. package/transforms/FilterDirectivesTransform.js.flow +0 -45
  213. package/transforms/FlattenTransform.js.flow +0 -462
  214. package/transforms/GenerateIDFieldTransform.js.flow +0 -154
  215. package/transforms/GenerateTypeNameTransform.js.flow +0 -167
  216. package/transforms/InlineDataFragmentTransform.js.flow +0 -129
  217. package/transforms/InlineFragmentsTransform.js.flow +0 -73
  218. package/transforms/MaskTransform.js.flow +0 -130
  219. package/transforms/MatchTransform.js.flow +0 -593
  220. package/transforms/ReactFlightComponentTransform.js.flow +0 -198
  221. package/transforms/RefetchableFragmentTransform.js.flow +0 -272
  222. package/transforms/RelayDirectiveTransform.js.flow +0 -99
  223. package/transforms/RequiredFieldTransform.js.flow +0 -419
  224. package/transforms/SkipClientExtensionsTransform.js.flow +0 -57
  225. package/transforms/SkipHandleFieldTransform.js.flow +0 -45
  226. package/transforms/SkipRedundantNodesTransform.js.flow +0 -259
  227. package/transforms/SkipSplitOperationTransform.js.flow +0 -37
  228. package/transforms/SkipUnreachableNodeTransform.js.flow +0 -149
  229. package/transforms/SkipUnusedVariablesTransform.js.flow +0 -59
  230. package/transforms/SplitModuleImportTransform.js.flow +0 -101
  231. package/transforms/TestOperationTransform.js.flow +0 -143
  232. package/transforms/TransformUtils.js.flow +0 -26
  233. package/transforms/ValidateGlobalVariablesTransform.js.flow +0 -81
  234. package/transforms/ValidateRequiredArgumentsTransform.js.flow +0 -131
  235. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +0 -115
  236. package/transforms/ValidateUnusedVariablesTransform.js.flow +0 -89
  237. package/transforms/query-generators/FetchableQueryGenerator.js.flow +0 -189
  238. package/transforms/query-generators/NodeQueryGenerator.js.flow +0 -219
  239. package/transforms/query-generators/QueryQueryGenerator.js.flow +0 -57
  240. package/transforms/query-generators/ViewerQueryGenerator.js.flow +0 -97
  241. package/transforms/query-generators/index.js.flow +0 -90
  242. package/transforms/query-generators/utils.js.flow +0 -76
  243. package/util/CodeMarker.js.flow +0 -79
  244. package/util/DefaultHandleKey.js.flow +0 -17
  245. package/util/RelayCompilerCache.js.flow +0 -88
  246. package/util/Rollout.js.flow +0 -39
  247. package/util/TimeReporter.js.flow +0 -79
  248. package/util/areEqualArgValues.js.flow +0 -126
  249. package/util/argumentContainsVariables.js.flow +0 -38
  250. package/util/dedupeJSONStringify.js.flow +0 -152
  251. package/util/generateAbstractTypeRefinementKey.js.flow +0 -29
  252. package/util/getDefinitionNodeHash.js.flow +0 -25
  253. package/util/getModuleName.js.flow +0 -39
  254. package/util/joinArgumentDefinitions.js.flow +0 -105
  255. package/util/md5.js.flow +0 -22
  256. package/util/murmurHash.js.flow +0 -94
  257. package/util/nullthrowsOSS.js.flow +0 -25
  258. package/util/orList.js.flow +0 -37
  259. package/util/partitionArray.js.flow +0 -37
@@ -1,367 +0,0 @@
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
8
- * @format
9
- */
10
-
11
- // flowlint ambiguous-object-type:error
12
-
13
- 'use strict';
14
-
15
- const ASTConvert = require('../core/ASTConvert');
16
- const CodegenDirectory = require('./CodegenDirectory');
17
- const CompilerContext = require('../core/CompilerContext');
18
- const Profiler = require('../core/GraphQLCompilerProfiler');
19
- const RelayParser = require('../core/RelayParser');
20
-
21
- const compileRelayArtifacts = require('./compileRelayArtifacts');
22
- const graphql = require('graphql');
23
- const invariant = require('invariant');
24
- const md5 = require('../util/md5');
25
- const nullthrows = require('nullthrows');
26
- const path = require('path');
27
- const writeRelayGeneratedFile = require('./writeRelayGeneratedFile');
28
-
29
- const {
30
- getReaderSourceDefinitionName,
31
- } = require('../core/GraphQLDerivedFromMetadata');
32
- const {isExecutableDefinitionAST} = require('../core/SchemaUtils');
33
- const {Map: ImmutableMap} = require('immutable');
34
-
35
- import type {Schema} from '../core/Schema';
36
- import type {
37
- FormatModule,
38
- PluginInterface,
39
- TypeGenerator,
40
- } from '../language/RelayLanguagePluginInterface';
41
- import type {ScalarTypeMapping} from '../language/javascript/RelayFlowTypeTransformers';
42
- import type {Reporter} from '../reporters/Reporter';
43
- import type {Filesystem} from './CodegenDirectory';
44
- import type {SourceControl} from './SourceControl';
45
- import type {RelayCompilerTransforms} from './compileRelayArtifacts';
46
- import type {DocumentNode, ValidationContext} from 'graphql';
47
- import type {RequestParameters} from 'relay-runtime';
48
-
49
- export type GenerateExtraFiles = (
50
- getOutputDirectory: (path?: string) => CodegenDirectory,
51
- compilerContext: CompilerContext,
52
- getGeneratedDirectory: (definitionName: string) => CodegenDirectory,
53
- ) => void;
54
-
55
- export type ValidationRule = (context: ValidationContext) => any;
56
-
57
- export type WriterConfig = {
58
- baseDir: string,
59
- compilerTransforms: RelayCompilerTransforms,
60
- customScalars: ScalarTypeMapping,
61
- formatModule: FormatModule,
62
- generateExtraFiles?: GenerateExtraFiles,
63
- optionalInputFieldsForFlow: $ReadOnlyArray<string>,
64
- outputDir?: ?string,
65
- generatedDirectories?: $ReadOnlyArray<string>,
66
- persistQuery?: ?(text: string) => Promise<string>,
67
- schemaExtensions: $ReadOnlyArray<string>,
68
- noFutureProofEnums: boolean,
69
- useHaste: boolean,
70
- extension: string,
71
- typeGenerator: TypeGenerator,
72
- // Haste style module that exports flow types for GraphQL enums.
73
- // TODO(T22422153) support non-haste environments
74
- enumsHasteModule?: string,
75
- printModuleDependency?: string => string,
76
- filesystem?: Filesystem,
77
- repersist?: boolean,
78
- writeQueryParameters?: (
79
- outputDirectory: CodegenDirectory,
80
- filename: string,
81
- moduleName: string,
82
- requestParams: RequestParameters,
83
- ) => void,
84
- ...
85
- };
86
-
87
- function compileAll({
88
- baseDir,
89
- baseDocuments,
90
- schema,
91
- compilerTransforms,
92
- documents,
93
- reporter,
94
- typeGenerator,
95
- }: {|
96
- baseDir: string,
97
- baseDocuments: $ReadOnlyArray<DocumentNode>,
98
- schema: Schema,
99
- compilerTransforms: RelayCompilerTransforms,
100
- documents: $ReadOnlyArray<DocumentNode>,
101
- reporter: Reporter,
102
- typeGenerator: TypeGenerator,
103
- |}) {
104
- const definitions = ASTConvert.convertASTDocumentsWithBase(
105
- schema,
106
- baseDocuments,
107
- documents,
108
- RelayParser.transform,
109
- );
110
- const compilerContext = new CompilerContext(schema).addAll(definitions);
111
-
112
- const transformedTypeContext = compilerContext.applyTransforms(
113
- typeGenerator.transforms,
114
- reporter,
115
- );
116
- const transformedQueryContext = compilerContext.applyTransforms(
117
- [
118
- ...compilerTransforms.commonTransforms,
119
- ...compilerTransforms.queryTransforms,
120
- ],
121
- reporter,
122
- );
123
- const artifacts = compileRelayArtifacts(
124
- compilerContext,
125
- compilerTransforms,
126
- reporter,
127
- );
128
-
129
- return {
130
- artifacts,
131
- definitions,
132
- transformedQueryContext,
133
- transformedTypeContext,
134
- };
135
- }
136
-
137
- function writeAll({
138
- config: writerConfig,
139
- onlyValidate,
140
- baseDocuments,
141
- documents,
142
- schema,
143
- reporter,
144
- sourceControl,
145
- languagePlugin,
146
- }: {|
147
- config: WriterConfig,
148
- onlyValidate: boolean,
149
- // $FlowFixMe[value-as-type]
150
- baseDocuments: ImmutableMap<string, DocumentNode>,
151
- // $FlowFixMe[value-as-type]
152
- documents: ImmutableMap<string, DocumentNode>,
153
- schema: Schema,
154
- reporter: Reporter,
155
- sourceControl: ?SourceControl,
156
- languagePlugin?: ?PluginInterface,
157
- |}): Promise<Map<string, CodegenDirectory>> {
158
- return Profiler.asyncContext('RelayFileWriter.writeAll', async () => {
159
- const {
160
- artifacts: artifactsWithBase,
161
- transformedTypeContext,
162
- transformedQueryContext,
163
- } = compileAll({
164
- schema,
165
- baseDir: writerConfig.baseDir,
166
- baseDocuments: baseDocuments.valueSeq().toArray(),
167
- compilerTransforms: writerConfig.compilerTransforms,
168
- documents: documents.valueSeq().toArray(),
169
- reporter,
170
- typeGenerator: writerConfig.typeGenerator,
171
- });
172
- // Build a context from all the documents
173
- const baseDefinitionNames = new Set();
174
- baseDocuments.forEach(doc => {
175
- doc.definitions.forEach(def => {
176
- if (isExecutableDefinitionAST(def) && def.name) {
177
- baseDefinitionNames.add(def.name.value);
178
- }
179
- });
180
- });
181
-
182
- // remove nodes that are present in the base or that derive from nodes
183
- // in the base
184
- const artifacts = artifactsWithBase.filter(([_definition, node]) => {
185
- const sourceName = getReaderSourceDefinitionName(node);
186
- return !baseDefinitionNames.has(sourceName);
187
- });
188
-
189
- const artifactMap = new Map(
190
- artifacts.map(([_definition, node]) => [
191
- node.kind === 'Request' ? node.params.name : node.name,
192
- node,
193
- ]),
194
- );
195
-
196
- const definitionsMeta = new Map();
197
- const getDefinitionMeta = (definitionName: string) => {
198
- const artifact = nullthrows(artifactMap.get(definitionName));
199
- const sourceName = getReaderSourceDefinitionName(artifact);
200
- const definitionMeta = definitionsMeta.get(sourceName);
201
- invariant(
202
- definitionMeta,
203
- 'RelayFileWriter: Could not determine source for definition: `%s`.',
204
- definitionName,
205
- );
206
- return definitionMeta;
207
- };
208
- documents.forEach((doc, filePath) => {
209
- doc.definitions.forEach(def => {
210
- if (def.name) {
211
- definitionsMeta.set(def.name.value, {
212
- dir: path.join(writerConfig.baseDir, path.dirname(filePath)),
213
- ast: def,
214
- });
215
- }
216
- });
217
- });
218
-
219
- const allOutputDirectories: Map<string, CodegenDirectory> = new Map();
220
- const addCodegenDir = dirPath => {
221
- const codegenDir = new CodegenDirectory(dirPath, {
222
- onlyValidate: onlyValidate,
223
- filesystem: writerConfig.filesystem,
224
- });
225
- allOutputDirectories.set(dirPath, codegenDir);
226
- return codegenDir;
227
- };
228
-
229
- for (const existingDirectory of writerConfig.generatedDirectories || []) {
230
- addCodegenDir(existingDirectory);
231
- }
232
-
233
- let configOutputDirectory;
234
- if (writerConfig.outputDir) {
235
- configOutputDirectory = addCodegenDir(writerConfig.outputDir);
236
- }
237
-
238
- const getGeneratedDirectory = definitionName => {
239
- if (configOutputDirectory) {
240
- return configOutputDirectory;
241
- }
242
- const generatedPath = path.join(
243
- getDefinitionMeta(definitionName).dir,
244
- '__generated__',
245
- );
246
- let cachedDir = allOutputDirectories.get(generatedPath);
247
- if (!cachedDir) {
248
- cachedDir = addCodegenDir(generatedPath);
249
- }
250
- return cachedDir;
251
- };
252
-
253
- const formatModule = Profiler.instrument(
254
- writerConfig.formatModule,
255
- 'RelayFileWriter:formatModule',
256
- );
257
-
258
- const persistQuery = writerConfig.persistQuery
259
- ? Profiler.instrumentWait(
260
- writerConfig.persistQuery,
261
- 'RelayFileWriter:persistQuery',
262
- )
263
- : null;
264
-
265
- try {
266
- await Promise.all(
267
- artifacts.map(async ([definition, node]) => {
268
- const nodeName =
269
- node.kind === 'Request' ? node.params.name : node.name;
270
- if (baseDefinitionNames.has(nodeName)) {
271
- // don't add definitions that were part of base context
272
- return;
273
- }
274
-
275
- const typeNode = transformedTypeContext.get(nodeName);
276
- const typeText = typeNode
277
- ? writerConfig.typeGenerator.generate(
278
- schema,
279
- (typeNode: $FlowFixMe),
280
- {
281
- customScalars: writerConfig.customScalars,
282
- enumsHasteModule: writerConfig.enumsHasteModule,
283
- optionalInputFields: writerConfig.optionalInputFieldsForFlow,
284
- useHaste: writerConfig.useHaste,
285
- useSingleArtifactDirectory: !!writerConfig.outputDir,
286
- noFutureProofEnums: writerConfig.noFutureProofEnums,
287
- normalizationIR:
288
- definition.kind === 'Request' ? definition.root : undefined,
289
- },
290
- )
291
- : '';
292
-
293
- const sourceHash = Profiler.run('hashGraphQL', () =>
294
- md5(graphql.print(getDefinitionMeta(nodeName).ast)),
295
- );
296
-
297
- await writeRelayGeneratedFile(
298
- schema,
299
- getGeneratedDirectory(nodeName),
300
- definition,
301
- node,
302
- formatModule,
303
- typeText,
304
- persistQuery,
305
- sourceHash,
306
- writerConfig.extension,
307
- writerConfig.printModuleDependency,
308
- writerConfig.repersist ?? false,
309
- writerConfig.writeQueryParameters ?? function noop() {},
310
- languagePlugin,
311
- );
312
- }),
313
- );
314
-
315
- const generateExtraFiles = writerConfig.generateExtraFiles;
316
- if (generateExtraFiles) {
317
- Profiler.run('RelayFileWriter:generateExtraFiles', () => {
318
- const configDirectory = writerConfig.outputDir;
319
- generateExtraFiles(
320
- dir => {
321
- const outputDirectory = dir || configDirectory;
322
- invariant(
323
- outputDirectory,
324
- 'RelayFileWriter: cannot generate extra files without specifying ' +
325
- 'an outputDir in the config or passing it in.',
326
- );
327
- let outputDir = allOutputDirectories.get(outputDirectory);
328
- if (!outputDir) {
329
- outputDir = addCodegenDir(outputDirectory);
330
- }
331
- return outputDir;
332
- },
333
- transformedQueryContext,
334
- getGeneratedDirectory,
335
- );
336
- });
337
- }
338
-
339
- allOutputDirectories.forEach(dir => {
340
- dir.deleteExtraFiles(languagePlugin?.keepExtraFile);
341
- });
342
- if (sourceControl && !onlyValidate) {
343
- await CodegenDirectory.sourceControlAddRemove(
344
- sourceControl,
345
- Array.from(allOutputDirectories.values()),
346
- );
347
- }
348
- } catch (error) {
349
- let details;
350
- try {
351
- details = JSON.parse(error.message);
352
- } catch (_) {} // eslint-disable-line lint/no-unused-catch-bindings
353
- if (details && details.name === 'GraphQL2Exception' && details.message) {
354
- throw new Error('GraphQL error writing modules:\n' + details.message);
355
- }
356
- throw new Error(
357
- 'Error writing modules:\n' + String(error.stack || error),
358
- );
359
- }
360
-
361
- return allOutputDirectories;
362
- });
363
- }
364
-
365
- module.exports = {
366
- writeAll,
367
- };
@@ -1,58 +0,0 @@
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
8
- * @format
9
- */
10
-
11
- // flowlint ambiguous-object-type:error
12
-
13
- 'use strict';
14
-
15
- const childProcess = require('child_process');
16
-
17
- function execFile(cmd: string, args: Array<string>): Promise<void> {
18
- return new Promise((resolve, reject) => {
19
- childProcess.execFile(cmd, args, err => {
20
- if (err) {
21
- reject(err);
22
- } else {
23
- resolve();
24
- }
25
- });
26
- });
27
- }
28
-
29
- /**
30
- * An abstraction over the source control system to make it injectable.
31
- */
32
- export type SourceControl = {
33
- addRemove(
34
- added: $ReadOnlyArray<string>,
35
- removed: $ReadOnlyArray<string>,
36
- ): Promise<void>,
37
- ...
38
- };
39
-
40
- const SourceControlMercurial: SourceControl = {
41
- async addRemove(
42
- added: $ReadOnlyArray<string>,
43
- removed: $ReadOnlyArray<string>,
44
- ): Promise<void> {
45
- // NOTE: Not using `hg addremove` as that has a bug when deleting a file
46
- // that was just added, but not yet committed: T10711513
47
- if (added.length > 0) {
48
- await execFile('hg', ['add', ...added]);
49
- }
50
- if (removed.length > 0) {
51
- await execFile('hg', ['forget', ...removed]);
52
- }
53
- },
54
- };
55
-
56
- module.exports = {
57
- SourceControlMercurial,
58
- };
@@ -1,182 +0,0 @@
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 Printer = require('../core/IRPrinter');
16
- const Profiler = require('../core/GraphQLCompilerProfiler');
17
- const RelayCodeGenerator = require('./RelayCodeGenerator');
18
-
19
- const filterContextForNode = require('../core/filterContextForNode');
20
-
21
- import type CompilerContext from '../core/CompilerContext';
22
- import type {IRTransform} from '../core/CompilerContext';
23
- import type {GeneratedDefinition} from '../core/IR';
24
- import type {Reporter} from '../reporters/Reporter';
25
- import type {GeneratedNode} from 'relay-runtime';
26
-
27
- export type RelayCompilerTransforms = {
28
- commonTransforms: $ReadOnlyArray<IRTransform>,
29
- codegenTransforms: $ReadOnlyArray<IRTransform>,
30
- fragmentTransforms: $ReadOnlyArray<IRTransform>,
31
- printTransforms: $ReadOnlyArray<IRTransform>,
32
- queryTransforms: $ReadOnlyArray<IRTransform>,
33
- ...
34
- };
35
-
36
- function createFragmentContext(
37
- context: CompilerContext,
38
- transforms: RelayCompilerTransforms,
39
- reporter?: Reporter,
40
- ): CompilerContext {
41
- // The fragment is used for reading data from the normalized store.
42
- return context.applyTransforms(
43
- [...transforms.commonTransforms, ...transforms.fragmentTransforms],
44
- reporter,
45
- );
46
- }
47
-
48
- function createPrintContext(
49
- context: CompilerContext,
50
- transforms: RelayCompilerTransforms,
51
- reporter?: Reporter,
52
- ): CompilerContext {
53
- // The unflattened query is used for printing, since flattening creates an
54
- // invalid query.
55
- return context.applyTransforms(
56
- [
57
- ...transforms.commonTransforms,
58
- ...transforms.queryTransforms,
59
- ...transforms.printTransforms,
60
- ],
61
- reporter,
62
- );
63
- }
64
-
65
- function createCodeGenContext(
66
- context: CompilerContext,
67
- transforms: RelayCompilerTransforms,
68
- reporter?: Reporter,
69
- ): CompilerContext {
70
- // The flattened query is used for codegen in order to reduce the number of
71
- // duplicate fields that must be processed during response normalization.
72
- return context.applyTransforms(
73
- [
74
- ...transforms.commonTransforms,
75
- ...transforms.queryTransforms,
76
- ...transforms.codegenTransforms,
77
- ],
78
- reporter,
79
- );
80
- }
81
-
82
- function compile(
83
- context: CompilerContext,
84
- fragmentContext: CompilerContext,
85
- printContext: CompilerContext,
86
- codeGenContext: CompilerContext,
87
- ): $ReadOnlyArray<[GeneratedDefinition, GeneratedNode]> {
88
- const results = [];
89
- const schema = context.getSchema();
90
-
91
- // Add everything from codeGenContext, these are the operations as well as
92
- // SplitOperations from @match.
93
- for (const node of codeGenContext.documents()) {
94
- if (node.kind === 'Root') {
95
- const fragment = fragmentContext.getRoot(node.name);
96
- const request = {
97
- kind: 'Request',
98
- fragment: {
99
- kind: 'Fragment',
100
- argumentDefinitions: fragment.argumentDefinitions,
101
- directives: fragment.directives,
102
- loc: {kind: 'Derived', source: node.loc},
103
- metadata: null,
104
- name: fragment.name,
105
- selections: fragment.selections,
106
- type: fragment.type,
107
- },
108
- id: null,
109
- loc: node.loc,
110
- metadata: node.metadata || {},
111
- name: fragment.name,
112
- root: node,
113
- text: printOperation(printContext, fragment.name),
114
- };
115
- results.push([request, RelayCodeGenerator.generate(schema, request)]);
116
- } else {
117
- results.push([node, RelayCodeGenerator.generate(schema, node)]);
118
- }
119
- }
120
-
121
- // Add all the Fragments from the fragmentContext for the reader ASTs.
122
- for (const node of fragmentContext.documents()) {
123
- if (node.kind === 'Fragment') {
124
- results.push([node, RelayCodeGenerator.generate(schema, node)]);
125
- }
126
- }
127
- return results;
128
- }
129
-
130
- const OPERATION_ORDER = {
131
- Root: 0,
132
- SplitOperation: 1,
133
- Fragment: 2,
134
- };
135
- function printOperation(printContext: CompilerContext, name: string): string {
136
- const printableRoot = printContext.getRoot(name);
137
- return filterContextForNode(printableRoot, printContext)
138
- .documents()
139
- .sort((a, b) => {
140
- if (a.kind !== b.kind) {
141
- return OPERATION_ORDER[a.kind] - OPERATION_ORDER[b.kind];
142
- }
143
- return a.name < b.name ? -1 : 1;
144
- })
145
- .map(doc => Printer.print(printContext.getSchema(), doc))
146
- .join('\n');
147
- }
148
-
149
- /**
150
- * Transforms the provided compiler context
151
- *
152
- * compileRelayArtifacts generates artifacts for Relay's runtime as a result of
153
- * applying a series of transforms. Each kind of artifact is dependent on
154
- * transforms being applied in the following order:
155
- *
156
- * - Fragment Readers: commonTransforms, fragmentTransforms
157
- * - Operation Writers: commonTransforms, queryTransforms, codegenTransforms
158
- * - GraphQL Text: commonTransforms, queryTransforms, printTransforms
159
- *
160
- * The order of the transforms applied for each artifact below is important.
161
- * CompilerContext will memoize applying each transform, so while
162
- * `commonTransforms` appears in each artifacts' application, it will not result
163
- * in repeated work as long as the order remains consistent across each context.
164
- */
165
- function compileRelayArtifacts(
166
- context: CompilerContext,
167
- transforms: RelayCompilerTransforms,
168
- reporter?: Reporter,
169
- ): $ReadOnlyArray<[GeneratedDefinition, GeneratedNode]> {
170
- return Profiler.run('GraphQLCompiler.compile', () => {
171
- const fragmentContext = createFragmentContext(
172
- context,
173
- transforms,
174
- reporter,
175
- );
176
- const printContext = createPrintContext(context, transforms, reporter);
177
- const codeGenContext = createCodeGenContext(context, transforms, reporter);
178
- return compile(context, fragmentContext, printContext, codeGenContext);
179
- });
180
- }
181
-
182
- module.exports = compileRelayArtifacts;
@@ -1,19 +0,0 @@
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
8
- * @format
9
- */
10
-
11
- // flowlint ambiguous-object-type:error
12
-
13
- 'use strict';
14
-
15
- function createPrintRequireModuleDependency(): string => string {
16
- return moduleName => `require('./${moduleName}')`;
17
- }
18
-
19
- module.exports = createPrintRequireModuleDependency;
@@ -1,25 +0,0 @@
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
- 'use strict';
12
-
13
- function sortObjectByKey<T: ?{[key: string]: mixed}>(obj: T): T {
14
- if (obj == null) {
15
- return obj;
16
- }
17
- const result = {};
18
- for (const key of Object.keys(obj).sort()) {
19
- result[key] = obj[key];
20
- }
21
- // $FlowFixMe[incompatible-return]
22
- return result;
23
- }
24
-
25
- module.exports = sortObjectByKey;