graphql-yoga
Version:
<div align="center"><img src="./website/public/cover.png" width="720" /></div>
63 lines (62 loc) • 2.49 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.processResult = processResult;
exports.processRequest = processRequest;
const graphql_1 = require("graphql");
const promise_helpers_1 = require("@whatwg-node/promise-helpers");
function processResult({ request, result, fetchAPI, onResultProcessHooks, serverContext, }) {
let resultProcessor;
const acceptableMediaTypes = [];
let acceptedMediaType = '*/*';
return (0, promise_helpers_1.handleMaybePromise)(() => (0, promise_helpers_1.iterateAsync)(onResultProcessHooks, onResultProcessHook => onResultProcessHook({
request,
acceptableMediaTypes,
result,
setResult(newResult) {
result = newResult;
},
resultProcessor,
setResultProcessor(newResultProcessor, newAcceptedMimeType) {
resultProcessor = newResultProcessor;
acceptedMediaType = newAcceptedMimeType;
},
serverContext,
})), () => {
// If no result processor found for this result, return an error
if (!resultProcessor) {
return new fetchAPI.Response(null, {
status: 406,
statusText: 'Not Acceptable',
headers: {
accept: acceptableMediaTypes.join('; charset=utf-8, '),
},
});
}
return resultProcessor(result, fetchAPI, acceptedMediaType);
});
}
function processRequest({ params, enveloped, }) {
// Parse GraphQLParams
const document = enveloped.parse(params.query);
// Validate parsed Document Node
const errors = enveloped.validate(enveloped.schema, document);
if (errors.length > 0) {
return { errors };
}
// Build the context for the execution
return (0, promise_helpers_1.handleMaybePromise)(() => enveloped.contextFactory(), contextValue => {
const executionArgs = {
schema: enveloped.schema,
document,
contextValue,
variableValues: params.variables,
operationName: params.operationName,
};
// Get the actual operation
const operation = (0, graphql_1.getOperationAST)(document, params.operationName);
// Choose the right executor
const executeFn = operation?.operation === 'subscription' ? enveloped.subscribe : enveloped.execute;
// Get the result to be processed
return executeFn(executionArgs);
});
}
;