UNPKG

@powership/server

Version:
1 lines 9.89 kB
{"version":3,"file":"graphqlHandler.cjs","names":["_path","_interopRequireDefault","require","_schema","_utils","_graphql","_graphqlPlaygroundHtml","_ServerLogs","_createRouteHandler","_errorHandler","_generateTypes","e","__esModule","default","createGraphQLHandlers","definition","resolvers","path","playgroundAPIUrl","IS_PROD","isProduction","resolversList","Object","values","schema","createGraphQLSchema","maskErrors","data","graphQLHandler","createRouteHandler","onRequest","request","response","close","method","assign","genPlaygroudResponse","operationName","query","variables","body","errors","graphql","contextValue","source","variableValues","statusCode","JSON","stringify","typesPath","nodePath","join","mockPath","typesHandler","generateTypes","headers","append","mockHandler","html","renderPlaygroundPage","title","endpoint","shareEnabled","settings","replace","console","error","ServerLogs"],"sources":["../../src/graphql/graphqlHandler.ts"],"sourcesContent":["import nodePath from 'path';\n\nimport { createGraphQLSchema, Resolver } from '@powership/schema';\nimport { AnyRecord, isProduction } from '@powership/utils';\nimport { graphql } from 'graphql';\nimport { renderPlaygroundPage } from 'graphql-playground-html';\n\nimport { Handler } from '../Server';\nimport { ServerLogs } from '../ServerLogs';\nimport { createRouteHandler } from '../createRouteHandler';\n\nimport { maskErrors } from './errorHandler';\nimport { generateTypes } from './generateTypes';\n\nexport type ResolversRecord = Record<string, Resolver<any, any, any>>;\n\nexport type GraphqlHandlerOptions<Resolvers extends ResolversRecord> = {\n path?: string; // defaults to /api/graphql\n playgroundAPIUrl?: string; // defaults path value\n resolvers: Resolvers;\n};\n\nexport function createGraphQLHandlers<Resolvers extends ResolversRecord>(\n definition: GraphqlHandlerOptions<Resolvers>\n): Handler[] {\n const { resolvers, path = '/graphql', playgroundAPIUrl = path } = definition;\n\n const IS_PROD = isProduction();\n\n const resolversList = Object.values(resolvers);\n\n const schema = createGraphQLSchema(resolversList);\n maskErrors(schema);\n\n const data = { schema, resolvers, definition, resolversList } as const;\n\n const graphQLHandler = createRouteHandler(\n path,\n async function onRequest({ request, response, close }) {\n // Determine whether we should render GraphiQL instead of returning an API response\n if (request.method === 'GET') {\n Object.assign(response, genPlaygroudResponse(playgroundAPIUrl));\n close(response);\n return;\n } else if (request.method === 'POST') {\n const { operationName, query, variables } = request.body as AnyRecord;\n\n try {\n const { data, errors } = await graphql({\n contextValue: request,\n schema,\n source: query,\n variableValues: variables,\n operationName,\n });\n\n response.statusCode = 200;\n response.body = JSON.stringify({ data, errors });\n\n close(response);\n } catch (e) {\n close(500);\n }\n }\n },\n data\n );\n\n const typesPath = nodePath.join(path, 'types');\n const mockPath = nodePath.join(path, 'mock');\n\n const typesHandler = createRouteHandler(\n typesPath,\n async function ({ response, close }) {\n response.body = await generateTypes(schema);\n response.statusCode = 200;\n response.headers.append('Content-Type', 'text/typescript');\n return close(response);\n }\n );\n\n const mockHandler = createRouteHandler(\n mockPath,\n async function ({ response, close }) {\n if (IS_PROD) {\n response.statusCode = 'METHOD_NOT_ALLOWED';\n response.body = 'NOT_ALLOWED_IN_PRODUCTION';\n return close(response);\n }\n\n response.body = '';\n\n response.statusCode = 200;\n response.headers.append('Content-type', 'text/html');\n close(response);\n }\n );\n\n // const utilsHandler = createRouteHandler(\n // utilsPath,\n // async function ({ response, request, close }) {\n // const body: any = request.body;\n //\n // const json =\n // typeof body.json === 'string'\n // ? JSON.parse(body.json.trim())\n // : body.json || {};\n //\n // const page = await powershipUtilsResolver({\n // ...body,\n // json,\n // url: request.urlObject.pathname,\n // });\n //\n // response.body = page.body;\n // response.headers.set('Content-Type', page.headers['Content-Type']);\n // response.statusCode = page.statusCode;\n //\n // return close(response);\n // }\n // );\n\n return [\n // utilsHandler,\n typesHandler,\n mockHandler,\n graphQLHandler, //\n ];\n}\n\nfunction genPlaygroudResponse(playgroundAPIUrl: string) {\n let html = renderPlaygroundPage({\n title: 'GraphQL',\n endpoint: playgroundAPIUrl,\n // @ts-ignore\n // https://github.com/graphql/graphql-playground/pull/1401/files#\n shareEnabled: true,\n settings: {\n 'editor.cursorShape': 'line',\n 'editor.fontFamily':\n \"'Source Code Pro', 'Consolas', 'Inconsolata', 'Droid Sans Mono', 'Monaco', monospace\",\n 'editor.fontSize': 14,\n 'editor.reuseHeaders': true,\n 'editor.theme': 'dark',\n 'general.betaUpdates': false,\n // @ts-ignore\n 'prettier.printWidth': 80,\n 'prettier.tabWidth': 2,\n 'prettier.useTabs': false,\n 'request.credentials': 'include',\n 'request.globalHeaders': {},\n 'schema.disableComments': true,\n 'schema.polling.enable': true,\n 'schema.polling.endpointFilter': '*localhost*',\n 'schema.polling.interval': 10000,\n 'tracing.hideTracingResponse': true,\n 'tracing.tracingSupported': true,\n },\n });\n\n html = html.replace(\n '</body>',\n `\n window.addEventListener('load', function (event) {\n document.title = \"Playground\"\n });\n </body>`\n );\n\n try {\n return {\n body: html,\n statusCode: 200,\n headers: { 'Content-Type': 'text/html' },\n };\n } catch (e) {\n console.error(e);\n ServerLogs.error(e);\n return {\n body: 'INVALID_REQUEST',\n statusCode: 400,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}