Created
February 27, 2018 21:38
-
-
Save alloy/2e00f45df5d815b546f036f0dec14b7b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/packages/relay-compiler/bin/RelayCompilerBin.js b/packages/relay-compiler/bin/RelayCompilerBin.js | |
index b24b45f7..541ce050 100644 | |
--- a/packages/relay-compiler/bin/RelayCompilerBin.js | |
+++ b/packages/relay-compiler/bin/RelayCompilerBin.js | |
@@ -223,12 +223,13 @@ Ensure that one such file exists in ${srcDir} or its parents. | |
}), | |
}, | |
}; | |
+ const isGeneratedFile = new RegExp( | |
+ generatedDirectoryName + '\\/[^\\/]+\\.graphql\\.[^\\.]+$', | |
+ ); | |
const writerConfigs = { | |
js: { | |
getWriter: getRelayFileWriter(srcDir, languagePlugin, artifactDirectory), | |
- isGeneratedFile: (filePath: string) => | |
- filePath.endsWith('.graphql.' + languagePlugin.outputExtension) && | |
- filePath.includes(generatedDirectoryName), | |
+ isGeneratedFile: (filePath: string) => isGeneratedFile.test(filePath), | |
parser: 'js', | |
baseParsers: ['graphql'], | |
}, | |
@@ -285,7 +286,6 @@ function getRelayFileWriter( | |
inputFieldWhiteListForFlow: [], | |
schemaExtensions, | |
useHaste: false, | |
- extension: languagePlugin.outputExtension, | |
typeGenerator: languagePlugin.typeGenerator, | |
outputDir, | |
}, | |
diff --git a/packages/relay-compiler/codegen/RelayFileWriter.js b/packages/relay-compiler/codegen/RelayFileWriter.js | |
index a5d52386..cddd5341 100644 | |
--- a/packages/relay-compiler/codegen/RelayFileWriter.js | |
+++ b/packages/relay-compiler/codegen/RelayFileWriter.js | |
@@ -65,7 +65,6 @@ export type WriterConfig = { | |
relayRuntimeModule?: string, | |
schemaExtensions: Array<string>, | |
useHaste: boolean, | |
- extension: string, | |
typeGenerator: TypeGenerator, | |
// Haste style module that exports flow types for GraphQL enums. | |
// TODO(T22422153) support non-haste environments | |
@@ -276,7 +275,7 @@ class RelayFileWriter implements FileWriterInterface { | |
node.name, | |
); | |
- const typeText = this._config.typeGenerator.generate(typeNode, { | |
+ const typeDef = this._config.typeGenerator.generate(typeNode, { | |
customScalars: this._config.customScalars, | |
enumsHasteModule: this._config.enumsHasteModule, | |
existingFragmentNames, | |
@@ -294,12 +293,11 @@ class RelayFileWriter implements FileWriterInterface { | |
getGeneratedDirectory(node.name), | |
node, | |
formatModule, | |
- typeText, | |
+ typeDef, | |
persistQuery, | |
this._config.platform, | |
relayRuntimeModule, | |
sourceHash, | |
- this._config.extension, | |
); | |
}), | |
); | |
diff --git a/packages/relay-compiler/codegen/writeRelayGeneratedFile.js b/packages/relay-compiler/codegen/writeRelayGeneratedFile.js | |
index 0519252c..b23bb67f 100644 | |
--- a/packages/relay-compiler/codegen/writeRelayGeneratedFile.js | |
+++ b/packages/relay-compiler/codegen/writeRelayGeneratedFile.js | |
@@ -30,18 +30,17 @@ async function writeRelayGeneratedFile( | |
codegenDir: CodegenDirectory, | |
generatedNode: GeneratedNode, | |
formatModule: FormatModule, | |
- typeText: string, | |
+ typeDef: {text: string, fileExtension: string}, | |
_persistQuery: ?(text: string) => Promise<string>, | |
platform: ?string, | |
relayRuntimeModule: string, | |
sourceHash: string, | |
- extension: string, | |
): Promise<?GeneratedNode> { | |
// Copy to const so Flow can refine. | |
const persistQuery = _persistQuery; | |
const moduleName = generatedNode.name + '.graphql'; | |
const platformName = platform ? moduleName + '.' + platform : moduleName; | |
- const filename = platformName + '.' + extension; | |
+ const filename = platformName + '.' + typeDef.fileExtension; | |
const typeName = | |
generatedNode.kind === RelayConcreteNode.FRAGMENT | |
? 'ConcreteFragment' | |
@@ -70,8 +69,8 @@ async function writeRelayGeneratedFile( | |
const hasher = crypto.createHash('md5'); | |
hasher.update('cache-breaker-6'); | |
hasher.update(JSON.stringify(generatedNode)); | |
- if (typeText) { | |
- hasher.update(typeText); | |
+ if (typeDef.text) { | |
+ hasher.update(typeDef.text); | |
} | |
if (persistQuery) { | |
hasher.update('persisted'); | |
@@ -127,7 +126,7 @@ async function writeRelayGeneratedFile( | |
moduleName, | |
documentType: typeName, | |
docText, | |
- typeText, | |
+ typeText: typeDef.text, | |
hash: hash ? `@relayHash ${hash}` : null, | |
concreteText: dedupeJSONStringify(generatedNode), | |
devOnlyAssignments, | |
diff --git a/packages/relay-compiler/language/RelayLanguagePluginInterface.js b/packages/relay-compiler/language/RelayLanguagePluginInterface.js | |
index a5a0dc40..b4107946 100644 | |
--- a/packages/relay-compiler/language/RelayLanguagePluginInterface.js | |
+++ b/packages/relay-compiler/language/RelayLanguagePluginInterface.js | |
@@ -30,7 +30,6 @@ import type {IRTransform, Root, Fragment} from 'graphql-compiler'; | |
*/ | |
export type PluginInterface = { | |
inputExtensions: string[], | |
- outputExtension: string, | |
findGraphQLTags: GraphQLTagFinder, | |
formatModule: FormatModule, | |
typeGenerator: TypeGenerator, | |
@@ -249,5 +248,8 @@ export type TypeGenerator = { | |
* for e.g. the selections made. It can, however, also generate any other | |
* content such as importing other files, including other artifacts. | |
*/ | |
- generate: (node: Root | Fragment, options: TypeGeneratorOptions) => string, | |
+ generate: ( | |
+ node: Root | Fragment, | |
+ options: TypeGeneratorOptions, | |
+ ) => {text: string, fileExtension: string}, | |
}; | |
diff --git a/packages/relay-compiler/language/javascript/RelayFlowGenerator.js b/packages/relay-compiler/language/javascript/RelayFlowGenerator.js | |
index 2db960fa..522b03a0 100644 | |
--- a/packages/relay-compiler/language/javascript/RelayFlowGenerator.js | |
+++ b/packages/relay-compiler/language/javascript/RelayFlowGenerator.js | |
@@ -58,9 +58,12 @@ export type State = {| | |
function generate( | |
node: Root | Fragment, | |
options: TypeGeneratorOptions, | |
-): string { | |
+): {text: string, fileExtension: string} { | |
const ast = IRVisitor.visit(node, createVisitor(options)); | |
- return PatchedBabelGenerator.generate(ast); | |
+ return { | |
+ text: PatchedBabelGenerator.generate(ast), | |
+ fileExtension: 'js', | |
+ }; | |
} | |
type Selection = { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment