graphql-yoga
Version:
<div align="center"><img src="./website/public/cover.png" width="720" /></div>
58 lines (57 loc) • 2.55 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useResultProcessors = void 0;
const core_1 = require("@envelop/core");
const accept_js_1 = require("./resultProcessor/accept.js");
const multipart_js_1 = require("./resultProcessor/multipart.js");
const push_js_1 = require("./resultProcessor/push.js");
const regular_js_1 = require("./resultProcessor/regular.js");
const multipart = {
mediaTypes: ['multipart/mixed'],
asyncIterables: true,
processResult: multipart_js_1.processMultipartResult,
};
const textEventStream = {
mediaTypes: ['text/event-stream'],
asyncIterables: true,
processResult: push_js_1.processPushResult,
};
const regular = {
mediaTypes: ['application/graphql-response+json', 'application/json'],
asyncIterables: false,
processResult: regular_js_1.processRegularResult,
};
const defaultList = [textEventStream, multipart, regular];
const subscriptionList = [multipart, textEventStream, regular];
function useResultProcessors() {
const isSubscriptionRequestMap = new WeakMap();
return {
onSubscribe({ args: { contextValue } }) {
if (contextValue.request) {
isSubscriptionRequestMap.set(contextValue.request, true);
}
},
onResultProcess({ request, result, acceptableMediaTypes, setResultProcessor, }) {
const isSubscriptionRequest = isSubscriptionRequestMap.get(request);
const processorConfigList = isSubscriptionRequest
? subscriptionList
: defaultList;
const requestMediaTypes = (0, accept_js_1.getMediaTypesForRequestInOrder)(request);
const isAsyncIterableResult = (0, core_1.isAsyncIterable)(result);
for (const requestMediaType of requestMediaTypes) {
for (const resultProcessorConfig of processorConfigList) {
if (isAsyncIterableResult && !resultProcessorConfig.asyncIterables) {
continue;
}
for (const processorMediaType of resultProcessorConfig.mediaTypes) {
acceptableMediaTypes.push(processorMediaType);
if ((0, accept_js_1.isMatchingMediaType)(processorMediaType, requestMediaType)) {
setResultProcessor(resultProcessorConfig.processResult, processorMediaType);
}
}
}
}
},
};
}
exports.useResultProcessors = useResultProcessors;
;