2016-08-08 07:54:06 +00:00
|
|
|
import express from 'express'
|
|
|
|
|
import graphqlHTTP from 'express-graphql'
|
2016-11-26 01:38:32 +00:00
|
|
|
import compression from 'compression'
|
|
|
|
|
import MusicBrainz from './api'
|
2016-08-08 07:54:06 +00:00
|
|
|
import schema from './schema'
|
2016-11-26 01:38:32 +00:00
|
|
|
import createLoaders from './loaders'
|
2016-08-08 07:54:06 +00:00
|
|
|
|
2016-11-26 01:38:32 +00:00
|
|
|
const formatError = (err) => ({
|
|
|
|
|
message: err.message,
|
|
|
|
|
locations: err.locations,
|
|
|
|
|
stack: err.stack
|
|
|
|
|
})
|
2016-08-08 07:54:06 +00:00
|
|
|
|
2016-11-26 01:38:32 +00:00
|
|
|
const middleware = ({ client = new MusicBrainz(), ...options } = {}) => {
|
|
|
|
|
const DEV = process.env.NODE_ENV !== 'production'
|
|
|
|
|
const loaders = createLoaders(client)
|
|
|
|
|
return graphqlHTTP({
|
|
|
|
|
schema,
|
|
|
|
|
context: { client, loaders },
|
|
|
|
|
pretty: DEV,
|
|
|
|
|
graphiql: DEV,
|
|
|
|
|
formatError: DEV ? formatError : undefined,
|
|
|
|
|
...options
|
2016-08-08 07:54:06 +00:00
|
|
|
})
|
2016-11-26 01:38:32 +00:00
|
|
|
}
|
2016-08-08 07:54:06 +00:00
|
|
|
|
2016-11-26 01:38:32 +00:00
|
|
|
export default middleware
|
2016-08-20 05:59:32 +00:00
|
|
|
|
2016-11-26 01:38:32 +00:00
|
|
|
if (require.main === module) {
|
|
|
|
|
require('dotenv').config({ silent: true })
|
|
|
|
|
const app = express()
|
|
|
|
|
const port = process.env.PORT || 3000
|
|
|
|
|
const route = process.env.GRAPHBRAINZ_PATH || '/'
|
|
|
|
|
app.use(compression())
|
|
|
|
|
app.use(route, middleware())
|
|
|
|
|
app.listen(port)
|
|
|
|
|
}
|