UNPKG

graphql-yoga

Version:

<div align="center"><img src="./website/public/cover.png" width="720" /></div>

58 lines (57 loc) 2.55 kB
"use strict"; 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;