diff --git a/packages/relay-compiler/bin/RelayCompilerBin.js b/packages/relay-compiler/bin/RelayCompilerBin.js index b147e45bdd330..cc2ee7121dbdf 100644 --- a/packages/relay-compiler/bin/RelayCompilerBin.js +++ b/packages/relay-compiler/bin/RelayCompilerBin.js @@ -60,6 +60,7 @@ async function run(options: { schema: string, src: string, extensions: Array, + persist?: string, watch?: ?boolean, }) { const schemaPath = path.resolve(process.cwd(), options.schema); @@ -70,6 +71,13 @@ async function run(options: { if (!fs.existsSync(srcDir)) { throw new Error(`--source path does not exist: ${srcDir}.`); } + const persistModule = options.persist && path.resolve(process.cwd(), options.persist); + if (persistModule && !fs.existsSync(persistModule)) { + throw new Error(`--persist path does not exist: ${persistModule}.`); + } + // Need to hide the `require` here to prevent webpack from rewriting + // it and failing. + const persistQuery = persistModule && __non_webpack_require__(persistModule); if (options.watch && !hasWatchmanRootFile(srcDir)) { throw new Error( ` @@ -96,7 +104,7 @@ Ensure that one such file exists in ${srcDir} or its parents. }; const writerConfigs = { default: { - getWriter: getRelayFileWriter(srcDir), + getWriter: getRelayFileWriter(srcDir, persistQuery), parser: 'default', }, }; @@ -104,7 +112,6 @@ Ensure that one such file exists in ${srcDir} or its parents. parserConfigs, writerConfigs, onlyValidate: false, - skipPersist: true, }); if (options.watch) { await codegenRunner.watchAll(); @@ -114,8 +121,12 @@ Ensure that one such file exists in ${srcDir} or its parents. } } -function getRelayFileWriter(baseDir: string) { +function getRelayFileWriter( + baseDir: string, + persistQuery: (text: string) => Promise, +) { return (onlyValidate, schema, documents, baseDocuments) => + new RelayFileWriter({ config: { formatModule: formatGeneratedModule, @@ -126,6 +137,7 @@ function getRelayFileWriter(baseDir: string) { queryTransforms, }, baseDir, + persistQuery, schemaExtensions, }, onlyValidate, @@ -181,7 +193,7 @@ function hasWatchmanRootFile(testPath) { const argv = yargs .usage( 'Create Relay generated files\n\n' + - '$0 --schema --src [--watch]', + '$0 --schema --src [--persist ] [--watch]', ) .options({ schema: { @@ -194,6 +206,10 @@ const argv = yargs demandOption: true, type: 'string', }, + persist: { + describe: 'Path to module exporting a `persistQuery` function', + type: 'string', + }, extensions: { array: true, default: ['js'], diff --git a/packages/relay-compiler/codegen/RelayFileWriter.js b/packages/relay-compiler/codegen/RelayFileWriter.js index 21088e3d49e14..937f0ed06d48c 100644 --- a/packages/relay-compiler/codegen/RelayFileWriter.js +++ b/packages/relay-compiler/codegen/RelayFileWriter.js @@ -44,7 +44,7 @@ export type WriterConfig = { compilerTransforms: CompilerTransforms, generateExtraFiles?: GenerateExtraFiles, outputDir?: string, - persistQuery?: (text: string) => Promise, + persistQuery?: ?(text: string) => Promise, platform?: string, fragmentsWithLegacyFlowTypes?: Set, schemaExtensions: Array,