UNPKG

@graphql-mesh/serve-runtime

Version:
38 lines (37 loc) 1.62 kB
import { defaultTransportsOption, getOnSubgraphExecute, } from '@graphql-mesh/fusion-runtime'; export function getProxyExecutor(config, configContext, getSchema) { const fakeTransportEntryMap = {}; let subgraphName = 'upstream'; const onSubgraphExecute = getOnSubgraphExecute({ plugins: config.plugins?.(configContext), getFusiongraph: getSchema, transports() { if (typeof config.transport === 'object') { return config.transport; } if (typeof config.transport === 'function') { return config.transport(); } return defaultTransportsOption('http'); }, transportEntryMap: new Proxy(fakeTransportEntryMap, { get(fakeTransportEntryMap, subgraphNameProp) { if (!fakeTransportEntryMap[subgraphNameProp]) { subgraphName = subgraphNameProp; fakeTransportEntryMap[subgraphNameProp] = { kind: 'http', subgraph: subgraphName.toString(), location: config.proxy?.endpoint, headers: config.proxy?.headers, options: config.proxy, }; } return fakeTransportEntryMap[subgraphNameProp]; }, }), transportBaseContext: configContext, }); return function proxyExecutor(executionRequest) { return onSubgraphExecute(subgraphName, executionRequest.document, executionRequest.variables, executionRequest.context); }; }