relay-compiler 0.0.0-main-8ff54d69 → 0.0.0-main-4467ae84

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,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
- import type {WriteFilesOptions} from '../codegen/CodegenRunner';
16
- import type {ScalarTypeMapping} from '../language/javascript/RelayFlowTypeTransformers';
17
- import type {
18
- PluginInitializer,
19
- PluginInterface,
20
- } from '../language/RelayLanguagePluginInterface';
21
-
22
- const CodegenRunner = require('../codegen/CodegenRunner');
23
- const RelayFileWriter = require('../codegen/RelayFileWriter');
24
- const DotGraphQLParser = require('../core/DotGraphQLParser');
25
- const WatchmanClient = require('../core/GraphQLWatchmanClient');
26
- const RelayIRTransforms = require('../core/RelayIRTransforms');
27
- const RelaySourceModuleParser = require('../core/RelaySourceModuleParser');
28
- const RelayLanguagePluginJavaScript = require('../language/javascript/RelayLanguagePluginJavaScript');
29
- const ConsoleReporter = require('../reporters/ConsoleReporter');
30
- const crypto = require('crypto');
31
- const fs = require('fs');
32
- const glob = require('glob');
33
- const {Source, buildClientSchema, printSchema} = require('graphql');
34
- const invariant = require('invariant');
35
- const path = require('path');
36
-
37
- const {
38
- commonTransforms,
39
- codegenTransforms,
40
- fragmentTransforms,
41
- printTransforms,
42
- queryTransforms,
43
- schemaExtensions: relaySchemaExtensions,
44
- } = RelayIRTransforms;
45
-
46
- export type Config = {|
47
- schema: string,
48
- src: string,
49
- extensions: Array<string>,
50
- include: Array<string>,
51
- exclude: Array<string>,
52
- verbose: boolean,
53
- watchman: boolean,
54
- watch?: ?boolean,
55
- validate: boolean,
56
- quiet: boolean,
57
- persistOutput?: ?string,
58
- noFutureProofEnums: boolean,
59
- eagerESModules?: boolean,
60
- language: string | PluginInitializer,
61
- persistFunction?: ?string | ?((text: string) => Promise<string>),
62
- repersist: boolean,
63
- artifactDirectory?: ?string,
64
- customScalars?: ScalarTypeMapping,
65
- |};
66
-
67
- function buildWatchExpression(config: {
68
- extensions: Array<string>,
69
- include: Array<string>,
70
- exclude: Array<string>,
71
- ...
72
- }) {
73
- return [
74
- 'allof',
75
- ['type', 'f'],
76
- ['anyof', ...config.extensions.map(ext => ['suffix', ext])],
77
- [
78
- 'anyof',
79
- ...config.include.map(include => ['match', include, 'wholename']),
80
- ],
81
- ...config.exclude.map(exclude => ['not', ['match', exclude, 'wholename']]),
82
- ];
83
- }
84
-
85
- function getFilepathsFromGlob(
86
- baseDir: string,
87
- config: {
88
- extensions: Array<string>,
89
- include: Array<string>,
90
- exclude: Array<string>,
91
- ...
92
- },
93
- ): Array<string> {
94
- const {extensions, include, exclude} = config;
95
-
96
- const files = new Set();
97
- include.forEach(inc =>
98
- glob
99
- .sync(`${inc}/*.+(${extensions.join('|')})`, {
100
- cwd: baseDir,
101
- ignore: exclude,
102
- })
103
- .forEach(file => files.add(file)),
104
- );
105
- return Array.from(files);
106
- }
107
-
108
- type LanguagePlugin = PluginInitializer | {default: PluginInitializer, ...};
109
-
110
- /**
111
- * Unless the requested plugin is the builtin `javascript` one, import a
112
- * language plugin as either a CommonJS or ES2015 module.
113
- *
114
- * When importing, first check if it’s a path to an existing file, otherwise
115
- * assume it’s a package and prepend the plugin namespace prefix.
116
- *
117
- * Make sure to always use Node's `require` function, which otherwise would get
118
- * replaced with `__webpack_require__` when bundled using webpack, by using
119
- * `eval` to get it at runtime.
120
- */
121
- function getLanguagePlugin(
122
- language: string | PluginInitializer,
123
- options?: {|
124
- eagerESModules: boolean,
125
- |},
126
- ): PluginInterface {
127
- if (language === 'javascript') {
128
- return RelayLanguagePluginJavaScript({
129
- eagerESModules: Boolean(options && options.eagerESModules),
130
- });
131
- } else {
132
- let languagePlugin: LanguagePlugin;
133
- if (typeof language === 'string') {
134
- const pluginPath = path.resolve(process.cwd(), language);
135
- const requirePath = fs.existsSync(pluginPath)
136
- ? pluginPath
137
- : `relay-compiler-language-${language}`;
138
- try {
139
- // eslint-disable-next-line no-eval
140
- languagePlugin = eval('require')(requirePath);
141
- if (languagePlugin.default) {
142
- languagePlugin = languagePlugin.default;
143
- }
144
- } catch (err) {
145
- const e = new Error(
146
- `Unable to load language plugin ${requirePath}: ${err.message}`,
147
- );
148
- e.stack = err.stack;
149
- throw e;
150
- }
151
- } else {
152
- languagePlugin = language;
153
- }
154
- if (languagePlugin.default != null) {
155
- /* $FlowFixMe[incompatible-type] - Flow no longer considers statics of
156
- * functions as any */
157
- languagePlugin = languagePlugin.default;
158
- }
159
- if (typeof languagePlugin === 'function') {
160
- // $FlowFixMe[incompatible-use]
161
- return languagePlugin();
162
- } else {
163
- throw new Error('Expected plugin to be a initializer function.');
164
- }
165
- }
166
- }
167
-
168
- function getPersistQueryFunction(
169
- config: Config,
170
- ): ?(text: string) => Promise<string> {
171
- const configValue = config.persistFunction;
172
- if (configValue == null) {
173
- return null;
174
- } else if (typeof configValue === 'string') {
175
- try {
176
- // eslint-disable-next-line no-eval
177
- const persistFunction = eval('require')(
178
- path.resolve(process.cwd(), configValue),
179
- );
180
- if (persistFunction.default) {
181
- return persistFunction.default;
182
- }
183
- return persistFunction;
184
- } catch (err) {
185
- const e = new Error(
186
- `Unable to load persistFunction ${configValue}: ${err.message}`,
187
- );
188
- e.stack = err.stack;
189
- throw e;
190
- }
191
- } else if (typeof configValue === 'function') {
192
- return configValue;
193
- } else {
194
- throw new Error(
195
- 'Expected persistFunction to be a path string or a function.',
196
- );
197
- }
198
- }
199
-
200
- async function main(defaultConfig: Config) {
201
- if (defaultConfig.verbose && defaultConfig.quiet) {
202
- throw new Error("I can't be quiet and verbose at the same time");
203
- }
204
-
205
- let config = getPathBasedConfig(defaultConfig);
206
- config = await getWatchConfig(config);
207
-
208
- // Use function from module.exports to be able to mock it for tests
209
- // $FlowFixMe[cannot-read]
210
- const codegenRunner = module.exports.getCodegenRunner(config);
211
-
212
- const result = config.watch
213
- ? await codegenRunner.watchAll()
214
- : await codegenRunner.compileAll();
215
-
216
- if (result === 'ERROR') {
217
- process.exit(100);
218
- }
219
- if (config.validate && result !== 'NO_CHANGES') {
220
- process.exit(101);
221
- }
222
- }
223
-
224
- function getPathBasedConfig(config: Config) {
225
- const schema = path.resolve(process.cwd(), config.schema);
226
- if (!fs.existsSync(schema)) {
227
- throw new Error(`--schema path does not exist: ${schema}`);
228
- }
229
-
230
- const src = path.resolve(process.cwd(), config.src);
231
- if (!fs.existsSync(src)) {
232
- throw new Error(`--src path does not exist: ${src}`);
233
- }
234
-
235
- let persistOutput = config.persistOutput;
236
- if (typeof persistOutput === 'string') {
237
- persistOutput = path.resolve(process.cwd(), persistOutput);
238
- const persistOutputDir = path.dirname(persistOutput);
239
- if (!fs.existsSync(persistOutputDir)) {
240
- throw new Error(`--persistOutput path does not exist: ${persistOutput}`);
241
- }
242
- }
243
-
244
- return {...config, schema, src, persistOutput};
245
- }
246
-
247
- async function getWatchConfig(config: Config): Promise<Config> {
248
- const watchman = config.watchman && (await WatchmanClient.isAvailable());
249
-
250
- if (config.watch) {
251
- if (!watchman) {
252
- console.error(
253
- 'Watchman is required to watch for changes. Running with watch mode disabled.',
254
- );
255
- return {...config, watch: false, watchman: false};
256
- }
257
- // $FlowFixMe[cannot-read]
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;