UNPKG

solid-start-create-api-graphql-handler

Version:

A simple parser of an incoming event in solid-start to support a GraphQL endpoint

49 lines (48 loc) 2.18 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createApiGraphQLHandler = void 0; const utils_1 = require("./utils"); const parseBody_1 = require("./parseBody"); const node_url_1 = __importDefault(require("node:url")); // eslint-disable-next-line @typescript-eslint/no-explicit-any const defaultContextThunk = async () => ({}); const createApiGraphQLHandler = (options) => async (event) => { try { options.server.assertStarted('graphqlHandler'); const bodyResult = await (0, parseBody_1.parseBody)(event.request.body); if (!bodyResult.success) { return options.handler(bodyResult); } const httpGraphQLRequest = { method: event.request.method, search: node_url_1.default.parse(event.request.url).search ?? '', headers: (0, utils_1.mapHeadersToMap)(event.request.headers), body: bodyResult.data, }; const context = options?.context ?? defaultContextThunk; const httpGraphQLRequestResponse = await options.server.executeHTTPGraphQLRequest({ httpGraphQLRequest, context, }); if (httpGraphQLRequestResponse.body.kind === 'complete') { const responseBody = JSON.parse(httpGraphQLRequestResponse.body.string); if ((0, utils_1.isErrorBody)(responseBody)) { const [e] = responseBody.errors; return options.handler((0, utils_1.newErrorResult)(e)); } return options.handler((0, utils_1.newSuccessfulResult)(responseBody)); } // Implement logic to handle asyncronous iterators throw new Error('error: asynchronous iterators are not supported at the moment'); } catch (e) { if (e instanceof Error) { return options.handler((0, utils_1.newErrorResult)(e)); } return options.handler((0, utils_1.newErrorResult)(new Error(String(e)))); } }; exports.createApiGraphQLHandler = createApiGraphQLHandler;