Open sibelius opened 7 years ago
First draft of Plugins
A read schema plugin should read a schema (collection/table definition) and return an object describing it.
CreateGraphql should output a different file for a different option provided, for instance: output a raw mutation or a relay mutation
we need to define inputs and outputs of these plugins
I can imagine it to handle schema from multiple types of databases but how would that be for different templates?
Also, how do you plan on starting, should #43 wait for it?
Turning the mongoose
schema reading into a plugin should be really straightforward.
We should also have a plugins
property on .graphqlrc
.
A template plugin could have an option parameter, like -t for template
A template plugin could have an option parameter, like -t for template
@sibelius: what do you mean?
I meant, how will we implement a template plugin? Will we prepare all the variables, pass it to the plugin and it will return the files?
Yep, I think so, we need to define the inputs and outputs of each plugin
So, I started working on this, I thought the following as a blueprint for a create-graphql-plugin
:
export default {
pre: (arguments) => {
const {
config, // The content of `.graphqlrc`, will be the default if it doesn't exist
} = arguments;
console.log('this is a pre hook function');
return {
fields, // The fields generated on the plugin
files, // Array of objects, e.g.: [{ name: 'ExampleAddMutation.js', content: 'Content of file }]
};
},
post: (arguments) => {
const {
config, // The content of `.graphqlrc`, will be the default if it doesn't exist,
fields, // The fields of the schema
} = arguments;
console.log('this is a post hook function');
return {}; // What would this return?
},
};
Would love your opinions on this, @sibelius & @felippepuhle.
Also, the plugins would be installed as a devDependency
and specified on .graphqlrc
under plugins
, e.g.:
{
"directories": {
...
"connection": "connection",
"loader": "loader",
"model": "model",
...
},
"plugins": [
"create-graphql-plugin-mongoose",
"create-graphql-plugin-sequelize",
...
]
}
The generator would then call each plugin based on the order defined, so it would call the mongoose one and then sequelize with the results brought from mongoose.
Still have to figure out how we will deal with files.
Good content on Babel plugins: https://github.com/thejameskyle/babel-handbook/blob/master/translations/en/plugin-handbook.md
Babel plugin object example:
each babel plugin returns an object like this.
we should think in CreateGraphQL PluginObject as well.
mongoose
schema to a plugin;relay
templates to a plugin (figure out how to best do this);plugins
property on.graphqlrc
.