@apollo/subgraph
Version:
Apollo Subgraph Utilities
58 lines • 2.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildFederatedSchema = exports.buildSubgraphSchema = void 0;
const util_1 = require("util");
const graphql_1 = require("graphql");
const schema_helper_1 = require("./schema-helper");
const federation_internals_1 = require("@apollo/federation-internals");
const types_1 = require("./types");
function buildSubgraphSchema(modulesOrSDL) {
var _a;
let shapedModulesOrSDL;
if ('typeDefs' in modulesOrSDL) {
const { typeDefs, resolvers } = modulesOrSDL;
const augmentedTypeDefs = Array.isArray(typeDefs) ? typeDefs : [typeDefs];
shapedModulesOrSDL = augmentedTypeDefs.map((typeDefs, i) => {
const module = { typeDefs };
if (i === 0 && resolvers)
module.resolvers = resolvers;
return module;
});
}
else {
shapedModulesOrSDL = modulesOrSDL;
}
const modules = (0, schema_helper_1.modulesFromSDL)(shapedModulesOrSDL);
const documentAST = (0, graphql_1.concatAST)(modules.map(module => module.typeDefs));
const subgraph = (0, federation_internals_1.buildSubgraph)(federation_internals_1.FEDERATION_UNNAMED_SUBGRAPH_NAME, '', documentAST, false);
const sdl = (0, federation_internals_1.printSchema)(subgraph.schema);
const schema = subgraph.schema.toGraphQLJSSchema();
const queryRootName = (_a = subgraph.schema.schemaDefinition.rootType('query')) === null || _a === void 0 ? void 0 : _a.name;
(0, federation_internals_1.assert)(queryRootName, 'A Query root type should have been added by `buildSubgraph`');
(0, schema_helper_1.addResolversToSchema)(schema, {
[queryRootName]: {
_service: () => ({ sdl }),
}
});
if (subgraph.metadata().entityType()) {
(0, schema_helper_1.addResolversToSchema)(schema, {
[queryRootName]: {
_entities: (_source, { representations }, context, info) => (0, types_1.entitiesResolver)({ representations, context, info }),
},
_Entity: {
__resolveType(parent) {
return parent.__typename;
},
}
});
}
for (const module of modules) {
if (!module.resolvers)
continue;
(0, schema_helper_1.addResolversToSchema)(schema, module.resolvers);
}
return schema;
}
exports.buildSubgraphSchema = buildSubgraphSchema;
exports.buildFederatedSchema = (0, util_1.deprecate)(buildSubgraphSchema, `'buildFederatedSchema' is deprecated. Use 'buildSubgraphSchema' instead.`);
//# sourceMappingURL=buildSubgraphSchema.js.map