diff --git a/lib/graphql.js b/lib/graphql.js new file mode 100644 index 0000000..b2707cc --- /dev/null +++ b/lib/graphql.js @@ -0,0 +1,14 @@ +import { createGraphQLSchema } from 'openapi-to-graphql'; +import { graphqlHTTP } from 'express-graphql'; +import fs from 'fs'; +import path from 'path'; + +const openApiSpec = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../openapi/swagger.json'), 'utf8')); +const graphqlSchema = createGraphQLSchema(openApiSpec); + +export default function(app) { + app.use('/graphql', graphqlHTTP({ + schema: graphqlSchema, + graphiql: true + })); +} diff --git a/package.json b/package.json index 91fa839..52a12e4 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "google-play-scraper": "^10.0.0", "npm-check-updates": "^16.14.4", "postman-to-openapi": "^3.0.1", - "swagger-ui-express": "^5.0.0" + "swagger-ui-express": "^5.0.0", + "openapi-to-graphql": "^2.2.0" }, "devDependencies": { "eslint": "^8.49.0", diff --git a/server.js b/server.js index 21a34aa..4e16787 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,7 @@ import Express from 'express'; import router from './lib/index.js'; import swaggerDocument from './openapi/swagger.json' assert { type: "json" }; import swaggerUi from 'swagger-ui-express'; +import setupGraphQL from './lib/graphql.js'; const app = Express(); const port = process.env.PORT || 3000; @@ -14,6 +15,8 @@ var options = { app.use('/openapi.json', Express.static('openapi/swagger.json')); +setupGraphQL(app); + app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument, options)); app.use('/api/', router);