relay-compiler 11.0.2 → 13.0.0-rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (261) hide show
  1. package/README.md +108 -0
  2. package/cli.js +23 -0
  3. package/index.js +22 -4
  4. package/linux-x64/relay +0 -0
  5. package/macos-arm64/relay +0 -0
  6. package/macos-x64/relay +0 -0
  7. package/package.json +2 -26
  8. package/win-x64/relay.exe +0 -0
  9. package/bin/RelayCompilerBin.js.flow +0 -169
  10. package/bin/RelayCompilerMain.js.flow +0 -515
  11. package/bin/__fixtures__/plugin-module.js.flow +0 -17
  12. package/bin/relay-compiler +0 -19008
  13. package/codegen/CodegenDirectory.js.flow +0 -375
  14. package/codegen/CodegenRunner.js.flow +0 -432
  15. package/codegen/CodegenTypes.js.flow +0 -28
  16. package/codegen/CodegenWatcher.js.flow +0 -254
  17. package/codegen/NormalizationCodeGenerator.js.flow +0 -571
  18. package/codegen/ReaderCodeGenerator.js.flow +0 -512
  19. package/codegen/RelayCodeGenerator.js.flow +0 -85
  20. package/codegen/RelayFileWriter.js.flow +0 -367
  21. package/codegen/SourceControl.js.flow +0 -58
  22. package/codegen/compileRelayArtifacts.js.flow +0 -182
  23. package/codegen/createPrintRequireModuleDependency.js.flow +0 -21
  24. package/codegen/sortObjectByKey.js.flow +0 -25
  25. package/codegen/writeRelayGeneratedFile.js.flow +0 -239
  26. package/core/ASTCache.js.flow +0 -74
  27. package/core/ASTConvert.js.flow +0 -233
  28. package/core/CompilerContext.js.flow +0 -191
  29. package/core/CompilerError.js.flow +0 -255
  30. package/core/DotGraphQLParser.js.flow +0 -39
  31. package/core/GraphQLCompilerProfiler.js.flow +0 -341
  32. package/core/GraphQLDerivedFromMetadata.js.flow +0 -36
  33. package/core/GraphQLWatchmanClient.js.flow +0 -111
  34. package/core/IR.js.flow +0 -326
  35. package/core/IRPrinter.js.flow +0 -478
  36. package/core/IRTransformer.js.flow +0 -377
  37. package/core/IRValidator.js.flow +0 -260
  38. package/core/IRVisitor.js.flow +0 -150
  39. package/core/JSModuleParser.js.flow +0 -24
  40. package/core/RelayCompilerScope.js.flow +0 -199
  41. package/core/RelayFindGraphQLTags.js.flow +0 -119
  42. package/core/RelayGraphQLEnumsGenerator.js.flow +0 -55
  43. package/core/RelayIRTransforms.js.flow +0 -138
  44. package/core/RelayParser.js.flow +0 -1734
  45. package/core/RelaySourceModuleParser.js.flow +0 -135
  46. package/core/Schema.js.flow +0 -2037
  47. package/core/SchemaUtils.js.flow +0 -120
  48. package/core/filterContextForNode.js.flow +0 -50
  49. package/core/getFieldDefinition.js.flow +0 -156
  50. package/core/getIdentifierForArgumentValue.js.flow +0 -49
  51. package/core/getIdentifierForSelection.js.flow +0 -69
  52. package/core/getLiteralArgumentValues.js.flow +0 -32
  53. package/core/getNormalizationOperationName.js.flow +0 -19
  54. package/core/inferRootArgumentDefinitions.js.flow +0 -323
  55. package/index.js.flow +0 -200
  56. package/language/RelayLanguagePluginInterface.js.flow +0 -283
  57. package/language/javascript/FindGraphQLTags.js.flow +0 -137
  58. package/language/javascript/RelayFlowBabelFactories.js.flow +0 -176
  59. package/language/javascript/RelayFlowGenerator.js.flow +0 -1100
  60. package/language/javascript/RelayFlowTypeTransformers.js.flow +0 -184
  61. package/language/javascript/RelayLanguagePluginJavaScript.js.flow +0 -34
  62. package/language/javascript/formatGeneratedModule.js.flow +0 -65
  63. package/lib/bin/RelayCompilerBin.js +0 -143
  64. package/lib/bin/RelayCompilerMain.js +0 -486
  65. package/lib/bin/__fixtures__/plugin-module.js +0 -16
  66. package/lib/codegen/CodegenDirectory.js +0 -336
  67. package/lib/codegen/CodegenRunner.js +0 -433
  68. package/lib/codegen/CodegenTypes.js +0 -11
  69. package/lib/codegen/CodegenWatcher.js +0 -271
  70. package/lib/codegen/NormalizationCodeGenerator.js +0 -481
  71. package/lib/codegen/ReaderCodeGenerator.js +0 -472
  72. package/lib/codegen/RelayCodeGenerator.js +0 -68
  73. package/lib/codegen/RelayFileWriter.js +0 -270
  74. package/lib/codegen/SourceControl.js +0 -60
  75. package/lib/codegen/compileRelayArtifacts.js +0 -157
  76. package/lib/codegen/createPrintRequireModuleDependency.js +0 -19
  77. package/lib/codegen/sortObjectByKey.js +0 -41
  78. package/lib/codegen/writeRelayGeneratedFile.js +0 -208
  79. package/lib/core/ASTCache.js +0 -70
  80. package/lib/core/ASTConvert.js +0 -198
  81. package/lib/core/CompilerContext.js +0 -165
  82. package/lib/core/CompilerError.js +0 -251
  83. package/lib/core/DotGraphQLParser.js +0 -40
  84. package/lib/core/GraphQLCompilerProfiler.js +0 -299
  85. package/lib/core/GraphQLDerivedFromMetadata.js +0 -31
  86. package/lib/core/GraphQLWatchmanClient.js +0 -150
  87. package/lib/core/IR.js +0 -11
  88. package/lib/core/IRPrinter.js +0 -389
  89. package/lib/core/IRTransformer.js +0 -345
  90. package/lib/core/IRValidator.js +0 -226
  91. package/lib/core/IRVisitor.js +0 -45
  92. package/lib/core/JSModuleParser.js +0 -18
  93. package/lib/core/RelayCompilerScope.js +0 -149
  94. package/lib/core/RelayFindGraphQLTags.js +0 -79
  95. package/lib/core/RelayGraphQLEnumsGenerator.js +0 -50
  96. package/lib/core/RelayIRTransforms.js +0 -109
  97. package/lib/core/RelayParser.js +0 -1382
  98. package/lib/core/RelaySourceModuleParser.js +0 -104
  99. package/lib/core/Schema.js +0 -1877
  100. package/lib/core/SchemaUtils.js +0 -98
  101. package/lib/core/filterContextForNode.js +0 -49
  102. package/lib/core/getFieldDefinition.js +0 -145
  103. package/lib/core/getIdentifierForArgumentValue.js +0 -53
  104. package/lib/core/getIdentifierForSelection.js +0 -48
  105. package/lib/core/getLiteralArgumentValues.js +0 -26
  106. package/lib/core/getNormalizationOperationName.js +0 -17
  107. package/lib/core/inferRootArgumentDefinitions.js +0 -351
  108. package/lib/index.js +0 -178
  109. package/lib/language/RelayLanguagePluginInterface.js +0 -14
  110. package/lib/language/javascript/FindGraphQLTags.js +0 -126
  111. package/lib/language/javascript/RelayFlowBabelFactories.js +0 -160
  112. package/lib/language/javascript/RelayFlowGenerator.js +0 -857
  113. package/lib/language/javascript/RelayFlowTypeTransformers.js +0 -119
  114. package/lib/language/javascript/RelayLanguagePluginJavaScript.js +0 -30
  115. package/lib/language/javascript/formatGeneratedModule.js +0 -36
  116. package/lib/reporters/ConsoleReporter.js +0 -61
  117. package/lib/reporters/MultiReporter.js +0 -45
  118. package/lib/reporters/Reporter.js +0 -11
  119. package/lib/runner/Artifacts.js +0 -323
  120. package/lib/runner/BufferedFilesystem.js +0 -261
  121. package/lib/runner/GraphQLASTNodeGroup.js +0 -256
  122. package/lib/runner/GraphQLASTUtils.js +0 -23
  123. package/lib/runner/GraphQLNodeMap.js +0 -81
  124. package/lib/runner/Sources.js +0 -271
  125. package/lib/runner/StrictMap.js +0 -134
  126. package/lib/runner/compileArtifacts.js +0 -39
  127. package/lib/runner/extractAST.js +0 -77
  128. package/lib/runner/getChangedNodeNames.js +0 -82
  129. package/lib/runner/getSchemaInstance.js +0 -30
  130. package/lib/runner/types.js +0 -12
  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 -41
  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 -44
  154. package/lib/transforms/SkipRedundantNodesTransform.js +0 -254
  155. package/lib/transforms/SkipSplitOperationTransform.js +0 -32
  156. package/lib/transforms/SkipUnreachableNodeTransform.js +0 -158
  157. package/lib/transforms/SkipUnusedVariablesTransform.js +0 -74
  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 -91
  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 -98
  174. package/lib/util/Rollout.js +0 -40
  175. package/lib/util/TimeReporter.js +0 -83
  176. package/lib/util/areEqualArgValues.js +0 -134
  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 -66
  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 -219
  194. package/runner/BufferedFilesystem.js.flow +0 -194
  195. package/runner/GraphQLASTNodeGroup.js.flow +0 -176
  196. package/runner/GraphQLASTUtils.js.flow +0 -26
  197. package/runner/GraphQLNodeMap.js.flow +0 -55
  198. package/runner/Sources.js.flow +0 -228
  199. package/runner/StrictMap.js.flow +0 -96
  200. package/runner/compileArtifacts.js.flow +0 -76
  201. package/runner/extractAST.js.flow +0 -100
  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/transforms/ApplyFragmentArgumentTransform.js.flow +0 -526
  206. package/transforms/ClientExtensionsTransform.js.flow +0 -225
  207. package/transforms/ConnectionTransform.js.flow +0 -855
  208. package/transforms/DeclarativeConnectionMutationTransform.js.flow +0 -247
  209. package/transforms/DeferStreamTransform.js.flow +0 -265
  210. package/transforms/DisallowIdAsAlias.js.flow +0 -47
  211. package/transforms/DisallowTypenameOnRoot.js.flow +0 -45
  212. package/transforms/FieldHandleTransform.js.flow +0 -79
  213. package/transforms/FilterCompilerDirectivesTransform.js.flow +0 -33
  214. package/transforms/FilterDirectivesTransform.js.flow +0 -45
  215. package/transforms/FlattenTransform.js.flow +0 -460
  216. package/transforms/GenerateIDFieldTransform.js.flow +0 -152
  217. package/transforms/GenerateTypeNameTransform.js.flow +0 -161
  218. package/transforms/InlineDataFragmentTransform.js.flow +0 -125
  219. package/transforms/InlineFragmentsTransform.js.flow +0 -71
  220. package/transforms/MaskTransform.js.flow +0 -126
  221. package/transforms/MatchTransform.js.flow +0 -589
  222. package/transforms/ReactFlightComponentTransform.js.flow +0 -195
  223. package/transforms/RefetchableFragmentTransform.js.flow +0 -272
  224. package/transforms/RelayDirectiveTransform.js.flow +0 -97
  225. package/transforms/RequiredFieldTransform.js.flow +0 -415
  226. package/transforms/SkipClientExtensionsTransform.js.flow +0 -54
  227. package/transforms/SkipHandleFieldTransform.js.flow +0 -44
  228. package/transforms/SkipRedundantNodesTransform.js.flow +0 -258
  229. package/transforms/SkipSplitOperationTransform.js.flow +0 -37
  230. package/transforms/SkipUnreachableNodeTransform.js.flow +0 -149
  231. package/transforms/SkipUnusedVariablesTransform.js.flow +0 -59
  232. package/transforms/SplitModuleImportTransform.js.flow +0 -98
  233. package/transforms/TestOperationTransform.js.flow +0 -142
  234. package/transforms/TransformUtils.js.flow +0 -26
  235. package/transforms/ValidateGlobalVariablesTransform.js.flow +0 -81
  236. package/transforms/ValidateRequiredArgumentsTransform.js.flow +0 -127
  237. package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +0 -112
  238. package/transforms/ValidateUnusedVariablesTransform.js.flow +0 -89
  239. package/transforms/query-generators/FetchableQueryGenerator.js.flow +0 -189
  240. package/transforms/query-generators/NodeQueryGenerator.js.flow +0 -219
  241. package/transforms/query-generators/QueryQueryGenerator.js.flow +0 -57
  242. package/transforms/query-generators/ViewerQueryGenerator.js.flow +0 -97
  243. package/transforms/query-generators/index.js.flow +0 -90
  244. package/transforms/query-generators/utils.js.flow +0 -76
  245. package/util/CodeMarker.js.flow +0 -79
  246. package/util/DefaultHandleKey.js.flow +0 -17
  247. package/util/RelayCompilerCache.js.flow +0 -88
  248. package/util/Rollout.js.flow +0 -39
  249. package/util/TimeReporter.js.flow +0 -79
  250. package/util/areEqualArgValues.js.flow +0 -125
  251. package/util/argumentContainsVariables.js.flow +0 -38
  252. package/util/dedupeJSONStringify.js.flow +0 -152
  253. package/util/generateAbstractTypeRefinementKey.js.flow +0 -29
  254. package/util/getDefinitionNodeHash.js.flow +0 -25
  255. package/util/getModuleName.js.flow +0 -39
  256. package/util/joinArgumentDefinitions.js.flow +0 -105
  257. package/util/md5.js.flow +0 -22
  258. package/util/murmurHash.js.flow +0 -94
  259. package/util/nullthrowsOSS.js.flow +0 -25
  260. package/util/orList.js.flow +0 -37
  261. package/util/partitionArray.js.flow +0 -37
