@graphql-mesh/serve-runtime
Version:
42 lines (41 loc) • 1.79 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getProxyExecutor = void 0;
const fusion_runtime_1 = require("@graphql-mesh/fusion-runtime");
function getProxyExecutor(config, configContext, getSchema) {
const fakeTransportEntryMap = {};
let subgraphName = 'upstream';
const onSubgraphExecute = (0, fusion_runtime_1.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 (0, fusion_runtime_1.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);
};
}
exports.getProxyExecutor = getProxyExecutor;
;