@graphql-mesh/serve-runtime
Version:
30 lines (29 loc) • 1.3 kB
JavaScript
import { getOnSubgraphExecute } from '@graphql-mesh/fusion-runtime';
export function getProxyExecutor({ config, configContext, getSchema, onSubgraphExecuteHooks, disposableStack, }) {
const fakeTransportEntryMap = {};
let subgraphName = 'upstream';
const onSubgraphExecute = getOnSubgraphExecute({
onSubgraphExecuteHooks,
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];
},
}),
transportContext: configContext,
getSubgraphSchema: getSchema,
transportExecutorStack: disposableStack,
});
return function proxyExecutor(executionRequest) {
return onSubgraphExecute(subgraphName, executionRequest);
};
}