relay-compiler 0.0.0-main-8ff54d69 → 0.0.0-main-38f1c96e

Sign up to get free protection for your applications and to get access to all the features.
Files changed (263) 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 -24
  6. package/win-x64/relay.exe +0 -0
  7. package/bin/RelayCompilerBin.js.flow +0 -168
  8. package/bin/RelayCompilerMain.js.flow +0 -515
  9. package/bin/__fixtures__/plugin-module.js.flow +0 -17
  10. package/bin/relay-compiler +0 -19068
  11. package/codegen/CodegenDirectory.js.flow +0 -372
  12. package/codegen/CodegenRunner.js.flow +0 -424
  13. package/codegen/CodegenTypes.js.flow +0 -28
  14. package/codegen/CodegenWatcher.js.flow +0 -250
  15. package/codegen/NormalizationCodeGenerator.js.flow +0 -566
  16. package/codegen/ReaderCodeGenerator.js.flow +0 -510
  17. package/codegen/RelayCodeGenerator.js.flow +0 -85
  18. package/codegen/RelayFileWriter.js.flow +0 -365
  19. package/codegen/SourceControl.js.flow +0 -58
  20. package/codegen/compileRelayArtifacts.js.flow +0 -181
  21. package/codegen/createPrintRequireModuleDependency.js.flow +0 -19
  22. package/codegen/sortObjectByKey.js.flow +0 -25
  23. package/codegen/writeRelayGeneratedFile.js.flow +0 -235
  24. package/core/ASTCache.js.flow +0 -73
  25. package/core/ASTConvert.js.flow +0 -230
  26. package/core/CompilerContext.js.flow +0 -189
  27. package/core/CompilerError.js.flow +0 -255
  28. package/core/DotGraphQLParser.js.flow +0 -37
  29. package/core/GraphQLCompilerProfiler.js.flow +0 -341
  30. package/core/GraphQLDerivedFromMetadata.js.flow +0 -36
  31. package/core/GraphQLWatchmanClient.js.flow +0 -109
  32. package/core/IR.js.flow +0 -326
  33. package/core/IRPrinter.js.flow +0 -472
  34. package/core/IRTransformer.js.flow +0 -376
  35. package/core/IRValidator.js.flow +0 -259
  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 -118
  40. package/core/RelayGraphQLEnumsGenerator.js.flow +0 -55
  41. package/core/RelayIRTransforms.js.flow +0 -138
  42. package/core/RelayParser.js.flow +0 -1741
  43. package/core/RelaySourceModuleParser.js.flow +0 -133
  44. package/core/Schema.js.flow +0 -2035
  45. package/core/SchemaUtils.js.flow +0 -120
  46. package/core/filterContextForNode.js.flow +0 -49
  47. package/core/getFieldDefinition.js.flow +0 -156
  48. package/core/getIdentifierForArgumentValue.js.flow +0 -49
  49. package/core/getIdentifierForSelection.js.flow +0 -68
  50. package/core/getLiteralArgumentValues.js.flow +0 -32
  51. package/core/getNormalizationOperationName.js.flow +0 -19
  52. package/core/inferRootArgumentDefinitions.js.flow +0 -322
  53. package/index.js.flow +0 -198
  54. package/language/RelayLanguagePluginInterface.js.flow +0 -283
  55. package/language/javascript/FindGraphQLTags.js.flow +0 -136
  56. package/language/javascript/RelayFlowBabelFactories.js.flow +0 -176
  57. package/language/javascript/RelayFlowGenerator.js.flow +0 -1096
  58. package/language/javascript/RelayFlowTypeTransformers.js.flow +0 -181
  59. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +0 -33
  60. package/language/javascript/formatGeneratedModule.js.flow +0 -65
  61. package/lib/bin/RelayCompilerBin.js +0 -143
  62. package/lib/bin/RelayCompilerMain.js +0 -488
  63. package/lib/bin/__fixtures__/plugin-module.js +0 -16
  64. package/lib/codegen/CodegenDirectory.js +0 -335
  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 -487
  69. package/lib/codegen/ReaderCodeGenerator.js +0 -473
  70. package/lib/codegen/RelayCodeGenerator.js +0 -75
  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 -206
  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 -252
  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 -388
  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 -183
  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 -1381
  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 -50
  100. package/lib/core/getFieldDefinition.js +0 -145
  101. package/lib/core/getIdentifierForArgumentValue.js +0 -54
  102. package/lib/core/getIdentifierForSelection.js +0 -49
  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 -26
  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 -856
  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 -262
  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/test-utils/TestSchema.js +0 -27
  130. package/lib/test-utils/parseGraphQLText.js +0 -30
  131. package/lib/transforms/ApplyFragmentArgumentTransform.js +0 -393
  132. package/lib/transforms/ClientExtensionsTransform.js +0 -221
  133. package/lib/transforms/ConnectionTransform.js +0 -639
  134. package/lib/transforms/DeclarativeConnectionMutationTransform.js +0 -218
  135. package/lib/transforms/DeferStreamTransform.js +0 -246
  136. package/lib/transforms/DisallowIdAsAlias.js +0 -40
  137. package/lib/transforms/DisallowTypenameOnRoot.js +0 -53
  138. package/lib/transforms/FieldHandleTransform.js +0 -79
  139. package/lib/transforms/FilterCompilerDirectivesTransform.js +0 -29
  140. package/lib/transforms/FilterDirectivesTransform.js +0 -42
  141. package/lib/transforms/FlattenTransform.js +0 -306
  142. package/lib/transforms/GenerateIDFieldTransform.js +0 -135
  143. package/lib/transforms/GenerateTypeNameTransform.js +0 -149
  144. package/lib/transforms/InlineDataFragmentTransform.js +0 -100
  145. package/lib/transforms/InlineFragmentsTransform.js +0 -61
  146. package/lib/transforms/MaskTransform.js +0 -117
  147. package/lib/transforms/MatchTransform.js +0 -434
  148. package/lib/transforms/ReactFlightComponentTransform.js +0 -158
  149. package/lib/transforms/RefetchableFragmentTransform.js +0 -249
  150. package/lib/transforms/RelayDirectiveTransform.js +0 -83
  151. package/lib/transforms/RequiredFieldTransform.js +0 -369
  152. package/lib/transforms/SkipClientExtensionsTransform.js +0 -46
  153. package/lib/transforms/SkipHandleFieldTransform.js +0 -45
  154. package/lib/transforms/SkipRedundantNodesTransform.js +0 -261
  155. package/lib/transforms/SkipSplitOperationTransform.js +0 -32
  156. package/lib/transforms/SkipUnreachableNodeTransform.js +0 -158
  157. package/lib/transforms/SkipUnusedVariablesTransform.js +0 -75
  158. package/lib/transforms/SplitModuleImportTransform.js +0 -82
  159. package/lib/transforms/TestOperationTransform.js +0 -144
  160. package/lib/transforms/TransformUtils.js +0 -21
  161. package/lib/transforms/ValidateGlobalVariablesTransform.js +0 -92
  162. package/lib/transforms/ValidateRequiredArgumentsTransform.js +0 -114
  163. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +0 -108
  164. package/lib/transforms/ValidateUnusedVariablesTransform.js +0 -96
  165. package/lib/transforms/query-generators/FetchableQueryGenerator.js +0 -157
  166. package/lib/transforms/query-generators/NodeQueryGenerator.js +0 -166
  167. package/lib/transforms/query-generators/QueryQueryGenerator.js +0 -48
  168. package/lib/transforms/query-generators/ViewerQueryGenerator.js +0 -77
  169. package/lib/transforms/query-generators/index.js +0 -60
  170. package/lib/transforms/query-generators/utils.js +0 -92
  171. package/lib/util/CodeMarker.js +0 -80
  172. package/lib/util/DefaultHandleKey.js +0 -15
  173. package/lib/util/RelayCompilerCache.js +0 -97
  174. package/lib/util/Rollout.js +0 -40
  175. package/lib/util/TimeReporter.js +0 -83
  176. package/lib/util/areEqualArgValues.js +0 -135
  177. package/lib/util/argumentContainsVariables.js +0 -37
  178. package/lib/util/dedupeJSONStringify.js +0 -160
  179. package/lib/util/generateAbstractTypeRefinementKey.js +0 -24
  180. package/lib/util/getDefinitionNodeHash.js +0 -22
  181. package/lib/util/getModuleName.js +0 -32
  182. package/lib/util/joinArgumentDefinitions.js +0 -67
  183. package/lib/util/md5.js +0 -17
  184. package/lib/util/murmurHash.js +0 -86
  185. package/lib/util/nullthrowsOSS.js +0 -23
  186. package/lib/util/orList.js +0 -36
  187. package/lib/util/partitionArray.js +0 -35
  188. package/relay-compiler.js +0 -17
  189. package/relay-compiler.min.js +0 -22
  190. package/reporters/ConsoleReporter.js.flow +0 -81
  191. package/reporters/MultiReporter.js.flow +0 -43
  192. package/reporters/Reporter.js.flow +0 -19
  193. package/runner/Artifacts.js.flow +0 -215
  194. package/runner/BufferedFilesystem.js.flow +0 -194
  195. package/runner/GraphQLASTNodeGroup.js.flow +0 -174
  196. package/runner/GraphQLASTUtils.js.flow +0 -26
  197. package/runner/GraphQLNodeMap.js.flow +0 -55
  198. package/runner/Sources.js.flow +0 -227
  199. package/runner/StrictMap.js.flow +0 -96
  200. package/runner/compileArtifacts.js.flow +0 -75
  201. package/runner/extractAST.js.flow +0 -98
  202. package/runner/getChangedNodeNames.js.flow +0 -48
  203. package/runner/getSchemaInstance.js.flow +0 -36
  204. package/runner/types.js.flow +0 -37
  205. package/test-utils/TestSchema.js.flow +0 -30
  206. package/test-utils/parseGraphQLText.js.flow +0 -41
  207. package/transforms/ApplyFragmentArgumentTransform.js.flow +0 -524
  208. package/transforms/ClientExtensionsTransform.js.flow +0 -224
  209. package/transforms/ConnectionTransform.js.flow +0 -850
  210. package/transforms/DeclarativeConnectionMutationTransform.js.flow +0 -245
  211. package/transforms/DeferStreamTransform.js.flow +0 -263
  212. package/transforms/DisallowIdAsAlias.js.flow +0 -46
  213. package/transforms/DisallowTypenameOnRoot.js.flow +0 -44
  214. package/transforms/FieldHandleTransform.js.flow +0 -77
  215. package/transforms/FilterCompilerDirectivesTransform.js.flow +0 -33
  216. package/transforms/FilterDirectivesTransform.js.flow +0 -45
  217. package/transforms/FlattenTransform.js.flow +0 -458
  218. package/transforms/GenerateIDFieldTransform.js.flow +0 -151
  219. package/transforms/GenerateTypeNameTransform.js.flow +0 -159
  220. package/transforms/InlineDataFragmentTransform.js.flow +0 -123
  221. package/transforms/InlineFragmentsTransform.js.flow +0 -70
  222. package/transforms/MaskTransform.js.flow +0 -124
  223. package/transforms/MatchTransform.js.flow +0 -587
  224. package/transforms/ReactFlightComponentTransform.js.flow +0 -207
  225. package/transforms/RefetchableFragmentTransform.js.flow +0 -266
  226. package/transforms/RelayDirectiveTransform.js.flow +0 -96
  227. package/transforms/RequiredFieldTransform.js.flow +0 -413
  228. package/transforms/SkipClientExtensionsTransform.js.flow +0 -54
  229. package/transforms/SkipHandleFieldTransform.js.flow +0 -44
  230. package/transforms/SkipRedundantNodesTransform.js.flow +0 -277
  231. package/transforms/SkipSplitOperationTransform.js.flow +0 -37
  232. package/transforms/SkipUnreachableNodeTransform.js.flow +0 -148
  233. package/transforms/SkipUnusedVariablesTransform.js.flow +0 -59
  234. package/transforms/SplitModuleImportTransform.js.flow +0 -97
  235. package/transforms/TestOperationTransform.js.flow +0 -142
  236. package/transforms/TransformUtils.js.flow +0 -26
  237. package/transforms/ValidateGlobalVariablesTransform.js.flow +0 -80
  238. package/transforms/ValidateRequiredArgumentsTransform.js.flow +0 -130
  239. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +0 -128
  240. package/transforms/ValidateUnusedVariablesTransform.js.flow +0 -88
  241. package/transforms/query-generators/FetchableQueryGenerator.js.flow +0 -188
  242. package/transforms/query-generators/NodeQueryGenerator.js.flow +0 -217
  243. package/transforms/query-generators/QueryQueryGenerator.js.flow +0 -57
  244. package/transforms/query-generators/ViewerQueryGenerator.js.flow +0 -97
  245. package/transforms/query-generators/index.js.flow +0 -89
  246. package/transforms/query-generators/utils.js.flow +0 -76
  247. package/util/CodeMarker.js.flow +0 -79
  248. package/util/DefaultHandleKey.js.flow +0 -17
  249. package/util/RelayCompilerCache.js.flow +0 -86
  250. package/util/Rollout.js.flow +0 -39
  251. package/util/TimeReporter.js.flow +0 -79
  252. package/util/areEqualArgValues.js.flow +0 -126
  253. package/util/argumentContainsVariables.js.flow +0 -38
  254. package/util/dedupeJSONStringify.js.flow +0 -156
  255. package/util/generateAbstractTypeRefinementKey.js.flow +0 -29
  256. package/util/getDefinitionNodeHash.js.flow +0 -24
  257. package/util/getModuleName.js.flow +0 -39
  258. package/util/joinArgumentDefinitions.js.flow +0 -105
  259. package/util/md5.js.flow +0 -19
  260. package/util/murmurHash.js.flow +0 -94
  261. package/util/nullthrowsOSS.js.flow +0 -25
  262. package/util/orList.js.flow +0 -37
  263. package/util/partitionArray.js.flow +0 -37
