UNPKG

@graphql-tools/delegate

Version:

A set of utils for faster development of GraphQL tools

30 lines (29 loc) 1.42 kB
import { print, responsePathAsArray } from 'graphql'; import { memoize2of5 } from '@graphql-tools/utils'; export const delegationPlanIdMap = new WeakMap(); export const delegationStageIdMap = new WeakMap(); export const logFnForContext = new WeakMap(); export const delegationPlanInfosByContext = new WeakMap(); export const contextIdMap = new WeakMap(); export function isDelegationDebugging() { return globalThis.process?.env['EXPOSE_DELEGATION_PLAN']; } export const getDelegationInfo = memoize2of5(function getDelegationInfo(context, delegationMaps, mergedTypeInfo, sourceSubschema, info) { return { contextId: contextIdMap.get(context), operationName: info.operation.name?.value, planId: delegationPlanIdMap.get(delegationMaps), source: sourceSubschema.name, type: mergedTypeInfo.typeName, path: responsePathAsArray(info.path).filter(key => typeof key === 'string'), fieldNodes: info.fieldNodes?.map(print), fragments: Object.values(info.fragments || {}).map(fragmentNode => `${print(fragmentNode)}`), stages: delegationMaps.map(delegationMap => ({ stageId: delegationStageIdMap.get(delegationMap), delegations: Array.from(delegationMap).map(([subschema, selectionSet]) => ({ target: subschema.name, selectionSet: print(selectionSet), })), })), }; });