@graphql-tools/delegate
Version:
A set of utils for faster development of GraphQL tools
30 lines (29 loc) • 1.42 kB
JavaScript
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),
})),
})),
};
});