@@ -1,235 +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
- import type {GeneratedDefinition} from '../core/IR';
16
- import type {Schema} from '../core/Schema';
17
- import type {
18
- FormatModule,
19
- PluginInterface,
20
- } from '../language/RelayLanguagePluginInterface';
21
- import type CodegenDirectory from './CodegenDirectory';
22
- import type {GeneratedNode, RequestParameters} from 'relay-runtime';
23
-
24
- const CodeMarker = require('../util/CodeMarker');
25
- const dedupeJSONStringify = require('../util/dedupeJSONStringify');
26
- const md5 = require('../util/md5');
27
- const createPrintRequireModuleDependency = require('./createPrintRequireModuleDependency');
28
- const invariant = require('invariant');
29
- const {RelayConcreteNode} = require('relay-runtime');
30
-
31
- function getConcreteType(node: GeneratedNode): string {
32
- switch (node.kind) {
33
- case RelayConcreteNode.FRAGMENT:
34
- return 'ReaderFragment';
35
- case RelayConcreteNode.REQUEST:
36
- return 'ConcreteRequest';
37
- case RelayConcreteNode.SPLIT_OPERATION:
38
- return 'NormalizationSplitOperation';
39
- case RelayConcreteNode.INLINE_DATA_FRAGMENT:
40
- return 'ReaderInlineDataFragment';
41
- default:
42
- (node: empty);
43
- invariant(false, 'Unexpected GeneratedNode kind: `%s`.', node.kind);
44
- }
45
- }
46
-
47
- function writeRelayGeneratedFile(
48
- schema: Schema,
49
- codegenDir: CodegenDirectory,
50
- definition: GeneratedDefinition,
51
- _generatedNode: GeneratedNode,
52
- formatModule: FormatModule,
53
- typeText: string,
54
- _persistQuery: ?(text: string) => Promise<string>,
55
- sourceHash: string,
56
- extension: string,
57
- printModuleDependency: (
58
- moduleName: string,
59
- ) => string = createPrintRequireModuleDependency(),
60
- shouldRepersist: boolean,
61
- writeQueryParameters: (
62
- dir: CodegenDirectory,
63
- filename: string,
64
- moduleName: string,
65
- params: RequestParameters,
66
- ) => void,
67
- languagePlugin: ?PluginInterface,
68
- ): Promise<?GeneratedNode> {
69
- let generatedNode: GeneratedNode = _generatedNode;
70
- // Copy to const so Flow can refine.
71
- const persistQuery = _persistQuery;
72
- const operationName =
73
- generatedNode.kind === 'Request'
74
- ? generatedNode.params.name
75
- : generatedNode.name;
76
- const moduleName = languagePlugin?.getModuleName
77
- ? languagePlugin.getModuleName(operationName)
78
- : operationName + '.graphql';
79
-
80
- const filename = moduleName + '.' + extension;
81
- const queryParametersFilename =
82
- generatedNode.kind === 'Request'
83
- ? `${generatedNode.params.name}$Parameters.${extension}`
84
- : null;
85
-
86
- const typeName = getConcreteType(generatedNode);
87
-
88
- let docText;
89
- if (generatedNode.kind === RelayConcreteNode.REQUEST) {
90
- docText =
91
- generatedNode.params.text != null ? generatedNode.params.text : null;
92
- }
93
-
94
- // Use `Promise.resolve` to work around a Babel 7.8/7.9 issue.
95
- return Promise.resolve().then(async () => {
96
- let hash = null;
97
- if (generatedNode.kind === RelayConcreteNode.REQUEST) {
98
- invariant(
99
- docText != null,
100
- 'writeRelayGeneratedFile: Expected `text` for operations to be set.',
101
- );
102
-
103
- const {
104
- isRefetchableQuery: _ignored,
105
- derivedFrom: _ignored2,
106
- ...nextMetadata
107
- } = generatedNode.params.metadata;
108
-
109
- let nextRequestParams;
110
- if (persistQuery != null) {
111
- hash = md5(docText);
112
-
113
- let id = null;
114
- if (!shouldRepersist) {
115
- // Unless we `shouldRepersist` the query, check if the @relayHash matches
116
- // the operation text of the current text and re-use the persisted
117
- // operation id.
118
- const oldContent = codegenDir.read(filename);
119
- const oldHash = extractHash(oldContent);
120
- const oldRequestID = extractRelayRequestID(oldContent);
121
- if (hash === oldHash && oldRequestID != null) {
122
- id = oldRequestID;
123
- }
124
- }
125
- if (id == null) {
126
- id = await persistQuery(docText);
127
- }
128
- nextRequestParams = {
129
- id,
130
- metadata: nextMetadata,
131
- // $FlowFixMe[prop-missing]
132
- // $FlowFixMe[incompatible-use]
133
- name: generatedNode.params.name,
134
- // $FlowFixMe[prop-missing]
135
- // $FlowFixMe[incompatible-use]
136
- operationKind: generatedNode.params.operationKind,
137
- text: null,
138
- };
139
- } else {
140
- nextRequestParams = {
141
- cacheID: md5(docText),
142
- id: null,
143
- metadata: nextMetadata,
144
- // $FlowFixMe[prop-missing]
145
- // $FlowFixMe[incompatible-use]
146
- name: generatedNode.params.name,
147
- // $FlowFixMe[prop-missing]
148
- // $FlowFixMe[incompatible-use]
149
- operationKind: generatedNode.params.operationKind,
150
- text: docText,
151
- };
152
- }
153
- // $FlowFixMe[incompatible-type]
154
- generatedNode = {
155
- ...generatedNode,
156
- params: nextRequestParams,
157
- };
158
- }
159
-
160
- // Strip metadata only used within the compiler
161
- if (
162
- generatedNode.kind === RelayConcreteNode.SPLIT_OPERATION &&
163
- generatedNode.metadata?.derivedFrom != null
164
- ) {
165
- const {derivedFrom: _ignored, ...metadata} = generatedNode.metadata;
166
- // $FlowFixMe[incompatible-type]
167
- generatedNode = {
168
- ...generatedNode,
169
- metadata,
170
- };
171
- }
172
-
173
- const moduleText = formatModule({
174
- moduleName,
175
- documentType: typeName,
176
- definition,
177
- kind: generatedNode.kind,
178
- docText,
179
- typeText,
180
- hash: hash != null ? `@relayHash ${hash}` : null,
181
- concreteText: CodeMarker.postProcess(
182
- dedupeJSONStringify(generatedNode),
183
- printModuleDependency,
184
- ),
185
- sourceHash,
186
- // $FlowFixMe[incompatible-call]
187
- node: generatedNode,
188
- schema,
189
- });
190
- codegenDir.writeFile(filename, moduleText, shouldRepersist);
191
- if (
192
- writeQueryParameters &&
193
- queryParametersFilename != null &&
194
- generatedNode.kind === RelayConcreteNode.REQUEST &&
195
- // $FlowFixMe[incompatible-type]
196
- generatedNode.params.operationKind === 'query'
197
- ) {
198
- writeQueryParameters(
199
- codegenDir,
200
- queryParametersFilename,
201
- moduleName,
202
- // $FlowFixMe[incompatible-call]
203
- generatedNode.params,
204
- );
205
- }
206
- // $FlowFixMe[incompatible-call]
207
- return generatedNode;
208
- });
209
- }
210
-
211
- function extractHash(text: ?string): ?string {
212
- if (text == null || text.length === 0) {
213
- return null;
214
- }
215
- if (/<<<<<|>>>>>/.test(text)) {
216
- // looks like a merge conflict
217
- return null;
218
- }
219
- const match = text.match(/@relayHash (\w{32})\b/m);
220
- return match && match[1];
221
- }
222
-
223
- function extractRelayRequestID(text: ?string): ?string {
224
- if (text == null || text.length === 0) {
225
- return null;
226
- }
227
- if (/<<<<<|>>>>>/.test(text)) {
228
- // looks like a merge conflict
229
- return null;
230
- }
231
- const match = text.match(/@relayRequestID (.+)/);
232
- return match ? match[1] : null;
233
- }
234
-
235
- module.exports = writeRelayGeneratedFile;
@@ -1,73 +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
- import type {File} from '../codegen/CodegenTypes';
16
- import type {DocumentNode} from 'graphql';
17
-
18
- const Profiler = require('./GraphQLCompilerProfiler');
19
- // $FlowFixMe[untyped-import] : Immutable is not typed
20
- const {Map: ImmutableMap} = require('immutable');
21
-
22
- type ParseFn = (baseDir: string, file: File) => ?DocumentNode;
23
-
24
- class ASTCache {
25
- _documents: Map<string, DocumentNode>;
26
-
27
- _baseDir: string;
28
- _parse: ParseFn;
29
-
30
- constructor(config: {baseDir: string, parse: ParseFn, ...}) {
31
- this._documents = new Map();
32
- this._baseDir = config.baseDir;
33
- this._parse = Profiler.instrument(config.parse, 'ASTCache.parseFn');
34
- }
35
-
36
- // Short-term: we don't do subscriptions/delta updates, instead always use all definitions
37
- // $FlowFixMe[value-as-type]
38
- documents(): ImmutableMap<string, DocumentNode> {
39
- return ImmutableMap(this._documents);
40
- }
41
-
42
- // parse should return the set of changes
43
- parseFiles(files: Set<File>): ImmutableMap<string, DocumentNode> {
44
- let documents = ImmutableMap();
45
-
46
- files.forEach(file => {
47
- if (!file.exists) {
48
- this._documents.delete(file.relPath);
49
- return;
50
- }
51
-
52
- const doc = (() => {
53
- try {
54
- return this._parse(this._baseDir, file);
55
- } catch (error) {
56
- throw new Error(`Parse error: ${error} in "${file.relPath}"`);
57
- }
58
- })();
59
-
60
- if (!doc) {
61
- this._documents.delete(file.relPath);
62
- return;
63
- }
64
-
65
- documents = documents.set(file.relPath, doc);
66
- this._documents.set(file.relPath, doc);
67
- });
68
-
69
- return documents;
70
- }
71
- }
72
-
73
- module.exports = ASTCache;
@@ -1,230 +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
- import type {Fragment, Root} from './IR';
16
- import type {Schema} from './Schema';
17
- import type {
18
- DefinitionNode,
19
- DocumentNode,
20
- FragmentDefinitionNode,
21
- FragmentSpreadNode,
22
- GraphQLSchema,
23
- OperationDefinitionNode,
24
- TypeSystemDefinitionNode,
25
- TypeSystemExtensionNode,
26
- } from 'graphql';
27
-
28
- const Profiler = require('./GraphQLCompilerProfiler');
29
- const {
30
- isExecutableDefinitionAST,
31
- isSchemaDefinitionAST,
32
- } = require('./SchemaUtils');
33
- const {extendSchema, parse, print, visit} = require('graphql');
34
-
35
- type ASTDefinitionNode = FragmentDefinitionNode | OperationDefinitionNode;
36
- type TransformFn = (
37
- schema: Schema,
38
- definitions: $ReadOnlyArray<ASTDefinitionNode>,
39
- ) => $ReadOnlyArray<Root | Fragment>;
40
-
41
- function convertASTDocuments(
42
- schema: Schema,
43
- documents: $ReadOnlyArray<DocumentNode>,
44
- transform: TransformFn,
45
- ): $ReadOnlyArray<Fragment | Root> {
46
- return Profiler.run('ASTConvert.convertASTDocuments', () => {
47
- const definitions = definitionsFromDocuments(documents);
48
-
49
- const astDefinitions: Array<ASTDefinitionNode> = [];
50
- documents.forEach(doc => {
51
- doc.definitions.forEach(definition => {
52
- if (isExecutableDefinitionAST(definition)) {
53
- astDefinitions.push(definition);
54
- }
55
- });
56
- });
57
-
58
- return convertASTDefinitions(schema, definitions, transform);
59
- });
60
- }
61
-
62
- function convertASTDocumentsWithBase(
63
- schema: Schema,
64
- baseDocuments: $ReadOnlyArray<DocumentNode>,
65
- documents: $ReadOnlyArray<DocumentNode>,
66
- transform: TransformFn,
67
- ): $ReadOnlyArray<Fragment | Root> {
68
- return Profiler.run('ASTConvert.convertASTDocumentsWithBase', () => {
69
- const baseDefinitions = definitionsFromDocuments(baseDocuments);
70
- const definitions = definitionsFromDocuments(documents);
71
-
72
- const requiredDefinitions = new Map();
73
- const baseMap: Map<string, ASTDefinitionNode> = new Map();
74
- baseDefinitions.forEach(definition => {
75
- if (isExecutableDefinitionAST(definition)) {
76
- const definitionName = definition.name && definition.name.value;
77
- // If there's no name, no reason to put in the map
78
- if (definitionName != null) {
79
- if (baseMap.has(definitionName)) {
80
- throw new Error(`Duplicate definition of '${definitionName}'.`);
81
- }
82
- baseMap.set(definitionName, definition);
83
- }
84
- }
85
- });
86
-
87
- const definitionsToVisit: Array<ASTDefinitionNode> = [];
88
- definitions.forEach(definition => {
89
- if (isExecutableDefinitionAST(definition)) {
90
- definitionsToVisit.push(definition);
91
- }
92
- });
93
- while (definitionsToVisit.length > 0) {
94
- const definition = definitionsToVisit.pop();
95
- const name = definition.name && definition.name.value;
96
- if (name == null) {
97
- continue;
98
- }
99
- if (requiredDefinitions.has(name)) {
100
- if (requiredDefinitions.get(name) !== definition) {
101
- throw new Error(`Duplicate definition of '${name}'.`);
102
- }
103
- continue;
104
- }
105
- requiredDefinitions.set(name, definition);
106
- visit(definition, {
107
- FragmentSpread(spread: FragmentSpreadNode) {
108
- const baseDefinition = baseMap.get(spread.name.value);
109
- if (baseDefinition) {
110
- // We only need to add those definitions not already included
111
- // in definitions
112
- definitionsToVisit.push(baseDefinition);
113
- }
114
- },
115
- });
116
- }
117
-
118
- const definitionsToConvert = [];
119
- requiredDefinitions.forEach(definition =>
120
- definitionsToConvert.push(definition),
121
- );
122
- return convertASTDefinitions(schema, definitionsToConvert, transform);
123
- });
124
- }
125
-
126
- function convertASTDefinitions(
127
- schema: Schema,
128
- definitions: $ReadOnlyArray<DefinitionNode>,
129
- transform: TransformFn,
130
- ): $ReadOnlyArray<Fragment | Root> {
131
- const operationDefinitions: Array<ASTDefinitionNode> = [];
132
- definitions.forEach(definition => {
133
- if (isExecutableDefinitionAST(definition)) {
134
- operationDefinitions.push(definition);
135
- }
136
- });
137
- return transform(schema, operationDefinitions);
138
- }
139
-
140
- function definitionsFromDocuments(
141
- documents: $ReadOnlyArray<DocumentNode>,
142
- ): $ReadOnlyArray<DefinitionNode> {
143
- const definitions = [];
144
- documents.forEach(doc => {
145
- doc.definitions.forEach(definition => definitions.push(definition));
146
- });
147
- return definitions;
148
- }
149
-
150
- /**
151
- * Extends a GraphQLSchema with a list of schema extensions in string form.
152
- */
153
- function transformASTSchema(
154
- schema: GraphQLSchema,
155
- schemaExtensions: $ReadOnlyArray<string>,
156
- ): GraphQLSchema {
157
- return Profiler.run('ASTConvert.transformASTSchema', () => {
158
- if (schemaExtensions.length === 0) {
159
- return schema;
160
- }
161
- const extension = schemaExtensions.join('\n');
162
- return cachedExtend(schema, extension, () =>
163
- extendSchema(schema, parse(extension)),
164
- );
165
- });
166
- }
167
-
168
- /**
169
- * Extends a GraphQLSchema with a list of schema extensions in AST form.
170
- */
171
- function extendASTSchema(
172
- baseSchema: GraphQLSchema,
173
- documents: $ReadOnlyArray<DocumentNode>,
174
- ): GraphQLSchema {
175
- return Profiler.run('ASTConvert.extendASTSchema', () => {
176
- const schemaExtensions: Array<
177
- TypeSystemDefinitionNode | TypeSystemExtensionNode,
178
- > = [];
179
- documents.forEach(doc => {
180
- doc.definitions.forEach(definition => {
181
- if (isSchemaDefinitionAST(definition)) {
182
- schemaExtensions.push(definition);
183
- }
184
- });
185
- });
186
- if (schemaExtensions.length === 0) {
187
- return baseSchema;
188
- }
189
- const key = schemaExtensions.map(print).join('\n');
190
- return cachedExtend(baseSchema, key, () =>
191
- extendSchema(
192
- baseSchema,
193
- {
194
- kind: 'Document',
195
- definitions: schemaExtensions,
196
- },
197
- // TODO T24511737 figure out if this is dangerous
198
- {assumeValid: true},
199
- ),
200
- );
201
- });
202
- }
203
-
204
- const extendedSchemas: Map<GraphQLSchema, {[key: string]: GraphQLSchema, ...}> =
205
- new Map();
206
-
207
- function cachedExtend(
208
- schema: GraphQLSchema,
209
- key: string,
210
- compute: () => GraphQLSchema,
211
- ): GraphQLSchema {
212
- let cache = extendedSchemas.get(schema);
213
- if (!cache) {
214
- cache = {};
215
- extendedSchemas.set(schema, cache);
216
- }
217
- let extendedSchema = cache[key];
218
- if (!extendedSchema) {
219
- extendedSchema = compute();
220
- cache[key] = extendedSchema;
221
- }
222
- return extendedSchema;
223
- }
224
-
225
- module.exports = {
226
- convertASTDocuments,
227
- convertASTDocumentsWithBase,
228
- extendASTSchema,
229
- transformASTSchema,
230
- };