@graphql-mesh/compose-cli
Version:
53 lines (52 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getComposedSchemaFromConfig = void 0;
const fusion_composition_1 = require("@graphql-mesh/fusion-composition");
const graphql_file_loader_1 = require("@graphql-tools/graphql-file-loader");
const load_1 = require("@graphql-tools/load");
const fetch_1 = require("@whatwg-node/fetch");
async function getComposedSchemaFromConfig(config, logger) {
const ctx = {
fetch: config.fetch || fetch_1.fetch,
cwd: config.cwd || globalThis.process?.cwd?.(),
logger,
};
const subgraphConfigsForComposition = await Promise.all(config.subgraphs.map(async (subgraphCLIConfig) => {
const { name: subgraphName, schema$ } = subgraphCLIConfig.sourceHandler(ctx);
const log = logger.child(`"${subgraphName}" subgraph`);
log.info(`Loading`);
let subgraphSchema;
try {
subgraphSchema = await schema$;
}
catch (e) {
throw new Error(`Failed to load subgraph ${subgraphName} - ${e.stack}`);
}
return {
name: subgraphName,
schema: subgraphSchema,
transforms: subgraphCLIConfig.transforms,
};
}));
let additionalTypeDefs;
if (config.additionalTypeDefs != null) {
const result = await (0, load_1.loadTypedefs)(config.additionalTypeDefs, {
noLocation: true,
assumeValid: true,
assumeValidSDL: true,
loaders: [new graphql_file_loader_1.GraphQLFileLoader()],
});
additionalTypeDefs = result.map(r => r.document || r.rawSDL);
}
let composedSchema = (0, fusion_composition_1.composeSubgraphs)(subgraphConfigsForComposition, {
typeDefs: additionalTypeDefs,
});
if (config.transforms?.length) {
logger.info('Applying transforms');
for (const transform of config.transforms) {
composedSchema = transform(composedSchema);
}
}
return composedSchema;
}
exports.getComposedSchemaFromConfig = getComposedSchemaFromConfig;