This is a tool for generating flow types from graphql queries in javascript frontends.
npm install @khanacademy/graphql-flowThis is a tool for generating flow types from graphql queries in javascript frontends.
Write a config file, following the schema defined in src/cli/schema.json, either as a .json file, or a .js file that module.exports an object adhering to the schema.
Then run from the CLI, like so:
``bash`
$ graphql-flow path/to/config.json
Files will be discovered relative to the crawl.root.
To customize type generation for certain directories or files, you can provide multiple
generate configs as an array, using match and exclude to customize behavior.
For a given file containing operations, the first generate config that matches that pathgenerate
(and doesn't exclude it) will be used to generate types for those operations. If a match
config doesn't have a attribute, it will match all files (but might exclude some via theexclude attribute).
For example:
`js
// dev/graphql-flow/config.js
const options = {
schemaFilePath: "../../gengraphql/composed-schema.graphql",
regenerateCommand: "make gqlflow",
generatedDirectory: "__graphql-types__",
exclude: [
/_test.js$/,
/.fixture.js$/,
/\b__flowtests__\b/,
],
};
module.exports = {
crawl: {
root: "../../",
},
generate: [
{
...options,
schemaFilePath: "../../gengraphql/course-editor-schema.graphql",
match: [/\bcourse-editor-package\b/, /\bcourse-editor\b/],
},
{
...options,
match: [/\bdiscussion-package\b/]
experimentalEnums: true,
},
options,
],
};
`
`js
import {getIntrospectionQuery} from 'graphql';
import fs from 'fs';
import fetch from 'node-fetch';
const query = getIntrospectionQuery({descriptions: true}),
const response = await fetch(https://my-backend.com, {``
method: 'POST',
body: query,
headers: {
// You definitely shouldn't be allowing arbitrary queries without
// some strict access control.
'X-header-that-allows-arbitrary-queries': 'my-secret-key',
},
contentType: 'application/json',
});
const fullResponse = await response.json();
fs.writeFileSync('./server-introspection-response.json', JSON.stringify(fullResponse.data, null, 2));