sql-to-graphql
Version:
Generate a GraphQL API based on your SQL database structure
51 lines (47 loc) • 1.63 kB
JavaScript
;
var camelCase = require('lodash/string/camelCase');
var map = require('lodash/collection/map');
var b = require('ast-types').builders;
var buildVar = require('./variable');
var buildQuery = require('./query');
var buildFieldWrapperFunction = require('./field-wrapper-function');
module.exports = function(data, opts) {
var queryFields = [];
if (opts.relay) {
queryFields.push(b.property(
'init',
b.identifier('node'),
b.identifier('nodeField')
));
} else {
queryFields = map(data.types, function(type) {
return b.property(
'init',
b.identifier(camelCase(type.name)),
buildQuery(type, data, opts)
);
});
}
return buildVar('schema',
b.newExpression(
b.identifier('GraphQLSchema'),
[b.objectExpression([
b.property(
'init',
b.identifier('query'),
b.newExpression(
b.identifier('GraphQLObjectType'),
[b.objectExpression([
b.property('init', b.identifier('name'), b.literal('RootQueryType')),
b.property('init', b.identifier('fields'), buildFieldWrapperFunction(
'RootQuery',
b.objectExpression(queryFields),
opts
))
])]
)
)
])]
)
);
};