/
stitching.js
30 lines (26 loc) · 995 Bytes
/
stitching.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const { stitchSchemas } = require('@graphql-tools/stitch');
const { federationToStitchingSDL, stitchingDirectives } = require('@graphql-tools/stitching-directives');
const { stitchingDirectivesTransformer } = stitchingDirectives();
const { buildSchema, execute, print } = require('graphql');
const { createDefaultExecutor } = require('@graphql-tools/delegate');
const services = [
require('./services/accounts'),
require('./services/inventory'),
require('./services/products'),
require('./services/reviews'),
];
async function makeGatewaySchema() {
return stitchSchemas({
subschemaConfigTransforms: [stitchingDirectivesTransformer],
subschemas: services.map(service => fetchFederationSubschema(service)),
});
}
function fetchFederationSubschema({ schema, typeDefs }) {
const sdl = federationToStitchingSDL(print(typeDefs));
return {
schema: buildSchema(sdl),
executor: createDefaultExecutor(schema),
batch: true
};
}
module.exports = makeGatewaySchema;