ed4ce42237
- uniform api usage for some models (account/user, networks/vlans/fabrics, etc) - graphidoc, playground, faker, and voyager support - schema in a template tag and documented - apollo-errors - apollo-server-hapi and schema using graphql-tools/makeExecutableSchema - replace express with Hapi - eslint support for graphql - updated dependencies
123 lines
2.4 KiB
JavaScript
123 lines
2.4 KiB
JavaScript
const { hapi: Voyager } = require('graphql-voyager/middleware');
|
|
const { hapi: Playground } = require('graphql-playground/middleware');
|
|
const { graphqlHapi, graphiqlHapi } = require('apollo-server-hapi');
|
|
const { formatError } = require('apollo-errors');
|
|
const Hapi = require('hapi');
|
|
const Good = require('good');
|
|
const Path = require('path');
|
|
const Inert = require('inert');
|
|
const Execa = require('execa');
|
|
|
|
const schema = require('./schema');
|
|
|
|
const { CORS, PORT } = process.env;
|
|
|
|
const server = new Hapi.Server({
|
|
debug: {
|
|
log: ['error'],
|
|
request: ['error']
|
|
}
|
|
});
|
|
|
|
const handlerError = err => {
|
|
if (err) {
|
|
// eslint-disable-next-line no-console
|
|
console.error(err);
|
|
process.exit(1);
|
|
}
|
|
};
|
|
|
|
// compile docs
|
|
// eslint-disable-next-line new-cap
|
|
Execa('npm', ['run', 'graphdoc']).catch(handlerError);
|
|
|
|
server.connection({
|
|
port: PORT,
|
|
routes: {
|
|
files: {
|
|
relativeTo: Path.join(__dirname, './../doc')
|
|
}
|
|
}
|
|
});
|
|
|
|
server.register(
|
|
[
|
|
{
|
|
register: Good,
|
|
options: {
|
|
reporters: {
|
|
console: [
|
|
{
|
|
module: 'good-squeeze',
|
|
name: 'Squeeze',
|
|
args: [{ log: '*', response: '*' }]
|
|
},
|
|
{
|
|
module: 'good-console'
|
|
},
|
|
'stdout'
|
|
]
|
|
}
|
|
}
|
|
},
|
|
Inert,
|
|
{
|
|
register: graphqlHapi,
|
|
options: {
|
|
path: '/graphql',
|
|
graphqlOptions: {
|
|
formatError,
|
|
schema
|
|
},
|
|
route: {
|
|
cors: Boolean(CORS)
|
|
}
|
|
}
|
|
},
|
|
{
|
|
register: graphiqlHapi,
|
|
options: {
|
|
path: '/graphiql',
|
|
graphiqlOptions: {
|
|
endpointURL: '/graphql'
|
|
}
|
|
}
|
|
},
|
|
{
|
|
register: Playground,
|
|
options: {
|
|
path: '/playground',
|
|
endpointUrl: '/graphql'
|
|
}
|
|
},
|
|
{
|
|
register: Voyager,
|
|
options: {
|
|
path: '/voyager',
|
|
endpointUrl: '/graphql'
|
|
}
|
|
}
|
|
],
|
|
err => {
|
|
handlerError(err);
|
|
|
|
server.route({
|
|
method: 'GET',
|
|
path: '/doc/{param*}',
|
|
handler: {
|
|
directory: {
|
|
path: '.',
|
|
redirectToSlash: true,
|
|
index: true
|
|
}
|
|
}
|
|
});
|
|
|
|
server.start(err => {
|
|
handlerError(err);
|
|
// eslint-disable-next-line no-console
|
|
console.log(`server started at http://0.0.0.0:${server.info.port}`);
|
|
});
|
|
}
|
|
);
|