UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 2.73 kB
{"version":3,"file":"LoneSchemaDefinitionRule.js","sourceRoot":"","sources":["../../../src/validation/rules/LoneSchemaDefinitionRule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,qCAAoC;AA+B3D,MAAM,UAAU,wBAAwB,CACtC,OAA6B;IAE7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACtC,MAAM,cAAc,GAClB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,YAAY,EAAE;QACzB,SAAS,EAAE,eAAe,EAAE;QAC5B,SAAS,EAAE,mBAAmB,EAAE,CAAC;IAEnC,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,OAAO;QACL,gBAAgB,CAAC,IAAI;YACnB,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,WAAW,CACjB,IAAI,YAAY,CACd,uDAAuD,EACvD,EAAE,KAAK,EAAE,IAAI,EAAE,CAChB,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,WAAW,CACjB,IAAI,YAAY,CAAC,0CAA0C,EAAE;oBAC3D,KAAK,EAAE,IAAI;iBACZ,CAAC,CACH,CAAC;YACJ,CAAC;YACD,EAAE,sBAAsB,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/** @category Validation Rules */\n\nimport { GraphQLError } from '../../error/GraphQLError.ts';\n\nimport type { ASTVisitor } from '../../language/visitor.ts';\n\nimport type { SDLValidationContext } from '../ValidationContext.ts';\n\n/**\n * Lone Schema definition\n *\n * A GraphQL document is only valid if it contains only one schema definition.\n * @param context - The validation context used while checking the document.\n * @returns A visitor that reports validation errors for this rule.\n * @example\n * ```ts\n * import { buildSchema } from 'graphql';\n * import { LoneSchemaDefinitionRule } from 'graphql/validation';\n *\n * const invalidSDL = `\n * schema { query: Query } schema { query: Query } type Query { name: String }\n * `;\n *\n * LoneSchemaDefinitionRule.name; // => 'LoneSchemaDefinitionRule'\n * buildSchema(invalidSDL); // throws an error\n *\n * const validSDL = `\n * schema { query: Query } type Query { name: String }\n * `;\n *\n * buildSchema(validSDL); // does not throw\n * ```\n */\nexport function LoneSchemaDefinitionRule(\n context: SDLValidationContext,\n): ASTVisitor {\n const oldSchema = context.getSchema();\n const alreadyDefined =\n oldSchema?.astNode ??\n oldSchema?.getQueryType() ??\n oldSchema?.getMutationType() ??\n oldSchema?.getSubscriptionType();\n\n let schemaDefinitionsCount = 0;\n return {\n SchemaDefinition(node) {\n if (alreadyDefined) {\n context.reportError(\n new GraphQLError(\n 'Cannot define a new schema within a schema extension.',\n { nodes: node },\n ),\n );\n return;\n }\n\n if (schemaDefinitionsCount > 0) {\n context.reportError(\n new GraphQLError('Must provide only one schema definition.', {\n nodes: node,\n }),\n );\n }\n ++schemaDefinitionsCount;\n },\n };\n}\n"]}