@vendure/graphiql-plugin 3.3.6-master-202507030835 → 3.3.6-master-202507031258

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/graphiql/assets/{SchemaReference-CvpLgB2d.js → SchemaReference-CpyWtf-y.js} +2 -2
  2. package/dist/graphiql/assets/{SchemaReference-CvpLgB2d.js.map → SchemaReference-CpyWtf-y.js.map} +1 -1
  3. package/dist/graphiql/assets/{brace-fold-CbvXwIyh.js → brace-fold-DRY9I3kG.js} +2 -2
  4. package/dist/graphiql/assets/{brace-fold-CbvXwIyh.js.map → brace-fold-DRY9I3kG.js.map} +1 -1
  5. package/dist/graphiql/assets/{closebrackets-D9IC1c35.js → closebrackets-3DDxSZfS.js} +2 -2
  6. package/dist/graphiql/assets/{closebrackets-D9IC1c35.js.map → closebrackets-3DDxSZfS.js.map} +1 -1
  7. package/dist/graphiql/assets/{codemirror-s7RqOvtc.js → codemirror-Tc_3P_x1.js} +2 -2
  8. package/dist/graphiql/assets/codemirror-Tc_3P_x1.js.map +1 -0
  9. package/dist/graphiql/assets/{comment-hYnnSLkz.js → comment-Dr85-_os.js} +2 -2
  10. package/dist/graphiql/assets/{comment-hYnnSLkz.js.map → comment-Dr85-_os.js.map} +1 -1
  11. package/dist/graphiql/assets/{dialog-74yvRjdg.js → dialog-CLvGWxga.js} +2 -2
  12. package/dist/graphiql/assets/dialog-CLvGWxga.js.map +1 -0
  13. package/dist/graphiql/assets/{foldgutter-CNvWBdVI.js → foldgutter-Bd70Ylmw.js} +2 -2
  14. package/dist/graphiql/assets/{foldgutter-CNvWBdVI.js.map → foldgutter-Bd70Ylmw.js.map} +1 -1
  15. package/dist/graphiql/assets/{hint-tBpO-B8y.js → hint-BU3hYq97.js} +2 -2
  16. package/dist/graphiql/assets/{hint-tBpO-B8y.js.map → hint-BU3hYq97.js.map} +1 -1
  17. package/dist/graphiql/assets/{hint-D4-TGuu2.js → hint-CTaCIspx.js} +2 -2
  18. package/dist/graphiql/assets/{hint-D4-TGuu2.js.map → hint-CTaCIspx.js.map} +1 -1
  19. package/dist/graphiql/assets/{index-IiLbhMF9.js → index-B8bgcTYt.js} +45 -45
  20. package/dist/graphiql/assets/index-B8bgcTYt.js.map +1 -0
  21. package/dist/graphiql/assets/{info-D0V7Zrnm.js → info-BjeMnYnE.js} +2 -2
  22. package/dist/graphiql/assets/{info-D0V7Zrnm.js.map → info-BjeMnYnE.js.map} +1 -1
  23. package/dist/graphiql/assets/{info-addon-BjO9oTYK.js → info-addon-CT8vWPfp.js} +2 -2
  24. package/dist/graphiql/assets/{info-addon-BjO9oTYK.js.map → info-addon-CT8vWPfp.js.map} +1 -1
  25. package/dist/graphiql/assets/{javascript-C1fmnkCb.js → javascript-DOLBPx81.js} +2 -2
  26. package/dist/graphiql/assets/{javascript-C1fmnkCb.js.map → javascript-DOLBPx81.js.map} +1 -1
  27. package/dist/graphiql/assets/{jump-CMl3nz-1.js → jump-Dl0QwazW.js} +2 -2
  28. package/dist/graphiql/assets/{jump-CMl3nz-1.js.map → jump-Dl0QwazW.js.map} +1 -1
  29. package/dist/graphiql/assets/{jump-to-line-Hq5vq2W4.js → jump-to-line-C2CXtcBk.js} +2 -2
  30. package/dist/graphiql/assets/{jump-to-line-Hq5vq2W4.js.map → jump-to-line-C2CXtcBk.js.map} +1 -1
  31. package/dist/graphiql/assets/{lint-C6rDu9yg.js → lint-B407pjh7.js} +2 -2
  32. package/dist/graphiql/assets/{lint-C6rDu9yg.js.map → lint-B407pjh7.js.map} +1 -1
  33. package/dist/graphiql/assets/{lint-B2CUTgTB.js → lint-ChBsGYZa.js} +2 -2
  34. package/dist/graphiql/assets/{lint-B2CUTgTB.js.map → lint-ChBsGYZa.js.map} +1 -1
  35. package/dist/graphiql/assets/{lint-B6DlOY4R.js → lint-CzSZJYWf.js} +2 -2
  36. package/dist/graphiql/assets/{lint-B6DlOY4R.js.map → lint-CzSZJYWf.js.map} +1 -1
  37. package/dist/graphiql/assets/{matchbrackets-DcI6Xjhe.js → matchbrackets-CznKsy27.js} +2 -2
  38. package/dist/graphiql/assets/matchbrackets-CznKsy27.js.map +1 -0
  39. package/dist/graphiql/assets/{mode-DtlwYZcH.js → mode-2uvQFyqG.js} +2 -2
  40. package/dist/graphiql/assets/{mode-DtlwYZcH.js.map → mode-2uvQFyqG.js.map} +1 -1
  41. package/dist/graphiql/assets/{mode-CJXCb3SU.js → mode-CJNOcLCn.js} +2 -2
  42. package/dist/graphiql/assets/{mode-CJXCb3SU.js.map → mode-CJNOcLCn.js.map} +1 -1
  43. package/dist/graphiql/assets/{mode-C2URUmUb.js → mode-CP0uw3Jl.js} +2 -2
  44. package/dist/graphiql/assets/{mode-C2URUmUb.js.map → mode-CP0uw3Jl.js.map} +1 -1
  45. package/dist/graphiql/assets/{search-BzUGWzlS.js → search-Crevdced.js} +2 -2
  46. package/dist/graphiql/assets/{search-BzUGWzlS.js.map → search-Crevdced.js.map} +1 -1
  47. package/dist/graphiql/assets/{searchcursor-CHMRisY0.js → searchcursor-_ZFWpA3w.js} +2 -2
  48. package/dist/graphiql/assets/searchcursor-_ZFWpA3w.js.map +1 -0
  49. package/dist/graphiql/assets/{show-hint-CD13Xkku.js → show-hint-3AOGYrK9.js} +2 -2
  50. package/dist/graphiql/assets/{show-hint-CD13Xkku.js.map → show-hint-3AOGYrK9.js.map} +1 -1
  51. package/dist/graphiql/assets/{sublime-2ochNaKe.js → sublime-BPaNuiRD.js} +2 -2
  52. package/dist/graphiql/assets/{sublime-2ochNaKe.js.map → sublime-BPaNuiRD.js.map} +1 -1
  53. package/dist/graphiql/index.html +1 -1
  54. package/package.json +4 -4
  55. package/dist/graphiql/assets/codemirror-s7RqOvtc.js.map +0 -1
  56. package/dist/graphiql/assets/dialog-74yvRjdg.js.map +0 -1
  57. package/dist/graphiql/assets/index-IiLbhMF9.js.map +0 -1
  58. package/dist/graphiql/assets/matchbrackets-DcI6Xjhe.js.map +0 -1
  59. package/dist/graphiql/assets/searchcursor-CHMRisY0.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lint-C6rDu9yg.js","sources":["../../../../../node_modules/graphql/language/predicates.mjs","../../../../../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.mjs","../../../../../node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.mjs","../../../../../node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownArgumentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownDirectivesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownFragmentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownTypeNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/LoneAnonymousOperationRule.mjs","../../../../../node_modules/graphql/validation/rules/MaxIntrospectionDepthRule.mjs","../../../../../node_modules/graphql/validation/rules/NoFragmentCyclesRule.mjs","../../../../../node_modules/graphql/validation/rules/NoUndefinedVariablesRule.mjs","../../../../../node_modules/graphql/validation/rules/NoUnusedFragmentsRule.mjs","../../../../../node_modules/graphql/validation/rules/NoUnusedVariablesRule.mjs","../../../../../node_modules/graphql/utilities/sortValueNode.mjs","../../../../../node_modules/graphql/validation/rules/OverlappingFieldsCanBeMergedRule.mjs","../../../../../node_modules/graphql/validation/rules/PossibleFragmentSpreadsRule.mjs","../../../../../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.mjs","../../../../../node_modules/graphql/validation/rules/ScalarLeafsRule.mjs","../../../../../node_modules/graphql/execution/values.mjs","../../../../../node_modules/graphql/execution/collectFields.mjs","../../../../../node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.mjs","../../../../../node_modules/graphql/jsutils/groupBy.mjs","../../../../../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueFragmentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueOperationNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueVariableNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.mjs","../../../../../node_modules/graphql/validation/rules/VariablesAreInputTypesRule.mjs","../../../../../node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.mjs","../../../../../node_modules/graphql/validation/specifiedRules.mjs","../../../../../node_modules/graphql/validation/ValidationContext.mjs","../../../../../node_modules/graphql/validation/validate.mjs","../../../../../node_modules/graphql/validation/rules/custom/NoDeprecatedCustomRule.mjs","../../../../../node_modules/graphql-language-service/esm/utils/validateWithCustomRules.js","../../../../../node_modules/graphql-language-service/esm/interface/getDiagnostics.js","../../../../../node_modules/codemirror-graphql/esm/lint.js"],"sourcesContent":["import { Kind } from './kinds.mjs';\nexport function isDefinitionNode(node) {\n return (\n isExecutableDefinitionNode(node) ||\n isTypeSystemDefinitionNode(node) ||\n isTypeSystemExtensionNode(node)\n );\n}\nexport function isExecutableDefinitionNode(node) {\n return (\n node.kind === Kind.OPERATION_DEFINITION ||\n node.kind === Kind.FRAGMENT_DEFINITION\n );\n}\nexport function isSelectionNode(node) {\n return (\n node.kind === Kind.FIELD ||\n node.kind === Kind.FRAGMENT_SPREAD ||\n node.kind === Kind.INLINE_FRAGMENT\n );\n}\nexport function isValueNode(node) {\n return (\n node.kind === Kind.VARIABLE ||\n node.kind === Kind.INT ||\n node.kind === Kind.FLOAT ||\n node.kind === Kind.STRING ||\n node.kind === Kind.BOOLEAN ||\n node.kind === Kind.NULL ||\n node.kind === Kind.ENUM ||\n node.kind === Kind.LIST ||\n node.kind === Kind.OBJECT\n );\n}\nexport function isConstValueNode(node) {\n return (\n isValueNode(node) &&\n (node.kind === Kind.LIST\n ? node.values.some(isConstValueNode)\n : node.kind === Kind.OBJECT\n ? node.fields.some((field) => isConstValueNode(field.value))\n : node.kind !== Kind.VARIABLE)\n );\n}\nexport function isTypeNode(node) {\n return (\n node.kind === Kind.NAMED_TYPE ||\n node.kind === Kind.LIST_TYPE ||\n node.kind === Kind.NON_NULL_TYPE\n );\n}\nexport function isTypeSystemDefinitionNode(node) {\n return (\n node.kind === Kind.SCHEMA_DEFINITION ||\n isTypeDefinitionNode(node) ||\n node.kind === Kind.DIRECTIVE_DEFINITION\n );\n}\nexport function isTypeDefinitionNode(node) {\n return (\n node.kind === Kind.SCALAR_TYPE_DEFINITION ||\n node.kind === Kind.OBJECT_TYPE_DEFINITION ||\n node.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n node.kind === Kind.UNION_TYPE_DEFINITION ||\n node.kind === Kind.ENUM_TYPE_DEFINITION ||\n node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n );\n}\nexport function isTypeSystemExtensionNode(node) {\n return node.kind === Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node);\n}\nexport function isTypeExtensionNode(node) {\n return (\n node.kind === Kind.SCALAR_TYPE_EXTENSION ||\n node.kind === Kind.OBJECT_TYPE_EXTENSION ||\n node.kind === Kind.INTERFACE_TYPE_EXTENSION ||\n node.kind === Kind.UNION_TYPE_EXTENSION ||\n node.kind === Kind.ENUM_TYPE_EXTENSION ||\n node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION\n );\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isExecutableDefinitionNode } from '../../language/predicates.mjs';\n\n/**\n * Executable definitions\n *\n * A GraphQL document is only valid for execution if all definitions are either\n * operation or fragment definitions.\n *\n * See https://spec.graphql.org/draft/#sec-Executable-Definitions\n */\nexport function ExecutableDefinitionsRule(context) {\n return {\n Document(node) {\n for (const definition of node.definitions) {\n if (!isExecutableDefinitionNode(definition)) {\n const defName =\n definition.kind === Kind.SCHEMA_DEFINITION ||\n definition.kind === Kind.SCHEMA_EXTENSION\n ? 'schema'\n : '\"' + definition.name.value + '\"';\n context.reportError(\n new GraphQLError(`The ${defName} definition is not executable.`, {\n nodes: definition,\n }),\n );\n }\n }\n\n return false;\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { naturalCompare } from '../../jsutils/naturalCompare.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n isAbstractType,\n isInterfaceType,\n isObjectType,\n} from '../../type/definition.mjs';\n\n/**\n * Fields on correct type\n *\n * A GraphQL document is only valid if all fields selected are defined by the\n * parent type, or are an allowed meta field such as __typename.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selections\n */\nexport function FieldsOnCorrectTypeRule(context) {\n return {\n Field(node) {\n const type = context.getParentType();\n\n if (type) {\n const fieldDef = context.getFieldDef();\n\n if (!fieldDef) {\n // This field doesn't exist, lets look for suggestions.\n const schema = context.getSchema();\n const fieldName = node.name.value; // First determine if there are any suggested types to condition on.\n\n let suggestion = didYouMean(\n 'to use an inline fragment on',\n getSuggestedTypeNames(schema, type, fieldName),\n ); // If there are no suggested types, then perhaps this was a typo?\n\n if (suggestion === '') {\n suggestion = didYouMean(getSuggestedFieldNames(type, fieldName));\n } // Report an error, including helpful suggestions.\n\n context.reportError(\n new GraphQLError(\n `Cannot query field \"${fieldName}\" on type \"${type.name}\".` +\n suggestion,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n };\n}\n/**\n * Go through all of the implementations of type, as well as the interfaces that\n * they implement. If any of those types include the provided field, suggest them,\n * sorted by how often the type is referenced.\n */\n\nfunction getSuggestedTypeNames(schema, type, fieldName) {\n if (!isAbstractType(type)) {\n // Must be an Object type, which does not have possible fields.\n return [];\n }\n\n const suggestedTypes = new Set();\n const usageCount = Object.create(null);\n\n for (const possibleType of schema.getPossibleTypes(type)) {\n if (!possibleType.getFields()[fieldName]) {\n continue;\n } // This object type defines this field.\n\n suggestedTypes.add(possibleType);\n usageCount[possibleType.name] = 1;\n\n for (const possibleInterface of possibleType.getInterfaces()) {\n var _usageCount$possibleI;\n\n if (!possibleInterface.getFields()[fieldName]) {\n continue;\n } // This interface type defines this field.\n\n suggestedTypes.add(possibleInterface);\n usageCount[possibleInterface.name] =\n ((_usageCount$possibleI = usageCount[possibleInterface.name]) !==\n null && _usageCount$possibleI !== void 0\n ? _usageCount$possibleI\n : 0) + 1;\n }\n }\n\n return [...suggestedTypes]\n .sort((typeA, typeB) => {\n // Suggest both interface and object types based on how common they are.\n const usageCountDiff = usageCount[typeB.name] - usageCount[typeA.name];\n\n if (usageCountDiff !== 0) {\n return usageCountDiff;\n } // Suggest super types first followed by subtypes\n\n if (isInterfaceType(typeA) && schema.isSubType(typeA, typeB)) {\n return -1;\n }\n\n if (isInterfaceType(typeB) && schema.isSubType(typeB, typeA)) {\n return 1;\n }\n\n return naturalCompare(typeA.name, typeB.name);\n })\n .map((x) => x.name);\n}\n/**\n * For the field name provided, determine if there are any similar field names\n * that may be the result of a typo.\n */\n\nfunction getSuggestedFieldNames(type, fieldName) {\n if (isObjectType(type) || isInterfaceType(type)) {\n const possibleFieldNames = Object.keys(type.getFields());\n return suggestionList(fieldName, possibleFieldNames);\n } // Otherwise, must be a Union type, which does not define fields.\n\n return [];\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isCompositeType } from '../../type/definition.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Fragments on composite type\n *\n * Fragments use a type condition to determine if they apply, since fragments\n * can only be spread into a composite type (object, interface, or union), the\n * type condition must also be a composite type.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-On-Composite-Types\n */\nexport function FragmentsOnCompositeTypesRule(context) {\n return {\n InlineFragment(node) {\n const typeCondition = node.typeCondition;\n\n if (typeCondition) {\n const type = typeFromAST(context.getSchema(), typeCondition);\n\n if (type && !isCompositeType(type)) {\n const typeStr = print(typeCondition);\n context.reportError(\n new GraphQLError(\n `Fragment cannot condition on non composite type \"${typeStr}\".`,\n {\n nodes: typeCondition,\n },\n ),\n );\n }\n }\n },\n\n FragmentDefinition(node) {\n const type = typeFromAST(context.getSchema(), node.typeCondition);\n\n if (type && !isCompositeType(type)) {\n const typeStr = print(node.typeCondition);\n context.reportError(\n new GraphQLError(\n `Fragment \"${node.name.value}\" cannot condition on non composite type \"${typeStr}\".`,\n {\n nodes: node.typeCondition,\n },\n ),\n );\n }\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n * See https://spec.graphql.org/draft/#sec-Directives-Are-In-Valid-Locations\n */\nexport function KnownArgumentNamesRule(context) {\n return {\n // eslint-disable-next-line new-cap\n ...KnownArgumentNamesOnDirectivesRule(context),\n\n Argument(argNode) {\n const argDef = context.getArgument();\n const fieldDef = context.getFieldDef();\n const parentType = context.getParentType();\n\n if (!argDef && fieldDef && parentType) {\n const argName = argNode.name.value;\n const knownArgsNames = fieldDef.args.map((arg) => arg.name);\n const suggestions = suggestionList(argName, knownArgsNames);\n context.reportError(\n new GraphQLError(\n `Unknown argument \"${argName}\" on field \"${parentType.name}.${fieldDef.name}\".` +\n didYouMean(suggestions),\n {\n nodes: argNode,\n },\n ),\n );\n }\n },\n };\n}\n/**\n * @internal\n */\n\nexport function KnownArgumentNamesOnDirectivesRule(context) {\n const directiveArgs = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives = schema\n ? schema.getDirectives()\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n directiveArgs[directive.name] = directive.args.map((arg) => arg.name);\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n var _def$arguments;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argsNodes =\n (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n ? _def$arguments\n : [];\n directiveArgs[def.name.value] = argsNodes.map((arg) => arg.name.value);\n }\n }\n\n return {\n Directive(directiveNode) {\n const directiveName = directiveNode.name.value;\n const knownArgs = directiveArgs[directiveName];\n\n if (directiveNode.arguments && knownArgs) {\n for (const argNode of directiveNode.arguments) {\n const argName = argNode.name.value;\n\n if (!knownArgs.includes(argName)) {\n const suggestions = suggestionList(argName, knownArgs);\n context.reportError(\n new GraphQLError(\n `Unknown argument \"${argName}\" on directive \"@${directiveName}\".` +\n didYouMean(suggestions),\n {\n nodes: argNode,\n },\n ),\n );\n }\n }\n }\n\n return false;\n },\n };\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { invariant } from '../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { OperationTypeNode } from '../../language/ast.mjs';\nimport { DirectiveLocation } from '../../language/directiveLocation.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Defined\n */\nexport function KnownDirectivesRule(context) {\n const locationsMap = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives = schema\n ? schema.getDirectives()\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n locationsMap[directive.name] = directive.locations;\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n locationsMap[def.name.value] = def.locations.map((name) => name.value);\n }\n }\n\n return {\n Directive(node, _key, _parent, _path, ancestors) {\n const name = node.name.value;\n const locations = locationsMap[name];\n\n if (!locations) {\n context.reportError(\n new GraphQLError(`Unknown directive \"@${name}\".`, {\n nodes: node,\n }),\n );\n return;\n }\n\n const candidateLocation = getDirectiveLocationForASTPath(ancestors);\n\n if (candidateLocation && !locations.includes(candidateLocation)) {\n context.reportError(\n new GraphQLError(\n `Directive \"@${name}\" may not be used on ${candidateLocation}.`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n\nfunction getDirectiveLocationForASTPath(ancestors) {\n const appliedTo = ancestors[ancestors.length - 1];\n 'kind' in appliedTo || invariant(false);\n\n switch (appliedTo.kind) {\n case Kind.OPERATION_DEFINITION:\n return getDirectiveLocationForOperation(appliedTo.operation);\n\n case Kind.FIELD:\n return DirectiveLocation.FIELD;\n\n case Kind.FRAGMENT_SPREAD:\n return DirectiveLocation.FRAGMENT_SPREAD;\n\n case Kind.INLINE_FRAGMENT:\n return DirectiveLocation.INLINE_FRAGMENT;\n\n case Kind.FRAGMENT_DEFINITION:\n return DirectiveLocation.FRAGMENT_DEFINITION;\n\n case Kind.VARIABLE_DEFINITION:\n return DirectiveLocation.VARIABLE_DEFINITION;\n\n case Kind.SCHEMA_DEFINITION:\n case Kind.SCHEMA_EXTENSION:\n return DirectiveLocation.SCHEMA;\n\n case Kind.SCALAR_TYPE_DEFINITION:\n case Kind.SCALAR_TYPE_EXTENSION:\n return DirectiveLocation.SCALAR;\n\n case Kind.OBJECT_TYPE_DEFINITION:\n case Kind.OBJECT_TYPE_EXTENSION:\n return DirectiveLocation.OBJECT;\n\n case Kind.FIELD_DEFINITION:\n return DirectiveLocation.FIELD_DEFINITION;\n\n case Kind.INTERFACE_TYPE_DEFINITION:\n case Kind.INTERFACE_TYPE_EXTENSION:\n return DirectiveLocation.INTERFACE;\n\n case Kind.UNION_TYPE_DEFINITION:\n case Kind.UNION_TYPE_EXTENSION:\n return DirectiveLocation.UNION;\n\n case Kind.ENUM_TYPE_DEFINITION:\n case Kind.ENUM_TYPE_EXTENSION:\n return DirectiveLocation.ENUM;\n\n case Kind.ENUM_VALUE_DEFINITION:\n return DirectiveLocation.ENUM_VALUE;\n\n case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n return DirectiveLocation.INPUT_OBJECT;\n\n case Kind.INPUT_VALUE_DEFINITION: {\n const parentNode = ancestors[ancestors.length - 3];\n 'kind' in parentNode || invariant(false);\n return parentNode.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n ? DirectiveLocation.INPUT_FIELD_DEFINITION\n : DirectiveLocation.ARGUMENT_DEFINITION;\n }\n // Not reachable, all possible types have been considered.\n\n /* c8 ignore next */\n\n default:\n false || invariant(false, 'Unexpected kind: ' + inspect(appliedTo.kind));\n }\n}\n\nfunction getDirectiveLocationForOperation(operation) {\n switch (operation) {\n case OperationTypeNode.QUERY:\n return DirectiveLocation.QUERY;\n\n case OperationTypeNode.MUTATION:\n return DirectiveLocation.MUTATION;\n\n case OperationTypeNode.SUBSCRIPTION:\n return DirectiveLocation.SUBSCRIPTION;\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Known fragment names\n *\n * A GraphQL document is only valid if all `...Fragment` fragment spreads refer\n * to fragments defined in the same document.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spread-target-defined\n */\nexport function KnownFragmentNamesRule(context) {\n return {\n FragmentSpread(node) {\n const fragmentName = node.name.value;\n const fragment = context.getFragment(fragmentName);\n\n if (!fragment) {\n context.reportError(\n new GraphQLError(`Unknown fragment \"${fragmentName}\".`, {\n nodes: node.name,\n }),\n );\n }\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n isTypeDefinitionNode,\n isTypeSystemDefinitionNode,\n isTypeSystemExtensionNode,\n} from '../../language/predicates.mjs';\nimport { introspectionTypes } from '../../type/introspection.mjs';\nimport { specifiedScalarTypes } from '../../type/scalars.mjs';\n\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Spread-Type-Existence\n */\nexport function KnownTypeNamesRule(context) {\n const schema = context.getSchema();\n const existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);\n const definedTypes = Object.create(null);\n\n for (const def of context.getDocument().definitions) {\n if (isTypeDefinitionNode(def)) {\n definedTypes[def.name.value] = true;\n }\n }\n\n const typeNames = [\n ...Object.keys(existingTypesMap),\n ...Object.keys(definedTypes),\n ];\n return {\n NamedType(node, _1, parent, _2, ancestors) {\n const typeName = node.name.value;\n\n if (!existingTypesMap[typeName] && !definedTypes[typeName]) {\n var _ancestors$;\n\n const definitionNode =\n (_ancestors$ = ancestors[2]) !== null && _ancestors$ !== void 0\n ? _ancestors$\n : parent;\n const isSDL = definitionNode != null && isSDLNode(definitionNode);\n\n if (isSDL && standardTypeNames.includes(typeName)) {\n return;\n }\n\n const suggestedTypes = suggestionList(\n typeName,\n isSDL ? standardTypeNames.concat(typeNames) : typeNames,\n );\n context.reportError(\n new GraphQLError(\n `Unknown type \"${typeName}\".` + didYouMean(suggestedTypes),\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\nconst standardTypeNames = [...specifiedScalarTypes, ...introspectionTypes].map(\n (type) => type.name,\n);\n\nfunction isSDLNode(value) {\n return (\n 'kind' in value &&\n (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value))\n );\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\n\n/**\n * Lone anonymous operation\n *\n * A GraphQL document is only valid if when it contains an anonymous operation\n * (the query short-hand) that it contains only that one operation definition.\n *\n * See https://spec.graphql.org/draft/#sec-Lone-Anonymous-Operation\n */\nexport function LoneAnonymousOperationRule(context) {\n let operationCount = 0;\n return {\n Document(node) {\n operationCount = node.definitions.filter(\n (definition) => definition.kind === Kind.OPERATION_DEFINITION,\n ).length;\n },\n\n OperationDefinition(node) {\n if (!node.name && operationCount > 1) {\n context.reportError(\n new GraphQLError(\n 'This anonymous operation must be the only defined operation.',\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nconst MAX_LISTS_DEPTH = 3;\nexport function MaxIntrospectionDepthRule(context) {\n /**\n * Counts the depth of list fields in \"__Type\" recursively and\n * returns `true` if the limit has been reached.\n */\n function checkDepth(node, visitedFragments = Object.create(null), depth = 0) {\n if (node.kind === Kind.FRAGMENT_SPREAD) {\n const fragmentName = node.name.value;\n\n if (visitedFragments[fragmentName] === true) {\n // Fragment cycles are handled by `NoFragmentCyclesRule`.\n return false;\n }\n\n const fragment = context.getFragment(fragmentName);\n\n if (!fragment) {\n // Missing fragments checks are handled by `KnownFragmentNamesRule`.\n return false;\n } // Rather than following an immutable programming pattern which has\n // significant memory and garbage collection overhead, we've opted to\n // take a mutable approach for efficiency's sake. Importantly visiting a\n // fragment twice is fine, so long as you don't do one visit inside the\n // other.\n\n try {\n visitedFragments[fragmentName] = true;\n return checkDepth(fragment, visitedFragments, depth);\n } finally {\n visitedFragments[fragmentName] = undefined;\n }\n }\n\n if (\n node.kind === Kind.FIELD && // check all introspection lists\n (node.name.value === 'fields' ||\n node.name.value === 'interfaces' ||\n node.name.value === 'possibleTypes' ||\n node.name.value === 'inputFields')\n ) {\n // eslint-disable-next-line no-param-reassign\n depth++;\n\n if (depth >= MAX_LISTS_DEPTH) {\n return true;\n }\n } // handles fields and inline fragments\n\n if ('selectionSet' in node && node.selectionSet) {\n for (const child of node.selectionSet.selections) {\n if (checkDepth(child, visitedFragments, depth)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n return {\n Field(node) {\n if (node.name.value === '__schema' || node.name.value === '__type') {\n if (checkDepth(node)) {\n context.reportError(\n new GraphQLError('Maximum introspection depth exceeded', {\n nodes: [node],\n }),\n );\n return false;\n }\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No fragment cycles\n *\n * The graph of fragment spreads must not form any cycles including spreading itself.\n * Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles\n */\nexport function NoFragmentCyclesRule(context) {\n // Tracks already visited fragments to maintain O(N) and to ensure that cycles\n // are not redundantly reported.\n const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors\n\n const spreadPath = []; // Position in the spread path\n\n const spreadPathIndexByName = Object.create(null);\n return {\n OperationDefinition: () => false,\n\n FragmentDefinition(node) {\n detectCycleRecursive(node);\n return false;\n },\n }; // This does a straight-forward DFS to find cycles.\n // It does not terminate when a cycle was found but continues to explore\n // the graph to find all possible cycles.\n\n function detectCycleRecursive(fragment) {\n if (visitedFrags[fragment.name.value]) {\n return;\n }\n\n const fragmentName = fragment.name.value;\n visitedFrags[fragmentName] = true;\n const spreadNodes = context.getFragmentSpreads(fragment.selectionSet);\n\n if (spreadNodes.length === 0) {\n return;\n }\n\n spreadPathIndexByName[fragmentName] = spreadPath.length;\n\n for (const spreadNode of spreadNodes) {\n const spreadName = spreadNode.name.value;\n const cycleIndex = spreadPathIndexByName[spreadName];\n spreadPath.push(spreadNode);\n\n if (cycleIndex === undefined) {\n const spreadFragment = context.getFragment(spreadName);\n\n if (spreadFragment) {\n detectCycleRecursive(spreadFragment);\n }\n } else {\n const cyclePath = spreadPath.slice(cycleIndex);\n const viaPath = cyclePath\n .slice(0, -1)\n .map((s) => '\"' + s.name.value + '\"')\n .join(', ');\n context.reportError(\n new GraphQLError(\n `Cannot spread fragment \"${spreadName}\" within itself` +\n (viaPath !== '' ? ` via ${viaPath}.` : '.'),\n {\n nodes: cyclePath,\n },\n ),\n );\n }\n\n spreadPath.pop();\n }\n\n spreadPathIndexByName[fragmentName] = undefined;\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No undefined variables\n *\n * A GraphQL operation is only valid if all variables encountered, both directly\n * and via fragment spreads, are defined by that operation.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined\n */\nexport function NoUndefinedVariablesRule(context) {\n let variableNameDefined = Object.create(null);\n return {\n OperationDefinition: {\n enter() {\n variableNameDefined = Object.create(null);\n },\n\n leave(operation) {\n const usages = context.getRecursiveVariableUsages(operation);\n\n for (const { node } of usages) {\n const varName = node.name.value;\n\n if (variableNameDefined[varName] !== true) {\n context.reportError(\n new GraphQLError(\n operation.name\n ? `Variable \"$${varName}\" is not defined by operation \"${operation.name.value}\".`\n : `Variable \"$${varName}\" is not defined.`,\n {\n nodes: [node, operation],\n },\n ),\n );\n }\n }\n },\n },\n\n VariableDefinition(node) {\n variableNameDefined[node.variable.name.value] = true;\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No unused fragments\n *\n * A GraphQL document is only valid if all fragment definitions are spread\n * within operations, or spread within other fragments spread within operations.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used\n */\nexport function NoUnusedFragmentsRule(context) {\n const operationDefs = [];\n const fragmentDefs = [];\n return {\n OperationDefinition(node) {\n operationDefs.push(node);\n return false;\n },\n\n FragmentDefinition(node) {\n fragmentDefs.push(node);\n return false;\n },\n\n Document: {\n leave() {\n const fragmentNameUsed = Object.create(null);\n\n for (const operation of operationDefs) {\n for (const fragment of context.getRecursivelyReferencedFragments(\n operation,\n )) {\n fragmentNameUsed[fragment.name.value] = true;\n }\n }\n\n for (const fragmentDef of fragmentDefs) {\n const fragName = fragmentDef.name.value;\n\n if (fragmentNameUsed[fragName] !== true) {\n context.reportError(\n new GraphQLError(`Fragment \"${fragName}\" is never used.`, {\n nodes: fragmentDef,\n }),\n );\n }\n }\n },\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No unused variables\n *\n * A GraphQL operation is only valid if all variables defined by an operation\n * are used, either directly or within a spread fragment.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variables-Used\n */\nexport function NoUnusedVariablesRule(context) {\n let variableDefs = [];\n return {\n OperationDefinition: {\n enter() {\n variableDefs = [];\n },\n\n leave(operation) {\n const variableNameUsed = Object.create(null);\n const usages = context.getRecursiveVariableUsages(operation);\n\n for (const { node } of usages) {\n variableNameUsed[node.name.value] = true;\n }\n\n for (const variableDef of variableDefs) {\n const variableName = variableDef.variable.name.value;\n\n if (variableNameUsed[variableName] !== true) {\n context.reportError(\n new GraphQLError(\n operation.name\n ? `Variable \"$${variableName}\" is never used in operation \"${operation.name.value}\".`\n : `Variable \"$${variableName}\" is never used.`,\n {\n nodes: variableDef,\n },\n ),\n );\n }\n }\n },\n },\n\n VariableDefinition(def) {\n variableDefs.push(def);\n },\n };\n}\n","import { naturalCompare } from '../jsutils/naturalCompare.mjs';\nimport { Kind } from '../language/kinds.mjs';\n/**\n * Sort ValueNode.\n *\n * This function returns a sorted copy of the given ValueNode.\n *\n * @internal\n */\n\nexport function sortValueNode(valueNode) {\n switch (valueNode.kind) {\n case Kind.OBJECT:\n return { ...valueNode, fields: sortFields(valueNode.fields) };\n\n case Kind.LIST:\n return { ...valueNode, values: valueNode.values.map(sortValueNode) };\n\n case Kind.INT:\n case Kind.FLOAT:\n case Kind.STRING:\n case Kind.BOOLEAN:\n case Kind.NULL:\n case Kind.ENUM:\n case Kind.VARIABLE:\n return valueNode;\n }\n}\n\nfunction sortFields(fields) {\n return fields\n .map((fieldNode) => ({\n ...fieldNode,\n value: sortValueNode(fieldNode.value),\n }))\n .sort((fieldA, fieldB) =>\n naturalCompare(fieldA.name.value, fieldB.name.value),\n );\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport {\n getNamedType,\n isInterfaceType,\n isLeafType,\n isListType,\n isNonNullType,\n isObjectType,\n} from '../../type/definition.mjs';\nimport { sortValueNode } from '../../utilities/sortValueNode.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\nfunction reasonMessage(reason) {\n if (Array.isArray(reason)) {\n return reason\n .map(\n ([responseName, subReason]) =>\n `subfields \"${responseName}\" conflict because ` +\n reasonMessage(subReason),\n )\n .join(' and ');\n }\n\n return reason;\n}\n/**\n * Overlapping fields can be merged\n *\n * A selection set is only valid if all fields (including spreading any\n * fragments) either correspond to distinct response names or can be merged\n * without ambiguity.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging\n */\n\nexport function OverlappingFieldsCanBeMergedRule(context) {\n // A memoization for when fields and a fragment or two fragments are compared\n // \"between\" each other for conflicts. Comparisons made be made many times,\n // so memoizing this can dramatically improve the performance of this validator.\n const comparedFieldsAndFragmentPairs = new OrderedPairSet();\n const comparedFragmentPairs = new PairSet(); // A cache for the \"field map\" and list of fragment names found in any given\n // selection set. Selection sets may be asked for this information multiple\n // times, so this improves the performance of this validator.\n\n const cachedFieldsAndFragmentNames = new Map();\n return {\n SelectionSet(selectionSet) {\n const conflicts = findConflictsWithinSelectionSet(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n context.getParentType(),\n selectionSet,\n );\n\n for (const [[responseName, reason], fields1, fields2] of conflicts) {\n const reasonMsg = reasonMessage(reason);\n context.reportError(\n new GraphQLError(\n `Fields \"${responseName}\" conflict because ${reasonMsg}. Use different aliases on the fields to fetch both if this was intentional.`,\n {\n nodes: fields1.concat(fields2),\n },\n ),\n );\n }\n },\n };\n}\n\n/**\n * Algorithm:\n *\n * Conflicts occur when two fields exist in a query which will produce the same\n * response name, but represent differing values, thus creating a conflict.\n * The algorithm below finds all conflicts via making a series of comparisons\n * between fields. In order to compare as few fields as possible, this makes\n * a series of comparisons \"within\" sets of fields and \"between\" sets of fields.\n *\n * Given any selection set, a collection produces both a set of fields by\n * also including all inline fragments, as well as a list of fragments\n * referenced by fragment spreads.\n *\n * A) Each selection set represented in the document first compares \"within\" its\n * collected set of fields, finding any conflicts between every pair of\n * overlapping fields.\n * Note: This is the *only time* that a the fields \"within\" a set are compared\n * to each other. After this only fields \"between\" sets are compared.\n *\n * B) Also, if any fragment is referenced in a selection set, then a\n * comparison is made \"between\" the original set of fields and the\n * referenced fragment.\n *\n * C) Also, if multiple fragments are referenced, then comparisons\n * are made \"between\" each referenced fragment.\n *\n * D) When comparing \"between\" a set of fields and a referenced fragment, first\n * a comparison is made between each field in the original set of fields and\n * each field in the the referenced set of fields.\n *\n * E) Also, if any fragment is referenced in the referenced selection set,\n * then a comparison is made \"between\" the original set of fields and the\n * referenced fragment (recursively referring to step D).\n *\n * F) When comparing \"between\" two fragments, first a comparison is made between\n * each field in the first referenced set of fields and each field in the the\n * second referenced set of fields.\n *\n * G) Also, any fragments referenced by the first must be compared to the\n * second, and any fragments referenced by the second must be compared to the\n * first (recursively referring to step F).\n *\n * H) When comparing two fields, if both have selection sets, then a comparison\n * is made \"between\" both selection sets, first comparing the set of fields in\n * the first selection set with the set of fields in the second.\n *\n * I) Also, if any fragment is referenced in either selection set, then a\n * comparison is made \"between\" the other set of fields and the\n * referenced fragment.\n *\n * J) Also, if two fragments are referenced in both selection sets, then a\n * comparison is made \"between\" the two fragments.\n *\n */\n// Find all conflicts found \"within\" a selection set, including those found\n// via spreading in fragments. Called when visiting each SelectionSet in the\n// GraphQL Document.\nfunction findConflictsWithinSelectionSet(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentType,\n selectionSet,\n) {\n const conflicts = [];\n const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType,\n selectionSet,\n ); // (A) Find find all conflicts \"within\" the fields of this selection set.\n // Note: this is the *only place* `collectConflictsWithin` is called.\n\n collectConflictsWithin(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n fieldMap,\n );\n\n if (fragmentNames.length !== 0) {\n // (B) Then collect conflicts between these fields and those represented by\n // each spread fragment name found.\n for (let i = 0; i < fragmentNames.length; i++) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n false,\n fieldMap,\n fragmentNames[i],\n ); // (C) Then compare this fragment with all other fragments found in this\n // selection set to collect conflicts between fragments spread together.\n // This compares each item in the list of fragment names to every other\n // item in that same list (except for itself).\n\n for (let j = i + 1; j < fragmentNames.length; j++) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n false,\n fragmentNames[i],\n fragmentNames[j],\n );\n }\n }\n }\n\n return conflicts;\n} // Collect all conflicts found between a set of fields and a fragment reference\n// including via spreading in any nested fragments.\n\nfunction collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap,\n fragmentName,\n) {\n // Memoize so the fields and fragments are not compared for conflicts more\n // than once.\n if (\n comparedFieldsAndFragmentPairs.has(\n fieldMap,\n fragmentName,\n areMutuallyExclusive,\n )\n ) {\n return;\n }\n\n comparedFieldsAndFragmentPairs.add(\n fieldMap,\n fragmentName,\n areMutuallyExclusive,\n );\n const fragment = context.getFragment(fragmentName);\n\n if (!fragment) {\n return;\n }\n\n const [fieldMap2, referencedFragmentNames] =\n getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment,\n ); // Do not compare a fragment's fieldMap to itself.\n\n if (fieldMap === fieldMap2) {\n return;\n } // (D) First collect any conflicts between the provided collection of fields\n // and the collection of fields represented by the given fragment.\n\n collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap,\n fieldMap2,\n ); // (E) Then collect any conflicts between the provided collection of fields\n // and any fragment names found in the given fragment.\n\n for (const referencedFragmentName of referencedFragmentNames) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap,\n referencedFragmentName,\n );\n }\n} // Collect all conflicts found between two fragments, including via spreading in\n// any nested fragments.\n\nfunction collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fragmentName1,\n fragmentName2,\n) {\n // No need to compare a fragment to itself.\n if (fragmentName1 === fragmentName2) {\n return;\n } // Memoize so two fragments are not compared for conflicts more than once.\n\n if (\n comparedFragmentPairs.has(\n fragmentName1,\n fragmentName2,\n areMutuallyExclusive,\n )\n ) {\n return;\n }\n\n comparedFragmentPairs.add(fragmentName1, fragmentName2, areMutuallyExclusive);\n const fragment1 = context.getFragment(fragmentName1);\n const fragment2 = context.getFragment(fragmentName2);\n\n if (!fragment1 || !fragment2) {\n return;\n }\n\n const [fieldMap1, referencedFragmentNames1] =\n getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment1,\n );\n const [fieldMap2, referencedFragmentNames2] =\n getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment2,\n ); // (F) First, collect all conflicts between these two collections of fields\n // (not including any nested fragments).\n\n collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap1,\n fieldMap2,\n ); // (G) Then collect conflicts between the first fragment and any nested\n // fragments spread in the second fragment.\n\n for (const referencedFragmentName2 of referencedFragmentNames2) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fragmentName1,\n referencedFragmentName2,\n );\n } // (G) Then collect conflicts between the second fragment and any nested\n // fragments spread in the first fragment.\n\n for (const referencedFragmentName1 of referencedFragmentNames1) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n referencedFragmentName1,\n fragmentName2,\n );\n }\n} // Find all conflicts found between two selection sets, including those found\n// via spreading in fragments. Called when determining if conflicts exist\n// between the sub-fields of two overlapping fields.\n\nfunction findConflictsBetweenSubSelectionSets(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n parentType1,\n selectionSet1,\n parentType2,\n selectionSet2,\n) {\n const conflicts = [];\n const [fieldMap1, fragmentNames1] = getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType1,\n selectionSet1,\n );\n const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType2,\n selectionSet2,\n ); // (H) First, collect all conflicts between these two collections of field.\n\n collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap1,\n fieldMap2,\n ); // (I) Then collect conflicts between the first collection of fields and\n // those referenced by each fragment name associated with the second.\n\n for (const fragmentName2 of fragmentNames2) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap1,\n fragmentName2,\n );\n } // (I) Then collect conflicts between the second collection of fields and\n // those referenced by each fragment name associated with the first.\n\n for (const fragmentName1 of fragmentNames1) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap2,\n fragmentName1,\n );\n } // (J) Also collect conflicts between any fragment names by the first and\n // fragment names by the second. This compares each item in the first set of\n // names to each item in the second set of names.\n\n for (const fragmentName1 of fragmentNames1) {\n for (const fragmentName2 of fragmentNames2) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fragmentName1,\n fragmentName2,\n );\n }\n }\n\n return conflicts;\n} // Collect all Conflicts \"within\" one collection of fields.\n\nfunction collectConflictsWithin(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n fieldMap,\n) {\n // A field map is a keyed collection, where each key represents a response\n // name and the value at that key is a list of all fields which provide that\n // response name. For every response name, if there are multiple fields, they\n // must be compared to find a potential conflict.\n for (const [responseName, fields] of Object.entries(fieldMap)) {\n // This compares every field in the list to every other field in this list\n // (except to itself). If the list only has one item, nothing needs to\n // be compared.\n if (fields.length > 1) {\n for (let i = 0; i < fields.length; i++) {\n for (let j = i + 1; j < fields.length; j++) {\n const conflict = findConflict(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n false, // within one collection is never mutually exclusive\n responseName,\n fields[i],\n fields[j],\n );\n\n if (conflict) {\n conflicts.push(conflict);\n }\n }\n }\n }\n }\n} // Collect all Conflicts between two collections of fields. This is similar to,\n// but different from the `collectConflictsWithin` function above. This check\n// assumes that `collectConflictsWithin` has already been called on each\n// provided collection of fields. This is true because this validator traverses\n// each individual selection set.\n\nfunction collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentFieldsAreMutuallyExclusive,\n fieldMap1,\n fieldMap2,\n) {\n // A field map is a keyed collection, where each key represents a response\n // name and the value at that key is a list of all fields which provide that\n // response name. For any response name which appears in both provided field\n // maps, each field from the first field map must be compared to every field\n // in the second field map to find potential conflicts.\n for (const [responseName, fields1] of Object.entries(fieldMap1)) {\n const fields2 = fieldMap2[responseName];\n\n if (fields2) {\n for (const field1 of fields1) {\n for (const field2 of fields2) {\n const conflict = findConflict(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentFieldsAreMutuallyExclusive,\n responseName,\n field1,\n field2,\n );\n\n if (conflict) {\n conflicts.push(conflict);\n }\n }\n }\n }\n }\n} // Determines if there is a conflict between two particular fields, including\n// comparing their sub-fields.\n\nfunction findConflict(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentFieldsAreMutuallyExclusive,\n responseName,\n field1,\n field2,\n) {\n const [parentType1, node1, def1] = field1;\n const [parentType2, node2, def2] = field2; // If it is known that two fields could not possibly apply at the same\n // time, due to the parent types, then it is safe to permit them to diverge\n // in aliased field or arguments used as they will not present any ambiguity\n // by differing.\n // It is known that two parent types could never overlap if they are\n // different Object types. Interface or Union types might overlap - if not\n // in the current state of the schema, then perhaps in some future version,\n // thus may not safely diverge.\n\n const areMutuallyExclusive =\n parentFieldsAreMutuallyExclusive ||\n (parentType1 !== parentType2 &&\n isObjectType(parentType1) &&\n isObjectType(parentType2));\n\n if (!areMutuallyExclusive) {\n // Two aliases must refer to the same field.\n const name1 = node1.name.value;\n const name2 = node2.name.value;\n\n if (name1 !== name2) {\n return [\n [responseName, `\"${name1}\" and \"${name2}\" are different fields`],\n [node1],\n [node2],\n ];\n } // Two field calls must have the same arguments.\n\n if (!sameArguments(node1, node2)) {\n return [\n [responseName, 'they have differing arguments'],\n [node1],\n [node2],\n ];\n }\n } // The return type for each field.\n\n const type1 = def1 === null || def1 === void 0 ? void 0 : def1.type;\n const type2 = def2 === null || def2 === void 0 ? void 0 : def2.type;\n\n if (type1 && type2 && doTypesConflict(type1, type2)) {\n return [\n [\n responseName,\n `they return conflicting types \"${inspect(type1)}\" and \"${inspect(\n type2,\n )}\"`,\n ],\n [node1],\n [node2],\n ];\n } // Collect and compare sub-fields. Use the same \"visited fragment names\" list\n // for both collections so fields in a fragment reference are never\n // compared to themselves.\n\n const selectionSet1 = node1.selectionSet;\n const selectionSet2 = node2.selectionSet;\n\n if (selectionSet1 && selectionSet2) {\n const conflicts = findConflictsBetweenSubSelectionSets(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n getNamedType(type1),\n selectionSet1,\n getNamedType(type2),\n selectionSet2,\n );\n return subfieldConflicts(conflicts, responseName, node1, node2);\n }\n}\n\nfunction sameArguments(node1, node2) {\n const args1 = node1.arguments;\n const args2 = node2.arguments;\n\n if (args1 === undefined || args1.length === 0) {\n return args2 === undefined || args2.length === 0;\n }\n\n if (args2 === undefined || args2.length === 0) {\n return false;\n }\n /* c8 ignore next */\n\n if (args1.length !== args2.length) {\n /* c8 ignore next */\n return false;\n /* c8 ignore next */\n }\n\n const values2 = new Map(args2.map(({ name, value }) => [name.value, value]));\n return args1.every((arg1) => {\n const value1 = arg1.value;\n const value2 = values2.get(arg1.name.value);\n\n if (value2 === undefined) {\n return false;\n }\n\n return stringifyValue(value1) === stringifyValue(value2);\n });\n}\n\nfunction stringifyValue(value) {\n return print(sortValueNode(value));\n} // Two types conflict if both types could not apply to a value simultaneously.\n// Composite types are ignored as their individual field types will be compared\n// later recursively. However List and Non-Null types must match.\n\nfunction doTypesConflict(type1, type2) {\n if (isListType(type1)) {\n return isListType(type2)\n ? doTypesConflict(type1.ofType, type2.ofType)\n : true;\n }\n\n if (isListType(type2)) {\n return true;\n }\n\n if (isNonNullType(type1)) {\n return isNonNullType(type2)\n ? doTypesConflict(type1.ofType, type2.ofType)\n : true;\n }\n\n if (isNonNullType(type2)) {\n return true;\n }\n\n if (isLeafType(type1) || isLeafType(type2)) {\n return type1 !== type2;\n }\n\n return false;\n} // Given a selection set, return the collection of fields (a mapping of response\n// name to field nodes and definitions) as well as a list of fragment names\n// referenced via fragment spreads.\n\nfunction getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType,\n selectionSet,\n) {\n const cached = cachedFieldsAndFragmentNames.get(selectionSet);\n\n if (cached) {\n return cached;\n }\n\n const nodeAndDefs = Object.create(null);\n const fragmentNames = Object.create(null);\n\n _collectFieldsAndFragmentNames(\n context,\n parentType,\n selectionSet,\n nodeAndDefs,\n fragmentNames,\n );\n\n const result = [nodeAndDefs, Object.keys(fragmentNames)];\n cachedFieldsAndFragmentNames.set(selectionSet, result);\n return result;\n} // Given a reference to a fragment, return the represented collection of fields\n// as well as a list of nested fragment names referenced via fragment spreads.\n\nfunction getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment,\n) {\n // Short-circuit building a type from the node if possible.\n const cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet);\n\n if (cached) {\n return cached;\n }\n\n const fragmentType = typeFromAST(context.getSchema(), fragment.typeCondition);\n return getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragmentType,\n fragment.selectionSet,\n );\n}\n\nfunction _collectFieldsAndFragmentNames(\n context,\n parentType,\n selectionSet,\n nodeAndDefs,\n fragmentNames,\n) {\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n const fieldName = selection.name.value;\n let fieldDef;\n\n if (isObjectType(parentType) || isInterfaceType(parentType)) {\n fieldDef = parentType.getFields()[fieldName];\n }\n\n const responseName = selection.alias\n ? selection.alias.value\n : fieldName;\n\n if (!nodeAndDefs[responseName]) {\n nodeAndDefs[responseName] = [];\n }\n\n nodeAndDefs[responseName].push([parentType, selection, fieldDef]);\n break;\n }\n\n case Kind.FRAGMENT_SPREAD:\n fragmentNames[selection.name.value] = true;\n break;\n\n case Kind.INLINE_FRAGMENT: {\n const typeCondition = selection.typeCondition;\n const inlineFragmentType = typeCondition\n ? typeFromAST(context.getSchema(), typeCondition)\n : parentType;\n\n _collectFieldsAndFragmentNames(\n context,\n inlineFragmentType,\n selection.selectionSet,\n nodeAndDefs,\n fragmentNames,\n );\n\n break;\n }\n }\n }\n} // Given a series of Conflicts which occurred between two sub-fields, generate\n// a single Conflict.\n\nfunction subfieldConflicts(conflicts, responseName, node1, node2) {\n if (conflicts.length > 0) {\n return [\n [responseName, conflicts.map(([reason]) => reason)],\n [node1, ...conflicts.map(([, fields1]) => fields1).flat()],\n [node2, ...conflicts.map(([, , fields2]) => fields2).flat()],\n ];\n }\n}\n/**\n * A way to keep track of pairs of things where the ordering of the pair\n * matters.\n *\n * Provides a third argument for has/set to allow flagging the pair as\n * weakly or strongly present within the collection.\n */\n\nclass OrderedPairSet {\n constructor() {\n this._data = new Map();\n }\n\n has(a, b, weaklyPresent) {\n var _this$_data$get;\n\n const result =\n (_this$_data$get = this._data.get(a)) === null ||\n _this$_data$get === void 0\n ? void 0\n : _this$_data$get.get(b);\n\n if (result === undefined) {\n return false;\n }\n\n return weaklyPresent ? true : weaklyPresent === result;\n }\n\n add(a, b, weaklyPresent) {\n const map = this._data.get(a);\n\n if (map === undefined) {\n this._data.set(a, new Map([[b, weaklyPresent]]));\n } else {\n map.set(b, weaklyPresent);\n }\n }\n}\n/**\n * A way to keep track of pairs of similar things when the ordering of the pair\n * does not matter.\n */\n\nclass PairSet {\n constructor() {\n this._orderedPairSet = new OrderedPairSet();\n }\n\n has(a, b, weaklyPresent) {\n return a < b\n ? this._orderedPairSet.has(a, b, weaklyPresent)\n : this._orderedPairSet.has(b, a, weaklyPresent);\n }\n\n add(a, b, weaklyPresent) {\n if (a < b) {\n this._orderedPairSet.add(a, b, weaklyPresent);\n } else {\n this._orderedPairSet.add(b, a, weaklyPresent);\n }\n }\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { isCompositeType } from '../../type/definition.mjs';\nimport { doTypesOverlap } from '../../utilities/typeComparators.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Possible fragment spread\n *\n * A fragment spread is only valid if the type condition could ever possibly\n * be true: if there is a non-empty intersection of the possible parent types,\n * and possible types which pass the type condition.\n */\nexport function PossibleFragmentSpreadsRule(context) {\n return {\n InlineFragment(node) {\n const fragType = context.getType();\n const parentType = context.getParentType();\n\n if (\n isCompositeType(fragType) &&\n isCompositeType(parentType) &&\n !doTypesOverlap(context.getSchema(), fragType, parentType)\n ) {\n const parentTypeStr = inspect(parentType);\n const fragTypeStr = inspect(fragType);\n context.reportError(\n new GraphQLError(\n `Fragment cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n FragmentSpread(node) {\n const fragName = node.name.value;\n const fragType = getFragmentType(context, fragName);\n const parentType = context.getParentType();\n\n if (\n fragType &&\n parentType &&\n !doTypesOverlap(context.getSchema(), fragType, parentType)\n ) {\n const parentTypeStr = inspect(parentType);\n const fragTypeStr = inspect(fragType);\n context.reportError(\n new GraphQLError(\n `Fragment \"${fragName}\" cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n\nfunction getFragmentType(context, name) {\n const frag = context.getFragment(name);\n\n if (frag) {\n const type = typeFromAST(context.getSchema(), frag.typeCondition);\n\n if (isCompositeType(type)) {\n return type;\n }\n }\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { keyMap } from '../../jsutils/keyMap.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isRequiredArgument, isType } from '../../type/definition.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null without a\n * default value) field arguments have been provided.\n */\nexport function ProvidedRequiredArgumentsRule(context) {\n return {\n // eslint-disable-next-line new-cap\n ...ProvidedRequiredArgumentsOnDirectivesRule(context),\n Field: {\n // Validate on leave to allow for deeper errors to appear first.\n leave(fieldNode) {\n var _fieldNode$arguments;\n\n const fieldDef = context.getFieldDef();\n\n if (!fieldDef) {\n return false;\n }\n\n const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203\n /* c8 ignore next */\n (_fieldNode$arguments = fieldNode.arguments) === null ||\n _fieldNode$arguments === void 0\n ? void 0\n : _fieldNode$arguments.map((arg) => arg.name.value),\n );\n\n for (const argDef of fieldDef.args) {\n if (!providedArgs.has(argDef.name) && isRequiredArgument(argDef)) {\n const argTypeStr = inspect(argDef.type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldDef.name}\" argument \"${argDef.name}\" of type \"${argTypeStr}\" is required, but it was not provided.`,\n {\n nodes: fieldNode,\n },\n ),\n );\n }\n }\n },\n },\n };\n}\n/**\n * @internal\n */\n\nexport function ProvidedRequiredArgumentsOnDirectivesRule(context) {\n var _schema$getDirectives;\n\n const requiredArgsMap = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives =\n (_schema$getDirectives =\n schema === null || schema === void 0\n ? void 0\n : schema.getDirectives()) !== null && _schema$getDirectives !== void 0\n ? _schema$getDirectives\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n requiredArgsMap[directive.name] = keyMap(\n directive.args.filter(isRequiredArgument),\n (arg) => arg.name,\n );\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n var _def$arguments;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argNodes =\n (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n ? _def$arguments\n : [];\n requiredArgsMap[def.name.value] = keyMap(\n argNodes.filter(isRequiredArgumentNode),\n (arg) => arg.name.value,\n );\n }\n }\n\n return {\n Directive: {\n // Validate on leave to allow for deeper errors to appear first.\n leave(directiveNode) {\n const directiveName = directiveNode.name.value;\n const requiredArgs = requiredArgsMap[directiveName];\n\n if (requiredArgs) {\n var _directiveNode$argume;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argNodes =\n (_directiveNode$argume = directiveNode.arguments) !== null &&\n _directiveNode$argume !== void 0\n ? _directiveNode$argume\n : [];\n const argNodeMap = new Set(argNodes.map((arg) => arg.name.value));\n\n for (const [argName, argDef] of Object.entries(requiredArgs)) {\n if (!argNodeMap.has(argName)) {\n const argType = isType(argDef.type)\n ? inspect(argDef.type)\n : print(argDef.type);\n context.reportError(\n new GraphQLError(\n `Directive \"@${directiveName}\" argument \"${argName}\" of type \"${argType}\" is required, but it was not provided.`,\n {\n nodes: directiveNode,\n },\n ),\n );\n }\n }\n }\n },\n },\n };\n}\n\nfunction isRequiredArgumentNode(arg) {\n return arg.type.kind === Kind.NON_NULL_TYPE && arg.defaultValue == null;\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { getNamedType, isLeafType } from '../../type/definition.mjs';\n\n/**\n * Scalar leafs\n *\n * A GraphQL document is valid only if all leaf fields (fields without\n * sub selections) are of scalar or enum types.\n */\nexport function ScalarLeafsRule(context) {\n return {\n Field(node) {\n const type = context.getType();\n const selectionSet = node.selectionSet;\n\n if (type) {\n if (isLeafType(getNamedType(type))) {\n if (selectionSet) {\n const fieldName = node.name.value;\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldName}\" must not have a selection since type \"${typeStr}\" has no subfields.`,\n {\n nodes: selectionSet,\n },\n ),\n );\n }\n } else if (!selectionSet) {\n const fieldName = node.name.value;\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldName}\" of type \"${typeStr}\" must have a selection of subfields. Did you mean \"${fieldName} { ... }\"?`,\n {\n nodes: node,\n },\n ),\n );\n } else if (selectionSet.selections.length === 0) {\n const fieldName = node.name.value;\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldName}\" of type \"${typeStr}\" must have at least one field selected.`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n };\n}\n","import { inspect } from '../jsutils/inspect.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { printPathArray } from '../jsutils/printPathArray.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { print } from '../language/printer.mjs';\nimport { isInputType, isNonNullType } from '../type/definition.mjs';\nimport { coerceInputValue } from '../utilities/coerceInputValue.mjs';\nimport { typeFromAST } from '../utilities/typeFromAST.mjs';\nimport { valueFromAST } from '../utilities/valueFromAST.mjs';\n\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport function getVariableValues(schema, varDefNodes, inputs, options) {\n const errors = [];\n const maxErrors =\n options === null || options === void 0 ? void 0 : options.maxErrors;\n\n try {\n const coerced = coerceVariableValues(\n schema,\n varDefNodes,\n inputs,\n (error) => {\n if (maxErrors != null && errors.length >= maxErrors) {\n throw new GraphQLError(\n 'Too many errors processing variables, error limit reached. Execution aborted.',\n );\n }\n\n errors.push(error);\n },\n );\n\n if (errors.length === 0) {\n return {\n coerced,\n };\n }\n } catch (error) {\n errors.push(error);\n }\n\n return {\n errors,\n };\n}\n\nfunction coerceVariableValues(schema, varDefNodes, inputs, onError) {\n const coercedValues = {};\n\n for (const varDefNode of varDefNodes) {\n const varName = varDefNode.variable.name.value;\n const varType = typeFromAST(schema, varDefNode.type);\n\n if (!isInputType(varType)) {\n // Must use input types for variables. This should be caught during\n // validation, however is checked again here for safety.\n const varTypeStr = print(varDefNode.type);\n onError(\n new GraphQLError(\n `Variable \"$${varName}\" expected value of type \"${varTypeStr}\" which cannot be used as an input type.`,\n {\n nodes: varDefNode.type,\n },\n ),\n );\n continue;\n }\n\n if (!hasOwnProperty(inputs, varName)) {\n if (varDefNode.defaultValue) {\n coercedValues[varName] = valueFromAST(varDefNode.defaultValue, varType);\n } else if (isNonNullType(varType)) {\n const varTypeStr = inspect(varType);\n onError(\n new GraphQLError(\n `Variable \"$${varName}\" of required type \"${varTypeStr}\" was not provided.`,\n {\n nodes: varDefNode,\n },\n ),\n );\n }\n\n continue;\n }\n\n const value = inputs[varName];\n\n if (value === null && isNonNullType(varType)) {\n const varTypeStr = inspect(varType);\n onError(\n new GraphQLError(\n `Variable \"$${varName}\" of non-null type \"${varTypeStr}\" must not be null.`,\n {\n nodes: varDefNode,\n },\n ),\n );\n continue;\n }\n\n coercedValues[varName] = coerceInputValue(\n value,\n varType,\n (path, invalidValue, error) => {\n let prefix =\n `Variable \"$${varName}\" got invalid value ` + inspect(invalidValue);\n\n if (path.length > 0) {\n prefix += ` at \"${varName}${printPathArray(path)}\"`;\n }\n\n onError(\n new GraphQLError(prefix + '; ' + error.message, {\n nodes: varDefNode,\n originalError: error,\n }),\n );\n },\n );\n }\n\n return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getArgumentValues(def, node, variableValues) {\n var _node$arguments;\n\n const coercedValues = {}; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n\n const argumentNodes =\n (_node$arguments = node.arguments) !== null && _node$arguments !== void 0\n ? _node$arguments\n : [];\n const argNodeMap = keyMap(argumentNodes, (arg) => arg.name.value);\n\n for (const argDef of def.args) {\n const name = argDef.name;\n const argType = argDef.type;\n const argumentNode = argNodeMap[name];\n\n if (!argumentNode) {\n if (argDef.defaultValue !== undefined) {\n coercedValues[name] = argDef.defaultValue;\n } else if (isNonNullType(argType)) {\n throw new GraphQLError(\n `Argument \"${name}\" of required type \"${inspect(argType)}\" ` +\n 'was not provided.',\n {\n nodes: node,\n },\n );\n }\n\n continue;\n }\n\n const valueNode = argumentNode.value;\n let isNull = valueNode.kind === Kind.NULL;\n\n if (valueNode.kind === Kind.VARIABLE) {\n const variableName = valueNode.name.value;\n\n if (\n variableValues == null ||\n !hasOwnProperty(variableValues, variableName)\n ) {\n if (argDef.defaultValue !== undefined) {\n coercedValues[name] = argDef.defaultValue;\n } else if (isNonNullType(argType)) {\n throw new GraphQLError(\n `Argument \"${name}\" of required type \"${inspect(argType)}\" ` +\n `was provided the variable \"$${variableName}\" which was not provided a runtime value.`,\n {\n nodes: valueNode,\n },\n );\n }\n\n continue;\n }\n\n isNull = variableValues[variableName] == null;\n }\n\n if (isNull && isNonNullType(argType)) {\n throw new GraphQLError(\n `Argument \"${name}\" of non-null type \"${inspect(argType)}\" ` +\n 'must not be null.',\n {\n nodes: valueNode,\n },\n );\n }\n\n const coercedValue = valueFromAST(valueNode, argType, variableValues);\n\n if (coercedValue === undefined) {\n // Note: ValuesOfCorrectTypeRule validation should catch this before\n // execution. This is a runtime check to ensure execution does not\n // continue with an invalid argument value.\n throw new GraphQLError(\n `Argument \"${name}\" has invalid value ${print(valueNode)}.`,\n {\n nodes: valueNode,\n },\n );\n }\n\n coercedValues[name] = coercedValue;\n }\n\n return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getDirectiveValues(directiveDef, node, variableValues) {\n var _node$directives;\n\n const directiveNode =\n (_node$directives = node.directives) === null || _node$directives === void 0\n ? void 0\n : _node$directives.find(\n (directive) => directive.name.value === directiveDef.name,\n );\n\n if (directiveNode) {\n return getArgumentValues(directiveDef, directiveNode, variableValues);\n }\n}\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","import { Kind } from '../language/kinds.mjs';\nimport { isAbstractType } from '../type/definition.mjs';\nimport {\n GraphQLIncludeDirective,\n GraphQLSkipDirective,\n} from '../type/directives.mjs';\nimport { typeFromAST } from '../utilities/typeFromAST.mjs';\nimport { getDirectiveValues } from './values.mjs';\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nexport function collectFields(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selectionSet,\n) {\n const fields = new Map();\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selectionSet,\n fields,\n new Set(),\n );\n return fields;\n}\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nexport function collectSubfields(\n schema,\n fragments,\n variableValues,\n returnType,\n fieldNodes,\n) {\n const subFieldNodes = new Map();\n const visitedFragmentNames = new Set();\n\n for (const node of fieldNodes) {\n if (node.selectionSet) {\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n returnType,\n node.selectionSet,\n subFieldNodes,\n visitedFragmentNames,\n );\n }\n }\n\n return subFieldNodes;\n}\n\nfunction collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selectionSet,\n fields,\n visitedFragmentNames,\n) {\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n if (!shouldIncludeNode(variableValues, selection)) {\n continue;\n }\n\n const name = getFieldEntryKey(selection);\n const fieldList = fields.get(name);\n\n if (fieldList !== undefined) {\n fieldList.push(selection);\n } else {\n fields.set(name, [selection]);\n }\n\n break;\n }\n\n case Kind.INLINE_FRAGMENT: {\n if (\n !shouldIncludeNode(variableValues, selection) ||\n !doesFragmentConditionMatch(schema, selection, runtimeType)\n ) {\n continue;\n }\n\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selection.selectionSet,\n fields,\n visitedFragmentNames,\n );\n break;\n }\n\n case Kind.FRAGMENT_SPREAD: {\n const fragName = selection.name.value;\n\n if (\n visitedFragmentNames.has(fragName) ||\n !shouldIncludeNode(variableValues, selection)\n ) {\n continue;\n }\n\n visitedFragmentNames.add(fragName);\n const fragment = fragments[fragName];\n\n if (\n !fragment ||\n !doesFragmentConditionMatch(schema, fragment, runtimeType)\n ) {\n continue;\n }\n\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n fragment.selectionSet,\n fields,\n visitedFragmentNames,\n );\n break;\n }\n }\n }\n}\n/**\n * Determines if a field should be included based on the `@include` and `@skip`\n * directives, where `@skip` has higher precedence than `@include`.\n */\n\nfunction shouldIncludeNode(variableValues, node) {\n const skip = getDirectiveValues(GraphQLSkipDirective, node, variableValues);\n\n if ((skip === null || skip === void 0 ? void 0 : skip.if) === true) {\n return false;\n }\n\n const include = getDirectiveValues(\n GraphQLIncludeDirective,\n node,\n variableValues,\n );\n\n if (\n (include === null || include === void 0 ? void 0 : include.if) === false\n ) {\n return false;\n }\n\n return true;\n}\n/**\n * Determines if a fragment is applicable to the given type.\n */\n\nfunction doesFragmentConditionMatch(schema, fragment, type) {\n const typeConditionNode = fragment.typeCondition;\n\n if (!typeConditionNode) {\n return true;\n }\n\n const conditionalType = typeFromAST(schema, typeConditionNode);\n\n if (conditionalType === type) {\n return true;\n }\n\n if (isAbstractType(conditionalType)) {\n return schema.isSubType(conditionalType, type);\n }\n\n return false;\n}\n/**\n * Implements the logic to compute the key of a given field's entry\n */\n\nfunction getFieldEntryKey(node) {\n return node.alias ? node.alias.value : node.name.value;\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { collectFields } from '../../execution/collectFields.mjs';\n\n/**\n * Subscriptions must only include a non-introspection field.\n *\n * A GraphQL subscription is valid only if it contains a single root field and\n * that root field is not an introspection field.\n *\n * See https://spec.graphql.org/draft/#sec-Single-root-field\n */\nexport function SingleFieldSubscriptionsRule(context) {\n return {\n OperationDefinition(node) {\n if (node.operation === 'subscription') {\n const schema = context.getSchema();\n const subscriptionType = schema.getSubscriptionType();\n\n if (subscriptionType) {\n const operationName = node.name ? node.name.value : null;\n const variableValues = Object.create(null);\n const document = context.getDocument();\n const fragments = Object.create(null);\n\n for (const definition of document.definitions) {\n if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n fragments[definition.name.value] = definition;\n }\n }\n\n const fields = collectFields(\n schema,\n fragments,\n variableValues,\n subscriptionType,\n node.selectionSet,\n );\n\n if (fields.size > 1) {\n const fieldSelectionLists = [...fields.values()];\n const extraFieldSelectionLists = fieldSelectionLists.slice(1);\n const extraFieldSelections = extraFieldSelectionLists.flat();\n context.reportError(\n new GraphQLError(\n operationName != null\n ? `Subscription \"${operationName}\" must select only one top level field.`\n : 'Anonymous Subscription must select only one top level field.',\n {\n nodes: extraFieldSelections,\n },\n ),\n );\n }\n\n for (const fieldNodes of fields.values()) {\n const field = fieldNodes[0];\n const fieldName = field.name.value;\n\n if (fieldName.startsWith('__')) {\n context.reportError(\n new GraphQLError(\n operationName != null\n ? `Subscription \"${operationName}\" must not select an introspection top level field.`\n : 'Anonymous Subscription must not select an introspection top level field.',\n {\n nodes: fieldNodes,\n },\n ),\n );\n }\n }\n }\n }\n },\n };\n}\n","/**\n * Groups array items into a Map, given a function to produce grouping key.\n */\nexport function groupBy(list, keyFn) {\n const result = new Map();\n\n for (const item of list) {\n const key = keyFn(item);\n const group = result.get(key);\n\n if (group === undefined) {\n result.set(key, [item]);\n } else {\n group.push(item);\n }\n }\n\n return result;\n}\n","import { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n */\nexport function UniqueArgumentNamesRule(context) {\n return {\n Field: checkArgUniqueness,\n Directive: checkArgUniqueness,\n };\n\n function checkArgUniqueness(parentNode) {\n var _parentNode$arguments;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argumentNodes =\n (_parentNode$arguments = parentNode.arguments) !== null &&\n _parentNode$arguments !== void 0\n ? _parentNode$arguments\n : [];\n const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value);\n\n for (const [argName, argNodes] of seenArgs) {\n if (argNodes.length > 1) {\n context.reportError(\n new GraphQLError(\n `There can be only one argument named \"${argName}\".`,\n {\n nodes: argNodes.map((node) => node.name),\n },\n ),\n );\n }\n }\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport {\n isTypeDefinitionNode,\n isTypeExtensionNode,\n} from '../../language/predicates.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all non-repeatable directives at\n * a given location are uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location\n */\nexport function UniqueDirectivesPerLocationRule(context) {\n const uniqueDirectiveMap = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives = schema\n ? schema.getDirectives()\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n uniqueDirectiveMap[directive.name] = !directive.isRepeatable;\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n uniqueDirectiveMap[def.name.value] = !def.repeatable;\n }\n }\n\n const schemaDirectives = Object.create(null);\n const typeDirectivesMap = Object.create(null);\n return {\n // Many different AST nodes may contain directives. Rather than listing\n // them all, just listen for entering any node, and check to see if it\n // defines any directives.\n enter(node) {\n if (!('directives' in node) || !node.directives) {\n return;\n }\n\n let seenDirectives;\n\n if (\n node.kind === Kind.SCHEMA_DEFINITION ||\n node.kind === Kind.SCHEMA_EXTENSION\n ) {\n seenDirectives = schemaDirectives;\n } else if (isTypeDefinitionNode(node) || isTypeExtensionNode(node)) {\n const typeName = node.name.value;\n seenDirectives = typeDirectivesMap[typeName];\n\n if (seenDirectives === undefined) {\n typeDirectivesMap[typeName] = seenDirectives = Object.create(null);\n }\n } else {\n seenDirectives = Object.create(null);\n }\n\n for (const directive of node.directives) {\n const directiveName = directive.name.value;\n\n if (uniqueDirectiveMap[directiveName]) {\n if (seenDirectives[directiveName]) {\n context.reportError(\n new GraphQLError(\n `The directive \"@${directiveName}\" can only be used once at this location.`,\n {\n nodes: [seenDirectives[directiveName], directive],\n },\n ),\n );\n } else {\n seenDirectives[directiveName] = directive;\n }\n }\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness\n */\nexport function UniqueFragmentNamesRule(context) {\n const knownFragmentNames = Object.create(null);\n return {\n OperationDefinition: () => false,\n\n FragmentDefinition(node) {\n const fragmentName = node.name.value;\n\n if (knownFragmentNames[fragmentName]) {\n context.reportError(\n new GraphQLError(\n `There can be only one fragment named \"${fragmentName}\".`,\n {\n nodes: [knownFragmentNames[fragmentName], node.name],\n },\n ),\n );\n } else {\n knownFragmentNames[fragmentName] = node.name;\n }\n\n return false;\n },\n };\n}\n","import { invariant } from '../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Input-Object-Field-Uniqueness\n */\nexport function UniqueInputFieldNamesRule(context) {\n const knownNameStack = [];\n let knownNames = Object.create(null);\n return {\n ObjectValue: {\n enter() {\n knownNameStack.push(knownNames);\n knownNames = Object.create(null);\n },\n\n leave() {\n const prevKnownNames = knownNameStack.pop();\n prevKnownNames || invariant(false);\n knownNames = prevKnownNames;\n },\n },\n\n ObjectField(node) {\n const fieldName = node.name.value;\n\n if (knownNames[fieldName]) {\n context.reportError(\n new GraphQLError(\n `There can be only one input field named \"${fieldName}\".`,\n {\n nodes: [knownNames[fieldName], node.name],\n },\n ),\n );\n } else {\n knownNames[fieldName] = node.name;\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness\n */\nexport function UniqueOperationNamesRule(context) {\n const knownOperationNames = Object.create(null);\n return {\n OperationDefinition(node) {\n const operationName = node.name;\n\n if (operationName) {\n if (knownOperationNames[operationName.value]) {\n context.reportError(\n new GraphQLError(\n `There can be only one operation named \"${operationName.value}\".`,\n {\n nodes: [\n knownOperationNames[operationName.value],\n operationName,\n ],\n },\n ),\n );\n } else {\n knownOperationNames[operationName.value] = operationName;\n }\n }\n\n return false;\n },\n\n FragmentDefinition: () => false,\n };\n}\n","import { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\n */\nexport function UniqueVariableNamesRule(context) {\n return {\n OperationDefinition(operationNode) {\n var _operationNode$variab;\n\n // See: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const variableDefinitions =\n (_operationNode$variab = operationNode.variableDefinitions) !== null &&\n _operationNode$variab !== void 0\n ? _operationNode$variab\n : [];\n const seenVariableDefinitions = groupBy(\n variableDefinitions,\n (node) => node.variable.name.value,\n );\n\n for (const [variableName, variableNodes] of seenVariableDefinitions) {\n if (variableNodes.length > 1) {\n context.reportError(\n new GraphQLError(\n `There can be only one variable named \"$${variableName}\".`,\n {\n nodes: variableNodes.map((node) => node.variable.name),\n },\n ),\n );\n }\n }\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { inspect } from '../../jsutils/inspect.mjs';\nimport { keyMap } from '../../jsutils/keyMap.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport {\n getNamedType,\n getNullableType,\n isInputObjectType,\n isLeafType,\n isListType,\n isNonNullType,\n isRequiredInputField,\n} from '../../type/definition.mjs';\n\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n *\n * See https://spec.graphql.org/draft/#sec-Values-of-Correct-Type\n */\nexport function ValuesOfCorrectTypeRule(context) {\n let variableDefinitions = {};\n return {\n OperationDefinition: {\n enter() {\n variableDefinitions = {};\n },\n },\n\n VariableDefinition(definition) {\n variableDefinitions[definition.variable.name.value] = definition;\n },\n\n ListValue(node) {\n // Note: TypeInfo will traverse into a list's item type, so look to the\n // parent input type to check if it is a list.\n const type = getNullableType(context.getParentInputType());\n\n if (!isListType(type)) {\n isValidValueNode(context, node);\n return false; // Don't traverse further.\n }\n },\n\n ObjectValue(node) {\n const type = getNamedType(context.getInputType());\n\n if (!isInputObjectType(type)) {\n isValidValueNode(context, node);\n return false; // Don't traverse further.\n } // Ensure every required field exists.\n\n const fieldNodeMap = keyMap(node.fields, (field) => field.name.value);\n\n for (const fieldDef of Object.values(type.getFields())) {\n const fieldNode = fieldNodeMap[fieldDef.name];\n\n if (!fieldNode && isRequiredInputField(fieldDef)) {\n const typeStr = inspect(fieldDef.type);\n context.reportError(\n new GraphQLError(\n `Field \"${type.name}.${fieldDef.name}\" of required type \"${typeStr}\" was not provided.`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n\n if (type.isOneOf) {\n validateOneOfInputObject(\n context,\n node,\n type,\n fieldNodeMap,\n variableDefinitions,\n );\n }\n },\n\n ObjectField(node) {\n const parentType = getNamedType(context.getParentInputType());\n const fieldType = context.getInputType();\n\n if (!fieldType && isInputObjectType(parentType)) {\n const suggestions = suggestionList(\n node.name.value,\n Object.keys(parentType.getFields()),\n );\n context.reportError(\n new GraphQLError(\n `Field \"${node.name.value}\" is not defined by type \"${parentType.name}\".` +\n didYouMean(suggestions),\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n NullValue(node) {\n const type = context.getInputType();\n\n if (isNonNullType(type)) {\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${inspect(type)}\", found ${print(node)}.`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n EnumValue: (node) => isValidValueNode(context, node),\n IntValue: (node) => isValidValueNode(context, node),\n FloatValue: (node) => isValidValueNode(context, node),\n StringValue: (node) => isValidValueNode(context, node),\n BooleanValue: (node) => isValidValueNode(context, node),\n };\n}\n/**\n * Any value literal may be a valid representation of a Scalar, depending on\n * that scalar type.\n */\n\nfunction isValidValueNode(context, node) {\n // Report any error at the full type expected by the location.\n const locationType = context.getInputType();\n\n if (!locationType) {\n return;\n }\n\n const type = getNamedType(locationType);\n\n if (!isLeafType(type)) {\n const typeStr = inspect(locationType);\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${typeStr}\", found ${print(node)}.`,\n {\n nodes: node,\n },\n ),\n );\n return;\n } // Scalars and Enums determine if a literal value is valid via parseLiteral(),\n // which may throw or return an invalid value to indicate failure.\n\n try {\n const parseResult = type.parseLiteral(\n node,\n undefined,\n /* variables */\n );\n\n if (parseResult === undefined) {\n const typeStr = inspect(locationType);\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${typeStr}\", found ${print(node)}.`,\n {\n nodes: node,\n },\n ),\n );\n }\n } catch (error) {\n const typeStr = inspect(locationType);\n\n if (error instanceof GraphQLError) {\n context.reportError(error);\n } else {\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${typeStr}\", found ${print(node)}; ` +\n error.message,\n {\n nodes: node,\n originalError: error,\n },\n ),\n );\n }\n }\n}\n\nfunction validateOneOfInputObject(\n context,\n node,\n type,\n fieldNodeMap,\n variableDefinitions,\n) {\n var _fieldNodeMap$keys$;\n\n const keys = Object.keys(fieldNodeMap);\n const isNotExactlyOneField = keys.length !== 1;\n\n if (isNotExactlyOneField) {\n context.reportError(\n new GraphQLError(\n `OneOf Input Object \"${type.name}\" must specify exactly one key.`,\n {\n nodes: [node],\n },\n ),\n );\n return;\n }\n\n const value =\n (_fieldNodeMap$keys$ = fieldNodeMap[keys[0]]) === null ||\n _fieldNodeMap$keys$ === void 0\n ? void 0\n : _fieldNodeMap$keys$.value;\n const isNullLiteral = !value || value.kind === Kind.NULL;\n const isVariable =\n (value === null || value === void 0 ? void 0 : value.kind) ===\n Kind.VARIABLE;\n\n if (isNullLiteral) {\n context.reportError(\n new GraphQLError(`Field \"${type.name}.${keys[0]}\" must be non-null.`, {\n nodes: [node],\n }),\n );\n return;\n }\n\n if (isVariable) {\n const variableName = value.name.value;\n const definition = variableDefinitions[variableName];\n const isNullableVariable = definition.type.kind !== Kind.NON_NULL_TYPE;\n\n if (isNullableVariable) {\n context.reportError(\n new GraphQLError(\n `Variable \"${variableName}\" must be non-nullable to be used for OneOf Input Object \"${type.name}\".`,\n {\n nodes: [node],\n },\n ),\n );\n }\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isInputType } from '../../type/definition.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Variables are input types\n *\n * A GraphQL operation is only valid if all the variables it defines are of\n * input types (scalar, enum, or input object).\n *\n * See https://spec.graphql.org/draft/#sec-Variables-Are-Input-Types\n */\nexport function VariablesAreInputTypesRule(context) {\n return {\n VariableDefinition(node) {\n const type = typeFromAST(context.getSchema(), node.type);\n\n if (type !== undefined && !isInputType(type)) {\n const variableName = node.variable.name.value;\n const typeName = print(node.type);\n context.reportError(\n new GraphQLError(\n `Variable \"$${variableName}\" cannot be non-input type \"${typeName}\".`,\n {\n nodes: node.type,\n },\n ),\n );\n }\n },\n };\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isNonNullType } from '../../type/definition.mjs';\nimport { isTypeSubTypeOf } from '../../utilities/typeComparators.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Variables in allowed position\n *\n * Variable usages must be compatible with the arguments they are passed to.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Usages-are-Allowed\n */\nexport function VariablesInAllowedPositionRule(context) {\n let varDefMap = Object.create(null);\n return {\n OperationDefinition: {\n enter() {\n varDefMap = Object.create(null);\n },\n\n leave(operation) {\n const usages = context.getRecursiveVariableUsages(operation);\n\n for (const { node, type, defaultValue } of usages) {\n const varName = node.name.value;\n const varDef = varDefMap[varName];\n\n if (varDef && type) {\n // A var type is allowed if it is the same or more strict (e.g. is\n // a subtype of) than the expected type. It can be more strict if\n // the variable type is non-null when the expected type is nullable.\n // If both are list types, the variable item type can be more strict\n // than the expected item type (contravariant).\n const schema = context.getSchema();\n const varType = typeFromAST(schema, varDef.type);\n\n if (\n varType &&\n !allowedVariableUsage(\n schema,\n varType,\n varDef.defaultValue,\n type,\n defaultValue,\n )\n ) {\n const varTypeStr = inspect(varType);\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Variable \"$${varName}\" of type \"${varTypeStr}\" used in position expecting type \"${typeStr}\".`,\n {\n nodes: [varDef, node],\n },\n ),\n );\n }\n }\n }\n },\n },\n\n VariableDefinition(node) {\n varDefMap[node.variable.name.value] = node;\n },\n };\n}\n/**\n * Returns true if the variable is allowed in the location it was found,\n * which includes considering if default values exist for either the variable\n * or the location at which it is located.\n */\n\nfunction allowedVariableUsage(\n schema,\n varType,\n varDefaultValue,\n locationType,\n locationDefaultValue,\n) {\n if (isNonNullType(locationType) && !isNonNullType(varType)) {\n const hasNonNullVariableDefaultValue =\n varDefaultValue != null && varDefaultValue.kind !== Kind.NULL;\n const hasLocationDefaultValue = locationDefaultValue !== undefined;\n\n if (!hasNonNullVariableDefaultValue && !hasLocationDefaultValue) {\n return false;\n }\n\n const nullableLocationType = locationType.ofType;\n return isTypeSubTypeOf(schema, varType, nullableLocationType);\n }\n\n return isTypeSubTypeOf(schema, varType, locationType);\n}\n","// Spec Section: \"Executable Definitions\"\nimport { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule.mjs'; // Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\n\nimport { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule.mjs'; // Spec Section: \"Fragments on Composite Types\"\n\nimport { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule.mjs'; // Spec Section: \"Argument Names\"\n\nimport {\n KnownArgumentNamesOnDirectivesRule,\n KnownArgumentNamesRule,\n} from './rules/KnownArgumentNamesRule.mjs'; // Spec Section: \"Directives Are Defined\"\n\nimport { KnownDirectivesRule } from './rules/KnownDirectivesRule.mjs'; // Spec Section: \"Fragment spread target defined\"\n\nimport { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule.mjs'; // Spec Section: \"Fragment Spread Type Existence\"\n\nimport { KnownTypeNamesRule } from './rules/KnownTypeNamesRule.mjs'; // Spec Section: \"Lone Anonymous Operation\"\n\nimport { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule.mjs'; // SDL-specific validation rules\n\nimport { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule.mjs'; // TODO: Spec Section\n\nimport { MaxIntrospectionDepthRule } from './rules/MaxIntrospectionDepthRule.mjs'; // Spec Section: \"Fragments must not form cycles\"\n\nimport { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule.mjs'; // Spec Section: \"All Variable Used Defined\"\n\nimport { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule.mjs'; // Spec Section: \"Fragments must be used\"\n\nimport { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule.mjs'; // Spec Section: \"All Variables Used\"\n\nimport { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule.mjs'; // Spec Section: \"Field Selection Merging\"\n\nimport { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule.mjs'; // Spec Section: \"Fragment spread is possible\"\n\nimport { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule.mjs';\nimport { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule.mjs'; // Spec Section: \"Argument Optionality\"\n\nimport {\n ProvidedRequiredArgumentsOnDirectivesRule,\n ProvidedRequiredArgumentsRule,\n} from './rules/ProvidedRequiredArgumentsRule.mjs'; // Spec Section: \"Leaf Field Selections\"\n\nimport { ScalarLeafsRule } from './rules/ScalarLeafsRule.mjs'; // Spec Section: \"Subscriptions with Single Root Field\"\n\nimport { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule.mjs';\nimport { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule.mjs'; // Spec Section: \"Argument Uniqueness\"\n\nimport { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule.mjs';\nimport { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule.mjs'; // Spec Section: \"Directives Are Unique Per Location\"\n\nimport { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule.mjs';\nimport { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule.mjs';\nimport { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule.mjs'; // Spec Section: \"Fragment Name Uniqueness\"\n\nimport { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule.mjs'; // Spec Section: \"Input Object Field Uniqueness\"\n\nimport { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule.mjs'; // Spec Section: \"Operation Name Uniqueness\"\n\nimport { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule.mjs';\nimport { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule.mjs';\nimport { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule.mjs'; // Spec Section: \"Variable Uniqueness\"\n\nimport { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule.mjs'; // Spec Section: \"Value Type Correctness\"\n\nimport { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule.mjs'; // Spec Section: \"Variables are Input Types\"\n\nimport { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule.mjs'; // Spec Section: \"All Variable Usages Are Allowed\"\n\nimport { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule.mjs';\n\n/**\n * Technically these aren't part of the spec but they are strongly encouraged\n * validation rules.\n */\nexport const recommendedRules = Object.freeze([MaxIntrospectionDepthRule]);\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\n\nexport const specifiedRules = Object.freeze([\n ExecutableDefinitionsRule,\n UniqueOperationNamesRule,\n LoneAnonymousOperationRule,\n SingleFieldSubscriptionsRule,\n KnownTypeNamesRule,\n FragmentsOnCompositeTypesRule,\n VariablesAreInputTypesRule,\n ScalarLeafsRule,\n FieldsOnCorrectTypeRule,\n UniqueFragmentNamesRule,\n KnownFragmentNamesRule,\n NoUnusedFragmentsRule,\n PossibleFragmentSpreadsRule,\n NoFragmentCyclesRule,\n UniqueVariableNamesRule,\n NoUndefinedVariablesRule,\n NoUnusedVariablesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n KnownArgumentNamesRule,\n UniqueArgumentNamesRule,\n ValuesOfCorrectTypeRule,\n ProvidedRequiredArgumentsRule,\n VariablesInAllowedPositionRule,\n OverlappingFieldsCanBeMergedRule,\n UniqueInputFieldNamesRule,\n ...recommendedRules,\n]);\n/**\n * @internal\n */\n\nexport const specifiedSDLRules = Object.freeze([\n LoneSchemaDefinitionRule,\n UniqueOperationTypesRule,\n UniqueTypeNamesRule,\n UniqueEnumValueNamesRule,\n UniqueFieldDefinitionNamesRule,\n UniqueArgumentDefinitionNamesRule,\n UniqueDirectiveNamesRule,\n KnownTypeNamesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n PossibleTypeExtensionsRule,\n KnownArgumentNamesOnDirectivesRule,\n UniqueArgumentNamesRule,\n UniqueInputFieldNamesRule,\n ProvidedRequiredArgumentsOnDirectivesRule,\n]);\n","import { Kind } from '../language/kinds.mjs';\nimport { visit } from '../language/visitor.mjs';\nimport { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';\n\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nexport class ASTValidationContext {\n constructor(ast, onError) {\n this._ast = ast;\n this._fragments = undefined;\n this._fragmentSpreads = new Map();\n this._recursivelyReferencedFragments = new Map();\n this._onError = onError;\n }\n\n get [Symbol.toStringTag]() {\n return 'ASTValidationContext';\n }\n\n reportError(error) {\n this._onError(error);\n }\n\n getDocument() {\n return this._ast;\n }\n\n getFragment(name) {\n let fragments;\n\n if (this._fragments) {\n fragments = this._fragments;\n } else {\n fragments = Object.create(null);\n\n for (const defNode of this.getDocument().definitions) {\n if (defNode.kind === Kind.FRAGMENT_DEFINITION) {\n fragments[defNode.name.value] = defNode;\n }\n }\n\n this._fragments = fragments;\n }\n\n return fragments[name];\n }\n\n getFragmentSpreads(node) {\n let spreads = this._fragmentSpreads.get(node);\n\n if (!spreads) {\n spreads = [];\n const setsToVisit = [node];\n let set;\n\n while ((set = setsToVisit.pop())) {\n for (const selection of set.selections) {\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n spreads.push(selection);\n } else if (selection.selectionSet) {\n setsToVisit.push(selection.selectionSet);\n }\n }\n }\n\n this._fragmentSpreads.set(node, spreads);\n }\n\n return spreads;\n }\n\n getRecursivelyReferencedFragments(operation) {\n let fragments = this._recursivelyReferencedFragments.get(operation);\n\n if (!fragments) {\n fragments = [];\n const collectedNames = Object.create(null);\n const nodesToVisit = [operation.selectionSet];\n let node;\n\n while ((node = nodesToVisit.pop())) {\n for (const spread of this.getFragmentSpreads(node)) {\n const fragName = spread.name.value;\n\n if (collectedNames[fragName] !== true) {\n collectedNames[fragName] = true;\n const fragment = this.getFragment(fragName);\n\n if (fragment) {\n fragments.push(fragment);\n nodesToVisit.push(fragment.selectionSet);\n }\n }\n }\n }\n\n this._recursivelyReferencedFragments.set(operation, fragments);\n }\n\n return fragments;\n }\n}\nexport class SDLValidationContext extends ASTValidationContext {\n constructor(ast, schema, onError) {\n super(ast, onError);\n this._schema = schema;\n }\n\n get [Symbol.toStringTag]() {\n return 'SDLValidationContext';\n }\n\n getSchema() {\n return this._schema;\n }\n}\nexport class ValidationContext extends ASTValidationContext {\n constructor(schema, ast, typeInfo, onError) {\n super(ast, onError);\n this._schema = schema;\n this._typeInfo = typeInfo;\n this._variableUsages = new Map();\n this._recursiveVariableUsages = new Map();\n }\n\n get [Symbol.toStringTag]() {\n return 'ValidationContext';\n }\n\n getSchema() {\n return this._schema;\n }\n\n getVariableUsages(node) {\n let usages = this._variableUsages.get(node);\n\n if (!usages) {\n const newUsages = [];\n const typeInfo = new TypeInfo(this._schema);\n visit(\n node,\n visitWithTypeInfo(typeInfo, {\n VariableDefinition: () => false,\n\n Variable(variable) {\n newUsages.push({\n node: variable,\n type: typeInfo.getInputType(),\n defaultValue: typeInfo.getDefaultValue(),\n });\n },\n }),\n );\n usages = newUsages;\n\n this._variableUsages.set(node, usages);\n }\n\n return usages;\n }\n\n getRecursiveVariableUsages(operation) {\n let usages = this._recursiveVariableUsages.get(operation);\n\n if (!usages) {\n usages = this.getVariableUsages(operation);\n\n for (const frag of this.getRecursivelyReferencedFragments(operation)) {\n usages = usages.concat(this.getVariableUsages(frag));\n }\n\n this._recursiveVariableUsages.set(operation, usages);\n }\n\n return usages;\n }\n\n getType() {\n return this._typeInfo.getType();\n }\n\n getParentType() {\n return this._typeInfo.getParentType();\n }\n\n getInputType() {\n return this._typeInfo.getInputType();\n }\n\n getParentInputType() {\n return this._typeInfo.getParentInputType();\n }\n\n getFieldDef() {\n return this._typeInfo.getFieldDef();\n }\n\n getDirective() {\n return this._typeInfo.getDirective();\n }\n\n getArgument() {\n return this._typeInfo.getArgument();\n }\n\n getEnumValue() {\n return this._typeInfo.getEnumValue();\n }\n}\n","import { devAssert } from '../jsutils/devAssert.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { visit, visitInParallel } from '../language/visitor.mjs';\nimport { assertValidSchema } from '../type/validate.mjs';\nimport { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';\nimport { specifiedRules, specifiedSDLRules } from './specifiedRules.mjs';\nimport {\n SDLValidationContext,\n ValidationContext,\n} from './ValidationContext.mjs';\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Validate will stop validation after a `maxErrors` limit has been reached.\n * Attackers can send pathologically invalid queries to induce a DoS attack,\n * so by default `maxErrors` set to 100 errors.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\n\nexport function validate(\n schema,\n documentAST,\n rules = specifiedRules,\n options,\n /** @deprecated will be removed in 17.0.0 */\n typeInfo = new TypeInfo(schema),\n) {\n var _options$maxErrors;\n\n const maxErrors =\n (_options$maxErrors =\n options === null || options === void 0 ? void 0 : options.maxErrors) !==\n null && _options$maxErrors !== void 0\n ? _options$maxErrors\n : 100;\n documentAST || devAssert(false, 'Must provide document.'); // If the schema used for validation is invalid, throw an error.\n\n assertValidSchema(schema);\n const abortObj = Object.freeze({});\n const errors = [];\n const context = new ValidationContext(\n schema,\n documentAST,\n typeInfo,\n (error) => {\n if (errors.length >= maxErrors) {\n errors.push(\n new GraphQLError(\n 'Too many validation errors, error limit reached. Validation aborted.',\n ),\n ); // eslint-disable-next-line @typescript-eslint/no-throw-literal\n\n throw abortObj;\n }\n\n errors.push(error);\n },\n ); // This uses a specialized visitor which runs multiple visitors in parallel,\n // while maintaining the visitor skip and break API.\n\n const visitor = visitInParallel(rules.map((rule) => rule(context))); // Visit the whole document with each instance of all provided rules.\n\n try {\n visit(documentAST, visitWithTypeInfo(typeInfo, visitor));\n } catch (e) {\n if (e !== abortObj) {\n throw e;\n }\n }\n\n return errors;\n}\n/**\n * @internal\n */\n\nexport function validateSDL(\n documentAST,\n schemaToExtend,\n rules = specifiedSDLRules,\n) {\n const errors = [];\n const context = new SDLValidationContext(\n documentAST,\n schemaToExtend,\n (error) => {\n errors.push(error);\n },\n );\n const visitors = rules.map((rule) => rule(context));\n visit(documentAST, visitInParallel(visitors));\n return errors;\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDL(documentAST) {\n const errors = validateSDL(documentAST);\n\n if (errors.length !== 0) {\n throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n }\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDLExtension(documentAST, schema) {\n const errors = validateSDL(documentAST, schema);\n\n if (errors.length !== 0) {\n throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n }\n}\n","import { invariant } from '../../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../../error/GraphQLError.mjs';\nimport { getNamedType, isInputObjectType } from '../../../type/definition.mjs';\n\n/**\n * No deprecated\n *\n * A GraphQL document is only valid if all selected fields and all used enum values have not been\n * deprecated.\n *\n * Note: This rule is optional and is not part of the Validation section of the GraphQL\n * Specification. The main purpose of this rule is detection of deprecated usages and not\n * necessarily to forbid their use when querying a service.\n */\nexport function NoDeprecatedCustomRule(context) {\n return {\n Field(node) {\n const fieldDef = context.getFieldDef();\n const deprecationReason =\n fieldDef === null || fieldDef === void 0\n ? void 0\n : fieldDef.deprecationReason;\n\n if (fieldDef && deprecationReason != null) {\n const parentType = context.getParentType();\n parentType != null || invariant(false);\n context.reportError(\n new GraphQLError(\n `The field ${parentType.name}.${fieldDef.name} is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n Argument(node) {\n const argDef = context.getArgument();\n const deprecationReason =\n argDef === null || argDef === void 0\n ? void 0\n : argDef.deprecationReason;\n\n if (argDef && deprecationReason != null) {\n const directiveDef = context.getDirective();\n\n if (directiveDef != null) {\n context.reportError(\n new GraphQLError(\n `Directive \"@${directiveDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n } else {\n const parentType = context.getParentType();\n const fieldDef = context.getFieldDef();\n (parentType != null && fieldDef != null) || invariant(false);\n context.reportError(\n new GraphQLError(\n `Field \"${parentType.name}.${fieldDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n\n ObjectField(node) {\n const inputObjectDef = getNamedType(context.getParentInputType());\n\n if (isInputObjectType(inputObjectDef)) {\n const inputFieldDef = inputObjectDef.getFields()[node.name.value];\n const deprecationReason =\n inputFieldDef === null || inputFieldDef === void 0\n ? void 0\n : inputFieldDef.deprecationReason;\n\n if (deprecationReason != null) {\n context.reportError(\n new GraphQLError(\n `The input field ${inputObjectDef.name}.${inputFieldDef.name} is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n\n EnumValue(node) {\n const enumValueDef = context.getEnumValue();\n const deprecationReason =\n enumValueDef === null || enumValueDef === void 0\n ? void 0\n : enumValueDef.deprecationReason;\n\n if (enumValueDef && deprecationReason != null) {\n const enumTypeDef = getNamedType(context.getInputType());\n enumTypeDef != null || invariant(false);\n context.reportError(\n new GraphQLError(\n `The enum value \"${enumTypeDef.name}.${enumValueDef.name}\" is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n","import { specifiedRules, validate, NoUnusedFragmentsRule, KnownFragmentNamesRule, Kind, ExecutableDefinitionsRule, LoneSchemaDefinitionRule, UniqueOperationTypesRule, UniqueTypeNamesRule, UniqueEnumValueNamesRule, UniqueFieldDefinitionNamesRule, UniqueDirectiveNamesRule, KnownTypeNamesRule, KnownDirectivesRule, UniqueDirectivesPerLocationRule, PossibleTypeExtensionsRule, UniqueArgumentNamesRule, UniqueInputFieldNamesRule, UniqueVariableNamesRule, FragmentsOnCompositeTypesRule, ProvidedRequiredArgumentsRule, } from 'graphql';\nconst specifiedSDLRules = [\n LoneSchemaDefinitionRule,\n UniqueOperationTypesRule,\n UniqueTypeNamesRule,\n UniqueEnumValueNamesRule,\n UniqueFieldDefinitionNamesRule,\n UniqueDirectiveNamesRule,\n KnownTypeNamesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n PossibleTypeExtensionsRule,\n UniqueArgumentNamesRule,\n UniqueInputFieldNamesRule,\n UniqueVariableNamesRule,\n FragmentsOnCompositeTypesRule,\n ProvidedRequiredArgumentsRule,\n];\nexport function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, isSchemaDocument) {\n const rules = specifiedRules.filter(rule => {\n if (rule === NoUnusedFragmentsRule || rule === ExecutableDefinitionsRule) {\n return false;\n }\n if (isRelayCompatMode && rule === KnownFragmentNamesRule) {\n return false;\n }\n return true;\n });\n if (customRules) {\n Array.prototype.push.apply(rules, customRules);\n }\n if (isSchemaDocument) {\n Array.prototype.push.apply(rules, specifiedSDLRules);\n }\n const errors = validate(schema, ast, rules);\n return errors.filter(error => {\n if (error.message.includes('Unknown directive') && error.nodes) {\n const node = error.nodes[0];\n if (node && node.kind === Kind.DIRECTIVE) {\n const name = node.name.value;\n if (name === 'arguments' || name === 'argumentDefinitions') {\n return false;\n }\n }\n }\n return true;\n });\n}\n//# sourceMappingURL=validateWithCustomRules.js.map","import { GraphQLError, print, validate, NoDeprecatedCustomRule, parse, } from 'graphql';\nimport { CharacterStream, onlineParser } from '../parser';\nimport { Range, validateWithCustomRules, Position } from '../utils';\nexport const SEVERITY = {\n Error: 'Error',\n Warning: 'Warning',\n Information: 'Information',\n Hint: 'Hint',\n};\nexport const DIAGNOSTIC_SEVERITY = {\n [SEVERITY.Error]: 1,\n [SEVERITY.Warning]: 2,\n [SEVERITY.Information]: 3,\n [SEVERITY.Hint]: 4,\n};\nconst invariant = (condition, message) => {\n if (!condition) {\n throw new Error(message);\n }\n};\nexport function getDiagnostics(query, schema = null, customRules, isRelayCompatMode, externalFragments) {\n var _a, _b;\n let ast = null;\n let fragments = '';\n if (externalFragments) {\n fragments =\n typeof externalFragments === 'string'\n ? externalFragments\n : externalFragments.reduce((acc, node) => acc + print(node) + '\\n\\n', '');\n }\n const enhancedQuery = fragments ? `${query}\\n\\n${fragments}` : query;\n try {\n ast = parse(enhancedQuery);\n }\n catch (error) {\n if (error instanceof GraphQLError) {\n const range = getRange((_b = (_a = error.locations) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : { line: 0, column: 0 }, enhancedQuery);\n return [\n {\n severity: DIAGNOSTIC_SEVERITY.Error,\n message: error.message,\n source: 'GraphQL: Syntax',\n range,\n },\n ];\n }\n throw error;\n }\n return validateQuery(ast, schema, customRules, isRelayCompatMode);\n}\nexport function validateQuery(ast, schema = null, customRules, isRelayCompatMode) {\n if (!schema) {\n return [];\n }\n const validationErrorAnnotations = validateWithCustomRules(schema, ast, customRules, isRelayCompatMode).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Error, 'Validation'));\n const deprecationWarningAnnotations = validate(schema, ast, [\n NoDeprecatedCustomRule,\n ]).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Warning, 'Deprecation'));\n return validationErrorAnnotations.concat(deprecationWarningAnnotations);\n}\nfunction annotations(error, severity, type) {\n if (!error.nodes) {\n return [];\n }\n const highlightedNodes = [];\n for (const [i, node] of error.nodes.entries()) {\n const highlightNode = node.kind !== 'Variable' && 'name' in node && node.name !== undefined\n ? node.name\n : 'variable' in node && node.variable !== undefined\n ? node.variable\n : node;\n if (highlightNode) {\n invariant(error.locations, 'GraphQL validation error requires locations.');\n const loc = error.locations[i];\n const highlightLoc = getLocation(highlightNode);\n const end = loc.column + (highlightLoc.end - highlightLoc.start);\n highlightedNodes.push({\n source: `GraphQL: ${type}`,\n message: error.message,\n severity,\n range: new Range(new Position(loc.line - 1, loc.column - 1), new Position(loc.line - 1, end)),\n });\n }\n }\n return highlightedNodes;\n}\nexport function getRange(location, queryText) {\n const parser = onlineParser();\n const state = parser.startState();\n const lines = queryText.split('\\n');\n invariant(lines.length >= location.line, 'Query text must have more lines than where the error happened');\n let stream = null;\n for (let i = 0; i < location.line; i++) {\n stream = new CharacterStream(lines[i]);\n while (!stream.eol()) {\n const style = parser.token(stream, state);\n if (style === 'invalidchar') {\n break;\n }\n }\n }\n invariant(stream, 'Expected Parser stream to be available.');\n const line = location.line - 1;\n const start = stream.getStartOfToken();\n const end = stream.getCurrentPosition();\n return new Range(new Position(line, start), new Position(line, end));\n}\nfunction getLocation(node) {\n const typeCastedNode = node;\n const location = typeCastedNode.loc;\n invariant(location, 'Expected ASTNode to have a location.');\n return location;\n}\n//# sourceMappingURL=getDiagnostics.js.map","import CodeMirror from 'codemirror';\nimport { getDiagnostics } from 'graphql-language-service';\nconst SEVERITY = ['error', 'warning', 'information', 'hint'];\nconst TYPE = {\n 'GraphQL: Validation': 'validation',\n 'GraphQL: Deprecation': 'deprecation',\n 'GraphQL: Syntax': 'syntax',\n};\nCodeMirror.registerHelper('lint', 'graphql', (text, options) => {\n const { schema, validationRules, externalFragments } = options;\n const rawResults = getDiagnostics(text, schema, validationRules, undefined, externalFragments);\n const results = rawResults.map(error => ({\n message: error.message,\n severity: error.severity ? SEVERITY[error.severity - 1] : SEVERITY[0],\n type: error.source ? TYPE[error.source] : undefined,\n from: CodeMirror.Pos(error.range.start.line, error.range.start.character),\n to: CodeMirror.Pos(error.range.end.line, error.range.end.character),\n }));\n return results;\n});\n//# sourceMappingURL=lint.js.map"],"names":["isExecutableDefinitionNode","node","Kind","isTypeSystemDefinitionNode","isTypeDefinitionNode","isTypeSystemExtensionNode","isTypeExtensionNode","ExecutableDefinitionsRule","context","definition","defName","GraphQLError","FieldsOnCorrectTypeRule","type","schema","fieldName","suggestion","didYouMean","getSuggestedTypeNames","getSuggestedFieldNames","isAbstractType","suggestedTypes","usageCount","possibleType","possibleInterface","_usageCount$possibleI","typeA","typeB","usageCountDiff","isInterfaceType","naturalCompare","x","isObjectType","possibleFieldNames","suggestionList","FragmentsOnCompositeTypesRule","typeCondition","typeFromAST","isCompositeType","typeStr","print","KnownArgumentNamesRule","KnownArgumentNamesOnDirectivesRule","argNode","argDef","fieldDef","parentType","argName","knownArgsNames","arg","suggestions","directiveArgs","definedDirectives","specifiedDirectives","directive","astDefinitions","def","_def$arguments","argsNodes","directiveNode","directiveName","knownArgs","KnownDirectivesRule","locationsMap","name","_key","_parent","_path","ancestors","locations","candidateLocation","getDirectiveLocationForASTPath","appliedTo","invariant","getDirectiveLocationForOperation","DirectiveLocation","parentNode","inspect","operation","OperationTypeNode","KnownFragmentNamesRule","fragmentName","KnownTypeNamesRule","existingTypesMap","definedTypes","typeNames","_1","parent","_2","typeName","_ancestors$","definitionNode","isSDL","isSDLNode","standardTypeNames","specifiedScalarTypes","introspectionTypes","value","LoneAnonymousOperationRule","operationCount","MAX_LISTS_DEPTH","MaxIntrospectionDepthRule","checkDepth","visitedFragments","depth","fragment","child","NoFragmentCyclesRule","visitedFrags","spreadPath","spreadPathIndexByName","detectCycleRecursive","spreadNodes","spreadNode","spreadName","cycleIndex","spreadFragment","cyclePath","viaPath","s","NoUndefinedVariablesRule","variableNameDefined","usages","varName","NoUnusedFragmentsRule","operationDefs","fragmentDefs","fragmentNameUsed","fragmentDef","fragName","NoUnusedVariablesRule","variableDefs","variableNameUsed","variableDef","variableName","sortValueNode","valueNode","sortFields","fields","fieldNode","fieldA","fieldB","reasonMessage","reason","responseName","subReason","OverlappingFieldsCanBeMergedRule","comparedFieldsAndFragmentPairs","OrderedPairSet","comparedFragmentPairs","PairSet","cachedFieldsAndFragmentNames","selectionSet","conflicts","findConflictsWithinSelectionSet","fields1","fields2","reasonMsg","fieldMap","fragmentNames","getFieldsAndFragmentNames","collectConflictsWithin","i","collectConflictsBetweenFieldsAndFragment","j","collectConflictsBetweenFragments","areMutuallyExclusive","fieldMap2","referencedFragmentNames","getReferencedFieldsAndFragmentNames","collectConflictsBetween","referencedFragmentName","fragmentName1","fragmentName2","fragment1","fragment2","fieldMap1","referencedFragmentNames1","referencedFragmentNames2","referencedFragmentName2","referencedFragmentName1","findConflictsBetweenSubSelectionSets","parentType1","selectionSet1","parentType2","selectionSet2","fragmentNames1","fragmentNames2","conflict","findConflict","parentFieldsAreMutuallyExclusive","field1","field2","node1","def1","node2","def2","name1","name2","sameArguments","type1","type2","doTypesConflict","getNamedType","subfieldConflicts","args1","args2","values2","arg1","value1","value2","stringifyValue","isListType","isNonNullType","isLeafType","cached","nodeAndDefs","_collectFieldsAndFragmentNames","result","fragmentType","selection","inlineFragmentType","a","b","weaklyPresent","_this$_data$get","map","PossibleFragmentSpreadsRule","fragType","doTypesOverlap","parentTypeStr","fragTypeStr","getFragmentType","frag","ProvidedRequiredArgumentsRule","ProvidedRequiredArgumentsOnDirectivesRule","_fieldNode$arguments","providedArgs","isRequiredArgument","argTypeStr","_schema$getDirectives","requiredArgsMap","keyMap","argNodes","isRequiredArgumentNode","requiredArgs","_directiveNode$argume","argNodeMap","argType","isType","ScalarLeafsRule","getArgumentValues","variableValues","_node$arguments","coercedValues","argumentNodes","argumentNode","isNull","hasOwnProperty","coercedValue","valueFromAST","getDirectiveValues","directiveDef","_node$directives","obj","prop","collectFields","fragments","runtimeType","collectFieldsImpl","visitedFragmentNames","shouldIncludeNode","getFieldEntryKey","fieldList","doesFragmentConditionMatch","skip","GraphQLSkipDirective","include","GraphQLIncludeDirective","typeConditionNode","conditionalType","SingleFieldSubscriptionsRule","subscriptionType","operationName","document","extraFieldSelections","fieldNodes","groupBy","list","keyFn","item","key","group","UniqueArgumentNamesRule","checkArgUniqueness","_parentNode$arguments","seenArgs","UniqueDirectivesPerLocationRule","uniqueDirectiveMap","schemaDirectives","typeDirectivesMap","seenDirectives","UniqueFragmentNamesRule","knownFragmentNames","UniqueInputFieldNamesRule","knownNameStack","knownNames","prevKnownNames","UniqueOperationNamesRule","knownOperationNames","UniqueVariableNamesRule","operationNode","_operationNode$variab","variableDefinitions","seenVariableDefinitions","variableNodes","ValuesOfCorrectTypeRule","getNullableType","isValidValueNode","isInputObjectType","fieldNodeMap","field","isRequiredInputField","validateOneOfInputObject","locationType","error","_fieldNodeMap$keys$","keys","isNullLiteral","isVariable","VariablesAreInputTypesRule","isInputType","VariablesInAllowedPositionRule","varDefMap","defaultValue","varDef","varType","allowedVariableUsage","varTypeStr","varDefaultValue","locationDefaultValue","nullableLocationType","isTypeSubTypeOf","recommendedRules","specifiedRules","ASTValidationContext","ast","onError","defNode","spreads","setsToVisit","set","collectedNames","nodesToVisit","spread","ValidationContext","typeInfo","newUsages","TypeInfo","visit","visitWithTypeInfo","variable","validate","documentAST","rules","options","_options$maxErrors","maxErrors","devAssert","assertValidSchema","abortObj","errors","visitor","visitInParallel","rule","e","NoDeprecatedCustomRule","deprecationReason","inputObjectDef","inputFieldDef","enumValueDef","enumTypeDef","validateWithCustomRules","customRules","isRelayCompatMode","isSchemaDocument","SEVERITY","DIAGNOSTIC_SEVERITY","condition","message","getDiagnostics","query","externalFragments","_a","_b","acc","enhancedQuery","parse","range","getRange","validateQuery","validationErrorAnnotations","annotations","deprecationWarningAnnotations","severity","highlightedNodes","highlightNode","loc","highlightLoc","getLocation","end","Range","Position","location","queryText","parser","onlineParser","state","lines","stream","CharacterStream","line","start","TYPE","CodeMirror","text","validationRules"],"mappings":"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","x_google_ignoreList":[0,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,31,32,33,34,35,36,37,38]}
1
+ {"version":3,"file":"lint-B407pjh7.js","sources":["../../../../../node_modules/graphql/language/predicates.mjs","../../../../../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.mjs","../../../../../node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.mjs","../../../../../node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownArgumentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownDirectivesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownFragmentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/KnownTypeNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/LoneAnonymousOperationRule.mjs","../../../../../node_modules/graphql/validation/rules/MaxIntrospectionDepthRule.mjs","../../../../../node_modules/graphql/validation/rules/NoFragmentCyclesRule.mjs","../../../../../node_modules/graphql/validation/rules/NoUndefinedVariablesRule.mjs","../../../../../node_modules/graphql/validation/rules/NoUnusedFragmentsRule.mjs","../../../../../node_modules/graphql/validation/rules/NoUnusedVariablesRule.mjs","../../../../../node_modules/graphql/utilities/sortValueNode.mjs","../../../../../node_modules/graphql/validation/rules/OverlappingFieldsCanBeMergedRule.mjs","../../../../../node_modules/graphql/validation/rules/PossibleFragmentSpreadsRule.mjs","../../../../../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.mjs","../../../../../node_modules/graphql/validation/rules/ScalarLeafsRule.mjs","../../../../../node_modules/graphql/execution/values.mjs","../../../../../node_modules/graphql/execution/collectFields.mjs","../../../../../node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.mjs","../../../../../node_modules/graphql/jsutils/groupBy.mjs","../../../../../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueFragmentNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueOperationNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/UniqueVariableNamesRule.mjs","../../../../../node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.mjs","../../../../../node_modules/graphql/validation/rules/VariablesAreInputTypesRule.mjs","../../../../../node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.mjs","../../../../../node_modules/graphql/validation/specifiedRules.mjs","../../../../../node_modules/graphql/validation/ValidationContext.mjs","../../../../../node_modules/graphql/validation/validate.mjs","../../../../../node_modules/graphql/validation/rules/custom/NoDeprecatedCustomRule.mjs","../../../../../node_modules/graphql-language-service/esm/utils/validateWithCustomRules.js","../../../../../node_modules/graphql-language-service/esm/interface/getDiagnostics.js","../../../../../node_modules/codemirror-graphql/esm/lint.js"],"sourcesContent":["import { Kind } from './kinds.mjs';\nexport function isDefinitionNode(node) {\n return (\n isExecutableDefinitionNode(node) ||\n isTypeSystemDefinitionNode(node) ||\n isTypeSystemExtensionNode(node)\n );\n}\nexport function isExecutableDefinitionNode(node) {\n return (\n node.kind === Kind.OPERATION_DEFINITION ||\n node.kind === Kind.FRAGMENT_DEFINITION\n );\n}\nexport function isSelectionNode(node) {\n return (\n node.kind === Kind.FIELD ||\n node.kind === Kind.FRAGMENT_SPREAD ||\n node.kind === Kind.INLINE_FRAGMENT\n );\n}\nexport function isValueNode(node) {\n return (\n node.kind === Kind.VARIABLE ||\n node.kind === Kind.INT ||\n node.kind === Kind.FLOAT ||\n node.kind === Kind.STRING ||\n node.kind === Kind.BOOLEAN ||\n node.kind === Kind.NULL ||\n node.kind === Kind.ENUM ||\n node.kind === Kind.LIST ||\n node.kind === Kind.OBJECT\n );\n}\nexport function isConstValueNode(node) {\n return (\n isValueNode(node) &&\n (node.kind === Kind.LIST\n ? node.values.some(isConstValueNode)\n : node.kind === Kind.OBJECT\n ? node.fields.some((field) => isConstValueNode(field.value))\n : node.kind !== Kind.VARIABLE)\n );\n}\nexport function isTypeNode(node) {\n return (\n node.kind === Kind.NAMED_TYPE ||\n node.kind === Kind.LIST_TYPE ||\n node.kind === Kind.NON_NULL_TYPE\n );\n}\nexport function isTypeSystemDefinitionNode(node) {\n return (\n node.kind === Kind.SCHEMA_DEFINITION ||\n isTypeDefinitionNode(node) ||\n node.kind === Kind.DIRECTIVE_DEFINITION\n );\n}\nexport function isTypeDefinitionNode(node) {\n return (\n node.kind === Kind.SCALAR_TYPE_DEFINITION ||\n node.kind === Kind.OBJECT_TYPE_DEFINITION ||\n node.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n node.kind === Kind.UNION_TYPE_DEFINITION ||\n node.kind === Kind.ENUM_TYPE_DEFINITION ||\n node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n );\n}\nexport function isTypeSystemExtensionNode(node) {\n return node.kind === Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node);\n}\nexport function isTypeExtensionNode(node) {\n return (\n node.kind === Kind.SCALAR_TYPE_EXTENSION ||\n node.kind === Kind.OBJECT_TYPE_EXTENSION ||\n node.kind === Kind.INTERFACE_TYPE_EXTENSION ||\n node.kind === Kind.UNION_TYPE_EXTENSION ||\n node.kind === Kind.ENUM_TYPE_EXTENSION ||\n node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION\n );\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isExecutableDefinitionNode } from '../../language/predicates.mjs';\n\n/**\n * Executable definitions\n *\n * A GraphQL document is only valid for execution if all definitions are either\n * operation or fragment definitions.\n *\n * See https://spec.graphql.org/draft/#sec-Executable-Definitions\n */\nexport function ExecutableDefinitionsRule(context) {\n return {\n Document(node) {\n for (const definition of node.definitions) {\n if (!isExecutableDefinitionNode(definition)) {\n const defName =\n definition.kind === Kind.SCHEMA_DEFINITION ||\n definition.kind === Kind.SCHEMA_EXTENSION\n ? 'schema'\n : '\"' + definition.name.value + '\"';\n context.reportError(\n new GraphQLError(`The ${defName} definition is not executable.`, {\n nodes: definition,\n }),\n );\n }\n }\n\n return false;\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { naturalCompare } from '../../jsutils/naturalCompare.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n isAbstractType,\n isInterfaceType,\n isObjectType,\n} from '../../type/definition.mjs';\n\n/**\n * Fields on correct type\n *\n * A GraphQL document is only valid if all fields selected are defined by the\n * parent type, or are an allowed meta field such as __typename.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selections\n */\nexport function FieldsOnCorrectTypeRule(context) {\n return {\n Field(node) {\n const type = context.getParentType();\n\n if (type) {\n const fieldDef = context.getFieldDef();\n\n if (!fieldDef) {\n // This field doesn't exist, lets look for suggestions.\n const schema = context.getSchema();\n const fieldName = node.name.value; // First determine if there are any suggested types to condition on.\n\n let suggestion = didYouMean(\n 'to use an inline fragment on',\n getSuggestedTypeNames(schema, type, fieldName),\n ); // If there are no suggested types, then perhaps this was a typo?\n\n if (suggestion === '') {\n suggestion = didYouMean(getSuggestedFieldNames(type, fieldName));\n } // Report an error, including helpful suggestions.\n\n context.reportError(\n new GraphQLError(\n `Cannot query field \"${fieldName}\" on type \"${type.name}\".` +\n suggestion,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n };\n}\n/**\n * Go through all of the implementations of type, as well as the interfaces that\n * they implement. If any of those types include the provided field, suggest them,\n * sorted by how often the type is referenced.\n */\n\nfunction getSuggestedTypeNames(schema, type, fieldName) {\n if (!isAbstractType(type)) {\n // Must be an Object type, which does not have possible fields.\n return [];\n }\n\n const suggestedTypes = new Set();\n const usageCount = Object.create(null);\n\n for (const possibleType of schema.getPossibleTypes(type)) {\n if (!possibleType.getFields()[fieldName]) {\n continue;\n } // This object type defines this field.\n\n suggestedTypes.add(possibleType);\n usageCount[possibleType.name] = 1;\n\n for (const possibleInterface of possibleType.getInterfaces()) {\n var _usageCount$possibleI;\n\n if (!possibleInterface.getFields()[fieldName]) {\n continue;\n } // This interface type defines this field.\n\n suggestedTypes.add(possibleInterface);\n usageCount[possibleInterface.name] =\n ((_usageCount$possibleI = usageCount[possibleInterface.name]) !==\n null && _usageCount$possibleI !== void 0\n ? _usageCount$possibleI\n : 0) + 1;\n }\n }\n\n return [...suggestedTypes]\n .sort((typeA, typeB) => {\n // Suggest both interface and object types based on how common they are.\n const usageCountDiff = usageCount[typeB.name] - usageCount[typeA.name];\n\n if (usageCountDiff !== 0) {\n return usageCountDiff;\n } // Suggest super types first followed by subtypes\n\n if (isInterfaceType(typeA) && schema.isSubType(typeA, typeB)) {\n return -1;\n }\n\n if (isInterfaceType(typeB) && schema.isSubType(typeB, typeA)) {\n return 1;\n }\n\n return naturalCompare(typeA.name, typeB.name);\n })\n .map((x) => x.name);\n}\n/**\n * For the field name provided, determine if there are any similar field names\n * that may be the result of a typo.\n */\n\nfunction getSuggestedFieldNames(type, fieldName) {\n if (isObjectType(type) || isInterfaceType(type)) {\n const possibleFieldNames = Object.keys(type.getFields());\n return suggestionList(fieldName, possibleFieldNames);\n } // Otherwise, must be a Union type, which does not define fields.\n\n return [];\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isCompositeType } from '../../type/definition.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Fragments on composite type\n *\n * Fragments use a type condition to determine if they apply, since fragments\n * can only be spread into a composite type (object, interface, or union), the\n * type condition must also be a composite type.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-On-Composite-Types\n */\nexport function FragmentsOnCompositeTypesRule(context) {\n return {\n InlineFragment(node) {\n const typeCondition = node.typeCondition;\n\n if (typeCondition) {\n const type = typeFromAST(context.getSchema(), typeCondition);\n\n if (type && !isCompositeType(type)) {\n const typeStr = print(typeCondition);\n context.reportError(\n new GraphQLError(\n `Fragment cannot condition on non composite type \"${typeStr}\".`,\n {\n nodes: typeCondition,\n },\n ),\n );\n }\n }\n },\n\n FragmentDefinition(node) {\n const type = typeFromAST(context.getSchema(), node.typeCondition);\n\n if (type && !isCompositeType(type)) {\n const typeStr = print(node.typeCondition);\n context.reportError(\n new GraphQLError(\n `Fragment \"${node.name.value}\" cannot condition on non composite type \"${typeStr}\".`,\n {\n nodes: node.typeCondition,\n },\n ),\n );\n }\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n * See https://spec.graphql.org/draft/#sec-Directives-Are-In-Valid-Locations\n */\nexport function KnownArgumentNamesRule(context) {\n return {\n // eslint-disable-next-line new-cap\n ...KnownArgumentNamesOnDirectivesRule(context),\n\n Argument(argNode) {\n const argDef = context.getArgument();\n const fieldDef = context.getFieldDef();\n const parentType = context.getParentType();\n\n if (!argDef && fieldDef && parentType) {\n const argName = argNode.name.value;\n const knownArgsNames = fieldDef.args.map((arg) => arg.name);\n const suggestions = suggestionList(argName, knownArgsNames);\n context.reportError(\n new GraphQLError(\n `Unknown argument \"${argName}\" on field \"${parentType.name}.${fieldDef.name}\".` +\n didYouMean(suggestions),\n {\n nodes: argNode,\n },\n ),\n );\n }\n },\n };\n}\n/**\n * @internal\n */\n\nexport function KnownArgumentNamesOnDirectivesRule(context) {\n const directiveArgs = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives = schema\n ? schema.getDirectives()\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n directiveArgs[directive.name] = directive.args.map((arg) => arg.name);\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n var _def$arguments;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argsNodes =\n (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n ? _def$arguments\n : [];\n directiveArgs[def.name.value] = argsNodes.map((arg) => arg.name.value);\n }\n }\n\n return {\n Directive(directiveNode) {\n const directiveName = directiveNode.name.value;\n const knownArgs = directiveArgs[directiveName];\n\n if (directiveNode.arguments && knownArgs) {\n for (const argNode of directiveNode.arguments) {\n const argName = argNode.name.value;\n\n if (!knownArgs.includes(argName)) {\n const suggestions = suggestionList(argName, knownArgs);\n context.reportError(\n new GraphQLError(\n `Unknown argument \"${argName}\" on directive \"@${directiveName}\".` +\n didYouMean(suggestions),\n {\n nodes: argNode,\n },\n ),\n );\n }\n }\n }\n\n return false;\n },\n };\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { invariant } from '../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { OperationTypeNode } from '../../language/ast.mjs';\nimport { DirectiveLocation } from '../../language/directiveLocation.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Defined\n */\nexport function KnownDirectivesRule(context) {\n const locationsMap = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives = schema\n ? schema.getDirectives()\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n locationsMap[directive.name] = directive.locations;\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n locationsMap[def.name.value] = def.locations.map((name) => name.value);\n }\n }\n\n return {\n Directive(node, _key, _parent, _path, ancestors) {\n const name = node.name.value;\n const locations = locationsMap[name];\n\n if (!locations) {\n context.reportError(\n new GraphQLError(`Unknown directive \"@${name}\".`, {\n nodes: node,\n }),\n );\n return;\n }\n\n const candidateLocation = getDirectiveLocationForASTPath(ancestors);\n\n if (candidateLocation && !locations.includes(candidateLocation)) {\n context.reportError(\n new GraphQLError(\n `Directive \"@${name}\" may not be used on ${candidateLocation}.`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n\nfunction getDirectiveLocationForASTPath(ancestors) {\n const appliedTo = ancestors[ancestors.length - 1];\n 'kind' in appliedTo || invariant(false);\n\n switch (appliedTo.kind) {\n case Kind.OPERATION_DEFINITION:\n return getDirectiveLocationForOperation(appliedTo.operation);\n\n case Kind.FIELD:\n return DirectiveLocation.FIELD;\n\n case Kind.FRAGMENT_SPREAD:\n return DirectiveLocation.FRAGMENT_SPREAD;\n\n case Kind.INLINE_FRAGMENT:\n return DirectiveLocation.INLINE_FRAGMENT;\n\n case Kind.FRAGMENT_DEFINITION:\n return DirectiveLocation.FRAGMENT_DEFINITION;\n\n case Kind.VARIABLE_DEFINITION:\n return DirectiveLocation.VARIABLE_DEFINITION;\n\n case Kind.SCHEMA_DEFINITION:\n case Kind.SCHEMA_EXTENSION:\n return DirectiveLocation.SCHEMA;\n\n case Kind.SCALAR_TYPE_DEFINITION:\n case Kind.SCALAR_TYPE_EXTENSION:\n return DirectiveLocation.SCALAR;\n\n case Kind.OBJECT_TYPE_DEFINITION:\n case Kind.OBJECT_TYPE_EXTENSION:\n return DirectiveLocation.OBJECT;\n\n case Kind.FIELD_DEFINITION:\n return DirectiveLocation.FIELD_DEFINITION;\n\n case Kind.INTERFACE_TYPE_DEFINITION:\n case Kind.INTERFACE_TYPE_EXTENSION:\n return DirectiveLocation.INTERFACE;\n\n case Kind.UNION_TYPE_DEFINITION:\n case Kind.UNION_TYPE_EXTENSION:\n return DirectiveLocation.UNION;\n\n case Kind.ENUM_TYPE_DEFINITION:\n case Kind.ENUM_TYPE_EXTENSION:\n return DirectiveLocation.ENUM;\n\n case Kind.ENUM_VALUE_DEFINITION:\n return DirectiveLocation.ENUM_VALUE;\n\n case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n return DirectiveLocation.INPUT_OBJECT;\n\n case Kind.INPUT_VALUE_DEFINITION: {\n const parentNode = ancestors[ancestors.length - 3];\n 'kind' in parentNode || invariant(false);\n return parentNode.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n ? DirectiveLocation.INPUT_FIELD_DEFINITION\n : DirectiveLocation.ARGUMENT_DEFINITION;\n }\n // Not reachable, all possible types have been considered.\n\n /* c8 ignore next */\n\n default:\n false || invariant(false, 'Unexpected kind: ' + inspect(appliedTo.kind));\n }\n}\n\nfunction getDirectiveLocationForOperation(operation) {\n switch (operation) {\n case OperationTypeNode.QUERY:\n return DirectiveLocation.QUERY;\n\n case OperationTypeNode.MUTATION:\n return DirectiveLocation.MUTATION;\n\n case OperationTypeNode.SUBSCRIPTION:\n return DirectiveLocation.SUBSCRIPTION;\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Known fragment names\n *\n * A GraphQL document is only valid if all `...Fragment` fragment spreads refer\n * to fragments defined in the same document.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spread-target-defined\n */\nexport function KnownFragmentNamesRule(context) {\n return {\n FragmentSpread(node) {\n const fragmentName = node.name.value;\n const fragment = context.getFragment(fragmentName);\n\n if (!fragment) {\n context.reportError(\n new GraphQLError(`Unknown fragment \"${fragmentName}\".`, {\n nodes: node.name,\n }),\n );\n }\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n isTypeDefinitionNode,\n isTypeSystemDefinitionNode,\n isTypeSystemExtensionNode,\n} from '../../language/predicates.mjs';\nimport { introspectionTypes } from '../../type/introspection.mjs';\nimport { specifiedScalarTypes } from '../../type/scalars.mjs';\n\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Spread-Type-Existence\n */\nexport function KnownTypeNamesRule(context) {\n const schema = context.getSchema();\n const existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);\n const definedTypes = Object.create(null);\n\n for (const def of context.getDocument().definitions) {\n if (isTypeDefinitionNode(def)) {\n definedTypes[def.name.value] = true;\n }\n }\n\n const typeNames = [\n ...Object.keys(existingTypesMap),\n ...Object.keys(definedTypes),\n ];\n return {\n NamedType(node, _1, parent, _2, ancestors) {\n const typeName = node.name.value;\n\n if (!existingTypesMap[typeName] && !definedTypes[typeName]) {\n var _ancestors$;\n\n const definitionNode =\n (_ancestors$ = ancestors[2]) !== null && _ancestors$ !== void 0\n ? _ancestors$\n : parent;\n const isSDL = definitionNode != null && isSDLNode(definitionNode);\n\n if (isSDL && standardTypeNames.includes(typeName)) {\n return;\n }\n\n const suggestedTypes = suggestionList(\n typeName,\n isSDL ? standardTypeNames.concat(typeNames) : typeNames,\n );\n context.reportError(\n new GraphQLError(\n `Unknown type \"${typeName}\".` + didYouMean(suggestedTypes),\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\nconst standardTypeNames = [...specifiedScalarTypes, ...introspectionTypes].map(\n (type) => type.name,\n);\n\nfunction isSDLNode(value) {\n return (\n 'kind' in value &&\n (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value))\n );\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\n\n/**\n * Lone anonymous operation\n *\n * A GraphQL document is only valid if when it contains an anonymous operation\n * (the query short-hand) that it contains only that one operation definition.\n *\n * See https://spec.graphql.org/draft/#sec-Lone-Anonymous-Operation\n */\nexport function LoneAnonymousOperationRule(context) {\n let operationCount = 0;\n return {\n Document(node) {\n operationCount = node.definitions.filter(\n (definition) => definition.kind === Kind.OPERATION_DEFINITION,\n ).length;\n },\n\n OperationDefinition(node) {\n if (!node.name && operationCount > 1) {\n context.reportError(\n new GraphQLError(\n 'This anonymous operation must be the only defined operation.',\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nconst MAX_LISTS_DEPTH = 3;\nexport function MaxIntrospectionDepthRule(context) {\n /**\n * Counts the depth of list fields in \"__Type\" recursively and\n * returns `true` if the limit has been reached.\n */\n function checkDepth(node, visitedFragments = Object.create(null), depth = 0) {\n if (node.kind === Kind.FRAGMENT_SPREAD) {\n const fragmentName = node.name.value;\n\n if (visitedFragments[fragmentName] === true) {\n // Fragment cycles are handled by `NoFragmentCyclesRule`.\n return false;\n }\n\n const fragment = context.getFragment(fragmentName);\n\n if (!fragment) {\n // Missing fragments checks are handled by `KnownFragmentNamesRule`.\n return false;\n } // Rather than following an immutable programming pattern which has\n // significant memory and garbage collection overhead, we've opted to\n // take a mutable approach for efficiency's sake. Importantly visiting a\n // fragment twice is fine, so long as you don't do one visit inside the\n // other.\n\n try {\n visitedFragments[fragmentName] = true;\n return checkDepth(fragment, visitedFragments, depth);\n } finally {\n visitedFragments[fragmentName] = undefined;\n }\n }\n\n if (\n node.kind === Kind.FIELD && // check all introspection lists\n (node.name.value === 'fields' ||\n node.name.value === 'interfaces' ||\n node.name.value === 'possibleTypes' ||\n node.name.value === 'inputFields')\n ) {\n // eslint-disable-next-line no-param-reassign\n depth++;\n\n if (depth >= MAX_LISTS_DEPTH) {\n return true;\n }\n } // handles fields and inline fragments\n\n if ('selectionSet' in node && node.selectionSet) {\n for (const child of node.selectionSet.selections) {\n if (checkDepth(child, visitedFragments, depth)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n return {\n Field(node) {\n if (node.name.value === '__schema' || node.name.value === '__type') {\n if (checkDepth(node)) {\n context.reportError(\n new GraphQLError('Maximum introspection depth exceeded', {\n nodes: [node],\n }),\n );\n return false;\n }\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No fragment cycles\n *\n * The graph of fragment spreads must not form any cycles including spreading itself.\n * Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles\n */\nexport function NoFragmentCyclesRule(context) {\n // Tracks already visited fragments to maintain O(N) and to ensure that cycles\n // are not redundantly reported.\n const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors\n\n const spreadPath = []; // Position in the spread path\n\n const spreadPathIndexByName = Object.create(null);\n return {\n OperationDefinition: () => false,\n\n FragmentDefinition(node) {\n detectCycleRecursive(node);\n return false;\n },\n }; // This does a straight-forward DFS to find cycles.\n // It does not terminate when a cycle was found but continues to explore\n // the graph to find all possible cycles.\n\n function detectCycleRecursive(fragment) {\n if (visitedFrags[fragment.name.value]) {\n return;\n }\n\n const fragmentName = fragment.name.value;\n visitedFrags[fragmentName] = true;\n const spreadNodes = context.getFragmentSpreads(fragment.selectionSet);\n\n if (spreadNodes.length === 0) {\n return;\n }\n\n spreadPathIndexByName[fragmentName] = spreadPath.length;\n\n for (const spreadNode of spreadNodes) {\n const spreadName = spreadNode.name.value;\n const cycleIndex = spreadPathIndexByName[spreadName];\n spreadPath.push(spreadNode);\n\n if (cycleIndex === undefined) {\n const spreadFragment = context.getFragment(spreadName);\n\n if (spreadFragment) {\n detectCycleRecursive(spreadFragment);\n }\n } else {\n const cyclePath = spreadPath.slice(cycleIndex);\n const viaPath = cyclePath\n .slice(0, -1)\n .map((s) => '\"' + s.name.value + '\"')\n .join(', ');\n context.reportError(\n new GraphQLError(\n `Cannot spread fragment \"${spreadName}\" within itself` +\n (viaPath !== '' ? ` via ${viaPath}.` : '.'),\n {\n nodes: cyclePath,\n },\n ),\n );\n }\n\n spreadPath.pop();\n }\n\n spreadPathIndexByName[fragmentName] = undefined;\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No undefined variables\n *\n * A GraphQL operation is only valid if all variables encountered, both directly\n * and via fragment spreads, are defined by that operation.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined\n */\nexport function NoUndefinedVariablesRule(context) {\n let variableNameDefined = Object.create(null);\n return {\n OperationDefinition: {\n enter() {\n variableNameDefined = Object.create(null);\n },\n\n leave(operation) {\n const usages = context.getRecursiveVariableUsages(operation);\n\n for (const { node } of usages) {\n const varName = node.name.value;\n\n if (variableNameDefined[varName] !== true) {\n context.reportError(\n new GraphQLError(\n operation.name\n ? `Variable \"$${varName}\" is not defined by operation \"${operation.name.value}\".`\n : `Variable \"$${varName}\" is not defined.`,\n {\n nodes: [node, operation],\n },\n ),\n );\n }\n }\n },\n },\n\n VariableDefinition(node) {\n variableNameDefined[node.variable.name.value] = true;\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No unused fragments\n *\n * A GraphQL document is only valid if all fragment definitions are spread\n * within operations, or spread within other fragments spread within operations.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used\n */\nexport function NoUnusedFragmentsRule(context) {\n const operationDefs = [];\n const fragmentDefs = [];\n return {\n OperationDefinition(node) {\n operationDefs.push(node);\n return false;\n },\n\n FragmentDefinition(node) {\n fragmentDefs.push(node);\n return false;\n },\n\n Document: {\n leave() {\n const fragmentNameUsed = Object.create(null);\n\n for (const operation of operationDefs) {\n for (const fragment of context.getRecursivelyReferencedFragments(\n operation,\n )) {\n fragmentNameUsed[fragment.name.value] = true;\n }\n }\n\n for (const fragmentDef of fragmentDefs) {\n const fragName = fragmentDef.name.value;\n\n if (fragmentNameUsed[fragName] !== true) {\n context.reportError(\n new GraphQLError(`Fragment \"${fragName}\" is never used.`, {\n nodes: fragmentDef,\n }),\n );\n }\n }\n },\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No unused variables\n *\n * A GraphQL operation is only valid if all variables defined by an operation\n * are used, either directly or within a spread fragment.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variables-Used\n */\nexport function NoUnusedVariablesRule(context) {\n let variableDefs = [];\n return {\n OperationDefinition: {\n enter() {\n variableDefs = [];\n },\n\n leave(operation) {\n const variableNameUsed = Object.create(null);\n const usages = context.getRecursiveVariableUsages(operation);\n\n for (const { node } of usages) {\n variableNameUsed[node.name.value] = true;\n }\n\n for (const variableDef of variableDefs) {\n const variableName = variableDef.variable.name.value;\n\n if (variableNameUsed[variableName] !== true) {\n context.reportError(\n new GraphQLError(\n operation.name\n ? `Variable \"$${variableName}\" is never used in operation \"${operation.name.value}\".`\n : `Variable \"$${variableName}\" is never used.`,\n {\n nodes: variableDef,\n },\n ),\n );\n }\n }\n },\n },\n\n VariableDefinition(def) {\n variableDefs.push(def);\n },\n };\n}\n","import { naturalCompare } from '../jsutils/naturalCompare.mjs';\nimport { Kind } from '../language/kinds.mjs';\n/**\n * Sort ValueNode.\n *\n * This function returns a sorted copy of the given ValueNode.\n *\n * @internal\n */\n\nexport function sortValueNode(valueNode) {\n switch (valueNode.kind) {\n case Kind.OBJECT:\n return { ...valueNode, fields: sortFields(valueNode.fields) };\n\n case Kind.LIST:\n return { ...valueNode, values: valueNode.values.map(sortValueNode) };\n\n case Kind.INT:\n case Kind.FLOAT:\n case Kind.STRING:\n case Kind.BOOLEAN:\n case Kind.NULL:\n case Kind.ENUM:\n case Kind.VARIABLE:\n return valueNode;\n }\n}\n\nfunction sortFields(fields) {\n return fields\n .map((fieldNode) => ({\n ...fieldNode,\n value: sortValueNode(fieldNode.value),\n }))\n .sort((fieldA, fieldB) =>\n naturalCompare(fieldA.name.value, fieldB.name.value),\n );\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport {\n getNamedType,\n isInterfaceType,\n isLeafType,\n isListType,\n isNonNullType,\n isObjectType,\n} from '../../type/definition.mjs';\nimport { sortValueNode } from '../../utilities/sortValueNode.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\nfunction reasonMessage(reason) {\n if (Array.isArray(reason)) {\n return reason\n .map(\n ([responseName, subReason]) =>\n `subfields \"${responseName}\" conflict because ` +\n reasonMessage(subReason),\n )\n .join(' and ');\n }\n\n return reason;\n}\n/**\n * Overlapping fields can be merged\n *\n * A selection set is only valid if all fields (including spreading any\n * fragments) either correspond to distinct response names or can be merged\n * without ambiguity.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging\n */\n\nexport function OverlappingFieldsCanBeMergedRule(context) {\n // A memoization for when fields and a fragment or two fragments are compared\n // \"between\" each other for conflicts. Comparisons made be made many times,\n // so memoizing this can dramatically improve the performance of this validator.\n const comparedFieldsAndFragmentPairs = new OrderedPairSet();\n const comparedFragmentPairs = new PairSet(); // A cache for the \"field map\" and list of fragment names found in any given\n // selection set. Selection sets may be asked for this information multiple\n // times, so this improves the performance of this validator.\n\n const cachedFieldsAndFragmentNames = new Map();\n return {\n SelectionSet(selectionSet) {\n const conflicts = findConflictsWithinSelectionSet(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n context.getParentType(),\n selectionSet,\n );\n\n for (const [[responseName, reason], fields1, fields2] of conflicts) {\n const reasonMsg = reasonMessage(reason);\n context.reportError(\n new GraphQLError(\n `Fields \"${responseName}\" conflict because ${reasonMsg}. Use different aliases on the fields to fetch both if this was intentional.`,\n {\n nodes: fields1.concat(fields2),\n },\n ),\n );\n }\n },\n };\n}\n\n/**\n * Algorithm:\n *\n * Conflicts occur when two fields exist in a query which will produce the same\n * response name, but represent differing values, thus creating a conflict.\n * The algorithm below finds all conflicts via making a series of comparisons\n * between fields. In order to compare as few fields as possible, this makes\n * a series of comparisons \"within\" sets of fields and \"between\" sets of fields.\n *\n * Given any selection set, a collection produces both a set of fields by\n * also including all inline fragments, as well as a list of fragments\n * referenced by fragment spreads.\n *\n * A) Each selection set represented in the document first compares \"within\" its\n * collected set of fields, finding any conflicts between every pair of\n * overlapping fields.\n * Note: This is the *only time* that a the fields \"within\" a set are compared\n * to each other. After this only fields \"between\" sets are compared.\n *\n * B) Also, if any fragment is referenced in a selection set, then a\n * comparison is made \"between\" the original set of fields and the\n * referenced fragment.\n *\n * C) Also, if multiple fragments are referenced, then comparisons\n * are made \"between\" each referenced fragment.\n *\n * D) When comparing \"between\" a set of fields and a referenced fragment, first\n * a comparison is made between each field in the original set of fields and\n * each field in the the referenced set of fields.\n *\n * E) Also, if any fragment is referenced in the referenced selection set,\n * then a comparison is made \"between\" the original set of fields and the\n * referenced fragment (recursively referring to step D).\n *\n * F) When comparing \"between\" two fragments, first a comparison is made between\n * each field in the first referenced set of fields and each field in the the\n * second referenced set of fields.\n *\n * G) Also, any fragments referenced by the first must be compared to the\n * second, and any fragments referenced by the second must be compared to the\n * first (recursively referring to step F).\n *\n * H) When comparing two fields, if both have selection sets, then a comparison\n * is made \"between\" both selection sets, first comparing the set of fields in\n * the first selection set with the set of fields in the second.\n *\n * I) Also, if any fragment is referenced in either selection set, then a\n * comparison is made \"between\" the other set of fields and the\n * referenced fragment.\n *\n * J) Also, if two fragments are referenced in both selection sets, then a\n * comparison is made \"between\" the two fragments.\n *\n */\n// Find all conflicts found \"within\" a selection set, including those found\n// via spreading in fragments. Called when visiting each SelectionSet in the\n// GraphQL Document.\nfunction findConflictsWithinSelectionSet(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentType,\n selectionSet,\n) {\n const conflicts = [];\n const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType,\n selectionSet,\n ); // (A) Find find all conflicts \"within\" the fields of this selection set.\n // Note: this is the *only place* `collectConflictsWithin` is called.\n\n collectConflictsWithin(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n fieldMap,\n );\n\n if (fragmentNames.length !== 0) {\n // (B) Then collect conflicts between these fields and those represented by\n // each spread fragment name found.\n for (let i = 0; i < fragmentNames.length; i++) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n false,\n fieldMap,\n fragmentNames[i],\n ); // (C) Then compare this fragment with all other fragments found in this\n // selection set to collect conflicts between fragments spread together.\n // This compares each item in the list of fragment names to every other\n // item in that same list (except for itself).\n\n for (let j = i + 1; j < fragmentNames.length; j++) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n false,\n fragmentNames[i],\n fragmentNames[j],\n );\n }\n }\n }\n\n return conflicts;\n} // Collect all conflicts found between a set of fields and a fragment reference\n// including via spreading in any nested fragments.\n\nfunction collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap,\n fragmentName,\n) {\n // Memoize so the fields and fragments are not compared for conflicts more\n // than once.\n if (\n comparedFieldsAndFragmentPairs.has(\n fieldMap,\n fragmentName,\n areMutuallyExclusive,\n )\n ) {\n return;\n }\n\n comparedFieldsAndFragmentPairs.add(\n fieldMap,\n fragmentName,\n areMutuallyExclusive,\n );\n const fragment = context.getFragment(fragmentName);\n\n if (!fragment) {\n return;\n }\n\n const [fieldMap2, referencedFragmentNames] =\n getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment,\n ); // Do not compare a fragment's fieldMap to itself.\n\n if (fieldMap === fieldMap2) {\n return;\n } // (D) First collect any conflicts between the provided collection of fields\n // and the collection of fields represented by the given fragment.\n\n collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap,\n fieldMap2,\n ); // (E) Then collect any conflicts between the provided collection of fields\n // and any fragment names found in the given fragment.\n\n for (const referencedFragmentName of referencedFragmentNames) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap,\n referencedFragmentName,\n );\n }\n} // Collect all conflicts found between two fragments, including via spreading in\n// any nested fragments.\n\nfunction collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fragmentName1,\n fragmentName2,\n) {\n // No need to compare a fragment to itself.\n if (fragmentName1 === fragmentName2) {\n return;\n } // Memoize so two fragments are not compared for conflicts more than once.\n\n if (\n comparedFragmentPairs.has(\n fragmentName1,\n fragmentName2,\n areMutuallyExclusive,\n )\n ) {\n return;\n }\n\n comparedFragmentPairs.add(fragmentName1, fragmentName2, areMutuallyExclusive);\n const fragment1 = context.getFragment(fragmentName1);\n const fragment2 = context.getFragment(fragmentName2);\n\n if (!fragment1 || !fragment2) {\n return;\n }\n\n const [fieldMap1, referencedFragmentNames1] =\n getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment1,\n );\n const [fieldMap2, referencedFragmentNames2] =\n getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment2,\n ); // (F) First, collect all conflicts between these two collections of fields\n // (not including any nested fragments).\n\n collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap1,\n fieldMap2,\n ); // (G) Then collect conflicts between the first fragment and any nested\n // fragments spread in the second fragment.\n\n for (const referencedFragmentName2 of referencedFragmentNames2) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fragmentName1,\n referencedFragmentName2,\n );\n } // (G) Then collect conflicts between the second fragment and any nested\n // fragments spread in the first fragment.\n\n for (const referencedFragmentName1 of referencedFragmentNames1) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n referencedFragmentName1,\n fragmentName2,\n );\n }\n} // Find all conflicts found between two selection sets, including those found\n// via spreading in fragments. Called when determining if conflicts exist\n// between the sub-fields of two overlapping fields.\n\nfunction findConflictsBetweenSubSelectionSets(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n parentType1,\n selectionSet1,\n parentType2,\n selectionSet2,\n) {\n const conflicts = [];\n const [fieldMap1, fragmentNames1] = getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType1,\n selectionSet1,\n );\n const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType2,\n selectionSet2,\n ); // (H) First, collect all conflicts between these two collections of field.\n\n collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap1,\n fieldMap2,\n ); // (I) Then collect conflicts between the first collection of fields and\n // those referenced by each fragment name associated with the second.\n\n for (const fragmentName2 of fragmentNames2) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap1,\n fragmentName2,\n );\n } // (I) Then collect conflicts between the second collection of fields and\n // those referenced by each fragment name associated with the first.\n\n for (const fragmentName1 of fragmentNames1) {\n collectConflictsBetweenFieldsAndFragment(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fieldMap2,\n fragmentName1,\n );\n } // (J) Also collect conflicts between any fragment names by the first and\n // fragment names by the second. This compares each item in the first set of\n // names to each item in the second set of names.\n\n for (const fragmentName1 of fragmentNames1) {\n for (const fragmentName2 of fragmentNames2) {\n collectConflictsBetweenFragments(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n fragmentName1,\n fragmentName2,\n );\n }\n }\n\n return conflicts;\n} // Collect all Conflicts \"within\" one collection of fields.\n\nfunction collectConflictsWithin(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n fieldMap,\n) {\n // A field map is a keyed collection, where each key represents a response\n // name and the value at that key is a list of all fields which provide that\n // response name. For every response name, if there are multiple fields, they\n // must be compared to find a potential conflict.\n for (const [responseName, fields] of Object.entries(fieldMap)) {\n // This compares every field in the list to every other field in this list\n // (except to itself). If the list only has one item, nothing needs to\n // be compared.\n if (fields.length > 1) {\n for (let i = 0; i < fields.length; i++) {\n for (let j = i + 1; j < fields.length; j++) {\n const conflict = findConflict(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n false, // within one collection is never mutually exclusive\n responseName,\n fields[i],\n fields[j],\n );\n\n if (conflict) {\n conflicts.push(conflict);\n }\n }\n }\n }\n }\n} // Collect all Conflicts between two collections of fields. This is similar to,\n// but different from the `collectConflictsWithin` function above. This check\n// assumes that `collectConflictsWithin` has already been called on each\n// provided collection of fields. This is true because this validator traverses\n// each individual selection set.\n\nfunction collectConflictsBetween(\n context,\n conflicts,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentFieldsAreMutuallyExclusive,\n fieldMap1,\n fieldMap2,\n) {\n // A field map is a keyed collection, where each key represents a response\n // name and the value at that key is a list of all fields which provide that\n // response name. For any response name which appears in both provided field\n // maps, each field from the first field map must be compared to every field\n // in the second field map to find potential conflicts.\n for (const [responseName, fields1] of Object.entries(fieldMap1)) {\n const fields2 = fieldMap2[responseName];\n\n if (fields2) {\n for (const field1 of fields1) {\n for (const field2 of fields2) {\n const conflict = findConflict(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentFieldsAreMutuallyExclusive,\n responseName,\n field1,\n field2,\n );\n\n if (conflict) {\n conflicts.push(conflict);\n }\n }\n }\n }\n }\n} // Determines if there is a conflict between two particular fields, including\n// comparing their sub-fields.\n\nfunction findConflict(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n parentFieldsAreMutuallyExclusive,\n responseName,\n field1,\n field2,\n) {\n const [parentType1, node1, def1] = field1;\n const [parentType2, node2, def2] = field2; // If it is known that two fields could not possibly apply at the same\n // time, due to the parent types, then it is safe to permit them to diverge\n // in aliased field or arguments used as they will not present any ambiguity\n // by differing.\n // It is known that two parent types could never overlap if they are\n // different Object types. Interface or Union types might overlap - if not\n // in the current state of the schema, then perhaps in some future version,\n // thus may not safely diverge.\n\n const areMutuallyExclusive =\n parentFieldsAreMutuallyExclusive ||\n (parentType1 !== parentType2 &&\n isObjectType(parentType1) &&\n isObjectType(parentType2));\n\n if (!areMutuallyExclusive) {\n // Two aliases must refer to the same field.\n const name1 = node1.name.value;\n const name2 = node2.name.value;\n\n if (name1 !== name2) {\n return [\n [responseName, `\"${name1}\" and \"${name2}\" are different fields`],\n [node1],\n [node2],\n ];\n } // Two field calls must have the same arguments.\n\n if (!sameArguments(node1, node2)) {\n return [\n [responseName, 'they have differing arguments'],\n [node1],\n [node2],\n ];\n }\n } // The return type for each field.\n\n const type1 = def1 === null || def1 === void 0 ? void 0 : def1.type;\n const type2 = def2 === null || def2 === void 0 ? void 0 : def2.type;\n\n if (type1 && type2 && doTypesConflict(type1, type2)) {\n return [\n [\n responseName,\n `they return conflicting types \"${inspect(type1)}\" and \"${inspect(\n type2,\n )}\"`,\n ],\n [node1],\n [node2],\n ];\n } // Collect and compare sub-fields. Use the same \"visited fragment names\" list\n // for both collections so fields in a fragment reference are never\n // compared to themselves.\n\n const selectionSet1 = node1.selectionSet;\n const selectionSet2 = node2.selectionSet;\n\n if (selectionSet1 && selectionSet2) {\n const conflicts = findConflictsBetweenSubSelectionSets(\n context,\n cachedFieldsAndFragmentNames,\n comparedFieldsAndFragmentPairs,\n comparedFragmentPairs,\n areMutuallyExclusive,\n getNamedType(type1),\n selectionSet1,\n getNamedType(type2),\n selectionSet2,\n );\n return subfieldConflicts(conflicts, responseName, node1, node2);\n }\n}\n\nfunction sameArguments(node1, node2) {\n const args1 = node1.arguments;\n const args2 = node2.arguments;\n\n if (args1 === undefined || args1.length === 0) {\n return args2 === undefined || args2.length === 0;\n }\n\n if (args2 === undefined || args2.length === 0) {\n return false;\n }\n /* c8 ignore next */\n\n if (args1.length !== args2.length) {\n /* c8 ignore next */\n return false;\n /* c8 ignore next */\n }\n\n const values2 = new Map(args2.map(({ name, value }) => [name.value, value]));\n return args1.every((arg1) => {\n const value1 = arg1.value;\n const value2 = values2.get(arg1.name.value);\n\n if (value2 === undefined) {\n return false;\n }\n\n return stringifyValue(value1) === stringifyValue(value2);\n });\n}\n\nfunction stringifyValue(value) {\n return print(sortValueNode(value));\n} // Two types conflict if both types could not apply to a value simultaneously.\n// Composite types are ignored as their individual field types will be compared\n// later recursively. However List and Non-Null types must match.\n\nfunction doTypesConflict(type1, type2) {\n if (isListType(type1)) {\n return isListType(type2)\n ? doTypesConflict(type1.ofType, type2.ofType)\n : true;\n }\n\n if (isListType(type2)) {\n return true;\n }\n\n if (isNonNullType(type1)) {\n return isNonNullType(type2)\n ? doTypesConflict(type1.ofType, type2.ofType)\n : true;\n }\n\n if (isNonNullType(type2)) {\n return true;\n }\n\n if (isLeafType(type1) || isLeafType(type2)) {\n return type1 !== type2;\n }\n\n return false;\n} // Given a selection set, return the collection of fields (a mapping of response\n// name to field nodes and definitions) as well as a list of fragment names\n// referenced via fragment spreads.\n\nfunction getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n parentType,\n selectionSet,\n) {\n const cached = cachedFieldsAndFragmentNames.get(selectionSet);\n\n if (cached) {\n return cached;\n }\n\n const nodeAndDefs = Object.create(null);\n const fragmentNames = Object.create(null);\n\n _collectFieldsAndFragmentNames(\n context,\n parentType,\n selectionSet,\n nodeAndDefs,\n fragmentNames,\n );\n\n const result = [nodeAndDefs, Object.keys(fragmentNames)];\n cachedFieldsAndFragmentNames.set(selectionSet, result);\n return result;\n} // Given a reference to a fragment, return the represented collection of fields\n// as well as a list of nested fragment names referenced via fragment spreads.\n\nfunction getReferencedFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragment,\n) {\n // Short-circuit building a type from the node if possible.\n const cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet);\n\n if (cached) {\n return cached;\n }\n\n const fragmentType = typeFromAST(context.getSchema(), fragment.typeCondition);\n return getFieldsAndFragmentNames(\n context,\n cachedFieldsAndFragmentNames,\n fragmentType,\n fragment.selectionSet,\n );\n}\n\nfunction _collectFieldsAndFragmentNames(\n context,\n parentType,\n selectionSet,\n nodeAndDefs,\n fragmentNames,\n) {\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n const fieldName = selection.name.value;\n let fieldDef;\n\n if (isObjectType(parentType) || isInterfaceType(parentType)) {\n fieldDef = parentType.getFields()[fieldName];\n }\n\n const responseName = selection.alias\n ? selection.alias.value\n : fieldName;\n\n if (!nodeAndDefs[responseName]) {\n nodeAndDefs[responseName] = [];\n }\n\n nodeAndDefs[responseName].push([parentType, selection, fieldDef]);\n break;\n }\n\n case Kind.FRAGMENT_SPREAD:\n fragmentNames[selection.name.value] = true;\n break;\n\n case Kind.INLINE_FRAGMENT: {\n const typeCondition = selection.typeCondition;\n const inlineFragmentType = typeCondition\n ? typeFromAST(context.getSchema(), typeCondition)\n : parentType;\n\n _collectFieldsAndFragmentNames(\n context,\n inlineFragmentType,\n selection.selectionSet,\n nodeAndDefs,\n fragmentNames,\n );\n\n break;\n }\n }\n }\n} // Given a series of Conflicts which occurred between two sub-fields, generate\n// a single Conflict.\n\nfunction subfieldConflicts(conflicts, responseName, node1, node2) {\n if (conflicts.length > 0) {\n return [\n [responseName, conflicts.map(([reason]) => reason)],\n [node1, ...conflicts.map(([, fields1]) => fields1).flat()],\n [node2, ...conflicts.map(([, , fields2]) => fields2).flat()],\n ];\n }\n}\n/**\n * A way to keep track of pairs of things where the ordering of the pair\n * matters.\n *\n * Provides a third argument for has/set to allow flagging the pair as\n * weakly or strongly present within the collection.\n */\n\nclass OrderedPairSet {\n constructor() {\n this._data = new Map();\n }\n\n has(a, b, weaklyPresent) {\n var _this$_data$get;\n\n const result =\n (_this$_data$get = this._data.get(a)) === null ||\n _this$_data$get === void 0\n ? void 0\n : _this$_data$get.get(b);\n\n if (result === undefined) {\n return false;\n }\n\n return weaklyPresent ? true : weaklyPresent === result;\n }\n\n add(a, b, weaklyPresent) {\n const map = this._data.get(a);\n\n if (map === undefined) {\n this._data.set(a, new Map([[b, weaklyPresent]]));\n } else {\n map.set(b, weaklyPresent);\n }\n }\n}\n/**\n * A way to keep track of pairs of similar things when the ordering of the pair\n * does not matter.\n */\n\nclass PairSet {\n constructor() {\n this._orderedPairSet = new OrderedPairSet();\n }\n\n has(a, b, weaklyPresent) {\n return a < b\n ? this._orderedPairSet.has(a, b, weaklyPresent)\n : this._orderedPairSet.has(b, a, weaklyPresent);\n }\n\n add(a, b, weaklyPresent) {\n if (a < b) {\n this._orderedPairSet.add(a, b, weaklyPresent);\n } else {\n this._orderedPairSet.add(b, a, weaklyPresent);\n }\n }\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { isCompositeType } from '../../type/definition.mjs';\nimport { doTypesOverlap } from '../../utilities/typeComparators.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Possible fragment spread\n *\n * A fragment spread is only valid if the type condition could ever possibly\n * be true: if there is a non-empty intersection of the possible parent types,\n * and possible types which pass the type condition.\n */\nexport function PossibleFragmentSpreadsRule(context) {\n return {\n InlineFragment(node) {\n const fragType = context.getType();\n const parentType = context.getParentType();\n\n if (\n isCompositeType(fragType) &&\n isCompositeType(parentType) &&\n !doTypesOverlap(context.getSchema(), fragType, parentType)\n ) {\n const parentTypeStr = inspect(parentType);\n const fragTypeStr = inspect(fragType);\n context.reportError(\n new GraphQLError(\n `Fragment cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n FragmentSpread(node) {\n const fragName = node.name.value;\n const fragType = getFragmentType(context, fragName);\n const parentType = context.getParentType();\n\n if (\n fragType &&\n parentType &&\n !doTypesOverlap(context.getSchema(), fragType, parentType)\n ) {\n const parentTypeStr = inspect(parentType);\n const fragTypeStr = inspect(fragType);\n context.reportError(\n new GraphQLError(\n `Fragment \"${fragName}\" cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n\nfunction getFragmentType(context, name) {\n const frag = context.getFragment(name);\n\n if (frag) {\n const type = typeFromAST(context.getSchema(), frag.typeCondition);\n\n if (isCompositeType(type)) {\n return type;\n }\n }\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { keyMap } from '../../jsutils/keyMap.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isRequiredArgument, isType } from '../../type/definition.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null without a\n * default value) field arguments have been provided.\n */\nexport function ProvidedRequiredArgumentsRule(context) {\n return {\n // eslint-disable-next-line new-cap\n ...ProvidedRequiredArgumentsOnDirectivesRule(context),\n Field: {\n // Validate on leave to allow for deeper errors to appear first.\n leave(fieldNode) {\n var _fieldNode$arguments;\n\n const fieldDef = context.getFieldDef();\n\n if (!fieldDef) {\n return false;\n }\n\n const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203\n /* c8 ignore next */\n (_fieldNode$arguments = fieldNode.arguments) === null ||\n _fieldNode$arguments === void 0\n ? void 0\n : _fieldNode$arguments.map((arg) => arg.name.value),\n );\n\n for (const argDef of fieldDef.args) {\n if (!providedArgs.has(argDef.name) && isRequiredArgument(argDef)) {\n const argTypeStr = inspect(argDef.type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldDef.name}\" argument \"${argDef.name}\" of type \"${argTypeStr}\" is required, but it was not provided.`,\n {\n nodes: fieldNode,\n },\n ),\n );\n }\n }\n },\n },\n };\n}\n/**\n * @internal\n */\n\nexport function ProvidedRequiredArgumentsOnDirectivesRule(context) {\n var _schema$getDirectives;\n\n const requiredArgsMap = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives =\n (_schema$getDirectives =\n schema === null || schema === void 0\n ? void 0\n : schema.getDirectives()) !== null && _schema$getDirectives !== void 0\n ? _schema$getDirectives\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n requiredArgsMap[directive.name] = keyMap(\n directive.args.filter(isRequiredArgument),\n (arg) => arg.name,\n );\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n var _def$arguments;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argNodes =\n (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n ? _def$arguments\n : [];\n requiredArgsMap[def.name.value] = keyMap(\n argNodes.filter(isRequiredArgumentNode),\n (arg) => arg.name.value,\n );\n }\n }\n\n return {\n Directive: {\n // Validate on leave to allow for deeper errors to appear first.\n leave(directiveNode) {\n const directiveName = directiveNode.name.value;\n const requiredArgs = requiredArgsMap[directiveName];\n\n if (requiredArgs) {\n var _directiveNode$argume;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argNodes =\n (_directiveNode$argume = directiveNode.arguments) !== null &&\n _directiveNode$argume !== void 0\n ? _directiveNode$argume\n : [];\n const argNodeMap = new Set(argNodes.map((arg) => arg.name.value));\n\n for (const [argName, argDef] of Object.entries(requiredArgs)) {\n if (!argNodeMap.has(argName)) {\n const argType = isType(argDef.type)\n ? inspect(argDef.type)\n : print(argDef.type);\n context.reportError(\n new GraphQLError(\n `Directive \"@${directiveName}\" argument \"${argName}\" of type \"${argType}\" is required, but it was not provided.`,\n {\n nodes: directiveNode,\n },\n ),\n );\n }\n }\n }\n },\n },\n };\n}\n\nfunction isRequiredArgumentNode(arg) {\n return arg.type.kind === Kind.NON_NULL_TYPE && arg.defaultValue == null;\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { getNamedType, isLeafType } from '../../type/definition.mjs';\n\n/**\n * Scalar leafs\n *\n * A GraphQL document is valid only if all leaf fields (fields without\n * sub selections) are of scalar or enum types.\n */\nexport function ScalarLeafsRule(context) {\n return {\n Field(node) {\n const type = context.getType();\n const selectionSet = node.selectionSet;\n\n if (type) {\n if (isLeafType(getNamedType(type))) {\n if (selectionSet) {\n const fieldName = node.name.value;\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldName}\" must not have a selection since type \"${typeStr}\" has no subfields.`,\n {\n nodes: selectionSet,\n },\n ),\n );\n }\n } else if (!selectionSet) {\n const fieldName = node.name.value;\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldName}\" of type \"${typeStr}\" must have a selection of subfields. Did you mean \"${fieldName} { ... }\"?`,\n {\n nodes: node,\n },\n ),\n );\n } else if (selectionSet.selections.length === 0) {\n const fieldName = node.name.value;\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Field \"${fieldName}\" of type \"${typeStr}\" must have at least one field selected.`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n };\n}\n","import { inspect } from '../jsutils/inspect.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { printPathArray } from '../jsutils/printPathArray.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { print } from '../language/printer.mjs';\nimport { isInputType, isNonNullType } from '../type/definition.mjs';\nimport { coerceInputValue } from '../utilities/coerceInputValue.mjs';\nimport { typeFromAST } from '../utilities/typeFromAST.mjs';\nimport { valueFromAST } from '../utilities/valueFromAST.mjs';\n\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport function getVariableValues(schema, varDefNodes, inputs, options) {\n const errors = [];\n const maxErrors =\n options === null || options === void 0 ? void 0 : options.maxErrors;\n\n try {\n const coerced = coerceVariableValues(\n schema,\n varDefNodes,\n inputs,\n (error) => {\n if (maxErrors != null && errors.length >= maxErrors) {\n throw new GraphQLError(\n 'Too many errors processing variables, error limit reached. Execution aborted.',\n );\n }\n\n errors.push(error);\n },\n );\n\n if (errors.length === 0) {\n return {\n coerced,\n };\n }\n } catch (error) {\n errors.push(error);\n }\n\n return {\n errors,\n };\n}\n\nfunction coerceVariableValues(schema, varDefNodes, inputs, onError) {\n const coercedValues = {};\n\n for (const varDefNode of varDefNodes) {\n const varName = varDefNode.variable.name.value;\n const varType = typeFromAST(schema, varDefNode.type);\n\n if (!isInputType(varType)) {\n // Must use input types for variables. This should be caught during\n // validation, however is checked again here for safety.\n const varTypeStr = print(varDefNode.type);\n onError(\n new GraphQLError(\n `Variable \"$${varName}\" expected value of type \"${varTypeStr}\" which cannot be used as an input type.`,\n {\n nodes: varDefNode.type,\n },\n ),\n );\n continue;\n }\n\n if (!hasOwnProperty(inputs, varName)) {\n if (varDefNode.defaultValue) {\n coercedValues[varName] = valueFromAST(varDefNode.defaultValue, varType);\n } else if (isNonNullType(varType)) {\n const varTypeStr = inspect(varType);\n onError(\n new GraphQLError(\n `Variable \"$${varName}\" of required type \"${varTypeStr}\" was not provided.`,\n {\n nodes: varDefNode,\n },\n ),\n );\n }\n\n continue;\n }\n\n const value = inputs[varName];\n\n if (value === null && isNonNullType(varType)) {\n const varTypeStr = inspect(varType);\n onError(\n new GraphQLError(\n `Variable \"$${varName}\" of non-null type \"${varTypeStr}\" must not be null.`,\n {\n nodes: varDefNode,\n },\n ),\n );\n continue;\n }\n\n coercedValues[varName] = coerceInputValue(\n value,\n varType,\n (path, invalidValue, error) => {\n let prefix =\n `Variable \"$${varName}\" got invalid value ` + inspect(invalidValue);\n\n if (path.length > 0) {\n prefix += ` at \"${varName}${printPathArray(path)}\"`;\n }\n\n onError(\n new GraphQLError(prefix + '; ' + error.message, {\n nodes: varDefNode,\n originalError: error,\n }),\n );\n },\n );\n }\n\n return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getArgumentValues(def, node, variableValues) {\n var _node$arguments;\n\n const coercedValues = {}; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n\n const argumentNodes =\n (_node$arguments = node.arguments) !== null && _node$arguments !== void 0\n ? _node$arguments\n : [];\n const argNodeMap = keyMap(argumentNodes, (arg) => arg.name.value);\n\n for (const argDef of def.args) {\n const name = argDef.name;\n const argType = argDef.type;\n const argumentNode = argNodeMap[name];\n\n if (!argumentNode) {\n if (argDef.defaultValue !== undefined) {\n coercedValues[name] = argDef.defaultValue;\n } else if (isNonNullType(argType)) {\n throw new GraphQLError(\n `Argument \"${name}\" of required type \"${inspect(argType)}\" ` +\n 'was not provided.',\n {\n nodes: node,\n },\n );\n }\n\n continue;\n }\n\n const valueNode = argumentNode.value;\n let isNull = valueNode.kind === Kind.NULL;\n\n if (valueNode.kind === Kind.VARIABLE) {\n const variableName = valueNode.name.value;\n\n if (\n variableValues == null ||\n !hasOwnProperty(variableValues, variableName)\n ) {\n if (argDef.defaultValue !== undefined) {\n coercedValues[name] = argDef.defaultValue;\n } else if (isNonNullType(argType)) {\n throw new GraphQLError(\n `Argument \"${name}\" of required type \"${inspect(argType)}\" ` +\n `was provided the variable \"$${variableName}\" which was not provided a runtime value.`,\n {\n nodes: valueNode,\n },\n );\n }\n\n continue;\n }\n\n isNull = variableValues[variableName] == null;\n }\n\n if (isNull && isNonNullType(argType)) {\n throw new GraphQLError(\n `Argument \"${name}\" of non-null type \"${inspect(argType)}\" ` +\n 'must not be null.',\n {\n nodes: valueNode,\n },\n );\n }\n\n const coercedValue = valueFromAST(valueNode, argType, variableValues);\n\n if (coercedValue === undefined) {\n // Note: ValuesOfCorrectTypeRule validation should catch this before\n // execution. This is a runtime check to ensure execution does not\n // continue with an invalid argument value.\n throw new GraphQLError(\n `Argument \"${name}\" has invalid value ${print(valueNode)}.`,\n {\n nodes: valueNode,\n },\n );\n }\n\n coercedValues[name] = coercedValue;\n }\n\n return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getDirectiveValues(directiveDef, node, variableValues) {\n var _node$directives;\n\n const directiveNode =\n (_node$directives = node.directives) === null || _node$directives === void 0\n ? void 0\n : _node$directives.find(\n (directive) => directive.name.value === directiveDef.name,\n );\n\n if (directiveNode) {\n return getArgumentValues(directiveDef, directiveNode, variableValues);\n }\n}\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","import { Kind } from '../language/kinds.mjs';\nimport { isAbstractType } from '../type/definition.mjs';\nimport {\n GraphQLIncludeDirective,\n GraphQLSkipDirective,\n} from '../type/directives.mjs';\nimport { typeFromAST } from '../utilities/typeFromAST.mjs';\nimport { getDirectiveValues } from './values.mjs';\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nexport function collectFields(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selectionSet,\n) {\n const fields = new Map();\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selectionSet,\n fields,\n new Set(),\n );\n return fields;\n}\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nexport function collectSubfields(\n schema,\n fragments,\n variableValues,\n returnType,\n fieldNodes,\n) {\n const subFieldNodes = new Map();\n const visitedFragmentNames = new Set();\n\n for (const node of fieldNodes) {\n if (node.selectionSet) {\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n returnType,\n node.selectionSet,\n subFieldNodes,\n visitedFragmentNames,\n );\n }\n }\n\n return subFieldNodes;\n}\n\nfunction collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selectionSet,\n fields,\n visitedFragmentNames,\n) {\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n if (!shouldIncludeNode(variableValues, selection)) {\n continue;\n }\n\n const name = getFieldEntryKey(selection);\n const fieldList = fields.get(name);\n\n if (fieldList !== undefined) {\n fieldList.push(selection);\n } else {\n fields.set(name, [selection]);\n }\n\n break;\n }\n\n case Kind.INLINE_FRAGMENT: {\n if (\n !shouldIncludeNode(variableValues, selection) ||\n !doesFragmentConditionMatch(schema, selection, runtimeType)\n ) {\n continue;\n }\n\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n selection.selectionSet,\n fields,\n visitedFragmentNames,\n );\n break;\n }\n\n case Kind.FRAGMENT_SPREAD: {\n const fragName = selection.name.value;\n\n if (\n visitedFragmentNames.has(fragName) ||\n !shouldIncludeNode(variableValues, selection)\n ) {\n continue;\n }\n\n visitedFragmentNames.add(fragName);\n const fragment = fragments[fragName];\n\n if (\n !fragment ||\n !doesFragmentConditionMatch(schema, fragment, runtimeType)\n ) {\n continue;\n }\n\n collectFieldsImpl(\n schema,\n fragments,\n variableValues,\n runtimeType,\n fragment.selectionSet,\n fields,\n visitedFragmentNames,\n );\n break;\n }\n }\n }\n}\n/**\n * Determines if a field should be included based on the `@include` and `@skip`\n * directives, where `@skip` has higher precedence than `@include`.\n */\n\nfunction shouldIncludeNode(variableValues, node) {\n const skip = getDirectiveValues(GraphQLSkipDirective, node, variableValues);\n\n if ((skip === null || skip === void 0 ? void 0 : skip.if) === true) {\n return false;\n }\n\n const include = getDirectiveValues(\n GraphQLIncludeDirective,\n node,\n variableValues,\n );\n\n if (\n (include === null || include === void 0 ? void 0 : include.if) === false\n ) {\n return false;\n }\n\n return true;\n}\n/**\n * Determines if a fragment is applicable to the given type.\n */\n\nfunction doesFragmentConditionMatch(schema, fragment, type) {\n const typeConditionNode = fragment.typeCondition;\n\n if (!typeConditionNode) {\n return true;\n }\n\n const conditionalType = typeFromAST(schema, typeConditionNode);\n\n if (conditionalType === type) {\n return true;\n }\n\n if (isAbstractType(conditionalType)) {\n return schema.isSubType(conditionalType, type);\n }\n\n return false;\n}\n/**\n * Implements the logic to compute the key of a given field's entry\n */\n\nfunction getFieldEntryKey(node) {\n return node.alias ? node.alias.value : node.name.value;\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { collectFields } from '../../execution/collectFields.mjs';\n\n/**\n * Subscriptions must only include a non-introspection field.\n *\n * A GraphQL subscription is valid only if it contains a single root field and\n * that root field is not an introspection field.\n *\n * See https://spec.graphql.org/draft/#sec-Single-root-field\n */\nexport function SingleFieldSubscriptionsRule(context) {\n return {\n OperationDefinition(node) {\n if (node.operation === 'subscription') {\n const schema = context.getSchema();\n const subscriptionType = schema.getSubscriptionType();\n\n if (subscriptionType) {\n const operationName = node.name ? node.name.value : null;\n const variableValues = Object.create(null);\n const document = context.getDocument();\n const fragments = Object.create(null);\n\n for (const definition of document.definitions) {\n if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n fragments[definition.name.value] = definition;\n }\n }\n\n const fields = collectFields(\n schema,\n fragments,\n variableValues,\n subscriptionType,\n node.selectionSet,\n );\n\n if (fields.size > 1) {\n const fieldSelectionLists = [...fields.values()];\n const extraFieldSelectionLists = fieldSelectionLists.slice(1);\n const extraFieldSelections = extraFieldSelectionLists.flat();\n context.reportError(\n new GraphQLError(\n operationName != null\n ? `Subscription \"${operationName}\" must select only one top level field.`\n : 'Anonymous Subscription must select only one top level field.',\n {\n nodes: extraFieldSelections,\n },\n ),\n );\n }\n\n for (const fieldNodes of fields.values()) {\n const field = fieldNodes[0];\n const fieldName = field.name.value;\n\n if (fieldName.startsWith('__')) {\n context.reportError(\n new GraphQLError(\n operationName != null\n ? `Subscription \"${operationName}\" must not select an introspection top level field.`\n : 'Anonymous Subscription must not select an introspection top level field.',\n {\n nodes: fieldNodes,\n },\n ),\n );\n }\n }\n }\n }\n },\n };\n}\n","/**\n * Groups array items into a Map, given a function to produce grouping key.\n */\nexport function groupBy(list, keyFn) {\n const result = new Map();\n\n for (const item of list) {\n const key = keyFn(item);\n const group = result.get(key);\n\n if (group === undefined) {\n result.set(key, [item]);\n } else {\n group.push(item);\n }\n }\n\n return result;\n}\n","import { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n */\nexport function UniqueArgumentNamesRule(context) {\n return {\n Field: checkArgUniqueness,\n Directive: checkArgUniqueness,\n };\n\n function checkArgUniqueness(parentNode) {\n var _parentNode$arguments;\n\n // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const argumentNodes =\n (_parentNode$arguments = parentNode.arguments) !== null &&\n _parentNode$arguments !== void 0\n ? _parentNode$arguments\n : [];\n const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value);\n\n for (const [argName, argNodes] of seenArgs) {\n if (argNodes.length > 1) {\n context.reportError(\n new GraphQLError(\n `There can be only one argument named \"${argName}\".`,\n {\n nodes: argNodes.map((node) => node.name),\n },\n ),\n );\n }\n }\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport {\n isTypeDefinitionNode,\n isTypeExtensionNode,\n} from '../../language/predicates.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all non-repeatable directives at\n * a given location are uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location\n */\nexport function UniqueDirectivesPerLocationRule(context) {\n const uniqueDirectiveMap = Object.create(null);\n const schema = context.getSchema();\n const definedDirectives = schema\n ? schema.getDirectives()\n : specifiedDirectives;\n\n for (const directive of definedDirectives) {\n uniqueDirectiveMap[directive.name] = !directive.isRepeatable;\n }\n\n const astDefinitions = context.getDocument().definitions;\n\n for (const def of astDefinitions) {\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n uniqueDirectiveMap[def.name.value] = !def.repeatable;\n }\n }\n\n const schemaDirectives = Object.create(null);\n const typeDirectivesMap = Object.create(null);\n return {\n // Many different AST nodes may contain directives. Rather than listing\n // them all, just listen for entering any node, and check to see if it\n // defines any directives.\n enter(node) {\n if (!('directives' in node) || !node.directives) {\n return;\n }\n\n let seenDirectives;\n\n if (\n node.kind === Kind.SCHEMA_DEFINITION ||\n node.kind === Kind.SCHEMA_EXTENSION\n ) {\n seenDirectives = schemaDirectives;\n } else if (isTypeDefinitionNode(node) || isTypeExtensionNode(node)) {\n const typeName = node.name.value;\n seenDirectives = typeDirectivesMap[typeName];\n\n if (seenDirectives === undefined) {\n typeDirectivesMap[typeName] = seenDirectives = Object.create(null);\n }\n } else {\n seenDirectives = Object.create(null);\n }\n\n for (const directive of node.directives) {\n const directiveName = directive.name.value;\n\n if (uniqueDirectiveMap[directiveName]) {\n if (seenDirectives[directiveName]) {\n context.reportError(\n new GraphQLError(\n `The directive \"@${directiveName}\" can only be used once at this location.`,\n {\n nodes: [seenDirectives[directiveName], directive],\n },\n ),\n );\n } else {\n seenDirectives[directiveName] = directive;\n }\n }\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness\n */\nexport function UniqueFragmentNamesRule(context) {\n const knownFragmentNames = Object.create(null);\n return {\n OperationDefinition: () => false,\n\n FragmentDefinition(node) {\n const fragmentName = node.name.value;\n\n if (knownFragmentNames[fragmentName]) {\n context.reportError(\n new GraphQLError(\n `There can be only one fragment named \"${fragmentName}\".`,\n {\n nodes: [knownFragmentNames[fragmentName], node.name],\n },\n ),\n );\n } else {\n knownFragmentNames[fragmentName] = node.name;\n }\n\n return false;\n },\n };\n}\n","import { invariant } from '../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Input-Object-Field-Uniqueness\n */\nexport function UniqueInputFieldNamesRule(context) {\n const knownNameStack = [];\n let knownNames = Object.create(null);\n return {\n ObjectValue: {\n enter() {\n knownNameStack.push(knownNames);\n knownNames = Object.create(null);\n },\n\n leave() {\n const prevKnownNames = knownNameStack.pop();\n prevKnownNames || invariant(false);\n knownNames = prevKnownNames;\n },\n },\n\n ObjectField(node) {\n const fieldName = node.name.value;\n\n if (knownNames[fieldName]) {\n context.reportError(\n new GraphQLError(\n `There can be only one input field named \"${fieldName}\".`,\n {\n nodes: [knownNames[fieldName], node.name],\n },\n ),\n );\n } else {\n knownNames[fieldName] = node.name;\n }\n },\n };\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness\n */\nexport function UniqueOperationNamesRule(context) {\n const knownOperationNames = Object.create(null);\n return {\n OperationDefinition(node) {\n const operationName = node.name;\n\n if (operationName) {\n if (knownOperationNames[operationName.value]) {\n context.reportError(\n new GraphQLError(\n `There can be only one operation named \"${operationName.value}\".`,\n {\n nodes: [\n knownOperationNames[operationName.value],\n operationName,\n ],\n },\n ),\n );\n } else {\n knownOperationNames[operationName.value] = operationName;\n }\n }\n\n return false;\n },\n\n FragmentDefinition: () => false,\n };\n}\n","import { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\n */\nexport function UniqueVariableNamesRule(context) {\n return {\n OperationDefinition(operationNode) {\n var _operationNode$variab;\n\n // See: https://github.com/graphql/graphql-js/issues/2203\n\n /* c8 ignore next */\n const variableDefinitions =\n (_operationNode$variab = operationNode.variableDefinitions) !== null &&\n _operationNode$variab !== void 0\n ? _operationNode$variab\n : [];\n const seenVariableDefinitions = groupBy(\n variableDefinitions,\n (node) => node.variable.name.value,\n );\n\n for (const [variableName, variableNodes] of seenVariableDefinitions) {\n if (variableNodes.length > 1) {\n context.reportError(\n new GraphQLError(\n `There can be only one variable named \"$${variableName}\".`,\n {\n nodes: variableNodes.map((node) => node.variable.name),\n },\n ),\n );\n }\n }\n },\n };\n}\n","import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { inspect } from '../../jsutils/inspect.mjs';\nimport { keyMap } from '../../jsutils/keyMap.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport {\n getNamedType,\n getNullableType,\n isInputObjectType,\n isLeafType,\n isListType,\n isNonNullType,\n isRequiredInputField,\n} from '../../type/definition.mjs';\n\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n *\n * See https://spec.graphql.org/draft/#sec-Values-of-Correct-Type\n */\nexport function ValuesOfCorrectTypeRule(context) {\n let variableDefinitions = {};\n return {\n OperationDefinition: {\n enter() {\n variableDefinitions = {};\n },\n },\n\n VariableDefinition(definition) {\n variableDefinitions[definition.variable.name.value] = definition;\n },\n\n ListValue(node) {\n // Note: TypeInfo will traverse into a list's item type, so look to the\n // parent input type to check if it is a list.\n const type = getNullableType(context.getParentInputType());\n\n if (!isListType(type)) {\n isValidValueNode(context, node);\n return false; // Don't traverse further.\n }\n },\n\n ObjectValue(node) {\n const type = getNamedType(context.getInputType());\n\n if (!isInputObjectType(type)) {\n isValidValueNode(context, node);\n return false; // Don't traverse further.\n } // Ensure every required field exists.\n\n const fieldNodeMap = keyMap(node.fields, (field) => field.name.value);\n\n for (const fieldDef of Object.values(type.getFields())) {\n const fieldNode = fieldNodeMap[fieldDef.name];\n\n if (!fieldNode && isRequiredInputField(fieldDef)) {\n const typeStr = inspect(fieldDef.type);\n context.reportError(\n new GraphQLError(\n `Field \"${type.name}.${fieldDef.name}\" of required type \"${typeStr}\" was not provided.`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n\n if (type.isOneOf) {\n validateOneOfInputObject(\n context,\n node,\n type,\n fieldNodeMap,\n variableDefinitions,\n );\n }\n },\n\n ObjectField(node) {\n const parentType = getNamedType(context.getParentInputType());\n const fieldType = context.getInputType();\n\n if (!fieldType && isInputObjectType(parentType)) {\n const suggestions = suggestionList(\n node.name.value,\n Object.keys(parentType.getFields()),\n );\n context.reportError(\n new GraphQLError(\n `Field \"${node.name.value}\" is not defined by type \"${parentType.name}\".` +\n didYouMean(suggestions),\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n NullValue(node) {\n const type = context.getInputType();\n\n if (isNonNullType(type)) {\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${inspect(type)}\", found ${print(node)}.`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n EnumValue: (node) => isValidValueNode(context, node),\n IntValue: (node) => isValidValueNode(context, node),\n FloatValue: (node) => isValidValueNode(context, node),\n StringValue: (node) => isValidValueNode(context, node),\n BooleanValue: (node) => isValidValueNode(context, node),\n };\n}\n/**\n * Any value literal may be a valid representation of a Scalar, depending on\n * that scalar type.\n */\n\nfunction isValidValueNode(context, node) {\n // Report any error at the full type expected by the location.\n const locationType = context.getInputType();\n\n if (!locationType) {\n return;\n }\n\n const type = getNamedType(locationType);\n\n if (!isLeafType(type)) {\n const typeStr = inspect(locationType);\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${typeStr}\", found ${print(node)}.`,\n {\n nodes: node,\n },\n ),\n );\n return;\n } // Scalars and Enums determine if a literal value is valid via parseLiteral(),\n // which may throw or return an invalid value to indicate failure.\n\n try {\n const parseResult = type.parseLiteral(\n node,\n undefined,\n /* variables */\n );\n\n if (parseResult === undefined) {\n const typeStr = inspect(locationType);\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${typeStr}\", found ${print(node)}.`,\n {\n nodes: node,\n },\n ),\n );\n }\n } catch (error) {\n const typeStr = inspect(locationType);\n\n if (error instanceof GraphQLError) {\n context.reportError(error);\n } else {\n context.reportError(\n new GraphQLError(\n `Expected value of type \"${typeStr}\", found ${print(node)}; ` +\n error.message,\n {\n nodes: node,\n originalError: error,\n },\n ),\n );\n }\n }\n}\n\nfunction validateOneOfInputObject(\n context,\n node,\n type,\n fieldNodeMap,\n variableDefinitions,\n) {\n var _fieldNodeMap$keys$;\n\n const keys = Object.keys(fieldNodeMap);\n const isNotExactlyOneField = keys.length !== 1;\n\n if (isNotExactlyOneField) {\n context.reportError(\n new GraphQLError(\n `OneOf Input Object \"${type.name}\" must specify exactly one key.`,\n {\n nodes: [node],\n },\n ),\n );\n return;\n }\n\n const value =\n (_fieldNodeMap$keys$ = fieldNodeMap[keys[0]]) === null ||\n _fieldNodeMap$keys$ === void 0\n ? void 0\n : _fieldNodeMap$keys$.value;\n const isNullLiteral = !value || value.kind === Kind.NULL;\n const isVariable =\n (value === null || value === void 0 ? void 0 : value.kind) ===\n Kind.VARIABLE;\n\n if (isNullLiteral) {\n context.reportError(\n new GraphQLError(`Field \"${type.name}.${keys[0]}\" must be non-null.`, {\n nodes: [node],\n }),\n );\n return;\n }\n\n if (isVariable) {\n const variableName = value.name.value;\n const definition = variableDefinitions[variableName];\n const isNullableVariable = definition.type.kind !== Kind.NON_NULL_TYPE;\n\n if (isNullableVariable) {\n context.reportError(\n new GraphQLError(\n `Variable \"${variableName}\" must be non-nullable to be used for OneOf Input Object \"${type.name}\".`,\n {\n nodes: [node],\n },\n ),\n );\n }\n }\n}\n","import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isInputType } from '../../type/definition.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Variables are input types\n *\n * A GraphQL operation is only valid if all the variables it defines are of\n * input types (scalar, enum, or input object).\n *\n * See https://spec.graphql.org/draft/#sec-Variables-Are-Input-Types\n */\nexport function VariablesAreInputTypesRule(context) {\n return {\n VariableDefinition(node) {\n const type = typeFromAST(context.getSchema(), node.type);\n\n if (type !== undefined && !isInputType(type)) {\n const variableName = node.variable.name.value;\n const typeName = print(node.type);\n context.reportError(\n new GraphQLError(\n `Variable \"$${variableName}\" cannot be non-input type \"${typeName}\".`,\n {\n nodes: node.type,\n },\n ),\n );\n }\n },\n };\n}\n","import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isNonNullType } from '../../type/definition.mjs';\nimport { isTypeSubTypeOf } from '../../utilities/typeComparators.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Variables in allowed position\n *\n * Variable usages must be compatible with the arguments they are passed to.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Usages-are-Allowed\n */\nexport function VariablesInAllowedPositionRule(context) {\n let varDefMap = Object.create(null);\n return {\n OperationDefinition: {\n enter() {\n varDefMap = Object.create(null);\n },\n\n leave(operation) {\n const usages = context.getRecursiveVariableUsages(operation);\n\n for (const { node, type, defaultValue } of usages) {\n const varName = node.name.value;\n const varDef = varDefMap[varName];\n\n if (varDef && type) {\n // A var type is allowed if it is the same or more strict (e.g. is\n // a subtype of) than the expected type. It can be more strict if\n // the variable type is non-null when the expected type is nullable.\n // If both are list types, the variable item type can be more strict\n // than the expected item type (contravariant).\n const schema = context.getSchema();\n const varType = typeFromAST(schema, varDef.type);\n\n if (\n varType &&\n !allowedVariableUsage(\n schema,\n varType,\n varDef.defaultValue,\n type,\n defaultValue,\n )\n ) {\n const varTypeStr = inspect(varType);\n const typeStr = inspect(type);\n context.reportError(\n new GraphQLError(\n `Variable \"$${varName}\" of type \"${varTypeStr}\" used in position expecting type \"${typeStr}\".`,\n {\n nodes: [varDef, node],\n },\n ),\n );\n }\n }\n }\n },\n },\n\n VariableDefinition(node) {\n varDefMap[node.variable.name.value] = node;\n },\n };\n}\n/**\n * Returns true if the variable is allowed in the location it was found,\n * which includes considering if default values exist for either the variable\n * or the location at which it is located.\n */\n\nfunction allowedVariableUsage(\n schema,\n varType,\n varDefaultValue,\n locationType,\n locationDefaultValue,\n) {\n if (isNonNullType(locationType) && !isNonNullType(varType)) {\n const hasNonNullVariableDefaultValue =\n varDefaultValue != null && varDefaultValue.kind !== Kind.NULL;\n const hasLocationDefaultValue = locationDefaultValue !== undefined;\n\n if (!hasNonNullVariableDefaultValue && !hasLocationDefaultValue) {\n return false;\n }\n\n const nullableLocationType = locationType.ofType;\n return isTypeSubTypeOf(schema, varType, nullableLocationType);\n }\n\n return isTypeSubTypeOf(schema, varType, locationType);\n}\n","// Spec Section: \"Executable Definitions\"\nimport { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule.mjs'; // Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\n\nimport { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule.mjs'; // Spec Section: \"Fragments on Composite Types\"\n\nimport { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule.mjs'; // Spec Section: \"Argument Names\"\n\nimport {\n KnownArgumentNamesOnDirectivesRule,\n KnownArgumentNamesRule,\n} from './rules/KnownArgumentNamesRule.mjs'; // Spec Section: \"Directives Are Defined\"\n\nimport { KnownDirectivesRule } from './rules/KnownDirectivesRule.mjs'; // Spec Section: \"Fragment spread target defined\"\n\nimport { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule.mjs'; // Spec Section: \"Fragment Spread Type Existence\"\n\nimport { KnownTypeNamesRule } from './rules/KnownTypeNamesRule.mjs'; // Spec Section: \"Lone Anonymous Operation\"\n\nimport { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule.mjs'; // SDL-specific validation rules\n\nimport { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule.mjs'; // TODO: Spec Section\n\nimport { MaxIntrospectionDepthRule } from './rules/MaxIntrospectionDepthRule.mjs'; // Spec Section: \"Fragments must not form cycles\"\n\nimport { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule.mjs'; // Spec Section: \"All Variable Used Defined\"\n\nimport { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule.mjs'; // Spec Section: \"Fragments must be used\"\n\nimport { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule.mjs'; // Spec Section: \"All Variables Used\"\n\nimport { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule.mjs'; // Spec Section: \"Field Selection Merging\"\n\nimport { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule.mjs'; // Spec Section: \"Fragment spread is possible\"\n\nimport { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule.mjs';\nimport { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule.mjs'; // Spec Section: \"Argument Optionality\"\n\nimport {\n ProvidedRequiredArgumentsOnDirectivesRule,\n ProvidedRequiredArgumentsRule,\n} from './rules/ProvidedRequiredArgumentsRule.mjs'; // Spec Section: \"Leaf Field Selections\"\n\nimport { ScalarLeafsRule } from './rules/ScalarLeafsRule.mjs'; // Spec Section: \"Subscriptions with Single Root Field\"\n\nimport { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule.mjs';\nimport { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule.mjs'; // Spec Section: \"Argument Uniqueness\"\n\nimport { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule.mjs';\nimport { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule.mjs'; // Spec Section: \"Directives Are Unique Per Location\"\n\nimport { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule.mjs';\nimport { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule.mjs';\nimport { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule.mjs'; // Spec Section: \"Fragment Name Uniqueness\"\n\nimport { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule.mjs'; // Spec Section: \"Input Object Field Uniqueness\"\n\nimport { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule.mjs'; // Spec Section: \"Operation Name Uniqueness\"\n\nimport { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule.mjs';\nimport { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule.mjs';\nimport { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule.mjs'; // Spec Section: \"Variable Uniqueness\"\n\nimport { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule.mjs'; // Spec Section: \"Value Type Correctness\"\n\nimport { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule.mjs'; // Spec Section: \"Variables are Input Types\"\n\nimport { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule.mjs'; // Spec Section: \"All Variable Usages Are Allowed\"\n\nimport { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule.mjs';\n\n/**\n * Technically these aren't part of the spec but they are strongly encouraged\n * validation rules.\n */\nexport const recommendedRules = Object.freeze([MaxIntrospectionDepthRule]);\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\n\nexport const specifiedRules = Object.freeze([\n ExecutableDefinitionsRule,\n UniqueOperationNamesRule,\n LoneAnonymousOperationRule,\n SingleFieldSubscriptionsRule,\n KnownTypeNamesRule,\n FragmentsOnCompositeTypesRule,\n VariablesAreInputTypesRule,\n ScalarLeafsRule,\n FieldsOnCorrectTypeRule,\n UniqueFragmentNamesRule,\n KnownFragmentNamesRule,\n NoUnusedFragmentsRule,\n PossibleFragmentSpreadsRule,\n NoFragmentCyclesRule,\n UniqueVariableNamesRule,\n NoUndefinedVariablesRule,\n NoUnusedVariablesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n KnownArgumentNamesRule,\n UniqueArgumentNamesRule,\n ValuesOfCorrectTypeRule,\n ProvidedRequiredArgumentsRule,\n VariablesInAllowedPositionRule,\n OverlappingFieldsCanBeMergedRule,\n UniqueInputFieldNamesRule,\n ...recommendedRules,\n]);\n/**\n * @internal\n */\n\nexport const specifiedSDLRules = Object.freeze([\n LoneSchemaDefinitionRule,\n UniqueOperationTypesRule,\n UniqueTypeNamesRule,\n UniqueEnumValueNamesRule,\n UniqueFieldDefinitionNamesRule,\n UniqueArgumentDefinitionNamesRule,\n UniqueDirectiveNamesRule,\n KnownTypeNamesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n PossibleTypeExtensionsRule,\n KnownArgumentNamesOnDirectivesRule,\n UniqueArgumentNamesRule,\n UniqueInputFieldNamesRule,\n ProvidedRequiredArgumentsOnDirectivesRule,\n]);\n","import { Kind } from '../language/kinds.mjs';\nimport { visit } from '../language/visitor.mjs';\nimport { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';\n\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nexport class ASTValidationContext {\n constructor(ast, onError) {\n this._ast = ast;\n this._fragments = undefined;\n this._fragmentSpreads = new Map();\n this._recursivelyReferencedFragments = new Map();\n this._onError = onError;\n }\n\n get [Symbol.toStringTag]() {\n return 'ASTValidationContext';\n }\n\n reportError(error) {\n this._onError(error);\n }\n\n getDocument() {\n return this._ast;\n }\n\n getFragment(name) {\n let fragments;\n\n if (this._fragments) {\n fragments = this._fragments;\n } else {\n fragments = Object.create(null);\n\n for (const defNode of this.getDocument().definitions) {\n if (defNode.kind === Kind.FRAGMENT_DEFINITION) {\n fragments[defNode.name.value] = defNode;\n }\n }\n\n this._fragments = fragments;\n }\n\n return fragments[name];\n }\n\n getFragmentSpreads(node) {\n let spreads = this._fragmentSpreads.get(node);\n\n if (!spreads) {\n spreads = [];\n const setsToVisit = [node];\n let set;\n\n while ((set = setsToVisit.pop())) {\n for (const selection of set.selections) {\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n spreads.push(selection);\n } else if (selection.selectionSet) {\n setsToVisit.push(selection.selectionSet);\n }\n }\n }\n\n this._fragmentSpreads.set(node, spreads);\n }\n\n return spreads;\n }\n\n getRecursivelyReferencedFragments(operation) {\n let fragments = this._recursivelyReferencedFragments.get(operation);\n\n if (!fragments) {\n fragments = [];\n const collectedNames = Object.create(null);\n const nodesToVisit = [operation.selectionSet];\n let node;\n\n while ((node = nodesToVisit.pop())) {\n for (const spread of this.getFragmentSpreads(node)) {\n const fragName = spread.name.value;\n\n if (collectedNames[fragName] !== true) {\n collectedNames[fragName] = true;\n const fragment = this.getFragment(fragName);\n\n if (fragment) {\n fragments.push(fragment);\n nodesToVisit.push(fragment.selectionSet);\n }\n }\n }\n }\n\n this._recursivelyReferencedFragments.set(operation, fragments);\n }\n\n return fragments;\n }\n}\nexport class SDLValidationContext extends ASTValidationContext {\n constructor(ast, schema, onError) {\n super(ast, onError);\n this._schema = schema;\n }\n\n get [Symbol.toStringTag]() {\n return 'SDLValidationContext';\n }\n\n getSchema() {\n return this._schema;\n }\n}\nexport class ValidationContext extends ASTValidationContext {\n constructor(schema, ast, typeInfo, onError) {\n super(ast, onError);\n this._schema = schema;\n this._typeInfo = typeInfo;\n this._variableUsages = new Map();\n this._recursiveVariableUsages = new Map();\n }\n\n get [Symbol.toStringTag]() {\n return 'ValidationContext';\n }\n\n getSchema() {\n return this._schema;\n }\n\n getVariableUsages(node) {\n let usages = this._variableUsages.get(node);\n\n if (!usages) {\n const newUsages = [];\n const typeInfo = new TypeInfo(this._schema);\n visit(\n node,\n visitWithTypeInfo(typeInfo, {\n VariableDefinition: () => false,\n\n Variable(variable) {\n newUsages.push({\n node: variable,\n type: typeInfo.getInputType(),\n defaultValue: typeInfo.getDefaultValue(),\n });\n },\n }),\n );\n usages = newUsages;\n\n this._variableUsages.set(node, usages);\n }\n\n return usages;\n }\n\n getRecursiveVariableUsages(operation) {\n let usages = this._recursiveVariableUsages.get(operation);\n\n if (!usages) {\n usages = this.getVariableUsages(operation);\n\n for (const frag of this.getRecursivelyReferencedFragments(operation)) {\n usages = usages.concat(this.getVariableUsages(frag));\n }\n\n this._recursiveVariableUsages.set(operation, usages);\n }\n\n return usages;\n }\n\n getType() {\n return this._typeInfo.getType();\n }\n\n getParentType() {\n return this._typeInfo.getParentType();\n }\n\n getInputType() {\n return this._typeInfo.getInputType();\n }\n\n getParentInputType() {\n return this._typeInfo.getParentInputType();\n }\n\n getFieldDef() {\n return this._typeInfo.getFieldDef();\n }\n\n getDirective() {\n return this._typeInfo.getDirective();\n }\n\n getArgument() {\n return this._typeInfo.getArgument();\n }\n\n getEnumValue() {\n return this._typeInfo.getEnumValue();\n }\n}\n","import { devAssert } from '../jsutils/devAssert.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { visit, visitInParallel } from '../language/visitor.mjs';\nimport { assertValidSchema } from '../type/validate.mjs';\nimport { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';\nimport { specifiedRules, specifiedSDLRules } from './specifiedRules.mjs';\nimport {\n SDLValidationContext,\n ValidationContext,\n} from './ValidationContext.mjs';\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Validate will stop validation after a `maxErrors` limit has been reached.\n * Attackers can send pathologically invalid queries to induce a DoS attack,\n * so by default `maxErrors` set to 100 errors.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\n\nexport function validate(\n schema,\n documentAST,\n rules = specifiedRules,\n options,\n /** @deprecated will be removed in 17.0.0 */\n typeInfo = new TypeInfo(schema),\n) {\n var _options$maxErrors;\n\n const maxErrors =\n (_options$maxErrors =\n options === null || options === void 0 ? void 0 : options.maxErrors) !==\n null && _options$maxErrors !== void 0\n ? _options$maxErrors\n : 100;\n documentAST || devAssert(false, 'Must provide document.'); // If the schema used for validation is invalid, throw an error.\n\n assertValidSchema(schema);\n const abortObj = Object.freeze({});\n const errors = [];\n const context = new ValidationContext(\n schema,\n documentAST,\n typeInfo,\n (error) => {\n if (errors.length >= maxErrors) {\n errors.push(\n new GraphQLError(\n 'Too many validation errors, error limit reached. Validation aborted.',\n ),\n ); // eslint-disable-next-line @typescript-eslint/no-throw-literal\n\n throw abortObj;\n }\n\n errors.push(error);\n },\n ); // This uses a specialized visitor which runs multiple visitors in parallel,\n // while maintaining the visitor skip and break API.\n\n const visitor = visitInParallel(rules.map((rule) => rule(context))); // Visit the whole document with each instance of all provided rules.\n\n try {\n visit(documentAST, visitWithTypeInfo(typeInfo, visitor));\n } catch (e) {\n if (e !== abortObj) {\n throw e;\n }\n }\n\n return errors;\n}\n/**\n * @internal\n */\n\nexport function validateSDL(\n documentAST,\n schemaToExtend,\n rules = specifiedSDLRules,\n) {\n const errors = [];\n const context = new SDLValidationContext(\n documentAST,\n schemaToExtend,\n (error) => {\n errors.push(error);\n },\n );\n const visitors = rules.map((rule) => rule(context));\n visit(documentAST, visitInParallel(visitors));\n return errors;\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDL(documentAST) {\n const errors = validateSDL(documentAST);\n\n if (errors.length !== 0) {\n throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n }\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDLExtension(documentAST, schema) {\n const errors = validateSDL(documentAST, schema);\n\n if (errors.length !== 0) {\n throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n }\n}\n","import { invariant } from '../../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../../error/GraphQLError.mjs';\nimport { getNamedType, isInputObjectType } from '../../../type/definition.mjs';\n\n/**\n * No deprecated\n *\n * A GraphQL document is only valid if all selected fields and all used enum values have not been\n * deprecated.\n *\n * Note: This rule is optional and is not part of the Validation section of the GraphQL\n * Specification. The main purpose of this rule is detection of deprecated usages and not\n * necessarily to forbid their use when querying a service.\n */\nexport function NoDeprecatedCustomRule(context) {\n return {\n Field(node) {\n const fieldDef = context.getFieldDef();\n const deprecationReason =\n fieldDef === null || fieldDef === void 0\n ? void 0\n : fieldDef.deprecationReason;\n\n if (fieldDef && deprecationReason != null) {\n const parentType = context.getParentType();\n parentType != null || invariant(false);\n context.reportError(\n new GraphQLError(\n `The field ${parentType.name}.${fieldDef.name} is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n\n Argument(node) {\n const argDef = context.getArgument();\n const deprecationReason =\n argDef === null || argDef === void 0\n ? void 0\n : argDef.deprecationReason;\n\n if (argDef && deprecationReason != null) {\n const directiveDef = context.getDirective();\n\n if (directiveDef != null) {\n context.reportError(\n new GraphQLError(\n `Directive \"@${directiveDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n } else {\n const parentType = context.getParentType();\n const fieldDef = context.getFieldDef();\n (parentType != null && fieldDef != null) || invariant(false);\n context.reportError(\n new GraphQLError(\n `Field \"${parentType.name}.${fieldDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n\n ObjectField(node) {\n const inputObjectDef = getNamedType(context.getParentInputType());\n\n if (isInputObjectType(inputObjectDef)) {\n const inputFieldDef = inputObjectDef.getFields()[node.name.value];\n const deprecationReason =\n inputFieldDef === null || inputFieldDef === void 0\n ? void 0\n : inputFieldDef.deprecationReason;\n\n if (deprecationReason != null) {\n context.reportError(\n new GraphQLError(\n `The input field ${inputObjectDef.name}.${inputFieldDef.name} is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n }\n },\n\n EnumValue(node) {\n const enumValueDef = context.getEnumValue();\n const deprecationReason =\n enumValueDef === null || enumValueDef === void 0\n ? void 0\n : enumValueDef.deprecationReason;\n\n if (enumValueDef && deprecationReason != null) {\n const enumTypeDef = getNamedType(context.getInputType());\n enumTypeDef != null || invariant(false);\n context.reportError(\n new GraphQLError(\n `The enum value \"${enumTypeDef.name}.${enumValueDef.name}\" is deprecated. ${deprecationReason}`,\n {\n nodes: node,\n },\n ),\n );\n }\n },\n };\n}\n","import { specifiedRules, validate, NoUnusedFragmentsRule, KnownFragmentNamesRule, Kind, ExecutableDefinitionsRule, LoneSchemaDefinitionRule, UniqueOperationTypesRule, UniqueTypeNamesRule, UniqueEnumValueNamesRule, UniqueFieldDefinitionNamesRule, UniqueDirectiveNamesRule, KnownTypeNamesRule, KnownDirectivesRule, UniqueDirectivesPerLocationRule, PossibleTypeExtensionsRule, UniqueArgumentNamesRule, UniqueInputFieldNamesRule, UniqueVariableNamesRule, FragmentsOnCompositeTypesRule, ProvidedRequiredArgumentsRule, } from 'graphql';\nconst specifiedSDLRules = [\n LoneSchemaDefinitionRule,\n UniqueOperationTypesRule,\n UniqueTypeNamesRule,\n UniqueEnumValueNamesRule,\n UniqueFieldDefinitionNamesRule,\n UniqueDirectiveNamesRule,\n KnownTypeNamesRule,\n KnownDirectivesRule,\n UniqueDirectivesPerLocationRule,\n PossibleTypeExtensionsRule,\n UniqueArgumentNamesRule,\n UniqueInputFieldNamesRule,\n UniqueVariableNamesRule,\n FragmentsOnCompositeTypesRule,\n ProvidedRequiredArgumentsRule,\n];\nexport function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, isSchemaDocument) {\n const rules = specifiedRules.filter(rule => {\n if (rule === NoUnusedFragmentsRule || rule === ExecutableDefinitionsRule) {\n return false;\n }\n if (isRelayCompatMode && rule === KnownFragmentNamesRule) {\n return false;\n }\n return true;\n });\n if (customRules) {\n Array.prototype.push.apply(rules, customRules);\n }\n if (isSchemaDocument) {\n Array.prototype.push.apply(rules, specifiedSDLRules);\n }\n const errors = validate(schema, ast, rules);\n return errors.filter(error => {\n if (error.message.includes('Unknown directive') && error.nodes) {\n const node = error.nodes[0];\n if (node && node.kind === Kind.DIRECTIVE) {\n const name = node.name.value;\n if (name === 'arguments' || name === 'argumentDefinitions') {\n return false;\n }\n }\n }\n return true;\n });\n}\n//# sourceMappingURL=validateWithCustomRules.js.map","import { GraphQLError, print, validate, NoDeprecatedCustomRule, parse, } from 'graphql';\nimport { CharacterStream, onlineParser } from '../parser';\nimport { Range, validateWithCustomRules, Position } from '../utils';\nexport const SEVERITY = {\n Error: 'Error',\n Warning: 'Warning',\n Information: 'Information',\n Hint: 'Hint',\n};\nexport const DIAGNOSTIC_SEVERITY = {\n [SEVERITY.Error]: 1,\n [SEVERITY.Warning]: 2,\n [SEVERITY.Information]: 3,\n [SEVERITY.Hint]: 4,\n};\nconst invariant = (condition, message) => {\n if (!condition) {\n throw new Error(message);\n }\n};\nexport function getDiagnostics(query, schema = null, customRules, isRelayCompatMode, externalFragments) {\n var _a, _b;\n let ast = null;\n let fragments = '';\n if (externalFragments) {\n fragments =\n typeof externalFragments === 'string'\n ? externalFragments\n : externalFragments.reduce((acc, node) => acc + print(node) + '\\n\\n', '');\n }\n const enhancedQuery = fragments ? `${query}\\n\\n${fragments}` : query;\n try {\n ast = parse(enhancedQuery);\n }\n catch (error) {\n if (error instanceof GraphQLError) {\n const range = getRange((_b = (_a = error.locations) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : { line: 0, column: 0 }, enhancedQuery);\n return [\n {\n severity: DIAGNOSTIC_SEVERITY.Error,\n message: error.message,\n source: 'GraphQL: Syntax',\n range,\n },\n ];\n }\n throw error;\n }\n return validateQuery(ast, schema, customRules, isRelayCompatMode);\n}\nexport function validateQuery(ast, schema = null, customRules, isRelayCompatMode) {\n if (!schema) {\n return [];\n }\n const validationErrorAnnotations = validateWithCustomRules(schema, ast, customRules, isRelayCompatMode).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Error, 'Validation'));\n const deprecationWarningAnnotations = validate(schema, ast, [\n NoDeprecatedCustomRule,\n ]).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Warning, 'Deprecation'));\n return validationErrorAnnotations.concat(deprecationWarningAnnotations);\n}\nfunction annotations(error, severity, type) {\n if (!error.nodes) {\n return [];\n }\n const highlightedNodes = [];\n for (const [i, node] of error.nodes.entries()) {\n const highlightNode = node.kind !== 'Variable' && 'name' in node && node.name !== undefined\n ? node.name\n : 'variable' in node && node.variable !== undefined\n ? node.variable\n : node;\n if (highlightNode) {\n invariant(error.locations, 'GraphQL validation error requires locations.');\n const loc = error.locations[i];\n const highlightLoc = getLocation(highlightNode);\n const end = loc.column + (highlightLoc.end - highlightLoc.start);\n highlightedNodes.push({\n source: `GraphQL: ${type}`,\n message: error.message,\n severity,\n range: new Range(new Position(loc.line - 1, loc.column - 1), new Position(loc.line - 1, end)),\n });\n }\n }\n return highlightedNodes;\n}\nexport function getRange(location, queryText) {\n const parser = onlineParser();\n const state = parser.startState();\n const lines = queryText.split('\\n');\n invariant(lines.length >= location.line, 'Query text must have more lines than where the error happened');\n let stream = null;\n for (let i = 0; i < location.line; i++) {\n stream = new CharacterStream(lines[i]);\n while (!stream.eol()) {\n const style = parser.token(stream, state);\n if (style === 'invalidchar') {\n break;\n }\n }\n }\n invariant(stream, 'Expected Parser stream to be available.');\n const line = location.line - 1;\n const start = stream.getStartOfToken();\n const end = stream.getCurrentPosition();\n return new Range(new Position(line, start), new Position(line, end));\n}\nfunction getLocation(node) {\n const typeCastedNode = node;\n const location = typeCastedNode.loc;\n invariant(location, 'Expected ASTNode to have a location.');\n return location;\n}\n//# sourceMappingURL=getDiagnostics.js.map","import CodeMirror from 'codemirror';\nimport { getDiagnostics } from 'graphql-language-service';\nconst SEVERITY = ['error', 'warning', 'information', 'hint'];\nconst TYPE = {\n 'GraphQL: Validation': 'validation',\n 'GraphQL: Deprecation': 'deprecation',\n 'GraphQL: Syntax': 'syntax',\n};\nCodeMirror.registerHelper('lint', 'graphql', (text, options) => {\n const { schema, validationRules, externalFragments } = options;\n const rawResults = getDiagnostics(text, schema, validationRules, undefined, externalFragments);\n const results = rawResults.map(error => ({\n message: error.message,\n severity: error.severity ? SEVERITY[error.severity - 1] : SEVERITY[0],\n type: error.source ? TYPE[error.source] : undefined,\n from: CodeMirror.Pos(error.range.start.line, error.range.start.character),\n to: CodeMirror.Pos(error.range.end.line, error.range.end.character),\n }));\n return results;\n});\n//# sourceMappingURL=lint.js.map"],"names":["isExecutableDefinitionNode","node","Kind","isTypeSystemDefinitionNode","isTypeDefinitionNode","isTypeSystemExtensionNode","isTypeExtensionNode","ExecutableDefinitionsRule","context","definition","defName","GraphQLError","FieldsOnCorrectTypeRule","type","schema","fieldName","suggestion","didYouMean","getSuggestedTypeNames","getSuggestedFieldNames","isAbstractType","suggestedTypes","usageCount","possibleType","possibleInterface","_usageCount$possibleI","typeA","typeB","usageCountDiff","isInterfaceType","naturalCompare","x","isObjectType","possibleFieldNames","suggestionList","FragmentsOnCompositeTypesRule","typeCondition","typeFromAST","isCompositeType","typeStr","print","KnownArgumentNamesRule","KnownArgumentNamesOnDirectivesRule","argNode","argDef","fieldDef","parentType","argName","knownArgsNames","arg","suggestions","directiveArgs","definedDirectives","specifiedDirectives","directive","astDefinitions","def","_def$arguments","argsNodes","directiveNode","directiveName","knownArgs","KnownDirectivesRule","locationsMap","name","_key","_parent","_path","ancestors","locations","candidateLocation","getDirectiveLocationForASTPath","appliedTo","invariant","getDirectiveLocationForOperation","DirectiveLocation","parentNode","inspect","operation","OperationTypeNode","KnownFragmentNamesRule","fragmentName","KnownTypeNamesRule","existingTypesMap","definedTypes","typeNames","_1","parent","_2","typeName","_ancestors$","definitionNode","isSDL","isSDLNode","standardTypeNames","specifiedScalarTypes","introspectionTypes","value","LoneAnonymousOperationRule","operationCount","MAX_LISTS_DEPTH","MaxIntrospectionDepthRule","checkDepth","visitedFragments","depth","fragment","child","NoFragmentCyclesRule","visitedFrags","spreadPath","spreadPathIndexByName","detectCycleRecursive","spreadNodes","spreadNode","spreadName","cycleIndex","spreadFragment","cyclePath","viaPath","s","NoUndefinedVariablesRule","variableNameDefined","usages","varName","NoUnusedFragmentsRule","operationDefs","fragmentDefs","fragmentNameUsed","fragmentDef","fragName","NoUnusedVariablesRule","variableDefs","variableNameUsed","variableDef","variableName","sortValueNode","valueNode","sortFields","fields","fieldNode","fieldA","fieldB","reasonMessage","reason","responseName","subReason","OverlappingFieldsCanBeMergedRule","comparedFieldsAndFragmentPairs","OrderedPairSet","comparedFragmentPairs","PairSet","cachedFieldsAndFragmentNames","selectionSet","conflicts","findConflictsWithinSelectionSet","fields1","fields2","reasonMsg","fieldMap","fragmentNames","getFieldsAndFragmentNames","collectConflictsWithin","i","collectConflictsBetweenFieldsAndFragment","j","collectConflictsBetweenFragments","areMutuallyExclusive","fieldMap2","referencedFragmentNames","getReferencedFieldsAndFragmentNames","collectConflictsBetween","referencedFragmentName","fragmentName1","fragmentName2","fragment1","fragment2","fieldMap1","referencedFragmentNames1","referencedFragmentNames2","referencedFragmentName2","referencedFragmentName1","findConflictsBetweenSubSelectionSets","parentType1","selectionSet1","parentType2","selectionSet2","fragmentNames1","fragmentNames2","conflict","findConflict","parentFieldsAreMutuallyExclusive","field1","field2","node1","def1","node2","def2","name1","name2","sameArguments","type1","type2","doTypesConflict","getNamedType","subfieldConflicts","args1","args2","values2","arg1","value1","value2","stringifyValue","isListType","isNonNullType","isLeafType","cached","nodeAndDefs","_collectFieldsAndFragmentNames","result","fragmentType","selection","inlineFragmentType","a","b","weaklyPresent","_this$_data$get","map","PossibleFragmentSpreadsRule","fragType","doTypesOverlap","parentTypeStr","fragTypeStr","getFragmentType","frag","ProvidedRequiredArgumentsRule","ProvidedRequiredArgumentsOnDirectivesRule","_fieldNode$arguments","providedArgs","isRequiredArgument","argTypeStr","_schema$getDirectives","requiredArgsMap","keyMap","argNodes","isRequiredArgumentNode","requiredArgs","_directiveNode$argume","argNodeMap","argType","isType","ScalarLeafsRule","getArgumentValues","variableValues","_node$arguments","coercedValues","argumentNodes","argumentNode","isNull","hasOwnProperty","coercedValue","valueFromAST","getDirectiveValues","directiveDef","_node$directives","obj","prop","collectFields","fragments","runtimeType","collectFieldsImpl","visitedFragmentNames","shouldIncludeNode","getFieldEntryKey","fieldList","doesFragmentConditionMatch","skip","GraphQLSkipDirective","include","GraphQLIncludeDirective","typeConditionNode","conditionalType","SingleFieldSubscriptionsRule","subscriptionType","operationName","document","extraFieldSelections","fieldNodes","groupBy","list","keyFn","item","key","group","UniqueArgumentNamesRule","checkArgUniqueness","_parentNode$arguments","seenArgs","UniqueDirectivesPerLocationRule","uniqueDirectiveMap","schemaDirectives","typeDirectivesMap","seenDirectives","UniqueFragmentNamesRule","knownFragmentNames","UniqueInputFieldNamesRule","knownNameStack","knownNames","prevKnownNames","UniqueOperationNamesRule","knownOperationNames","UniqueVariableNamesRule","operationNode","_operationNode$variab","variableDefinitions","seenVariableDefinitions","variableNodes","ValuesOfCorrectTypeRule","getNullableType","isValidValueNode","isInputObjectType","fieldNodeMap","field","isRequiredInputField","validateOneOfInputObject","locationType","error","_fieldNodeMap$keys$","keys","isNullLiteral","isVariable","VariablesAreInputTypesRule","isInputType","VariablesInAllowedPositionRule","varDefMap","defaultValue","varDef","varType","allowedVariableUsage","varTypeStr","varDefaultValue","locationDefaultValue","nullableLocationType","isTypeSubTypeOf","recommendedRules","specifiedRules","ASTValidationContext","ast","onError","defNode","spreads","setsToVisit","set","collectedNames","nodesToVisit","spread","ValidationContext","typeInfo","newUsages","TypeInfo","visit","visitWithTypeInfo","variable","validate","documentAST","rules","options","_options$maxErrors","maxErrors","devAssert","assertValidSchema","abortObj","errors","visitor","visitInParallel","rule","e","NoDeprecatedCustomRule","deprecationReason","inputObjectDef","inputFieldDef","enumValueDef","enumTypeDef","validateWithCustomRules","customRules","isRelayCompatMode","isSchemaDocument","SEVERITY","DIAGNOSTIC_SEVERITY","condition","message","getDiagnostics","query","externalFragments","_a","_b","acc","enhancedQuery","parse","range","getRange","validateQuery","validationErrorAnnotations","annotations","deprecationWarningAnnotations","severity","highlightedNodes","highlightNode","loc","highlightLoc","getLocation","end","Range","Position","location","queryText","parser","onlineParser","state","lines","stream","CharacterStream","line","start","TYPE","CodeMirror","text","validationRules"],"mappings":"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","x_google_ignoreList":[0,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,31,32,33,34,35,36,37,38]}