Skip to content

Instantly share code, notes, and snippets.

@alloy
Created February 27, 2018 21:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alloy/2e00f45df5d815b546f036f0dec14b7b to your computer and use it in GitHub Desktop.
Save alloy/2e00f45df5d815b546f036f0dec14b7b to your computer and use it in GitHub Desktop.
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