graphbrainz/src/index.js

68 lines
1.8 KiB
JavaScript
Raw Normal View History

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'
import schema, { createSchema } from './schema'
import { createContext } from './context'
const debug = require('debug')('graphbrainz')
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
const middleware = ({
client = new MusicBrainz(),
extensions = process.env.GRAPHBRAINZ_EXTENSIONS
? JSON.parse(process.env.GRAPHBRAINZ_EXTENSIONS)
: [
'./extensions/cover-art-archive',
'./extensions/fanart-tv',
'./extensions/mediawiki',
'./extensions/the-audio-db'
],
...middlewareOptions
} = {}) => {
debug(`Loading ${extensions.length} extension(s).`)
const options = {
client,
extensions: extensions.map(extensionModule => {
if (typeof extensionModule === 'object') {
return extensionModule
}
const extension = require(extensionModule)
return extension.default ? extension.default : extension
}),
...middlewareOptions
}
2016-11-26 01:38:32 +00:00
const DEV = process.env.NODE_ENV !== 'production'
2016-11-26 02:18:41 +00:00
const graphiql = DEV || process.env.GRAPHBRAINZ_GRAPHIQL === 'true'
2016-11-26 01:38:32 +00:00
return graphqlHTTP({
schema: createSchema(schema, options),
context: createContext(options),
2016-11-26 01:38:32 +00:00
pretty: DEV,
2016-11-26 02:18:41 +00:00
graphiql,
2016-11-26 01:38:32 +00:00
formatError: DEV ? formatError : undefined,
...middlewareOptions
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
2017-05-16 04:28:54 +00:00
export function start () {
2016-11-26 01:38:32 +00:00
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)
2016-11-26 02:18:41 +00:00
console.log(`Listening on port ${port}.`)
2016-11-26 01:38:32 +00:00
}
2017-05-16 04:28:54 +00:00
if (require.main === module) {
start()
}