123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import devAssert from "../jsutils/devAssert.mjs";
- import { Kind } from "../language/kinds.mjs";
- import { parse } from "../language/parser.mjs";
- import { assertValidSDL } from "../validation/validate.mjs";
- import { GraphQLSchema } from "../type/schema.mjs";
- import { specifiedDirectives } from "../type/directives.mjs";
- import { extendSchemaImpl } from "./extendSchema.mjs";
- /**
- * This takes the ast of a schema document produced by the parse function in
- * src/language/parser.js.
- *
- * If no schema definition is provided, then it will look for types named Query
- * and Mutation.
- *
- * Given that AST it constructs a GraphQLSchema. The resulting schema
- * has no resolve methods, so execution will use default resolvers.
- *
- * Accepts options as a second argument:
- *
- * - commentDescriptions:
- * Provide true to use preceding comments as the description.
- *
- */
- export function buildASTSchema(documentAST, options) {
- documentAST != null && documentAST.kind === Kind.DOCUMENT || devAssert(0, 'Must provide valid Document AST.');
- if ((options === null || options === void 0 ? void 0 : options.assumeValid) !== true && (options === null || options === void 0 ? void 0 : options.assumeValidSDL) !== true) {
- assertValidSDL(documentAST);
- }
- var emptySchemaConfig = {
- description: undefined,
- types: [],
- directives: [],
- extensions: undefined,
- extensionASTNodes: [],
- assumeValid: false
- };
- var config = extendSchemaImpl(emptySchemaConfig, documentAST, options);
- if (config.astNode == null) {
- for (var _i2 = 0, _config$types2 = config.types; _i2 < _config$types2.length; _i2++) {
- var type = _config$types2[_i2];
- switch (type.name) {
- // Note: While this could make early assertions to get the correctly
- // typed values below, that would throw immediately while type system
- // validation with validateSchema() will produce more actionable results.
- case 'Query':
- config.query = type;
- break;
- case 'Mutation':
- config.mutation = type;
- break;
- case 'Subscription':
- config.subscription = type;
- break;
- }
- }
- }
- var directives = config.directives; // If specified directives were not explicitly declared, add them.
- var _loop = function _loop(_i4) {
- var stdDirective = specifiedDirectives[_i4];
- if (directives.every(function (directive) {
- return directive.name !== stdDirective.name;
- })) {
- directives.push(stdDirective);
- }
- };
- for (var _i4 = 0; _i4 < specifiedDirectives.length; _i4++) {
- _loop(_i4);
- }
- return new GraphQLSchema(config);
- }
- /**
- * A helper function to build a GraphQLSchema directly from a source
- * document.
- */
- export function buildSchema(source, options) {
- var document = parse(source, {
- noLocation: options === null || options === void 0 ? void 0 : options.noLocation,
- allowLegacySDLEmptyFields: options === null || options === void 0 ? void 0 : options.allowLegacySDLEmptyFields,
- allowLegacySDLImplementsInterfaces: options === null || options === void 0 ? void 0 : options.allowLegacySDLImplementsInterfaces,
- experimentalFragmentVariables: options === null || options === void 0 ? void 0 : options.experimentalFragmentVariables
- });
- return buildASTSchema(document, {
- commentDescriptions: options === null || options === void 0 ? void 0 : options.commentDescriptions,
- assumeValidSDL: options === null || options === void 0 ? void 0 : options.assumeValidSDL,
- assumeValid: options === null || options === void 0 ? void 0 : options.assumeValid
- });
- }
|