Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Json schema to relay-compiler #1683

Closed
wants to merge 1 commit into from

Conversation

yasserkaddour
Copy link
Contributor

Fix #1639

@yasserkaddour
Copy link
Contributor Author

Would you be open to a PR to retrieve the schema from a specified GraphQL endpoint or from the GRAPHQL_ENDPOINT environment variable.

I would also like to tackle graphql-config support, but only once the GraphQL Configuration Protocol is implemented, to avoid breaking changes.

cc @leebyron @kassens @schickling @asiandrummer

@schickling
Copy link
Contributor

@asiandrummer I think now is a great time to move forward with this!

@@ -122,6 +128,9 @@ function getRelayFileWriter(baseDir: string) {
function getSchema(schemaPath: string): GraphQLSchema {
try {
let source = fs.readFileSync(schemaPath, 'utf8');
if (path.extname(schemaPath) === '.json') {
source = printSchema(buildClientSchema(JSON.parse(source).data));
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems inefficient to build a client schema, print it, and then parse it back to schema again just a few lines later. Lets refactor to avoid this extra conversion, as it could slow down the compiler for apps with larger schemes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@josephsavona could you give me some pointers on how to incorpore those directives in the GraphQLSchema. I am not familiar with the inner working of graphql-js, Thanks.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The correct fix to this is a much bigger refactoring. We shouldn't be doing this kind of directive patching in this file in the first place.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this current solution is reasonable until we do that

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you want me to leave a todo?
@leebyron What about my proposal to add support for GraphQL endpoint? Thanks

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the compiler should directly rely on having network access, especially since many private company graphql schema endpoints require authentication which we shouldn't be building here.

However, I think it would be a great addition to have a simple script which allows you to provide a GraphQL endpoint and produce a schema.graphql file which you could later provide to the relay compiler

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/graphcool/get-graphql-schema does it

it can generate a .json or a .graphql schema from a graphql endpoint

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. I knew about graphql-config but not about get-graphql-schema. Thanks @sibelius

@facebook-github-bot
Copy link
Contributor

@leebyron has imported this pull request. If you are a Facebook employee, you can view this diff on Phabricator.

@yasserkaddour yasserkaddour deleted the json-support branch April 25, 2017 07:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants