From c9c78c42f86b7ad05a6585b58272afe013f5ed81 Mon Sep 17 00:00:00 2001 From: Lennard Sprong Date: Fri, 6 Dec 2024 12:57:31 +0100 Subject: [PATCH] feat: Specify caching fields with typePolicy directive --- .../AnimalSchema.graphqls | 6 +- .../MockGraphQLType.swift | 4 +- .../Templates/ObjectTemplateTests.swift | 44 +- .../ApolloTests/CacheKeyResolutionTests.swift | 51 +++ .../Templates/ObjectTemplate.swift | 11 +- .../ApolloCodegenFrontendBundle.swift | 2 +- .../GraphQLCompiler/GraphQLSchema.swift | 7 +- .../src/__tests__/typePolicyDirectiveTests.ts | 425 ++++++++++++++++++ .../JavaScript/src/compiler/ir.ts | 2 +- .../GraphQLCompiler/JavaScript/src/index.ts | 5 +- .../utilities/apolloCodegenSchemaExtension.ts | 41 +- .../src/utilities/typePolicyDirective.ts | 177 ++++++++ .../Sources/ApolloAPI/SchemaMetadata.swift | 26 +- .../ApolloAPI/SchemaTypes/Object.swift | 14 +- 14 files changed, 785 insertions(+), 30 deletions(-) create mode 100644 apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/__tests__/typePolicyDirectiveTests.ts create mode 100644 apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/typePolicyDirective.ts diff --git a/Sources/AnimalKingdomAPI/animalkingdom-graphql/AnimalSchema.graphqls b/Sources/AnimalKingdomAPI/animalkingdom-graphql/AnimalSchema.graphqls index 4e67e5228..b2fc323c8 100644 --- a/Sources/AnimalKingdomAPI/animalkingdom-graphql/AnimalSchema.graphqls +++ b/Sources/AnimalKingdomAPI/animalkingdom-graphql/AnimalSchema.graphqls @@ -41,7 +41,7 @@ input PetSearchFilters { measurements: MeasurementsInput } -interface Animal { +interface Animal @typePolicy(keyFields: "id") { id: ID! species: String! height: Height! @@ -49,7 +49,7 @@ interface Animal { skinCovering: SkinCovering } -interface Pet { +interface Pet @typePolicy(keyFields: "id") { id: ID! humanName: String favoriteToy: String! @@ -198,5 +198,5 @@ enum SkinCovering { FUR HAIR FEATHERS - SCALES + SCALES } diff --git a/Tests/ApolloCodegenInternalTestHelpers/MockGraphQLType.swift b/Tests/ApolloCodegenInternalTestHelpers/MockGraphQLType.swift index 5f893da5c..988c0baab 100644 --- a/Tests/ApolloCodegenInternalTestHelpers/MockGraphQLType.swift +++ b/Tests/ApolloCodegenInternalTestHelpers/MockGraphQLType.swift @@ -20,13 +20,15 @@ public extension GraphQLObjectType { _ name: String = "", interfaces: [GraphQLInterfaceType] = [], fields: [String: GraphQLField] = [:], + keyFields: [String] = [], documentation: String? = nil ) -> GraphQLObjectType { GraphQLObjectType( name: GraphQLName(schemaName: name), documentation: documentation, fields: fields, - interfaces: interfaces + interfaces: interfaces, + keyFields: keyFields ) } } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/ObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/ObjectTemplateTests.swift index c345895e1..501d0a310 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/ObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/ObjectTemplateTests.swift @@ -20,12 +20,14 @@ class ObjectTemplateTests: XCTestCase { name: String = "Dog", customName: String? = nil, interfaces: [GraphQLInterfaceType] = [], + keyFields: [String] = [], documentation: String? = nil, config: ApolloCodegenConfiguration = .mock() ) { let objectType = GraphQLObjectType.mock( name, interfaces: interfaces, + keyFields: keyFields, documentation: documentation ) objectType.name.customName = customName @@ -82,7 +84,7 @@ class ObjectTemplateTests: XCTestCase { implementedInterfaces: [ TestSchema.Interfaces.Animal.self, TestSchema.Interfaces.Pet.self - ] + ], """ // when @@ -106,7 +108,7 @@ class ObjectTemplateTests: XCTestCase { implementedInterfaces: [ Interfaces.Animal.self, Interfaces.Pet.self - ] + ], """ // when @@ -121,7 +123,7 @@ class ObjectTemplateTests: XCTestCase { buildSubject() let expected = """ - implementedInterfaces: [] + implementedInterfaces: [], """ // when @@ -130,6 +132,39 @@ class ObjectTemplateTests: XCTestCase { // then expect(actual).to(equalLineByLine(expected, atLine: 3, ignoringExtraLines: true)) } + + func test_render_givenKeyField_rendersKeyFieldArray() { + // given + buildSubject(keyFields: ["id"]) + + let expected = """ + keyFields: ["id"] + """ + + // when + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 4, ignoringExtraLines: true)) + } + + func test_render_givenMultipleKeyFields_rendersKeyFieldArray() { + // given + buildSubject(keyFields: ["id", "species"]) + + let expected = """ + keyFields: [ + "id", + "species" + ] + """ + + // when + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 4, ignoringExtraLines: true)) + } // MARK: Documentation Tests @@ -213,7 +248,8 @@ class ObjectTemplateTests: XCTestCase { // Renamed from GraphQL schema value: 'MyObject' static let MyCustomObject = ApolloAPI.Object( typename: "MyObject", - implementedInterfaces: [TestSchema.Interfaces.MyCustomInterface.self] + implementedInterfaces: [TestSchema.Interfaces.MyCustomInterface.self], + keyFields: nil ) """ diff --git a/Tests/ApolloTests/CacheKeyResolutionTests.swift b/Tests/ApolloTests/CacheKeyResolutionTests.swift index 571319e94..eba894d66 100644 --- a/Tests/ApolloTests/CacheKeyResolutionTests.swift +++ b/Tests/ApolloTests/CacheKeyResolutionTests.swift @@ -209,4 +209,55 @@ class CacheKeyResolutionTests: XCTestCase { expect(actual).to(equal("GreekLetters:δ")) } + func test__schemaConfiguration__givenSingleKeyField_shouldReturnKeyFieldValue() { + let Delta = Object(typename: "Dog", implementedInterfaces: [], keyFields: ["id"]) + + MockSchemaMetadata.stub_objectTypeForTypeName({ _ in Delta }) + + let object: JSONObject = [ + "__typename": "Dog", + "id": "10", + "name": "Beagle" + ] + + let objectDict = NetworkResponseExecutionSource().opaqueObjectDataWrapper(for: object) + let actual = MockSchemaMetadata.cacheKey(for: objectDict) + + expect(actual).to(equal("Dog:10")) + } + + func test__schemaConfiguration__givenMultipleKeyFields_shouldReturnKeyFieldValues() { + let Delta = Object(typename: "Dog", implementedInterfaces: [], keyFields: ["id", "name"]) + + MockSchemaMetadata.stub_objectTypeForTypeName({ _ in Delta }) + + let object: JSONObject = [ + "__typename": "Dog", + "id": "10", + "name": #"Be\ag+le"#, + "height": 20, + ] + + let objectDict = NetworkResponseExecutionSource().opaqueObjectDataWrapper(for: object) + let actual = MockSchemaMetadata.cacheKey(for: objectDict) + + expect(actual).to(equal(#"Dog:10+Be\\ag\+le"#)) + } + + func test__schemaConfiguration__givenMissingKeyFields_shouldReturnNil() { + let Delta = Object(typename: "Dog", implementedInterfaces: [], keyFields: ["id", "name"]) + + MockSchemaMetadata.stub_objectTypeForTypeName({ _ in Delta }) + + let object: JSONObject = [ + "__typename": "Dog", + "id": "10", + ] + + let objectDict = NetworkResponseExecutionSource().opaqueObjectDataWrapper(for: object) + let actual = MockSchemaMetadata.cacheKey(for: objectDict) + + expect(actual).to(beNil()) + } + } diff --git a/apollo-ios-codegen/Sources/ApolloCodegenLib/Templates/ObjectTemplate.swift b/apollo-ios-codegen/Sources/ApolloCodegenLib/Templates/ObjectTemplate.swift index 38c0c0d5e..22b6c1ace 100644 --- a/apollo-ios-codegen/Sources/ApolloCodegenLib/Templates/ObjectTemplate.swift +++ b/apollo-ios-codegen/Sources/ApolloCodegenLib/Templates/ObjectTemplate.swift @@ -20,10 +20,19 @@ struct ObjectTemplate: TemplateRenderer { \(graphqlObject.name.typeNameDocumentation) static let \(graphqlObject.render(as: .typename)) = \(config.ApolloAPITargetName).Object( typename: "\(graphqlObject.name.schemaName)\", - implementedInterfaces: \(ImplementedInterfacesTemplate()) + implementedInterfaces: \(ImplementedInterfacesTemplate()), + keyFields: \(KeyFieldsTemplate()) ) """ } + + private func KeyFieldsTemplate() -> TemplateString { + guard let fields = graphqlObject.keyFields, !fields.isEmpty else { return "nil" } + + return """ + [\(list: fields.map { "\"\($0)\"" })] + """ + } private func ImplementedInterfacesTemplate() -> TemplateString { return """ diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/ApolloCodegenFrontendBundle.swift b/apollo-ios-codegen/Sources/GraphQLCompiler/ApolloCodegenFrontendBundle.swift index a430fa4e4..3409878d7 100644 --- a/apollo-ios-codegen/Sources/GraphQLCompiler/ApolloCodegenFrontendBundle.swift +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/ApolloCodegenFrontendBundle.swift @@ -1 +1 @@ -let ApolloCodegenFrontendBundle: String = #"var ApolloCodegenFrontend=function(e){"use strict";function t(e){return"object"==typeof e&&null!==e}function n(e,t){throw new Error(null!=t?t:"Unexpected invariant triggered.")}const r=/\r\n|[\n\r]/g;function i(e,t){let i=0,o=1;for(const s of e.body.matchAll(r)){if("number"==typeof s.index||n(),s.index>=t)break;i=s.index+s[0].length,o+=1}return{line:o,column:t+1-i}}function o(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,a=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${a}:${u}\n`,p=r.split(/\r\n|[\n\r]/g),d=p[i];if(d.length>120){const e=Math.floor(u/80),t=u%80,n=[];for(let e=0;e["|",e])),["|","^".padStart(t)],["|",n[e+1]]])}return l+s([[a-1+" |",p[i-1]],[`${a} |`,d],["|","^".padStart(u)],[`${a+1} |`,p[i+1]]])}function s(e){const t=e.filter((([e,t])=>void 0!==t)),n=Math.max(...t.map((([e])=>e.length)));return t.map((([e,t])=>e.padStart(n)+(t?" "+t:""))).join("\n")}class GraphQLError extends Error{constructor(e,n={}){const{nodes:r,source:o,positions:s,path:c,originalError:u,extensions:l}=n;super(e),this.name="GraphQLError",this.path=c??void 0,this.originalError=u??void 0,this.nodes=a(Array.isArray(r)?r:r?[r]:void 0);const p=a(this.nodes?.map((e=>e.loc)).filter((e=>null!=e)));this.source=o??p?.[0]?.source,this.positions=s??p?.map((e=>e.start)),this.locations=s&&o?s.map((e=>i(o,e))):p?.map((e=>i(e.source,e.start)));const d=t(u?.extensions)?u?.extensions:void 0;this.extensions=l??d??Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),null!=u?.stack?Object.defineProperty(this,"stack",{value:u.stack,writable:!0,configurable:!0}):null!=Error.captureStackTrace?Error.captureStackTrace(this,GraphQLError):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let e=this.message;if(this.nodes)for(const n of this.nodes)n.loc&&(e+="\n\n"+o((t=n.loc).source,i(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+o(this.source,t);var t;return e}toJSON(){const e={message:this.message};return null!=this.locations&&(e.locations=this.locations),null!=this.path&&(e.path=this.path),null!=this.extensions&&Object.keys(this.extensions).length>0&&(e.extensions=this.extensions),e}}function a(e){return void 0===e||0===e.length?void 0:e}function c(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,{source:e,positions:[t]})}class Location{constructor(e,t,n){this.start=e.start,this.end=t.end,this.startToken=e,this.endToken=t,this.source=n}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}}class Token{constructor(e,t,n,r,i,o){this.kind=e,this.start=t,this.end=n,this.line=r,this.column=i,this.value=o,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}}const u={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet","nullabilityAssertion"],Argument:["name","value"],ListNullabilityOperator:["nullabilityAssertion"],NonNullAssertion:["nullabilityAssertion"],ErrorBoundary:["nullabilityAssertion"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]},l=new Set(Object.keys(u));function p(e){const t=e?.kind;return"string"==typeof t&&l.has(t)}var d,f,h,m;function E(e){return 9===e||32===e}function T(e){return e>=48&&e<=57}function y(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return y(e)||95===e}function v(e){return y(e)||T(e)||95===e}function I(e){let t=Number.MAX_SAFE_INTEGER,n=null,r=-1;for(let i=0;i0===n?e:e.slice(t))).slice(n??0,r+1)}function g(e){let t=0;for(;t",e.EOF="",e.BANG="!",e.QUESTION_MARK="?",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"}(m||(m={}));class Lexer{constructor(e){const t=new Token(m.SOF,0,0,0,0);this.source=e,this.lastToken=t,this.token=t,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){this.lastToken=this.token;return this.token=this.lookahead()}lookahead(){let e=this.token;if(e.kind!==m.EOF)do{if(e.next)e=e.next;else{const t=D(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===m.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&b(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function b(e){return e>=56320&&e<=57343}function A(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return m.EOF;if(n>=32&&n<=126){const e=String.fromCodePoint(n);return'"'===e?"'\"'":`"${e}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function w(e,t,n,r,i){const o=e.line,s=1+n-e.lineStart;return new Token(t,n,r,o,s,i)}function D(e,t){const n=e.source.body,r=n.length;let i=t;for(;i=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function U(e,t){const n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:"\n",size:2};case 114:return{value:"\r",size:2};case 116:return{value:"\t",size:2}}throw c(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function M(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const u=[];for(;oB)return"[Array]";const n=Math.min(j,e.length),r=e.length-n,i=[];for(let r=0;r1&&i.push(`... ${r} more items`);return"["+i.join(", ")+"]"}(e,n);return function(e,t){const n=Object.entries(e);if(0===n.length)return"{}";if(t.length>B)return"["+function(e){const t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if("Object"===t&&"function"==typeof e.constructor){const t=e.constructor.name;if("string"==typeof t&&""!==t)return t}return t}(e)+"]";const r=n.map((([e,n])=>e+": "+J(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const q=null!=globalThis.process?function(e,t){return e instanceof t}:function(e,t){if(e instanceof t)return!0;if("object"==typeof e&&null!==e){const n=t.prototype[Symbol.toStringTag];if(n===(Symbol.toStringTag in e?e[Symbol.toStringTag]:e.constructor?.name)){const t=Y(e);throw new Error(`Cannot use ${n} "${t}" from another module or realm.\n\nEnsure that there is only one instance of "graphql" in the node_modules\ndirectory. If different versions of "graphql" are the dependencies of other\nrelied on modules, use "resolutions" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate "graphql" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`)}}return!1};class Source{constructor(e,t="GraphQL request",n={line:1,column:1}){this.body=e,this.name=t,this.locationOffset=n,this.locationOffset.line>0||P(0,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||P(0,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function K(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t={}){const n=function(e){return q(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t,this._tokenCounter=0}parseName(){const e=this.expectToken(m.NAME);return this.node(e,{kind:h.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:h.DOCUMENT,definitions:this.many(m.SOF,this.parseDefinition,m.EOF)})}parseDefinition(){if(this.peek(m.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===m.NAME){switch(t.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(e)throw c(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(t.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(t)}parseOperationDefinition(){const e=this._lexer.token;if(this.peek(m.BRACE_L))return this.node(e,{kind:h.OPERATION_DEFINITION,operation:d.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(m.NAME)&&(n=this.parseName()),this.node(e,{kind:h.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(m.NAME);switch(e.value){case"query":return d.QUERY;case"mutation":return d.MUTATION;case"subscription":return d.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(m.PAREN_L,this.parseVariableDefinition,m.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:h.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(m.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(m.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(m.DOLLAR),this.node(e,{kind:h.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:h.SELECTION_SET,selections:this.many(m.BRACE_L,this.parseSelection,m.BRACE_R)})}parseSelection(){return this.peek(m.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(m.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:h.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),nullabilityAssertion:this.parseNullabilityAssertion(),directives:this.parseDirectives(!1),selectionSet:this.peek(m.BRACE_L)?this.parseSelectionSet():void 0})}parseNullabilityAssertion(){if(!0!==this._options.experimentalClientControlledNullability)return;const e=this._lexer.token;let t;if(this.expectOptionalToken(m.BRACKET_L)){const n=this.parseNullabilityAssertion();this.expectToken(m.BRACKET_R),t=this.node(e,{kind:h.LIST_NULLABILITY_OPERATOR,nullabilityAssertion:n})}return this.expectOptionalToken(m.BANG)?t=this.node(e,{kind:h.NON_NULL_ASSERTION,nullabilityAssertion:t}):this.expectOptionalToken(m.QUESTION_MARK)&&(t=this.node(e,{kind:h.ERROR_BOUNDARY,nullabilityAssertion:t})),t}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(m.PAREN_L,t,m.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(m.COLON),this.node(t,{kind:h.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(m.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(m.NAME)?this.node(e,{kind:h.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:h.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){const e=this._lexer.token;return this.expectKeyword("fragment"),!0===this._options.allowLegacyFragmentVariables?this.node(e,{kind:h.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(e,{kind:h.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if("on"===this._lexer.token.value)throw this.unexpected();return this.parseName()}parseValueLiteral(e){const t=this._lexer.token;switch(t.kind){case m.BRACKET_L:return this.parseList(e);case m.BRACE_L:return this.parseObject(e);case m.INT:return this.advanceLexer(),this.node(t,{kind:h.INT,value:t.value});case m.FLOAT:return this.advanceLexer(),this.node(t,{kind:h.FLOAT,value:t.value});case m.STRING:case m.BLOCK_STRING:return this.parseStringLiteral();case m.NAME:switch(this.advanceLexer(),t.value){case"true":return this.node(t,{kind:h.BOOLEAN,value:!0});case"false":return this.node(t,{kind:h.BOOLEAN,value:!1});case"null":return this.node(t,{kind:h.NULL});default:return this.node(t,{kind:h.ENUM,value:t.value})}case m.DOLLAR:if(e){if(this.expectToken(m.DOLLAR),this._lexer.token.kind===m.NAME){const e=this._lexer.token.value;throw c(this._lexer.source,t.start,`Unexpected variable "$${e}" in constant value.`)}throw this.unexpected(t)}return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){const e=this._lexer.token;return this.advanceLexer(),this.node(e,{kind:h.STRING,value:e.value,block:e.kind===m.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:h.LIST,values:this.any(m.BRACKET_L,(()=>this.parseValueLiteral(e)),m.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:h.OBJECT,fields:this.any(m.BRACE_L,(()=>this.parseObjectField(e)),m.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(m.COLON),this.node(t,{kind:h.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(m.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(m.AT),this.node(t,{kind:h.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(m.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(m.BRACKET_R),t=this.node(e,{kind:h.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(m.BANG)?this.node(e,{kind:h.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:h.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(m.STRING)||this.peek(m.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("schema");const n=this.parseConstDirectives(),r=this.many(m.BRACE_L,this.parseOperationTypeDefinition,m.BRACE_R);return this.node(e,{kind:h.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(m.COLON);const n=this.parseNamedType();return this.node(e,{kind:h.OPERATION_TYPE_DEFINITION,operation:t,type:n})}parseScalarTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("scalar");const n=this.parseName(),r=this.parseConstDirectives();return this.node(e,{kind:h.SCALAR_TYPE_DEFINITION,description:t,name:n,directives:r})}parseObjectTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("type");const n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(e,{kind:h.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(m.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(m.BRACE_L,this.parseFieldDefinition,m.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(m.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:h.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(m.PAREN_L,this.parseInputValueDef,m.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(m.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(m.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:h.INPUT_VALUE_DEFINITION,description:t,name:n,type:r,defaultValue:i,directives:o})}parseInterfaceTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("interface");const n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(e,{kind:h.INTERFACE_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseUnionTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("union");const n=this.parseName(),r=this.parseConstDirectives(),i=this.parseUnionMemberTypes();return this.node(e,{kind:h.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(m.EQUALS)?this.delimitedMany(m.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("enum");const n=this.parseName(),r=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();return this.node(e,{kind:h.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(m.BRACE_L,this.parseEnumValueDefinition,m.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:h.ENUM_VALUE_DEFINITION,description:t,name:n,directives:r})}parseEnumValueName(){if("true"===this._lexer.token.value||"false"===this._lexer.token.value||"null"===this._lexer.token.value)throw c(this._lexer.source,this._lexer.token.start,`${X(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("input");const n=this.parseName(),r=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();return this.node(e,{kind:h.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(m.BRACE_L,this.parseInputValueDef,m.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===m.NAME)switch(e.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(e)}parseSchemaExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");const t=this.parseConstDirectives(),n=this.optionalMany(m.BRACE_L,this.parseOperationTypeDefinition,m.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:h.SCHEMA_EXTENSION,directives:t,operationTypes:n})}parseScalarTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");const t=this.parseName(),n=this.parseConstDirectives();if(0===n.length)throw this.unexpected();return this.node(e,{kind:h.SCALAR_TYPE_EXTENSION,name:t,directives:n})}parseObjectTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");const t=this.parseName(),n=this.parseImplementsInterfaces(),r=this.parseConstDirectives(),i=this.parseFieldsDefinition();if(0===n.length&&0===r.length&&0===i.length)throw this.unexpected();return this.node(e,{kind:h.OBJECT_TYPE_EXTENSION,name:t,interfaces:n,directives:r,fields:i})}parseInterfaceTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");const t=this.parseName(),n=this.parseImplementsInterfaces(),r=this.parseConstDirectives(),i=this.parseFieldsDefinition();if(0===n.length&&0===r.length&&0===i.length)throw this.unexpected();return this.node(e,{kind:h.INTERFACE_TYPE_EXTENSION,name:t,interfaces:n,directives:r,fields:i})}parseUnionTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");const t=this.parseName(),n=this.parseConstDirectives(),r=this.parseUnionMemberTypes();if(0===n.length&&0===r.length)throw this.unexpected();return this.node(e,{kind:h.UNION_TYPE_EXTENSION,name:t,directives:n,types:r})}parseEnumTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");const t=this.parseName(),n=this.parseConstDirectives(),r=this.parseEnumValuesDefinition();if(0===n.length&&0===r.length)throw this.unexpected();return this.node(e,{kind:h.ENUM_TYPE_EXTENSION,name:t,directives:n,values:r})}parseInputObjectTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");const t=this.parseName(),n=this.parseConstDirectives(),r=this.parseInputFieldsDefinition();if(0===n.length&&0===r.length)throw this.unexpected();return this.node(e,{kind:h.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(m.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:h.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(m.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.hasOwn(f,t.value))return t;throw this.unexpected(e)}node(e,t){return!0!==this._options.noLocation&&(t.loc=new Location(e,this._lexer.lastToken,this._lexer.source)),t}peek(e){return this._lexer.token.kind===e}expectToken(e){const t=this._lexer.token;if(t.kind===e)return this.advanceLexer(),t;throw c(this._lexer.source,t.start,`Expected ${z(e)}, found ${X(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this.advanceLexer(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==m.NAME||t.value!==e)throw c(this._lexer.source,t.start,`Expected "${e}", found ${X(t)}.`);this.advanceLexer()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===m.NAME&&t.value===e&&(this.advanceLexer(),!0)}unexpected(e){const t=e??this._lexer.token;return c(this._lexer.source,t.start,`Unexpected ${X(t)}.`)}any(e,t,n){this.expectToken(e);const r=[];for(;!this.expectOptionalToken(n);)r.push(t.call(this));return r}optionalMany(e,t,n){if(this.expectOptionalToken(e)){const e=[];do{e.push(t.call(this))}while(!this.expectOptionalToken(n));return e}return[]}many(e,t,n){this.expectToken(e);const r=[];do{r.push(t.call(this))}while(!this.expectOptionalToken(n));return r}delimitedMany(e,t){this.expectOptionalToken(e);const n=[];do{n.push(t.call(this))}while(this.expectOptionalToken(e));return n}advanceLexer(){const{maxTokens:e}=this._options,t=this._lexer.advance();if(void 0!==e&&t.kind!==m.EOF&&(++this._tokenCounter,this._tokenCounter>e))throw c(this._lexer.source,t.start,`Document contains more than ${e} tokens. Parsing aborted.`)}}function X(e){const t=e.value;return z(e.kind)+(null!=t?` "${t}"`:"")}function z(e){return function(e){return e===m.BANG||e===m.QUESTION_MARK||e===m.DOLLAR||e===m.AMP||e===m.PAREN_L||e===m.PAREN_R||e===m.SPREAD||e===m.COLON||e===m.EQUALS||e===m.AT||e===m.BRACKET_L||e===m.BRACKET_R||e===m.BRACE_L||e===m.PIPE||e===m.BRACE_R}(e)?`"${e}"`:e}class AccumulatorMap extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(e,t){const n=this.get(e);void 0===n?this.set(e,[t]):n.push(t)}}function H(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}function W(e){return Z("and",e)}function Z(e,t){switch(0!==t.length||n(),t.length){case 1:return t[0];case 2:return t[0]+" "+e+" "+t[1]}const r=t.slice(0,-1),i=t.at(-1);return r.join(", ")+", "+e+" "+i}const ee=5;function te(e,t){const[n,r]=t?[e,t]:[void 0,e];if(0===r.length)return"";let i=" Did you mean ";null!=n&&(i+=n+" ");return i+Z("or",r.slice(0,ee).map((e=>`"${e}"`)))+"?"}function ne(e){return e}function re(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function ie(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function oe(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-se,o=t.charCodeAt(r)}while(ce(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const se=48,ae=57;function ce(e){return!isNaN(e)&&se<=e&&e<=ae}function ue(e,t){const n=Object.create(null),r=new LexicalDistance(e),i=Math.floor(.4*e.length)+1;for(const e of t){const t=r.measure(e,i);void 0!==t&&(n[e]=t)}return Object.keys(n).sort(((e,t)=>{const r=n[e]-n[t];return 0!==r?r:oe(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=le(this._inputLowerCase),this._rows=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)]}measure(e,t){if(this._input===e)return 0;const n=e.toLowerCase();if(this._inputLowerCase===n)return 1;let r=le(n),i=this._inputArray;if(r.lengtht)return;const a=this._rows;for(let e=0;e<=s;e++)a[0][e]=e;for(let e=1;e<=o;e++){const n=a[(e-1)%3],o=a[e%3];let c=o[0]=e;for(let t=1;t<=s;t++){const s=r[e-1]===i[t-1]?0:1;let u=Math.min(n[t]+1,o[t-1]+1,n[t-1]+s);if(e>1&&t>1&&r[e-1]===i[t-2]&&r[e-2]===i[t-1]){const n=a[(e-2)%3][t-2];u=Math.min(u,n+1)}ut)return}const c=a[o%3][s];return c<=t?c:void 0}}function le(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>Ie(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=_e("(",Ie(e.variableDefinitions,", "),")"),n=Ie([e.operation,Ie([e.name,t]),Ie(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+_e(" = ",n)+_e(" ",Ie(r," "))},SelectionSet:{leave:({selections:e})=>ge(e)},Field:{leave({alias:e,name:t,arguments:n,nullabilityAssertion:r,directives:i,selectionSet:o}){const s=Ie([_e("",e,": "),t],"");let a=s+_e("(",Ie(n,", "),")");return a.length>80&&(a=s+_e("(\n",Oe(Ie(n,"\n")),"\n)")),Ie([a,r,_e(" ",Ie(i," ")),_e(" ",o)])}},Argument:{leave:({name:e,value:t})=>e+": "+t},ListNullabilityOperator:{leave:({nullabilityAssertion:e})=>Ie(["[",e,"]"])},NonNullAssertion:{leave:({nullabilityAssertion:e})=>Ie([e,"!"])},ErrorBoundary:{leave:({nullabilityAssertion:e})=>Ie([e,"?"])},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+_e(" ",Ie(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>Ie(["...",_e("on ",e),Ie(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${_e("(",Ie(n,", "),")")} on ${t} ${_e("",Ie(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>!0===t?function(e){const t=e.replaceAll('"""','\\"""'),n=t.split(/\r\n|[\n\r]/g),r=1===n.length,i=n.length>1&&n.slice(1).every((e=>0===e.length||E(e.charCodeAt(0)))),o=t.endsWith('\\"""'),s=e.endsWith('"')&&!o,a=e.endsWith("\\"),c=s||a,u=!r||e.length>70||c||i||o;let l="";const p=r&&E(e.charCodeAt(0));return(u&&!p||i)&&(l+="\n"),l+=t,(u||c)&&(l+="\n"),'"""'+l+'"""'}(e):`"${e.replace(de,fe)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>{const t="["+Ie(e,", ")+"]";return t.length>80?"[\n"+Oe(Ie(e,"\n"))+"\n]":t}},ObjectValue:{leave:({fields:e})=>{const t="{ "+Ie(e,", ")+" }";return t.length>80?ge(e):t}},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+_e("(",Ie(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>_e("",e,"\n")+Ie(["schema",Ie(t," "),ge(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>_e("",e,"\n")+Ie(["scalar",t,Ie(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>_e("",e,"\n")+Ie(["type",t,_e("implements ",Ie(n," & ")),Ie(r," "),ge(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>_e("",e,"\n")+t+(Se(n)?_e("(\n",Oe(Ie(n,"\n")),"\n)"):_e("(",Ie(n,", "),")"))+": "+r+_e(" ",Ie(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>_e("",e,"\n")+Ie([t+": "+n,_e("= ",r),Ie(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>_e("",e,"\n")+Ie(["interface",t,_e("implements ",Ie(n," & ")),Ie(r," "),ge(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>_e("",e,"\n")+Ie(["union",t,Ie(n," "),_e("= ",Ie(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>_e("",e,"\n")+Ie(["enum",t,Ie(n," "),ge(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>_e("",e,"\n")+Ie([t,Ie(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>_e("",e,"\n")+Ie(["input",t,Ie(n," "),ge(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>_e("",e,"\n")+"directive @"+t+(Se(n)?_e("(\n",Oe(Ie(n,"\n")),"\n)"):_e("(",Ie(n,", "),")"))+(r?" repeatable":"")+" on "+Ie(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>Ie(["extend schema",Ie(e," "),ge(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>Ie(["extend scalar",e,Ie(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>Ie(["extend type",e,_e("implements ",Ie(t," & ")),Ie(n," "),ge(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>Ie(["extend interface",e,_e("implements ",Ie(t," & ")),Ie(n," "),ge(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>Ie(["extend union",e,Ie(t," "),_e("= ",Ie(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>Ie(["extend enum",e,Ie(t," "),ge(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>Ie(["extend input",e,Ie(t," "),ge(n)]," ")}};function Ie(e,t=""){return e?.filter((e=>e)).join(t)??""}function ge(e){return _e("{\n",Oe(Ie(e,"\n")),"\n}")}function _e(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Oe(e){return _e(" ",e.replaceAll("\n","\n "))}function Se(e){return e?.some((e=>e.includes("\n")))??!1}function Le(e,t){switch(e.kind){case h.NULL:return null;case h.INT:return parseInt(e.value,10);case h.FLOAT:return parseFloat(e.value);case h.STRING:case h.ENUM:case h.BOOLEAN:return e.value;case h.LIST:return e.values.map((e=>Le(e,t)));case h.OBJECT:return re(e.fields,(e=>e.name.value),(e=>Le(e.value,t)));case h.VARIABLE:return t?.[e.name.value]}}function be(e){if(0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;tt(Le(e,n))),this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||P(0,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}class GraphQLObjectType{constructor(e){this.name=be(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._fields=He.bind(void 0,e.fields),this._interfaces=ze.bind(void 0,e.interfaces)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}getInterfaces(){return"function"==typeof this._interfaces&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:Ze(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function ze(e){return Ke(e??[])}function He(e){return ie(Xe(e),((e,t)=>{const n=e.args??{};return{name:be(t),description:e.description,type:e.type,args:We(n),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:pe(e.extensions),astNode:e.astNode}}))}function We(e){return Object.entries(e).map((([e,t])=>({name:be(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:pe(t.extensions),astNode:t.astNode})))}function Ze(e){return ie(e,(e=>({description:e.description,type:e.type,args:et(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function et(e){return re(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function tt(e){return $e(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){this.name=be(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._fields=He.bind(void 0,e.fields),this._interfaces=ze.bind(void 0,e.interfaces)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}getInterfaces(){return"function"==typeof this._interfaces&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:Ze(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}class GraphQLUnionType{constructor(e){this.name=be(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._types=nt.bind(void 0,e.types)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return"function"==typeof this._types&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function nt(e){return Ke(e)}function rt(e){return Object.entries(e).map((([e,t])=>({name:Ae(e),description:t.description,value:void 0!==t.value?t.value:e,deprecationReason:t.deprecationReason,extensions:pe(t.extensions),astNode:t.astNode})))}class GraphQLEnumType{constructor(e){this.name=be(e.name),this.description=e.description,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._values="function"==typeof e.values?e.values:rt(e.values),this._valueLookup=null,this._nameLookup=null}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return"function"==typeof this._values&&(this._values=rt(this._values())),this._values}getValue(e){return null===this._nameLookup&&(this._nameLookup=function(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}(this.getValues(),(e=>e.name))),this._nameLookup[e]}serialize(e){null===this._valueLookup&&(this._valueLookup=new Map(this.getValues().map((e=>[e.value,e]))));const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${Y(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=Y(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+it(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+it(this,e));return t.value}parseLiteral(e,t){if(e.kind!==h.ENUM){const t=Ne(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+it(this,t),{nodes:e})}const n=this.getValue(e.value);if(null==n){const t=Ne(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+it(this,t),{nodes:e})}return n.value}toConfig(){const e=re(this.getValues(),(e=>e.name),(e=>({description:e.description,value:e.value,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})));return{name:this.name,description:this.description,values:e,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function it(e,t){return te("the enum value",ue(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){this.name=be(e.name),this.description=e.description,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this.isOneOf=e.isOneOf??!1,this._fields=ot.bind(void 0,e.fields)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=ie(this.getFields(),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})));return{name:this.name,description:this.description,fields:e,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,isOneOf:this.isOneOf}}toString(){return this.name}toJSON(){return this.toString()}}function ot(e){return ie(Xe(e),((e,t)=>({name:be(t),description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:pe(e.extensions),astNode:e.astNode})))}function st(e){return $e(e.type)&&void 0===e.defaultValue}function at(e,t){return e===t||($e(e)&&$e(t)||!(!Ge(e)||!Ge(t)))&&at(e.ofType,t.ofType)}function ct(e,t,n){return t===n||($e(n)?!!$e(t)&&ct(e,t.ofType,n.ofType):$e(t)?ct(e,t.ofType,n):Ge(n)?!!Ge(t)&&ct(e,t.ofType,n.ofType):!Ge(t)&&(Pe(n)&&(Fe(t)||ke(t))&&e.isSubType(n,t)))}function ut(e,t,n){return t===n||(Pe(t)?Pe(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Pe(n)&&e.isSubType(n,t))}const lt=2147483647,pt=-2147483648,dt=new GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){const t=Nt(e);if("boolean"==typeof t)return t?1:0;let n=t;if("string"==typeof t&&""!==t&&(n=Number(t)),"number"!=typeof n||!Number.isInteger(n))throw new GraphQLError(`Int cannot represent non-integer value: ${Y(t)}`);if(n>lt||nlt||elt||te.name===t))}function Nt(e){if(t(e)){if("function"==typeof e.valueOf){const n=e.valueOf();if(!t(n))return n}if("function"==typeof e.toJSON)return e.toJSON()}return e}function vt(e){return q(e,GraphQLDirective)}class GraphQLDirective{constructor(e){this.name=be(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=e.isRepeatable??!1,this.extensions=pe(e.extensions),this.astNode=e.astNode;const t=e.args??{};this.args=We(t)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:et(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const It=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[f.FIELD,f.FRAGMENT_SPREAD,f.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(mt),description:"Included when true."}}}),gt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[f.FIELD,f.FRAGMENT_SPREAD,f.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(mt),description:"Skipped when true."}}}),_t=new GraphQLDirective({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[f.FRAGMENT_SPREAD,f.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(mt),description:"Deferred when true or undefined.",defaultValue:!0},label:{type:ht,description:"Unique name"}}}),Ot=new GraphQLDirective({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[f.FIELD],args:{if:{type:new GraphQLNonNull(mt),description:"Stream when true or undefined.",defaultValue:!0},label:{type:ht,description:"Unique name"},initialCount:{defaultValue:0,type:dt,description:"Number of items to return immediately"}}}),St="No longer supported",Lt=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[f.FIELD_DEFINITION,f.ARGUMENT_DEFINITION,f.INPUT_FIELD_DEFINITION,f.ENUM_VALUE],args:{reason:{type:ht,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:St}}}),bt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[f.SCALAR],args:{url:{type:new GraphQLNonNull(ht),description:"The URL that specifies the behavior of this scalar."}}}),At=new GraphQLDirective({name:"oneOf",description:"Indicates exactly one field must be supplied and this field must not be `null`.",locations:[f.INPUT_OBJECT],args:{}}),wt=Object.freeze([It,gt,Lt,bt,At]);function Dt(e){return wt.some((({name:t})=>t===e.name))}function kt(e,r){if($e(r)){const t=kt(e,r.ofType);return t?.kind===h.NULL?null:t}if(null===e)return{kind:h.NULL};if(void 0===e)return null;if(Ge(r)){const t=r.ofType;if("object"==typeof(i=e)&&"function"==typeof i?.[Symbol.iterator]){const n=[];for(const r of e){const e=kt(r,t);null!=e&&n.push(e)}return{kind:h.LIST,values:n}}return kt(e,t)}var i;if(Ce(r)){if(!t(e))return null;const n=[];for(const t of Object.values(r.getFields())){const r=kt(e[t.name],t.type);r&&n.push({kind:h.OBJECT_FIELD,name:{kind:h.NAME,value:t.name},value:r})}return{kind:h.OBJECT,fields:n}}if(Me(r)){const t=r.serialize(e);if(null==t)return null;if("boolean"==typeof t)return{kind:h.BOOLEAN,value:t};if("number"==typeof t&&Number.isFinite(t)){const e=String(t);return Ft.test(e)?{kind:h.INT,value:e}:{kind:h.FLOAT,value:e}}if("string"==typeof t)return Re(r)?{kind:h.ENUM,value:t}:r===Et&&Ft.test(t)?{kind:h.INT,value:t}:{kind:h.STRING,value:t};throw new TypeError(`Cannot convert value to AST: ${Y(t)}.`)}n(0,"Unexpected input type: "+Y(r))}const Ft=/^-?(?:0|[1-9][0-9]*)$/,xt=new GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:()=>({description:{type:ht,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Gt))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(Gt),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Gt,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Gt,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Rt))),resolve:e=>e.getDirectives()}})}),Rt=new GraphQLObjectType({name:"__Directive",description:"A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(mt),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ct))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Qt))),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>!0===t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ct=new GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:f.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:f.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:f.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:f.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:f.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:f.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:f.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:f.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:f.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:f.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:f.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:f.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:f.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:f.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:f.UNION,description:"Location adjacent to a union definition."},ENUM:{value:f.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:f.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:f.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:f.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),Gt=new GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:()=>({kind:{type:new GraphQLNonNull(Vt),resolve:e=>De(e)?Mt.SCALAR:ke(e)?Mt.OBJECT:Fe(e)?Mt.INTERFACE:xe(e)?Mt.UNION:Re(e)?Mt.ENUM:Ce(e)?Mt.INPUT_OBJECT:Ge(e)?Mt.LIST:$e(e)?Mt.NON_NULL:void n(0,`Unexpected type: "${Y(e)}".`)},name:{type:ht,resolve:e=>"name"in e?e.name:void 0},description:{type:ht,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ht,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull($t)),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(ke(e)||Fe(e)){const n=Object.values(e.getFields());return!0===t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(Gt)),resolve(e){if(ke(e)||Fe(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(Gt)),resolve(e,t,n,{schema:r}){if(Pe(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Ut)),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Re(e)){const n=e.getValues();return!0===t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(Qt)),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ce(e)){const n=Object.values(e.getFields());return!0===t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:Gt,resolve:e=>"ofType"in e?e.ofType:void 0},isOneOf:{type:mt,resolve:e=>{if(Ce(e))return e.isOneOf}}})}),$t=new GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Qt))),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>!0===t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(Gt),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(mt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ht,resolve:e=>e.deprecationReason}})}),Qt=new GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},type:{type:new GraphQLNonNull(Gt),resolve:e=>e.type},defaultValue:{type:ht,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=kt(n,t);return r?Ne(r):null}},isDeprecated:{type:new GraphQLNonNull(mt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ht,resolve:e=>e.deprecationReason}})}),Ut=new GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(mt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ht,resolve:e=>e.deprecationReason}})});var Mt;!function(e){e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.INPUT_OBJECT="INPUT_OBJECT",e.LIST="LIST",e.NON_NULL="NON_NULL"}(Mt||(Mt={}));const Vt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:Mt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:Mt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:Mt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:Mt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:Mt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:Mt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:Mt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:Mt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),Pt={name:"__schema",type:new GraphQLNonNull(xt),description:"Access the current type schema of this server.",args:[],resolve:(e,t,n,{schema:r})=>r,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0},jt={name:"__type",type:Gt,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ht),defaultValue:void 0,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0}],resolve:(e,{name:t},n,{schema:r})=>r.getType(t),deprecationReason:void 0,extensions:Object.create(null),astNode:void 0},Bt={name:"__typename",type:new GraphQLNonNull(ht),description:"The name of the current Object type at runtime.",args:[],resolve:(e,t,n,{parentType:r})=>r.name,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0},Yt=Object.freeze([xt,Rt,Ct,Gt,$t,Qt,Ut,Vt]);function Jt(e){return Yt.some((({name:t})=>e.name===t))}function qt(e){if(!function(e){return q(e,GraphQLSchema)}(e))throw new Error(`Expected ${Y(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){this.__validationErrors=!0===e.assumeValid?[]:void 0,this.description=e.description,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=e.directives??wt;const t=new Set(e.types);if(null!=e.types)for(const n of e.types)t.delete(n),Kt(n,t);null!=this._queryType&&Kt(this._queryType,t),null!=this._mutationType&&Kt(this._mutationType,t),null!=this._subscriptionType&&Kt(this._subscriptionType,t);for(const e of this._directives)if(vt(e))for(const n of e.args)Kt(n.type,t);Kt(xt,t),this._typeMap=Object.create(null),this._subTypeMap=new Map,this._implementationsMap=Object.create(null);for(const e of t){if(null==e)continue;const t=e.name;if(void 0!==this._typeMap[t])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${t}".`);if(this._typeMap[t]=e,Fe(e)){for(const t of e.getInterfaces())if(Fe(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(ke(e))for(const t of e.getInterfaces())if(Fe(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.objects.push(e)}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(e){switch(e){case d.QUERY:return this.getQueryType();case d.MUTATION:return this.getMutationType();case d.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return xe(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){return this._implementationsMap[e.name]??{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap.get(e);if(void 0===n){if(xe(e))n=new Set(e.getTypes());else{const t=this.getImplementations(e);n=new Set([...t.objects,...t.interfaces])}this._subTypeMap.set(e,n)}return n.has(t)}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}getField(e,t){switch(t){case Pt.name:return this.getQueryType()===e?Pt:void 0;case jt.name:return this.getQueryType()===e?jt:void 0;case Bt.name:return Bt}if("getFields"in e)return e.getFields()[t]}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:void 0!==this.__validationErrors}}}function Kt(e,t){const n=qe(e);if(!t.has(n))if(t.add(n),xe(n))for(const e of n.getTypes())Kt(e,t);else if(ke(n)||Fe(n)){for(const e of n.getInterfaces())Kt(e,t);for(const e of Object.values(n.getFields())){Kt(e.type,t);for(const n of e.args)Kt(n.type,t)}}else if(Ce(n))for(const e of Object.values(n.getFields()))Kt(e.type,t);return t}function Xt(e){if(qt(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema;null==t.getQueryType()&&e.reportError("Query root type must be provided.",t.astNode);const n=new AccumulatorMap;for(const r of Object.values(d)){const i=t.getRootType(r);if(null!=i)if(ke(i))n.add(i,r);else{const n=H(r),o=Y(i);e.reportError(r===d.QUERY?`${n} root type must be Object type, it cannot be ${o}.`:`${n} root type must be Object type if provided, it cannot be ${o}.`,zt(t,r)??i.astNode)}}for(const[r,i]of n)if(i.length>1){const n=W(i);e.reportError(`All root types must be different, "${r.name}" type is used as ${n} root types.`,i.map((e=>zt(t,e))))}}(t),function(e){for(const t of e.schema.getDirectives())if(vt(t)){Ht(e,t),0===t.locations.length&&e.reportError(`Directive @${t.name} must include 1 or more locations.`,t.astNode);for(const n of t.args)Ht(e,n),Qe(n.type)||e.reportError(`The type of @${t.name}(${n.name}:) must be Input Type but got: ${Y(n.type)}.`,n.astNode),tt(n)&&null!=n.deprecationReason&&e.reportError(`Required argument @${t.name}(${n.name}:) cannot be deprecated.`,[un(n.astNode),n.astNode?.type])}else e.reportError(`Expected directive but got: ${Y(t)}.`,t?.astNode)}(t),function(e){const t=function(e){const t=new Set,n=[],r=Object.create(null);return i;function i(o){if(t.has(o))return;t.add(o),r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if($e(t.type)&&Ce(t.type.ofType)){const o=t.type.ofType,s=r[o.name];if(n.push(t),void 0===s)i(o);else{const t=n.slice(s),r=t.map((e=>e.name)).join(".");e.reportError(`Cannot reference Input Object "${o.name}" within itself through a series of non-null fields: "${r}".`,t.map((e=>e.astNode)))}n.pop()}r[o.name]=void 0}}(e),n=e.schema.getTypeMap();for(const r of Object.values(n))Je(r)?(Jt(r)||Ht(e,r),ke(r)||Fe(r)?(Wt(e,r),Zt(e,r)):xe(r)?nn(e,r):Re(r)?rn(e,r):Ce(r)&&(on(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${Y(r)}.`,r.astNode)}(t);const n=t.getErrors();return e.__validationErrors=n,n}class SchemaValidationContext{constructor(e){this._errors=[],this.schema=e}reportError(e,t){const n=Array.isArray(t)?t.filter(Boolean):t;this._errors.push(new GraphQLError(e,{nodes:n}))}getErrors(){return this._errors}}function zt(e,t){return[e.astNode,...e.extensionASTNodes].flatMap((e=>e?.operationTypes??[])).find((e=>e.operation===t))?.type}function Ht(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Wt(e,t){const n=Object.values(t.getFields());0===n.length&&e.reportError(`Type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(const r of n){Ht(e,r),Ue(r.type)||e.reportError(`The type of ${t.name}.${r.name} must be Output Type but got: ${Y(r.type)}.`,r.astNode?.type);for(const n of r.args){const i=n.name;Ht(e,n),Qe(n.type)||e.reportError(`The type of ${t.name}.${r.name}(${i}:) must be Input Type but got: ${Y(n.type)}.`,n.astNode?.type),tt(n)&&null!=n.deprecationReason&&e.reportError(`Required argument ${t.name}.${r.name}(${i}:) cannot be deprecated.`,[un(n.astNode),n.astNode?.type])}}}function Zt(e,t){const n=new Set;for(const r of t.getInterfaces())Fe(r)?t!==r?n.has(r.name)?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,an(t,r)):(n.add(r.name),tn(e,t,r),en(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,an(t,r)):e.reportError(`Type ${Y(t)} must only implement Interface types, it cannot implement ${Y(r)}.`,an(t,r))}function en(e,t,n){const r=t.getFields();for(const i of Object.values(n.getFields())){const o=i.name,s=r[o];if(null!=s){ct(e.schema,s.type,i.type)||e.reportError(`Interface field ${n.name}.${o} expects type ${Y(i.type)} but ${t.name}.${o} is type ${Y(s.type)}.`,[i.astNode?.type,s.astNode?.type]);for(const r of i.args){const i=r.name,a=s.args.find((e=>e.name===i));a?at(r.type,a.type)||e.reportError(`Interface field argument ${n.name}.${o}(${i}:) expects type ${Y(r.type)} but ${t.name}.${o}(${i}:) is type ${Y(a.type)}.`,[r.astNode?.type,a.astNode?.type]):e.reportError(`Interface field argument ${n.name}.${o}(${i}:) expected but ${t.name}.${o} does not provide it.`,[r.astNode,s.astNode])}for(const r of s.args){const s=r.name;!i.args.find((e=>e.name===s))&&tt(r)&&e.reportError(`Object field ${t.name}.${o} includes required argument ${s} that is missing from the Interface field ${n.name}.${o}.`,[r.astNode,i.astNode])}}else e.reportError(`Interface field ${n.name}.${o} expected but ${t.name} does not provide it.`,[i.astNode,t.astNode,...t.extensionASTNodes])}}function tn(e,t,n){const r=t.getInterfaces();for(const i of n.getInterfaces())r.includes(i)||e.reportError(i===t?`Type ${t.name} cannot implement ${n.name} because it would create a circular reference.`:`Type ${t.name} must implement ${i.name} because it is implemented by ${n.name}.`,[...an(n,i),...an(t,n)])}function nn(e,t){const n=t.getTypes();0===n.length&&e.reportError(`Union type ${t.name} must define one or more member types.`,[t.astNode,...t.extensionASTNodes]);const r=new Set;for(const i of n)r.has(i.name)?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,cn(t,i.name)):(r.add(i.name),ke(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${Y(i)}.`,cn(t,String(i))))}function rn(e,t){const n=t.getValues();0===n.length&&e.reportError(`Enum type ${t.name} must define one or more values.`,[t.astNode,...t.extensionASTNodes]);for(const t of n)Ht(e,t)}function on(e,t){const n=Object.values(t.getFields());0===n.length&&e.reportError(`Input Object type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(const r of n)Ht(e,r),Qe(r.type)||e.reportError(`The type of ${t.name}.${r.name} must be Input Type but got: ${Y(r.type)}.`,r.astNode?.type),st(r)&&null!=r.deprecationReason&&e.reportError(`Required input field ${t.name}.${r.name} cannot be deprecated.`,[un(r.astNode),r.astNode?.type]),t.isOneOf&&sn(t,r,e)}function sn(e,t,n){$e(t.type)&&n.reportError(`OneOf input field ${e.name}.${t.name} must be nullable.`,t.astNode?.type),void 0!==t.defaultValue&&n.reportError(`OneOf input field ${e.name}.${t.name} cannot have a default value.`,t.astNode)}function an(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>e.interfaces??[])).filter((e=>e.name.value===t.name))}function cn(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>e.types??[])).filter((e=>e.name.value===t))}function un(e){return e?.directives?.find((e=>e.name.value===Lt.name))}function ln(e,t){switch(t.kind){case h.LIST_TYPE:{const n=ln(e,t.type);return n&&new GraphQLList(n)}case h.NON_NULL_TYPE:{const n=ln(e,t.type);return n&&new GraphQLNonNull(n)}case h.NAMED_TYPE:return e.getType(t.name.value)}}class TypeInfo{constructor(e,t,n){this._schema=e,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=n??pn,t&&(Qe(t)&&this._inputTypeStack.push(t),Ve(t)&&this._parentTypeStack.push(t),Ue(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){return this._typeStack.at(-1)}getParentType(){return this._parentTypeStack.at(-1)}getInputType(){return this._inputTypeStack.at(-1)}getParentInputType(){return this._inputTypeStack.at(-2)}getFieldDef(){return this._fieldDefStack.at(-1)}getDefaultValue(){return this._defaultValueStack.at(-1)}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case h.SELECTION_SET:{const e=qe(this.getType());this._parentTypeStack.push(Ve(e)?e:void 0);break}case h.FIELD:{const n=this.getParentType();let r,i;n&&(r=this._getFieldDef(t,n,e),r&&(i=r.type)),this._fieldDefStack.push(r),this._typeStack.push(Ue(i)?i:void 0);break}case h.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case h.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(ke(n)?n:void 0);break}case h.INLINE_FRAGMENT:case h.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?ln(t,n):qe(this.getType());this._typeStack.push(Ue(r)?r:void 0);break}case h.VARIABLE_DEFINITION:{const n=ln(t,e.type);this._inputTypeStack.push(Qe(n)?n:void 0);break}case h.ARGUMENT:{let t,n;const r=this.getDirective()??this.getFieldDef();r&&(t=r.args.find((t=>t.name===e.name.value)),t&&(n=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(Qe(n)?n:void 0);break}case h.LIST:{const e=Ye(this.getInputType()),t=Ge(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(Qe(t)?t:void 0);break}case h.OBJECT_FIELD:{const t=qe(this.getInputType());let n,r;Ce(t)&&(r=t.getFields()[e.name.value],null!=r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(Qe(n)?n:void 0);break}case h.ENUM:{const t=qe(this.getInputType());let n;Re(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case h.SELECTION_SET:this._parentTypeStack.pop();break;case h.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case h.DIRECTIVE:this._directive=null;break;case h.OPERATION_DEFINITION:case h.INLINE_FRAGMENT:case h.FRAGMENT_DEFINITION:this._typeStack.pop();break;case h.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case h.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case h.LIST:case h.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case h.ENUM:this._enumValue=null}}}function pn(e,t,n){return e.getField(t,n.name.value)}function dn(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=ye(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),p(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=ye(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function fn(e){const t=e.arguments?.find((e=>"if"===e.name.value));if(!t)return!1;if(t.value.kind===h.BOOLEAN){if(t.value.value)return!1}else if(t.value.kind!==h.VARIABLE)return!1;return!0}function hn(e){return e.kind===h.OPERATION_DEFINITION||e.kind===h.FRAGMENT_DEFINITION}function mn(e){return e.kind===h.SCALAR_TYPE_DEFINITION||e.kind===h.OBJECT_TYPE_DEFINITION||e.kind===h.INTERFACE_TYPE_DEFINITION||e.kind===h.UNION_TYPE_DEFINITION||e.kind===h.ENUM_TYPE_DEFINITION||e.kind===h.INPUT_OBJECT_TYPE_DEFINITION}function En(e){return e.kind===h.SCALAR_TYPE_EXTENSION||e.kind===h.OBJECT_TYPE_EXTENSION||e.kind===h.INTERFACE_TYPE_EXTENSION||e.kind===h.UNION_TYPE_EXTENSION||e.kind===h.ENUM_TYPE_EXTENSION||e.kind===h.INPUT_OBJECT_TYPE_EXTENSION}function Tn(e){const t=new Map,n=e.getSchema(),r=n?n.getDirectives():wt;for(const e of r)t.set(e.name,e.args.map((e=>e.name)));const i=e.getDocument().definitions;for(const e of i)if(e.kind===h.DIRECTIVE_DEFINITION){const n=e.arguments??[];t.set(e.name.value,n.map((e=>e.name.value)))}return{Directive(n){const r=n.name.value,i=t.get(r);if(null!=n.arguments&&null!=i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=ue(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+te(o),{nodes:t}))}}return!1}}}function yn(e){const t=new Map,r=e.getSchema(),i=r?r.getDirectives():wt;for(const e of i)t.set(e.name,e.locations);const o=e.getDocument().definitions;for(const e of o)e.kind===h.DIRECTIVE_DEFINITION&&t.set(e.name.value,e.locations.map((e=>e.value)));return{Directive(r,i,o,s,a){const c=r.name.value,u=t.get(c);if(null==u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,{nodes:r}));const l=function(e){const t=e.at(-1);switch(null!=t&&"kind"in t||n(),t.kind){case h.OPERATION_DEFINITION:return function(e){switch(e){case d.QUERY:return f.QUERY;case d.MUTATION:return f.MUTATION;case d.SUBSCRIPTION:return f.SUBSCRIPTION}}(t.operation);case h.FIELD:return f.FIELD;case h.FRAGMENT_SPREAD:return f.FRAGMENT_SPREAD;case h.INLINE_FRAGMENT:return f.INLINE_FRAGMENT;case h.FRAGMENT_DEFINITION:return f.FRAGMENT_DEFINITION;case h.VARIABLE_DEFINITION:return f.VARIABLE_DEFINITION;case h.SCHEMA_DEFINITION:case h.SCHEMA_EXTENSION:return f.SCHEMA;case h.SCALAR_TYPE_DEFINITION:case h.SCALAR_TYPE_EXTENSION:return f.SCALAR;case h.OBJECT_TYPE_DEFINITION:case h.OBJECT_TYPE_EXTENSION:return f.OBJECT;case h.FIELD_DEFINITION:return f.FIELD_DEFINITION;case h.INTERFACE_TYPE_DEFINITION:case h.INTERFACE_TYPE_EXTENSION:return f.INTERFACE;case h.UNION_TYPE_DEFINITION:case h.UNION_TYPE_EXTENSION:return f.UNION;case h.ENUM_TYPE_DEFINITION:case h.ENUM_TYPE_EXTENSION:return f.ENUM;case h.ENUM_VALUE_DEFINITION:return f.ENUM_VALUE;case h.INPUT_OBJECT_TYPE_DEFINITION:case h.INPUT_OBJECT_TYPE_EXTENSION:return f.INPUT_OBJECT;case h.INPUT_VALUE_DEFINITION:{const t=e.at(-3);return null!=t&&"kind"in t||n(),t.kind===h.INPUT_OBJECT_TYPE_DEFINITION?f.INPUT_FIELD_DEFINITION:f.ARGUMENT_DEFINITION}default:n(0,"Unexpected kind: "+Y(t.kind))}}(a);null==l||u.includes(l)||e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,{nodes:r}))}}}function Nn(e){const{definitions:t}=e.getDocument(),n=e.getSchema()?.getTypeMap()??{},r=new Set([...Object.keys(n),...t.filter(mn).map((e=>e.name.value))]);return{NamedType(t,n,i,o,s){const a=t.name.value;if(!r.has(a)){const n=s[2]??i,o=null!=n&&("kind"in(c=n)&&(function(e){return e.kind===h.SCHEMA_DEFINITION||mn(e)||e.kind===h.DIRECTIVE_DEFINITION}(c)||function(e){return e.kind===h.SCHEMA_EXTENSION||En(e)}(c)));if(o&&vn.has(a))return;const u=ue(a,o?[...vn,...r]:[...r]);e.reportError(new GraphQLError(`Unknown type "${a}".`+te(u),{nodes:t}))}var c}}}const vn=new Set([...Tt,...Yt].map((e=>e.name)));function In(e){const t=new Set,n=[];return{OperationDefinition(n){for(const r of e.getRecursivelyReferencedFragments(n))t.add(r.name.value);return!1},FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){for(const r of n){const n=r.name.value;t.has(n)||e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,{nodes:r}))}}}}}function gn(e){switch(e.kind){case h.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:gn(e.value)}))).sort(((e,t)=>oe(e.name.value,t.name.value))))};case h.LIST:return{...e,values:e.values.map(gn)};case h.INT:case h.FLOAT:case h.STRING:case h.BOOLEAN:case h.NULL:case h.ENUM:case h.VARIABLE:return e}var t}function _n(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+_n(t))).join(" and "):e}function On(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=xn(e,n,a);if(o!==c){Ln(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),On(e,t,n,r,i,o,a))}}function Sn(e,t,n,r,i,o,s){if(o===s)return;if(r.has(o,s,i))return;r.add(o,s,i);const a=e.getFragment(o),c=e.getFragment(s);if(!a||!c)return;const[u,l]=xn(e,n,a),[p,d]=xn(e,n,c);Ln(e,t,n,r,i,u,p);for(const s of d)Sn(e,t,n,r,i,o,s);for(const o of l)Sn(e,t,n,r,i,o,s)}function Ln(e,t,n,r,i,o,s){for(const[a,c]of o.entries()){const o=s.get(a);if(null!=o)for(const s of c)for(const c of o){const o=bn(e,n,r,i,a,s,c);o&&t.push(o)}}}function bn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&ke(a)&&ke(l);if(!f){const e=c.name.value,t=p.name.value;if(e!==t)return[[i,`"${e}" and "${t}" are different fields`],[c],[p]];if(!An(c,p))return[[i,"they have differing arguments"],[c],[p]]}if(!function(e,t){const n=Dn(e),r=Dn(t);if(!n&&!r)return!0;if(n&&r)return An(n,r);return!1}(c.directives??[],p.directives??[]))return[[i,"they have differing stream directives"],[c],[p]];const h=u?.type,m=d?.type;if(h&&m&&kn(h,m))return[[i,`they return conflicting types "${Y(h)}" and "${Y(m)}"`],[c],[p]];const E=c.selectionSet,T=p.selectionSet;if(E&&T){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=Fn(e,t,i,o),[p,d]=Fn(e,t,s,a);Ln(e,c,t,n,r,u,p);for(const i of d)On(e,c,t,n,r,u,i);for(const i of l)On(e,c,t,n,r,p,i);for(const i of l)for(const o of d)Sn(e,c,t,n,r,i,o);return c}(e,t,n,f,qe(h),E,qe(m),T);return function(e,t,n,r){if(e.length>0)return[[t,e.map((([e])=>e))],[n,...e.map((([,e])=>e)).flat()],[r,...e.map((([,,e])=>e)).flat()]]}(r,i,c,p)}}function An(e,t){const n=e.arguments,r=t.arguments;if(void 0===n||0===n.length)return void 0===r||0===r.length;if(void 0===r||0===r.length)return!1;if(n.length!==r.length)return!1;const i=new Map(r.map((({name:e,value:t})=>[e.value,t])));return n.every((e=>{const t=e.value,n=i.get(e.name.value);return void 0!==n&&wn(t)===wn(n)}))}function wn(e){return Ne(gn(e))}function Dn(e){return e.find((e=>"stream"===e.name.value))}function kn(e,t){return Ge(e)?!Ge(t)||kn(e.ofType,t.ofType):!!Ge(t)||($e(e)?!$e(t)||kn(e.ofType,t.ofType):!!$e(t)||!(!Me(e)&&!Me(t))&&e!==t)}function Fn(e,t,n,r){const i=t.get(r);if(i)return i;const o=new Map,s=new Set;Rn(e,n,r,o,s);const a=[o,[...s]];return t.set(r,a),a}function xn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=ln(e.getSchema(),n.typeCondition);return Fn(e,t,i,n.selectionSet)}function Rn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case h.FIELD:{const e=o.name.value;let n;(ke(t)||Fe(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;let s=r.get(i);null==s&&(s=[],r.set(i,s)),s.push([t,o,n]);break}case h.FRAGMENT_SPREAD:i.add(o.name.value);break;case h.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?ln(e.getSchema(),n):t;Rn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){const[r,i]=e[e.name,e]))));const i=e.getDocument().definitions;for(const e of i)if(e.kind===h.DIRECTIVE_DEFINITION){const n=e.arguments??[];t.set(e.name.value,new Map(n.filter($n).map((e=>[e.name.value,e]))))}return{Directive:{leave(n){const r=n.name.value,i=t.get(r);if(null!=i){const t=n.arguments??[],o=new Set(t.map((e=>e.name.value)));for(const[t,s]of i.entries())if(!o.has(t)){const i=we(s.type)?Y(s.type):Ne(s.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${t}" of type "${i}" is required, but it was not provided.`,{nodes:n}))}}}}}}function $n(e){return e.type.kind===h.NON_NULL_TYPE&&null==e.defaultValue}function Qn(e,t,r){if(e){if(e.kind===h.VARIABLE){const n=e.name.value;if(null==r||void 0===r[n])return;const i=r[n];if(null===i&&$e(t))return;return i}if($e(t)){if(e.kind===h.NULL)return;return Qn(e,t.ofType,r)}if(e.kind===h.NULL)return null;if(Ge(t)){const n=t.ofType;if(e.kind===h.LIST){const t=[];for(const i of e.values)if(Un(i,r)){if($e(n))return;t.push(null)}else{const e=Qn(i,n,r);if(void 0===e)return;t.push(e)}return t}const i=Qn(e,n,r);if(void 0===i)return;return[i]}if(Ce(t)){if(e.kind!==h.OBJECT)return;const n=Object.create(null),i=new Map(e.fields.map((e=>[e.name.value,e])));for(const e of Object.values(t.getFields())){const t=i.get(e.name);if(null==t||Un(t.value,r)){if(void 0!==e.defaultValue)n[e.name]=e.defaultValue;else if($e(e.type))return;continue}const o=Qn(t.value,e.type,r);if(void 0===o)return;n[e.name]=o}if(t.isOneOf){const e=Object.keys(n);if(1!==e.length)return;if(null===n[e[0]])return}return n}if(Me(t)){let n;try{n=t.parseLiteral(e,r)}catch(e){return}if(void 0===n)return;return n}n(0,"Unexpected input type: "+Y(t))}}function Un(e,t){return e.kind===h.VARIABLE&&(null==t||void 0===t[e.name.value])}function Mn(e,t,n){const r=t.directives?.find((t=>t.name.value===e.name));if(r)return function(e,t,n){const r={},i=t.arguments??[],o=new Map(i.map((e=>[e.name.value,e])));for(const i of e.args){const e=i.name,s=i.type,a=o.get(e);if(null==a){if(void 0!==i.defaultValue)r[e]=i.defaultValue;else if($e(s))throw new GraphQLError(`Argument "${e}" of required type "${Y(s)}" was not provided.`,{nodes:t});continue}const c=a.value;let u=c.kind===h.NULL;if(c.kind===h.VARIABLE){const t=c.name.value;if(null==n||!Object.hasOwn(n,t)){if(void 0!==i.defaultValue)r[e]=i.defaultValue;else if($e(s))throw new GraphQLError(`Argument "${e}" of required type "${Y(s)}" was provided the variable "$${t}" which was not provided a runtime value.`,{nodes:c});continue}u=null==n[t]}if(u&&$e(s))throw new GraphQLError(`Argument "${e}" of non-null type "${Y(s)}" must not be null.`,{nodes:c});const l=Qn(c,s,n);if(void 0===l)throw new GraphQLError(`Argument "${e}" has invalid value ${Ne(c)}.`,{nodes:c});r[e]=l}return r}(e,r,n)}function Vn(e,t,n,r,i){const o=new AccumulatorMap,s=[];return Pn({schema:e,fragments:t,variableValues:n,runtimeType:r,operation:i,visitedFragmentNames:new Set},i.selectionSet,o,s),{groupedFieldSet:o,newDeferUsages:s}}function Pn(e,t,n,r,i){const{schema:o,fragments:s,variableValues:a,runtimeType:c,operation:u,visitedFragmentNames:l}=e;for(const d of t.selections)switch(d.kind){case h.FIELD:if(!Bn(a,d))continue;n.add((p=d).alias?p.alias.value:p.name.value,{node:d,deferUsage:i});break;case h.INLINE_FRAGMENT:{if(!Bn(a,d)||!Yn(o,d,c))continue;const t=jn(u,a,d,i);t?(r.push(t),Pn(e,d.selectionSet,n,r,t)):Pn(e,d.selectionSet,n,r,i);break}case h.FRAGMENT_SPREAD:{const t=d.name.value,p=jn(u,a,d,i);if(!p&&(l.has(t)||!Bn(a,d)))continue;const f=s[t];if(null==f||!Yn(o,f,c))continue;p?(r.push(p),Pn(e,f.selectionSet,n,r,p)):(l.add(t),Pn(e,f.selectionSet,n,r,i));break}}var p}function jn(e,t,r,i){const o=Mn(_t,r,t);if(o&&!1!==o.if)return e.operation!==d.SUBSCRIPTION||n(0,"`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`."),{label:"string"==typeof o.label?o.label:void 0,parentDeferUsage:i}}function Bn(e,t){const n=Mn(gt,t,e);if(!0===n?.if)return!1;const r=Mn(It,t,e);return!1!==r?.if}function Yn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=ln(e,r);return i===n||!!Pe(i)&&e.isSubType(i,n)}function Jn(e){return e.map((e=>e.node))}function qn(e,t){const n=new AccumulatorMap;for(const r of e)n.add(t(r),r);return n}function Kn(e){return{Field:t,Directive:t};function t(t){const n=qn(t.arguments??[],(e=>e.name.value));for(const[t,r]of n)r.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,{nodes:r.map((e=>e.name))}))}}function Xn(e){const t=new Map,n=e.getSchema(),r=n?n.getDirectives():wt;for(const e of r)t.set(e.name,!e.isRepeatable);const i=e.getDocument().definitions;for(const e of i)e.kind===h.DIRECTIVE_DEFINITION&&t.set(e.name.value,!e.repeatable);const o=new Map,s=new Map;return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===h.SCHEMA_DEFINITION||n.kind===h.SCHEMA_EXTENSION)r=o;else if(mn(n)||En(n)){const e=n.name.value;r=s.get(e),void 0===r&&(r=new Map,s.set(e,r))}else r=new Map;for(const i of n.directives){const n=i.name.value;if(!0===t.get(n)){const t=r.get(n);null!=t?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,{nodes:[t,i]})):r.set(n,i)}}}}}function zn(e,t){return!!(ke(e)||Fe(e)||Ce(e))&&null!=e.getFields()[t]}function Hn(e){const t=[];let r=new Map;return{ObjectValue:{enter(){t.push(r),r=new Map},leave(){const e=t.pop();null!=e||n(),r=e}},ObjectField(t){const n=t.name.value,i=r.get(n);null!=i?e.reportError(new GraphQLError(`There can be only one input field named "${n}".`,{nodes:[i,t.name]})):r.set(n,t.name)}}}function Wn(e,t){const n=e.getInputType();if(!n)return;const r=qe(n);if(Me(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=Y(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${Ne(t)}.`,{nodes:t}))}}catch(r){const i=Y(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${Ne(t)}; `+r.message,{nodes:t,originalError:r}))}else{const r=Y(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${Ne(t)}.`,{nodes:t}))}}function Zn(e,t,n,r,i){if($e(r)&&!$e(t)){if(!(null!=n&&n.kind!==h.NULL)&&!(void 0!==i))return!1;return ct(e,t,r.ofType)}return ct(e,t,r)}const er=Object.freeze([function(e){function t(n,r=Object.create(null),i=0){if(n.kind===h.FRAGMENT_SPREAD){const o=n.name.value;if(!0===r[o])return!1;const s=e.getFragment(o);if(!s)return!1;try{return r[o]=!0,t(s,r,i)}finally{r[o]=void 0}}if(n.kind===h.FIELD&&("fields"===n.name.value||"interfaces"===n.name.value||"possibleTypes"===n.name.value||"inputFields"===n.name.value)&&++i>=3)return!0;if("selectionSet"in n&&n.selectionSet)for(const e of n.selectionSet.selections)if(t(e,r,i))return!0;return!1}return{Field(n){if(("__schema"===n.name.value||"__type"===n.name.value)&&t(n))return e.reportError(new GraphQLError("Maximum introspection depth exceeded",{nodes:[n]})),!1}}}]),tr=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!hn(n)){const t=n.kind===h.SCHEMA_DEFINITION||n.kind===h.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,{nodes:n}))}return!1}}},function(e){const t=new Map;return{OperationDefinition(n){const r=n.name;if(null!=r){const n=t.get(r.value);null!=n?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,{nodes:[n,r]})):t.set(r.value,r)}return!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===h.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",{nodes:n}))}}},function(e){return{OperationDefinition(t){if("subscription"===t.operation){const n=e.getSchema(),r=n.getSubscriptionType();if(r){const i=t.name?t.name.value:null,o=Object.create(null),s=e.getDocument(),a=Object.create(null);for(const e of s.definitions)e.kind===h.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const{groupedFieldSet:c}=Vn(n,a,o,r,t);if(c.size>1){const t=[...c.values()].slice(1).flatMap((e=>Jn(e)));e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",{nodes:t}))}for(const t of c.values()){Jn(t)[0].name.value.startsWith("__")&&e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",{nodes:Jn(t)}))}}}}}},Nn,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=ln(e.getSchema(),n);if(t&&!Ve(t)){const t=Ne(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,{nodes:n}))}}},FragmentDefinition(t){const n=ln(e.getSchema(),t.typeCondition);if(n&&!Ve(n)){const n=Ne(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,{nodes:t.typeCondition}))}}}},function(e){return{VariableDefinition(t){const n=ln(e.getSchema(),t.type);if(void 0!==n&&!Qe(n)){const n=t.variable.name.value,r=Ne(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,{nodes:t.type}))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Me(qe(n))){if(r){const i=t.name.value,o=Y(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,{nodes:r}))}}else if(!r){const r=t.name.value,i=Y(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,{nodes:t}))}}}},function(e){return{Field(t){const n=e.getParentType();if(n){if(!e.getFieldDef()){const r=e.getSchema(),i=t.name.value;let o=te("to use an inline fragment on",function(e,t,n){if(!Pe(t))return[];const r=new Set,i=Object.create(null);for(const o of e.getPossibleTypes(t))if(null!=o.getFields()[n]){r.add(o),i[o.name]=1;for(const e of o.getInterfaces())null!=e.getFields()[n]&&(r.add(e),i[e.name]=(i[e.name]??0)+1)}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Fe(t)&&e.isSubType(t,n)?-1:Fe(n)&&e.isSubType(n,t)?1:oe(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=te(function(e,t){if(ke(e)||Fe(e)){return ue(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,{nodes:t}))}}}}},function(e){const t=new Map;return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value,i=t.get(r);return null!=i?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,{nodes:[i,n.name]})):t.set(r,n.name),!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,{nodes:t.name}))}}},In,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ve(n)&&Ve(r)&&!ut(e.getSchema(),n,r)){const i=Y(r),o=Y(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,{nodes:t}))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=ln(e.getSchema(),n.typeCondition);if(Ve(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!ut(e.getSchema(),r,i)){const o=Y(i),s=Y(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,{nodes:t}))}}}},function(e){const t=new Set,n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t.has(o.name.value))return;const s=o.name.value;t.add(s);const a=e.getFragmentSpreads(o.selectionSet);if(0!==a.length){r[s]=n.length;for(const t of a){const o=t.name.value,s=r[o];if(n.push(t),void 0===s){const t=e.getFragment(o);t&&i(t)}else{const t=n.slice(s),r=t.slice(0,-1).map((e=>'"'+e.name.value+'"')).join(", ");e.reportError(new GraphQLError(`Cannot spread fragment "${o}" within itself`+(""!==r?` via ${r}.`:"."),{nodes:t}))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){const n=qn(t.variableDefinitions??[],(e=>e.variable.name.value));for(const[t,r]of n)r.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,{nodes:r.map((e=>e.variable.name))}))}}},function(e){return{OperationDefinition(t){const n=new Set(t.variableDefinitions?.map((e=>e.variable.name.value))),r=e.getRecursiveVariableUsages(t);for(const{node:i}of r){const r=i.name.value;n.has(r)||e.reportError(new GraphQLError(t.name?`Variable "$${r}" is not defined by operation "${t.name.value}".`:`Variable "$${r}" is not defined.`,{nodes:[i,t]}))}}}},function(e){return{OperationDefinition(t){const n=e.getRecursiveVariableUsages(t),r=new Set(n.map((({node:e})=>e.name.value))),i=t.variableDefinitions??[];for(const n of i){const i=n.variable.name.value;r.has(i)||e.reportError(new GraphQLError(t.name?`Variable "$${i}" is never used in operation "${t.name.value}".`:`Variable "$${i}" is never used.`,{nodes:n}))}}}},yn,Xn,function(e){return{Directive(t){const n=e.getSchema().getMutationType(),r=e.getSchema().getSubscriptionType(),i=e.getParentType();i&&t.name.value===_t.name&&(n&&i===n&&e.reportError(new GraphQLError(`Defer directive cannot be used on root mutation type "${i.name}".`,{nodes:t})),r&&i===r&&e.reportError(new GraphQLError(`Defer directive cannot be used on root subscription type "${i.name}".`,{nodes:t}))),i&&t.name.value===Ot.name&&(n&&i===n&&e.reportError(new GraphQLError(`Stream directive cannot be used on root mutation type "${i.name}".`,{nodes:t})),r&&i===r&&e.reportError(new GraphQLError(`Stream directive cannot be used on root subscription type "${i.name}".`,{nodes:t})))}}},function(e){const t=new Set;return{OperationDefinition(n){if(n.operation===d.SUBSCRIPTION)for(const r of e.getRecursivelyReferencedFragments(n))t.add(r.name.value)},Directive(n,r,i,o,s){const a=s[2];"kind"in a&&(a.kind===h.FRAGMENT_DEFINITION&&t.has(a.name.value)||a.kind===h.OPERATION_DEFINITION&&a.operation===d.SUBSCRIPTION)&&(n.name.value===_t.name?fn(n)||e.reportError(new GraphQLError("Defer directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.",{nodes:n})):n.name.value===Ot.name&&(fn(n)||e.reportError(new GraphQLError("Stream directive not supported on subscription operations. Disable `@stream` by setting the `if` argument to `false`.",{nodes:n}))))}}},function(e){const t=new Map;return{Directive(n){if(n.name.value===_t.name||n.name.value===Ot.name){const r=n.arguments?.find((e=>"label"===e.name.value)),i=r?.value;if(!i)return;if(i.kind!==h.STRING)return void e.reportError(new GraphQLError(`Directive "${n.name.value}"'s label argument must be a static string.`,{nodes:n}));const o=t.get(i.value);null!=o?e.reportError(new GraphQLError("Defer/Stream directive label argument must be unique.",{nodes:[o,n]})):t.set(i.value,n)}}}},function(e){return{Directive(t){const n=e.getFieldDef(),r=e.getParentType();n&&r&&t.name.value===Ot.name&&!(Ge(n.type)||je(n.type)&&Ge(n.type.ofType))&&e.reportError(new GraphQLError(`Stream directive cannot be used on non-list field "${n.name}" on type "${r.name}".`,{nodes:t}))}}},function(e){return{...Tn(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=ue(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+te(o),{nodes:t}))}}}},Kn,function(e){let t={};return{OperationDefinition:{enter(){t={}}},VariableDefinition(e){t[e.variable.name.value]=e},ListValue(t){if(!Ge(Ye(e.getParentInputType())))return Wn(e,t),!1},ObjectValue(n){const r=qe(e.getInputType());if(!Ce(r))return Wn(e,n),!1;const i=new Map(n.fields.map((e=>[e.name.value,e])));for(const t of Object.values(r.getFields())){if(!i.get(t.name)&&st(t)){const i=Y(t.type);e.reportError(new GraphQLError(`Field "${r.name}.${t.name}" of required type "${i}" was not provided.`,{nodes:n}))}}r.isOneOf&&function(e,t,n,r,i){const o=Array.from(r.keys());if(1!==o.length)return void e.reportError(new GraphQLError(`OneOf Input Object "${n.name}" must specify exactly one key.`,{nodes:[t]}));const s=r.get(o[0])?.value,a=!s||s.kind===h.NULL,c=s?.kind===h.VARIABLE;if(a)return void e.reportError(new GraphQLError(`Field "${n.name}.${o[0]}" must be non-null.`,{nodes:[t]}));if(c){const r=s.name.value;i[r].type.kind!==h.NON_NULL_TYPE&&e.reportError(new GraphQLError(`Variable "${r}" must be non-nullable to be used for OneOf Input Object "${n.name}".`,{nodes:[t]}))}}(e,n,r,i,t)},ObjectField(t){const n=qe(e.getParentInputType());if(!e.getInputType()&&Ce(n)){const r=ue(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+te(r),{nodes:t}))}},NullValue(t){const n=e.getInputType();$e(n)&&e.reportError(new GraphQLError(`Expected value of type "${Y(n)}", found ${Ne(t)}.`,{nodes:t}))},EnumValue:t=>Wn(e,t),IntValue:t=>Wn(e,t),FloatValue:t=>Wn(e,t),StringValue:t=>Wn(e,t),BooleanValue:t=>Wn(e,t)}},function(e){return{...Gn(e),Field:{leave(t){const n=e.getFieldDef();if(!n)return!1;const r=new Set(t.arguments?.map((e=>e.name.value)));for(const i of n.args)if(!r.has(i.name)&&tt(i)){const r=Y(i.type);e.reportError(new GraphQLError(`Field "${n.name}" argument "${i.name}" of type "${r}" is required, but it was not provided.`,{nodes:t}))}}}}},function(e){let t;return{OperationDefinition:{enter(){t=new Map},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t.get(r);if(s&&i){const t=e.getSchema(),a=ln(t,s.type);if(a&&!Zn(t,a,s.defaultValue,i,o)){const t=Y(a),o=Y(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,{nodes:[s,n]}))}}}}},VariableDefinition(e){t.set(e.variable.name.value,e)}}},function(e){const t=new PairSet,n=new Map;return{SelectionSet(r){const i=function(e,t,n,r,i){const o=[],[s,a]=Fn(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of i.entries())if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",{nodes:t})),++r)}}},function(e){const t=e.getSchema(),n=new Map,r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){const i=t.operationTypes??[];for(const t of i){const i=t.operation,o=n.get(i);r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,{nodes:t})):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,{nodes:[o,t]})):n.set(i,t)}return!1}},function(e){const t=new Map,n=e.getSchema();return{ScalarTypeDefinition:r,ObjectTypeDefinition:r,InterfaceTypeDefinition:r,UnionTypeDefinition:r,EnumTypeDefinition:r,InputObjectTypeDefinition:r};function r(r){const i=r.name.value;if(n?.getType(i))return void e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,{nodes:r.name}));const o=t.get(i);return null!=o?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,{nodes:[o,r.name]})):t.set(i,r.name),!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=new Map;return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){const i=t.name.value;let o=r.get(i);null==o&&(o=new Map,r.set(i,o));const s=t.values??[];for(const t of s){const r=t.name.value,s=n[i];if(Re(s)&&s.getValue(r)){e.reportError(new GraphQLError(`Enum value "${i}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:t.name}));continue}const a=o.get(r);null!=a?e.reportError(new GraphQLError(`Enum value "${i}.${r}" can only be defined once.`,{nodes:[a,t.name]})):o.set(r,t.name)}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=new Map;return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){const i=t.name.value;let o=r.get(i);null==o&&(o=new Map,r.set(i,o));const s=t.fields??[];for(const t of s){const r=t.name.value;if(zn(n[i],r)){e.reportError(new GraphQLError(`Field "${i}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:t.name}));continue}const s=o.get(r);null!=s?e.reportError(new GraphQLError(`Field "${i}.${r}" can only be defined once.`,{nodes:[s,t.name]})):o.set(r,t.name)}return!1}},function(e){return{DirectiveDefinition(e){const t=e.arguments??[];return n(`@${e.name.value}`,t)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){const t=e.name.value,r=e.fields??[];for(const e of r){n(`${t}.${e.name.value}`,e.arguments??[])}return!1}function n(t,n){const r=qn(n,(e=>e.name.value));for(const[n,i]of r)i.length>1&&e.reportError(new GraphQLError(`Argument "${t}(${n}:)" can only be defined once.`,{nodes:i.map((e=>e.name))}));return!1}},function(e){const t=new Map,n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(n?.getDirective(i))return void e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,{nodes:r.name}));const o=t.get(i);return o?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,{nodes:[o,r.name]})):t.set(i,r.name),!1}}},Nn,yn,Xn,function(e){const t=e.getSchema(),r=new Map;for(const t of e.getDocument().definitions)mn(t)&&r.set(t.name.value,t);return{ScalarTypeExtension:i,ObjectTypeExtension:i,InterfaceTypeExtension:i,UnionTypeExtension:i,EnumTypeExtension:i,InputObjectTypeExtension:i};function i(i){const o=i.name.value,s=r.get(o),a=t?.getType(o);let c;if(null!=s?c=Cn[s.kind]:a&&(c=function(e){if(De(e))return h.SCALAR_TYPE_EXTENSION;if(ke(e))return h.OBJECT_TYPE_EXTENSION;if(Fe(e))return h.INTERFACE_TYPE_EXTENSION;if(xe(e))return h.UNION_TYPE_EXTENSION;if(Re(e))return h.ENUM_TYPE_EXTENSION;if(Ce(e))return h.INPUT_OBJECT_TYPE_EXTENSION;n(0,"Unexpected type: "+Y(e))}(a)),null!=c){if(c!==i.kind){const t=function(e){switch(e){case h.SCALAR_TYPE_EXTENSION:return"scalar";case h.OBJECT_TYPE_EXTENSION:return"object";case h.INTERFACE_TYPE_EXTENSION:return"interface";case h.UNION_TYPE_EXTENSION:return"union";case h.ENUM_TYPE_EXTENSION:return"enum";case h.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:n(0,"Unexpected kind: "+Y(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,{nodes:s?[s,i]:i}))}}else{const n=ue(o,[...r.keys(),...Object.keys(t?.getTypeMap()??{})]);e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+te(n),{nodes:i.name}))}}},Tn,Kn,Hn,Gn]);class ASTValidationContext{constructor(e,t){this._ast=e,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=t}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(e){this._onError(e)}getDocument(){return this._ast}getFragment(e){let t;if(this._fragments)t=this._fragments;else{t=Object.create(null);for(const e of this.getDocument().definitions)e.kind===h.FRAGMENT_DEFINITION&&(t[e.name.value]=e);this._fragments=t}return t[e]}getFragmentSpreads(e){let t=this._fragmentSpreads.get(e);if(!t){t=[];const n=[e];let r;for(;r=n.pop();)for(const e of r.selections)e.kind===h.FRAGMENT_SPREAD?t.push(e):e.selectionSet&&n.push(e.selectionSet);this._fragmentSpreads.set(e,t)}return t}getRecursivelyReferencedFragments(e){let t=this._recursivelyReferencedFragments.get(e);if(!t){t=[];const n=new Set,r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!n.has(i)){n.add(i);const e=this.getFragment(i);e&&(t.push(e),r.push(e.selectionSet))}}this._recursivelyReferencedFragments.set(e,t)}return t}}class SDLValidationContext extends ASTValidationContext{constructor(e,t,n){super(e,n),this._schema=t}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}}class ValidationContext extends ASTValidationContext{constructor(e,t,n,r){super(t,r),this._schema=e,this._typeInfo=n,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(e){let t=this._variableUsages.get(e);if(!t){const n=[],r=new TypeInfo(this._schema);Ee(e,dn(r,{VariableDefinition:()=>!1,Variable(e){n.push({node:e,type:r.getInputType(),defaultValue:r.getDefaultValue()})}})),t=n,this._variableUsages.set(e,t)}return t}getRecursiveVariableUsages(e){let t=this._recursiveVariableUsages.get(e);if(!t){t=this.getVariableUsages(e);for(const n of this.getRecursivelyReferencedFragments(e))t=t.concat(this.getVariableUsages(n));this._recursiveVariableUsages.set(e,t)}return t}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}}function rr(e,t,n=tr,r,i=new TypeInfo(e)){!function(e){const t=Xt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const o=new GraphQLError("Too many validation errors, error limit reached. Validation aborted."),s=[],a=new ValidationContext(e,t,i,(e=>{if(s.length>=100)throw o;s.push(e)})),c=Te(n.map((e=>e(a))));try{Ee(t,dn(i,c))}catch(e){if(e!==o)throw e;s.push(o)}return s}function ir(e,n){t(e)&&t(e.__schema)||P(0,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${Y(e)}.`);const r=e.__schema,i=new Map(r.types.map((e=>[e.name,f(e)])));for(const e of[...Tt,...Yt])i.has(e.name)&&i.set(e.name,e);const o=null!=r.queryType?p(r.queryType):null,s=null!=r.mutationType?p(r.mutationType):null,a=null!=r.subscriptionType?p(r.subscriptionType):null,c=null!=r.directives?r.directives.map((function(e){if(null==e.args){const t=Y(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(null==e.locations){const t=Y(e);throw new Error(`Introspection result missing directive locations: ${t}.`)}return new GraphQLDirective({name:e.name,description:e.description,isRepeatable:e.isRepeatable,locations:e.locations.slice(),args:y(e.args)})})):[];return new GraphQLSchema({description:r.description,query:o,mutation:s,subscription:a,types:[...i.values()],directives:c,assumeValid:n?.assumeValid});function u(e){if(e.kind===Mt.LIST){const t=e.ofType;if(null==t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(u(t))}if(e.kind===Mt.NON_NULL){const t=e.ofType;if(null==t)throw new Error("Decorated type deeper than introspection query.");const n=u(t);return new GraphQLNonNull(Be(n))}return l(e)}function l(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${Y(e)}.`);const n=i.get(t);if(null==n)throw new Error(`Invalid or incomplete schema, unknown type: ${t}. Ensure that a full introspection query is used in order to build a client schema.`);return n}function p(e){return function(e){if(!ke(e))throw new Error(`Expected ${Y(e)} to be a GraphQL Object type.`);return e}(l(e))}function d(e){return function(e){if(!Fe(e))throw new Error(`Expected ${Y(e)} to be a GraphQL Interface type.`);return e}(l(e))}function f(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case Mt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case Mt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>E(n)});case Mt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>E(t)});case Mt.UNION:return function(e){if(null==e.possibleTypes){const t=Y(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(p)})}(e);case Mt.ENUM:return function(e){if(null==e.enumValues){const t=Y(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:re(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case Mt.INPUT_OBJECT:return function(e){if(null==e.inputFields){const t=Y(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>y(e.inputFields),isOneOf:e.isOneOf})}(e)}var t,n,r;const i=Y(e);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${i}.`)}function h(e){if(null===e.interfaces&&e.kind===Mt.INTERFACE)return[];if(null==e.interfaces){const t=Y(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(d)}function E(e){if(null==e.fields)throw new Error(`Introspection result missing fields: ${Y(e)}.`);return re(e.fields,(e=>e.name),T)}function T(e){const t=u(e.type);if(!Ue(t)){const e=Y(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(null==e.args){const t=Y(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:y(e.args)}}function y(e){return re(e,(e=>e.name),N)}function N(e){const t=u(e.type);if(!Qe(t)){const e=Y(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?Qn(function(e,t){const n=new Parser(e,t);n.expectToken(m.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(m.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function or(e,t,r){const i=[],o=new AccumulatorMap,s=new AccumulatorMap,a=new AccumulatorMap,c=new AccumulatorMap,u=new AccumulatorMap,l=new AccumulatorMap,p=[];let d;const f=[];let m=!1;for(const e of t.definitions){switch(e.kind){case h.SCHEMA_DEFINITION:d=e;break;case h.SCHEMA_EXTENSION:f.push(e);break;case h.DIRECTIVE_DEFINITION:p.push(e);break;case h.SCALAR_TYPE_DEFINITION:case h.OBJECT_TYPE_DEFINITION:case h.INTERFACE_TYPE_DEFINITION:case h.UNION_TYPE_DEFINITION:case h.ENUM_TYPE_DEFINITION:case h.INPUT_OBJECT_TYPE_DEFINITION:i.push(e);break;case h.SCALAR_TYPE_EXTENSION:o.add(e.name.value,e);break;case h.OBJECT_TYPE_EXTENSION:s.add(e.name.value,e);break;case h.INTERFACE_TYPE_EXTENSION:a.add(e.name.value,e);break;case h.UNION_TYPE_EXTENSION:c.add(e.name.value,e);break;case h.ENUM_TYPE_EXTENSION:u.add(e.name.value,e);break;case h.INPUT_OBJECT_TYPE_EXTENSION:l.add(e.name.value,e);break;default:continue}m=!0}if(!m)return e;const E=new Map(e.types.map((e=>[e.name,v(e)])));for(const e of i){const t=e.name.value;E.set(t,sr.get(t)??F(e))}const T={query:e.query&&N(e.query),mutation:e.mutation&&N(e.mutation),subscription:e.subscription&&N(e.subscription),...d&&_([d]),..._(f)};return{description:d?.description?.value??e.description,...T,types:Array.from(E.values()),directives:[...e.directives.map((function(e){if(Dt(e))return e;const t=e.toConfig();return new GraphQLDirective({...t,args:ie(t.args,g)})})),...p.map((function(e){return new GraphQLDirective({name:e.name.value,description:e.description?.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:b(e.arguments),astNode:e})}))],extensions:e.extensions,astNode:d??e.astNode,extensionASTNodes:e.extensionASTNodes.concat(f),assumeValid:r?.assumeValid??!1};function y(e){return Ge(e)?new GraphQLList(y(e.ofType)):$e(e)?new GraphQLNonNull(y(e.ofType)):N(e)}function N(e){return E.get(e.name)}function v(e){return Jt(e)||yt(e)?e:De(e)?function(e){const t=e.toConfig(),n=o.get(t.name)??[];let r=t.specifiedByURL;for(const e of n)r=cr(e)??r;return new GraphQLScalarType({...t,specifiedByURL:r,extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):ke(e)?function(e){const t=e.toConfig(),n=s.get(t.name)??[];return new GraphQLObjectType({...t,interfaces:()=>[...e.getInterfaces().map(N),...D(n)],fields:()=>({...ie(t.fields,I),...L(n)}),extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):Fe(e)?function(e){const t=e.toConfig(),n=a.get(t.name)??[];return new GraphQLInterfaceType({...t,interfaces:()=>[...e.getInterfaces().map(N),...D(n)],fields:()=>({...ie(t.fields,I),...L(n)}),extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):xe(e)?function(e){const t=e.toConfig(),n=c.get(t.name)??[];return new GraphQLUnionType({...t,types:()=>[...e.getTypes().map(N),...k(n)],extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):Re(e)?function(e){const t=e.toConfig(),n=u.get(e.name)??[];return new GraphQLEnumType({...t,values:{...t.values,...w(n)},extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):Ce(e)?function(e){const t=e.toConfig(),n=l.get(t.name)??[];return new GraphQLInputObjectType({...t,fields:()=>({...ie(t.fields,(e=>({...e,type:y(e.type)}))),...A(n)}),extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):void n(0,"Unexpected type: "+Y(e))}function I(e){return{...e,type:y(e.type),args:e.args&&ie(e.args,g)}}function g(e){return{...e,type:y(e.type)}}function _(e){const t={};for(const n of e){const e=n.operationTypes??[];for(const n of e)t[n.operation]=O(n.type)}return t}function O(e){const t=e.name.value,n=sr.get(t)??E.get(t);if(void 0===n)throw new Error(`Unknown type: "${t}".`);return n}function S(e){return e.kind===h.LIST_TYPE?new GraphQLList(S(e.type)):e.kind===h.NON_NULL_TYPE?new GraphQLNonNull(S(e.type)):O(e)}function L(e){const t=Object.create(null);for(const n of e){const e=n.fields??[];for(const n of e)t[n.name.value]={type:S(n.type),description:n.description?.value,args:b(n.arguments),deprecationReason:ar(n),astNode:n}}return t}function b(e){const t=e??[],n=Object.create(null);for(const e of t){const t=S(e.type);n[e.name.value]={type:t,description:e.description?.value,defaultValue:Qn(e.defaultValue,t),deprecationReason:ar(e),astNode:e}}return n}function A(e){const t=Object.create(null);for(const n of e){const e=n.fields??[];for(const n of e){const e=S(n.type);t[n.name.value]={type:e,description:n.description?.value,defaultValue:Qn(n.defaultValue,e),deprecationReason:ar(n),astNode:n}}}return t}function w(e){const t=Object.create(null);for(const n of e){const e=n.values??[];for(const n of e)t[n.name.value]={description:n.description?.value,deprecationReason:ar(n),astNode:n}}return t}function D(e){return e.flatMap((e=>e.interfaces?.map(O)??[]))}function k(e){return e.flatMap((e=>e.types?.map(O)??[]))}function F(e){const t=e.name.value;switch(e.kind){case h.OBJECT_TYPE_DEFINITION:{const n=s.get(t)??[],r=[e,...n];return new GraphQLObjectType({name:t,description:e.description?.value,interfaces:()=>D(r),fields:()=>L(r),astNode:e,extensionASTNodes:n})}case h.INTERFACE_TYPE_DEFINITION:{const n=a.get(t)??[],r=[e,...n];return new GraphQLInterfaceType({name:t,description:e.description?.value,interfaces:()=>D(r),fields:()=>L(r),astNode:e,extensionASTNodes:n})}case h.ENUM_TYPE_DEFINITION:{const n=u.get(t)??[],r=[e,...n];return new GraphQLEnumType({name:t,description:e.description?.value,values:w(r),astNode:e,extensionASTNodes:n})}case h.UNION_TYPE_DEFINITION:{const n=c.get(t)??[],r=[e,...n];return new GraphQLUnionType({name:t,description:e.description?.value,types:()=>k(r),astNode:e,extensionASTNodes:n})}case h.SCALAR_TYPE_DEFINITION:{const n=o.get(t)??[];return new GraphQLScalarType({name:t,description:e.description?.value,specifiedByURL:cr(e),astNode:e,extensionASTNodes:n})}case h.INPUT_OBJECT_TYPE_DEFINITION:{const r=l.get(t)??[],i=[e,...r];return new GraphQLInputObjectType({name:t,description:e.description?.value,fields:()=>A(i),astNode:e,extensionASTNodes:r,isOneOf:(n=e,Boolean(Mn(At,n)))})}}var n}}const sr=new Map([...Tt,...Yt].map((e=>[e.name,e])));function ar(e){const t=Mn(Lt,e);return t?.reason}function cr(e){const t=Mn(bt,e);return t?.url}function ur(e){return function(e,t,r){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(r);return[pr(e),...i.map((e=>function(e){return yr(e)+"directive @"+e.name+mr(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(De(e))return function(e){return yr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${Ne({kind:h.STRING,value:e.specifiedByURL})})`}(e)}(e);if(ke(e))return function(e){return yr(e)+`type ${e.name}`+dr(e)+fr(e)}(e);if(Fe(e))return function(e){return yr(e)+`interface ${e.name}`+dr(e)+fr(e)}(e);if(xe(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return yr(e)+"union "+e.name+n}(e);if(Re(e))return function(e){const t=e.getValues().map(((e,t)=>yr(e," ",!t)+" "+e.name+Tr(e.deprecationReason)));return yr(e)+`enum ${e.name}`+hr(t)}(e);if(Ce(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>yr(e," ",!t)+" "+Er(e)));return yr(e)+`input ${e.name}`+(e.isOneOf?" @oneOf":"")+hr(t)}(e);n(0,"Unexpected type: "+Y(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>!Dt(e)),lr)}function lr(e){return!yt(e)&&!Jt(e)}function pr(e){const t=e.getQueryType(),n=e.getMutationType(),r=e.getSubscriptionType();if(t||n||r)return null==e.description&&function(e){return e.getQueryType()==e.getType("Query")&&e.getMutationType()==e.getType("Mutation")&&e.getSubscriptionType()==e.getType("Subscription")}(e)?void 0:yr(e)+"schema {\n"+(t?` query: ${t.name}\n`:"")+(n?` mutation: ${n.name}\n`:"")+(r?` subscription: ${r.name}\n`:"")+"}"}function dr(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function fr(e){return hr(Object.values(e.getFields()).map(((e,t)=>yr(e," ",!t)+" "+e.name+mr(e.args," ")+": "+String(e.type)+Tr(e.deprecationReason))))}function hr(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function mr(e,t=""){return 0===e.length?"":e.every((e=>null==e.description))?"("+e.map(Er).join(", ")+")":"(\n"+e.map(((e,n)=>yr(e," "+t,!n)+" "+t+Er(e))).join("\n")+"\n"+t+")"}function Er(e){const t=kt(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${Ne(t)}`),n+Tr(e.deprecationReason)}function Tr(e){if(null==e)return"";if(e!==St){return` @deprecated(reason: ${Ne({kind:h.STRING,value:e})})`}return" @deprecated"}function yr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+Ne({kind:h.STRING,value:r,block:_(r)}).replaceAll("\n","\n"+t)+"\n"}function Nr(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:h.DOCUMENT,definitions:t}}const vr=[In];function Ir(e){var t;const n=function(e){if(e)return function(t){const n=e;return{Field(e){var r;const i=(null!==(r=e.alias)&&void 0!==r?r:e.name).value,o=i.charAt(0).toLowerCase()+i.slice(1);n.includes(o)&&t.reportError(new GraphQLError(`Field name "${i}" is not allowed because it conflicts with generated object APIs. Please use an alias to change the field name.`,{nodes:e}))}}};return}(null===(t=e.disallowedFieldNames)||void 0===t?void 0:t.allFields),r=function(e){if(e)return function(t){const n=e;return{VariableDefinition(e){const r=e.variable.name.value,i=r.charAt(0).toLowerCase()+r.slice(1);n.includes(i)&&t.reportError(new GraphQLError(`Input Parameter name "${r}" is not allowed because it conflicts with generated object APIs.`,{nodes:e}))}}};return}(e.disallowedInputParameterNames);return[gr,_r,Or,Sr,...n?[n]:[],...r?[r]:[],...tr.filter((e=>!vr.includes(e)))]}function gr(e){return{OperationDefinition:t=>(t.name||e.reportError(new GraphQLError("Apollo does not support anonymous operations because operation names are used during code generation. Please give this operation a name.",{nodes:t})),!1)}}function _r(e){return{Field(t){"__typename"==(t.alias&&t.alias.value)&&e.reportError(new GraphQLError("Apollo needs to be able to insert __typename when needed, so using it as an alias is not supported.",{nodes:t}))}}}function Or(e){return{InlineFragment(t){if(t.directives)for(const n of t.directives)n.name.value==_t.name&&null==t.typeCondition&&e.reportError(new GraphQLError("Apollo does not support deferred inline fragments without a type condition. Please add a type condition to this inline fragment.",{nodes:t}))}}}function Sr(e){return{InlineFragment(t){var n;if(t.directives)for(const r of t.directives)r.name.value!=_t.name||(null===(n=r.arguments)||void 0===n?void 0:n.find((e=>"label"==e.name.value)))||e.reportError(new GraphQLError("Apollo does not support deferred inline fragments without a 'label' argument. Please add a 'label' argument to the @defer directive on this inline fragment.",{nodes:t}))}}}function Lr(e){return{kind:h.NAME,value:e}}function br(e){return{kind:h.STRING,value:e}}function Ar(e){return{kind:h.DIRECTIVE_DEFINITION,description:e.description?br(e.description):void 0,name:Lr(e.name),repeatable:!1,locations:e.locations.map((e=>Lr(e))),arguments:e.args.map((e=>function(e){return{kind:h.INPUT_VALUE_DEFINITION,description:br(e.description),name:Lr(e.name),type:wr(qe(e.type))}}(e)))}}function wr(e){return{kind:h.NAMED_TYPE,name:Lr(e.name)}}const Dr={kind:h.DIRECTIVE_DEFINITION,description:br("A directive used by the Apollo iOS client to annotate operations or fragments that should be used exclusively for generating local cache mutations instead of as standard operations."),name:Lr("apollo_client_ios_localCacheMutation"),repeatable:!1,locations:[Lr("QUERY"),Lr("MUTATION"),Lr("SUBSCRIPTION"),Lr("FRAGMENT_DEFINITION")]},kr={kind:h.DIRECTIVE_DEFINITION,description:br("A directive used by the Apollo iOS code generation engine to generate custom import statements in operation or fragment definition files. An import statement to import a module with the name provided in the `module` argument will be added to the generated definition file."),name:Lr("import"),arguments:[{kind:h.INPUT_VALUE_DEFINITION,description:br("The name of the module to import."),name:Lr("module"),type:(Fr=wr(ht),{kind:h.NON_NULL_TYPE,type:Fr})}],repeatable:!0,locations:[Lr("QUERY"),Lr("MUTATION"),Lr("SUBSCRIPTION"),Lr("FRAGMENT_DEFINITION")]};var Fr;const xr={kind:h.DOCUMENT,definitions:[Dr,kr]};const Rr={kind:h.FIELD,name:{kind:h.NAME,value:"__typename"}};class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function Cr(e){const t=function(e,t,n=nr){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return Ee(e,Te(n.map((e=>e(i))))),r}(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function Gr(e){const t=Xt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function $r(e){return e.startsWith("__")}const Qr={kind:h.FIELD,name:{kind:h.NAME,value:"__typename"}};function Ur(e,t){return t&&(e=function(e){return Ee(e,{enter:e=>e.kind!==h.SELECTION_SET?void 0:{...e,selections:e.selections.filter((e=>!("Field"===e.kind&&"__typename"===e.name.value)))},leave(e){if((e.kind===h.FIELD||e.kind===h.FRAGMENT_DEFINITION||e.kind===h.INLINE_FRAGMENT)&&e.selectionSet)return{...e,selectionSet:{...e.selectionSet,selections:[Rr,...e.selectionSet.selections]}}}})}(e)),Ee(e,{SelectionSet:{leave:(e,t,n)=>p(n)&&![h.FIELD,h.FRAGMENT_DEFINITION].includes(n.kind)?e:function(e){const t=e.selections.find((e=>e.kind==Qr.kind&&e.name.value==Qr.name.value));return t?e:{...e,selections:[Qr,...e.selections]}}(e)},Field:{enter:e=>function(e){return e.name.value==Qr.name.value?{...e,alias:void 0,directives:void 0}:e}(e)},Directive:{enter:e=>function(e){const t=[Dr,kr];for(const n of t)if(e.name.value==n.name.value)return null;return e}(e)}})}function Mr(e){return null!=e}function Vr(e){switch(e.kind){case h.VARIABLE:return{kind:e.kind,value:e.name.value};case h.LIST:return{kind:e.kind,value:e.values.map(Vr)};case h.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=Vr(t.value),e)),{})};default:return e}}function Pr(e){var t,n;return null===(n=null===(t=e.loc)||void 0===t?void 0:t.source)||void 0===n?void 0:n.name}function jr(e,t,n,r){var i,o,s;const a=new Map;for(const e of t.definitions)e.kind===h.FRAGMENT_DEFINITION&&a.set(e.name.value,e);const c=[],u=new Map,l=new Set,p=e.getQueryType();if(void 0===p)throw new GraphQLError("GraphQL Schema must contain a 'query' root type definition.",{});const d={queryType:p,mutationType:null!==(i=e.getMutationType())&&void 0!==i?i:void 0,subscriptionType:null!==(o=e.getSubscriptionType())&&void 0!==o?o:void 0};for(const e of t.definitions)e.kind===h.OPERATION_DEFINITION&&c.push(m(e));for(const[e,t]of a.entries())u.set(e,E(t));return{rootTypes:d,operations:c,fragments:Array.from(u.values()),referencedTypes:Array.from(l.values()),schemaDocumentation:null!==(s=e.description)&&void 0!==s?s:void 0};function f(t){if(!l.has(t)){if(l.add(t),Fe(t))for(const n of e.getPossibleTypes(t))f(qe(n));if(xe(t)){const e=t.getTypes();for(t of e)f(qe(t))}if(Ce(t)&&function(e){const t=e.getFields();for(const e in t){f(qe(t[e].type))}}(t),ke(t))for(const e of t.getInterfaces())f(qe(e))}}function m(t){var r;if(!t.name)throw new GraphQLError("Operations should be named",{nodes:t});const i=Pr(t),o=t.name.value,s=t.operation,a=new Set,c=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?Vr(t.defaultValue):void 0,i=ln(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,{nodes:t});return f(qe(i)),{name:n,type:i,defaultValue:r}})),u=Ne(Ur(t,n)),l=e.getRootType(s),[p]=null!==(r=N(t.directives))&&void 0!==r?r:[void 0,void 0];return f(l),{name:o,operationType:s,variables:c,rootType:l,selectionSet:T(t.selectionSet,l,a),directives:p,referencedFragments:Array.from(a.values()),source:u,filePath:i}}function E(t){var r;const i=t.name.value,o=Pr(t),s=Ne(Ur(t,n)),a=new Set,c=ln(e,t.typeCondition),[u]=null!==(r=N(t.directives))&&void 0!==r?r:[void 0,void 0];return f(qe(c)),{name:i,filePath:o,source:s,typeCondition:c,selectionSet:T(t.selectionSet,c,a),directives:u,referencedFragments:Array.from(a.values())}}function T(t,n,i){return{parentType:n,selections:t.selections.map((t=>function(t,n,i){var o,s,c,l;const[p,d]=null!==(o=N(t.directives))&&void 0!==o?o:[void 0,void 0];switch(t.kind){case h.FIELD:{const m=t.name.value;if("__typename"==m)return;const v=null===(s=t.alias)||void 0===s?void 0:s.value,I=function(e,t,n){return n===Pt.name&&e.getQueryType()===t?Pt:n===jt.name&&e.getQueryType()===t?jt:n===Bt.name&&(ke(t)||Fe(t)||xe(t))?Bt:ke(t)||Fe(t)?t.getFields()[n]:void 0}(e,n,m);if(!I)throw new GraphQLError(`Cannot query field "${m}" on type "${String(n)}"`,{nodes:t});const g=I.type,_=qe(I.type);f(qe(_));const{description:O,deprecationReason:S}=I;let L={kind:"Field",name:m,alias:v,type:g,arguments:y(I,t.arguments),inclusionConditions:d,description:!$r(m)&&O?O:void 0,deprecationReason:S||void 0,directives:p};function b(e,t,n){var r;if(t&&n){const i=(null!==(r=e.alias)&&void 0!==r?r:e.name).value,o=i.charAt(0).toLowerCase()+i.slice(1);if(null==t?void 0:t.includes(o))throw new GraphQLError(`Schema name "${n}" conflicts with name of a generated object API. Please choose a different schema name. Suggestions: "${n}Schema", "${n}GraphQL", "${n}API"`,{nodes:e})}}if(Ge(g)||$e(g)&&Ge(g.ofType)?b(t,null===(c=r.disallowedFieldNames)||void 0===c?void 0:c.entityList,r.schemaNamespace):Ve(_)&&b(t,null===(l=r.disallowedFieldNames)||void 0===l?void 0:l.entity,r.schemaNamespace),Ve(_)){const A=t.selectionSet;if(!A)throw new GraphQLError(`Composite field "${m}" on type "${String(n)}" requires selection set`,{nodes:t});L.selectionSet=T(A,_,i)}return L}case h.INLINE_FRAGMENT:{const w=t.typeCondition,D=w?ln(e,w):n;return f(D),{kind:"InlineFragment",selectionSet:T(t.selectionSet,D,i),inclusionConditions:d,directives:p}}case h.FRAGMENT_SPREAD:{const k=t.name.value,F=function(e){let t=u.get(e);if(t)return t;const n=a.get(e);return n?(a.delete(e),t=E(n),u.set(e,t),t):void 0}(k);if(!F)throw new GraphQLError(`Unknown fragment "${k}".`,{nodes:t.name});i.add(F);return{kind:"FragmentSpread",fragment:F,inclusionConditions:d,directives:p}}}}(t,n,i))).filter(Mr)}}function y(...e){const t=e[0].args;return e[1]&&e[1].length>0?e[1].map((e=>{var n;const r=e.name.value,i=t.find((t=>t.name===e.name.value)),o=null==i?void 0:i.type;if(!o)throw new GraphQLError(`Cannot find directive argument type for argument "${r}".`,{nodes:[e]});return{name:r,value:Vr(e.value),type:o,deprecationReason:null!==(n=i.deprecationReason)&&void 0!==n?n:void 0}})):void 0}function N(t){if(t&&t.length>0){const n=[],r=[];for(const i of t){const t=i.name.value,o=e.getDirective(t);if(!o)throw new GraphQLError(`Cannot find directive "${t}".`,{nodes:i});n.push({name:t,arguments:y(o,i.arguments)});const s=v(i,o);s&&r.push(s)}return[n,r.length>0?r:void 0]}}function v(e,t){var n;if("include"==t.name||"skip"==t.name){const r=null===(n=e.arguments)||void 0===n?void 0:n[0].value,i="skip"==t.name;switch(null==r?void 0:r.kind){case h.BOOLEAN:return i?r.value?"SKIPPED":"INCLUDED":r.value?"INCLUDED":"SKIPPED";case h.VARIABLE:return{variable:r.name.value,isInverted:i};default:throw new GraphQLError('Conditional inclusion directive has invalid "if" argument.',{nodes:e})}}}}function Br(e){return e.kind===h.DIRECTIVE_DEFINITION&&e.name.value===_t.name}function Yr(){return{kind:h.DOCUMENT,definitions:[Ar(_t)]}}return e.GraphQLEnumType=GraphQLEnumType,e.GraphQLError=GraphQLError,e.GraphQLInputObjectType=GraphQLInputObjectType,e.GraphQLInterfaceType=GraphQLInterfaceType,e.GraphQLObjectType=GraphQLObjectType,e.GraphQLScalarType=GraphQLScalarType,e.GraphQLSchema=GraphQLSchema,e.GraphQLSchemaValidationError=GraphQLSchemaValidationError,e.GraphQLUnionType=GraphQLUnionType,e.Source=Source,e.compileDocument=function(e,t,n,r){return jr(e,t,n,r)},e.loadSchemaFromSources=function(e){var t,n=new Array;for(const r of e)if(r.name.endsWith(".json")){if(t)throw new Error(`Schema search paths can only include one JSON schema definition.\n Found "${t.name} & "${r.name}".`);t=r}else n.push(K(r));var r=function(e){return e.definitions.some((e=>e.kind==h.DIRECTIVE_DEFINITION&&e.name.value==Dr.name.value))?e:Nr([e,xr])}(Nr(n));if(t){var i=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=ir(t);return n}(t.body);return r=function(e,t){const n=e.getDirective(_t.name);return n?function(e,t){return e.isRepeatable===t.isRepeatable&&e.locations.slice(0).sort().toString()===t.locations.slice(0).sort().toString()&&e.args.map((e=>e.name)).sort().toString()===t.args.map((e=>e.name)).sort().toString()}(n,_t)?t:(console.warn(`Unsupported ${n.name} directive found. It will be replaced with a supported definition instead.`),Nr([t,Yr()])):Nr([t,Yr()])}(i,r),Gr(i=function(e,t,n){qt(e);const r=e.toConfig(),i=or(r,t,n);return r===i?e:new GraphQLSchema(i)}(i,r,{assumeValid:!0,assumeValidSDL:!0})),i}{r=function(e){const t=e.definitions.find(Br);if(!t)return Nr([e,Yr()]);const n=t;if(!function(e,t){var n;return e.repeatable===t.isRepeatable&&e.locations.map((e=>e.value)).sort().toString()===t.locations.slice(0).sort().toString()&&(null===(n=e.arguments)||void 0===n?void 0:n.map((e=>e.name.value)).sort().toString())===t.args.map((e=>e.name)).sort().toString()}(n,_t))return console.warn(`Unsupported ${n.name.value} directive found. It will be replaced with a supported definition instead.`),{kind:h.DOCUMENT,definitions:e.definitions.filter((e=>Br(e)?void 0:e)).concat(Ar(_t))};return e}(r),Cr(r);const e=function(e,t){const n=or({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,t);if(null==n.astNode)for(const e of n.types)switch(e.name){case"Query":n.query=e;break;case"Mutation":n.mutation=e;break;case"Subscription":n.subscription=e}const r=[...n.directives,...wt.filter((e=>n.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...n,directives:r})}(r,{assumeValid:!0,assumeValidSDL:!0});return Gr(e),e}},e.mergeDocuments=function(e){return Nr(e)},e.parseOperationDocument=function(e){return K(e)},e.printSchemaToSDL=function(e){return ur(e)},e.validateDocument=function(e,t,n){return rr(e,t,Ir(n))},e}({});"# \ No newline at end of file +let ApolloCodegenFrontendBundle: String = #"var ApolloCodegenFrontend=function(e){"use strict";function t(e){return"object"==typeof e&&null!==e}function n(e,t){throw new Error(null!=t?t:"Unexpected invariant triggered.")}const r=/\r\n|[\n\r]/g;function i(e,t){let i=0,o=1;for(const s of e.body.matchAll(r)){if("number"==typeof s.index||n(),s.index>=t)break;i=s.index+s[0].length,o+=1}return{line:o,column:t+1-i}}function o(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,a=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${a}:${u}\n`,p=r.split(/\r\n|[\n\r]/g),d=p[i];if(d.length>120){const e=Math.floor(u/80),t=u%80,n=[];for(let e=0;e["|",e])),["|","^".padStart(t)],["|",n[e+1]]])}return l+s([[a-1+" |",p[i-1]],[`${a} |`,d],["|","^".padStart(u)],[`${a+1} |`,p[i+1]]])}function s(e){const t=e.filter((([e,t])=>void 0!==t)),n=Math.max(...t.map((([e])=>e.length)));return t.map((([e,t])=>e.padStart(n)+(t?" "+t:""))).join("\n")}class GraphQLError extends Error{constructor(e,n={}){const{nodes:r,source:o,positions:s,path:c,originalError:u,extensions:l}=n;super(e),this.name="GraphQLError",this.path=c??void 0,this.originalError=u??void 0,this.nodes=a(Array.isArray(r)?r:r?[r]:void 0);const p=a(this.nodes?.map((e=>e.loc)).filter((e=>null!=e)));this.source=o??p?.[0]?.source,this.positions=s??p?.map((e=>e.start)),this.locations=s&&o?s.map((e=>i(o,e))):p?.map((e=>i(e.source,e.start)));const d=t(u?.extensions)?u?.extensions:void 0;this.extensions=l??d??Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),null!=u?.stack?Object.defineProperty(this,"stack",{value:u.stack,writable:!0,configurable:!0}):null!=Error.captureStackTrace?Error.captureStackTrace(this,GraphQLError):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let e=this.message;if(this.nodes)for(const n of this.nodes)n.loc&&(e+="\n\n"+o((t=n.loc).source,i(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+o(this.source,t);var t;return e}toJSON(){const e={message:this.message};return null!=this.locations&&(e.locations=this.locations),null!=this.path&&(e.path=this.path),null!=this.extensions&&Object.keys(this.extensions).length>0&&(e.extensions=this.extensions),e}}function a(e){return void 0===e||0===e.length?void 0:e}function c(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,{source:e,positions:[t]})}class Location{constructor(e,t,n){this.start=e.start,this.end=t.end,this.startToken=e,this.endToken=t,this.source=n}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}}class Token{constructor(e,t,n,r,i,o){this.kind=e,this.start=t,this.end=n,this.line=r,this.column=i,this.value=o,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}}const u={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet","nullabilityAssertion"],Argument:["name","value"],ListNullabilityOperator:["nullabilityAssertion"],NonNullAssertion:["nullabilityAssertion"],ErrorBoundary:["nullabilityAssertion"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]},l=new Set(Object.keys(u));function p(e){const t=e?.kind;return"string"==typeof t&&l.has(t)}var d,f,h,m;function E(e){return 9===e||32===e}function T(e){return e>=48&&e<=57}function y(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return y(e)||95===e}function v(e){return y(e)||T(e)||95===e}function I(e){let t=Number.MAX_SAFE_INTEGER,n=null,r=-1;for(let i=0;i0===n?e:e.slice(t))).slice(n??0,r+1)}function g(e){let t=0;for(;t",e.EOF="",e.BANG="!",e.QUESTION_MARK="?",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"}(m||(m={}));class Lexer{constructor(e){const t=new Token(m.SOF,0,0,0,0);this.source=e,this.lastToken=t,this.token=t,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){this.lastToken=this.token;return this.token=this.lookahead()}lookahead(){let e=this.token;if(e.kind!==m.EOF)do{if(e.next)e=e.next;else{const t=D(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===m.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&b(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function b(e){return e>=56320&&e<=57343}function A(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return m.EOF;if(n>=32&&n<=126){const e=String.fromCodePoint(n);return'"'===e?"'\"'":`"${e}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function w(e,t,n,r,i){const o=e.line,s=1+n-e.lineStart;return new Token(t,n,r,o,s,i)}function D(e,t){const n=e.source.body,r=n.length;let i=t;for(;i=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function U(e,t){const n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:"\n",size:2};case 114:return{value:"\r",size:2};case 116:return{value:"\t",size:2}}throw c(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function M(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const u=[];for(;oB)return"[Array]";const n=Math.min(j,e.length),r=e.length-n,i=[];for(let r=0;r1&&i.push(`... ${r} more items`);return"["+i.join(", ")+"]"}(e,n);return function(e,t){const n=Object.entries(e);if(0===n.length)return"{}";if(t.length>B)return"["+function(e){const t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if("Object"===t&&"function"==typeof e.constructor){const t=e.constructor.name;if("string"==typeof t&&""!==t)return t}return t}(e)+"]";const r=n.map((([e,n])=>e+": "+J(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const K=null!=globalThis.process?function(e,t){return e instanceof t}:function(e,t){if(e instanceof t)return!0;if("object"==typeof e&&null!==e){const n=t.prototype[Symbol.toStringTag];if(n===(Symbol.toStringTag in e?e[Symbol.toStringTag]:e.constructor?.name)){const t=Y(e);throw new Error(`Cannot use ${n} "${t}" from another module or realm.\n\nEnsure that there is only one instance of "graphql" in the node_modules\ndirectory. If different versions of "graphql" are the dependencies of other\nrelied on modules, use "resolutions" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate "graphql" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`)}}return!1};class Source{constructor(e,t="GraphQL request",n={line:1,column:1}){this.body=e,this.name=t,this.locationOffset=n,this.locationOffset.line>0||P(0,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||P(0,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function q(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t={}){const n=function(e){return K(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t,this._tokenCounter=0}parseName(){const e=this.expectToken(m.NAME);return this.node(e,{kind:h.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:h.DOCUMENT,definitions:this.many(m.SOF,this.parseDefinition,m.EOF)})}parseDefinition(){if(this.peek(m.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===m.NAME){switch(t.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(e)throw c(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(t.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(t)}parseOperationDefinition(){const e=this._lexer.token;if(this.peek(m.BRACE_L))return this.node(e,{kind:h.OPERATION_DEFINITION,operation:d.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(m.NAME)&&(n=this.parseName()),this.node(e,{kind:h.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(m.NAME);switch(e.value){case"query":return d.QUERY;case"mutation":return d.MUTATION;case"subscription":return d.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(m.PAREN_L,this.parseVariableDefinition,m.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:h.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(m.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(m.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(m.DOLLAR),this.node(e,{kind:h.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:h.SELECTION_SET,selections:this.many(m.BRACE_L,this.parseSelection,m.BRACE_R)})}parseSelection(){return this.peek(m.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(m.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:h.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),nullabilityAssertion:this.parseNullabilityAssertion(),directives:this.parseDirectives(!1),selectionSet:this.peek(m.BRACE_L)?this.parseSelectionSet():void 0})}parseNullabilityAssertion(){if(!0!==this._options.experimentalClientControlledNullability)return;const e=this._lexer.token;let t;if(this.expectOptionalToken(m.BRACKET_L)){const n=this.parseNullabilityAssertion();this.expectToken(m.BRACKET_R),t=this.node(e,{kind:h.LIST_NULLABILITY_OPERATOR,nullabilityAssertion:n})}return this.expectOptionalToken(m.BANG)?t=this.node(e,{kind:h.NON_NULL_ASSERTION,nullabilityAssertion:t}):this.expectOptionalToken(m.QUESTION_MARK)&&(t=this.node(e,{kind:h.ERROR_BOUNDARY,nullabilityAssertion:t})),t}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(m.PAREN_L,t,m.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(m.COLON),this.node(t,{kind:h.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(m.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(m.NAME)?this.node(e,{kind:h.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:h.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){const e=this._lexer.token;return this.expectKeyword("fragment"),!0===this._options.allowLegacyFragmentVariables?this.node(e,{kind:h.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(e,{kind:h.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if("on"===this._lexer.token.value)throw this.unexpected();return this.parseName()}parseValueLiteral(e){const t=this._lexer.token;switch(t.kind){case m.BRACKET_L:return this.parseList(e);case m.BRACE_L:return this.parseObject(e);case m.INT:return this.advanceLexer(),this.node(t,{kind:h.INT,value:t.value});case m.FLOAT:return this.advanceLexer(),this.node(t,{kind:h.FLOAT,value:t.value});case m.STRING:case m.BLOCK_STRING:return this.parseStringLiteral();case m.NAME:switch(this.advanceLexer(),t.value){case"true":return this.node(t,{kind:h.BOOLEAN,value:!0});case"false":return this.node(t,{kind:h.BOOLEAN,value:!1});case"null":return this.node(t,{kind:h.NULL});default:return this.node(t,{kind:h.ENUM,value:t.value})}case m.DOLLAR:if(e){if(this.expectToken(m.DOLLAR),this._lexer.token.kind===m.NAME){const e=this._lexer.token.value;throw c(this._lexer.source,t.start,`Unexpected variable "$${e}" in constant value.`)}throw this.unexpected(t)}return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){const e=this._lexer.token;return this.advanceLexer(),this.node(e,{kind:h.STRING,value:e.value,block:e.kind===m.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:h.LIST,values:this.any(m.BRACKET_L,(()=>this.parseValueLiteral(e)),m.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:h.OBJECT,fields:this.any(m.BRACE_L,(()=>this.parseObjectField(e)),m.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(m.COLON),this.node(t,{kind:h.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(m.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(m.AT),this.node(t,{kind:h.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(m.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(m.BRACKET_R),t=this.node(e,{kind:h.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(m.BANG)?this.node(e,{kind:h.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:h.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(m.STRING)||this.peek(m.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("schema");const n=this.parseConstDirectives(),r=this.many(m.BRACE_L,this.parseOperationTypeDefinition,m.BRACE_R);return this.node(e,{kind:h.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(m.COLON);const n=this.parseNamedType();return this.node(e,{kind:h.OPERATION_TYPE_DEFINITION,operation:t,type:n})}parseScalarTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("scalar");const n=this.parseName(),r=this.parseConstDirectives();return this.node(e,{kind:h.SCALAR_TYPE_DEFINITION,description:t,name:n,directives:r})}parseObjectTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("type");const n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(e,{kind:h.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(m.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(m.BRACE_L,this.parseFieldDefinition,m.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(m.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:h.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(m.PAREN_L,this.parseInputValueDef,m.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(m.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(m.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:h.INPUT_VALUE_DEFINITION,description:t,name:n,type:r,defaultValue:i,directives:o})}parseInterfaceTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("interface");const n=this.parseName(),r=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),o=this.parseFieldsDefinition();return this.node(e,{kind:h.INTERFACE_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseUnionTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("union");const n=this.parseName(),r=this.parseConstDirectives(),i=this.parseUnionMemberTypes();return this.node(e,{kind:h.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(m.EQUALS)?this.delimitedMany(m.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("enum");const n=this.parseName(),r=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();return this.node(e,{kind:h.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(m.BRACE_L,this.parseEnumValueDefinition,m.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:h.ENUM_VALUE_DEFINITION,description:t,name:n,directives:r})}parseEnumValueName(){if("true"===this._lexer.token.value||"false"===this._lexer.token.value||"null"===this._lexer.token.value)throw c(this._lexer.source,this._lexer.token.start,`${X(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("input");const n=this.parseName(),r=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();return this.node(e,{kind:h.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(m.BRACE_L,this.parseInputValueDef,m.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===m.NAME)switch(e.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(e)}parseSchemaExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");const t=this.parseConstDirectives(),n=this.optionalMany(m.BRACE_L,this.parseOperationTypeDefinition,m.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:h.SCHEMA_EXTENSION,directives:t,operationTypes:n})}parseScalarTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");const t=this.parseName(),n=this.parseConstDirectives();if(0===n.length)throw this.unexpected();return this.node(e,{kind:h.SCALAR_TYPE_EXTENSION,name:t,directives:n})}parseObjectTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");const t=this.parseName(),n=this.parseImplementsInterfaces(),r=this.parseConstDirectives(),i=this.parseFieldsDefinition();if(0===n.length&&0===r.length&&0===i.length)throw this.unexpected();return this.node(e,{kind:h.OBJECT_TYPE_EXTENSION,name:t,interfaces:n,directives:r,fields:i})}parseInterfaceTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");const t=this.parseName(),n=this.parseImplementsInterfaces(),r=this.parseConstDirectives(),i=this.parseFieldsDefinition();if(0===n.length&&0===r.length&&0===i.length)throw this.unexpected();return this.node(e,{kind:h.INTERFACE_TYPE_EXTENSION,name:t,interfaces:n,directives:r,fields:i})}parseUnionTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");const t=this.parseName(),n=this.parseConstDirectives(),r=this.parseUnionMemberTypes();if(0===n.length&&0===r.length)throw this.unexpected();return this.node(e,{kind:h.UNION_TYPE_EXTENSION,name:t,directives:n,types:r})}parseEnumTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");const t=this.parseName(),n=this.parseConstDirectives(),r=this.parseEnumValuesDefinition();if(0===n.length&&0===r.length)throw this.unexpected();return this.node(e,{kind:h.ENUM_TYPE_EXTENSION,name:t,directives:n,values:r})}parseInputObjectTypeExtension(){const e=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");const t=this.parseName(),n=this.parseConstDirectives(),r=this.parseInputFieldsDefinition();if(0===n.length&&0===r.length)throw this.unexpected();return this.node(e,{kind:h.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(m.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:h.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(m.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.hasOwn(f,t.value))return t;throw this.unexpected(e)}node(e,t){return!0!==this._options.noLocation&&(t.loc=new Location(e,this._lexer.lastToken,this._lexer.source)),t}peek(e){return this._lexer.token.kind===e}expectToken(e){const t=this._lexer.token;if(t.kind===e)return this.advanceLexer(),t;throw c(this._lexer.source,t.start,`Expected ${z(e)}, found ${X(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this.advanceLexer(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==m.NAME||t.value!==e)throw c(this._lexer.source,t.start,`Expected "${e}", found ${X(t)}.`);this.advanceLexer()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===m.NAME&&t.value===e&&(this.advanceLexer(),!0)}unexpected(e){const t=e??this._lexer.token;return c(this._lexer.source,t.start,`Unexpected ${X(t)}.`)}any(e,t,n){this.expectToken(e);const r=[];for(;!this.expectOptionalToken(n);)r.push(t.call(this));return r}optionalMany(e,t,n){if(this.expectOptionalToken(e)){const e=[];do{e.push(t.call(this))}while(!this.expectOptionalToken(n));return e}return[]}many(e,t,n){this.expectToken(e);const r=[];do{r.push(t.call(this))}while(!this.expectOptionalToken(n));return r}delimitedMany(e,t){this.expectOptionalToken(e);const n=[];do{n.push(t.call(this))}while(this.expectOptionalToken(e));return n}advanceLexer(){const{maxTokens:e}=this._options,t=this._lexer.advance();if(void 0!==e&&t.kind!==m.EOF&&(++this._tokenCounter,this._tokenCounter>e))throw c(this._lexer.source,t.start,`Document contains more than ${e} tokens. Parsing aborted.`)}}function X(e){const t=e.value;return z(e.kind)+(null!=t?` "${t}"`:"")}function z(e){return function(e){return e===m.BANG||e===m.QUESTION_MARK||e===m.DOLLAR||e===m.AMP||e===m.PAREN_L||e===m.PAREN_R||e===m.SPREAD||e===m.COLON||e===m.EQUALS||e===m.AT||e===m.BRACKET_L||e===m.BRACKET_R||e===m.BRACE_L||e===m.PIPE||e===m.BRACE_R}(e)?`"${e}"`:e}class AccumulatorMap extends Map{get[Symbol.toStringTag](){return"AccumulatorMap"}add(e,t){const n=this.get(e);void 0===n?this.set(e,[t]):n.push(t)}}function H(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}function W(e){return Z("and",e)}function Z(e,t){switch(0!==t.length||n(),t.length){case 1:return t[0];case 2:return t[0]+" "+e+" "+t[1]}const r=t.slice(0,-1),i=t.at(-1);return r.join(", ")+", "+e+" "+i}const ee=5;function te(e,t){const[n,r]=t?[e,t]:[void 0,e];if(0===r.length)return"";let i=" Did you mean ";null!=n&&(i+=n+" ");return i+Z("or",r.slice(0,ee).map((e=>`"${e}"`)))+"?"}function ne(e){return e}function re(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function ie(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function oe(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-se,o=t.charCodeAt(r)}while(ce(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const se=48,ae=57;function ce(e){return!isNaN(e)&&se<=e&&e<=ae}function ue(e,t){const n=Object.create(null),r=new LexicalDistance(e),i=Math.floor(.4*e.length)+1;for(const e of t){const t=r.measure(e,i);void 0!==t&&(n[e]=t)}return Object.keys(n).sort(((e,t)=>{const r=n[e]-n[t];return 0!==r?r:oe(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=le(this._inputLowerCase),this._rows=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)]}measure(e,t){if(this._input===e)return 0;const n=e.toLowerCase();if(this._inputLowerCase===n)return 1;let r=le(n),i=this._inputArray;if(r.lengtht)return;const a=this._rows;for(let e=0;e<=s;e++)a[0][e]=e;for(let e=1;e<=o;e++){const n=a[(e-1)%3],o=a[e%3];let c=o[0]=e;for(let t=1;t<=s;t++){const s=r[e-1]===i[t-1]?0:1;let u=Math.min(n[t]+1,o[t-1]+1,n[t-1]+s);if(e>1&&t>1&&r[e-1]===i[t-2]&&r[e-2]===i[t-1]){const n=a[(e-2)%3][t-2];u=Math.min(u,n+1)}ut)return}const c=a[o%3][s];return c<=t?c:void 0}}function le(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>Ie(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=_e("(",Ie(e.variableDefinitions,", "),")"),n=Ie([e.operation,Ie([e.name,t]),Ie(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+_e(" = ",n)+_e(" ",Ie(r," "))},SelectionSet:{leave:({selections:e})=>ge(e)},Field:{leave({alias:e,name:t,arguments:n,nullabilityAssertion:r,directives:i,selectionSet:o}){const s=Ie([_e("",e,": "),t],"");let a=s+_e("(",Ie(n,", "),")");return a.length>80&&(a=s+_e("(\n",Oe(Ie(n,"\n")),"\n)")),Ie([a,r,_e(" ",Ie(i," ")),_e(" ",o)])}},Argument:{leave:({name:e,value:t})=>e+": "+t},ListNullabilityOperator:{leave:({nullabilityAssertion:e})=>Ie(["[",e,"]"])},NonNullAssertion:{leave:({nullabilityAssertion:e})=>Ie([e,"!"])},ErrorBoundary:{leave:({nullabilityAssertion:e})=>Ie([e,"?"])},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+_e(" ",Ie(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>Ie(["...",_e("on ",e),Ie(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${_e("(",Ie(n,", "),")")} on ${t} ${_e("",Ie(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>!0===t?function(e){const t=e.replaceAll('"""','\\"""'),n=t.split(/\r\n|[\n\r]/g),r=1===n.length,i=n.length>1&&n.slice(1).every((e=>0===e.length||E(e.charCodeAt(0)))),o=t.endsWith('\\"""'),s=e.endsWith('"')&&!o,a=e.endsWith("\\"),c=s||a,u=!r||e.length>70||c||i||o;let l="";const p=r&&E(e.charCodeAt(0));return(u&&!p||i)&&(l+="\n"),l+=t,(u||c)&&(l+="\n"),'"""'+l+'"""'}(e):`"${e.replace(de,fe)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>{const t="["+Ie(e,", ")+"]";return t.length>80?"[\n"+Oe(Ie(e,"\n"))+"\n]":t}},ObjectValue:{leave:({fields:e})=>{const t="{ "+Ie(e,", ")+" }";return t.length>80?ge(e):t}},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+_e("(",Ie(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>_e("",e,"\n")+Ie(["schema",Ie(t," "),ge(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>_e("",e,"\n")+Ie(["scalar",t,Ie(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>_e("",e,"\n")+Ie(["type",t,_e("implements ",Ie(n," & ")),Ie(r," "),ge(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>_e("",e,"\n")+t+(Se(n)?_e("(\n",Oe(Ie(n,"\n")),"\n)"):_e("(",Ie(n,", "),")"))+": "+r+_e(" ",Ie(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>_e("",e,"\n")+Ie([t+": "+n,_e("= ",r),Ie(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>_e("",e,"\n")+Ie(["interface",t,_e("implements ",Ie(n," & ")),Ie(r," "),ge(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>_e("",e,"\n")+Ie(["union",t,Ie(n," "),_e("= ",Ie(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>_e("",e,"\n")+Ie(["enum",t,Ie(n," "),ge(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>_e("",e,"\n")+Ie([t,Ie(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>_e("",e,"\n")+Ie(["input",t,Ie(n," "),ge(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>_e("",e,"\n")+"directive @"+t+(Se(n)?_e("(\n",Oe(Ie(n,"\n")),"\n)"):_e("(",Ie(n,", "),")"))+(r?" repeatable":"")+" on "+Ie(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>Ie(["extend schema",Ie(e," "),ge(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>Ie(["extend scalar",e,Ie(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>Ie(["extend type",e,_e("implements ",Ie(t," & ")),Ie(n," "),ge(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>Ie(["extend interface",e,_e("implements ",Ie(t," & ")),Ie(n," "),ge(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>Ie(["extend union",e,Ie(t," "),_e("= ",Ie(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>Ie(["extend enum",e,Ie(t," "),ge(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>Ie(["extend input",e,Ie(t," "),ge(n)]," ")}};function Ie(e,t=""){return e?.filter((e=>e)).join(t)??""}function ge(e){return _e("{\n",Oe(Ie(e,"\n")),"\n}")}function _e(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Oe(e){return _e(" ",e.replaceAll("\n","\n "))}function Se(e){return e?.some((e=>e.includes("\n")))??!1}function Le(e,t){switch(e.kind){case h.NULL:return null;case h.INT:return parseInt(e.value,10);case h.FLOAT:return parseFloat(e.value);case h.STRING:case h.ENUM:case h.BOOLEAN:return e.value;case h.LIST:return e.values.map((e=>Le(e,t)));case h.OBJECT:return re(e.fields,(e=>e.name.value),(e=>Le(e.value,t)));case h.VARIABLE:return t?.[e.name.value]}}function be(e){if(0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;tt(Le(e,n))),this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||P(0,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}class GraphQLObjectType{constructor(e){this.name=be(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._fields=He.bind(void 0,e.fields),this._interfaces=ze.bind(void 0,e.interfaces)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}getInterfaces(){return"function"==typeof this._interfaces&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:Ze(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function ze(e){return qe(e??[])}function He(e){return ie(Xe(e),((e,t)=>{const n=e.args??{};return{name:be(t),description:e.description,type:e.type,args:We(n),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:pe(e.extensions),astNode:e.astNode}}))}function We(e){return Object.entries(e).map((([e,t])=>({name:be(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:pe(t.extensions),astNode:t.astNode})))}function Ze(e){return ie(e,(e=>({description:e.description,type:e.type,args:et(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function et(e){return re(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function tt(e){return $e(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){this.name=be(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._fields=He.bind(void 0,e.fields),this._interfaces=ze.bind(void 0,e.interfaces)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}getInterfaces(){return"function"==typeof this._interfaces&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:Ze(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}class GraphQLUnionType{constructor(e){this.name=be(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._types=nt.bind(void 0,e.types)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return"function"==typeof this._types&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function nt(e){return qe(e)}function rt(e){return Object.entries(e).map((([e,t])=>({name:Ae(e),description:t.description,value:void 0!==t.value?t.value:e,deprecationReason:t.deprecationReason,extensions:pe(t.extensions),astNode:t.astNode})))}class GraphQLEnumType{constructor(e){this.name=be(e.name),this.description=e.description,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._values="function"==typeof e.values?e.values:rt(e.values),this._valueLookup=null,this._nameLookup=null}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return"function"==typeof this._values&&(this._values=rt(this._values())),this._values}getValue(e){return null===this._nameLookup&&(this._nameLookup=function(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}(this.getValues(),(e=>e.name))),this._nameLookup[e]}serialize(e){null===this._valueLookup&&(this._valueLookup=new Map(this.getValues().map((e=>[e.value,e]))));const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${Y(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=Y(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+it(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+it(this,e));return t.value}parseLiteral(e,t){if(e.kind!==h.ENUM){const t=Ne(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+it(this,t),{nodes:e})}const n=this.getValue(e.value);if(null==n){const t=Ne(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+it(this,t),{nodes:e})}return n.value}toConfig(){const e=re(this.getValues(),(e=>e.name),(e=>({description:e.description,value:e.value,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})));return{name:this.name,description:this.description,values:e,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function it(e,t){return te("the enum value",ue(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){this.name=be(e.name),this.description=e.description,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this.isOneOf=e.isOneOf??!1,this._fields=ot.bind(void 0,e.fields)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=ie(this.getFields(),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})));return{name:this.name,description:this.description,fields:e,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,isOneOf:this.isOneOf}}toString(){return this.name}toJSON(){return this.toString()}}function ot(e){return ie(Xe(e),((e,t)=>({name:be(t),description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:pe(e.extensions),astNode:e.astNode})))}function st(e){return $e(e.type)&&void 0===e.defaultValue}function at(e,t){return e===t||($e(e)&&$e(t)||!(!Ge(e)||!Ge(t)))&&at(e.ofType,t.ofType)}function ct(e,t,n){return t===n||($e(n)?!!$e(t)&&ct(e,t.ofType,n.ofType):$e(t)?ct(e,t.ofType,n):Ge(n)?!!Ge(t)&&ct(e,t.ofType,n.ofType):!Ge(t)&&(Pe(n)&&(Fe(t)||ke(t))&&e.isSubType(n,t)))}function ut(e,t,n){return t===n||(Pe(t)?Pe(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Pe(n)&&e.isSubType(n,t))}const lt=2147483647,pt=-2147483648,dt=new GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){const t=Nt(e);if("boolean"==typeof t)return t?1:0;let n=t;if("string"==typeof t&&""!==t&&(n=Number(t)),"number"!=typeof n||!Number.isInteger(n))throw new GraphQLError(`Int cannot represent non-integer value: ${Y(t)}`);if(n>lt||nlt||elt||te.name===t))}function Nt(e){if(t(e)){if("function"==typeof e.valueOf){const n=e.valueOf();if(!t(n))return n}if("function"==typeof e.toJSON)return e.toJSON()}return e}function vt(e){return K(e,GraphQLDirective)}class GraphQLDirective{constructor(e){this.name=be(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=e.isRepeatable??!1,this.extensions=pe(e.extensions),this.astNode=e.astNode;const t=e.args??{};this.args=We(t)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:et(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const It=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[f.FIELD,f.FRAGMENT_SPREAD,f.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(mt),description:"Included when true."}}}),gt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[f.FIELD,f.FRAGMENT_SPREAD,f.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(mt),description:"Skipped when true."}}}),_t=new GraphQLDirective({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[f.FRAGMENT_SPREAD,f.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(mt),description:"Deferred when true or undefined.",defaultValue:!0},label:{type:ht,description:"Unique name"}}}),Ot=new GraphQLDirective({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[f.FIELD],args:{if:{type:new GraphQLNonNull(mt),description:"Stream when true or undefined.",defaultValue:!0},label:{type:ht,description:"Unique name"},initialCount:{defaultValue:0,type:dt,description:"Number of items to return immediately"}}}),St="No longer supported",Lt=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[f.FIELD_DEFINITION,f.ARGUMENT_DEFINITION,f.INPUT_FIELD_DEFINITION,f.ENUM_VALUE],args:{reason:{type:ht,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:St}}}),bt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[f.SCALAR],args:{url:{type:new GraphQLNonNull(ht),description:"The URL that specifies the behavior of this scalar."}}}),At=new GraphQLDirective({name:"oneOf",description:"Indicates exactly one field must be supplied and this field must not be `null`.",locations:[f.INPUT_OBJECT],args:{}}),wt=Object.freeze([It,gt,Lt,bt,At]);function Dt(e){return wt.some((({name:t})=>t===e.name))}function kt(e,r){if($e(r)){const t=kt(e,r.ofType);return t?.kind===h.NULL?null:t}if(null===e)return{kind:h.NULL};if(void 0===e)return null;if(Ge(r)){const t=r.ofType;if("object"==typeof(i=e)&&"function"==typeof i?.[Symbol.iterator]){const n=[];for(const r of e){const e=kt(r,t);null!=e&&n.push(e)}return{kind:h.LIST,values:n}}return kt(e,t)}var i;if(Ce(r)){if(!t(e))return null;const n=[];for(const t of Object.values(r.getFields())){const r=kt(e[t.name],t.type);r&&n.push({kind:h.OBJECT_FIELD,name:{kind:h.NAME,value:t.name},value:r})}return{kind:h.OBJECT,fields:n}}if(Me(r)){const t=r.serialize(e);if(null==t)return null;if("boolean"==typeof t)return{kind:h.BOOLEAN,value:t};if("number"==typeof t&&Number.isFinite(t)){const e=String(t);return Ft.test(e)?{kind:h.INT,value:e}:{kind:h.FLOAT,value:e}}if("string"==typeof t)return Re(r)?{kind:h.ENUM,value:t}:r===Et&&Ft.test(t)?{kind:h.INT,value:t}:{kind:h.STRING,value:t};throw new TypeError(`Cannot convert value to AST: ${Y(t)}.`)}n(0,"Unexpected input type: "+Y(r))}const Ft=/^-?(?:0|[1-9][0-9]*)$/,xt=new GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:()=>({description:{type:ht,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Gt))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(Gt),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Gt,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Gt,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Rt))),resolve:e=>e.getDirectives()}})}),Rt=new GraphQLObjectType({name:"__Directive",description:"A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(mt),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ct))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Qt))),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>!0===t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ct=new GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:f.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:f.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:f.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:f.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:f.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:f.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:f.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:f.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:f.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:f.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:f.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:f.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:f.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:f.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:f.UNION,description:"Location adjacent to a union definition."},ENUM:{value:f.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:f.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:f.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:f.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),Gt=new GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:()=>({kind:{type:new GraphQLNonNull(Vt),resolve:e=>De(e)?Mt.SCALAR:ke(e)?Mt.OBJECT:Fe(e)?Mt.INTERFACE:xe(e)?Mt.UNION:Re(e)?Mt.ENUM:Ce(e)?Mt.INPUT_OBJECT:Ge(e)?Mt.LIST:$e(e)?Mt.NON_NULL:void n(0,`Unexpected type: "${Y(e)}".`)},name:{type:ht,resolve:e=>"name"in e?e.name:void 0},description:{type:ht,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ht,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull($t)),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(ke(e)||Fe(e)){const n=Object.values(e.getFields());return!0===t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(Gt)),resolve(e){if(ke(e)||Fe(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(Gt)),resolve(e,t,n,{schema:r}){if(Pe(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Ut)),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Re(e)){const n=e.getValues();return!0===t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(Qt)),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ce(e)){const n=Object.values(e.getFields());return!0===t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:Gt,resolve:e=>"ofType"in e?e.ofType:void 0},isOneOf:{type:mt,resolve:e=>{if(Ce(e))return e.isOneOf}}})}),$t=new GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Qt))),args:{includeDeprecated:{type:mt,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>!0===t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(Gt),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(mt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ht,resolve:e=>e.deprecationReason}})}),Qt=new GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},type:{type:new GraphQLNonNull(Gt),resolve:e=>e.type},defaultValue:{type:ht,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=kt(n,t);return r?Ne(r):null}},isDeprecated:{type:new GraphQLNonNull(mt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ht,resolve:e=>e.deprecationReason}})}),Ut=new GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:()=>({name:{type:new GraphQLNonNull(ht),resolve:e=>e.name},description:{type:ht,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(mt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ht,resolve:e=>e.deprecationReason}})});var Mt;!function(e){e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.INPUT_OBJECT="INPUT_OBJECT",e.LIST="LIST",e.NON_NULL="NON_NULL"}(Mt||(Mt={}));const Vt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:Mt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:Mt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:Mt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:Mt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:Mt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:Mt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:Mt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:Mt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),Pt={name:"__schema",type:new GraphQLNonNull(xt),description:"Access the current type schema of this server.",args:[],resolve:(e,t,n,{schema:r})=>r,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0},jt={name:"__type",type:Gt,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ht),defaultValue:void 0,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0}],resolve:(e,{name:t},n,{schema:r})=>r.getType(t),deprecationReason:void 0,extensions:Object.create(null),astNode:void 0},Bt={name:"__typename",type:new GraphQLNonNull(ht),description:"The name of the current Object type at runtime.",args:[],resolve:(e,t,n,{parentType:r})=>r.name,deprecationReason:void 0,extensions:Object.create(null),astNode:void 0},Yt=Object.freeze([xt,Rt,Ct,Gt,$t,Qt,Ut,Vt]);function Jt(e){return Yt.some((({name:t})=>e.name===t))}function Kt(e){if(!function(e){return K(e,GraphQLSchema)}(e))throw new Error(`Expected ${Y(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){this.__validationErrors=!0===e.assumeValid?[]:void 0,this.description=e.description,this.extensions=pe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=e.extensionASTNodes??[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=e.directives??wt;const t=new Set(e.types);if(null!=e.types)for(const n of e.types)t.delete(n),qt(n,t);null!=this._queryType&&qt(this._queryType,t),null!=this._mutationType&&qt(this._mutationType,t),null!=this._subscriptionType&&qt(this._subscriptionType,t);for(const e of this._directives)if(vt(e))for(const n of e.args)qt(n.type,t);qt(xt,t),this._typeMap=Object.create(null),this._subTypeMap=new Map,this._implementationsMap=Object.create(null);for(const e of t){if(null==e)continue;const t=e.name;if(void 0!==this._typeMap[t])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${t}".`);if(this._typeMap[t]=e,Fe(e)){for(const t of e.getInterfaces())if(Fe(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(ke(e))for(const t of e.getInterfaces())if(Fe(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.objects.push(e)}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(e){switch(e){case d.QUERY:return this.getQueryType();case d.MUTATION:return this.getMutationType();case d.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return xe(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){return this._implementationsMap[e.name]??{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap.get(e);if(void 0===n){if(xe(e))n=new Set(e.getTypes());else{const t=this.getImplementations(e);n=new Set([...t.objects,...t.interfaces])}this._subTypeMap.set(e,n)}return n.has(t)}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}getField(e,t){switch(t){case Pt.name:return this.getQueryType()===e?Pt:void 0;case jt.name:return this.getQueryType()===e?jt:void 0;case Bt.name:return Bt}if("getFields"in e)return e.getFields()[t]}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:void 0!==this.__validationErrors}}}function qt(e,t){const n=Ke(e);if(!t.has(n))if(t.add(n),xe(n))for(const e of n.getTypes())qt(e,t);else if(ke(n)||Fe(n)){for(const e of n.getInterfaces())qt(e,t);for(const e of Object.values(n.getFields())){qt(e.type,t);for(const n of e.args)qt(n.type,t)}}else if(Ce(n))for(const e of Object.values(n.getFields()))qt(e.type,t);return t}function Xt(e){if(Kt(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema;null==t.getQueryType()&&e.reportError("Query root type must be provided.",t.astNode);const n=new AccumulatorMap;for(const r of Object.values(d)){const i=t.getRootType(r);if(null!=i)if(ke(i))n.add(i,r);else{const n=H(r),o=Y(i);e.reportError(r===d.QUERY?`${n} root type must be Object type, it cannot be ${o}.`:`${n} root type must be Object type if provided, it cannot be ${o}.`,zt(t,r)??i.astNode)}}for(const[r,i]of n)if(i.length>1){const n=W(i);e.reportError(`All root types must be different, "${r.name}" type is used as ${n} root types.`,i.map((e=>zt(t,e))))}}(t),function(e){for(const t of e.schema.getDirectives())if(vt(t)){Ht(e,t),0===t.locations.length&&e.reportError(`Directive @${t.name} must include 1 or more locations.`,t.astNode);for(const n of t.args)Ht(e,n),Qe(n.type)||e.reportError(`The type of @${t.name}(${n.name}:) must be Input Type but got: ${Y(n.type)}.`,n.astNode),tt(n)&&null!=n.deprecationReason&&e.reportError(`Required argument @${t.name}(${n.name}:) cannot be deprecated.`,[un(n.astNode),n.astNode?.type])}else e.reportError(`Expected directive but got: ${Y(t)}.`,t?.astNode)}(t),function(e){const t=function(e){const t=new Set,n=[],r=Object.create(null);return i;function i(o){if(t.has(o))return;t.add(o),r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if($e(t.type)&&Ce(t.type.ofType)){const o=t.type.ofType,s=r[o.name];if(n.push(t),void 0===s)i(o);else{const t=n.slice(s),r=t.map((e=>e.name)).join(".");e.reportError(`Cannot reference Input Object "${o.name}" within itself through a series of non-null fields: "${r}".`,t.map((e=>e.astNode)))}n.pop()}r[o.name]=void 0}}(e),n=e.schema.getTypeMap();for(const r of Object.values(n))Je(r)?(Jt(r)||Ht(e,r),ke(r)||Fe(r)?(Wt(e,r),Zt(e,r)):xe(r)?nn(e,r):Re(r)?rn(e,r):Ce(r)&&(on(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${Y(r)}.`,r.astNode)}(t);const n=t.getErrors();return e.__validationErrors=n,n}class SchemaValidationContext{constructor(e){this._errors=[],this.schema=e}reportError(e,t){const n=Array.isArray(t)?t.filter(Boolean):t;this._errors.push(new GraphQLError(e,{nodes:n}))}getErrors(){return this._errors}}function zt(e,t){return[e.astNode,...e.extensionASTNodes].flatMap((e=>e?.operationTypes??[])).find((e=>e.operation===t))?.type}function Ht(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Wt(e,t){const n=Object.values(t.getFields());0===n.length&&e.reportError(`Type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(const r of n){Ht(e,r),Ue(r.type)||e.reportError(`The type of ${t.name}.${r.name} must be Output Type but got: ${Y(r.type)}.`,r.astNode?.type);for(const n of r.args){const i=n.name;Ht(e,n),Qe(n.type)||e.reportError(`The type of ${t.name}.${r.name}(${i}:) must be Input Type but got: ${Y(n.type)}.`,n.astNode?.type),tt(n)&&null!=n.deprecationReason&&e.reportError(`Required argument ${t.name}.${r.name}(${i}:) cannot be deprecated.`,[un(n.astNode),n.astNode?.type])}}}function Zt(e,t){const n=new Set;for(const r of t.getInterfaces())Fe(r)?t!==r?n.has(r.name)?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,an(t,r)):(n.add(r.name),tn(e,t,r),en(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,an(t,r)):e.reportError(`Type ${Y(t)} must only implement Interface types, it cannot implement ${Y(r)}.`,an(t,r))}function en(e,t,n){const r=t.getFields();for(const i of Object.values(n.getFields())){const o=i.name,s=r[o];if(null!=s){ct(e.schema,s.type,i.type)||e.reportError(`Interface field ${n.name}.${o} expects type ${Y(i.type)} but ${t.name}.${o} is type ${Y(s.type)}.`,[i.astNode?.type,s.astNode?.type]);for(const r of i.args){const i=r.name,a=s.args.find((e=>e.name===i));a?at(r.type,a.type)||e.reportError(`Interface field argument ${n.name}.${o}(${i}:) expects type ${Y(r.type)} but ${t.name}.${o}(${i}:) is type ${Y(a.type)}.`,[r.astNode?.type,a.astNode?.type]):e.reportError(`Interface field argument ${n.name}.${o}(${i}:) expected but ${t.name}.${o} does not provide it.`,[r.astNode,s.astNode])}for(const r of s.args){const s=r.name;!i.args.find((e=>e.name===s))&&tt(r)&&e.reportError(`Object field ${t.name}.${o} includes required argument ${s} that is missing from the Interface field ${n.name}.${o}.`,[r.astNode,i.astNode])}}else e.reportError(`Interface field ${n.name}.${o} expected but ${t.name} does not provide it.`,[i.astNode,t.astNode,...t.extensionASTNodes])}}function tn(e,t,n){const r=t.getInterfaces();for(const i of n.getInterfaces())r.includes(i)||e.reportError(i===t?`Type ${t.name} cannot implement ${n.name} because it would create a circular reference.`:`Type ${t.name} must implement ${i.name} because it is implemented by ${n.name}.`,[...an(n,i),...an(t,n)])}function nn(e,t){const n=t.getTypes();0===n.length&&e.reportError(`Union type ${t.name} must define one or more member types.`,[t.astNode,...t.extensionASTNodes]);const r=new Set;for(const i of n)r.has(i.name)?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,cn(t,i.name)):(r.add(i.name),ke(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${Y(i)}.`,cn(t,String(i))))}function rn(e,t){const n=t.getValues();0===n.length&&e.reportError(`Enum type ${t.name} must define one or more values.`,[t.astNode,...t.extensionASTNodes]);for(const t of n)Ht(e,t)}function on(e,t){const n=Object.values(t.getFields());0===n.length&&e.reportError(`Input Object type ${t.name} must define one or more fields.`,[t.astNode,...t.extensionASTNodes]);for(const r of n)Ht(e,r),Qe(r.type)||e.reportError(`The type of ${t.name}.${r.name} must be Input Type but got: ${Y(r.type)}.`,r.astNode?.type),st(r)&&null!=r.deprecationReason&&e.reportError(`Required input field ${t.name}.${r.name} cannot be deprecated.`,[un(r.astNode),r.astNode?.type]),t.isOneOf&&sn(t,r,e)}function sn(e,t,n){$e(t.type)&&n.reportError(`OneOf input field ${e.name}.${t.name} must be nullable.`,t.astNode?.type),void 0!==t.defaultValue&&n.reportError(`OneOf input field ${e.name}.${t.name} cannot have a default value.`,t.astNode)}function an(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>e.interfaces??[])).filter((e=>e.name.value===t.name))}function cn(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>e.types??[])).filter((e=>e.name.value===t))}function un(e){return e?.directives?.find((e=>e.name.value===Lt.name))}function ln(e,t){switch(t.kind){case h.LIST_TYPE:{const n=ln(e,t.type);return n&&new GraphQLList(n)}case h.NON_NULL_TYPE:{const n=ln(e,t.type);return n&&new GraphQLNonNull(n)}case h.NAMED_TYPE:return e.getType(t.name.value)}}class TypeInfo{constructor(e,t,n){this._schema=e,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=n??pn,t&&(Qe(t)&&this._inputTypeStack.push(t),Ve(t)&&this._parentTypeStack.push(t),Ue(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){return this._typeStack.at(-1)}getParentType(){return this._parentTypeStack.at(-1)}getInputType(){return this._inputTypeStack.at(-1)}getParentInputType(){return this._inputTypeStack.at(-2)}getFieldDef(){return this._fieldDefStack.at(-1)}getDefaultValue(){return this._defaultValueStack.at(-1)}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case h.SELECTION_SET:{const e=Ke(this.getType());this._parentTypeStack.push(Ve(e)?e:void 0);break}case h.FIELD:{const n=this.getParentType();let r,i;n&&(r=this._getFieldDef(t,n,e),r&&(i=r.type)),this._fieldDefStack.push(r),this._typeStack.push(Ue(i)?i:void 0);break}case h.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case h.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(ke(n)?n:void 0);break}case h.INLINE_FRAGMENT:case h.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?ln(t,n):Ke(this.getType());this._typeStack.push(Ue(r)?r:void 0);break}case h.VARIABLE_DEFINITION:{const n=ln(t,e.type);this._inputTypeStack.push(Qe(n)?n:void 0);break}case h.ARGUMENT:{let t,n;const r=this.getDirective()??this.getFieldDef();r&&(t=r.args.find((t=>t.name===e.name.value)),t&&(n=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(Qe(n)?n:void 0);break}case h.LIST:{const e=Ye(this.getInputType()),t=Ge(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(Qe(t)?t:void 0);break}case h.OBJECT_FIELD:{const t=Ke(this.getInputType());let n,r;Ce(t)&&(r=t.getFields()[e.name.value],null!=r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(Qe(n)?n:void 0);break}case h.ENUM:{const t=Ke(this.getInputType());let n;Re(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case h.SELECTION_SET:this._parentTypeStack.pop();break;case h.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case h.DIRECTIVE:this._directive=null;break;case h.OPERATION_DEFINITION:case h.INLINE_FRAGMENT:case h.FRAGMENT_DEFINITION:this._typeStack.pop();break;case h.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case h.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case h.LIST:case h.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case h.ENUM:this._enumValue=null}}}function pn(e,t,n){return e.getField(t,n.name.value)}function dn(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=ye(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),p(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=ye(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function fn(e){const t=e.arguments?.find((e=>"if"===e.name.value));if(!t)return!1;if(t.value.kind===h.BOOLEAN){if(t.value.value)return!1}else if(t.value.kind!==h.VARIABLE)return!1;return!0}function hn(e){return e.kind===h.OPERATION_DEFINITION||e.kind===h.FRAGMENT_DEFINITION}function mn(e){return e.kind===h.SCALAR_TYPE_DEFINITION||e.kind===h.OBJECT_TYPE_DEFINITION||e.kind===h.INTERFACE_TYPE_DEFINITION||e.kind===h.UNION_TYPE_DEFINITION||e.kind===h.ENUM_TYPE_DEFINITION||e.kind===h.INPUT_OBJECT_TYPE_DEFINITION}function En(e){return e.kind===h.SCALAR_TYPE_EXTENSION||e.kind===h.OBJECT_TYPE_EXTENSION||e.kind===h.INTERFACE_TYPE_EXTENSION||e.kind===h.UNION_TYPE_EXTENSION||e.kind===h.ENUM_TYPE_EXTENSION||e.kind===h.INPUT_OBJECT_TYPE_EXTENSION}function Tn(e){const t=new Map,n=e.getSchema(),r=n?n.getDirectives():wt;for(const e of r)t.set(e.name,e.args.map((e=>e.name)));const i=e.getDocument().definitions;for(const e of i)if(e.kind===h.DIRECTIVE_DEFINITION){const n=e.arguments??[];t.set(e.name.value,n.map((e=>e.name.value)))}return{Directive(n){const r=n.name.value,i=t.get(r);if(null!=n.arguments&&null!=i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=ue(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+te(o),{nodes:t}))}}return!1}}}function yn(e){const t=new Map,r=e.getSchema(),i=r?r.getDirectives():wt;for(const e of i)t.set(e.name,e.locations);const o=e.getDocument().definitions;for(const e of o)e.kind===h.DIRECTIVE_DEFINITION&&t.set(e.name.value,e.locations.map((e=>e.value)));return{Directive(r,i,o,s,a){const c=r.name.value,u=t.get(c);if(null==u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,{nodes:r}));const l=function(e){const t=e.at(-1);switch(null!=t&&"kind"in t||n(),t.kind){case h.OPERATION_DEFINITION:return function(e){switch(e){case d.QUERY:return f.QUERY;case d.MUTATION:return f.MUTATION;case d.SUBSCRIPTION:return f.SUBSCRIPTION}}(t.operation);case h.FIELD:return f.FIELD;case h.FRAGMENT_SPREAD:return f.FRAGMENT_SPREAD;case h.INLINE_FRAGMENT:return f.INLINE_FRAGMENT;case h.FRAGMENT_DEFINITION:return f.FRAGMENT_DEFINITION;case h.VARIABLE_DEFINITION:return f.VARIABLE_DEFINITION;case h.SCHEMA_DEFINITION:case h.SCHEMA_EXTENSION:return f.SCHEMA;case h.SCALAR_TYPE_DEFINITION:case h.SCALAR_TYPE_EXTENSION:return f.SCALAR;case h.OBJECT_TYPE_DEFINITION:case h.OBJECT_TYPE_EXTENSION:return f.OBJECT;case h.FIELD_DEFINITION:return f.FIELD_DEFINITION;case h.INTERFACE_TYPE_DEFINITION:case h.INTERFACE_TYPE_EXTENSION:return f.INTERFACE;case h.UNION_TYPE_DEFINITION:case h.UNION_TYPE_EXTENSION:return f.UNION;case h.ENUM_TYPE_DEFINITION:case h.ENUM_TYPE_EXTENSION:return f.ENUM;case h.ENUM_VALUE_DEFINITION:return f.ENUM_VALUE;case h.INPUT_OBJECT_TYPE_DEFINITION:case h.INPUT_OBJECT_TYPE_EXTENSION:return f.INPUT_OBJECT;case h.INPUT_VALUE_DEFINITION:{const t=e.at(-3);return null!=t&&"kind"in t||n(),t.kind===h.INPUT_OBJECT_TYPE_DEFINITION?f.INPUT_FIELD_DEFINITION:f.ARGUMENT_DEFINITION}default:n(0,"Unexpected kind: "+Y(t.kind))}}(a);null==l||u.includes(l)||e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,{nodes:r}))}}}function Nn(e){const{definitions:t}=e.getDocument(),n=e.getSchema()?.getTypeMap()??{},r=new Set([...Object.keys(n),...t.filter(mn).map((e=>e.name.value))]);return{NamedType(t,n,i,o,s){const a=t.name.value;if(!r.has(a)){const n=s[2]??i,o=null!=n&&("kind"in(c=n)&&(function(e){return e.kind===h.SCHEMA_DEFINITION||mn(e)||e.kind===h.DIRECTIVE_DEFINITION}(c)||function(e){return e.kind===h.SCHEMA_EXTENSION||En(e)}(c)));if(o&&vn.has(a))return;const u=ue(a,o?[...vn,...r]:[...r]);e.reportError(new GraphQLError(`Unknown type "${a}".`+te(u),{nodes:t}))}var c}}}const vn=new Set([...Tt,...Yt].map((e=>e.name)));function In(e){const t=new Set,n=[];return{OperationDefinition(n){for(const r of e.getRecursivelyReferencedFragments(n))t.add(r.name.value);return!1},FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){for(const r of n){const n=r.name.value;t.has(n)||e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,{nodes:r}))}}}}}function gn(e){switch(e.kind){case h.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:gn(e.value)}))).sort(((e,t)=>oe(e.name.value,t.name.value))))};case h.LIST:return{...e,values:e.values.map(gn)};case h.INT:case h.FLOAT:case h.STRING:case h.BOOLEAN:case h.NULL:case h.ENUM:case h.VARIABLE:return e}var t}function _n(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+_n(t))).join(" and "):e}function On(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=xn(e,n,a);if(o!==c){Ln(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),On(e,t,n,r,i,o,a))}}function Sn(e,t,n,r,i,o,s){if(o===s)return;if(r.has(o,s,i))return;r.add(o,s,i);const a=e.getFragment(o),c=e.getFragment(s);if(!a||!c)return;const[u,l]=xn(e,n,a),[p,d]=xn(e,n,c);Ln(e,t,n,r,i,u,p);for(const s of d)Sn(e,t,n,r,i,o,s);for(const o of l)Sn(e,t,n,r,i,o,s)}function Ln(e,t,n,r,i,o,s){for(const[a,c]of o.entries()){const o=s.get(a);if(null!=o)for(const s of c)for(const c of o){const o=bn(e,n,r,i,a,s,c);o&&t.push(o)}}}function bn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&ke(a)&&ke(l);if(!f){const e=c.name.value,t=p.name.value;if(e!==t)return[[i,`"${e}" and "${t}" are different fields`],[c],[p]];if(!An(c,p))return[[i,"they have differing arguments"],[c],[p]]}if(!function(e,t){const n=Dn(e),r=Dn(t);if(!n&&!r)return!0;if(n&&r)return An(n,r);return!1}(c.directives??[],p.directives??[]))return[[i,"they have differing stream directives"],[c],[p]];const h=u?.type,m=d?.type;if(h&&m&&kn(h,m))return[[i,`they return conflicting types "${Y(h)}" and "${Y(m)}"`],[c],[p]];const E=c.selectionSet,T=p.selectionSet;if(E&&T){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=Fn(e,t,i,o),[p,d]=Fn(e,t,s,a);Ln(e,c,t,n,r,u,p);for(const i of d)On(e,c,t,n,r,u,i);for(const i of l)On(e,c,t,n,r,p,i);for(const i of l)for(const o of d)Sn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ke(h),E,Ke(m),T);return function(e,t,n,r){if(e.length>0)return[[t,e.map((([e])=>e))],[n,...e.map((([,e])=>e)).flat()],[r,...e.map((([,,e])=>e)).flat()]]}(r,i,c,p)}}function An(e,t){const n=e.arguments,r=t.arguments;if(void 0===n||0===n.length)return void 0===r||0===r.length;if(void 0===r||0===r.length)return!1;if(n.length!==r.length)return!1;const i=new Map(r.map((({name:e,value:t})=>[e.value,t])));return n.every((e=>{const t=e.value,n=i.get(e.name.value);return void 0!==n&&wn(t)===wn(n)}))}function wn(e){return Ne(gn(e))}function Dn(e){return e.find((e=>"stream"===e.name.value))}function kn(e,t){return Ge(e)?!Ge(t)||kn(e.ofType,t.ofType):!!Ge(t)||($e(e)?!$e(t)||kn(e.ofType,t.ofType):!!$e(t)||!(!Me(e)&&!Me(t))&&e!==t)}function Fn(e,t,n,r){const i=t.get(r);if(i)return i;const o=new Map,s=new Set;Rn(e,n,r,o,s);const a=[o,[...s]];return t.set(r,a),a}function xn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=ln(e.getSchema(),n.typeCondition);return Fn(e,t,i,n.selectionSet)}function Rn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case h.FIELD:{const e=o.name.value;let n;(ke(t)||Fe(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;let s=r.get(i);null==s&&(s=[],r.set(i,s)),s.push([t,o,n]);break}case h.FRAGMENT_SPREAD:i.add(o.name.value);break;case h.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?ln(e.getSchema(),n):t;Rn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){const[r,i]=e[e.name,e]))));const i=e.getDocument().definitions;for(const e of i)if(e.kind===h.DIRECTIVE_DEFINITION){const n=e.arguments??[];t.set(e.name.value,new Map(n.filter($n).map((e=>[e.name.value,e]))))}return{Directive:{leave(n){const r=n.name.value,i=t.get(r);if(null!=i){const t=n.arguments??[],o=new Set(t.map((e=>e.name.value)));for(const[t,s]of i.entries())if(!o.has(t)){const i=we(s.type)?Y(s.type):Ne(s.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${t}" of type "${i}" is required, but it was not provided.`,{nodes:n}))}}}}}}function $n(e){return e.type.kind===h.NON_NULL_TYPE&&null==e.defaultValue}function Qn(e,t,r){if(e){if(e.kind===h.VARIABLE){const n=e.name.value;if(null==r||void 0===r[n])return;const i=r[n];if(null===i&&$e(t))return;return i}if($e(t)){if(e.kind===h.NULL)return;return Qn(e,t.ofType,r)}if(e.kind===h.NULL)return null;if(Ge(t)){const n=t.ofType;if(e.kind===h.LIST){const t=[];for(const i of e.values)if(Un(i,r)){if($e(n))return;t.push(null)}else{const e=Qn(i,n,r);if(void 0===e)return;t.push(e)}return t}const i=Qn(e,n,r);if(void 0===i)return;return[i]}if(Ce(t)){if(e.kind!==h.OBJECT)return;const n=Object.create(null),i=new Map(e.fields.map((e=>[e.name.value,e])));for(const e of Object.values(t.getFields())){const t=i.get(e.name);if(null==t||Un(t.value,r)){if(void 0!==e.defaultValue)n[e.name]=e.defaultValue;else if($e(e.type))return;continue}const o=Qn(t.value,e.type,r);if(void 0===o)return;n[e.name]=o}if(t.isOneOf){const e=Object.keys(n);if(1!==e.length)return;if(null===n[e[0]])return}return n}if(Me(t)){let n;try{n=t.parseLiteral(e,r)}catch(e){return}if(void 0===n)return;return n}n(0,"Unexpected input type: "+Y(t))}}function Un(e,t){return e.kind===h.VARIABLE&&(null==t||void 0===t[e.name.value])}function Mn(e,t,n){const r=t.directives?.find((t=>t.name.value===e.name));if(r)return function(e,t,n){const r={},i=t.arguments??[],o=new Map(i.map((e=>[e.name.value,e])));for(const i of e.args){const e=i.name,s=i.type,a=o.get(e);if(null==a){if(void 0!==i.defaultValue)r[e]=i.defaultValue;else if($e(s))throw new GraphQLError(`Argument "${e}" of required type "${Y(s)}" was not provided.`,{nodes:t});continue}const c=a.value;let u=c.kind===h.NULL;if(c.kind===h.VARIABLE){const t=c.name.value;if(null==n||!Object.hasOwn(n,t)){if(void 0!==i.defaultValue)r[e]=i.defaultValue;else if($e(s))throw new GraphQLError(`Argument "${e}" of required type "${Y(s)}" was provided the variable "$${t}" which was not provided a runtime value.`,{nodes:c});continue}u=null==n[t]}if(u&&$e(s))throw new GraphQLError(`Argument "${e}" of non-null type "${Y(s)}" must not be null.`,{nodes:c});const l=Qn(c,s,n);if(void 0===l)throw new GraphQLError(`Argument "${e}" has invalid value ${Ne(c)}.`,{nodes:c});r[e]=l}return r}(e,r,n)}function Vn(e,t,n,r,i){const o=new AccumulatorMap,s=[];return Pn({schema:e,fragments:t,variableValues:n,runtimeType:r,operation:i,visitedFragmentNames:new Set},i.selectionSet,o,s),{groupedFieldSet:o,newDeferUsages:s}}function Pn(e,t,n,r,i){const{schema:o,fragments:s,variableValues:a,runtimeType:c,operation:u,visitedFragmentNames:l}=e;for(const d of t.selections)switch(d.kind){case h.FIELD:if(!Bn(a,d))continue;n.add((p=d).alias?p.alias.value:p.name.value,{node:d,deferUsage:i});break;case h.INLINE_FRAGMENT:{if(!Bn(a,d)||!Yn(o,d,c))continue;const t=jn(u,a,d,i);t?(r.push(t),Pn(e,d.selectionSet,n,r,t)):Pn(e,d.selectionSet,n,r,i);break}case h.FRAGMENT_SPREAD:{const t=d.name.value,p=jn(u,a,d,i);if(!p&&(l.has(t)||!Bn(a,d)))continue;const f=s[t];if(null==f||!Yn(o,f,c))continue;p?(r.push(p),Pn(e,f.selectionSet,n,r,p)):(l.add(t),Pn(e,f.selectionSet,n,r,i));break}}var p}function jn(e,t,r,i){const o=Mn(_t,r,t);if(o&&!1!==o.if)return e.operation!==d.SUBSCRIPTION||n(0,"`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`."),{label:"string"==typeof o.label?o.label:void 0,parentDeferUsage:i}}function Bn(e,t){const n=Mn(gt,t,e);if(!0===n?.if)return!1;const r=Mn(It,t,e);return!1!==r?.if}function Yn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=ln(e,r);return i===n||!!Pe(i)&&e.isSubType(i,n)}function Jn(e){return e.map((e=>e.node))}function Kn(e,t){const n=new AccumulatorMap;for(const r of e)n.add(t(r),r);return n}function qn(e){return{Field:t,Directive:t};function t(t){const n=Kn(t.arguments??[],(e=>e.name.value));for(const[t,r]of n)r.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,{nodes:r.map((e=>e.name))}))}}function Xn(e){const t=new Map,n=e.getSchema(),r=n?n.getDirectives():wt;for(const e of r)t.set(e.name,!e.isRepeatable);const i=e.getDocument().definitions;for(const e of i)e.kind===h.DIRECTIVE_DEFINITION&&t.set(e.name.value,!e.repeatable);const o=new Map,s=new Map;return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===h.SCHEMA_DEFINITION||n.kind===h.SCHEMA_EXTENSION)r=o;else if(mn(n)||En(n)){const e=n.name.value;r=s.get(e),void 0===r&&(r=new Map,s.set(e,r))}else r=new Map;for(const i of n.directives){const n=i.name.value;if(!0===t.get(n)){const t=r.get(n);null!=t?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,{nodes:[t,i]})):r.set(n,i)}}}}}function zn(e,t){return!!(ke(e)||Fe(e)||Ce(e))&&null!=e.getFields()[t]}function Hn(e){const t=[];let r=new Map;return{ObjectValue:{enter(){t.push(r),r=new Map},leave(){const e=t.pop();null!=e||n(),r=e}},ObjectField(t){const n=t.name.value,i=r.get(n);null!=i?e.reportError(new GraphQLError(`There can be only one input field named "${n}".`,{nodes:[i,t.name]})):r.set(n,t.name)}}}function Wn(e,t){const n=e.getInputType();if(!n)return;const r=Ke(n);if(Me(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=Y(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${Ne(t)}.`,{nodes:t}))}}catch(r){const i=Y(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${Ne(t)}; `+r.message,{nodes:t,originalError:r}))}else{const r=Y(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${Ne(t)}.`,{nodes:t}))}}function Zn(e,t,n,r,i){if($e(r)&&!$e(t)){if(!(null!=n&&n.kind!==h.NULL)&&!(void 0!==i))return!1;return ct(e,t,r.ofType)}return ct(e,t,r)}const er=Object.freeze([function(e){function t(n,r=Object.create(null),i=0){if(n.kind===h.FRAGMENT_SPREAD){const o=n.name.value;if(!0===r[o])return!1;const s=e.getFragment(o);if(!s)return!1;try{return r[o]=!0,t(s,r,i)}finally{r[o]=void 0}}if(n.kind===h.FIELD&&("fields"===n.name.value||"interfaces"===n.name.value||"possibleTypes"===n.name.value||"inputFields"===n.name.value)&&++i>=3)return!0;if("selectionSet"in n&&n.selectionSet)for(const e of n.selectionSet.selections)if(t(e,r,i))return!0;return!1}return{Field(n){if(("__schema"===n.name.value||"__type"===n.name.value)&&t(n))return e.reportError(new GraphQLError("Maximum introspection depth exceeded",{nodes:[n]})),!1}}}]),tr=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!hn(n)){const t=n.kind===h.SCHEMA_DEFINITION||n.kind===h.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,{nodes:n}))}return!1}}},function(e){const t=new Map;return{OperationDefinition(n){const r=n.name;if(null!=r){const n=t.get(r.value);null!=n?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,{nodes:[n,r]})):t.set(r.value,r)}return!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===h.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",{nodes:n}))}}},function(e){return{OperationDefinition(t){if("subscription"===t.operation){const n=e.getSchema(),r=n.getSubscriptionType();if(r){const i=t.name?t.name.value:null,o=Object.create(null),s=e.getDocument(),a=Object.create(null);for(const e of s.definitions)e.kind===h.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const{groupedFieldSet:c}=Vn(n,a,o,r,t);if(c.size>1){const t=[...c.values()].slice(1).flatMap((e=>Jn(e)));e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",{nodes:t}))}for(const t of c.values()){Jn(t)[0].name.value.startsWith("__")&&e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",{nodes:Jn(t)}))}}}}}},Nn,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=ln(e.getSchema(),n);if(t&&!Ve(t)){const t=Ne(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,{nodes:n}))}}},FragmentDefinition(t){const n=ln(e.getSchema(),t.typeCondition);if(n&&!Ve(n)){const n=Ne(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,{nodes:t.typeCondition}))}}}},function(e){return{VariableDefinition(t){const n=ln(e.getSchema(),t.type);if(void 0!==n&&!Qe(n)){const n=t.variable.name.value,r=Ne(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,{nodes:t.type}))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Me(Ke(n))){if(r){const i=t.name.value,o=Y(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,{nodes:r}))}}else if(!r){const r=t.name.value,i=Y(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,{nodes:t}))}}}},function(e){return{Field(t){const n=e.getParentType();if(n){if(!e.getFieldDef()){const r=e.getSchema(),i=t.name.value;let o=te("to use an inline fragment on",function(e,t,n){if(!Pe(t))return[];const r=new Set,i=Object.create(null);for(const o of e.getPossibleTypes(t))if(null!=o.getFields()[n]){r.add(o),i[o.name]=1;for(const e of o.getInterfaces())null!=e.getFields()[n]&&(r.add(e),i[e.name]=(i[e.name]??0)+1)}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Fe(t)&&e.isSubType(t,n)?-1:Fe(n)&&e.isSubType(n,t)?1:oe(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=te(function(e,t){if(ke(e)||Fe(e)){return ue(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,{nodes:t}))}}}}},function(e){const t=new Map;return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value,i=t.get(r);return null!=i?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,{nodes:[i,n.name]})):t.set(r,n.name),!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,{nodes:t.name}))}}},In,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ve(n)&&Ve(r)&&!ut(e.getSchema(),n,r)){const i=Y(r),o=Y(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,{nodes:t}))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=ln(e.getSchema(),n.typeCondition);if(Ve(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!ut(e.getSchema(),r,i)){const o=Y(i),s=Y(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,{nodes:t}))}}}},function(e){const t=new Set,n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t.has(o.name.value))return;const s=o.name.value;t.add(s);const a=e.getFragmentSpreads(o.selectionSet);if(0!==a.length){r[s]=n.length;for(const t of a){const o=t.name.value,s=r[o];if(n.push(t),void 0===s){const t=e.getFragment(o);t&&i(t)}else{const t=n.slice(s),r=t.slice(0,-1).map((e=>'"'+e.name.value+'"')).join(", ");e.reportError(new GraphQLError(`Cannot spread fragment "${o}" within itself`+(""!==r?` via ${r}.`:"."),{nodes:t}))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){const n=Kn(t.variableDefinitions??[],(e=>e.variable.name.value));for(const[t,r]of n)r.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,{nodes:r.map((e=>e.variable.name))}))}}},function(e){return{OperationDefinition(t){const n=new Set(t.variableDefinitions?.map((e=>e.variable.name.value))),r=e.getRecursiveVariableUsages(t);for(const{node:i}of r){const r=i.name.value;n.has(r)||e.reportError(new GraphQLError(t.name?`Variable "$${r}" is not defined by operation "${t.name.value}".`:`Variable "$${r}" is not defined.`,{nodes:[i,t]}))}}}},function(e){return{OperationDefinition(t){const n=e.getRecursiveVariableUsages(t),r=new Set(n.map((({node:e})=>e.name.value))),i=t.variableDefinitions??[];for(const n of i){const i=n.variable.name.value;r.has(i)||e.reportError(new GraphQLError(t.name?`Variable "$${i}" is never used in operation "${t.name.value}".`:`Variable "$${i}" is never used.`,{nodes:n}))}}}},yn,Xn,function(e){return{Directive(t){const n=e.getSchema().getMutationType(),r=e.getSchema().getSubscriptionType(),i=e.getParentType();i&&t.name.value===_t.name&&(n&&i===n&&e.reportError(new GraphQLError(`Defer directive cannot be used on root mutation type "${i.name}".`,{nodes:t})),r&&i===r&&e.reportError(new GraphQLError(`Defer directive cannot be used on root subscription type "${i.name}".`,{nodes:t}))),i&&t.name.value===Ot.name&&(n&&i===n&&e.reportError(new GraphQLError(`Stream directive cannot be used on root mutation type "${i.name}".`,{nodes:t})),r&&i===r&&e.reportError(new GraphQLError(`Stream directive cannot be used on root subscription type "${i.name}".`,{nodes:t})))}}},function(e){const t=new Set;return{OperationDefinition(n){if(n.operation===d.SUBSCRIPTION)for(const r of e.getRecursivelyReferencedFragments(n))t.add(r.name.value)},Directive(n,r,i,o,s){const a=s[2];"kind"in a&&(a.kind===h.FRAGMENT_DEFINITION&&t.has(a.name.value)||a.kind===h.OPERATION_DEFINITION&&a.operation===d.SUBSCRIPTION)&&(n.name.value===_t.name?fn(n)||e.reportError(new GraphQLError("Defer directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.",{nodes:n})):n.name.value===Ot.name&&(fn(n)||e.reportError(new GraphQLError("Stream directive not supported on subscription operations. Disable `@stream` by setting the `if` argument to `false`.",{nodes:n}))))}}},function(e){const t=new Map;return{Directive(n){if(n.name.value===_t.name||n.name.value===Ot.name){const r=n.arguments?.find((e=>"label"===e.name.value)),i=r?.value;if(!i)return;if(i.kind!==h.STRING)return void e.reportError(new GraphQLError(`Directive "${n.name.value}"'s label argument must be a static string.`,{nodes:n}));const o=t.get(i.value);null!=o?e.reportError(new GraphQLError("Defer/Stream directive label argument must be unique.",{nodes:[o,n]})):t.set(i.value,n)}}}},function(e){return{Directive(t){const n=e.getFieldDef(),r=e.getParentType();n&&r&&t.name.value===Ot.name&&!(Ge(n.type)||je(n.type)&&Ge(n.type.ofType))&&e.reportError(new GraphQLError(`Stream directive cannot be used on non-list field "${n.name}" on type "${r.name}".`,{nodes:t}))}}},function(e){return{...Tn(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=ue(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+te(o),{nodes:t}))}}}},qn,function(e){let t={};return{OperationDefinition:{enter(){t={}}},VariableDefinition(e){t[e.variable.name.value]=e},ListValue(t){if(!Ge(Ye(e.getParentInputType())))return Wn(e,t),!1},ObjectValue(n){const r=Ke(e.getInputType());if(!Ce(r))return Wn(e,n),!1;const i=new Map(n.fields.map((e=>[e.name.value,e])));for(const t of Object.values(r.getFields())){if(!i.get(t.name)&&st(t)){const i=Y(t.type);e.reportError(new GraphQLError(`Field "${r.name}.${t.name}" of required type "${i}" was not provided.`,{nodes:n}))}}r.isOneOf&&function(e,t,n,r,i){const o=Array.from(r.keys());if(1!==o.length)return void e.reportError(new GraphQLError(`OneOf Input Object "${n.name}" must specify exactly one key.`,{nodes:[t]}));const s=r.get(o[0])?.value,a=!s||s.kind===h.NULL,c=s?.kind===h.VARIABLE;if(a)return void e.reportError(new GraphQLError(`Field "${n.name}.${o[0]}" must be non-null.`,{nodes:[t]}));if(c){const r=s.name.value;i[r].type.kind!==h.NON_NULL_TYPE&&e.reportError(new GraphQLError(`Variable "${r}" must be non-nullable to be used for OneOf Input Object "${n.name}".`,{nodes:[t]}))}}(e,n,r,i,t)},ObjectField(t){const n=Ke(e.getParentInputType());if(!e.getInputType()&&Ce(n)){const r=ue(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+te(r),{nodes:t}))}},NullValue(t){const n=e.getInputType();$e(n)&&e.reportError(new GraphQLError(`Expected value of type "${Y(n)}", found ${Ne(t)}.`,{nodes:t}))},EnumValue:t=>Wn(e,t),IntValue:t=>Wn(e,t),FloatValue:t=>Wn(e,t),StringValue:t=>Wn(e,t),BooleanValue:t=>Wn(e,t)}},function(e){return{...Gn(e),Field:{leave(t){const n=e.getFieldDef();if(!n)return!1;const r=new Set(t.arguments?.map((e=>e.name.value)));for(const i of n.args)if(!r.has(i.name)&&tt(i)){const r=Y(i.type);e.reportError(new GraphQLError(`Field "${n.name}" argument "${i.name}" of type "${r}" is required, but it was not provided.`,{nodes:t}))}}}}},function(e){let t;return{OperationDefinition:{enter(){t=new Map},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t.get(r);if(s&&i){const t=e.getSchema(),a=ln(t,s.type);if(a&&!Zn(t,a,s.defaultValue,i,o)){const t=Y(a),o=Y(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,{nodes:[s,n]}))}}}}},VariableDefinition(e){t.set(e.variable.name.value,e)}}},function(e){const t=new PairSet,n=new Map;return{SelectionSet(r){const i=function(e,t,n,r,i){const o=[],[s,a]=Fn(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of i.entries())if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",{nodes:t})),++r)}}},function(e){const t=e.getSchema(),n=new Map,r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){const i=t.operationTypes??[];for(const t of i){const i=t.operation,o=n.get(i);r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,{nodes:t})):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,{nodes:[o,t]})):n.set(i,t)}return!1}},function(e){const t=new Map,n=e.getSchema();return{ScalarTypeDefinition:r,ObjectTypeDefinition:r,InterfaceTypeDefinition:r,UnionTypeDefinition:r,EnumTypeDefinition:r,InputObjectTypeDefinition:r};function r(r){const i=r.name.value;if(n?.getType(i))return void e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,{nodes:r.name}));const o=t.get(i);return null!=o?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,{nodes:[o,r.name]})):t.set(i,r.name),!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=new Map;return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){const i=t.name.value;let o=r.get(i);null==o&&(o=new Map,r.set(i,o));const s=t.values??[];for(const t of s){const r=t.name.value,s=n[i];if(Re(s)&&s.getValue(r)){e.reportError(new GraphQLError(`Enum value "${i}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:t.name}));continue}const a=o.get(r);null!=a?e.reportError(new GraphQLError(`Enum value "${i}.${r}" can only be defined once.`,{nodes:[a,t.name]})):o.set(r,t.name)}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=new Map;return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){const i=t.name.value;let o=r.get(i);null==o&&(o=new Map,r.set(i,o));const s=t.fields??[];for(const t of s){const r=t.name.value;if(zn(n[i],r)){e.reportError(new GraphQLError(`Field "${i}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,{nodes:t.name}));continue}const s=o.get(r);null!=s?e.reportError(new GraphQLError(`Field "${i}.${r}" can only be defined once.`,{nodes:[s,t.name]})):o.set(r,t.name)}return!1}},function(e){return{DirectiveDefinition(e){const t=e.arguments??[];return n(`@${e.name.value}`,t)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){const t=e.name.value,r=e.fields??[];for(const e of r){n(`${t}.${e.name.value}`,e.arguments??[])}return!1}function n(t,n){const r=Kn(n,(e=>e.name.value));for(const[n,i]of r)i.length>1&&e.reportError(new GraphQLError(`Argument "${t}(${n}:)" can only be defined once.`,{nodes:i.map((e=>e.name))}));return!1}},function(e){const t=new Map,n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(n?.getDirective(i))return void e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,{nodes:r.name}));const o=t.get(i);return o?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,{nodes:[o,r.name]})):t.set(i,r.name),!1}}},Nn,yn,Xn,function(e){const t=e.getSchema(),r=new Map;for(const t of e.getDocument().definitions)mn(t)&&r.set(t.name.value,t);return{ScalarTypeExtension:i,ObjectTypeExtension:i,InterfaceTypeExtension:i,UnionTypeExtension:i,EnumTypeExtension:i,InputObjectTypeExtension:i};function i(i){const o=i.name.value,s=r.get(o),a=t?.getType(o);let c;if(null!=s?c=Cn[s.kind]:a&&(c=function(e){if(De(e))return h.SCALAR_TYPE_EXTENSION;if(ke(e))return h.OBJECT_TYPE_EXTENSION;if(Fe(e))return h.INTERFACE_TYPE_EXTENSION;if(xe(e))return h.UNION_TYPE_EXTENSION;if(Re(e))return h.ENUM_TYPE_EXTENSION;if(Ce(e))return h.INPUT_OBJECT_TYPE_EXTENSION;n(0,"Unexpected type: "+Y(e))}(a)),null!=c){if(c!==i.kind){const t=function(e){switch(e){case h.SCALAR_TYPE_EXTENSION:return"scalar";case h.OBJECT_TYPE_EXTENSION:return"object";case h.INTERFACE_TYPE_EXTENSION:return"interface";case h.UNION_TYPE_EXTENSION:return"union";case h.ENUM_TYPE_EXTENSION:return"enum";case h.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:n(0,"Unexpected kind: "+Y(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,{nodes:s?[s,i]:i}))}}else{const n=ue(o,[...r.keys(),...Object.keys(t?.getTypeMap()??{})]);e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+te(n),{nodes:i.name}))}}},Tn,qn,Hn,Gn]);class ASTValidationContext{constructor(e,t){this._ast=e,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=t}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(e){this._onError(e)}getDocument(){return this._ast}getFragment(e){let t;if(this._fragments)t=this._fragments;else{t=Object.create(null);for(const e of this.getDocument().definitions)e.kind===h.FRAGMENT_DEFINITION&&(t[e.name.value]=e);this._fragments=t}return t[e]}getFragmentSpreads(e){let t=this._fragmentSpreads.get(e);if(!t){t=[];const n=[e];let r;for(;r=n.pop();)for(const e of r.selections)e.kind===h.FRAGMENT_SPREAD?t.push(e):e.selectionSet&&n.push(e.selectionSet);this._fragmentSpreads.set(e,t)}return t}getRecursivelyReferencedFragments(e){let t=this._recursivelyReferencedFragments.get(e);if(!t){t=[];const n=new Set,r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!n.has(i)){n.add(i);const e=this.getFragment(i);e&&(t.push(e),r.push(e.selectionSet))}}this._recursivelyReferencedFragments.set(e,t)}return t}}class SDLValidationContext extends ASTValidationContext{constructor(e,t,n){super(e,n),this._schema=t}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}}class ValidationContext extends ASTValidationContext{constructor(e,t,n,r){super(t,r),this._schema=e,this._typeInfo=n,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(e){let t=this._variableUsages.get(e);if(!t){const n=[],r=new TypeInfo(this._schema);Ee(e,dn(r,{VariableDefinition:()=>!1,Variable(e){n.push({node:e,type:r.getInputType(),defaultValue:r.getDefaultValue()})}})),t=n,this._variableUsages.set(e,t)}return t}getRecursiveVariableUsages(e){let t=this._recursiveVariableUsages.get(e);if(!t){t=this.getVariableUsages(e);for(const n of this.getRecursivelyReferencedFragments(e))t=t.concat(this.getVariableUsages(n));this._recursiveVariableUsages.set(e,t)}return t}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}}function rr(e,t,n=tr,r,i=new TypeInfo(e)){!function(e){const t=Xt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const o=new GraphQLError("Too many validation errors, error limit reached. Validation aborted."),s=[],a=new ValidationContext(e,t,i,(e=>{if(s.length>=100)throw o;s.push(e)})),c=Te(n.map((e=>e(a))));try{Ee(t,dn(i,c))}catch(e){if(e!==o)throw e;s.push(o)}return s}function ir(e,n){t(e)&&t(e.__schema)||P(0,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${Y(e)}.`);const r=e.__schema,i=new Map(r.types.map((e=>[e.name,f(e)])));for(const e of[...Tt,...Yt])i.has(e.name)&&i.set(e.name,e);const o=null!=r.queryType?p(r.queryType):null,s=null!=r.mutationType?p(r.mutationType):null,a=null!=r.subscriptionType?p(r.subscriptionType):null,c=null!=r.directives?r.directives.map((function(e){if(null==e.args){const t=Y(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(null==e.locations){const t=Y(e);throw new Error(`Introspection result missing directive locations: ${t}.`)}return new GraphQLDirective({name:e.name,description:e.description,isRepeatable:e.isRepeatable,locations:e.locations.slice(),args:y(e.args)})})):[];return new GraphQLSchema({description:r.description,query:o,mutation:s,subscription:a,types:[...i.values()],directives:c,assumeValid:n?.assumeValid});function u(e){if(e.kind===Mt.LIST){const t=e.ofType;if(null==t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(u(t))}if(e.kind===Mt.NON_NULL){const t=e.ofType;if(null==t)throw new Error("Decorated type deeper than introspection query.");const n=u(t);return new GraphQLNonNull(Be(n))}return l(e)}function l(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${Y(e)}.`);const n=i.get(t);if(null==n)throw new Error(`Invalid or incomplete schema, unknown type: ${t}. Ensure that a full introspection query is used in order to build a client schema.`);return n}function p(e){return function(e){if(!ke(e))throw new Error(`Expected ${Y(e)} to be a GraphQL Object type.`);return e}(l(e))}function d(e){return function(e){if(!Fe(e))throw new Error(`Expected ${Y(e)} to be a GraphQL Interface type.`);return e}(l(e))}function f(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case Mt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case Mt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>E(n)});case Mt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>E(t)});case Mt.UNION:return function(e){if(null==e.possibleTypes){const t=Y(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(p)})}(e);case Mt.ENUM:return function(e){if(null==e.enumValues){const t=Y(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:re(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case Mt.INPUT_OBJECT:return function(e){if(null==e.inputFields){const t=Y(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>y(e.inputFields),isOneOf:e.isOneOf})}(e)}var t,n,r;const i=Y(e);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${i}.`)}function h(e){if(null===e.interfaces&&e.kind===Mt.INTERFACE)return[];if(null==e.interfaces){const t=Y(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(d)}function E(e){if(null==e.fields)throw new Error(`Introspection result missing fields: ${Y(e)}.`);return re(e.fields,(e=>e.name),T)}function T(e){const t=u(e.type);if(!Ue(t)){const e=Y(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(null==e.args){const t=Y(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:y(e.args)}}function y(e){return re(e,(e=>e.name),N)}function N(e){const t=u(e.type);if(!Qe(t)){const e=Y(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?Qn(function(e,t){const n=new Parser(e,t);n.expectToken(m.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(m.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function or(e,t,r){const i=[],o=new AccumulatorMap,s=new AccumulatorMap,a=new AccumulatorMap,c=new AccumulatorMap,u=new AccumulatorMap,l=new AccumulatorMap,p=[];let d;const f=[];let m=!1;for(const e of t.definitions){switch(e.kind){case h.SCHEMA_DEFINITION:d=e;break;case h.SCHEMA_EXTENSION:f.push(e);break;case h.DIRECTIVE_DEFINITION:p.push(e);break;case h.SCALAR_TYPE_DEFINITION:case h.OBJECT_TYPE_DEFINITION:case h.INTERFACE_TYPE_DEFINITION:case h.UNION_TYPE_DEFINITION:case h.ENUM_TYPE_DEFINITION:case h.INPUT_OBJECT_TYPE_DEFINITION:i.push(e);break;case h.SCALAR_TYPE_EXTENSION:o.add(e.name.value,e);break;case h.OBJECT_TYPE_EXTENSION:s.add(e.name.value,e);break;case h.INTERFACE_TYPE_EXTENSION:a.add(e.name.value,e);break;case h.UNION_TYPE_EXTENSION:c.add(e.name.value,e);break;case h.ENUM_TYPE_EXTENSION:u.add(e.name.value,e);break;case h.INPUT_OBJECT_TYPE_EXTENSION:l.add(e.name.value,e);break;default:continue}m=!0}if(!m)return e;const E=new Map(e.types.map((e=>[e.name,v(e)])));for(const e of i){const t=e.name.value;E.set(t,sr.get(t)??F(e))}const T={query:e.query&&N(e.query),mutation:e.mutation&&N(e.mutation),subscription:e.subscription&&N(e.subscription),...d&&_([d]),..._(f)};return{description:d?.description?.value??e.description,...T,types:Array.from(E.values()),directives:[...e.directives.map((function(e){if(Dt(e))return e;const t=e.toConfig();return new GraphQLDirective({...t,args:ie(t.args,g)})})),...p.map((function(e){return new GraphQLDirective({name:e.name.value,description:e.description?.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:b(e.arguments),astNode:e})}))],extensions:e.extensions,astNode:d??e.astNode,extensionASTNodes:e.extensionASTNodes.concat(f),assumeValid:r?.assumeValid??!1};function y(e){return Ge(e)?new GraphQLList(y(e.ofType)):$e(e)?new GraphQLNonNull(y(e.ofType)):N(e)}function N(e){return E.get(e.name)}function v(e){return Jt(e)||yt(e)?e:De(e)?function(e){const t=e.toConfig(),n=o.get(t.name)??[];let r=t.specifiedByURL;for(const e of n)r=cr(e)??r;return new GraphQLScalarType({...t,specifiedByURL:r,extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):ke(e)?function(e){const t=e.toConfig(),n=s.get(t.name)??[];return new GraphQLObjectType({...t,interfaces:()=>[...e.getInterfaces().map(N),...D(n)],fields:()=>({...ie(t.fields,I),...L(n)}),extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):Fe(e)?function(e){const t=e.toConfig(),n=a.get(t.name)??[];return new GraphQLInterfaceType({...t,interfaces:()=>[...e.getInterfaces().map(N),...D(n)],fields:()=>({...ie(t.fields,I),...L(n)}),extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):xe(e)?function(e){const t=e.toConfig(),n=c.get(t.name)??[];return new GraphQLUnionType({...t,types:()=>[...e.getTypes().map(N),...k(n)],extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):Re(e)?function(e){const t=e.toConfig(),n=u.get(e.name)??[];return new GraphQLEnumType({...t,values:{...t.values,...w(n)},extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):Ce(e)?function(e){const t=e.toConfig(),n=l.get(t.name)??[];return new GraphQLInputObjectType({...t,fields:()=>({...ie(t.fields,(e=>({...e,type:y(e.type)}))),...A(n)}),extensionASTNodes:t.extensionASTNodes.concat(n)})}(e):void n(0,"Unexpected type: "+Y(e))}function I(e){return{...e,type:y(e.type),args:e.args&&ie(e.args,g)}}function g(e){return{...e,type:y(e.type)}}function _(e){const t={};for(const n of e){const e=n.operationTypes??[];for(const n of e)t[n.operation]=O(n.type)}return t}function O(e){const t=e.name.value,n=sr.get(t)??E.get(t);if(void 0===n)throw new Error(`Unknown type: "${t}".`);return n}function S(e){return e.kind===h.LIST_TYPE?new GraphQLList(S(e.type)):e.kind===h.NON_NULL_TYPE?new GraphQLNonNull(S(e.type)):O(e)}function L(e){const t=Object.create(null);for(const n of e){const e=n.fields??[];for(const n of e)t[n.name.value]={type:S(n.type),description:n.description?.value,args:b(n.arguments),deprecationReason:ar(n),astNode:n}}return t}function b(e){const t=e??[],n=Object.create(null);for(const e of t){const t=S(e.type);n[e.name.value]={type:t,description:e.description?.value,defaultValue:Qn(e.defaultValue,t),deprecationReason:ar(e),astNode:e}}return n}function A(e){const t=Object.create(null);for(const n of e){const e=n.fields??[];for(const n of e){const e=S(n.type);t[n.name.value]={type:e,description:n.description?.value,defaultValue:Qn(n.defaultValue,e),deprecationReason:ar(n),astNode:n}}}return t}function w(e){const t=Object.create(null);for(const n of e){const e=n.values??[];for(const n of e)t[n.name.value]={description:n.description?.value,deprecationReason:ar(n),astNode:n}}return t}function D(e){return e.flatMap((e=>e.interfaces?.map(O)??[]))}function k(e){return e.flatMap((e=>e.types?.map(O)??[]))}function F(e){const t=e.name.value;switch(e.kind){case h.OBJECT_TYPE_DEFINITION:{const n=s.get(t)??[],r=[e,...n];return new GraphQLObjectType({name:t,description:e.description?.value,interfaces:()=>D(r),fields:()=>L(r),astNode:e,extensionASTNodes:n})}case h.INTERFACE_TYPE_DEFINITION:{const n=a.get(t)??[],r=[e,...n];return new GraphQLInterfaceType({name:t,description:e.description?.value,interfaces:()=>D(r),fields:()=>L(r),astNode:e,extensionASTNodes:n})}case h.ENUM_TYPE_DEFINITION:{const n=u.get(t)??[],r=[e,...n];return new GraphQLEnumType({name:t,description:e.description?.value,values:w(r),astNode:e,extensionASTNodes:n})}case h.UNION_TYPE_DEFINITION:{const n=c.get(t)??[],r=[e,...n];return new GraphQLUnionType({name:t,description:e.description?.value,types:()=>k(r),astNode:e,extensionASTNodes:n})}case h.SCALAR_TYPE_DEFINITION:{const n=o.get(t)??[];return new GraphQLScalarType({name:t,description:e.description?.value,specifiedByURL:cr(e),astNode:e,extensionASTNodes:n})}case h.INPUT_OBJECT_TYPE_DEFINITION:{const r=l.get(t)??[],i=[e,...r];return new GraphQLInputObjectType({name:t,description:e.description?.value,fields:()=>A(i),astNode:e,extensionASTNodes:r,isOneOf:(n=e,Boolean(Mn(At,n)))})}}var n}}const sr=new Map([...Tt,...Yt].map((e=>[e.name,e])));function ar(e){const t=Mn(Lt,e);return t?.reason}function cr(e){const t=Mn(bt,e);return t?.url}function ur(e){return function(e,t,r){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(r);return[pr(e),...i.map((e=>function(e){return yr(e)+"directive @"+e.name+mr(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(De(e))return function(e){return yr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${Ne({kind:h.STRING,value:e.specifiedByURL})})`}(e)}(e);if(ke(e))return function(e){return yr(e)+`type ${e.name}`+dr(e)+fr(e)}(e);if(Fe(e))return function(e){return yr(e)+`interface ${e.name}`+dr(e)+fr(e)}(e);if(xe(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return yr(e)+"union "+e.name+n}(e);if(Re(e))return function(e){const t=e.getValues().map(((e,t)=>yr(e," ",!t)+" "+e.name+Tr(e.deprecationReason)));return yr(e)+`enum ${e.name}`+hr(t)}(e);if(Ce(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>yr(e," ",!t)+" "+Er(e)));return yr(e)+`input ${e.name}`+(e.isOneOf?" @oneOf":"")+hr(t)}(e);n(0,"Unexpected type: "+Y(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>!Dt(e)),lr)}function lr(e){return!yt(e)&&!Jt(e)}function pr(e){const t=e.getQueryType(),n=e.getMutationType(),r=e.getSubscriptionType();if(t||n||r)return null==e.description&&function(e){return e.getQueryType()==e.getType("Query")&&e.getMutationType()==e.getType("Mutation")&&e.getSubscriptionType()==e.getType("Subscription")}(e)?void 0:yr(e)+"schema {\n"+(t?` query: ${t.name}\n`:"")+(n?` mutation: ${n.name}\n`:"")+(r?` subscription: ${r.name}\n`:"")+"}"}function dr(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function fr(e){return hr(Object.values(e.getFields()).map(((e,t)=>yr(e," ",!t)+" "+e.name+mr(e.args," ")+": "+String(e.type)+Tr(e.deprecationReason))))}function hr(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function mr(e,t=""){return 0===e.length?"":e.every((e=>null==e.description))?"("+e.map(Er).join(", ")+")":"(\n"+e.map(((e,n)=>yr(e," "+t,!n)+" "+t+Er(e))).join("\n")+"\n"+t+")"}function Er(e){const t=kt(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${Ne(t)}`),n+Tr(e.deprecationReason)}function Tr(e){if(null==e)return"";if(e!==St){return` @deprecated(reason: ${Ne({kind:h.STRING,value:e})})`}return" @deprecated"}function yr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+Ne({kind:h.STRING,value:r,block:_(r)}).replaceAll("\n","\n"+t)+"\n"}function Nr(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:h.DOCUMENT,definitions:t}}const vr=[In];function Ir(e){var t;const n=function(e){if(e)return function(t){const n=e;return{Field(e){var r;const i=(null!==(r=e.alias)&&void 0!==r?r:e.name).value,o=i.charAt(0).toLowerCase()+i.slice(1);n.includes(o)&&t.reportError(new GraphQLError(`Field name "${i}" is not allowed because it conflicts with generated object APIs. Please use an alias to change the field name.`,{nodes:e}))}}};return}(null===(t=e.disallowedFieldNames)||void 0===t?void 0:t.allFields),r=function(e){if(e)return function(t){const n=e;return{VariableDefinition(e){const r=e.variable.name.value,i=r.charAt(0).toLowerCase()+r.slice(1);n.includes(i)&&t.reportError(new GraphQLError(`Input Parameter name "${r}" is not allowed because it conflicts with generated object APIs.`,{nodes:e}))}}};return}(e.disallowedInputParameterNames);return[gr,_r,Or,Sr,...n?[n]:[],...r?[r]:[],...tr.filter((e=>!vr.includes(e)))]}function gr(e){return{OperationDefinition:t=>(t.name||e.reportError(new GraphQLError("Apollo does not support anonymous operations because operation names are used during code generation. Please give this operation a name.",{nodes:t})),!1)}}function _r(e){return{Field(t){"__typename"==(t.alias&&t.alias.value)&&e.reportError(new GraphQLError("Apollo needs to be able to insert __typename when needed, so using it as an alias is not supported.",{nodes:t}))}}}function Or(e){return{InlineFragment(t){if(t.directives)for(const n of t.directives)n.name.value==_t.name&&null==t.typeCondition&&e.reportError(new GraphQLError("Apollo does not support deferred inline fragments without a type condition. Please add a type condition to this inline fragment.",{nodes:t}))}}}function Sr(e){return{InlineFragment(t){var n;if(t.directives)for(const r of t.directives)r.name.value!=_t.name||(null===(n=r.arguments)||void 0===n?void 0:n.find((e=>"label"==e.name.value)))||e.reportError(new GraphQLError("Apollo does not support deferred inline fragments without a 'label' argument. Please add a 'label' argument to the @defer directive on this inline fragment.",{nodes:t}))}}}function Lr(e){return{kind:h.NAME,value:e}}function br(e){return{kind:h.STRING,value:e}}function Ar(e){return{kind:h.DIRECTIVE_DEFINITION,description:e.description?br(e.description):void 0,name:Lr(e.name),repeatable:!1,locations:e.locations.map((e=>Lr(e))),arguments:e.args.map((e=>function(e){return{kind:h.INPUT_VALUE_DEFINITION,description:br(e.description),name:Lr(e.name),type:wr(Ke(e.type))}}(e)))}}function wr(e){return{kind:h.NAMED_TYPE,name:Lr(e.name)}}function Dr(e){return{kind:h.NON_NULL_TYPE,type:e}}const kr={kind:h.DIRECTIVE_DEFINITION,description:br("A directive used by the Apollo iOS client to annotate operations or fragments that should be used exclusively for generating local cache mutations instead of as standard operations."),name:Lr("apollo_client_ios_localCacheMutation"),repeatable:!1,locations:[Lr("QUERY"),Lr("MUTATION"),Lr("SUBSCRIPTION"),Lr("FRAGMENT_DEFINITION")]},Fr={kind:h.DIRECTIVE_DEFINITION,description:br("Attach extra information to a given type."),name:Lr("typePolicy"),arguments:[{kind:h.INPUT_VALUE_DEFINITION,description:br("A selection set containing fields used to compute the cache key of an object. Referenced fields must have non-nullable scalar types. Order is important."),name:Lr("keyFields"),type:Dr(wr(ht))}],repeatable:!1,locations:[Lr("OBJECT"),Lr("INTERFACE")]},xr={kind:h.DIRECTIVE_DEFINITION,description:br("A directive used by the Apollo iOS code generation engine to generate custom import statements in operation or fragment definition files. An import statement to import a module with the name provided in the `module` argument will be added to the generated definition file."),name:Lr("import"),arguments:[{kind:h.INPUT_VALUE_DEFINITION,description:br("The name of the module to import."),name:Lr("module"),type:Dr(wr(ht))}],repeatable:!0,locations:[Lr("QUERY"),Lr("MUTATION"),Lr("SUBSCRIPTION"),Lr("FRAGMENT_DEFINITION")]},Rr=[kr,xr,Fr];const Cr={kind:h.FIELD,name:{kind:h.NAME,value:"__typename"}};class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function Gr(e){const t=function(e,t,n=nr){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return Ee(e,Te(n.map((e=>e(i))))),r}(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function $r(e){const t=Xt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function Qr(e){return e.startsWith("__")}const Ur={kind:h.FIELD,name:{kind:h.NAME,value:"__typename"}};function Mr(e,t){return t&&(e=function(e){return Ee(e,{enter:e=>e.kind!==h.SELECTION_SET?void 0:{...e,selections:e.selections.filter((e=>!("Field"===e.kind&&"__typename"===e.name.value)))},leave(e){if((e.kind===h.FIELD||e.kind===h.FRAGMENT_DEFINITION||e.kind===h.INLINE_FRAGMENT)&&e.selectionSet)return{...e,selectionSet:{...e.selectionSet,selections:[Cr,...e.selectionSet.selections]}}}})}(e)),Ee(e,{SelectionSet:{leave:(e,t,n)=>p(n)&&![h.FIELD,h.FRAGMENT_DEFINITION].includes(n.kind)?e:function(e){const t=e.selections.find((e=>e.kind==Ur.kind&&e.name.value==Ur.name.value));return t?e:{...e,selections:[Ur,...e.selections]}}(e)},Field:{enter:e=>function(e){return e.name.value==Ur.name.value?{...e,alias:void 0,directives:void 0}:e}(e)},Directive:{enter:e=>function(e){const t=[kr,xr];for(const n of t)if(e.name.value==n.name.value)return null;return e}(e)}})}function Vr(e){return null!=e}function Pr(e){switch(e.kind){case h.VARIABLE:return{kind:e.kind,value:e.name.value};case h.LIST:return{kind:e.kind,value:e.values.map(Pr)};case h.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=Pr(t.value),e)),{})};default:return e}}function jr(e){var t,n;return null===(n=null===(t=e.loc)||void 0===t?void 0:t.source)||void 0===n?void 0:n.name}function Br(e,t,n,r){var i,o,s;const a=new Map;for(const e of t.definitions)e.kind===h.FRAGMENT_DEFINITION&&a.set(e.name.value,e);const c=[],u=new Map,l=new Set,p=e.getQueryType();if(void 0===p)throw new GraphQLError("GraphQL Schema must contain a 'query' root type definition.",{});const d={queryType:p,mutationType:null!==(i=e.getMutationType())&&void 0!==i?i:void 0,subscriptionType:null!==(o=e.getSubscriptionType())&&void 0!==o?o:void 0};for(const e of t.definitions)e.kind===h.OPERATION_DEFINITION&&c.push(m(e));for(const[e,t]of a.entries())u.set(e,E(t));return{rootTypes:d,operations:c,fragments:Array.from(u.values()),referencedTypes:Array.from(l.values()),schemaDocumentation:null!==(s=e.description)&&void 0!==s?s:void 0};function f(t){if(!l.has(t)){if(l.add(t),Fe(t))for(const n of e.getPossibleTypes(t))f(Ke(n));if(xe(t)){const e=t.getTypes();for(t of e)f(Ke(t))}if(Ce(t)&&function(e){const t=e.getFields();for(const e in t){f(Ke(t[e].type))}}(t),ke(t))for(const e of t.getInterfaces())f(Ke(e))}}function m(t){var r;if(!t.name)throw new GraphQLError("Operations should be named",{nodes:t});const i=jr(t),o=t.name.value,s=t.operation,a=new Set,c=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?Pr(t.defaultValue):void 0,i=ln(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,{nodes:t});return f(Ke(i)),{name:n,type:i,defaultValue:r}})),u=Ne(Mr(t,n)),l=e.getRootType(s),[p]=null!==(r=N(t.directives))&&void 0!==r?r:[void 0,void 0];return f(l),{name:o,operationType:s,variables:c,rootType:l,selectionSet:T(t.selectionSet,l,a),directives:p,referencedFragments:Array.from(a.values()),source:u,filePath:i}}function E(t){var r;const i=t.name.value,o=jr(t),s=Ne(Mr(t,n)),a=new Set,c=ln(e,t.typeCondition),[u]=null!==(r=N(t.directives))&&void 0!==r?r:[void 0,void 0];return f(Ke(c)),{name:i,filePath:o,source:s,typeCondition:c,selectionSet:T(t.selectionSet,c,a),directives:u,referencedFragments:Array.from(a.values())}}function T(t,n,i){return{parentType:n,selections:t.selections.map((t=>function(t,n,i){var o,s,c,l;const[p,d]=null!==(o=N(t.directives))&&void 0!==o?o:[void 0,void 0];switch(t.kind){case h.FIELD:{const m=t.name.value;if("__typename"==m)return;const v=null===(s=t.alias)||void 0===s?void 0:s.value,I=function(e,t,n){return n===Pt.name&&e.getQueryType()===t?Pt:n===jt.name&&e.getQueryType()===t?jt:n===Bt.name&&(ke(t)||Fe(t)||xe(t))?Bt:ke(t)||Fe(t)?t.getFields()[n]:void 0}(e,n,m);if(!I)throw new GraphQLError(`Cannot query field "${m}" on type "${String(n)}"`,{nodes:t});const g=I.type,_=Ke(I.type);f(Ke(_));const{description:O,deprecationReason:S}=I;let L={kind:"Field",name:m,alias:v,type:g,arguments:y(I,t.arguments),inclusionConditions:d,description:!Qr(m)&&O?O:void 0,deprecationReason:S||void 0,directives:p};function b(e,t,n){var r;if(t&&n){const i=(null!==(r=e.alias)&&void 0!==r?r:e.name).value,o=i.charAt(0).toLowerCase()+i.slice(1);if(null==t?void 0:t.includes(o))throw new GraphQLError(`Schema name "${n}" conflicts with name of a generated object API. Please choose a different schema name. Suggestions: "${n}Schema", "${n}GraphQL", "${n}API"`,{nodes:e})}}if(Ge(g)||$e(g)&&Ge(g.ofType)?b(t,null===(c=r.disallowedFieldNames)||void 0===c?void 0:c.entityList,r.schemaNamespace):Ve(_)&&b(t,null===(l=r.disallowedFieldNames)||void 0===l?void 0:l.entity,r.schemaNamespace),Ve(_)){const A=t.selectionSet;if(!A)throw new GraphQLError(`Composite field "${m}" on type "${String(n)}" requires selection set`,{nodes:t});L.selectionSet=T(A,_,i)}return L}case h.INLINE_FRAGMENT:{const w=t.typeCondition,D=w?ln(e,w):n;return f(D),{kind:"InlineFragment",selectionSet:T(t.selectionSet,D,i),inclusionConditions:d,directives:p}}case h.FRAGMENT_SPREAD:{const k=t.name.value,F=function(e){let t=u.get(e);if(t)return t;const n=a.get(e);return n?(a.delete(e),t=E(n),u.set(e,t),t):void 0}(k);if(!F)throw new GraphQLError(`Unknown fragment "${k}".`,{nodes:t.name});i.add(F);return{kind:"FragmentSpread",fragment:F,inclusionConditions:d,directives:p}}}}(t,n,i))).filter(Vr)}}function y(...e){const t=e[0].args;return e[1]&&e[1].length>0?e[1].map((e=>{var n;const r=e.name.value,i=t.find((t=>t.name===e.name.value)),o=null==i?void 0:i.type;if(!o)throw new GraphQLError(`Cannot find directive argument type for argument "${r}".`,{nodes:[e]});return{name:r,value:Pr(e.value),type:o,deprecationReason:null!==(n=i.deprecationReason)&&void 0!==n?n:void 0}})):void 0}function N(t){if(t&&t.length>0){const n=[],r=[];for(const i of t){const t=i.name.value,o=e.getDirective(t);if(!o)throw new GraphQLError(`Cannot find directive "${t}".`,{nodes:i});n.push({name:t,arguments:y(o,i.arguments)});const s=v(i,o);s&&r.push(s)}return[n,r.length>0?r:void 0]}}function v(e,t){var n;if("include"==t.name||"skip"==t.name){const r=null===(n=e.arguments)||void 0===n?void 0:n[0].value,i="skip"==t.name;switch(null==r?void 0:r.kind){case h.BOOLEAN:return i?r.value?"SKIPPED":"INCLUDED":r.value?"INCLUDED":"SKIPPED";case h.VARIABLE:return{variable:r.name.value,isInverted:i};default:throw new GraphQLError('Conditional inclusion directive has invalid "if" argument.',{nodes:e})}}}}function Yr(e){return e.kind===h.DIRECTIVE_DEFINITION&&e.name.value===_t.name}function Jr(){return{kind:h.DOCUMENT,definitions:[Ar(_t)]}}const Kr=Fr.name.value;function qr(e,t){var n,r;return(null!==(n=e.arguments)&&void 0!==n?n:[]).map((e=>JSON.stringify([e.name.value,Le(e.value)]))).sort().toString()===(null!==(r=t.arguments)&&void 0!==r?r:[]).map((e=>JSON.stringify([e.name.value,Le(e.value)]))).sort().toString()}function Xr(e){var t,n,r,i;if(xe(e))return;for(const r of null!==(t=e.extensionASTNodes)&&void 0!==t?t:[]){const t=null===(n=r.directives)||void 0===n?void 0:n.find((e=>e.name.value===Kr));if(t)return{directive:t,source:e}}let o;for(const t of null!==(i=null===(r=e.astNode)||void 0===r?void 0:r.directives)&&void 0!==i?i:[])if(t.name.value===Kr){o={directive:t,source:e};break}if("getInterfaces"in e)for(const t of e.getInterfaces()){const n=Xr(t);if(n)if(o){if(!qr(o.directive,n.directive))throw o.source===e?new GraphQLError(`Type "${e.name}" has a @typePolicy directive which conflicts with the @typePolicy directive on interface "${n.source.name}".`,{nodes:e.astNode}):new GraphQLError(`Type "${e.name}" inherits conflicting @typePolicy directives from interfaces "${o.source.name}" and "${n.source.name}".`,{nodes:e.astNode})}else o=n}return o}function zr(e){var t,n,r;const i=Xr(e);if(!i)return[];const o=null===(r=null===(n=null===(t=i.directive)||void 0===t?void 0:t.arguments)||void 0===n?void 0:n.find((e=>"keyFields"===e.name.value)))||void 0===r?void 0:r.value;if(!o||o.kind!==h.STRING)return[];const s=o.value.split(" ");return function(e,t){const{directive:n,source:r}=e;if(xe(r))return;const i=Fe(r)?"interface":"object";var o=r.getFields();for(const e of t){if(!e)throw new GraphQLError("Key fields must be a space-separated list of identifiers.",{nodes:n});const t=o[e];if(!t)throw new GraphQLError(`Key field "${e}" does not exist on ${i} "${r.name}".`,{nodes:r.astNode?[r.astNode,n]:n});if(!$e(t.type))throw new GraphQLError(`Key field "${e}" on ${i} "${r.name}" must be non-nullable.`,{nodes:t.astNode?[t.astNode,n]:n});if(!De(t.type.ofType))throw new GraphQLError(`Key field "${e}" on ${i} "${r.name}" must be a scalar type, got ${t.type}.`,{nodes:t.astNode?[t.astNode,n]:n})}}(i,s),s}function Hr(e){const t=e.getTypeMap();for(const e in t){const n=t[e];n instanceof GraphQLObjectType&&(n._apolloKeyFields=zr(n))}}return e.GraphQLEnumType=GraphQLEnumType,e.GraphQLError=GraphQLError,e.GraphQLInputObjectType=GraphQLInputObjectType,e.GraphQLInterfaceType=GraphQLInterfaceType,e.GraphQLObjectType=GraphQLObjectType,e.GraphQLScalarType=GraphQLScalarType,e.GraphQLSchema=GraphQLSchema,e.GraphQLSchemaValidationError=GraphQLSchemaValidationError,e.GraphQLUnionType=GraphQLUnionType,e.Source=Source,e.compileDocument=function(e,t,n,r){return Br(e,t,n,r)},e.loadSchemaFromSources=function(e){var t,n=new Array;for(const r of e)if(r.name.endsWith(".json")){if(t)throw new Error(`Schema search paths can only include one JSON schema definition.\n Found "${t.name} & "${r.name}".`);t=r}else n.push(q(r));var r=function(e){const t=Rr.filter((t=>!e.definitions.some((e=>e.kind==h.DIRECTIVE_DEFINITION&&e.name.value==t.name.value))));return Nr([e,{kind:h.DOCUMENT,definitions:t}])}(Nr(n));if(t){var i=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=ir(t);return n}(t.body);return r=function(e,t){const n=e.getDirective(_t.name);return n?function(e,t){return e.isRepeatable===t.isRepeatable&&e.locations.slice(0).sort().toString()===t.locations.slice(0).sort().toString()&&e.args.map((e=>e.name)).sort().toString()===t.args.map((e=>e.name)).sort().toString()}(n,_t)?t:(console.warn(`Unsupported ${n.name} directive found. It will be replaced with a supported definition instead.`),Nr([t,Jr()])):Nr([t,Jr()])}(i,r),Hr(i=function(e,t,n){Kt(e);const r=e.toConfig(),i=or(r,t,n);return r===i?e:new GraphQLSchema(i)}(i,r,{assumeValid:!0,assumeValidSDL:!0})),$r(i),i}{Gr(r=function(e){const t=e.definitions.find(Yr);if(!t)return Nr([e,Jr()]);const n=t;if(!function(e,t){var n;return e.repeatable===t.isRepeatable&&e.locations.map((e=>e.value)).sort().toString()===t.locations.slice(0).sort().toString()&&(null===(n=e.arguments)||void 0===n?void 0:n.map((e=>e.name.value)).sort().toString())===t.args.map((e=>e.name)).sort().toString()}(n,_t))return console.warn(`Unsupported ${n.name.value} directive found. It will be replaced with a supported definition instead.`),{kind:h.DOCUMENT,definitions:e.definitions.filter((e=>Yr(e)?void 0:e)).concat(Ar(_t))};return e}(r));const e=function(e,t){const n=or({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,t);if(null==n.astNode)for(const e of n.types)switch(e.name){case"Query":n.query=e;break;case"Mutation":n.mutation=e;break;case"Subscription":n.subscription=e}const r=[...n.directives,...wt.filter((e=>n.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...n,directives:r})}(r,{assumeValid:!0,assumeValidSDL:!0});return Hr(e),$r(e),e}},e.mergeDocuments=function(e){return Nr(e)},e.parseOperationDocument=function(e){return q(e)},e.printSchemaToSDL=function(e){return ur(e)},e.validateDocument=function(e,t,n){return rr(e,t,Ir(n))},e}({});"# \ No newline at end of file diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/GraphQLSchema.swift b/apollo-ios-codegen/Sources/GraphQLCompiler/GraphQLSchema.swift index c6064ee5f..24a0fa3cc 100644 --- a/apollo-ios-codegen/Sources/GraphQLCompiler/GraphQLSchema.swift +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/GraphQLSchema.swift @@ -239,16 +239,20 @@ public final class GraphQLObjectType: GraphQLCompositeType, GraphQLInterfaceImpl public private(set) var fields: [String: GraphQLField]! public private(set) var interfaces: [GraphQLInterfaceType]! + + public private(set) var keyFields: [String]! /// Initializer to be used for creating mock objects in tests only. init( name: GraphQLName, documentation: String?, fields: [String: GraphQLField], - interfaces: [GraphQLInterfaceType] + interfaces: [GraphQLInterfaceType], + keyFields: [String] ) { self.fields = fields self.interfaces = interfaces + self.keyFields = keyFields super.init(name: name, documentation: documentation) } @@ -259,6 +263,7 @@ public final class GraphQLObjectType: GraphQLCompositeType, GraphQLInterfaceImpl override func finalize(_ jsValue: JSValue, bridge: isolated JavaScriptBridge) { self.fields = try! bridge.invokeMethod("getFields", on: jsValue) self.interfaces = try! bridge.invokeMethod("getInterfaces", on: jsValue) + self.keyFields = jsValue["_apolloKeyFields"] } public override var debugDescription: String { diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/__tests__/typePolicyDirectiveTests.ts b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/__tests__/typePolicyDirectiveTests.ts new file mode 100644 index 000000000..c7442edae --- /dev/null +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/__tests__/typePolicyDirectiveTests.ts @@ -0,0 +1,425 @@ +import { + GraphQLError, + type GraphQLNamedType, + type GraphQLSchema, + Source, +} from "graphql"; +import { loadSchemaFromSources } from ".."; + +type ObjectWithMeta = GraphQLNamedType & { + _apolloKeyFields: string[]; +}; + +describe("given SDL without typePolicy", () => { + const schemaSDL: string = ` + type Query { + allRectangles: [Rectangle!] + } + + type Rectangle { + width: Int! + height: Int! + } + `; + + it("should set empty _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Rectangle"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(0); + }); +}); + +describe("given SDL with valid typePolicy", () => { + describe("on object", () => { + const schemaSDL: string = ` + type Query { + allRectangles: [Rectangle!] + } + + type Rectangle @typePolicy(keyFields: "width height") { + width: Int! + height: Int! + } + `; + + it("should set _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Rectangle"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(2); + expect(type._apolloKeyFields).toContain("width"); + expect(type._apolloKeyFields).toContain("height"); + }); + }); + + describe("on interface", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal @typePolicy(keyFields: "id") { + id: ID! + } + + interface Domesticated { + owner: String + } + + type Dog implements Animal & Domesticated { + id: ID! + species: String! + owner: String + } + `; + + it("should set _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Dog"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(1); + expect(type._apolloKeyFields).toContain("id"); + }); + }); + + describe("on multiple interfaces", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal @typePolicy(keyFields: "id") { + id: ID! + } + + interface Domesticated @typePolicy(keyFields: "id") { + id: ID! + owner: String + } + + type Dog implements Animal & Domesticated { + id: ID! + species: String! + owner: String + } + `; + + it("should set _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Dog"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(1); + expect(type._apolloKeyFields).toContain("id"); + }); + }); + + describe("on interface and object", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal @typePolicy(keyFields: "id") { + id: ID! + } + + type Dog implements Animal @typePolicy(keyFields: "id") { + id: ID! + species: String! + owner: String + } + `; + + it("should set _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Dog"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(1); + expect(type._apolloKeyFields).toContain("id"); + }); + }); + + describe("on object extension", () => { + const schemaSDL: string = ` + type Query { + allCircles: [Circle!] + } + + type Circle { + radius: Int! + } + + extend type Circle @typePolicy(keyFields: "radius") + `; + + it("should set _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Circle"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(1); + expect(type._apolloKeyFields).toContain("radius"); + }); + }); + + describe("on interface extension", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal { + id: ID! + } + + type Dog implements Animal { + id: ID! + species: String! + } + + extend interface Animal @typePolicy(keyFields: "id") + `; + + it("should set _apolloKeyFields property", () => { + const schema: GraphQLSchema = loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]); + + const type = schema.getTypeMap()["Dog"] as ObjectWithMeta; + expect(type._apolloKeyFields).toHaveLength(1); + expect(type._apolloKeyFields).toContain("id"); + }); + }); +}); + +describe("given SDL with invalid typePolicy", () => { + describe("with malformed keyFields", () => { + const schemaSDL: string = ` + type Query { + allRectangles: [Rectangle!] + } + + type Rectangle @typePolicy(keyFields: " width") { + width: Int! + height: Int! + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with missing field on object", () => { + const schemaSDL: string = ` + type Query { + allRectangles: [Rectangle!] + } + + type Rectangle @typePolicy(keyFields: "radius") { + width: Int! + height: Int! + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with non-scalar field on object", () => { + const schemaSDL: string = ` + type Query { + allRectangles: [Rectangle!] + } + + type Size { + width: Int! + height: Int! + } + + type Rectangle @typePolicy(keyFields: "size") { + size: Size! + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with nullable field", () => { + const schemaSDL: string = ` + type Query { + allRectangles: [Rectangle!] + } + + type Rectangle @typePolicy(keyFields: "width height") { + width: Int! + height: Int + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with missing field on interface", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal @typePolicy(keyFields: "id") { + species: String! + } + + type Dog implements Animal { + id: ID! + species: String! + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with missing field on object extension", () => { + const schemaSDL: string = ` + type Query { + allCircles: [Circle!] + } + + type Circle { + radius: Int! + } + + extend type Circle @typePolicy(keyFields: "width") + `; + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with missing field on interface extension", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + + type Dog implements Animal { + id: ID! + species: String! + } + + extend interface Animal @typePolicy(keyFields: "id") + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with conflicting interfaces", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal @typePolicy(keyFields: "id") { + id: ID! + } + + interface Domesticated @typePolicy(keyFields: "id owner") { + id: ID! + owner: String + } + + type Dog implements Animal & Domesticated { + id: ID! + species: String! + owner: String + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); + + describe("with policy on both interface and type", () => { + const schemaSDL: string = ` + type Query { + allAnimals: [Animal!] + } + + interface Animal @typePolicy(keyFields: "id") { + id: ID! + } + + type Dog implements Animal @typePolicy(keyFields: "id owner") { + id: ID! + species: String! + owner: String + } + `; + + it("should throw", () => { + expect(() => + loadSchemaFromSources([ + new Source(schemaSDL, "Test Schema", { line: 1, column: 1 }), + ]) + ).toThrow(GraphQLError); + }); + }); +}); diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/compiler/ir.ts b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/compiler/ir.ts index 19aa615b0..a758d9fbb 100644 --- a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/compiler/ir.ts +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/compiler/ir.ts @@ -96,4 +96,4 @@ export type InclusionConditionSkipped = "SKIPPED"; export interface InclusionConditionVariable { variable: string; isInverted: Boolean; -} \ No newline at end of file +} diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/index.ts b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/index.ts index 14aea286b..627faea48 100644 --- a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/index.ts +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/index.ts @@ -17,10 +17,11 @@ import { assertValidSchema, assertValidSDL } from "./utilities/graphql"; import { addApolloCodegenSchemaExtensionToDocument, } from "./utilities/apolloCodegenSchemaExtension"; -import { +import { addExperimentalDeferDirectiveToSDLDocument, addExperimentalDeferDirectiveToIntrospectionSchema } from "./utilities/experimentalDeferDirective"; +import { addTypePolicyDirectivesToSchema } from "./utilities/typePolicyDirective"; // We need to export all the classes we want to map to native objects, // so we have access to the constructor functions for type checks. @@ -61,6 +62,7 @@ export function loadSchemaFromSources(sources: Source[]): GraphQLSchema { assertValidSDL(document) const schema = buildASTSchema(document, { assumeValid: true, assumeValidSDL: true }) + addTypePolicyDirectivesToSchema(schema) assertValidSchema(schema) return schema @@ -69,6 +71,7 @@ export function loadSchemaFromSources(sources: Source[]): GraphQLSchema { var schema = loadSchemaFromIntrospectionResult(introspectionJSONResult.body) document = addExperimentalDeferDirectiveToIntrospectionSchema(schema, document) schema = extendSchema(schema, document, { assumeValid: true, assumeValidSDL: true }) + addTypePolicyDirectivesToSchema(schema) assertValidSchema(schema) diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts index 48a208b31..7ef8cbd51 100644 --- a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts @@ -9,6 +9,22 @@ export const directive_apollo_client_ios_localCacheMutation: DirectiveDefinition locations: [nameNode("QUERY"), nameNode("MUTATION"), nameNode("SUBSCRIPTION"), nameNode("FRAGMENT_DEFINITION")] } +export const directive_typePolicy: DirectiveDefinitionNode = { + kind: Kind.DIRECTIVE_DEFINITION, + description: stringNode("Attach extra information to a given type."), + name: nameNode("typePolicy"), + arguments: [ + { + kind: Kind.INPUT_VALUE_DEFINITION, + description: stringNode("A selection set containing fields used to compute the cache key of an object. Referenced fields must have non-nullable scalar types. Order is important."), + name: nameNode("keyFields"), + type: nonNullNode(typeNode(GraphQLString)) + } + ], + repeatable: false, + locations: [nameNode("OBJECT"), nameNode("INTERFACE")] +} + export const directive_import_statement: DirectiveDefinitionNode = { kind: Kind.DIRECTIVE_DEFINITION, description: stringNode("A directive used by the Apollo iOS code generation engine to generate custom import statements in operation or fragment definition files. An import statement to import a module with the name provided in the `module` argument will be added to the generated definition file."), @@ -25,19 +41,20 @@ export const directive_import_statement: DirectiveDefinitionNode = { locations: [nameNode("QUERY"), nameNode("MUTATION"), nameNode("SUBSCRIPTION"), nameNode("FRAGMENT_DEFINITION")] } -export const apolloCodegenSchemaExtension: DocumentNode = { - kind: Kind.DOCUMENT, - definitions: [ - directive_apollo_client_ios_localCacheMutation, - directive_import_statement - ] -} +const apolloDirectives = [ + directive_apollo_client_ios_localCacheMutation, + directive_import_statement, + directive_typePolicy, +] export function addApolloCodegenSchemaExtensionToDocument(document: DocumentNode): DocumentNode { - return document.definitions.some(definition => + const directives = apolloDirectives.filter(directive => !document.definitions.some(definition => definition.kind == Kind.DIRECTIVE_DEFINITION && - definition.name.value == directive_apollo_client_ios_localCacheMutation.name.value - ) ? - document : - concatAST([document, apolloCodegenSchemaExtension]) + definition.name.value == directive.name.value + )); + + return concatAST([document, { + kind: Kind.DOCUMENT, + definitions: directives + }]); } diff --git a/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/typePolicyDirective.ts b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/typePolicyDirective.ts new file mode 100644 index 000000000..fe909c960 --- /dev/null +++ b/apollo-ios-codegen/Sources/GraphQLCompiler/JavaScript/src/utilities/typePolicyDirective.ts @@ -0,0 +1,177 @@ +import { + DirectiveNode, + GraphQLCompositeType, + GraphQLError, + GraphQLInterfaceType, + GraphQLObjectType, + GraphQLSchema, + isInterfaceType, + isNonNullType, + isScalarType, + isUnionType, + Kind, + valueFromASTUntyped, +} from "graphql"; +import { directive_typePolicy } from "./apolloCodegenSchemaExtension"; + +const directiveName = directive_typePolicy.name.value; + +type TypePolicyDirectiveResult = { + directive: DirectiveNode; + source: GraphQLObjectType | GraphQLInterfaceType; +}; + +function matchDirectiveArguments( + first: DirectiveNode, + second: DirectiveNode +): boolean { + return ( + (first.arguments ?? []) + .map((node) => + JSON.stringify([node.name.value, valueFromASTUntyped(node.value)]) + ) + .sort() + .toString() === + (second.arguments ?? []) + .map((node) => + JSON.stringify([node.name.value, valueFromASTUntyped(node.value)]) + ) + .sort() + .toString() + ); +} + +function typePolicyDirectiveFor( + type: GraphQLCompositeType +): TypePolicyDirectiveResult | undefined { + if (isUnionType(type)) { + return undefined; + } + + for (const extension of type.extensionASTNodes ?? []) { + const directive = extension.directives?.find( + (d) => d.name.value === directiveName + ); + if (directive) { + return { directive, source: type }; + } + } + + let result: TypePolicyDirectiveResult | undefined; + for (const directive of type.astNode?.directives ?? []) { + if (directive.name.value === directiveName) { + result = { directive, source: type }; + break; + } + } + + if ("getInterfaces" in type) { + for (const interfaceType of type.getInterfaces()) { + const found = typePolicyDirectiveFor(interfaceType); + if (!found) continue; + + if (!result) { + result = found; + } else if (!matchDirectiveArguments(result.directive, found.directive)) { + if (result.source === type) { + throw new GraphQLError( + `Type "${type.name}" has a @typePolicy directive which conflicts with the @typePolicy directive on interface "${found.source.name}".`, + { nodes: type.astNode } + ); + } else { + throw new GraphQLError( + `Type "${type.name}" inherits conflicting @typePolicy directives from interfaces "${result.source.name}" and "${found.source.name}".`, + { nodes: type.astNode } + ); + } + } + } + } + + return result; +} + +function validateKeyFields( + result: TypePolicyDirectiveResult, + keyFields: string[] +) { + const { directive, source: type } = result; + + if (isUnionType(type)) { + return; + } + + const label = isInterfaceType(type) ? "interface" : "object"; + + var allFields = type.getFields(); + for (const keyField of keyFields) { + if (!keyField) { + throw new GraphQLError( + `Key fields must be a space-separated list of identifiers.`, + { nodes: directive } + ); + } + + const actualField = allFields[keyField]; + if (!actualField) { + throw new GraphQLError( + `Key field "${keyField}" does not exist on ${label} "${type.name}".`, + { nodes: type.astNode ? [type.astNode, directive] : directive } + ); + } + + if (!isNonNullType(actualField.type)) { + throw new GraphQLError( + `Key field "${keyField}" on ${label} "${type.name}" must be non-nullable.`, + { + nodes: actualField.astNode + ? [actualField.astNode, directive] + : directive, + } + ); + } + + if (!isScalarType(actualField.type.ofType)) { + throw new GraphQLError( + `Key field "${keyField}" on ${label} "${type.name}" must be a scalar type, got ${actualField.type}.`, + { + nodes: actualField.astNode + ? [actualField.astNode, directive] + : directive, + } + ); + } + } +} + +export function keyFieldsFor(type: GraphQLCompositeType): string[] { + const result = typePolicyDirectiveFor(type); + if (!result) { + return []; + } + + const argumentValue = result.directive?.arguments?.find( + (b) => b.name.value === "keyFields" + )?.value; + if (!argumentValue || argumentValue.kind !== Kind.STRING) { + return []; + } + + const fields = argumentValue.value.split(" "); + + validateKeyFields(result, fields); + + return fields; +} + +export function addTypePolicyDirectivesToSchema(schema: GraphQLSchema) { + const types = schema.getTypeMap(); + + for (const key in types) { + const type = types[key]; + + if (type instanceof GraphQLObjectType) { + (type as any)._apolloKeyFields = keyFieldsFor(type); + } + } +} diff --git a/apollo-ios/Sources/ApolloAPI/SchemaMetadata.swift b/apollo-ios/Sources/ApolloAPI/SchemaMetadata.swift index 39ace54fb..ca5b9b824 100644 --- a/apollo-ios/Sources/ApolloAPI/SchemaMetadata.swift +++ b/apollo-ios/Sources/ApolloAPI/SchemaMetadata.swift @@ -1,3 +1,5 @@ +import Foundation + /// A protocol that a generated GraphQL schema should conform to. /// /// The generated schema metadata is the source of information about the generated types in the @@ -53,10 +55,26 @@ extension SchemaMetadata { /// - Returns: A `String` representing the cache key for the `object` to be used by /// `NormalizedCache` mechanisms. @inlinable public static func cacheKey(for object: ObjectData) -> String? { - guard let type = graphQLType(for: object), - let info = configuration.cacheKeyInfo(for: type, object: object) else { - return nil + guard let type = graphQLType(for: object) else { return nil } + + if let info = configuration.cacheKeyInfo(for: type, object: object) { + return "\(info.uniqueKeyGroup ?? type.typename):\(info.id)" + } + + guard let keyFields = type.keyFields else { return nil } + + let idValues = try? keyFields.map { + guard let keyFieldValue = object[$0] else { + throw JSONDecodingError.missingValue + } + let item = try String(_jsonValue: keyFieldValue._asAnyHashable) + + // Escape all instances of `+` with a backslash, as well as other backslashes + return item.replacingOccurrences(of: "\\", with: "\\\\") + .replacingOccurrences(of: "+", with: "\\+") } - return "\(info.uniqueKeyGroup ?? type.typename):\(info.id)" + + guard let id = idValues?.joined(separator: "+") else { return nil } + return "\(type.typename):\(id)" } } diff --git a/apollo-ios/Sources/ApolloAPI/SchemaTypes/Object.swift b/apollo-ios/Sources/ApolloAPI/SchemaTypes/Object.swift index 7eeffcfad..765c6cb97 100644 --- a/apollo-ios/Sources/ApolloAPI/SchemaTypes/Object.swift +++ b/apollo-ios/Sources/ApolloAPI/SchemaTypes/Object.swift @@ -10,12 +10,19 @@ public struct Object: Hashable, Sendable { /// - Parameters: /// - typename: The name of the type. /// - implementedInterfaces: A list of the interfaces implemented by the type. + /// - keyFields: A list of field names that are used to uniquely identify an instance of this type. public init( typename: String, - implementedInterfaces: [Interface] + implementedInterfaces: [Interface], + keyFields: [String]? = nil ) { self.typename = typename self.implementedInterfaces = implementedInterfaces + if keyFields?.isEmpty == false { + self.keyFields = keyFields + } else { + self.keyFields = nil + } } /// A list of the interfaces implemented by the type. @@ -26,6 +33,11 @@ public struct Object: Hashable, Sendable { /// When an entity of the type is included in a GraphQL response its `__typename` field will /// match this value. public let typename: String + + /// A list of fields used to uniquely identify an instance of this object. + /// + /// This is set by adding a `@typePolicy` directive to the schema. + public let keyFields: [String]? /// A helper function to determine if the receiver implements a given ``Interface`` Type. ///