@@ -1,515 +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 CodegenRunner = require('../codegen/CodegenRunner');
16
- const ConsoleReporter = require('../reporters/ConsoleReporter');
17
- const DotGraphQLParser = require('../core/DotGraphQLParser');
18
- const RelayFileWriter = require('../codegen/RelayFileWriter');
19
- const RelayIRTransforms = require('../core/RelayIRTransforms');
20
- const RelayLanguagePluginJavaScript = require('../language/javascript/RelayLanguagePluginJavaScript');
21
- const RelaySourceModuleParser = require('../core/RelaySourceModuleParser');
22
- const WatchmanClient = require('../core/GraphQLWatchmanClient');
23
-
24
- const crypto = require('crypto');
25
- const fs = require('fs');
26
- const glob = require('glob');
27
- const invariant = require('invariant');
28
- const path = require('path');
29
-
30
- const {buildClientSchema, Source, printSchema} = require('graphql');
31
-
32
- const {
33
- commonTransforms,
34
- codegenTransforms,
35
- fragmentTransforms,
36
- printTransforms,
37
- queryTransforms,
38
- schemaExtensions: relaySchemaExtensions,
39
- } = RelayIRTransforms;
40
-
41
- import type {ScalarTypeMapping} from '../language/javascript/RelayFlowTypeTransformers';
42
- import type {WriteFilesOptions} from '../codegen/CodegenRunner';
43
- import type {
44
- PluginInitializer,
45
- PluginInterface,
46
- } from '../language/RelayLanguagePluginInterface';
47
-
48
- export type Config = {|
49
- schema: string,
50
- src: string,
51
- extensions: Array<string>,
52
- include: Array<string>,
53
- exclude: Array<string>,
54
- verbose: boolean,
55
- watchman: boolean,
56
- watch?: ?boolean,
57
- validate: boolean,
58
- quiet: boolean,
59
- persistOutput?: ?string,
60
- noFutureProofEnums: boolean,
61
- eagerESModules?: boolean,
62
- language: string | PluginInitializer,
63
- persistFunction?: ?string | ?((text: string) => Promise<string>),
64
- repersist: boolean,
65
- artifactDirectory?: ?string,
66
- customScalars?: ScalarTypeMapping,
67
- |};
68
-
69
- function buildWatchExpression(config: {
70
- extensions: Array<string>,
71
- include: Array<string>,
72
- exclude: Array<string>,
73
- ...
74
- }) {
75
- return [
76
- 'allof',
77
- ['type', 'f'],
78
- ['anyof', ...config.extensions.map(ext => ['suffix', ext])],
79
- [
80
- 'anyof',
81
- ...config.include.map(include => ['match', include, 'wholename']),
82
- ],
83
- ...config.exclude.map(exclude => ['not', ['match', exclude, 'wholename']]),
84
- ];
85
- }
86
-
87
- function getFilepathsFromGlob(
88
- baseDir,
89
- config: {
90
- extensions: Array<string>,
91
- include: Array<string>,
92
- exclude: Array<string>,
93
- ...
94
- },
95
- ): Array<string> {
96
- const {extensions, include, exclude} = config;
97
-
98
- const files = new Set();
99
- include.forEach(inc =>
100
- glob
101
- .sync(`${inc}/*.+(${extensions.join('|')})`, {
102
- cwd: baseDir,
103
- ignore: exclude,
104
- })
105
- .forEach(file => files.add(file)),
106
- );
107
- return Array.from(files);
108
- }
109
-
110
- type LanguagePlugin = PluginInitializer | {default: PluginInitializer, ...};
111
-
112
- /**
113
- * Unless the requested plugin is the builtin `javascript` one, import a
114
- * language plugin as either a CommonJS or ES2015 module.
115
- *
116
- * When importing, first check if it’s a path to an existing file, otherwise
117
- * assume it’s a package and prepend the plugin namespace prefix.
118
- *
119
- * Make sure to always use Node's `require` function, which otherwise would get
120
- * replaced with `__webpack_require__` when bundled using webpack, by using
121
- * `eval` to get it at runtime.
122
- */
123
- function getLanguagePlugin(
124
- language: string | PluginInitializer,
125
- options?: {|
126
- eagerESModules: boolean,
127
- |},
128
- ): PluginInterface {
129
- if (language === 'javascript') {
130
- return RelayLanguagePluginJavaScript({
131
- eagerESModules: Boolean(options && options.eagerESModules),
132
- });
133
- } else {
134
- let languagePlugin: LanguagePlugin;
135
- if (typeof language === 'string') {
136
- const pluginPath = path.resolve(process.cwd(), language);
137
- const requirePath = fs.existsSync(pluginPath)
138
- ? pluginPath
139
- : `relay-compiler-language-${language}`;
140
- try {
141
- // eslint-disable-next-line no-eval
142
- languagePlugin = eval('require')(requirePath);
143
- if (languagePlugin.default) {
144
- languagePlugin = languagePlugin.default;
145
- }
146
- } catch (err) {
147
- const e = new Error(
148
- `Unable to load language plugin ${requirePath}: ${err.message}`,
149
- );
150
- e.stack = err.stack;
151
- throw e;
152
- }
153
- } else {
154
- languagePlugin = language;
155
- }
156
- if (languagePlugin.default != null) {
157
- /* $FlowFixMe[incompatible-type] - Flow no longer considers statics of
158
- * functions as any */
159
- languagePlugin = languagePlugin.default;
160
- }
161
- if (typeof languagePlugin === 'function') {
162
- // $FlowFixMe[incompatible-use]
163
- return languagePlugin();
164
- } else {
165
- throw new Error('Expected plugin to be a initializer function.');
166
- }
167
- }
168
- }
169
-
170
- function getPersistQueryFunction(
171
- config: Config,
172
- ): ?(text: string) => Promise<string> {
173
- const configValue = config.persistFunction;
174
- if (configValue == null) {
175
- return null;
176
- } else if (typeof configValue === 'string') {
177
- try {
178
- // eslint-disable-next-line no-eval
179
- const persistFunction = eval('require')(
180
- path.resolve(process.cwd(), configValue),
181
- );
182
- if (persistFunction.default) {
183
- return persistFunction.default;
184
- }
185
- return persistFunction;
186
- } catch (err) {
187
- const e = new Error(
188
- `Unable to load persistFunction ${configValue}: ${err.message}`,
189
- );
190
- e.stack = err.stack;
191
- throw e;
192
- }
193
- } else if (typeof configValue === 'function') {
194
- return configValue;
195
- } else {
196
- throw new Error(
197
- 'Expected persistFunction to be a path string or a function.',
198
- );
199
- }
200
- }
201
-
202
- async function main(defaultConfig: Config) {
203
- if (defaultConfig.verbose && defaultConfig.quiet) {
204
- throw new Error("I can't be quiet and verbose at the same time");
205
- }
206
-
207
- let config = getPathBasedConfig(defaultConfig);
208
- config = await getWatchConfig(config);
209
-
210
- // Use function from module.exports to be able to mock it for tests
211
- const codegenRunner = module.exports.getCodegenRunner(config);
212
-
213
- const result = config.watch
214
- ? await codegenRunner.watchAll()
215
- : await codegenRunner.compileAll();
216
-
217
- if (result === 'ERROR') {
218
- process.exit(100);
219
- }
220
- if (config.validate && result !== 'NO_CHANGES') {
221
- process.exit(101);
222
- }
223
- }
224
-
225
- function getPathBasedConfig(config: Config) {
226
- const schema = path.resolve(process.cwd(), config.schema);
227
- if (!fs.existsSync(schema)) {
228
- throw new Error(`--schema path does not exist: ${schema}`);
229
- }
230
-
231
- const src = path.resolve(process.cwd(), config.src);
232
- if (!fs.existsSync(src)) {
233
- throw new Error(`--src path does not exist: ${src}`);
234
- }
235
-
236
- let persistOutput = config.persistOutput;
237
- if (typeof persistOutput === 'string') {
238
- persistOutput = path.resolve(process.cwd(), persistOutput);
239
- const persistOutputDir = path.dirname(persistOutput);
240
- if (!fs.existsSync(persistOutputDir)) {
241
- throw new Error(`--persistOutput path does not exist: ${persistOutput}`);
242
- }
243
- }
244
-
245
- return {...config, schema, src, persistOutput};
246
- }
247
-
248
- async function getWatchConfig(config: Config): Promise<Config> {
249
- const watchman = config.watchman && (await WatchmanClient.isAvailable());
250
-
251
- if (config.watch) {
252
- if (!watchman) {
253
- console.error(
254
- 'Watchman is required to watch for changes. Running with watch mode disabled.',
255
- );
256
- return {...config, watch: false, watchman: false};
257
- }
258
- if (!module.exports.hasWatchmanRootFile(config.src)) {
259
- throw new Error(
260
- `
261
- --watch requires that the src directory have a valid watchman "root" file.
262
-
263
- Root files can include:
264
- - A .git/ Git folder
265
- - A .hg/ Mercurial folder
266
- - A .watchmanconfig file
267
-
268
- Ensure that one such file exists in ${config.src} or its parents.
269
- `.trim(),
270
- );
271
- }
272
- } else if (watchman && !config.validate) {
273
- // eslint-disable-next-line no-console
274
- console.log('HINT: pass --watch to keep watching for changes.');
275
- }
276
-
277
- return {...config, watchman};
278
- }
279
-
280
- function getCodegenRunner(config: Config): CodegenRunner {
281
- const reporter = new ConsoleReporter({
282
- verbose: config.verbose,
283
- quiet: config.quiet,
284
- });
285
- const schema = getSchemaSource(config.schema);
286
- const languagePlugin = getLanguagePlugin(config.language, {
287
- eagerESModules: config.eagerESModules === true,
288
- });
289
- const persistQueryFunction = getPersistQueryFunction(config);
290
- const inputExtensions = config.extensions || languagePlugin.inputExtensions;
291
- const outputExtension = languagePlugin.outputExtension;
292
- const sourceParserName = inputExtensions.join('/');
293
- const sourceWriterName = outputExtension;
294
- const sourceModuleParser = RelaySourceModuleParser(
295
- languagePlugin.findGraphQLTags,
296
- languagePlugin.getFileFilter,
297
- );
298
- const providedArtifactDirectory = config.artifactDirectory;
299
- const artifactDirectory =
300
- providedArtifactDirectory != null
301
- ? path.resolve(process.cwd(), providedArtifactDirectory)
302
- : null;
303
- const generatedDirectoryName = artifactDirectory ?? '__generated__';
304
- const sourceSearchOptions = {
305
- extensions: inputExtensions,
306
- include: config.include,
307
- exclude: ['**/*.graphql.*', ...config.exclude],
308
- };
309
- const graphqlSearchOptions = {
310
- extensions: ['graphql'],
311
- include: config.include,
312
- exclude: [path.relative(config.src, config.schema)].concat(config.exclude),
313
- };
314
- const defaultIsGeneratedFile = (filePath: string) =>
315
- filePath.endsWith('.graphql.' + outputExtension) &&
316
- filePath.includes(generatedDirectoryName);
317
- const schemaExtensions = languagePlugin.schemaExtensions
318
- ? [...languagePlugin.schemaExtensions, ...relaySchemaExtensions]
319
- : relaySchemaExtensions;
320
- const parserConfigs = {
321
- [sourceParserName]: {
322
- baseDir: config.src,
323
- getFileFilter: sourceModuleParser.getFileFilter,
324
- getParser: sourceModuleParser.getParser,
325
- getSchemaSource: () => schema,
326
- schemaExtensions,
327
- watchmanExpression: config.watchman
328
- ? buildWatchExpression(sourceSearchOptions)
329
- : null,
330
- filepaths: config.watchman
331
- ? null
332
- : getFilepathsFromGlob(config.src, sourceSearchOptions),
333
- },
334
- graphql: {
335
- baseDir: config.src,
336
- getParser: DotGraphQLParser.getParser,
337
- getSchemaSource: () => schema,
338
- schemaExtensions,
339
- watchmanExpression: config.watchman
340
- ? buildWatchExpression(graphqlSearchOptions)
341
- : null,
342
- filepaths: config.watchman
343
- ? null
344
- : getFilepathsFromGlob(config.src, graphqlSearchOptions),
345
- },
346
- };
347
- const writerConfigs = {
348
- [sourceWriterName]: {
349
- writeFiles: getRelayFileWriter(
350
- config.src,
351
- languagePlugin,
352
- config.noFutureProofEnums,
353
- artifactDirectory,
354
- config.persistOutput,
355
- config.customScalars,
356
- persistQueryFunction,
357
- config.repersist,
358
- ),
359
- isGeneratedFile: languagePlugin.isGeneratedFile
360
- ? languagePlugin.isGeneratedFile
361
- : defaultIsGeneratedFile,
362
- parser: sourceParserName,
363
- baseParsers: ['graphql'],
364
- },
365
- };
366
- const codegenRunner = new CodegenRunner({
367
- reporter,
368
- parserConfigs,
369
- writerConfigs,
370
- onlyValidate: config.validate,
371
- // TODO: allow passing in a flag or detect?
372
- sourceControl: null,
373
- });
374
- return codegenRunner;
375
- }
376
-
377
- function defaultPersistFunction(text: string): Promise<string> {
378
- const hasher = crypto.createHash('md5');
379
- hasher.update(text);
380
- const id = hasher.digest('hex');
381
- return Promise.resolve(id);
382
- }
383
-
384
- function getRelayFileWriter(
385
- baseDir: string,
386
- languagePlugin: PluginInterface,
387
- noFutureProofEnums: boolean,
388
- outputDir?: ?string,
389
- persistedQueryPath?: ?string,
390
- customScalars?: ScalarTypeMapping,
391
- persistFunction?: ?(text: string) => Promise<string>,
392
- repersist?: boolean,
393
- ) {
394
- return async ({
395
- onlyValidate,
396
- schema,
397
- documents,
398
- baseDocuments,
399
- sourceControl,
400
- reporter,
401
- }: WriteFilesOptions) => {
402
- let persistQuery;
403
- let queryMap;
404
- if (persistFunction != null || persistedQueryPath != null) {
405
- queryMap = new Map();
406
- const persistImplmentation = persistFunction || defaultPersistFunction;
407
- persistQuery = async (text: string) => {
408
- const id = await persistImplmentation(text);
409
- invariant(
410
- typeof id === 'string',
411
- 'Expected persist function to return a string, got `%s`.',
412
- id,
413
- );
414
- queryMap.set(id, text);
415
- return id;
416
- };
417
- }
418
- const schemaExtensions = languagePlugin.schemaExtensions
419
- ? [...languagePlugin.schemaExtensions, ...relaySchemaExtensions]
420
- : relaySchemaExtensions;
421
- const results = await RelayFileWriter.writeAll({
422
- config: {
423
- baseDir,
424
- compilerTransforms: {
425
- commonTransforms,
426
- codegenTransforms,
427
- fragmentTransforms,
428
- printTransforms,
429
- queryTransforms,
430
- },
431
- customScalars: customScalars || {},
432
- formatModule: languagePlugin.formatModule,
433
- optionalInputFieldsForFlow: [],
434
- schemaExtensions,
435
- useHaste: false,
436
- noFutureProofEnums,
437
- extension: languagePlugin.outputExtension,
438
- typeGenerator: languagePlugin.typeGenerator,
439
- outputDir,
440
- persistQuery,
441
- repersist,
442
- },
443
- onlyValidate,
444
- schema,
445
- baseDocuments,
446
- documents,
447
- reporter,
448
- sourceControl,
449
- languagePlugin,
450
- });
451
- if (queryMap != null && persistedQueryPath != null) {
452
- let object = {};
453
- if (fs.existsSync(persistedQueryPath)) {
454
- try {
455
- const prevText = fs.readFileSync(persistedQueryPath, 'utf8');
456
- const prevData = JSON.parse(prevText);
457
- if (prevData != null && typeof prevData === 'object') {
458
- object = prevData;
459
- } else {
460
- console.error(
461
- `Invalid data in persisted query file '${persistedQueryPath}', expected an object.`,
462
- );
463
- }
464
- } catch (error) {
465
- console.error(error);
466
- }
467
- }
468
- for (const [id, text] of queryMap.entries()) {
469
- object[id] = text;
470
- }
471
- const data = JSON.stringify(object, null, 2);
472
- fs.writeFileSync(persistedQueryPath, data, 'utf8');
473
- }
474
- return results;
475
- };
476
- }
477
-
478
- function getSchemaSource(schemaPath: string): Source {
479
- let source = fs.readFileSync(schemaPath, 'utf8');
480
- if (path.extname(schemaPath) === '.json') {
481
- source = printSchema(buildClientSchema(JSON.parse(source).data));
482
- }
483
- source = `
484
- directive @include(if: Boolean) on FRAGMENT_SPREAD | FIELD | INLINE_FRAGMENT
485
- directive @skip(if: Boolean) on FRAGMENT_SPREAD | FIELD | INLINE_FRAGMENT
486
-
487
- ${source}
488
- `;
489
- return new Source(source, schemaPath);
490
- }
491
-
492
- // Ensure that a watchman "root" file exists in the given directory
493
- // or a parent so that it can be watched
494
- const WATCHMAN_ROOT_FILES = ['.git', '.hg', '.watchmanconfig'];
495
- function hasWatchmanRootFile(testPath: string): boolean {
496
- while (path.dirname(testPath) !== testPath) {
497
- if (
498
- WATCHMAN_ROOT_FILES.some(file => {
499
- return fs.existsSync(path.join(testPath, file));
500
- })
501
- ) {
502
- return true;
503
- }
504
- testPath = path.dirname(testPath);
505
- }
506
- return false;
507
- }
508
-
509
- module.exports = {
510
- getCodegenRunner,
511
- getLanguagePlugin,
512
- getWatchConfig,
513
- hasWatchmanRootFile,
514
- main,
515
- };
@@ -1,17 +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
- * @emails oncall+relay
10
- */
11
-
12
- // flowlint ambiguous-object-type:error
13
-
14
- 'use strict';
15
- const RelayLanguagePluginJavaScript = require('../../language/javascript/RelayLanguagePluginJavaScript');
16
-
17
- module.exports = RelayLanguagePluginJavaScript;