graphql-yoga
Version:
27 lines (26 loc) • 1.29 kB
JavaScript
import { isAsyncIterable } from '@envelop/core';
import { getMediaTypesForRequestInOrder, isMatchingMediaType, } from './resultProcessor/accept.js';
export function useResultProcessors(resultProcessors) {
return {
onResultProcess({ request, result, acceptableMediaTypes, setResultProcessor, }) {
const requestMediaTypes = getMediaTypesForRequestInOrder(request);
for (const requestMediaType of requestMediaTypes) {
for (const resultProcessorConfig of resultProcessors) {
if (isAsyncIterable(result) &&
resultProcessorConfig.noAsyncIterable) {
continue;
}
const processorMediaTypesInOrder = [
...resultProcessorConfig.mediaTypes,
].reverse();
for (const processorMediaType of processorMediaTypesInOrder) {
acceptableMediaTypes.push(processorMediaType);
if (isMatchingMediaType(processorMediaType, requestMediaType)) {
setResultProcessor(resultProcessorConfig.processResult, processorMediaType);
}
}
}
}
},
};
}