From 1e1a6e9d0faaab1e6ab555830fcdd87599c13d73 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Mon, 14 Feb 2022 12:43:36 -0800 Subject: [PATCH 01/25] Render Operation Variable - single variable --- Apollo.xcodeproj/project.pbxproj | 4 ++ .../Templates/GraphQLType+Rendered.swift | 38 ++++++++++++++ .../OperationDefinitionTemplate.swift | 52 ++++++++++++++++++- .../Templates/SelectionSetTemplate.swift | 39 -------------- .../OperationDefinitionTemplateTests.swift | 45 ++++++++++++++++ 5 files changed, 138 insertions(+), 40 deletions(-) create mode 100644 Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index fce283f057..d19f93c548 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -316,6 +316,7 @@ DED46035261CEA660086EF63 /* ApolloTestSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F8A95781EC0FC1200304A2D /* ApolloTestSupport.framework */; }; DED46042261CEA8A0086EF63 /* TestServerURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = DED45C172615308E0086EF63 /* TestServerURLs.swift */; }; DED46051261CEAD20086EF63 /* StarWarsAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FCE2CFA1E6C213D00E34457 /* StarWarsAPI.framework */; }; + DEE2DAA227BAF00500EC0607 /* GraphQLType+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */; }; DEFBBC86273470F70088AABC /* IR+Field.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFBBC85273470F70088AABC /* IR+Field.swift */; }; DEFE0FC52748822900FFA440 /* IR+EntitySelectionTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFE0FC42748822900FFA440 /* IR+EntitySelectionTree.swift */; }; E603863C27B2FB1D00E7B060 /* PetDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = E603765727B2FB1900E7B060 /* PetDetails.swift */; }; @@ -1016,6 +1017,7 @@ DEE1B3F3273B08D8007350E5 /* AllAnimals.graphql.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllAnimals.graphql.swift; sourceTree = ""; }; DEE1B3F4273B08D8007350E5 /* Types.graphql.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Types.graphql.swift; sourceTree = ""; }; DEE1B3F5273B08D8007350E5 /* WarmBloodedDetails.graphql.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarmBloodedDetails.graphql.swift; sourceTree = ""; }; + DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLType+Rendered.swift"; sourceTree = ""; }; DEFBBC85273470F70088AABC /* IR+Field.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+Field.swift"; sourceTree = ""; }; DEFE0FC42748822900FFA440 /* IR+EntitySelectionTree.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+EntitySelectionTree.swift"; sourceTree = ""; }; E603765727B2FB1900E7B060 /* PetDetails.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetDetails.swift; sourceTree = ""; }; @@ -2025,6 +2027,7 @@ DE5FD5FC2769222D0033EE23 /* OperationDefinitionTemplate.swift */, DE5FD60427694FA70033EE23 /* SchemaTemplate.swift */, DE2739102769AEBA00B886EF /* SelectionSetTemplate.swift */, + DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, E6B42D0827A472A700A3BD58 /* SwiftPackageManagerModuleTemplate.swift */, E64F7EB727A0854E0059C021 /* UnionTemplate.swift */, ); @@ -3152,6 +3155,7 @@ DE5EEC8527988F1A00AF5913 /* IR+SelectionSet.swift in Sources */, DE3484622746FF8F0065B77E /* IR+OperationBuilder.swift in Sources */, E610D8DF278F8F1E0023E495 /* UnionFileGenerator.swift in Sources */, + DEE2DAA227BAF00500EC0607 /* GraphQLType+Rendered.swift in Sources */, DE223C2D2721FCE8004A0148 /* ScopedSelectionSetHashable.swift in Sources */, DE79642D27699A6A00978A03 /* IR+NamedFragmentBuilder.swift in Sources */, 9B47518D2575AA850001FB87 /* Pluralizer.swift in Sources */, diff --git a/Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift b/Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift new file mode 100644 index 0000000000..f20b7e7d82 --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift @@ -0,0 +1,38 @@ +extension GraphQLType { + var rendered: String { + rendered(containedInNonNull: false) + } + + func rendered(replacingNamedTypeWith newTypeName: String) -> String { + rendered(containedInNonNull: false, replacingNamedTypeWith: newTypeName) + } + + private func rendered( + containedInNonNull: Bool, + replacingNamedTypeWith newTypeName: String? = nil + ) -> String { + switch self { + case let .entity(type as GraphQLNamedType), + let .scalar(type as GraphQLNamedType), + let .inputObject(type as GraphQLNamedType): + + let typeName = newTypeName ?? type.swiftName + + return containedInNonNull ? typeName : "\(typeName)?" + + case let .enum(type as GraphQLNamedType): + let typeName = newTypeName ?? type.name + let enumType = "GraphQLEnum<\(typeName)>" + + return containedInNonNull ? enumType : "\(enumType)?" + + case let .nonNull(ofType): + return ofType.rendered(containedInNonNull: true, replacingNamedTypeWith: newTypeName) + + case let .list(ofType): + let inner = "[\(ofType.rendered(containedInNonNull: false, replacingNamedTypeWith: newTypeName))]" + + return containedInNonNull ? inner : "\(inner)?" + } + } +} diff --git a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift index c578fe729b..5276767878 100644 --- a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift @@ -16,7 +16,11 @@ struct OperationDefinitionTemplate { \(OperationDeclaration(operation.definition)) \(DocumentType.render(operation.definition, fragments: operation.referencedFragments, apq: config.apqs)) - public init() {} + \(section: VariableProperties(operation.definition.variables)) + + \(Initializer(operation.definition.variables)) + + \(section: VariablesAccessor(operation.definition.variables)) \(SelectionSetTemplate(schema: schema).render(for: operation)) } @@ -60,6 +64,52 @@ struct OperationDefinitionTemplate { ) } } + + private func VariableProperties( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + """ + \(variables.map { "public var \(VariableParameter($0))"}, separator: "\n") + """ + } + + private func VariableParameter(_ variable: CompilationResult.VariableDefinition) -> String { + "\(variable.name): \(variable.type.rendered)" + } + + private func Initializer( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + let `init` = "public init" + switch variables.count { + case 0: + return "\(`init`)() {}" + case 1: + let variable = variables.first.unsafelyUnwrapped + return """ + \(`init`)(\(VariableParameter(variable))) { + self.\(variable.name) = \(variable.name) + } + """ + default: + return "\(`init`)() {}" + } + } + + private func VariablesAccessor( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + guard !variables.isEmpty else { + return "" + } + + return """ + public var variables: Variables? { + [\(variables.map { "\"\($0.name)\": \($0.name)"})] + } + """ + } + } fileprivate extension ApolloCodegenConfiguration.APQConfig { diff --git a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift index a41acc4558..a343e9cdce 100644 --- a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift @@ -261,45 +261,6 @@ fileprivate extension GraphQLCompositeType { } } -fileprivate extension GraphQLType { - var rendered: String { - rendered(containedInNonNull: false) - } - - func rendered(replacingNamedTypeWith newTypeName: String) -> String { - rendered(containedInNonNull: false, replacingNamedTypeWith: newTypeName) - } - - private func rendered( - containedInNonNull: Bool, - replacingNamedTypeWith newTypeName: String? = nil - ) -> String { - switch self { - case let .entity(type as GraphQLNamedType), - let .scalar(type as GraphQLNamedType), - let .inputObject(type as GraphQLNamedType): - - let typeName = newTypeName ?? type.swiftName - - return containedInNonNull ? typeName : "\(typeName)?" - - case let .enum(type as GraphQLNamedType): - let typeName = newTypeName ?? type.name - let enumType = "GraphQLEnum<\(typeName)>" - - return containedInNonNull ? enumType : "\(enumType)?" - - case let .nonNull(ofType): - return ofType.rendered(containedInNonNull: true, replacingNamedTypeWith: newTypeName) - - case let .list(ofType): - let inner = "[\(ofType.rendered(containedInNonNull: false, replacingNamedTypeWith: newTypeName))]" - - return containedInNonNull ? inner : "\(inner)?" - } - } -} - fileprivate extension IR.SelectionSet { /// Indicates if the SelectionSet should be rendered by the template engine. diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift index 88df8a9d00..8209143baa 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift @@ -307,4 +307,49 @@ class OperationDefinitionTemplateTests: XCTestCase { // then expect(actual).to(equalLineByLine(expected, atLine: 6, ignoringExtraLines: true)) } + + // MARK: - Variables + + func test__generate__givenQueryWithScalarVariables_generatesQueryOperationWithVariable() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + species: String! + } + """ + + document = """ + query TestOperation($variable: String!) { + allAnimals { + species + } + } + """ + + let expected = + """ + public var variable: String + + public init(variable: String) { + self.variable = variable + } + + public var variables: Variables? { + ["variable": variable] + } + """ + + // when + try buildSubjectAndOperation() + + let actual = subject.render() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) + } + } From 35a527240d351b3a29ac955bcf859a78a83b4e88 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Mon, 14 Feb 2022 14:44:56 -0800 Subject: [PATCH 02/25] Operation Variables - Multiple Variables --- Sources/ApolloCodegenLib/TemplateString.swift | 8 +++ .../OperationDefinitionTemplate.swift | 20 +++---- .../OperationDefinitionTemplateTests.swift | 52 +++++++++++++++++++ 3 files changed, 68 insertions(+), 12 deletions(-) diff --git a/Sources/ApolloCodegenLib/TemplateString.swift b/Sources/ApolloCodegenLib/TemplateString.swift index 006e89b8e8..20be1d3122 100644 --- a/Sources/ApolloCodegenLib/TemplateString.swift +++ b/Sources/ApolloCodegenLib/TemplateString.swift @@ -106,6 +106,14 @@ struct TemplateString: ExpressibleByStringInterpolation, CustomStringConvertible appendInterpolation(elementsString) } + mutating func appendInterpolation(list: T) + where T: Collection, T.Element: CustomStringConvertible { + let shouldWrapInNewlines = list.count > 1 + if shouldWrapInNewlines { appendLiteral("\n ") } + appendInterpolation(list) + if shouldWrapInNewlines { appendInterpolation("\n") } + } + mutating func appendInterpolation( if bool: Bool, _ template: @autoclosure () -> TemplateString, diff --git a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift index 5276767878..127cdfc8a0 100644 --- a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift @@ -81,19 +81,15 @@ struct OperationDefinitionTemplate { _ variables: [CompilationResult.VariableDefinition] ) -> TemplateString { let `init` = "public init" - switch variables.count { - case 0: - return "\(`init`)() {}" - case 1: - let variable = variables.first.unsafelyUnwrapped - return """ - \(`init`)(\(VariableParameter(variable))) { - self.\(variable.name) = \(variable.name) - } - """ - default: + if variables.isEmpty { return "\(`init`)() {}" } + + return """ + \(`init`)(\(list: variables.map(VariableParameter))) { + \(variables.map { "self.\($0.name) = \($0.name)" }, separator: "\n") + } + """ } private func VariablesAccessor( @@ -105,7 +101,7 @@ struct OperationDefinitionTemplate { return """ public var variables: Variables? { - [\(variables.map { "\"\($0.name)\": \($0.name)"})] + [\(variables.map { "\"\($0.name)\": \($0.name)"}, separator: ",\n ")] } """ } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift index 8209143baa..e9f7ce2e2b 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift @@ -352,4 +352,56 @@ class OperationDefinitionTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) } + func test__generate__givenQueryWithMutlipleScalarVariables_generatesQueryOperationWithVariables() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + species: String! + intField: Int! + } + """ + + document = """ + query TestOperation($variable1: String!, $variable2: Boolean!, $variable3: Int!) { + allAnimals { + species + } + } + """ + + let expected = + """ + public var variable1: String + public var variable2: Bool + public var variable3: Int + + public init( + variable1: String, + variable2: Bool, + variable3: Int + ) { + self.variable1 = variable1 + self.variable2 = variable2 + self.variable3 = variable3 + } + + public var variables: Variables? { + ["variable1": variable1, + "variable2": variable2, + "variable3": variable3] + } + """ + + // when + try buildSubjectAndOperation() + + let actual = subject.render() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) + } } From b2770a76424774b35dbc4ba507abaf94f96a720a Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Mon, 14 Feb 2022 15:33:27 -0800 Subject: [PATCH 03/25] WIP: Operation Variable - nullables --- .../OperationDefinitionTemplateTests.swift | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift index e9f7ce2e2b..fb0be5824a 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift @@ -310,7 +310,7 @@ class OperationDefinitionTemplateTests: XCTestCase { // MARK: - Variables - func test__generate__givenQueryWithScalarVariables_generatesQueryOperationWithVariable() throws { + func test__generate__givenQueryWithScalarVariable_generatesQueryOperationWithVariable() throws { // given schemaSDL = """ type Query { @@ -404,4 +404,47 @@ class OperationDefinitionTemplateTests: XCTestCase { // then expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) } + + + func test__generate__givenQueryWithNullableScalarVariable_generatesQueryOperationWithVariable() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + species: String! + } + """ + + document = """ + query TestOperation($variable: String) { + allAnimals { + species + } + } + """ + + let expected = + """ + public var variable: GraphQLNullable + + public init(variable: GraphQLNullable = nil) { + self.variable = variable + } + + public var variables: Variables? { + ["variable": variable] + } + """ + + // when + try buildSubjectAndOperation() + + let actual = subject.render() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) + } } From f9dcc92d4c4c36659ea0b53f67950ec1d1ed8ff2 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Tue, 15 Feb 2022 12:38:00 -0800 Subject: [PATCH 04/25] Recfactored to add InputValueRenderable Finished implementation of operation variable generation --- Apollo.xcodeproj/project.pbxproj | 20 +- .../Templates/InputObjectTemplate.swift | 70 +---- .../OperationDefinitionTemplate.swift | 44 +-- .../GraphQLInputValue+Rendered.swift | 13 + .../GraphQLType+Rendered.swift | 21 ++ .../InputValueRenderable.swift | 52 ++++ .../MockCompilationResult.swift | 14 + .../Templates/InputObjectTemplateTests.swift | 31 +- ...nDefinition_VariableDefinition_Tests.swift | 293 ++++++++++++++++++ 9 files changed, 465 insertions(+), 93 deletions(-) create mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift rename Sources/ApolloCodegenLib/Templates/{ => RenderingHelpers}/GraphQLType+Rendered.swift (65%) create mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift create mode 100644 Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index d19f93c548..5c283b493c 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -258,6 +258,8 @@ DE674D9F261CEEE4000E8FC8 /* a.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9B2061192591B3550020D1E0 /* a.txt */; }; DE6B15AF26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6B15AE26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift */; }; DE6B15B126152BE10068D642 /* Apollo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FC750441D2A532C00458D91 /* Apollo.framework */; }; + DE6D07F927BC3B6D009F5F33 /* InputValueRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* InputValueRenderable.swift */; }; + DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; DE736F4626FA6EE6007187F2 /* InflectorKit in Frameworks */ = {isa = PBXBuildFile; productRef = E6E4209126A7DF4200B82624 /* InflectorKit */; }; DE796429276998B000978A03 /* IR+RootFieldBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */; }; DE79642B276999E700978A03 /* IRNamedFragmentBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */; }; @@ -981,6 +983,8 @@ DE6B160B26152D210068D642 /* Project-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Debug.xcconfig"; sourceTree = ""; }; DE6B160C26152D210068D642 /* Workspace-Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Packaging.xcconfig"; sourceTree = ""; }; DE6B160D26152D210068D642 /* Workspace-Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Shared.xcconfig"; sourceTree = ""; }; + DE6D07F827BC3B6D009F5F33 /* InputValueRenderable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputValueRenderable.swift; sourceTree = ""; }; + DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationDefinition_VariableDefinition_Tests.swift; sourceTree = ""; }; DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+RootFieldBuilder.swift"; sourceTree = ""; }; DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IRNamedFragmentBuilderTests.swift; sourceTree = ""; }; DE79642C27699A6A00978A03 /* IR+NamedFragmentBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+NamedFragmentBuilder.swift"; sourceTree = ""; }; @@ -2017,6 +2021,7 @@ DE31A437276A78140020DC44 /* Templates */ = { isa = PBXGroup; children = ( + DE6D07FC27BC3C81009F5F33 /* RenderingHelpers */, E6C9849227929EBE009481BE /* EnumTemplate.swift */, DE5FD60A276970FC0033EE23 /* FragmentTemplate.swift */, E608FBA427B1EFDF00493756 /* HeaderCommentTemplate.swift */, @@ -2027,7 +2032,6 @@ DE5FD5FC2769222D0033EE23 /* OperationDefinitionTemplate.swift */, DE5FD60427694FA70033EE23 /* SchemaTemplate.swift */, DE2739102769AEBA00B886EF /* SelectionSetTemplate.swift */, - DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, E6B42D0827A472A700A3BD58 /* SwiftPackageManagerModuleTemplate.swift */, E64F7EB727A0854E0059C021 /* UnionTemplate.swift */, ); @@ -2043,8 +2047,9 @@ E69BEDA62798B89600000D10 /* InputObjectTemplateTests.swift */, E623FD2B2797A700008B4CED /* InterfaceTemplateTests.swift */, E64F7EC227A1243A0059C021 /* ObjectTemplateTests.swift */, - DE09F9C5270269F800795949 /* OperationDefinitionTemplate_DocumentType_Tests.swift */, DE09066E27A4713F00211300 /* OperationDefinitionTemplateTests.swift */, + DE09F9C5270269F800795949 /* OperationDefinitionTemplate_DocumentType_Tests.swift */, + DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */, DE5FD608276956C70033EE23 /* SchemaTemplateTests.swift */, E6B42D0C27A4749100A3BD58 /* SwiftPackageManagerModuleTemplateTests.swift */, E64F7EB927A085D90059C021 /* UnionTemplateTests.swift */, @@ -2149,6 +2154,15 @@ path = Configuration/Shared; sourceTree = SOURCE_ROOT; }; + DE6D07FC27BC3C81009F5F33 /* RenderingHelpers */ = { + isa = PBXGroup; + children = ( + DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, + DE6D07F827BC3B6D009F5F33 /* InputValueRenderable.swift */, + ); + path = RenderingHelpers; + sourceTree = ""; + }; DE9C04AB26EA763E00EC35E7 /* Accumulators */ = { isa = PBXGroup; children = ( @@ -3171,6 +3185,7 @@ E610D8DB278EB0900023E495 /* InterfaceFileGenerator.swift in Sources */, 9B7B6F69233C2C0C00F32205 /* FileManager+Apollo.swift in Sources */, E674DB41274C0A9B009BB90E /* Glob.swift in Sources */, + DE6D07F927BC3B6D009F5F33 /* InputValueRenderable.swift in Sources */, DE5B318F27A48E060051C9D3 /* ImportStatementTemplate.swift in Sources */, 9F1A966C258F34BB00A06EEB /* GraphQLSchema.swift in Sources */, 9BE74D3D23FB4A8E006D354F /* FileFinder.swift in Sources */, @@ -3254,6 +3269,7 @@ E6C9849527929FED009481BE /* EnumTemplateTests.swift in Sources */, DE5FD609276956C70033EE23 /* SchemaTemplateTests.swift in Sources */, E61EF713275EC99A00191DA7 /* ApolloCodegenTests.swift in Sources */, + DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */, E6B4E9992798A8CB004EC8C4 /* InterfaceTemplateTests.swift in Sources */, 9F62DF8E2590539A00E6E808 /* SchemaIntrospectionTests.swift in Sources */, E6D90D0D278FFE35009CAC5D /* SchemaFileGeneratorTests.swift in Sources */, diff --git a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift index 55a8fcfa02..63d95f0bab 100644 --- a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift @@ -31,7 +31,7 @@ struct InputObjectTemplate { private func InitializerParametersTemplate() -> TemplateString { TemplateString(""" \(graphqlInputObject.fields.map({ - "\($1.name): \($1.renderType(includeDefault: true))" + "\($1.name): \($1.renderInputValueType(includeDefault: true))" }), separator: ",\n") """) } @@ -44,76 +44,10 @@ struct InputObjectTemplate { private func FieldPropertyTemplate(_ field: GraphQLInputField) -> String { """ - var \(field.name): \(field.renderType()) { + var \(field.name): \(field.renderInputValueType()) { get { dict[\"\(field.name)\"] } set { dict[\"\(field.name)\"] = newValue } } """ } } - -fileprivate extension GraphQLInputField { - func renderType(includeDefault: Bool = false) -> String { - "\(type.render())\(isSwiftOptional ? "?" : "")\(includeDefault && hasSwiftNilDefault ? " = nil" : "")" - } - - var isSwiftOptional: Bool { - !isNullable && hasSchemaDefault - } - - var hasSwiftNilDefault: Bool { - isNullable && !hasSchemaDefault - } - - var isNullable: Bool { - switch type { - case .nonNull(_): return false - default: return true - } - } - - var hasSchemaDefault: Bool { - switch defaultValue { - case .none, .some(nil): - return false - case let .some(value): - guard let value = value as? JSValue else { - fatalError("Cannot determine default value for Input field: \(self)") - } - - return !value.isUndefined - } - } -} - -fileprivate extension GraphQLType { - enum NullabilityContainer { - case none - case graphqlNullable - case swiftOptional - } - - func render(nullability: NullabilityContainer = .graphqlNullable) -> String { - switch self { - case let .entity(type as GraphQLNamedType), - let .enum(type as GraphQLNamedType), - let .scalar(type as GraphQLNamedType), - let .inputObject(type as GraphQLNamedType): - - switch nullability { - case .none: return type.swiftName - case .graphqlNullable: return "GraphQLNullable<\(type.swiftName)>" - case .swiftOptional: return "\(type.swiftName)?" - } - - case let .nonNull(ofType): - return ofType.render(nullability: .none) - - case let .list(ofType): - let inner = "[\(ofType.render(nullability: .swiftOptional))]" - - if nullability == .graphqlNullable { return "GraphQLNullable<\(inner)>" } - else { return inner } - } - } -} diff --git a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift index 127cdfc8a0..028f55f0ba 100644 --- a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift @@ -16,11 +16,11 @@ struct OperationDefinitionTemplate { \(OperationDeclaration(operation.definition)) \(DocumentType.render(operation.definition, fragments: operation.referencedFragments, apq: config.apqs)) - \(section: VariableProperties(operation.definition.variables)) + \(section: Variables.Properties(operation.definition.variables)) \(Initializer(operation.definition.variables)) - \(section: VariablesAccessor(operation.definition.variables)) + \(section: Variables.Accessors(operation.definition.variables)) \(SelectionSetTemplate(schema: schema).render(for: operation)) } @@ -65,18 +65,6 @@ struct OperationDefinitionTemplate { } } - private func VariableProperties( - _ variables: [CompilationResult.VariableDefinition] - ) -> TemplateString { - """ - \(variables.map { "public var \(VariableParameter($0))"}, separator: "\n") - """ - } - - private func VariableParameter(_ variable: CompilationResult.VariableDefinition) -> String { - "\(variable.name): \(variable.type.rendered)" - } - private func Initializer( _ variables: [CompilationResult.VariableDefinition] ) -> TemplateString { @@ -86,24 +74,38 @@ struct OperationDefinitionTemplate { } return """ - \(`init`)(\(list: variables.map(VariableParameter))) { + \(`init`)(\(list: variables.map(Variables.Parameter))) { \(variables.map { "self.\($0.name) = \($0.name)" }, separator: "\n") } """ } - private func VariablesAccessor( - _ variables: [CompilationResult.VariableDefinition] - ) -> TemplateString { - guard !variables.isEmpty else { - return "" + enum Variables { + static func Properties( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + """ + \(variables.map { "public var \($0.name): \($0.renderInputValueType())"}, separator: "\n") + """ } - return """ + static func Parameter(_ variable: CompilationResult.VariableDefinition) -> String { + "\(variable.name): \(variable.renderInputValueType(includeDefault: true))" + } + + static func Accessors( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + guard !variables.isEmpty else { + return "" + } + + return """ public var variables: Variables? { [\(variables.map { "\"\($0.name)\": \($0.name)"}, separator: ",\n ")] } """ + } } } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift new file mode 100644 index 0000000000..5196f1fa18 --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift @@ -0,0 +1,13 @@ +// +// GraphQLInputValue+Rendered.swift +// ApolloCodegenLib +// +// Created by Anthony Miller on 2/15/22. +// Copyright © 2022 Apollo GraphQL. All rights reserved. +// + +import Foundation + +protocol InputValueRenderable { + +} diff --git a/Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift similarity index 65% rename from Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift rename to Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift index f20b7e7d82..7843b5dd16 100644 --- a/Sources/ApolloCodegenLib/Templates/GraphQLType+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift @@ -35,4 +35,25 @@ extension GraphQLType { return containedInNonNull ? inner : "\(inner)?" } } + + // MARK: Input Value + + func renderAsInputValue() -> String { + return renderAsInputValue(inNullable: true) + } + + private func renderAsInputValue(inNullable: Bool) -> String { + switch self { + case .entity, .enum, .scalar, .inputObject: + let typeName = self.rendered(containedInNonNull: true) + return inNullable ? "GraphQLNullable<\(typeName)>" : typeName + + case let .nonNull(ofType): + return ofType.renderAsInputValue(inNullable: false) + + case let .list(ofType): + let typeName = "[\(ofType.rendered)]" + return inNullable ? "GraphQLNullable<\(typeName)>" : typeName + } + } } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift new file mode 100644 index 0000000000..e2e7239142 --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift @@ -0,0 +1,52 @@ +import JavaScriptCore + +protocol InputValueRenderable { + var name: String { get } + var type: GraphQLType { get } + var hasDefaultValue: Bool { get } +} + +extension InputValueRenderable { + func renderInputValueType(includeDefault: Bool = false) -> String { + "\(type.renderAsInputValue())\(isSwiftOptional ? "?" : "")\(includeDefault && hasSwiftNilDefault ? " = nil" : "")" + } + + private var isSwiftOptional: Bool { + !isNullable && hasDefaultValue + } + + private var hasSwiftNilDefault: Bool { + isNullable && !hasDefaultValue + } + + var isNullable: Bool { + switch type { + case .nonNull: return false + default: return true + } + } +} + +extension GraphQLInputField: InputValueRenderable { + var hasDefaultValue: Bool { + switch defaultValue { + case .none, .some(nil): + return false + case let .some(value): + guard let value = value as? JSValue else { + fatalError("Cannot determine default value for Input field: \(self)") + } + + return !value.isUndefined + } + } +} + +extension CompilationResult.VariableDefinition: InputValueRenderable { + var hasDefaultValue: Bool { + switch defaultValue { + case .none, .some(nil), .some(.null): return false + default: return true + } + } +} diff --git a/Sources/ApolloCodegenTestSupport/MockCompilationResult.swift b/Sources/ApolloCodegenTestSupport/MockCompilationResult.swift index f23e723dc6..07b958f27a 100644 --- a/Sources/ApolloCodegenTestSupport/MockCompilationResult.swift +++ b/Sources/ApolloCodegenTestSupport/MockCompilationResult.swift @@ -95,3 +95,17 @@ public extension CompilationResult.FragmentDefinition { return mock } } + +public extension CompilationResult.VariableDefinition { + class func mock( + _ name: String, + type: GraphQLType, + defaultValue: GraphQLValue? + ) -> Self { + let mock = Self.emptyMockObject() + mock.name = name + mock.type = type + mock.defaultValue = defaultValue + return mock + } +} diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index 1921fa33c6..c7651d0e71 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -200,7 +200,7 @@ class InputObjectTemplateTests: XCTestCase { intField: GraphQLNullable = nil, boolField: GraphQLNullable = nil, floatField: GraphQLNullable = nil, - enumField: GraphQLNullable = nil, + enumField: GraphQLNullable> = nil, inputField: GraphQLNullable = nil, listField: GraphQLNullable<[String?]> = nil ) { @@ -235,7 +235,7 @@ class InputObjectTemplateTests: XCTestCase { set { dict["floatField"] = newValue } } - var enumField: GraphQLNullable { + var enumField: GraphQLNullable> { get { dict["enumField"] } set { dict["enumField"] = newValue } } @@ -559,4 +559,31 @@ class InputObjectTemplateTests: XCTestCase { // then expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) } + + func test__render__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { + // given + buildSubject(fields: [ + GraphQLInputField.mock("nullableListNullableItem", + type: .list(.enum(.mock(name: "EnumValue"))), + defaultValue: nil) + ]) + + let expected = """ + init( + nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]> = nil + ) { + dict = InputDict([ + "nullableListNullableItem": nullableListNullableItem + ]) + } + + var nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]> { + """ + + // when + let actual = subject.render() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + } } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift new file mode 100644 index 0000000000..dcc807e52e --- /dev/null +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -0,0 +1,293 @@ +import XCTest +import Nimble +@testable import ApolloCodegenLib + +class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { + + var subject: CompilationResult.VariableDefinition! + + override func setUp() { + super.setUp() + } + + override func tearDown() { + subject = nil + + super.tearDown() + } + + func test__renderInputValueType__givenScalar__generatesCorrectParameterAndInitializer() throws { + // given + subject = .mock("variable", type: .scalar(.string()), defaultValue: nil) + + let expected = "GraphQLNullable = nil" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__givenIncludeDefaultFalse__generatesCorrectParameter() throws { + // given + subject = .mock("variable", type: .scalar(.string()), defaultValue: nil) + + let expected = "GraphQLNullable" + + // when + let actual = subject.renderInputValueType(includeDefault: false) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__givenAllPossibleSchemaInputFieldTypes__generatesCorrectParametersAndInitializer() throws { + // given + let tests: [(variable: CompilationResult.VariableDefinition, expected: String)] = [ + ( + .mock( + "stringField", + type: .scalar(.string()), + defaultValue: nil + ), + "GraphQLNullable = nil" + ), + ( + .mock( + "intField", + type: .scalar(.integer()), + defaultValue: nil + ), + "GraphQLNullable = nil" + ), + ( + .mock( + "boolField", + type: .scalar(.boolean()), + defaultValue: nil + ), + "GraphQLNullable = nil" + ), + ( + .mock( + "floatField", + type: .scalar(.float()), + defaultValue: nil + ), + "GraphQLNullable = nil" + ), + ( + .mock( + "enumField", + type: .enum(.mock(name: "EnumValue")), + defaultValue: nil + ), + "GraphQLNullable> = nil" + ), + ( + .mock( + "inputField", + type: .inputObject(.mock( + "InnerInputObject", + fields: [ + GraphQLInputField.mock("innerStringField", type: .scalar(.string()), defaultValue: nil) + ] + )), + defaultValue: nil + ), + "GraphQLNullable = nil" + ), + ( + .mock( + "listField", + type: .list(.scalar(.string())), + defaultValue: nil + ), + "GraphQLNullable<[String?]> = nil" + ) + ] + + for test in tests { + // when + let actual = test.variable.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(test.expected)) + } + } + + // MARK: Nullable Field Tests + + func test__renderInputValueType__given_NullableField_NoDefault__generates_NullableParameter_InitializerNilDefault() throws { + // given + subject = .mock("nullable", type: .scalar(.integer()), defaultValue: nil) + + let expected = "GraphQLNullable = nil" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableField_WithDefault__generates_NullableParameter_NoInitializerDefault() throws { + // given + subject = .mock("nullableWithDefault", type: .scalar(.integer()), defaultValue: .int(3)) + + let expected = "GraphQLNullable" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableField_NoDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { + // given + subject = .mock("nonNullable", type: .nonNull(.scalar(.integer())), defaultValue: nil) + + let expected = "Int" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableField_WithDefault__generates_OptionalParameter_NoInitializerDefault() throws { + // given + subject = .mock("nonNullableWithDefault", type: .nonNull(.scalar(.integer())), defaultValue: .int(3)) + + let expected = "Int?" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableList_NullableItem_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { + // given + subject = .mock("nullableListNullableItem", type: .list(.scalar(.string())), defaultValue: nil) + + let expected = "GraphQLNullable<[String?]> = nil" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { + // given + subject = .mock("nullableListNullableItemWithDefault", type: .list(.scalar(.string())), defaultValue: .string("val")) + + let expected = "GraphQLNullable<[String?]>" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableList_NonNullableItem_NoDefault__generates_NullableParameter_NonOptionalItem_InitializerNilDefault() throws { + // given + subject = .mock("nullableListNonNullableItem", type: .list(.nonNull(.scalar(.string()))), defaultValue: nil) + + let expected = "GraphQLNullable<[String]> = nil" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { + // given + subject = .mock("nullableListNonNullableItemWithDefault", type: .list(.nonNull(.scalar(.string()))), defaultValue: .string("val")) + + let expected = "GraphQLNullable<[String]>" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableList_NullableItem_NoDefault__generates_NonNullableNonOptionalParameter_OptionalItem_NoInitializerDefault() throws { + // given + subject = .mock("nonNullableListNullableItem", type: .nonNull(.list(.scalar(.string()))), defaultValue: nil) + + let expected = "[String?]" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_NoInitializerDefault() throws { + // given + subject = .mock("nonNullableListNullableItemWithDefault", type: .nonNull(.list(.scalar(.string()))), defaultValue: .string("val")) + + let expected = "[String?]?" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableList_NonNullableItem_NoDefault__generates_NonNullableNonOptionalParameter_NonOptionalItem_NoInitializerDefault() throws { + // given + subject = .mock("nonNullableListNonNullableItem", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: nil) + + let expected = "[String]" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_NoInitializerDefault() throws { + // given + subject = .mock("nonNullableListNonNullableItemWithDefault", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: .string("val")) + + let expected = "[String]?" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { + // given + subject = .mock("nullableListNullableItem", + type: .list(.enum(.mock(name: "EnumValue"))), + defaultValue: nil) + + let expected = "GraphQLNullable<[GraphQLEnum?]> = nil" + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + +} From 9006ab90504f781454833dd871b4e9518186f114 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Tue, 15 Feb 2022 12:47:14 -0800 Subject: [PATCH 05/25] Fix renamed but not deleted file --- .../GraphQLInputValue+Rendered.swift | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift deleted file mode 100644 index 5196f1fa18..0000000000 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputValue+Rendered.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// GraphQLInputValue+Rendered.swift -// ApolloCodegenLib -// -// Created by Anthony Miller on 2/15/22. -// Copyright © 2022 Apollo GraphQL. All rights reserved. -// - -import Foundation - -protocol InputValueRenderable { - -} From b5864cb0e010efd1387b080443c80be875ea6e8e Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Tue, 15 Feb 2022 16:32:29 -0800 Subject: [PATCH 06/25] Add ExpressibleBy Literals to GraphQLNullable --- Sources/ApolloAPI/GraphQLNullable.swift | 85 +++++++++++++++++++++++-- Sources/ApolloAPI/InputValue.swift | 2 +- Sources/ApolloAPI/ScalarTypes.swift | 3 +- 3 files changed, 83 insertions(+), 7 deletions(-) diff --git a/Sources/ApolloAPI/GraphQLNullable.swift b/Sources/ApolloAPI/GraphQLNullable.swift index 65f18e30a3..ab6b1c2f5d 100644 --- a/Sources/ApolloAPI/GraphQLNullable.swift +++ b/Sources/ApolloAPI/GraphQLNullable.swift @@ -26,11 +26,6 @@ public enum GraphQLNullable: ExpressibleByNilLiteral { return wrapped } - public var unsafelyUnwrapped: Wrapped { - guard case let .some(wrapped) = self else { fatalError("Force unwrap Nullable value failed!") } - return wrapped - } - public subscript(dynamicMember path: KeyPath) -> T? { unwrapped?[keyPath: path] } @@ -39,3 +34,83 @@ public enum GraphQLNullable: ExpressibleByNilLiteral { self = .none } } + +// MARK: - ExpressibleBy Literal Extensions + +extension GraphQLNullable: ExpressibleByUnicodeScalarLiteral +where Wrapped: ExpressibleByUnicodeScalarLiteral { + public init(unicodeScalarLiteral value: Wrapped.UnicodeScalarLiteralType) { + self = .some(Wrapped(unicodeScalarLiteral: value)) + } +} + +extension GraphQLNullable: ExpressibleByExtendedGraphemeClusterLiteral +where Wrapped: ExpressibleByExtendedGraphemeClusterLiteral { + public init(extendedGraphemeClusterLiteral value: Wrapped.ExtendedGraphemeClusterLiteralType) { + self = .some(Wrapped(extendedGraphemeClusterLiteral: value)) + } +} + +extension GraphQLNullable: ExpressibleByStringLiteral +where Wrapped: ExpressibleByStringLiteral { + public init(stringLiteral value: Wrapped.StringLiteralType) { + self = .some(Wrapped(stringLiteral: value)) + } +} + +extension GraphQLNullable: ExpressibleByIntegerLiteral +where Wrapped: ExpressibleByIntegerLiteral { + public init(integerLiteral value: Wrapped.IntegerLiteralType) { + self = .some(Wrapped(integerLiteral: value)) + } +} + +extension GraphQLNullable: ExpressibleByFloatLiteral +where Wrapped: ExpressibleByFloatLiteral { + public init(floatLiteral value: Wrapped.FloatLiteralType) { + self = .some(Wrapped(floatLiteral: value)) + } +} + +extension GraphQLNullable: ExpressibleByBooleanLiteral +where Wrapped: ExpressibleByBooleanLiteral { + public init(booleanLiteral value: Wrapped.BooleanLiteralType) { + self = .some(Wrapped(booleanLiteral: value)) + } +} + +extension GraphQLNullable: ExpressibleByArrayLiteral +where Wrapped: _InitializableByArrayLiteralElements { + public init(arrayLiteral elements: Wrapped.ArrayLiteralElement...) { + self = .some(Wrapped(elements)) + } +} + +extension GraphQLNullable: ExpressibleByDictionaryLiteral +where Wrapped: _InitializableByDictionaryLiteralElements { + public init(dictionaryLiteral elements: (Wrapped.Key, Wrapped.Value)...) { + self = .some(Wrapped(elements)) + } +} + +public protocol _InitializableByArrayLiteralElements: ExpressibleByArrayLiteral { + init(_ array: [ArrayLiteralElement]) +} +extension Array: _InitializableByArrayLiteralElements {} + +public protocol _InitializableByDictionaryLiteralElements: ExpressibleByDictionaryLiteral { + init(_ elements: [(Key, Value)]) +} +extension Dictionary: _InitializableByDictionaryLiteralElements { + public init(_ elements: [(Key, Value)]) { + self.init(uniqueKeysWithValues: elements) + } +} + +// MARK: - Custom Type Initialization + +public extension GraphQLNullable where Wrapped: RawRepresentable, Wrapped.RawValue == String { + init(_ rawValue: String) { + self = .some(Wrapped(rawValue: rawValue)!) + } +} diff --git a/Sources/ApolloAPI/InputValue.swift b/Sources/ApolloAPI/InputValue.swift index 5b21b3888c..76d4a5cbd1 100644 --- a/Sources/ApolloAPI/InputValue.swift +++ b/Sources/ApolloAPI/InputValue.swift @@ -55,7 +55,7 @@ extension InputValueConvertible where Self: RawRepresentable, RawValue == String @inlinable public var asInputValue: InputValue { .scalar(rawValue) } } -// MARK: - Expressible as literals +// MARK: - ExpressibleBy Literal Extensions extension InputValue: ExpressibleByStringLiteral { @inlinable public init(stringLiteral value: StringLiteralType) { diff --git a/Sources/ApolloAPI/ScalarTypes.swift b/Sources/ApolloAPI/ScalarTypes.swift index 3072af2ad7..c5020a5f83 100644 --- a/Sources/ApolloAPI/ScalarTypes.swift +++ b/Sources/ApolloAPI/ScalarTypes.swift @@ -27,7 +27,8 @@ public protocol CustomScalarType: JSONDecodable, JSONEncodable, Cacheable, - OutputTypeConvertible + OutputTypeConvertible, + GraphQLOperationVariableValue { var jsonValue: Any { get } } From 110a6bf4500cc56f58fd238bc15211b7206f67de Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Tue, 15 Feb 2022 16:32:47 -0800 Subject: [PATCH 07/25] Correct OperationVariable rendering test behavior --- .../OperationDefinitionTemplateTests.swift | 6 +- ...nDefinition_VariableDefinition_Tests.swift | 274 ++++++++++++++---- 2 files changed, 218 insertions(+), 62 deletions(-) diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift index fb0be5824a..67da7fdf31 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift @@ -405,7 +405,6 @@ class OperationDefinitionTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) } - func test__generate__givenQueryWithNullableScalarVariable_generatesQueryOperationWithVariable() throws { // given schemaSDL = """ @@ -419,7 +418,7 @@ class OperationDefinitionTemplateTests: XCTestCase { """ document = """ - query TestOperation($variable: String) { + query TestOperation($variable: String = "TestVar") { allAnimals { species } @@ -430,7 +429,7 @@ class OperationDefinitionTemplateTests: XCTestCase { """ public var variable: GraphQLNullable - public init(variable: GraphQLNullable = nil) { + public init(variable: GraphQLNullable = "TestVar") { self.variable = variable } @@ -447,4 +446,5 @@ class OperationDefinitionTemplateTests: XCTestCase { // then expect(actual).to(equalLineByLine(expected, atLine: 19, ignoringExtraLines: true)) } + } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index dcc807e52e..2840c6556e 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -16,33 +16,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { super.tearDown() } - func test__renderInputValueType__givenScalar__generatesCorrectParameterAndInitializer() throws { - // given - subject = .mock("variable", type: .scalar(.string()), defaultValue: nil) - - let expected = "GraphQLNullable = nil" - - // when - let actual = subject.renderInputValueType(includeDefault: true) - - // then - expect(actual).to(equal(expected)) - } - - func test__renderInputValueType__givenIncludeDefaultFalse__generatesCorrectParameter() throws { - // given - subject = .mock("variable", type: .scalar(.string()), defaultValue: nil) - - let expected = "GraphQLNullable" - - // when - let actual = subject.renderInputValueType(includeDefault: false) - - // then - expect(actual).to(equal(expected)) - } - - func test__renderInputValueType__givenAllPossibleSchemaInputFieldTypes__generatesCorrectParametersAndInitializer() throws { + func test__renderInputValueType_includeDefaultTrue__givenAllInputFieldTypes_nilDefaultValues__generatesCorrectParametersWithoutInitializer() throws { // given let tests: [(variable: CompilationResult.VariableDefinition, expected: String)] = [ ( @@ -51,7 +25,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .scalar(.string()), defaultValue: nil ), - "GraphQLNullable = nil" + "GraphQLNullable" ), ( .mock( @@ -59,7 +33,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .scalar(.integer()), defaultValue: nil ), - "GraphQLNullable = nil" + "GraphQLNullable" ), ( .mock( @@ -67,7 +41,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .scalar(.boolean()), defaultValue: nil ), - "GraphQLNullable = nil" + "GraphQLNullable" ), ( .mock( @@ -75,7 +49,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .scalar(.float()), defaultValue: nil ), - "GraphQLNullable = nil" + "GraphQLNullable" ), ( .mock( @@ -83,7 +57,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .enum(.mock(name: "EnumValue")), defaultValue: nil ), - "GraphQLNullable> = nil" + "GraphQLNullable>" ), ( .mock( @@ -96,7 +70,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { )), defaultValue: nil ), - "GraphQLNullable = nil" + "GraphQLNullable" ), ( .mock( @@ -104,7 +78,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .list(.scalar(.string())), defaultValue: nil ), - "GraphQLNullable<[String?]> = nil" + "GraphQLNullable<[String?]>" ) ] @@ -117,13 +91,171 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { } } + func test__renderInputValueType_includeDefaultTrue__givenAllInputFieldTypes_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + // given + let tests: [(variable: CompilationResult.VariableDefinition, expected: String)] = [ + ( + .mock( + "stringField", + type: .scalar(.string()), + defaultValue: .string("Value") + ), + "GraphQLNullable = \"Value\"" + ), + ( + .mock( + "stringFieldNullDefaultValue", + type: .scalar(.string()), + defaultValue: .null + ), + "GraphQLNullable = .null" + ), + ( + .mock( + "intField", + type: .scalar(.integer()), + defaultValue: .int(300) + ), + "GraphQLNullable = 300" + ), + ( + .mock( + "boolField", + type: .scalar(.boolean()), + defaultValue: .boolean(true) + ), + "GraphQLNullable = true" + ), + ( + .mock( + "boolField", + type: .scalar(.boolean()), + defaultValue: .boolean(false) + ), + "GraphQLNullable = false" + ), + ( + .mock( + "floatField", + type: .scalar(.float()), + defaultValue: .float(12.3943) + ), + "GraphQLNullable = 12.3943" + ), + ( + .mock( + "enumField", + type: .enum(.mock(name: "EnumValue")), + defaultValue: .enum("CaseONE") + ), + "GraphQLNullable> = .init(\"CaseONE\")" + ), + ( + .mock( + "inputField", + type: .inputObject(.mock( + "InnerInputObject", + fields: [ + .mock("innerStringField", type: .scalar(.string()), defaultValue: nil) + ] + )), + defaultValue: .object(["innerStringField": .string("Value")]) + ), + """ + GraphQLNullable = ["innerStringField": "Value"] + """ + ), + ( + .mock( + "listField", + type: .list(.scalar(.string())), + defaultValue: .list([.string("1"), .string("2")]) + ), + """ + GraphQLNullable<[String?]> = ["1", "2"] + """ + ) + ] + + for test in tests { + // when + let actual = test.variable.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(test.expected)) + } + } + + func test__renderInputValueType_includeDefaultTrue__givenNestedInputObject_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + // given + subject = .mock( + "inputField", + type: .inputObject(.mock( + "InputObject", + fields: [ + .mock("innerStringField", type: .scalar(.string()), defaultValue: nil), + .mock("innerIntField", type: .scalar(.integer()), defaultValue: nil), + .mock("innerFloatField", type: .scalar(.float()), defaultValue: nil), + .mock("innerBoolField", type: .scalar(.boolean()), defaultValue: nil), + .mock("innerListField", type: .list(.scalar(.string())), defaultValue: nil), + .mock("innerEnumField", type: .enum(.mock(name: "EnumValue")), defaultValue: nil), + .mock("innerInputObject", + type: .inputObject(.mock( + "InnerInputObject", + fields: [ + .mock("innerStringField", type: .scalar(.string()), defaultValue: nil), + .mock("innerListField", type: .list(.scalar(.string())), defaultValue: nil), + .mock("innerIntField", type: .scalar(.integer()), defaultValue: nil), + .mock("innerEnumField", type: .enum(.mock(name: "EnumValue")), defaultValue: nil), + ] + )), + defaultValue: nil + ) + ] + )), + defaultValue: .object([ + "innerStringField": .string("ABCD"), + "innerIntField": .int(123), + "innerFloatField": .float(12.3456), + "innerBoolField": .boolean(true), + "innerListField": .list([.string("A"), .string("B")]), + "innerEnumField": .enum("CaseONE"), + "innerInputObject": .object([ + "innerStringField": .string("EFGH"), + "innerListField": .list([.string("C"), .string("D")]), + ]) + ]) + ) + + let expected = """ + GraphQLNullable = [ + "innerStringField": "ABCD", + "innerIntField": 123, + "innerFloatField": 12.3456, + "innerBoolField": true, + "innerListField": ["A", "B"], + "innerEnumField": GraphQLEnum("CaseONE"), + "innerInputObject": [ + "innerStringField": "EFGH", + "innerListField": ["C", "D"], + ] + ] + """ + + // when + let actual = subject.renderInputValueType(includeDefault: true) + + // then + expect(actual).to(equal(expected)) + } + // MARK: Nullable Field Tests - func test__renderInputValueType__given_NullableField_NoDefault__generates_NullableParameter_InitializerNilDefault() throws { + func test__renderInputValueType__given_NullableField_NoDefault__generates_NullableParameter_Initializer() throws { // given subject = .mock("nullable", type: .scalar(.integer()), defaultValue: nil) - let expected = "GraphQLNullable = nil" + let expected = "GraphQLNullable" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -136,7 +268,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { // given subject = .mock("nullableWithDefault", type: .scalar(.integer()), defaultValue: .int(3)) - let expected = "GraphQLNullable" + let expected = "GraphQLNullable = 3" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -145,6 +277,20 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } + func test__renderInputValueType_includeDefaultFalse_givenDefaultValue_generatesCorrectParameterNoInitializerDefault() throws { + // given + subject = .mock("variable", type: .scalar(.string()), defaultValue: .string("Value")) + + let expected = "GraphQLNullable" + + // when + let actual = subject.renderInputValueType(includeDefault: false) + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NonNullableField_NoDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { // given subject = .mock("nonNullable", type: .nonNull(.scalar(.integer())), defaultValue: nil) @@ -158,11 +304,11 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableField_WithDefault__generates_OptionalParameter_NoInitializerDefault() throws { + func test__renderInputValueType__given_NonNullableField_WithDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { // given subject = .mock("nonNullableWithDefault", type: .nonNull(.scalar(.integer())), defaultValue: .int(3)) - let expected = "Int?" + let expected = "Int = 3" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -171,11 +317,11 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NullableItem_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { + func test__renderInputValueType__given_NullableList_NullableItem_NoDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { // given subject = .mock("nullableListNullableItem", type: .list(.scalar(.string())), defaultValue: nil) - let expected = "GraphQLNullable<[String?]> = nil" + let expected = "GraphQLNullable<[String?]>" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -184,11 +330,13 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { + func test__renderInputValueType__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_WithInitializerDefault() throws { // given - subject = .mock("nullableListNullableItemWithDefault", type: .list(.scalar(.string())), defaultValue: .string("val")) + subject = .mock("nullableListNullableItemWithDefault", + type: .list(.scalar(.string())), + defaultValue: .list([.string("val")])) - let expected = "GraphQLNullable<[String?]>" + let expected = "GraphQLNullable<[String?]> = [\"val\"]" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -197,11 +345,13 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NonNullableItem_NoDefault__generates_NullableParameter_NonOptionalItem_InitializerNilDefault() throws { + func test__renderInputValueType__given_NullableList_NonNullableItem_NoDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { // given - subject = .mock("nullableListNonNullableItem", type: .list(.nonNull(.scalar(.string()))), defaultValue: nil) + subject = .mock("nullableListNonNullableItem", + type: .list(.nonNull(.scalar(.string()))), + defaultValue: nil) - let expected = "GraphQLNullable<[String]> = nil" + let expected = "GraphQLNullable<[String]>" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -210,11 +360,11 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { + func test__renderInputValueType__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_WithInitializerDefault() throws { // given - subject = .mock("nullableListNonNullableItemWithDefault", type: .list(.nonNull(.scalar(.string()))), defaultValue: .string("val")) + subject = .mock("nullableListNonNullableItemWithDefault", type: .list(.nonNull(.scalar(.string()))), defaultValue: .list([.string("val")])) - let expected = "GraphQLNullable<[String]>" + let expected = "GraphQLNullable<[String]> = [\"val\"]" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -236,11 +386,13 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_NoInitializerDefault() throws { + func test__renderInputValueType__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_WithInitializerDefault() throws { // given - subject = .mock("nonNullableListNullableItemWithDefault", type: .nonNull(.list(.scalar(.string()))), defaultValue: .string("val")) + subject = .mock("nonNullableListNullableItemWithDefault", + type: .nonNull(.list(.scalar(.string()))), + defaultValue: .list([.string("val")])) - let expected = "[String?]?" + let expected = "[String?]? = [\"val\"]" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -251,7 +403,9 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { func test__renderInputValueType__given_NonNullableList_NonNullableItem_NoDefault__generates_NonNullableNonOptionalParameter_NonOptionalItem_NoInitializerDefault() throws { // given - subject = .mock("nonNullableListNonNullableItem", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: nil) + subject = .mock("nonNullableListNonNullableItem", + type: .nonNull(.list(.nonNull(.scalar(.string())))), + defaultValue: nil) let expected = "[String]" @@ -262,11 +416,13 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_NoInitializerDefault() throws { + func test__renderInputValueType__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_WithInitializerDefault() throws { // given - subject = .mock("nonNullableListNonNullableItemWithDefault", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: .string("val")) + subject = .mock("nonNullableListNonNullableItemWithDefault", + type: .nonNull(.list(.nonNull(.scalar(.string())))), + defaultValue: .list([.string("val")])) - let expected = "[String]?" + let expected = "[String]? = [\"val\"]" // when let actual = subject.renderInputValueType(includeDefault: true) @@ -275,13 +431,13 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { + func test__renderInputValueType__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_NoInitializerNilDefault() throws { // given subject = .mock("nullableListNullableItem", type: .list(.enum(.mock(name: "EnumValue"))), defaultValue: nil) - let expected = "GraphQLNullable<[GraphQLEnum?]> = nil" + let expected = "GraphQLNullable<[GraphQLEnum?]>" // when let actual = subject.renderInputValueType(includeDefault: true) From 14a098979dc41a2e616229dd39710bf40ba5e8ad Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Tue, 15 Feb 2022 17:42:27 -0800 Subject: [PATCH 08/25] WIP: Implementing rendering --- Apollo.xcodeproj/project.pbxproj | 24 +++++--- Sources/ApolloCodegenLib/TemplateString.swift | 8 ++- ...swift => GraphQLInputField+Rendered.swift} | 19 +------ .../GraphQLNamedType+SwiftName.swift} | 0 .../GraphQLType+Rendered.swift | 4 ++ .../GraphQLValue+Rendered.swift | 29 ++++++++++ ...OperationVariableDefinition+Rendered.swift | 12 ++++ ...nDefinition_VariableDefinition_Tests.swift | 57 ++++++++++++------- 8 files changed, 104 insertions(+), 49 deletions(-) rename Sources/ApolloCodegenLib/Templates/RenderingHelpers/{InputValueRenderable.swift => GraphQLInputField+Rendered.swift} (64%) rename Sources/ApolloCodegenLib/{GraphQLNamedType+Swift.swift => Templates/RenderingHelpers/GraphQLNamedType+SwiftName.swift} (100%) create mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift create mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 5c283b493c..8aea691588 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -258,8 +258,10 @@ DE674D9F261CEEE4000E8FC8 /* a.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9B2061192591B3550020D1E0 /* a.txt */; }; DE6B15AF26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6B15AE26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift */; }; DE6B15B126152BE10068D642 /* Apollo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FC750441D2A532C00458D91 /* Apollo.framework */; }; - DE6D07F927BC3B6D009F5F33 /* InputValueRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* InputValueRenderable.swift */; }; + DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */; }; DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; + DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */; }; + DE6D080127BC802D009F5F33 /* GraphQLValue+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */; }; DE736F4626FA6EE6007187F2 /* InflectorKit in Frameworks */ = {isa = PBXBuildFile; productRef = E6E4209126A7DF4200B82624 /* InflectorKit */; }; DE796429276998B000978A03 /* IR+RootFieldBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */; }; DE79642B276999E700978A03 /* IRNamedFragmentBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */; }; @@ -356,7 +358,7 @@ E623FD2A2797A6F4008B4CED /* InterfaceTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E623FD292797A6F4008B4CED /* InterfaceTemplate.swift */; }; E64F7EB827A0854E0059C021 /* UnionTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64F7EB727A0854E0059C021 /* UnionTemplate.swift */; }; E64F7EBA27A085D90059C021 /* UnionTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64F7EB927A085D90059C021 /* UnionTemplateTests.swift */; }; - E64F7EBC27A11A510059C021 /* GraphQLNamedType+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64F7EBB27A11A510059C021 /* GraphQLNamedType+Swift.swift */; }; + E64F7EBC27A11A510059C021 /* GraphQLNamedType+SwiftName.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64F7EBB27A11A510059C021 /* GraphQLNamedType+SwiftName.swift */; }; E64F7EBF27A11B110059C021 /* GraphQLNamedType+SwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64F7EBE27A11B110059C021 /* GraphQLNamedType+SwiftTests.swift */; }; E64F7EC127A122300059C021 /* ObjectTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64F7EC027A122300059C021 /* ObjectTemplate.swift */; }; E657CDBA26FD01D4005834D6 /* ApolloSchemaInternalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E657CDB926FD01D4005834D6 /* ApolloSchemaInternalTests.swift */; }; @@ -983,8 +985,10 @@ DE6B160B26152D210068D642 /* Project-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Debug.xcconfig"; sourceTree = ""; }; DE6B160C26152D210068D642 /* Workspace-Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Packaging.xcconfig"; sourceTree = ""; }; DE6B160D26152D210068D642 /* Workspace-Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Shared.xcconfig"; sourceTree = ""; }; - DE6D07F827BC3B6D009F5F33 /* InputValueRenderable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputValueRenderable.swift; sourceTree = ""; }; + DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLInputField+Rendered.swift"; sourceTree = ""; }; DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationDefinition_VariableDefinition_Tests.swift; sourceTree = ""; }; + DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OperationVariableDefinition+Rendered.swift"; sourceTree = ""; }; + DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLValue+Rendered.swift"; sourceTree = ""; }; DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+RootFieldBuilder.swift"; sourceTree = ""; }; DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IRNamedFragmentBuilderTests.swift; sourceTree = ""; }; DE79642C27699A6A00978A03 /* IR+NamedFragmentBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+NamedFragmentBuilder.swift"; sourceTree = ""; }; @@ -1060,7 +1064,7 @@ E623FD2B2797A700008B4CED /* InterfaceTemplateTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InterfaceTemplateTests.swift; sourceTree = ""; }; E64F7EB727A0854E0059C021 /* UnionTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnionTemplate.swift; sourceTree = ""; }; E64F7EB927A085D90059C021 /* UnionTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnionTemplateTests.swift; sourceTree = ""; }; - E64F7EBB27A11A510059C021 /* GraphQLNamedType+Swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLNamedType+Swift.swift"; sourceTree = ""; }; + E64F7EBB27A11A510059C021 /* GraphQLNamedType+SwiftName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLNamedType+SwiftName.swift"; sourceTree = ""; }; E64F7EBE27A11B110059C021 /* GraphQLNamedType+SwiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLNamedType+SwiftTests.swift"; sourceTree = ""; }; E64F7EC027A122300059C021 /* ObjectTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectTemplate.swift; sourceTree = ""; }; E64F7EC227A1243A0059C021 /* ObjectTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectTemplateTests.swift; sourceTree = ""; }; @@ -1572,7 +1576,6 @@ 9B7B6F68233C2C0C00F32205 /* FileManager+Apollo.swift */, 9BAEEBF62346F0A000808306 /* StaticString+Apollo.swift */, 9B8C3FB1248DA2EA00707B13 /* URL+Apollo.swift */, - E64F7EBB27A11A510059C021 /* GraphQLNamedType+Swift.swift */, ); name = Extensions; sourceTree = ""; @@ -2157,8 +2160,11 @@ DE6D07FC27BC3C81009F5F33 /* RenderingHelpers */ = { isa = PBXGroup; children = ( + E64F7EBB27A11A510059C021 /* GraphQLNamedType+SwiftName.swift */, DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, - DE6D07F827BC3B6D009F5F33 /* InputValueRenderable.swift */, + DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */, + DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */, + DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */, ); path = RenderingHelpers; sourceTree = ""; @@ -3149,6 +3155,7 @@ E66F8899276C15580000BDA8 /* ObjectFileGenerator.swift in Sources */, 9BAEEBEF2346644B00808306 /* ApolloSchemaDownloader.swift in Sources */, DE5FD601276923620033EE23 /* TemplateString.swift in Sources */, + DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */, DE796429276998B000978A03 /* IR+RootFieldBuilder.swift in Sources */, E64F7EC127A122300059C021 /* ObjectTemplate.swift in Sources */, 9F1A966F258F34BB00A06EEB /* JavaScriptBridge.swift in Sources */, @@ -3176,6 +3183,7 @@ E6D90D0B278FFDDA009CAC5D /* SchemaFileGenerator.swift in Sources */, DE7C183C272A12EB00727031 /* TypeScopeDescriptor.swift in Sources */, DE7C183E272A154400727031 /* IR.swift in Sources */, + DE6D080127BC802D009F5F33 /* GraphQLValue+Rendered.swift in Sources */, 9F628E9525935BE600F94F9D /* GraphQLType.swift in Sources */, 9BFE8DA9265D5D8F000BBF81 /* URLDownloader.swift in Sources */, E6C9849327929EBE009481BE /* EnumTemplate.swift in Sources */, @@ -3185,11 +3193,11 @@ E610D8DB278EB0900023E495 /* InterfaceFileGenerator.swift in Sources */, 9B7B6F69233C2C0C00F32205 /* FileManager+Apollo.swift in Sources */, E674DB41274C0A9B009BB90E /* Glob.swift in Sources */, - DE6D07F927BC3B6D009F5F33 /* InputValueRenderable.swift in Sources */, + DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */, DE5B318F27A48E060051C9D3 /* ImportStatementTemplate.swift in Sources */, 9F1A966C258F34BB00A06EEB /* GraphQLSchema.swift in Sources */, 9BE74D3D23FB4A8E006D354F /* FileFinder.swift in Sources */, - E64F7EBC27A11A510059C021 /* GraphQLNamedType+Swift.swift in Sources */, + E64F7EBC27A11A510059C021 /* GraphQLNamedType+SwiftName.swift in Sources */, 9B7B6F59233C287200F32205 /* ApolloCodegen.swift in Sources */, E608FBA527B1EFDF00493756 /* HeaderCommentTemplate.swift in Sources */, DE2739112769AEBA00B886EF /* SelectionSetTemplate.swift in Sources */, diff --git a/Sources/ApolloCodegenLib/TemplateString.swift b/Sources/ApolloCodegenLib/TemplateString.swift index 20be1d3122..1c811564d5 100644 --- a/Sources/ApolloCodegenLib/TemplateString.swift +++ b/Sources/ApolloCodegenLib/TemplateString.swift @@ -5,11 +5,15 @@ struct TemplateString: ExpressibleByStringInterpolation, CustomStringConvertible private let value: String private let lastLineWasRemoved: Bool - init(stringLiteral: String) { - self.value = stringLiteral + init(_ string: String) { + self.value = string lastLineWasRemoved = false } + init(stringLiteral: String) { + self.init(stringLiteral) + } + init(stringInterpolation: StringInterpolation) { self.value = stringInterpolation.output self.lastLineWasRemoved = stringInterpolation.lastLineWasRemoved diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift similarity index 64% rename from Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift rename to Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift index e2e7239142..ca52721267 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputValueRenderable.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift @@ -1,12 +1,6 @@ import JavaScriptCore -protocol InputValueRenderable { - var name: String { get } - var type: GraphQLType { get } - var hasDefaultValue: Bool { get } -} - -extension InputValueRenderable { +extension GraphQLInputField { func renderInputValueType(includeDefault: Bool = false) -> String { "\(type.renderAsInputValue())\(isSwiftOptional ? "?" : "")\(includeDefault && hasSwiftNilDefault ? " = nil" : "")" } @@ -25,9 +19,7 @@ extension InputValueRenderable { default: return true } } -} -extension GraphQLInputField: InputValueRenderable { var hasDefaultValue: Bool { switch defaultValue { case .none, .some(nil): @@ -41,12 +33,3 @@ extension GraphQLInputField: InputValueRenderable { } } } - -extension CompilationResult.VariableDefinition: InputValueRenderable { - var hasDefaultValue: Bool { - switch defaultValue { - case .none, .some(nil), .some(.null): return false - default: return true - } - } -} diff --git a/Sources/ApolloCodegenLib/GraphQLNamedType+Swift.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLNamedType+SwiftName.swift similarity index 100% rename from Sources/ApolloCodegenLib/GraphQLNamedType+Swift.swift rename to Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLNamedType+SwiftName.swift diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift index 7843b5dd16..a1402ee4dc 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLType+Rendered.swift @@ -38,6 +38,10 @@ extension GraphQLType { // MARK: Input Value + /// Renders the type for use as an input value. + /// + /// If the outermost type is nullable, it will be wrapped in a `GraphQLNullable` instead of + /// an `Optional`. func renderAsInputValue() -> String { return renderAsInputValue(inNullable: true) } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift new file mode 100644 index 0000000000..369482ec7d --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift @@ -0,0 +1,29 @@ +extension GraphQLValue { + var renderedAsVariableDefaultValue: TemplateString { + switch self { + case .null: return ".null" + case let .enum(enumValue): return ".init(\"\(enumValue)\")" + default: return renderedAsInputValueLiteral + } + } + + var renderedAsInputValueLiteral: TemplateString { + switch self { + case let .string(string): return "\"\(string)\"" + case let .boolean(boolean): return boolean ? "true" : "false" + case let .int(int): return TemplateString(int.description) + case let .float(float): return TemplateString(float.description) + case let .enum(enumValue): return "GraphQLEnum(\"\(enumValue)\")" + case .null: return "nil" + case let .list(list): + return "[\(list.map(\.renderedAsInputValueLiteral), separator: ", ")]" + + case let .object(object): + return "[\(list: object.map{"\"\($0.0)\": \($0.1.renderedAsInputValueLiteral)"})]" + + case .variable: + preconditionFailure("Variable cannot be used as Default Value for an Operation Variable!") + } + } + +} diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift new file mode 100644 index 0000000000..0b61ee7432 --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift @@ -0,0 +1,12 @@ +extension CompilationResult.VariableDefinition { + func renderInputValueType(includeDefault: Bool = false) -> TemplateString { + "\(type.renderAsInputValue())\(ifLet: defaultValue, where: {_ in includeDefault}, {" = \($0.renderedAsVariableDefaultValue)"})" + } + + var hasDefaultValue: Bool { + switch defaultValue { + case .none, .some(nil): return false + default: return true + } + } +} diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index 2840c6556e..87b44378c6 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -84,7 +84,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { for test in tests { // when - let actual = test.variable.renderInputValueType(includeDefault: true) + let actual = test.variable.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(test.expected)) @@ -179,7 +179,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { for test in tests { // when - let actual = test.variable.renderInputValueType(includeDefault: true) + let actual = test.variable.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(test.expected)) @@ -243,10 +243,10 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { """ // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then - expect(actual).to(equal(expected)) + expect(actual).to(equalLineByLine(expected)) } // MARK: Nullable Field Tests @@ -258,7 +258,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -271,7 +271,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable = 3" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -284,7 +284,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable" // when - let actual = subject.renderInputValueType(includeDefault: false) + let actual = subject.renderInputValueType(includeDefault: false).description // then expect(actual).to(equal(expected)) @@ -298,20 +298,20 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "Int" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableField_WithDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { + func test__renderInputValueType__given_NonNullableField_WithDefault__generates_NonNullableNonOptionalParameter_WithInitializerDefault() throws { // given subject = .mock("nonNullableWithDefault", type: .nonNull(.scalar(.integer())), defaultValue: .int(3)) let expected = "Int = 3" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -324,7 +324,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable<[String?]>" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -339,7 +339,22 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable<[String?]> = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description + + // then + expect(actual).to(equal(expected)) + } + + func test__renderInputValueType__given_NullableList_NullableItem_WithDefault_includingNullElement_generates_NullableParameter_OptionalItem_WithInitializerDefault() throws { + // given + subject = .mock("nullableListNullableItemWithDefault", + type: .list(.scalar(.string())), + defaultValue: .list([.string("val"), .null])) + + let expected = "GraphQLNullable<[String?]> = [\"val\", nil]" + + // when + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -354,7 +369,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable<[String]>" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -367,7 +382,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable<[String]> = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -380,7 +395,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "[String?]" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -392,10 +407,10 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .nonNull(.list(.scalar(.string()))), defaultValue: .list([.string("val")])) - let expected = "[String?]? = [\"val\"]" + let expected = "[String?] = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -410,7 +425,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "[String]" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -422,10 +437,10 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: .list([.string("val")])) - let expected = "[String]? = [\"val\"]" + let expected = "[String] = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) @@ -440,7 +455,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { let expected = "GraphQLNullable<[GraphQLEnum?]>" // when - let actual = subject.renderInputValueType(includeDefault: true) + let actual = subject.renderInputValueType(includeDefault: true).description // then expect(actual).to(equal(expected)) From fedc884a9365efa9d9cf5d517fa23b8e886f27d3 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Wed, 16 Feb 2022 12:22:49 -0800 Subject: [PATCH 09/25] Fix template string indentation --- .../Frontend/GraphQLValue.swift | 3 +- Sources/ApolloCodegenLib/TemplateString.swift | 33 +++++++++++-------- ...OperationVariableDefinition+Rendered.swift | 2 +- ...nDefinition_VariableDefinition_Tests.swift | 2 +- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Sources/ApolloCodegenLib/Frontend/GraphQLValue.swift b/Sources/ApolloCodegenLib/Frontend/GraphQLValue.swift index 533c7fb0b2..c22fb4a145 100644 --- a/Sources/ApolloCodegenLib/Frontend/GraphQLValue.swift +++ b/Sources/ApolloCodegenLib/Frontend/GraphQLValue.swift @@ -1,5 +1,6 @@ import Foundation import JavaScriptCore +import OrderedCollections indirect enum GraphQLValue: Hashable { case variable(String) @@ -10,7 +11,7 @@ indirect enum GraphQLValue: Hashable { case null case `enum`(String) case list([GraphQLValue]) - case object([String: GraphQLValue]) + case object(OrderedDictionary) } extension GraphQLValue: JavaScriptValueDecodable { diff --git a/Sources/ApolloCodegenLib/TemplateString.swift b/Sources/ApolloCodegenLib/TemplateString.swift index 1c811564d5..f70751d256 100644 --- a/Sources/ApolloCodegenLib/TemplateString.swift +++ b/Sources/ApolloCodegenLib/TemplateString.swift @@ -132,18 +132,6 @@ struct TemplateString: ExpressibleByStringInterpolation, CustomStringConvertible } } - private mutating func removeLineIfEmpty() { - let slice = substringToStartOfLine() - if slice.allSatisfy(\.isWhitespace) { - buffer.removeLast(slice.count) - lastLineWasRemoved = true - } - } - - private func substringToStartOfLine() -> Slice> { - return buffer.reversed().prefix { !$0.isNewline } - } - mutating func appendInterpolation( ifLet optional: Optional, where whereBlock: ((T) -> Bool)? = nil, @@ -153,13 +141,32 @@ struct TemplateString: ExpressibleByStringInterpolation, CustomStringConvertible if let element = optional, whereBlock?(element) ?? true { appendInterpolation(includeBlock(element)) } else if let elseTemplate = `else` { - appendInterpolation(elseTemplate.value) + appendInterpolation(elseTemplate.description) } else { removeLineIfEmpty() } } + private mutating func removeLineIfEmpty() { + let slice = substringToStartOfLine() + if slice.allSatisfy(\.isWhitespace) { + buffer.removeLast(slice.count) + lastLineWasRemoved = true + } + } + + private func substringToStartOfLine() -> Slice> { + return buffer.reversed().prefix { !$0.isNewline } + } + } + +} + +/// Can be used to concatenate a `TemplateString` and `String` directly. +/// This bypasses `TemplateString` interpolation logic such as indentation calculation. +func +(lhs: String, rhs: TemplateString) -> TemplateString { + TemplateString(lhs + rhs.description) } fileprivate extension Array where Element == Substring { diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift index 0b61ee7432..4980099875 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift @@ -1,6 +1,6 @@ extension CompilationResult.VariableDefinition { func renderInputValueType(includeDefault: Bool = false) -> TemplateString { - "\(type.renderAsInputValue())\(ifLet: defaultValue, where: {_ in includeDefault}, {" = \($0.renderedAsVariableDefaultValue)"})" + "\(type.renderAsInputValue())\(ifLet: defaultValue, where: {_ in includeDefault}, {" = " + $0.renderedAsVariableDefaultValue})" } var hasDefaultValue: Bool { diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index 87b44378c6..ba41e5ae43 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -237,7 +237,7 @@ class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { "innerEnumField": GraphQLEnum("CaseONE"), "innerInputObject": [ "innerStringField": "EFGH", - "innerListField": ["C", "D"], + "innerListField": ["C", "D"] ] ] """ From 3c2c08caa06b1ff6d6c7752c43c272936b2727da Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Wed, 16 Feb 2022 13:35:07 -0800 Subject: [PATCH 10/25] Add operation variable default values to CompilationResult --- .../ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts | 2 ++ .../Frontend/dist/ApolloCodegenFrontend.bundle.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts index 89b77f04e3..e719fda07f 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts @@ -113,6 +113,7 @@ export function compileToIR( const variables = (operationDefinition.variableDefinitions || []).map( (node) => { const name = node.variable.name.value; + const defaultValue = node.defaultValue ? valueFromValueNode(node.defaultValue) : undefined // The casts are a workaround for the lack of support for passing a type union // to overloaded functions in TypeScript. @@ -133,6 +134,7 @@ export function compileToIR( return { name, type, + defaultValue }; } ); diff --git a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js index c5c84d92d5..87a1bc8e03 100644 --- a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js +++ b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js @@ -1 +1 @@ -var ApolloCodegenFrontend=function(e){"use strict";function t(e,t){if(!Boolean(e))throw new Error(t)}function n(e){return"object"==typeof e&&null!==e}function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}const i=/\r\n|[\n\r]/g;function o(e,t){let n=0,o=1;for(const s of e.body.matchAll(i)){if("number"==typeof s.index||r(!1),s.index>=t)break;n=s.index+s[0].length,o+=1}return{line:o,column:t+1-n}}function s(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${s}:${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+a([[s-1+" |",p[i-1]],[`${s} |`,d],["|","^".padStart(u)],[`${s+1} |`,p[i+1]]])}function a(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,...t){var r,i,s;const{nodes:a,source:u,positions:l,path:p,originalError:d,extensions:f}=function(e){const t=e[0];return null==t||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}(t);super(e),this.name="GraphQLError",this.path=null!=p?p:void 0,this.originalError=null!=d?d:void 0,this.nodes=c(Array.isArray(a)?a:a?[a]:void 0);const h=c(null===(r=this.nodes)||void 0===r?void 0:r.map((e=>e.loc)).filter((e=>null!=e)));this.source=null!=u?u:null==h||null===(i=h[0])||void 0===i?void 0:i.source,this.positions=null!=l?l:null==h?void 0:h.map((e=>e.start)),this.locations=l&&u?l.map((e=>o(u,e))):null==h?void 0:h.map((e=>o(e.source,e.start)));const m=n(null==d?void 0:d.extensions)?null==d?void 0:d.extensions:void 0;this.extensions=null!==(s=null!=f?f:m)&&void 0!==s?s: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!=d&&d.stack?Object.defineProperty(this,"stack",{value:d.stack,writable:!0,configurable:!0}):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"+s((t=n.loc).source,o(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+s(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 c(e){return void 0===e||0===e.length?void 0:e}function u(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,void 0,e,[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 l={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],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"]},p=new Set(Object.keys(l));function d(e){const t=null==e?void 0:e.kind;return"string"==typeof t&&p.has(t)}let f,h,m,v;function y(e){return 9===e||32===e}function E(e){return e>=48&&e<=57}function T(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return T(e)||95===e}function I(e){return T(e)||E(e)||95===e}function g(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let t=0;t0===t?e:e.slice(n))).slice(null!==(t=r)&&void 0!==t?t:0,i+1)}function _(e){let t=0;for(;t",e.EOF="",e.BANG="!",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"}(v||(v={}));class Lexer{constructor(e){const t=new Token(v.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!==v.EOF)do{if(e.next)e=e.next;else{const t=x(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function A(e){return e>=56320&&e<=57343}function D(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return v.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 x(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 u(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function V(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const c=[];for(;o2)return"[Array]";const n=Math.min(10,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>2)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+": "+B(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const Y=function(e,t){return e instanceof t};class Source{constructor(e,n="GraphQL request",r={line:1,column:1}){"string"==typeof e||t(!1,`Body must be a string. Received: ${P(e)}.`),this.body=e,this.name=n,this.locationOffset=r,this.locationOffset.line>0||t(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||t(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function J(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t){const n=function(e){return Y(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t}parseName(){const e=this.expectToken(v.NAME);return this.node(e,{kind:m.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:m.DOCUMENT,definitions:this.many(v.SOF,this.parseDefinition,v.EOF)})}parseDefinition(){if(this.peek(v.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===v.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 u(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(v.BRACE_L))return this.node(e,{kind:m.OPERATION_DEFINITION,operation:f.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(v.NAME)&&(n=this.parseName()),this.node(e,{kind:m.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(v.NAME);switch(e.value){case"query":return f.QUERY;case"mutation":return f.MUTATION;case"subscription":return f.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(v.PAREN_L,this.parseVariableDefinition,v.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:m.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(v.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(v.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(v.DOLLAR),this.node(e,{kind:m.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:m.SELECTION_SET,selections:this.many(v.BRACE_L,this.parseSelection,v.BRACE_R)})}parseSelection(){return this.peek(v.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(v.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:m.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(v.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(v.PAREN_L,t,v.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(v.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(v.NAME)?this.node(e,{kind:m.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:m.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){var e;const t=this._lexer.token;return this.expectKeyword("fragment"),!0===(null===(e=this._options)||void 0===e?void 0:e.allowLegacyFragmentVariables)?this.node(t,{kind:m.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:m.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 v.BRACKET_L:return this.parseList(e);case v.BRACE_L:return this.parseObject(e);case v.INT:return this._lexer.advance(),this.node(t,{kind:m.INT,value:t.value});case v.FLOAT:return this._lexer.advance(),this.node(t,{kind:m.FLOAT,value:t.value});case v.STRING:case v.BLOCK_STRING:return this.parseStringLiteral();case v.NAME:switch(this._lexer.advance(),t.value){case"true":return this.node(t,{kind:m.BOOLEAN,value:!0});case"false":return this.node(t,{kind:m.BOOLEAN,value:!1});case"null":return this.node(t,{kind:m.NULL});default:return this.node(t,{kind:m.ENUM,value:t.value})}case v.DOLLAR:if(e){if(this.expectToken(v.DOLLAR),this._lexer.token.kind===v.NAME){const e=this._lexer.token.value;throw u(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._lexer.advance(),this.node(e,{kind:m.STRING,value:e.value,block:e.kind===v.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:m.LIST,values:this.any(v.BRACKET_L,(()=>this.parseValueLiteral(e)),v.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:m.OBJECT,fields:this.any(v.BRACE_L,(()=>this.parseObjectField(e)),v.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(v.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(v.AT),this.node(t,{kind:m.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(v.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(v.BRACKET_R),t=this.node(e,{kind:m.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(v.BANG)?this.node(e,{kind:m.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:m.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(v.STRING)||this.peek(v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);return this.node(e,{kind:m.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(v.COLON);const n=this.parseNamedType();return this.node(e,{kind:m.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:m.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:m.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(v.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseFieldDefinition,v.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(v.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:m.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(v.PAREN_L,this.parseInputValueDef,v.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(v.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(v.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:m.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:m.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:m.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(v.EQUALS)?this.delimitedMany(v.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:m.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(v.BRACE_L,this.parseEnumValueDefinition,v.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:m.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 u(this._lexer.source,this._lexer.token.start,`${q(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:m.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseInputValueDef,v.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:m.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:m.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:m.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:m.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:m.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:m.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:m.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(v.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:m.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(v.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.prototype.hasOwnProperty.call(h,t.value))return t;throw this.unexpected(e)}node(e,t){var n;return!0!==(null===(n=this._options)||void 0===n?void 0:n.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._lexer.advance(),t;throw u(this._lexer.source,t.start,`Expected ${X(e)}, found ${q(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this._lexer.advance(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==v.NAME||t.value!==e)throw u(this._lexer.source,t.start,`Expected "${e}", found ${q(t)}.`);this._lexer.advance()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===v.NAME&&t.value===e&&(this._lexer.advance(),!0)}unexpected(e){const t=null!=e?e:this._lexer.token;return u(this._lexer.source,t.start,`Unexpected ${q(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}}function q(e){const t=e.value;return X(e.kind)+(null!=t?` "${t}"`:"")}function X(e){return function(e){return e===v.BANG||e===v.DOLLAR||e===v.AMP||e===v.PAREN_L||e===v.PAREN_R||e===v.SPREAD||e===v.COLON||e===v.EQUALS||e===v.AT||e===v.BRACKET_L||e===v.BRACKET_R||e===v.BRACE_L||e===v.PIPE||e===v.BRACE_R}(e)?`"${e}"`:e}function K(e,t){const[n,r]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const o=r.map((e=>`"${e}"`));switch(o.length){case 0:return"";case 1:return i+o[0]+"?";case 2:return i+o[0]+" or "+o[1]+"?"}const s=o.slice(0,5),a=s.pop();return i+s.join(", ")+", or "+a+"?"}function z(e){return e}function H(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}function W(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function Z(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function ee(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-te,o=t.charCodeAt(r)}while(ne(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const te=48;function ne(e){return!isNaN(e)&&te<=e&&e<=57}function re(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:ee(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=ie(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=ie(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 ie(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>me(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=ye("(",me(e.variableDefinitions,", "),")"),n=me([e.operation,me([e.name,t]),me(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+ye(" = ",n)+ye(" ",me(r," "))},SelectionSet:{leave:({selections:e})=>ve(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){const o=ye("",e,": ")+t;let s=o+ye("(",me(n,", "),")");return s.length>80&&(s=o+ye("(\n",Ee(me(n,"\n")),"\n)")),me([s,me(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+ye(" ",me(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>me(["...",ye("on ",e),me(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${ye("(",me(n,", "),")")} on ${t} ${ye("",me(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?function(e,t){const n=e.replace(/"""/g,'\\"""'),r=n.split(/\r\n|[\n\r]/g),i=1===r.length,o=r.length>1&&r.slice(1).every((e=>0===e.length||y(e.charCodeAt(0)))),s=n.endsWith('\\"""'),a=e.endsWith('"')&&!s,c=e.endsWith("\\"),u=a||c,l=!(null!=t&&t.minimize)&&(!i||e.length>70||u||o||s);let p="";const d=i&&y(e.charCodeAt(0));return(l&&!d||o)&&(p+="\n"),p+=n,(l||u)&&(p+="\n"),'"""'+p+'"""'}(e):`"${e.replace(se,ae)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+me(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+me(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+ye("(",me(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>ye("",e,"\n")+me(["schema",me(t," "),ve(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me(["scalar",t,me(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["type",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>ye("",e,"\n")+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+": "+r+ye(" ",me(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>ye("",e,"\n")+me([t+": "+n,ye("= ",r),me(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["interface",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>ye("",e,"\n")+me(["union",t,me(n," "),ye("= ",me(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>ye("",e,"\n")+me(["enum",t,me(n," "),ve(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me([t,me(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>ye("",e,"\n")+me(["input",t,me(n," "),ve(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>ye("",e,"\n")+"directive @"+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+(r?" repeatable":"")+" on "+me(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>me(["extend schema",me(e," "),ve(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>me(["extend scalar",e,me(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend type",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend interface",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>me(["extend union",e,me(t," "),ye("= ",me(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>me(["extend enum",e,me(t," "),ve(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>me(["extend input",e,me(t," "),ve(n)]," ")}};function me(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function ve(e){return ye("{\n",Ee(me(e,"\n")),"\n}")}function ye(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Ee(e){return ye(" ",e.replace(/\n/g,"\n "))}function Te(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}function Ne(e,t){switch(e.kind){case m.NULL:return null;case m.INT:return parseInt(e.value,10);case m.FLOAT:return parseFloat(e.value);case m.STRING:case m.ENUM:case m.BOOLEAN:return e.value;case m.LIST:return e.values.map((e=>Ne(e,t)));case m.OBJECT:return W(e.fields,(e=>e.name.value),(e=>Ne(e.value,t)));case m.VARIABLE:return null==t?void 0:t[e.name.value]}}function Ie(e){if(null!=e||t(!1,"Must provide name."),"string"==typeof e||t(!1,"Expected name to be a string."),0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;ts(Ne(e,t)),this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(o=e.extensionASTNodes)&&void 0!==o?o:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||t(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${P(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||t(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||t(!1,`${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){var n;this.name=Ie(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=()=>Ye(e),this._interfaces=()=>Be(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||t(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${P(e.isTypeOf)}.`)}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:Xe(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Be(e){var n;const r=Me(null!==(n=e.interfaces)&&void 0!==n?n:[]);return Array.isArray(r)||t(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),r}function Ye(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>{var i;qe(n)||t(!1,`${e.name}.${r} field config must be an object.`),null==n.resolve||"function"==typeof n.resolve||t(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${P(n.resolve)}.`);const o=null!==(i=n.args)&&void 0!==i?i:{};return qe(o)||t(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:Ie(r),description:n.description,type:n.type,args:Je(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function Je(e){return Object.entries(e).map((([e,t])=>({name:Ie(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:oe(t.extensions),astNode:t.astNode})))}function qe(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:Ke(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function Ke(e){return W(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(e){return xe(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=Ye.bind(void 0,e),this._interfaces=Be.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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:Xe(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){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._types=He.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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 He(e){const n=Me(e.types);return Array.isArray(n)||t(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),n}class GraphQLEnumType{constructor(e){var n,r,i;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._values=(r=this.name,qe(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(qe(n)||t(!1,`${r}.${e} must refer to an object with a "value" key representing an internal value but got: ${P(n)}.`),{name:ge(e),description:n.description,value:void 0!==n.value?n.value:e,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=H(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${P(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=P(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+We(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+We(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.ENUM){const t=fe(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+We(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=fe(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+We(this,t),e)}return n.value}toConfig(){const e=W(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 We(e,t){return K("the enum value",re(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){var t;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ze.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=Z(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}}toString(){return this.name}toJSON(){return this.toString()}}function Ze(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>(!("resolve"in n)||t(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:Ie(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))}function et(e){return xe(e.type)&&void 0===e.defaultValue}function tt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&tt(e.ofType,t.ofType)}function nt(e,t,n){return t===n||(xe(n)?!!xe(t)&&nt(e,t.ofType,n.ofType):xe(t)?nt(e,t.ofType,n):we(n)?!!we(t)&&nt(e,t.ofType,n.ofType):!we(t)&&(Ge(n)&&(Se(t)||Oe(t))&&e.isSubType(n,t)))}function rt(e,t,n){return t===n||(Ge(t)?Ge(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Ge(n)&&e.isSubType(n,t))}const it=2147483647,ot=-2147483648,st=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=ft(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: ${P(t)}`);if(n>it||nit||eit||te.name===t))}function ft(e){if(n(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!n(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}function ht(e){return Y(e,GraphQLDirective)}class GraphQLDirective{constructor(e){var r,i;this.name=Ie(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(r=e.isRepeatable)&&void 0!==r&&r,this.extensions=oe(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||t(!1,`@${e.name} locations must be an Array.`);const o=null!==(i=e.args)&&void 0!==i?i:{};n(o)&&!Array.isArray(o)||t(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=Je(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:Ke(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const mt=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Included when true."}}}),vt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Skipped when true."}}}),yt="No longer supported",Et=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[h.FIELD_DEFINITION,h.ARGUMENT_DEFINITION,h.INPUT_FIELD_DEFINITION,h.ENUM_VALUE],args:{reason:{type:ct,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:yt}}}),Tt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ct),description:"The URL that specifies the behavior of this scalar."}}}),Nt=Object.freeze([mt,vt,Et,Tt]);function It(e,t){if(xe(t)){const n=It(e,t.ofType);return(null==n?void 0:n.kind)===m.NULL?null:n}if(null===e)return{kind:m.NULL};if(void 0===e)return null;if(we(t)){const n=t.ofType;if("object"==typeof(i=e)&&"function"==typeof(null==i?void 0:i[Symbol.iterator])){const t=[];for(const r of e){const e=It(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return It(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=It(e[n.name],n.type);t&&r.push({kind:m.OBJECT_FIELD,name:{kind:m.NAME,value:n.name},value:t})}return{kind:m.OBJECT,fields:r}}if(Re(t)){const n=t.serialize(e);if(null==n)return null;if("boolean"==typeof n)return{kind:m.BOOLEAN,value:n};if("number"==typeof n&&Number.isFinite(n)){const e=String(n);return gt.test(e)?{kind:m.INT,value:e}:{kind:m.FLOAT,value:e}}if("string"==typeof n)return Ae(t)?{kind:m.ENUM,value:n}:t===lt&>.test(n)?{kind:m.INT,value:n}:{kind:m.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${P(n)}.`)}r(!1,"Unexpected input type: "+P(t))}const gt=/^-?(?:0|[1-9][0-9]*)$/,_t=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:ct,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(St))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(St),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:St,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:St,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(bt))),resolve:e=>e.getDirectives()}})}),bt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(ut),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ot))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ot=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:h.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:h.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:h.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:h.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:h.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:h.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:h.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:h.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:h.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:h.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:h.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:h.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:h.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:h.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:h.UNION,description:"Location adjacent to a union definition."},ENUM:{value:h.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:h.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:h.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:h.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),St=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(xt),resolve:e=>be(e)?wt.SCALAR:Oe(e)?wt.OBJECT:Se(e)?wt.INTERFACE:Le(e)?wt.UNION:Ae(e)?wt.ENUM:De(e)?wt.INPUT_OBJECT:we(e)?wt.LIST:xe(e)?wt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ct,resolve:e=>"name"in e?e.name:void 0},description:{type:ct,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ct,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(Lt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Oe(e)||Se(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e){if(Oe(e)||Se(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if(Ge(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Dt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ae(e)){const n=e.getValues();return t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(De(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:St,resolve:e=>"ofType"in e?e.ofType:void 0}})}),Lt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),At=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ct,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=It(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),Dt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})});let wt;!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"}(wt||(wt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:wt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:wt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:wt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:wt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:wt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:wt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:wt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:wt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),kt={name:"__schema",type:new GraphQLNonNull(_t),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},Ft={name:"__type",type:St,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ct),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},Rt={name:"__typename",type:new GraphQLNonNull(ct),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},Ct=Object.freeze([_t,bt,Ot,St,Lt,At,Dt,xt]);function Gt(e){return Ct.some((({name:t})=>e.name===t))}function $t(e){if(!function(e){return Y(e,GraphQLSchema)}(e))throw new Error(`Expected ${P(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){var r,i;this.__validationErrors=!0===e.assumeValid?[]:void 0,n(e)||t(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||t(!1,`"types" must be Array if provided but got: ${P(e.types)}.`),!e.directives||Array.isArray(e.directives)||t(!1,`"directives" must be Array if provided but got: ${P(e.directives)}.`),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(r=e.extensionASTNodes)&&void 0!==r?r:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(i=e.directives)&&void 0!==i?i:Nt;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Qt(t,o);null!=this._queryType&&Qt(this._queryType,o),null!=this._mutationType&&Qt(this._mutationType,o),null!=this._subscriptionType&&Qt(this._subscriptionType,o);for(const e of this._directives)if(ht(e))for(const t of e.args)Qt(t.type,o);Qt(_t,o),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of o){if(null==e)continue;const n=e.name;if(n||t(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[n])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${n}".`);if(this._typeMap[n]=e,Se(e)){for(const t of e.getInterfaces())if(Se(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(Oe(e))for(const t of e.getInterfaces())if(Se(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 f.QUERY:return this.getQueryType();case f.MUTATION:return this.getMutationType();case f.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return Le(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),Le(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}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=Ve(e);if(!t.has(n))if(t.add(n),Le(n))for(const e of n.getTypes())Qt(e,t);else if(Oe(n)||Se(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(De(n))for(const e of Object.values(n.getFields()))Qt(e.type,t);return t}function jt(e){if($t(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!Oe(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Ut(t,f.QUERY))&&void 0!==r?r:n.astNode)}}else e.reportError("Query root type must be provided.",t.astNode);const i=t.getMutationType();var o;i&&!Oe(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Ut(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!Oe(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Ut(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(ht(n)){Vt(e,n);for(const r of n.args){var t;if(Vt(e,r),ke(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),ze(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Ht(r.astNode),null===(t=r.astNode)||void 0===t?void 0:t.type])}}else e.reportError(`Expected directive but got: ${P(n)}.`,null==n?void 0:n.astNode)}(t),function(e){const t=function(e){const t=Object.create(null),n=[],r=Object.create(null);return i;function i(o){if(t[o.name])return;t[o.name]=!0,r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if(xe(t.type)&&De(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))Ue(r)?(Gt(r)||Vt(e,r),Oe(r)||Se(r)?(Mt(e,r),Pt(e,r)):Le(r)?Jt(e,r):Ae(r)?qt(e,r):De(r)&&(Xt(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${P(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,n))}getErrors(){return this._errors}}function Ut(e,t){var n;return null===(n=[e.astNode,...e.extensionASTNodes].flatMap((e=>{var t;return null!==(t=null==e?void 0:e.operationTypes)&&void 0!==t?t:[]})).find((e=>e.operation===t)))||void 0===n?void 0:n.type}function Vt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Mt(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 s of n){var r;if(Vt(e,s),!Fe(s.type))e.reportError(`The type of ${t.name}.${s.name} must be Output Type but got: ${P(s.type)}.`,null===(r=s.astNode)||void 0===r?void 0:r.type);for(const n of s.args){const r=n.name;var i,o;if(Vt(e,n),!ke(n.type))e.reportError(`The type of ${t.name}.${s.name}(${r}:) must be Input Type but got: ${P(n.type)}.`,null===(i=n.astNode)||void 0===i?void 0:i.type);if(ze(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Ht(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Pt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Se(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Kt(t,r)):(n[r.name]=!0,Yt(e,t,r),Bt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Kt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,Kt(t,r))}function Bt(e,t,n){const r=t.getFields();for(const c of Object.values(n.getFields())){const u=c.name,l=r[u];if(l){var i,o;if(!nt(e.schema,l.type,c.type))e.reportError(`Interface field ${n.name}.${u} expects type ${P(c.type)} but ${t.name}.${u} is type ${P(l.type)}.`,[null===(i=c.astNode)||void 0===i?void 0:i.type,null===(o=l.astNode)||void 0===o?void 0:o.type]);for(const r of c.args){const i=r.name,o=l.args.find((e=>e.name===i));var s,a;if(o){if(!tt(r.type,o.type))e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expects type ${P(r.type)} but ${t.name}.${u}(${i}:) is type ${P(o.type)}.`,[null===(s=r.astNode)||void 0===s?void 0:s.type,null===(a=o.astNode)||void 0===a?void 0:a.type])}else e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expected but ${t.name}.${u} does not provide it.`,[r.astNode,l.astNode])}for(const r of l.args){const i=r.name;!c.args.find((e=>e.name===i))&&ze(r)&&e.reportError(`Object field ${t.name}.${u} includes required argument ${i} that is missing from the Interface field ${n.name}.${u}.`,[r.astNode,c.astNode])}}else e.reportError(`Interface field ${n.name}.${u} expected but ${t.name} does not provide it.`,[c.astNode,t.astNode,...t.extensionASTNodes])}}function Yt(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}.`,[...Kt(n,i),...Kt(t,n)])}function Jt(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=Object.create(null);for(const i of n)r[i.name]?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,zt(t,i.name)):(r[i.name]=!0,Oe(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,zt(t,String(i))))}function qt(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)Vt(e,t)}function Xt(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 o of n){var r,i;if(Vt(e,o),!ke(o.type))e.reportError(`The type of ${t.name}.${o.name} must be Input Type but got: ${P(o.type)}.`,null===(r=o.astNode)||void 0===r?void 0:r.type);if(et(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Ht(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function Kt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.interfaces)&&void 0!==t?t:[]})).filter((e=>e.name.value===t.name))}function zt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.types)&&void 0!==t?t:[]})).filter((e=>e.name.value===t))}function Ht(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Et.name))}function Wt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLNonNull(n)}case m.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=null!=n?n:Zt,t&&(ke(t)&&this._inputTypeStack.push(t),Ce(t)&&this._parentTypeStack.push(t),Fe(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case m.SELECTION_SET:{const e=Ve(this.getType());this._parentTypeStack.push(Ce(e)?e:void 0);break}case m.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(Fe(i)?i:void 0);break}case m.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case m.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(Oe(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Wt(t,n):Ve(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Wt(t,e.type);this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ARGUMENT:{var n;let t,r;const i=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();i&&(t=i.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(ke(r)?r:void 0);break}case m.LIST:{const e=je(this.getInputType()),t=we(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(ke(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Ve(this.getInputType());let n,r;De(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ENUM:{const t=Ve(this.getInputType());let n;Ae(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case m.SELECTION_SET:this._parentTypeStack.pop();break;case m.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case m.DIRECTIVE:this._directive=null;break;case m.OPERATION_DEFINITION:case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:this._typeStack.pop();break;case m.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case m.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.LIST:case m.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.ENUM:this._enumValue=null}}}function Zt(e,t,n){const r=n.name.value;return r===kt.name&&e.getQueryType()===t?kt:r===Ft.name&&e.getQueryType()===t?Ft:r===Rt.name&&Ce(t)?Rt:Oe(t)||Se(t)?t.getFields()[r]:void 0}function en(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=de(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),d(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=de(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function tn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function nn(e){return e.kind===m.SCALAR_TYPE_DEFINITION||e.kind===m.OBJECT_TYPE_DEFINITION||e.kind===m.INTERFACE_TYPE_DEFINITION||e.kind===m.UNION_TYPE_DEFINITION||e.kind===m.ENUM_TYPE_DEFINITION||e.kind===m.INPUT_OBJECT_TYPE_DEFINITION}function rn(e){return e.kind===m.SCALAR_TYPE_EXTENSION||e.kind===m.OBJECT_TYPE_EXTENSION||e.kind===m.INTERFACE_TYPE_EXTENSION||e.kind===m.UNION_TYPE_EXTENSION||e.kind===m.ENUM_TYPE_EXTENSION||e.kind===m.INPUT_OBJECT_TYPE_EXTENSION}function on(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=e.args.map((e=>e.name));const i=e.getDocument().definitions;for(const e of i)if(e.kind===m.DIRECTIVE_DEFINITION){var o;const n=null!==(o=e.arguments)&&void 0!==o?o:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const r=n.name.value,i=t[r];if(n.arguments&&i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=re(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+K(o),t))}}return!1}}}function sn(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():Nt;for(const e of i)t[e.name]=e.locations;const o=e.getDocument().definitions;for(const e of o)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,i,o,s,a){const c=n.name.value,u=t[c];if(!u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,n));const l=function(e){const t=e[e.length-1];switch("kind"in t||r(!1),t.kind){case m.OPERATION_DEFINITION:return function(e){switch(e){case f.QUERY:return h.QUERY;case f.MUTATION:return h.MUTATION;case f.SUBSCRIPTION:return h.SUBSCRIPTION}}(t.operation);case m.FIELD:return h.FIELD;case m.FRAGMENT_SPREAD:return h.FRAGMENT_SPREAD;case m.INLINE_FRAGMENT:return h.INLINE_FRAGMENT;case m.FRAGMENT_DEFINITION:return h.FRAGMENT_DEFINITION;case m.VARIABLE_DEFINITION:return h.VARIABLE_DEFINITION;case m.SCHEMA_DEFINITION:case m.SCHEMA_EXTENSION:return h.SCHEMA;case m.SCALAR_TYPE_DEFINITION:case m.SCALAR_TYPE_EXTENSION:return h.SCALAR;case m.OBJECT_TYPE_DEFINITION:case m.OBJECT_TYPE_EXTENSION:return h.OBJECT;case m.FIELD_DEFINITION:return h.FIELD_DEFINITION;case m.INTERFACE_TYPE_DEFINITION:case m.INTERFACE_TYPE_EXTENSION:return h.INTERFACE;case m.UNION_TYPE_DEFINITION:case m.UNION_TYPE_EXTENSION:return h.UNION;case m.ENUM_TYPE_DEFINITION:case m.ENUM_TYPE_EXTENSION:return h.ENUM;case m.ENUM_VALUE_DEFINITION:return h.ENUM_VALUE;case m.INPUT_OBJECT_TYPE_DEFINITION:case m.INPUT_OBJECT_TYPE_EXTENSION:return h.INPUT_OBJECT;case m.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||r(!1),t.kind===m.INPUT_OBJECT_TYPE_DEFINITION?h.INPUT_FIELD_DEFINITION:h.ARGUMENT_DEFINITION}default:r(!1,"Unexpected kind: "+P(t.kind))}}(a);l&&!u.includes(l)&&e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,n))}}}function an(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(r[t.name.value]=!0);const i=[...Object.keys(n),...Object.keys(r)];return{NamedType(t,o,s,a,c){const u=t.name.value;if(!n[u]&&!r[u]){var l;const n=null!==(l=c[2])&&void 0!==l?l:s,r=null!=n&&("kind"in(p=n)&&(function(e){return e.kind===m.SCHEMA_DEFINITION||nn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||rn(e)}(p)));if(r&&cn.includes(u))return;const o=re(u,r?cn.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+K(o),t))}var p}}}const cn=[...pt,...Ct].map((e=>e.name));function un(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const r=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))r[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==r[n]&&e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,t))}}}}}function ln(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:ln(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(ln)};case m.INT:case m.FLOAT:case m.STRING:case m.BOOLEAN:case m.NULL:case m.ENUM:case m.VARIABLE:return e}var t}function pn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+pn(t))).join(" and "):e}function dn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=Tn(e,n,a);if(o!==c){hn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),dn(e,t,n,r,i,o,a))}}function fn(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]=Tn(e,n,a),[p,d]=Tn(e,n,c);hn(e,t,n,r,i,u,p);for(const s of d)fn(e,t,n,r,i,o,s);for(const o of l)fn(e,t,n,r,i,o,s)}function hn(e,t,n,r,i,o,s){for(const[a,c]of Object.entries(o)){const o=s[a];if(o)for(const s of c)for(const c of o){const o=mn(e,n,r,i,a,s,c);o&&t.push(o)}}}function mn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&Oe(a)&&Oe(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(vn(c)!==vn(p))return[[i,"they have differing arguments"],[c],[p]]}const h=null==u?void 0:u.type,m=null==d?void 0:d.type;if(h&&m&&yn(h,m))return[[i,`they return conflicting types "${P(h)}" and "${P(m)}"`],[c],[p]];const v=c.selectionSet,y=p.selectionSet;if(v&&y){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=En(e,t,i,o),[p,d]=En(e,t,s,a);hn(e,c,t,n,r,u,p);for(const i of d)dn(e,c,t,n,r,u,i);for(const i of l)dn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)fn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ve(h),v,Ve(m),y);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 vn(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(ln({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function yn(e,t){return we(e)?!we(t)||yn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||yn(e.ofType,t.ofType):!!xe(t)||!(!Re(e)&&!Re(t))&&e!==t)}function En(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);Nn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function Tn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Wt(e.getSchema(),n.typeCondition);return En(e,t,i,n.selectionSet)}function Nn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(Oe(t)||Se(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;r[i]||(r[i]=[]),r[i].push([t,o,n]);break}case m.FRAGMENT_SPREAD:i[o.name.value]=!0;break;case m.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?Wt(e.getSchema(),n):t;Nn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){var r;const[i,o]=ee.name));const o=e.getDocument().definitions;for(const e of o)if(e.kind===m.DIRECTIVE_DEFINITION){var s;const t=null!==(s=e.arguments)&&void 0!==s?s:[];n[e.name.value]=H(t.filter(_n),(e=>e.name.value))}return{Directive:{leave(t){const r=t.name.value,i=n[r];if(i){var o;const n=null!==(o=t.arguments)&&void 0!==o?o:[],s=new Set(n.map((e=>e.name.value)));for(const[n,o]of Object.entries(i))if(!s.has(n)){const i=_e(o.type)?P(o.type):fe(o.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${n}" of type "${i}" is required, but it was not provided.`,t))}}}}}}function _n(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function bn(e,t,n){if(e){if(e.kind===m.VARIABLE){const r=e.name.value;if(null==n||void 0===n[r])return;const i=n[r];if(null===i&&xe(t))return;return i}if(xe(t)){if(e.kind===m.NULL)return;return bn(e,t.ofType,n)}if(e.kind===m.NULL)return null;if(we(t)){const r=t.ofType;if(e.kind===m.LIST){const t=[];for(const i of e.values)if(On(i,n)){if(xe(r))return;t.push(null)}else{const e=bn(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=bn(e,r,n);if(void 0===i)return;return[i]}if(De(t)){if(e.kind!==m.OBJECT)return;const r=Object.create(null),i=H(e.fields,(e=>e.name.value));for(const e of Object.values(t.getFields())){const t=i[e.name];if(!t||On(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=bn(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Re(t)){let r;try{r=t.parseLiteral(e,n)}catch(e){return}if(void 0===r)return;return r}r(!1,"Unexpected input type: "+P(t))}}function On(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function Sn(e,t,n){var r;const i=null===(r=t.directives)||void 0===r?void 0:r.find((t=>t.name.value===e.name));if(i)return function(e,t,n){var r;const i={},o=H(null!==(r=t.arguments)&&void 0!==r?r:[],(e=>e.name.value));for(const r of e.args){const e=r.name,c=r.type,u=o[e];if(!u){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was not provided.`,t);continue}const l=u.value;let p=l.kind===m.NULL;if(l.kind===m.VARIABLE){const t=l.name.value;if(null==n||(s=n,a=t,!Object.prototype.hasOwnProperty.call(s,a))){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was provided the variable "$${t}" which was not provided a runtime value.`,l);continue}p=null==n[t]}if(p&&xe(c))throw new GraphQLError(`Argument "${e}" of non-null type "${P(c)}" must not be null.`,l);const d=bn(l,c,n);if(void 0===d)throw new GraphQLError(`Argument "${e}" has invalid value ${fe(l)}.`,l);i[e]=d}var s,a;return i}(e,i,n)}function Ln(e,t,n,r,i){const o=new Map;return An(e,t,n,r,i,o,new Set),o}function An(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!Dn(n,c))continue;const e=(a=c).alias?a.alias.value:a.name.value,t=o.get(e);void 0!==t?t.push(c):o.set(e,[c]);break}case m.INLINE_FRAGMENT:if(!Dn(n,c)||!wn(e,c,r))continue;An(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!Dn(n,c))continue;s.add(i);const a=t[i];if(!a||!wn(e,a,r))continue;An(e,t,n,r,a.selectionSet,o,s);break}}var a}function Dn(e,t){const n=Sn(vt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=Sn(mt,t,e);return!1!==(null==r?void 0:r.if)}function wn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Wt(e,r);return i===n||!!Ge(i)&&e.isSubType(i,n)}function xn(e,t){const n=new Map;for(const r of e){const e=t(r),i=n.get(e);void 0===i?n.set(e,[r]):i.push(r)}return n}function kn(e){return{Field:t,Directive:t};function t(t){var n;const r=xn(null!==(n=t.arguments)&&void 0!==n?n:[],(e=>e.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}function Fn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=!e.isRepeatable;const i=e.getDocument().definitions;for(const e of i)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const o=Object.create(null),s=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION)r=o;else if(nn(n)||rn(n)){const e=n.name.value;r=s[e],void 0===r&&(s[e]=r=Object.create(null))}else r=Object.create(null);for(const i of n.directives){const n=i.name.value;t[n]&&(r[n]?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,[r[n],i])):r[n]=i)}}}}function Rn(e,t){return!!(Oe(e)||Se(e)||De(e))&&null!=e.getFields()[t]}function Cn(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||r(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new GraphQLError(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}function Gn(e,t){const n=e.getInputType();if(!n)return;const r=Ve(n);if(Re(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}catch(r){const i=P(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${fe(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}function $n(e,t,n,r,i){if(xe(r)&&!xe(t)){const o=void 0!==i;if(!(null!=n&&n.kind!==m.NULL)&&!o)return!1;return nt(e,t,r.ofType)}return nt(e,t,r)}const Qn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!tn(n)){const t=n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,n))}return!1}}},function(e){const t=Object.create(null);return{OperationDefinition(n){const r=n.name;return r&&(t[r.value]?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,[t[r.value],r])):t[r.value]=r),!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===m.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",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===m.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const c=Ln(n,a,o,r,t.selectionSet);if(c.size>1){const t=[...c.values()].slice(1).flat();e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of c.values()){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.",t))}}}}}},an,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Wt(e.getSchema(),n);if(t&&!Ce(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Wt(e.getSchema(),t.typeCondition);if(n&&!Ce(n)){const n=fe(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,t.typeCondition))}}}},function(e){return{VariableDefinition(t){const n=Wt(e.getSchema(),t.type);if(void 0!==n&&!ke(n)){const n=t.variable.name.value,r=fe(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,t.type))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Re(Ve(n))){if(r){const i=t.name.value,o=P(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,r))}}else if(!r){const r=t.name.value,i=P(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,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=K("to use an inline fragment on",function(e,t,n){if(!Ge(t))return[];const r=new Set,i=Object.create(null);for(const s of e.getPossibleTypes(t))if(s.getFields()[n]){r.add(s),i[s.name]=1;for(const e of s.getInterfaces()){var o;e.getFields()[n]&&(r.add(e),i[e.name]=(null!==(o=i[e.name])&&void 0!==o?o:0)+1)}}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Se(t)&&e.isSubType(t,n)?-1:Se(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=K(function(e,t){if(Oe(e)||Se(e)){return re(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,t))}}}}},function(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value;return t[r]?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,[t[r],n.name])):t[r]=n.name,!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,t.name))}}},un,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ce(n)&&Ce(r)&&!rt(e.getSchema(),n,r)){const i=P(r),o=P(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,t))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=Wt(e.getSchema(),n.typeCondition);if(Ce(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!rt(e.getSchema(),r,i)){const o=P(i),s=P(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,t))}}}},function(e){const t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t[o.name.value])return;const s=o.name.value;t[s]=!0;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}.`:"."),t))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){var n;const r=xn(null!==(n=t.variableDefinitions)&&void 0!==n?n:[],(e=>e.variable.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:i}of r){const r=i.name.value;!0!==t[r]&&e.reportError(new GraphQLError(n.name?`Variable "$${r}" is not defined by operation "${n.name.value}".`:`Variable "$${r}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}},function(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){const r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(const{node:e}of i)r[e.name.value]=!0;for(const i of t){const t=i.variable.name.value;!0!==r[t]&&e.reportError(new GraphQLError(n.name?`Variable "$${t}" is never used in operation "${n.name.value}".`:`Variable "$${t}" is never used.`,i))}}},VariableDefinition(e){t.push(e)}}},sn,Fn,function(e){return{...on(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=re(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+K(o),t))}}}},kn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Gn(e,t),!1},ObjectValue(t){const n=Ve(e.getInputType());if(!De(n))return Gn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&et(i)){const r=P(i.type);e.reportError(new GraphQLError(`Field "${n.name}.${i.name}" of required type "${r}" was not provided.`,t))}}},ObjectField(t){const n=Ve(e.getParentInputType());if(!e.getInputType()&&De(n)){const r=re(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+K(r),t))}},NullValue(t){const n=e.getInputType();xe(n)&&e.reportError(new GraphQLError(`Expected value of type "${P(n)}", found ${fe(t)}.`,t))},EnumValue:t=>Gn(e,t),IntValue:t=>Gn(e,t),FloatValue:t=>Gn(e,t),StringValue:t=>Gn(e,t),BooleanValue:t=>Gn(e,t)}},function(e){return{...gn(e),Field:{leave(t){var n;const r=e.getFieldDef();if(!r)return!1;const i=new Set(null===(n=t.arguments)||void 0===n?void 0:n.map((e=>e.name.value)));for(const n of r.args)if(!i.has(n.name)&&ze(n)){const i=P(n.type);e.reportError(new GraphQLError(`Field "${r.name}" argument "${n.name}" of type "${i}" is required, but it was not provided.`,t))}}}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t[r];if(s&&i){const t=e.getSchema(),a=Wt(t,s.type);if(a&&!$n(t,a,s.defaultValue,i,o)){const t=P(a),o=P(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,[s,n]))}}}}},VariableDefinition(e){t[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]=En(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of Object.entries(i))if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",t)),++s)}}},function(e){const t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const o=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of o){const i=t.operation,o=n[i];r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,[o,t])):n[i]=t}return!1}},function(e){const t=Object.create(null),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(null==n||!n.getType(i))return t[i]?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,r.name))}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.values)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value,i=n[o];Ae(i)&&i.getValue(r)?e.reportError(new GraphQLError(`Enum value "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Enum value "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.fields)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value;Rn(n[o],r)?e.reportError(new GraphQLError(`Field "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Field "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,i=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of i){var o;n(`${r}.${e.name.value}`,null!==(o=e.arguments)&&void 0!==o?o:[])}return!1}function n(t,n){const r=xn(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.`,i.map((e=>e.name))));return!1}},function(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,r.name))}}},an,sn,Fn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(n[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=n[o],a=null==t?void 0:t.getType(o);let c;if(s?c=In[s.kind]:a&&(c=function(e){if(be(e))return m.SCALAR_TYPE_EXTENSION;if(Oe(e))return m.OBJECT_TYPE_EXTENSION;if(Se(e))return m.INTERFACE_TYPE_EXTENSION;if(Le(e))return m.UNION_TYPE_EXTENSION;if(Ae(e))return m.ENUM_TYPE_EXTENSION;if(De(e))return m.INPUT_OBJECT_TYPE_EXTENSION;r(!1,"Unexpected type: "+P(e))}(a)),c){if(c!==i.kind){const t=function(e){switch(e){case m.SCALAR_TYPE_EXTENSION:return"scalar";case m.OBJECT_TYPE_EXTENSION:return"object";case m.INTERFACE_TYPE_EXTENSION:return"interface";case m.UNION_TYPE_EXTENSION:return"union";case m.ENUM_TYPE_EXTENSION:return"enum";case m.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:r(!1,"Unexpected kind: "+P(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,s?[s,i]:i))}}else{const r=re(o,Object.keys({...n,...null==t?void 0:t.getTypeMap()}));e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+K(r),i.name))}}},on,kn,Cn,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===m.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===m.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=Object.create(null),r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!0!==n[i]){n[i]=!0;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);le(e,en(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 Un(e,n,r=Qn,i,o=new TypeInfo(e)){var s;const a=null!==(s=null==i?void 0:i.maxErrors)&&void 0!==s?s:100;n||t(!1,"Must provide document."),function(e){const t=jt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const c=Object.freeze({}),u=[],l=new ValidationContext(e,n,o,(e=>{if(u.length>=a)throw u.push(new GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;u.push(e)})),p=pe(r.map((e=>e(l))));try{le(n,en(o,p))}catch(e){if(e!==c)throw e}return u}function Vn(e,t,n=jn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Mn(e,r){n(e)&&n(e.__schema)||t(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${P(e)}.`);const i=e.__schema,o=W(i.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case wt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case wt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case wt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case wt.UNION:return function(e){if(!e.possibleTypes){const t=P(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(d)})}(e);case wt.ENUM:return function(e){if(!e.enumValues){const t=P(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:W(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case wt.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=P(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>E(e.inputFields)})}(e)}var t;var n;var r;const i=P(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}.`)}(e)));for(const e of[...pt,...Ct])o[e.name]&&(o[e.name]=e);const s=i.queryType?d(i.queryType):null,a=i.mutationType?d(i.mutationType):null,c=i.subscriptionType?d(i.subscriptionType):null,u=i.directives?i.directives.map((function(e){if(!e.args){const t=P(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=P(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:E(e.args)})})):[];return new GraphQLSchema({description:i.description,query:s,mutation:a,subscription:c,types:Object.values(o),directives:u,assumeValid:null==r?void 0:r.assumeValid});function l(e){if(e.kind===wt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===wt.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=l(t);return new GraphQLNonNull(function(e){if(!Qe(e))throw new Error(`Expected ${P(e)} to be a GraphQL nullable type.`);return e}(n))}return p(e)}function p(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${P(e)}.`);const n=o[t];if(!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 d(e){return function(e){if(!Oe(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Se(e))throw new Error(`Expected ${P(e)} to be a GraphQL Interface type.`);return e}(p(e))}function h(e){if(null===e.interfaces&&e.kind===wt.INTERFACE)return[];if(!e.interfaces){const t=P(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(f)}function m(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${P(e)}.`);return W(e.fields,(e=>e.name),y)}function y(e){const t=l(e.type);if(!Fe(t)){const e=P(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=P(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:E(e.args)}}function E(e){return W(e,(e=>e.name),T)}function T(e){const t=l(e.type);if(!ke(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?bn(function(e,t){const n=new Parser(e,t);n.expectToken(v.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(v.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function Pn(e,t,n){var i,o,s,a;const c=[],u=Object.create(null),l=[];let p;const d=[];for(const e of t.definitions)if(e.kind===m.SCHEMA_DEFINITION)p=e;else if(e.kind===m.SCHEMA_EXTENSION)d.push(e);else if(nn(e))c.push(e);else if(rn(e)){const t=e.name.value,n=u[t];u[t]=n?n.concat([e]):[e]}else e.kind===m.DIRECTIVE_DEFINITION&&l.push(e);if(0===Object.keys(u).length&&0===c.length&&0===l.length&&0===d.length&&null==p)return e;const f=Object.create(null);for(const t of e.types)f[t.name]=T(t);for(const e of c){var h;const t=e.name.value;f[t]=null!==(h=Bn[t])&&void 0!==h?h:x(e)}const v={query:e.query&&E(e.query),mutation:e.mutation&&E(e.mutation),subscription:e.subscription&&E(e.subscription),...p&&g([p]),...g(d)};return{description:null===(i=p)||void 0===i||null===(o=i.description)||void 0===o?void 0:o.value,...v,types:Object.values(f),directives:[...e.directives.map((function(e){const t=e.toConfig();return new GraphQLDirective({...t,args:Z(t.args,I)})})),...l.map((function(e){var t;return new GraphQLDirective({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:S(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(s=p)&&void 0!==s?s:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(d),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a};function y(e){return we(e)?new GraphQLList(y(e.ofType)):xe(e)?new GraphQLNonNull(y(e.ofType)):E(e)}function E(e){return f[e.name]}function T(e){return Gt(e)||dt(e)?e:be(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];let i=n.specifiedByURL;for(const e of r){var o;i=null!==(o=Jn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Oe(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLObjectType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Se(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Le(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLUnionType({...n,types:()=>[...e.getTypes().map(E),...w(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Ae(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[e.name])&&void 0!==t?t:[];return new GraphQLEnumType({...n,values:{...n.values,...A(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):De(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInputObjectType({...n,fields:()=>({...Z(n.fields,(e=>({...e,type:y(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):void r(!1,"Unexpected type: "+P(e))}function N(e){return{...e,type:y(e.type),args:e.args&&Z(e.args,I)}}function I(e){return{...e,type:y(e.type)}}function g(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=_(n.type)}return t}function _(e){var t;const n=e.name.value,r=null!==(t=Bn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function b(e){return e.kind===m.LIST_TYPE?new GraphQLList(b(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(b(e.type)):_(e)}function O(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:b(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:S(n.arguments),deprecationReason:Yn(n),astNode:n}}}return t}function S(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=b(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:bn(e.defaultValue,t),deprecationReason:Yn(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=b(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:bn(n.defaultValue,e),deprecationReason:Yn(n),astNode:n}}}return t}function A(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:Yn(n),astNode:n}}}return t}function D(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function w(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function x(e){var t;const n=e.name.value,r=null!==(t=u[n])&&void 0!==t?t:[];switch(e.kind){case m.OBJECT_TYPE_DEFINITION:{var i;const t=[e,...r];return new GraphQLObjectType({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.INTERFACE_TYPE_DEFINITION:{var o;const t=[e,...r];return new GraphQLInterfaceType({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.ENUM_TYPE_DEFINITION:{var s;const t=[e,...r];return new GraphQLEnumType({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,values:A(t),astNode:e,extensionASTNodes:r})}case m.UNION_TYPE_DEFINITION:{var a;const t=[e,...r];return new GraphQLUnionType({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,types:()=>w(t),astNode:e,extensionASTNodes:r})}case m.SCALAR_TYPE_DEFINITION:var c;return new GraphQLScalarType({name:n,description:null===(c=e.description)||void 0===c?void 0:c.value,specifiedByURL:Jn(e),astNode:e,extensionASTNodes:r});case m.INPUT_OBJECT_TYPE_DEFINITION:{var l;const t=[e,...r];return new GraphQLInputObjectType({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const Bn=H([...pt,...Ct],(e=>e.name));function Yn(e){const t=Sn(Et,e);return null==t?void 0:t.reason}function Jn(e){const t=Sn(Tt,e);return null==t?void 0:t.url}function qn(e,n){null!=e&&e.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&function(e){const t=Vn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Pn({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,n);if(null==r.astNode)for(const e of r.types)switch(e.name){case"Query":r.query=e;break;case"Mutation":r.mutation=e;break;case"Subscription":r.subscription=e}const i=[...r.directives,...Nt.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Xn(e){return function(e,t,n){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[zn(e),...i.map((e=>function(e){return rr(e)+"directive @"+e.name+er(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(be(e))return function(e){return rr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(Oe(e))return function(e){return rr(e)+`type ${e.name}`+Hn(e)+Wn(e)}(e);if(Se(e))return function(e){return rr(e)+`interface ${e.name}`+Hn(e)+Wn(e)}(e);if(Le(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return rr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>rr(e," ",!t)+" "+e.name+nr(e.deprecationReason)));return rr(e)+`enum ${e.name}`+Zn(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+tr(e)));return rr(e)+`input ${e.name}`+Zn(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!Nt.some((({name:e})=>e===t.name));var t}),Kn)}function Kn(e){return!dt(e)&&!Gt(e)}function zn(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();if(r&&"Subscription"!==r.name)return!1;return!0}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),rr(e)+`schema {\n${t.join("\n")}\n}`}function Hn(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Wn(e){return Zn(Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+e.name+er(e.args," ")+": "+String(e.type)+nr(e.deprecationReason))))}function Zn(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function er(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(tr).join(", ")+")":"(\n"+e.map(((e,n)=>rr(e," "+t,!n)+" "+t+tr(e))).join("\n")+"\n"+t+")"}function tr(e){const t=It(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+nr(e.deprecationReason)}function nr(e){if(null==e)return"";if(e!==yt){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function rr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+fe({kind:m.STRING,value:r,block:b(r)}).replace(/\n/g,"\n"+t)+"\n"}const ir=[un],or=[function(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.",t)),!1)}},function(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.",t))}}},...Qn.filter((e=>!ir.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function sr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function ar(e){return e.startsWith("__")}function cr(e){return null!=e}function ur(e){switch(e.kind){case m.VARIABLE:return{kind:e.kind,value:e.name.value};case m.LIST:return{kind:e.kind,value:e.values.map(ur)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=ur(t.value),e)),{})};default:return e}}function lr(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 pr(e,t){const n=new Map;for(const e of t.definitions)e.kind===m.FRAGMENT_DEFINITION&&n.set(e.name.value,e);const r=[],i=new Map,o=new Set;for(const e of t.definitions)e.kind===m.OPERATION_DEFINITION&&r.push(a(e));for(const[e,t]of n.entries())i.set(e,c(t));return{operations:r,fragments:Array.from(i.values()),referencedTypes:Array.from(o.values())};function s(e){if(o.add(e),Le(e)){const t=e.getTypes();for(e of t)o.add(Ve(e))}}function a(t){if(!t.name)throw new GraphQLError("Operations should be named",t);const n=lr(t),r=t.name.value,i=t.operation,a=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=Wt(e,t.type);if(!r)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,t);return s(Ve(r)),{name:n,type:r}})),c=fe(t),l=e.getRootType(i);return o.add(Ve(l)),{filePath:n,name:r,operationType:i,rootType:l,variables:a,source:c,selectionSet:u(t.selectionSet,l)}}function c(t){const n=t.name.value,r=lr(t),i=fe(t),o=Wt(e,t.typeCondition);return s(Ve(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r,o=new Set){return{parentType:r,selections:t.selections.map((t=>function(t,r,o){var a;switch(t.kind){case m.FIELD:{const n=t.name.value,i=null===(a=t.alias)||void 0===a?void 0:a.value,o=function(e,t,n){return n===kt.name&&e.getQueryType()===t?kt:n===Ft.name&&e.getQueryType()===t?Ft:n===Rt.name&&(Oe(t)||Se(t)||Le(t))?Rt:Oe(t)||Se(t)?t.getFields()[n]:void 0}(e,r,n);if(!o)throw new GraphQLError(`Cannot query field "${n}" on type "${String(r)}"`,t);const c=o.type,l=Ve(c);s(Ve(l));const{description:p,deprecationReason:d}=o,f=t.arguments&&t.arguments.length>0?t.arguments.map((e=>{const t=e.name.value,n=o.args.find((t=>t.name===e.name.value)),r=n&&n.type||void 0;return{name:t,value:ur(e.value),type:r}})):void 0;let h={kind:"Field",name:n,alias:i,arguments:f,type:c,description:!ar(n)&&p?p:void 0,deprecationReason:d||void 0};if(Ce(l)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,t);h.selectionSet=u(e,l)}return h}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Wt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i)}}case m.FRAGMENT_SPREAD:{const e=t.name.value;if(o.has(e))return;o.add(e);const r=function(e){let t=i.get(e);if(t)return t;const r=n.get(e);return r?(n.delete(e),t=c(r),i.set(e,t),t):void 0}(e);if(!r)throw new GraphQLError(`Unknown fragment "${e}".`,t.name);return{kind:"FragmentSpread",fragment:r}}}}(t,r,o))).filter(cr)}}}return m.FIELD,m.NAME,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){return pr(e,t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Mn(t);return sr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Vn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=qn(t,{assumeValidSDL:!0});return sr(n),n},e.mergeDocuments=function(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)},e.parseDocument=function(e){return J(e)},e.printSchemaToSDL=function(e){return Xn(e)},e.validateDocument=function(e,t){return Un(e,t,or)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); +var ApolloCodegenFrontend=function(e){"use strict";function t(e,t){if(!Boolean(e))throw new Error(t)}function n(e){return"object"==typeof e&&null!==e}function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}const i=/\r\n|[\n\r]/g;function o(e,t){let n=0,o=1;for(const s of e.body.matchAll(i)){if("number"==typeof s.index||r(!1),s.index>=t)break;n=s.index+s[0].length,o+=1}return{line:o,column:t+1-n}}function s(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${s}:${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+a([[s-1+" |",p[i-1]],[`${s} |`,d],["|","^".padStart(u)],[`${s+1} |`,p[i+1]]])}function a(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,...t){var r,i,s;const{nodes:a,source:u,positions:l,path:p,originalError:d,extensions:f}=function(e){const t=e[0];return null==t||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}(t);super(e),this.name="GraphQLError",this.path=null!=p?p:void 0,this.originalError=null!=d?d:void 0,this.nodes=c(Array.isArray(a)?a:a?[a]:void 0);const h=c(null===(r=this.nodes)||void 0===r?void 0:r.map((e=>e.loc)).filter((e=>null!=e)));this.source=null!=u?u:null==h||null===(i=h[0])||void 0===i?void 0:i.source,this.positions=null!=l?l:null==h?void 0:h.map((e=>e.start)),this.locations=l&&u?l.map((e=>o(u,e))):null==h?void 0:h.map((e=>o(e.source,e.start)));const m=n(null==d?void 0:d.extensions)?null==d?void 0:d.extensions:void 0;this.extensions=null!==(s=null!=f?f:m)&&void 0!==s?s: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!=d&&d.stack?Object.defineProperty(this,"stack",{value:d.stack,writable:!0,configurable:!0}):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"+s((t=n.loc).source,o(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+s(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 c(e){return void 0===e||0===e.length?void 0:e}function u(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,void 0,e,[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 l={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],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"]},p=new Set(Object.keys(l));function d(e){const t=null==e?void 0:e.kind;return"string"==typeof t&&p.has(t)}let f,h,m,v;function y(e){return 9===e||32===e}function E(e){return e>=48&&e<=57}function T(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return T(e)||95===e}function I(e){return T(e)||E(e)||95===e}function g(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let t=0;t0===t?e:e.slice(n))).slice(null!==(t=r)&&void 0!==t?t:0,i+1)}function _(e){let t=0;for(;t",e.EOF="",e.BANG="!",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"}(v||(v={}));class Lexer{constructor(e){const t=new Token(v.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!==v.EOF)do{if(e.next)e=e.next;else{const t=x(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function A(e){return e>=56320&&e<=57343}function D(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return v.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 x(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 u(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function V(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const c=[];for(;o2)return"[Array]";const n=Math.min(10,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>2)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+": "+B(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const Y=function(e,t){return e instanceof t};class Source{constructor(e,n="GraphQL request",r={line:1,column:1}){"string"==typeof e||t(!1,`Body must be a string. Received: ${P(e)}.`),this.body=e,this.name=n,this.locationOffset=r,this.locationOffset.line>0||t(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||t(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function J(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t){const n=function(e){return Y(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t}parseName(){const e=this.expectToken(v.NAME);return this.node(e,{kind:m.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:m.DOCUMENT,definitions:this.many(v.SOF,this.parseDefinition,v.EOF)})}parseDefinition(){if(this.peek(v.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===v.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 u(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(v.BRACE_L))return this.node(e,{kind:m.OPERATION_DEFINITION,operation:f.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(v.NAME)&&(n=this.parseName()),this.node(e,{kind:m.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(v.NAME);switch(e.value){case"query":return f.QUERY;case"mutation":return f.MUTATION;case"subscription":return f.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(v.PAREN_L,this.parseVariableDefinition,v.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:m.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(v.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(v.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(v.DOLLAR),this.node(e,{kind:m.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:m.SELECTION_SET,selections:this.many(v.BRACE_L,this.parseSelection,v.BRACE_R)})}parseSelection(){return this.peek(v.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(v.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:m.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(v.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(v.PAREN_L,t,v.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(v.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(v.NAME)?this.node(e,{kind:m.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:m.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){var e;const t=this._lexer.token;return this.expectKeyword("fragment"),!0===(null===(e=this._options)||void 0===e?void 0:e.allowLegacyFragmentVariables)?this.node(t,{kind:m.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:m.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 v.BRACKET_L:return this.parseList(e);case v.BRACE_L:return this.parseObject(e);case v.INT:return this._lexer.advance(),this.node(t,{kind:m.INT,value:t.value});case v.FLOAT:return this._lexer.advance(),this.node(t,{kind:m.FLOAT,value:t.value});case v.STRING:case v.BLOCK_STRING:return this.parseStringLiteral();case v.NAME:switch(this._lexer.advance(),t.value){case"true":return this.node(t,{kind:m.BOOLEAN,value:!0});case"false":return this.node(t,{kind:m.BOOLEAN,value:!1});case"null":return this.node(t,{kind:m.NULL});default:return this.node(t,{kind:m.ENUM,value:t.value})}case v.DOLLAR:if(e){if(this.expectToken(v.DOLLAR),this._lexer.token.kind===v.NAME){const e=this._lexer.token.value;throw u(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._lexer.advance(),this.node(e,{kind:m.STRING,value:e.value,block:e.kind===v.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:m.LIST,values:this.any(v.BRACKET_L,(()=>this.parseValueLiteral(e)),v.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:m.OBJECT,fields:this.any(v.BRACE_L,(()=>this.parseObjectField(e)),v.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(v.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(v.AT),this.node(t,{kind:m.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(v.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(v.BRACKET_R),t=this.node(e,{kind:m.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(v.BANG)?this.node(e,{kind:m.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:m.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(v.STRING)||this.peek(v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);return this.node(e,{kind:m.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(v.COLON);const n=this.parseNamedType();return this.node(e,{kind:m.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:m.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:m.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(v.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseFieldDefinition,v.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(v.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:m.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(v.PAREN_L,this.parseInputValueDef,v.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(v.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(v.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:m.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:m.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:m.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(v.EQUALS)?this.delimitedMany(v.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:m.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(v.BRACE_L,this.parseEnumValueDefinition,v.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:m.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 u(this._lexer.source,this._lexer.token.start,`${q(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:m.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseInputValueDef,v.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:m.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:m.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:m.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:m.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:m.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:m.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:m.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(v.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:m.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(v.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.prototype.hasOwnProperty.call(h,t.value))return t;throw this.unexpected(e)}node(e,t){var n;return!0!==(null===(n=this._options)||void 0===n?void 0:n.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._lexer.advance(),t;throw u(this._lexer.source,t.start,`Expected ${X(e)}, found ${q(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this._lexer.advance(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==v.NAME||t.value!==e)throw u(this._lexer.source,t.start,`Expected "${e}", found ${q(t)}.`);this._lexer.advance()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===v.NAME&&t.value===e&&(this._lexer.advance(),!0)}unexpected(e){const t=null!=e?e:this._lexer.token;return u(this._lexer.source,t.start,`Unexpected ${q(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}}function q(e){const t=e.value;return X(e.kind)+(null!=t?` "${t}"`:"")}function X(e){return function(e){return e===v.BANG||e===v.DOLLAR||e===v.AMP||e===v.PAREN_L||e===v.PAREN_R||e===v.SPREAD||e===v.COLON||e===v.EQUALS||e===v.AT||e===v.BRACKET_L||e===v.BRACKET_R||e===v.BRACE_L||e===v.PIPE||e===v.BRACE_R}(e)?`"${e}"`:e}function K(e,t){const[n,r]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const o=r.map((e=>`"${e}"`));switch(o.length){case 0:return"";case 1:return i+o[0]+"?";case 2:return i+o[0]+" or "+o[1]+"?"}const s=o.slice(0,5),a=s.pop();return i+s.join(", ")+", or "+a+"?"}function z(e){return e}function H(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}function W(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function Z(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function ee(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-te,o=t.charCodeAt(r)}while(ne(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const te=48;function ne(e){return!isNaN(e)&&te<=e&&e<=57}function re(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:ee(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=ie(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=ie(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 ie(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>me(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=ye("(",me(e.variableDefinitions,", "),")"),n=me([e.operation,me([e.name,t]),me(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+ye(" = ",n)+ye(" ",me(r," "))},SelectionSet:{leave:({selections:e})=>ve(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){const o=ye("",e,": ")+t;let s=o+ye("(",me(n,", "),")");return s.length>80&&(s=o+ye("(\n",Ee(me(n,"\n")),"\n)")),me([s,me(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+ye(" ",me(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>me(["...",ye("on ",e),me(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${ye("(",me(n,", "),")")} on ${t} ${ye("",me(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?function(e,t){const n=e.replace(/"""/g,'\\"""'),r=n.split(/\r\n|[\n\r]/g),i=1===r.length,o=r.length>1&&r.slice(1).every((e=>0===e.length||y(e.charCodeAt(0)))),s=n.endsWith('\\"""'),a=e.endsWith('"')&&!s,c=e.endsWith("\\"),u=a||c,l=!(null!=t&&t.minimize)&&(!i||e.length>70||u||o||s);let p="";const d=i&&y(e.charCodeAt(0));return(l&&!d||o)&&(p+="\n"),p+=n,(l||u)&&(p+="\n"),'"""'+p+'"""'}(e):`"${e.replace(se,ae)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+me(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+me(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+ye("(",me(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>ye("",e,"\n")+me(["schema",me(t," "),ve(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me(["scalar",t,me(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["type",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>ye("",e,"\n")+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+": "+r+ye(" ",me(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>ye("",e,"\n")+me([t+": "+n,ye("= ",r),me(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["interface",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>ye("",e,"\n")+me(["union",t,me(n," "),ye("= ",me(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>ye("",e,"\n")+me(["enum",t,me(n," "),ve(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me([t,me(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>ye("",e,"\n")+me(["input",t,me(n," "),ve(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>ye("",e,"\n")+"directive @"+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+(r?" repeatable":"")+" on "+me(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>me(["extend schema",me(e," "),ve(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>me(["extend scalar",e,me(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend type",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend interface",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>me(["extend union",e,me(t," "),ye("= ",me(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>me(["extend enum",e,me(t," "),ve(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>me(["extend input",e,me(t," "),ve(n)]," ")}};function me(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function ve(e){return ye("{\n",Ee(me(e,"\n")),"\n}")}function ye(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Ee(e){return ye(" ",e.replace(/\n/g,"\n "))}function Te(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}function Ne(e,t){switch(e.kind){case m.NULL:return null;case m.INT:return parseInt(e.value,10);case m.FLOAT:return parseFloat(e.value);case m.STRING:case m.ENUM:case m.BOOLEAN:return e.value;case m.LIST:return e.values.map((e=>Ne(e,t)));case m.OBJECT:return W(e.fields,(e=>e.name.value),(e=>Ne(e.value,t)));case m.VARIABLE:return null==t?void 0:t[e.name.value]}}function Ie(e){if(null!=e||t(!1,"Must provide name."),"string"==typeof e||t(!1,"Expected name to be a string."),0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;ts(Ne(e,t)),this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(o=e.extensionASTNodes)&&void 0!==o?o:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||t(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${P(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||t(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||t(!1,`${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){var n;this.name=Ie(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=()=>Ye(e),this._interfaces=()=>Be(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||t(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${P(e.isTypeOf)}.`)}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:Xe(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Be(e){var n;const r=Me(null!==(n=e.interfaces)&&void 0!==n?n:[]);return Array.isArray(r)||t(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),r}function Ye(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>{var i;qe(n)||t(!1,`${e.name}.${r} field config must be an object.`),null==n.resolve||"function"==typeof n.resolve||t(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${P(n.resolve)}.`);const o=null!==(i=n.args)&&void 0!==i?i:{};return qe(o)||t(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:Ie(r),description:n.description,type:n.type,args:Je(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function Je(e){return Object.entries(e).map((([e,t])=>({name:Ie(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:oe(t.extensions),astNode:t.astNode})))}function qe(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:Ke(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function Ke(e){return W(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(e){return xe(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=Ye.bind(void 0,e),this._interfaces=Be.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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:Xe(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){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._types=He.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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 He(e){const n=Me(e.types);return Array.isArray(n)||t(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),n}class GraphQLEnumType{constructor(e){var n,r,i;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._values=(r=this.name,qe(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(qe(n)||t(!1,`${r}.${e} must refer to an object with a "value" key representing an internal value but got: ${P(n)}.`),{name:ge(e),description:n.description,value:void 0!==n.value?n.value:e,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=H(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${P(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=P(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+We(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+We(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.ENUM){const t=fe(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+We(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=fe(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+We(this,t),e)}return n.value}toConfig(){const e=W(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 We(e,t){return K("the enum value",re(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){var t;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ze.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=Z(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}}toString(){return this.name}toJSON(){return this.toString()}}function Ze(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>(!("resolve"in n)||t(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:Ie(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))}function et(e){return xe(e.type)&&void 0===e.defaultValue}function tt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&tt(e.ofType,t.ofType)}function nt(e,t,n){return t===n||(xe(n)?!!xe(t)&&nt(e,t.ofType,n.ofType):xe(t)?nt(e,t.ofType,n):we(n)?!!we(t)&&nt(e,t.ofType,n.ofType):!we(t)&&(Ge(n)&&(Se(t)||Oe(t))&&e.isSubType(n,t)))}function rt(e,t,n){return t===n||(Ge(t)?Ge(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Ge(n)&&e.isSubType(n,t))}const it=2147483647,ot=-2147483648,st=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=ft(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: ${P(t)}`);if(n>it||nit||eit||te.name===t))}function ft(e){if(n(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!n(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}function ht(e){return Y(e,GraphQLDirective)}class GraphQLDirective{constructor(e){var r,i;this.name=Ie(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(r=e.isRepeatable)&&void 0!==r&&r,this.extensions=oe(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||t(!1,`@${e.name} locations must be an Array.`);const o=null!==(i=e.args)&&void 0!==i?i:{};n(o)&&!Array.isArray(o)||t(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=Je(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:Ke(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const mt=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Included when true."}}}),vt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Skipped when true."}}}),yt="No longer supported",Et=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[h.FIELD_DEFINITION,h.ARGUMENT_DEFINITION,h.INPUT_FIELD_DEFINITION,h.ENUM_VALUE],args:{reason:{type:ct,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:yt}}}),Tt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ct),description:"The URL that specifies the behavior of this scalar."}}}),Nt=Object.freeze([mt,vt,Et,Tt]);function It(e,t){if(xe(t)){const n=It(e,t.ofType);return(null==n?void 0:n.kind)===m.NULL?null:n}if(null===e)return{kind:m.NULL};if(void 0===e)return null;if(we(t)){const n=t.ofType;if("object"==typeof(i=e)&&"function"==typeof(null==i?void 0:i[Symbol.iterator])){const t=[];for(const r of e){const e=It(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return It(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=It(e[n.name],n.type);t&&r.push({kind:m.OBJECT_FIELD,name:{kind:m.NAME,value:n.name},value:t})}return{kind:m.OBJECT,fields:r}}if(Re(t)){const n=t.serialize(e);if(null==n)return null;if("boolean"==typeof n)return{kind:m.BOOLEAN,value:n};if("number"==typeof n&&Number.isFinite(n)){const e=String(n);return gt.test(e)?{kind:m.INT,value:e}:{kind:m.FLOAT,value:e}}if("string"==typeof n)return Ae(t)?{kind:m.ENUM,value:n}:t===lt&>.test(n)?{kind:m.INT,value:n}:{kind:m.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${P(n)}.`)}r(!1,"Unexpected input type: "+P(t))}const gt=/^-?(?:0|[1-9][0-9]*)$/,_t=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:ct,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(St))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(St),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:St,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:St,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(bt))),resolve:e=>e.getDirectives()}})}),bt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(ut),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ot))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ot=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:h.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:h.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:h.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:h.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:h.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:h.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:h.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:h.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:h.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:h.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:h.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:h.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:h.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:h.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:h.UNION,description:"Location adjacent to a union definition."},ENUM:{value:h.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:h.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:h.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:h.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),St=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(xt),resolve:e=>be(e)?wt.SCALAR:Oe(e)?wt.OBJECT:Se(e)?wt.INTERFACE:Le(e)?wt.UNION:Ae(e)?wt.ENUM:De(e)?wt.INPUT_OBJECT:we(e)?wt.LIST:xe(e)?wt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ct,resolve:e=>"name"in e?e.name:void 0},description:{type:ct,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ct,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(Lt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Oe(e)||Se(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e){if(Oe(e)||Se(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if(Ge(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Dt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ae(e)){const n=e.getValues();return t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(De(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:St,resolve:e=>"ofType"in e?e.ofType:void 0}})}),Lt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),At=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ct,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=It(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),Dt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})});let wt;!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"}(wt||(wt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:wt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:wt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:wt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:wt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:wt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:wt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:wt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:wt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),kt={name:"__schema",type:new GraphQLNonNull(_t),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},Ft={name:"__type",type:St,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ct),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},Rt={name:"__typename",type:new GraphQLNonNull(ct),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},Ct=Object.freeze([_t,bt,Ot,St,Lt,At,Dt,xt]);function Gt(e){return Ct.some((({name:t})=>e.name===t))}function $t(e){if(!function(e){return Y(e,GraphQLSchema)}(e))throw new Error(`Expected ${P(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){var r,i;this.__validationErrors=!0===e.assumeValid?[]:void 0,n(e)||t(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||t(!1,`"types" must be Array if provided but got: ${P(e.types)}.`),!e.directives||Array.isArray(e.directives)||t(!1,`"directives" must be Array if provided but got: ${P(e.directives)}.`),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(r=e.extensionASTNodes)&&void 0!==r?r:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(i=e.directives)&&void 0!==i?i:Nt;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Qt(t,o);null!=this._queryType&&Qt(this._queryType,o),null!=this._mutationType&&Qt(this._mutationType,o),null!=this._subscriptionType&&Qt(this._subscriptionType,o);for(const e of this._directives)if(ht(e))for(const t of e.args)Qt(t.type,o);Qt(_t,o),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of o){if(null==e)continue;const n=e.name;if(n||t(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[n])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${n}".`);if(this._typeMap[n]=e,Se(e)){for(const t of e.getInterfaces())if(Se(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(Oe(e))for(const t of e.getInterfaces())if(Se(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 f.QUERY:return this.getQueryType();case f.MUTATION:return this.getMutationType();case f.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return Le(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),Le(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}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=Ve(e);if(!t.has(n))if(t.add(n),Le(n))for(const e of n.getTypes())Qt(e,t);else if(Oe(n)||Se(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(De(n))for(const e of Object.values(n.getFields()))Qt(e.type,t);return t}function jt(e){if($t(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!Oe(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Ut(t,f.QUERY))&&void 0!==r?r:n.astNode)}}else e.reportError("Query root type must be provided.",t.astNode);const i=t.getMutationType();var o;i&&!Oe(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Ut(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!Oe(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Ut(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(ht(n)){Vt(e,n);for(const r of n.args){var t;if(Vt(e,r),ke(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),ze(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Ht(r.astNode),null===(t=r.astNode)||void 0===t?void 0:t.type])}}else e.reportError(`Expected directive but got: ${P(n)}.`,null==n?void 0:n.astNode)}(t),function(e){const t=function(e){const t=Object.create(null),n=[],r=Object.create(null);return i;function i(o){if(t[o.name])return;t[o.name]=!0,r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if(xe(t.type)&&De(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))Ue(r)?(Gt(r)||Vt(e,r),Oe(r)||Se(r)?(Mt(e,r),Pt(e,r)):Le(r)?Jt(e,r):Ae(r)?qt(e,r):De(r)&&(Xt(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${P(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,n))}getErrors(){return this._errors}}function Ut(e,t){var n;return null===(n=[e.astNode,...e.extensionASTNodes].flatMap((e=>{var t;return null!==(t=null==e?void 0:e.operationTypes)&&void 0!==t?t:[]})).find((e=>e.operation===t)))||void 0===n?void 0:n.type}function Vt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Mt(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 s of n){var r;if(Vt(e,s),!Fe(s.type))e.reportError(`The type of ${t.name}.${s.name} must be Output Type but got: ${P(s.type)}.`,null===(r=s.astNode)||void 0===r?void 0:r.type);for(const n of s.args){const r=n.name;var i,o;if(Vt(e,n),!ke(n.type))e.reportError(`The type of ${t.name}.${s.name}(${r}:) must be Input Type but got: ${P(n.type)}.`,null===(i=n.astNode)||void 0===i?void 0:i.type);if(ze(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Ht(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Pt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Se(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Kt(t,r)):(n[r.name]=!0,Yt(e,t,r),Bt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Kt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,Kt(t,r))}function Bt(e,t,n){const r=t.getFields();for(const c of Object.values(n.getFields())){const u=c.name,l=r[u];if(l){var i,o;if(!nt(e.schema,l.type,c.type))e.reportError(`Interface field ${n.name}.${u} expects type ${P(c.type)} but ${t.name}.${u} is type ${P(l.type)}.`,[null===(i=c.astNode)||void 0===i?void 0:i.type,null===(o=l.astNode)||void 0===o?void 0:o.type]);for(const r of c.args){const i=r.name,o=l.args.find((e=>e.name===i));var s,a;if(o){if(!tt(r.type,o.type))e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expects type ${P(r.type)} but ${t.name}.${u}(${i}:) is type ${P(o.type)}.`,[null===(s=r.astNode)||void 0===s?void 0:s.type,null===(a=o.astNode)||void 0===a?void 0:a.type])}else e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expected but ${t.name}.${u} does not provide it.`,[r.astNode,l.astNode])}for(const r of l.args){const i=r.name;!c.args.find((e=>e.name===i))&&ze(r)&&e.reportError(`Object field ${t.name}.${u} includes required argument ${i} that is missing from the Interface field ${n.name}.${u}.`,[r.astNode,c.astNode])}}else e.reportError(`Interface field ${n.name}.${u} expected but ${t.name} does not provide it.`,[c.astNode,t.astNode,...t.extensionASTNodes])}}function Yt(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}.`,[...Kt(n,i),...Kt(t,n)])}function Jt(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=Object.create(null);for(const i of n)r[i.name]?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,zt(t,i.name)):(r[i.name]=!0,Oe(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,zt(t,String(i))))}function qt(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)Vt(e,t)}function Xt(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 o of n){var r,i;if(Vt(e,o),!ke(o.type))e.reportError(`The type of ${t.name}.${o.name} must be Input Type but got: ${P(o.type)}.`,null===(r=o.astNode)||void 0===r?void 0:r.type);if(et(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Ht(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function Kt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.interfaces)&&void 0!==t?t:[]})).filter((e=>e.name.value===t.name))}function zt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.types)&&void 0!==t?t:[]})).filter((e=>e.name.value===t))}function Ht(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Et.name))}function Wt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLNonNull(n)}case m.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=null!=n?n:Zt,t&&(ke(t)&&this._inputTypeStack.push(t),Ce(t)&&this._parentTypeStack.push(t),Fe(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case m.SELECTION_SET:{const e=Ve(this.getType());this._parentTypeStack.push(Ce(e)?e:void 0);break}case m.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(Fe(i)?i:void 0);break}case m.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case m.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(Oe(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Wt(t,n):Ve(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Wt(t,e.type);this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ARGUMENT:{var n;let t,r;const i=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();i&&(t=i.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(ke(r)?r:void 0);break}case m.LIST:{const e=je(this.getInputType()),t=we(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(ke(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Ve(this.getInputType());let n,r;De(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ENUM:{const t=Ve(this.getInputType());let n;Ae(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case m.SELECTION_SET:this._parentTypeStack.pop();break;case m.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case m.DIRECTIVE:this._directive=null;break;case m.OPERATION_DEFINITION:case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:this._typeStack.pop();break;case m.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case m.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.LIST:case m.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.ENUM:this._enumValue=null}}}function Zt(e,t,n){const r=n.name.value;return r===kt.name&&e.getQueryType()===t?kt:r===Ft.name&&e.getQueryType()===t?Ft:r===Rt.name&&Ce(t)?Rt:Oe(t)||Se(t)?t.getFields()[r]:void 0}function en(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=de(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),d(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=de(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function tn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function nn(e){return e.kind===m.SCALAR_TYPE_DEFINITION||e.kind===m.OBJECT_TYPE_DEFINITION||e.kind===m.INTERFACE_TYPE_DEFINITION||e.kind===m.UNION_TYPE_DEFINITION||e.kind===m.ENUM_TYPE_DEFINITION||e.kind===m.INPUT_OBJECT_TYPE_DEFINITION}function rn(e){return e.kind===m.SCALAR_TYPE_EXTENSION||e.kind===m.OBJECT_TYPE_EXTENSION||e.kind===m.INTERFACE_TYPE_EXTENSION||e.kind===m.UNION_TYPE_EXTENSION||e.kind===m.ENUM_TYPE_EXTENSION||e.kind===m.INPUT_OBJECT_TYPE_EXTENSION}function on(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=e.args.map((e=>e.name));const i=e.getDocument().definitions;for(const e of i)if(e.kind===m.DIRECTIVE_DEFINITION){var o;const n=null!==(o=e.arguments)&&void 0!==o?o:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const r=n.name.value,i=t[r];if(n.arguments&&i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=re(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+K(o),t))}}return!1}}}function sn(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():Nt;for(const e of i)t[e.name]=e.locations;const o=e.getDocument().definitions;for(const e of o)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,i,o,s,a){const c=n.name.value,u=t[c];if(!u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,n));const l=function(e){const t=e[e.length-1];switch("kind"in t||r(!1),t.kind){case m.OPERATION_DEFINITION:return function(e){switch(e){case f.QUERY:return h.QUERY;case f.MUTATION:return h.MUTATION;case f.SUBSCRIPTION:return h.SUBSCRIPTION}}(t.operation);case m.FIELD:return h.FIELD;case m.FRAGMENT_SPREAD:return h.FRAGMENT_SPREAD;case m.INLINE_FRAGMENT:return h.INLINE_FRAGMENT;case m.FRAGMENT_DEFINITION:return h.FRAGMENT_DEFINITION;case m.VARIABLE_DEFINITION:return h.VARIABLE_DEFINITION;case m.SCHEMA_DEFINITION:case m.SCHEMA_EXTENSION:return h.SCHEMA;case m.SCALAR_TYPE_DEFINITION:case m.SCALAR_TYPE_EXTENSION:return h.SCALAR;case m.OBJECT_TYPE_DEFINITION:case m.OBJECT_TYPE_EXTENSION:return h.OBJECT;case m.FIELD_DEFINITION:return h.FIELD_DEFINITION;case m.INTERFACE_TYPE_DEFINITION:case m.INTERFACE_TYPE_EXTENSION:return h.INTERFACE;case m.UNION_TYPE_DEFINITION:case m.UNION_TYPE_EXTENSION:return h.UNION;case m.ENUM_TYPE_DEFINITION:case m.ENUM_TYPE_EXTENSION:return h.ENUM;case m.ENUM_VALUE_DEFINITION:return h.ENUM_VALUE;case m.INPUT_OBJECT_TYPE_DEFINITION:case m.INPUT_OBJECT_TYPE_EXTENSION:return h.INPUT_OBJECT;case m.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||r(!1),t.kind===m.INPUT_OBJECT_TYPE_DEFINITION?h.INPUT_FIELD_DEFINITION:h.ARGUMENT_DEFINITION}default:r(!1,"Unexpected kind: "+P(t.kind))}}(a);l&&!u.includes(l)&&e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,n))}}}function an(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(r[t.name.value]=!0);const i=[...Object.keys(n),...Object.keys(r)];return{NamedType(t,o,s,a,c){const u=t.name.value;if(!n[u]&&!r[u]){var l;const n=null!==(l=c[2])&&void 0!==l?l:s,r=null!=n&&("kind"in(p=n)&&(function(e){return e.kind===m.SCHEMA_DEFINITION||nn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||rn(e)}(p)));if(r&&cn.includes(u))return;const o=re(u,r?cn.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+K(o),t))}var p}}}const cn=[...pt,...Ct].map((e=>e.name));function un(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const r=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))r[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==r[n]&&e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,t))}}}}}function ln(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:ln(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(ln)};case m.INT:case m.FLOAT:case m.STRING:case m.BOOLEAN:case m.NULL:case m.ENUM:case m.VARIABLE:return e}var t}function pn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+pn(t))).join(" and "):e}function dn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=Tn(e,n,a);if(o!==c){hn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),dn(e,t,n,r,i,o,a))}}function fn(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]=Tn(e,n,a),[p,d]=Tn(e,n,c);hn(e,t,n,r,i,u,p);for(const s of d)fn(e,t,n,r,i,o,s);for(const o of l)fn(e,t,n,r,i,o,s)}function hn(e,t,n,r,i,o,s){for(const[a,c]of Object.entries(o)){const o=s[a];if(o)for(const s of c)for(const c of o){const o=mn(e,n,r,i,a,s,c);o&&t.push(o)}}}function mn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&Oe(a)&&Oe(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(vn(c)!==vn(p))return[[i,"they have differing arguments"],[c],[p]]}const h=null==u?void 0:u.type,m=null==d?void 0:d.type;if(h&&m&&yn(h,m))return[[i,`they return conflicting types "${P(h)}" and "${P(m)}"`],[c],[p]];const v=c.selectionSet,y=p.selectionSet;if(v&&y){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=En(e,t,i,o),[p,d]=En(e,t,s,a);hn(e,c,t,n,r,u,p);for(const i of d)dn(e,c,t,n,r,u,i);for(const i of l)dn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)fn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ve(h),v,Ve(m),y);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 vn(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(ln({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function yn(e,t){return we(e)?!we(t)||yn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||yn(e.ofType,t.ofType):!!xe(t)||!(!Re(e)&&!Re(t))&&e!==t)}function En(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);Nn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function Tn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Wt(e.getSchema(),n.typeCondition);return En(e,t,i,n.selectionSet)}function Nn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(Oe(t)||Se(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;r[i]||(r[i]=[]),r[i].push([t,o,n]);break}case m.FRAGMENT_SPREAD:i[o.name.value]=!0;break;case m.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?Wt(e.getSchema(),n):t;Nn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){var r;const[i,o]=ee.name));const o=e.getDocument().definitions;for(const e of o)if(e.kind===m.DIRECTIVE_DEFINITION){var s;const t=null!==(s=e.arguments)&&void 0!==s?s:[];n[e.name.value]=H(t.filter(_n),(e=>e.name.value))}return{Directive:{leave(t){const r=t.name.value,i=n[r];if(i){var o;const n=null!==(o=t.arguments)&&void 0!==o?o:[],s=new Set(n.map((e=>e.name.value)));for(const[n,o]of Object.entries(i))if(!s.has(n)){const i=_e(o.type)?P(o.type):fe(o.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${n}" of type "${i}" is required, but it was not provided.`,t))}}}}}}function _n(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function bn(e,t,n){if(e){if(e.kind===m.VARIABLE){const r=e.name.value;if(null==n||void 0===n[r])return;const i=n[r];if(null===i&&xe(t))return;return i}if(xe(t)){if(e.kind===m.NULL)return;return bn(e,t.ofType,n)}if(e.kind===m.NULL)return null;if(we(t)){const r=t.ofType;if(e.kind===m.LIST){const t=[];for(const i of e.values)if(On(i,n)){if(xe(r))return;t.push(null)}else{const e=bn(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=bn(e,r,n);if(void 0===i)return;return[i]}if(De(t)){if(e.kind!==m.OBJECT)return;const r=Object.create(null),i=H(e.fields,(e=>e.name.value));for(const e of Object.values(t.getFields())){const t=i[e.name];if(!t||On(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=bn(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Re(t)){let r;try{r=t.parseLiteral(e,n)}catch(e){return}if(void 0===r)return;return r}r(!1,"Unexpected input type: "+P(t))}}function On(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function Sn(e,t,n){var r;const i=null===(r=t.directives)||void 0===r?void 0:r.find((t=>t.name.value===e.name));if(i)return function(e,t,n){var r;const i={},o=H(null!==(r=t.arguments)&&void 0!==r?r:[],(e=>e.name.value));for(const r of e.args){const e=r.name,c=r.type,u=o[e];if(!u){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was not provided.`,t);continue}const l=u.value;let p=l.kind===m.NULL;if(l.kind===m.VARIABLE){const t=l.name.value;if(null==n||(s=n,a=t,!Object.prototype.hasOwnProperty.call(s,a))){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was provided the variable "$${t}" which was not provided a runtime value.`,l);continue}p=null==n[t]}if(p&&xe(c))throw new GraphQLError(`Argument "${e}" of non-null type "${P(c)}" must not be null.`,l);const d=bn(l,c,n);if(void 0===d)throw new GraphQLError(`Argument "${e}" has invalid value ${fe(l)}.`,l);i[e]=d}var s,a;return i}(e,i,n)}function Ln(e,t,n,r,i){const o=new Map;return An(e,t,n,r,i,o,new Set),o}function An(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!Dn(n,c))continue;const e=(a=c).alias?a.alias.value:a.name.value,t=o.get(e);void 0!==t?t.push(c):o.set(e,[c]);break}case m.INLINE_FRAGMENT:if(!Dn(n,c)||!wn(e,c,r))continue;An(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!Dn(n,c))continue;s.add(i);const a=t[i];if(!a||!wn(e,a,r))continue;An(e,t,n,r,a.selectionSet,o,s);break}}var a}function Dn(e,t){const n=Sn(vt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=Sn(mt,t,e);return!1!==(null==r?void 0:r.if)}function wn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Wt(e,r);return i===n||!!Ge(i)&&e.isSubType(i,n)}function xn(e,t){const n=new Map;for(const r of e){const e=t(r),i=n.get(e);void 0===i?n.set(e,[r]):i.push(r)}return n}function kn(e){return{Field:t,Directive:t};function t(t){var n;const r=xn(null!==(n=t.arguments)&&void 0!==n?n:[],(e=>e.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}function Fn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=!e.isRepeatable;const i=e.getDocument().definitions;for(const e of i)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const o=Object.create(null),s=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION)r=o;else if(nn(n)||rn(n)){const e=n.name.value;r=s[e],void 0===r&&(s[e]=r=Object.create(null))}else r=Object.create(null);for(const i of n.directives){const n=i.name.value;t[n]&&(r[n]?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,[r[n],i])):r[n]=i)}}}}function Rn(e,t){return!!(Oe(e)||Se(e)||De(e))&&null!=e.getFields()[t]}function Cn(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||r(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new GraphQLError(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}function Gn(e,t){const n=e.getInputType();if(!n)return;const r=Ve(n);if(Re(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}catch(r){const i=P(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${fe(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}function $n(e,t,n,r,i){if(xe(r)&&!xe(t)){const o=void 0!==i;if(!(null!=n&&n.kind!==m.NULL)&&!o)return!1;return nt(e,t,r.ofType)}return nt(e,t,r)}const Qn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!tn(n)){const t=n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,n))}return!1}}},function(e){const t=Object.create(null);return{OperationDefinition(n){const r=n.name;return r&&(t[r.value]?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,[t[r.value],r])):t[r.value]=r),!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===m.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",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===m.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const c=Ln(n,a,o,r,t.selectionSet);if(c.size>1){const t=[...c.values()].slice(1).flat();e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of c.values()){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.",t))}}}}}},an,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Wt(e.getSchema(),n);if(t&&!Ce(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Wt(e.getSchema(),t.typeCondition);if(n&&!Ce(n)){const n=fe(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,t.typeCondition))}}}},function(e){return{VariableDefinition(t){const n=Wt(e.getSchema(),t.type);if(void 0!==n&&!ke(n)){const n=t.variable.name.value,r=fe(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,t.type))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Re(Ve(n))){if(r){const i=t.name.value,o=P(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,r))}}else if(!r){const r=t.name.value,i=P(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,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=K("to use an inline fragment on",function(e,t,n){if(!Ge(t))return[];const r=new Set,i=Object.create(null);for(const s of e.getPossibleTypes(t))if(s.getFields()[n]){r.add(s),i[s.name]=1;for(const e of s.getInterfaces()){var o;e.getFields()[n]&&(r.add(e),i[e.name]=(null!==(o=i[e.name])&&void 0!==o?o:0)+1)}}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Se(t)&&e.isSubType(t,n)?-1:Se(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=K(function(e,t){if(Oe(e)||Se(e)){return re(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,t))}}}}},function(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value;return t[r]?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,[t[r],n.name])):t[r]=n.name,!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,t.name))}}},un,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ce(n)&&Ce(r)&&!rt(e.getSchema(),n,r)){const i=P(r),o=P(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,t))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=Wt(e.getSchema(),n.typeCondition);if(Ce(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!rt(e.getSchema(),r,i)){const o=P(i),s=P(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,t))}}}},function(e){const t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t[o.name.value])return;const s=o.name.value;t[s]=!0;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}.`:"."),t))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){var n;const r=xn(null!==(n=t.variableDefinitions)&&void 0!==n?n:[],(e=>e.variable.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:i}of r){const r=i.name.value;!0!==t[r]&&e.reportError(new GraphQLError(n.name?`Variable "$${r}" is not defined by operation "${n.name.value}".`:`Variable "$${r}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}},function(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){const r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(const{node:e}of i)r[e.name.value]=!0;for(const i of t){const t=i.variable.name.value;!0!==r[t]&&e.reportError(new GraphQLError(n.name?`Variable "$${t}" is never used in operation "${n.name.value}".`:`Variable "$${t}" is never used.`,i))}}},VariableDefinition(e){t.push(e)}}},sn,Fn,function(e){return{...on(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=re(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+K(o),t))}}}},kn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Gn(e,t),!1},ObjectValue(t){const n=Ve(e.getInputType());if(!De(n))return Gn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&et(i)){const r=P(i.type);e.reportError(new GraphQLError(`Field "${n.name}.${i.name}" of required type "${r}" was not provided.`,t))}}},ObjectField(t){const n=Ve(e.getParentInputType());if(!e.getInputType()&&De(n)){const r=re(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+K(r),t))}},NullValue(t){const n=e.getInputType();xe(n)&&e.reportError(new GraphQLError(`Expected value of type "${P(n)}", found ${fe(t)}.`,t))},EnumValue:t=>Gn(e,t),IntValue:t=>Gn(e,t),FloatValue:t=>Gn(e,t),StringValue:t=>Gn(e,t),BooleanValue:t=>Gn(e,t)}},function(e){return{...gn(e),Field:{leave(t){var n;const r=e.getFieldDef();if(!r)return!1;const i=new Set(null===(n=t.arguments)||void 0===n?void 0:n.map((e=>e.name.value)));for(const n of r.args)if(!i.has(n.name)&&ze(n)){const i=P(n.type);e.reportError(new GraphQLError(`Field "${r.name}" argument "${n.name}" of type "${i}" is required, but it was not provided.`,t))}}}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t[r];if(s&&i){const t=e.getSchema(),a=Wt(t,s.type);if(a&&!$n(t,a,s.defaultValue,i,o)){const t=P(a),o=P(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,[s,n]))}}}}},VariableDefinition(e){t[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]=En(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of Object.entries(i))if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",t)),++s)}}},function(e){const t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const o=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of o){const i=t.operation,o=n[i];r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,[o,t])):n[i]=t}return!1}},function(e){const t=Object.create(null),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(null==n||!n.getType(i))return t[i]?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,r.name))}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.values)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value,i=n[o];Ae(i)&&i.getValue(r)?e.reportError(new GraphQLError(`Enum value "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Enum value "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.fields)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value;Rn(n[o],r)?e.reportError(new GraphQLError(`Field "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Field "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,i=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of i){var o;n(`${r}.${e.name.value}`,null!==(o=e.arguments)&&void 0!==o?o:[])}return!1}function n(t,n){const r=xn(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.`,i.map((e=>e.name))));return!1}},function(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,r.name))}}},an,sn,Fn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(n[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=n[o],a=null==t?void 0:t.getType(o);let c;if(s?c=In[s.kind]:a&&(c=function(e){if(be(e))return m.SCALAR_TYPE_EXTENSION;if(Oe(e))return m.OBJECT_TYPE_EXTENSION;if(Se(e))return m.INTERFACE_TYPE_EXTENSION;if(Le(e))return m.UNION_TYPE_EXTENSION;if(Ae(e))return m.ENUM_TYPE_EXTENSION;if(De(e))return m.INPUT_OBJECT_TYPE_EXTENSION;r(!1,"Unexpected type: "+P(e))}(a)),c){if(c!==i.kind){const t=function(e){switch(e){case m.SCALAR_TYPE_EXTENSION:return"scalar";case m.OBJECT_TYPE_EXTENSION:return"object";case m.INTERFACE_TYPE_EXTENSION:return"interface";case m.UNION_TYPE_EXTENSION:return"union";case m.ENUM_TYPE_EXTENSION:return"enum";case m.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:r(!1,"Unexpected kind: "+P(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,s?[s,i]:i))}}else{const r=re(o,Object.keys({...n,...null==t?void 0:t.getTypeMap()}));e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+K(r),i.name))}}},on,kn,Cn,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===m.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===m.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=Object.create(null),r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!0!==n[i]){n[i]=!0;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);le(e,en(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 Un(e,n,r=Qn,i,o=new TypeInfo(e)){var s;const a=null!==(s=null==i?void 0:i.maxErrors)&&void 0!==s?s:100;n||t(!1,"Must provide document."),function(e){const t=jt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const c=Object.freeze({}),u=[],l=new ValidationContext(e,n,o,(e=>{if(u.length>=a)throw u.push(new GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;u.push(e)})),p=pe(r.map((e=>e(l))));try{le(n,en(o,p))}catch(e){if(e!==c)throw e}return u}function Vn(e,t,n=jn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Mn(e,r){n(e)&&n(e.__schema)||t(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${P(e)}.`);const i=e.__schema,o=W(i.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case wt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case wt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case wt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case wt.UNION:return function(e){if(!e.possibleTypes){const t=P(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(d)})}(e);case wt.ENUM:return function(e){if(!e.enumValues){const t=P(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:W(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case wt.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=P(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>E(e.inputFields)})}(e)}var t;var n;var r;const i=P(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}.`)}(e)));for(const e of[...pt,...Ct])o[e.name]&&(o[e.name]=e);const s=i.queryType?d(i.queryType):null,a=i.mutationType?d(i.mutationType):null,c=i.subscriptionType?d(i.subscriptionType):null,u=i.directives?i.directives.map((function(e){if(!e.args){const t=P(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=P(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:E(e.args)})})):[];return new GraphQLSchema({description:i.description,query:s,mutation:a,subscription:c,types:Object.values(o),directives:u,assumeValid:null==r?void 0:r.assumeValid});function l(e){if(e.kind===wt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===wt.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=l(t);return new GraphQLNonNull(function(e){if(!Qe(e))throw new Error(`Expected ${P(e)} to be a GraphQL nullable type.`);return e}(n))}return p(e)}function p(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${P(e)}.`);const n=o[t];if(!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 d(e){return function(e){if(!Oe(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Se(e))throw new Error(`Expected ${P(e)} to be a GraphQL Interface type.`);return e}(p(e))}function h(e){if(null===e.interfaces&&e.kind===wt.INTERFACE)return[];if(!e.interfaces){const t=P(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(f)}function m(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${P(e)}.`);return W(e.fields,(e=>e.name),y)}function y(e){const t=l(e.type);if(!Fe(t)){const e=P(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=P(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:E(e.args)}}function E(e){return W(e,(e=>e.name),T)}function T(e){const t=l(e.type);if(!ke(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?bn(function(e,t){const n=new Parser(e,t);n.expectToken(v.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(v.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function Pn(e,t,n){var i,o,s,a;const c=[],u=Object.create(null),l=[];let p;const d=[];for(const e of t.definitions)if(e.kind===m.SCHEMA_DEFINITION)p=e;else if(e.kind===m.SCHEMA_EXTENSION)d.push(e);else if(nn(e))c.push(e);else if(rn(e)){const t=e.name.value,n=u[t];u[t]=n?n.concat([e]):[e]}else e.kind===m.DIRECTIVE_DEFINITION&&l.push(e);if(0===Object.keys(u).length&&0===c.length&&0===l.length&&0===d.length&&null==p)return e;const f=Object.create(null);for(const t of e.types)f[t.name]=T(t);for(const e of c){var h;const t=e.name.value;f[t]=null!==(h=Bn[t])&&void 0!==h?h:x(e)}const v={query:e.query&&E(e.query),mutation:e.mutation&&E(e.mutation),subscription:e.subscription&&E(e.subscription),...p&&g([p]),...g(d)};return{description:null===(i=p)||void 0===i||null===(o=i.description)||void 0===o?void 0:o.value,...v,types:Object.values(f),directives:[...e.directives.map((function(e){const t=e.toConfig();return new GraphQLDirective({...t,args:Z(t.args,I)})})),...l.map((function(e){var t;return new GraphQLDirective({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:S(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(s=p)&&void 0!==s?s:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(d),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a};function y(e){return we(e)?new GraphQLList(y(e.ofType)):xe(e)?new GraphQLNonNull(y(e.ofType)):E(e)}function E(e){return f[e.name]}function T(e){return Gt(e)||dt(e)?e:be(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];let i=n.specifiedByURL;for(const e of r){var o;i=null!==(o=Jn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Oe(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLObjectType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Se(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Le(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLUnionType({...n,types:()=>[...e.getTypes().map(E),...w(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Ae(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[e.name])&&void 0!==t?t:[];return new GraphQLEnumType({...n,values:{...n.values,...A(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):De(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInputObjectType({...n,fields:()=>({...Z(n.fields,(e=>({...e,type:y(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):void r(!1,"Unexpected type: "+P(e))}function N(e){return{...e,type:y(e.type),args:e.args&&Z(e.args,I)}}function I(e){return{...e,type:y(e.type)}}function g(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=_(n.type)}return t}function _(e){var t;const n=e.name.value,r=null!==(t=Bn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function b(e){return e.kind===m.LIST_TYPE?new GraphQLList(b(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(b(e.type)):_(e)}function O(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:b(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:S(n.arguments),deprecationReason:Yn(n),astNode:n}}}return t}function S(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=b(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:bn(e.defaultValue,t),deprecationReason:Yn(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=b(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:bn(n.defaultValue,e),deprecationReason:Yn(n),astNode:n}}}return t}function A(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:Yn(n),astNode:n}}}return t}function D(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function w(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function x(e){var t;const n=e.name.value,r=null!==(t=u[n])&&void 0!==t?t:[];switch(e.kind){case m.OBJECT_TYPE_DEFINITION:{var i;const t=[e,...r];return new GraphQLObjectType({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.INTERFACE_TYPE_DEFINITION:{var o;const t=[e,...r];return new GraphQLInterfaceType({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.ENUM_TYPE_DEFINITION:{var s;const t=[e,...r];return new GraphQLEnumType({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,values:A(t),astNode:e,extensionASTNodes:r})}case m.UNION_TYPE_DEFINITION:{var a;const t=[e,...r];return new GraphQLUnionType({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,types:()=>w(t),astNode:e,extensionASTNodes:r})}case m.SCALAR_TYPE_DEFINITION:var c;return new GraphQLScalarType({name:n,description:null===(c=e.description)||void 0===c?void 0:c.value,specifiedByURL:Jn(e),astNode:e,extensionASTNodes:r});case m.INPUT_OBJECT_TYPE_DEFINITION:{var l;const t=[e,...r];return new GraphQLInputObjectType({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const Bn=H([...pt,...Ct],(e=>e.name));function Yn(e){const t=Sn(Et,e);return null==t?void 0:t.reason}function Jn(e){const t=Sn(Tt,e);return null==t?void 0:t.url}function qn(e,n){null!=e&&e.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&function(e){const t=Vn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Pn({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,n);if(null==r.astNode)for(const e of r.types)switch(e.name){case"Query":r.query=e;break;case"Mutation":r.mutation=e;break;case"Subscription":r.subscription=e}const i=[...r.directives,...Nt.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Xn(e){return function(e,t,n){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[zn(e),...i.map((e=>function(e){return rr(e)+"directive @"+e.name+er(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(be(e))return function(e){return rr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(Oe(e))return function(e){return rr(e)+`type ${e.name}`+Hn(e)+Wn(e)}(e);if(Se(e))return function(e){return rr(e)+`interface ${e.name}`+Hn(e)+Wn(e)}(e);if(Le(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return rr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>rr(e," ",!t)+" "+e.name+nr(e.deprecationReason)));return rr(e)+`enum ${e.name}`+Zn(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+tr(e)));return rr(e)+`input ${e.name}`+Zn(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!Nt.some((({name:e})=>e===t.name));var t}),Kn)}function Kn(e){return!dt(e)&&!Gt(e)}function zn(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();if(r&&"Subscription"!==r.name)return!1;return!0}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),rr(e)+`schema {\n${t.join("\n")}\n}`}function Hn(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Wn(e){return Zn(Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+e.name+er(e.args," ")+": "+String(e.type)+nr(e.deprecationReason))))}function Zn(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function er(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(tr).join(", ")+")":"(\n"+e.map(((e,n)=>rr(e," "+t,!n)+" "+t+tr(e))).join("\n")+"\n"+t+")"}function tr(e){const t=It(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+nr(e.deprecationReason)}function nr(e){if(null==e)return"";if(e!==yt){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function rr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+fe({kind:m.STRING,value:r,block:b(r)}).replace(/\n/g,"\n"+t)+"\n"}const ir=[un],or=[function(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.",t)),!1)}},function(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.",t))}}},...Qn.filter((e=>!ir.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function sr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function ar(e){return e.startsWith("__")}function cr(e){return null!=e}function ur(e){switch(e.kind){case m.VARIABLE:return{kind:e.kind,value:e.name.value};case m.LIST:return{kind:e.kind,value:e.values.map(ur)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=ur(t.value),e)),{})};default:return e}}function lr(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 pr(e,t){const n=new Map;for(const e of t.definitions)e.kind===m.FRAGMENT_DEFINITION&&n.set(e.name.value,e);const r=[],i=new Map,o=new Set;for(const e of t.definitions)e.kind===m.OPERATION_DEFINITION&&r.push(a(e));for(const[e,t]of n.entries())i.set(e,c(t));return{operations:r,fragments:Array.from(i.values()),referencedTypes:Array.from(o.values())};function s(e){if(o.add(e),Le(e)){const t=e.getTypes();for(e of t)o.add(Ve(e))}}function a(t){if(!t.name)throw new GraphQLError("Operations should be named",t);const n=lr(t),r=t.name.value,i=t.operation,a=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?ur(t.defaultValue):void 0,i=Wt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,t);return s(Ve(i)),{name:n,type:i,defaultValue:r}})),c=fe(t),l=e.getRootType(i);return o.add(Ve(l)),{filePath:n,name:r,operationType:i,rootType:l,variables:a,source:c,selectionSet:u(t.selectionSet,l)}}function c(t){const n=t.name.value,r=lr(t),i=fe(t),o=Wt(e,t.typeCondition);return s(Ve(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r,o=new Set){return{parentType:r,selections:t.selections.map((t=>function(t,r,o){var a;switch(t.kind){case m.FIELD:{const n=t.name.value,i=null===(a=t.alias)||void 0===a?void 0:a.value,o=function(e,t,n){return n===kt.name&&e.getQueryType()===t?kt:n===Ft.name&&e.getQueryType()===t?Ft:n===Rt.name&&(Oe(t)||Se(t)||Le(t))?Rt:Oe(t)||Se(t)?t.getFields()[n]:void 0}(e,r,n);if(!o)throw new GraphQLError(`Cannot query field "${n}" on type "${String(r)}"`,t);const c=o.type,l=Ve(c);s(Ve(l));const{description:p,deprecationReason:d}=o,f=t.arguments&&t.arguments.length>0?t.arguments.map((e=>{const t=e.name.value,n=o.args.find((t=>t.name===e.name.value)),r=n&&n.type||void 0;return{name:t,value:ur(e.value),type:r}})):void 0;let h={kind:"Field",name:n,alias:i,arguments:f,type:c,description:!ar(n)&&p?p:void 0,deprecationReason:d||void 0};if(Ce(l)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,t);h.selectionSet=u(e,l)}return h}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Wt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i)}}case m.FRAGMENT_SPREAD:{const e=t.name.value;if(o.has(e))return;o.add(e);const r=function(e){let t=i.get(e);if(t)return t;const r=n.get(e);return r?(n.delete(e),t=c(r),i.set(e,t),t):void 0}(e);if(!r)throw new GraphQLError(`Unknown fragment "${e}".`,t.name);return{kind:"FragmentSpread",fragment:r}}}}(t,r,o))).filter(cr)}}}return m.FIELD,m.NAME,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){return pr(e,t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Mn(t);return sr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Vn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=qn(t,{assumeValidSDL:!0});return sr(n),n},e.mergeDocuments=function(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)},e.parseDocument=function(e){return J(e)},e.printSchemaToSDL=function(e){return Xn(e)},e.validateDocument=function(e,t){return Un(e,t,or)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); From 001a49a01d74a4137a1c7d4a4e3aa0a6a4eb44d1 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Wed, 16 Feb 2022 13:36:00 -0800 Subject: [PATCH 11/25] Add pet adoption mutation --- Apollo.xcodeproj/project.pbxproj | 26 +++++++++ .../Operations/AllAnimalsQuery.swift | 4 +- .../Operations/ClassroomPetDetails.swift | 4 +- .../Operations/ClassroomPetsQuery.swift | 2 +- .../Operations/PetAdoptionMutation.swift | 56 +++++++++++++++++++ .../AnimalKingdomAPI/Generated/Package.swift | 4 +- .../InputObjects/MeasurementsInput.swift | 35 ++++++++++++ .../InputObjects/PetAdoptionInput.swift | 56 +++++++++++++++++++ .../Generated/Schema/Objects/Mutation.swift | 12 ++++ .../Generated/Schema/Schema.swift | 1 + .../graphql/AnimalSchema.graphqls | 34 ++++++++++- .../graphql/PetAdoptionMutation.graphql | 6 ++ .../Frontend/JavaScript/src/compiler/index.ts | 18 ++++++ .../dist/ApolloCodegenFrontend.bundle.js | 2 +- 14 files changed, 251 insertions(+), 9 deletions(-) create mode 100644 Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift create mode 100644 Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift create mode 100644 Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift create mode 100644 Sources/AnimalKingdomAPI/Generated/Schema/Objects/Mutation.swift create mode 100644 Sources/AnimalKingdomAPI/graphql/PetAdoptionMutation.graphql diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 8aea691588..70ed767bff 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -262,6 +262,10 @@ DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */; }; DE6D080127BC802D009F5F33 /* GraphQLValue+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */; }; + DE6D080427BD9A91009F5F33 /* PetAdoptionMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */; }; + DE6D080727BD9AA9009F5F33 /* PetAdoptionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */; }; + DE6D080927BD9ABA009F5F33 /* Mutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080827BD9ABA009F5F33 /* Mutation.swift */; }; + DE6D083327BDA211009F5F33 /* MeasurementsInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D083227BDA211009F5F33 /* MeasurementsInput.swift */; }; DE736F4626FA6EE6007187F2 /* InflectorKit in Frameworks */ = {isa = PBXBuildFile; productRef = E6E4209126A7DF4200B82624 /* InflectorKit */; }; DE796429276998B000978A03 /* IR+RootFieldBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */; }; DE79642B276999E700978A03 /* IRNamedFragmentBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */; }; @@ -989,6 +993,11 @@ DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationDefinition_VariableDefinition_Tests.swift; sourceTree = ""; }; DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OperationVariableDefinition+Rendered.swift"; sourceTree = ""; }; DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLValue+Rendered.swift"; sourceTree = ""; }; + DE6D080227BD9933009F5F33 /* PetAdoptionMutation.graphql */ = {isa = PBXFileReference; lastKnownFileType = text; path = PetAdoptionMutation.graphql; sourceTree = ""; }; + DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionMutation.swift; sourceTree = ""; }; + DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionInput.swift; sourceTree = ""; }; + DE6D080827BD9ABA009F5F33 /* Mutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mutation.swift; sourceTree = ""; }; + DE6D083227BDA211009F5F33 /* MeasurementsInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeasurementsInput.swift; sourceTree = ""; }; DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+RootFieldBuilder.swift"; sourceTree = ""; }; DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IRNamedFragmentBuilderTests.swift; sourceTree = ""; }; DE79642C27699A6A00978A03 /* IR+NamedFragmentBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+NamedFragmentBuilder.swift"; sourceTree = ""; }; @@ -2079,6 +2088,7 @@ children = ( DE2FCF2E26E8092B0057EA67 /* AllAnimalsQuery.graphql */, DE2FCF2D26E8092B0057EA67 /* AnimalSchema.graphqls */, + DE6D080227BD9933009F5F33 /* PetAdoptionMutation.graphql */, DE2FCF2F26E8092B0057EA67 /* ClassroomPets.graphql */, DE2FCF3226E8092B0057EA67 /* HeightInMeters.graphql */, DE2FCF3126E8092B0057EA67 /* PetDetails.graphql */, @@ -2169,6 +2179,15 @@ path = RenderingHelpers; sourceTree = ""; }; + DE6D080527BD9AA9009F5F33 /* InputObjects */ = { + isa = PBXGroup; + children = ( + DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */, + DE6D083227BDA211009F5F33 /* MeasurementsInput.swift */, + ); + path = InputObjects; + sourceTree = ""; + }; DE9C04AB26EA763E00EC35E7 /* Accumulators */ = { isa = PBXGroup; children = ( @@ -2305,6 +2324,7 @@ E603765827B2FB1900E7B060 /* HeightInMeters.swift */, E603765927B2FB1900E7B060 /* ClassroomPetDetails.swift */, E603765A27B2FB1900E7B060 /* ClassroomPetsQuery.swift */, + DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */, E603765B27B2FB1900E7B060 /* AllAnimalsQuery.swift */, E603765C27B2FB1900E7B060 /* WarmBloodedDetails.swift */, ); @@ -2314,6 +2334,7 @@ E603765D27B2FB1900E7B060 /* Schema */ = { isa = PBXGroup; children = ( + DE6D080527BD9AA9009F5F33 /* InputObjects */, E603765E27B2FB1900E7B060 /* Unions */, E603766027B2FB1900E7B060 /* Enums */, E603766327B2FB1900E7B060 /* Objects */, @@ -2343,6 +2364,7 @@ E603766327B2FB1900E7B060 /* Objects */ = { isa = PBXGroup; children = ( + DE6D080827BD9ABA009F5F33 /* Mutation.swift */, E603766427B2FB1900E7B060 /* Query.swift */, E603766527B2FB1900E7B060 /* Bird.swift */, E603766627B2FB1900E7B060 /* Human.swift */, @@ -3498,12 +3520,15 @@ E603864227B2FB1D00E7B060 /* ClassroomPet.swift in Sources */, E603864F27B2FB1D00E7B060 /* WarmBlooded.swift in Sources */, E603863F27B2FB1D00E7B060 /* ClassroomPetsQuery.swift in Sources */, + DE6D080727BD9AA9009F5F33 /* PetAdoptionInput.swift in Sources */, E603864D27B2FB1D00E7B060 /* Animal.swift in Sources */, E603864527B2FB1D00E7B060 /* Query.swift in Sources */, DE223C24271F335D004A0148 /* Resources.swift in Sources */, E603864B27B2FB1D00E7B060 /* PetRock.swift in Sources */, E603864027B2FB1D00E7B060 /* AllAnimalsQuery.swift in Sources */, + DE6D080927BD9ABA009F5F33 /* Mutation.swift in Sources */, E603864427B2FB1D00E7B060 /* RelativeSize.swift in Sources */, + DE6D083327BDA211009F5F33 /* MeasurementsInput.swift in Sources */, E603864627B2FB1D00E7B060 /* Bird.swift in Sources */, E603864927B2FB1D00E7B060 /* Rat.swift in Sources */, E603863E27B2FB1D00E7B060 /* ClassroomPetDetails.swift in Sources */, @@ -3514,6 +3539,7 @@ E603864E27B2FB1D00E7B060 /* Pet.swift in Sources */, E603864327B2FB1D00E7B060 /* SkinCovering.swift in Sources */, E603864727B2FB1D00E7B060 /* Human.swift in Sources */, + DE6D080427BD9A91009F5F33 /* PetAdoptionMutation.swift in Sources */, E603864827B2FB1D00E7B060 /* Cat.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/AllAnimalsQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/AllAnimalsQuery.swift index 1d49dfc30b..62ccfef2a6 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/AllAnimalsQuery.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/AllAnimalsQuery.swift @@ -372,10 +372,10 @@ public class AllAnimalsQuery: GraphQLQuery { public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Bird.self) } public static var selections: [Selection] { [ - .field("wingspan", Int.self), + .field("wingspan", Float.self), ] } - public var wingspan: Int { data["wingspan"] } + public var wingspan: Float { data["wingspan"] } public var height: Height { data["height"] } public var species: String { data["species"] } public var skinCovering: GraphQLEnum? { data["skinCovering"] } diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetDetails.swift b/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetDetails.swift index 520e842031..5ec3de09b0 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetDetails.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetDetails.swift @@ -113,10 +113,10 @@ public struct ClassroomPetDetails: AnimalKingdomAPI.SelectionSet, Fragment { public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Bird.self) } public static var selections: [Selection] { [ - .field("wingspan", Int.self), + .field("wingspan", Float.self), ] } - public var wingspan: Int { data["wingspan"] } + public var wingspan: Float { data["wingspan"] } public var species: String { data["species"] } public var humanName: String? { data["humanName"] } public var laysEggs: Bool { data["laysEggs"] } diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetsQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetsQuery.swift index 6113d4d444..85988fb3a7 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetsQuery.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/ClassroomPetsQuery.swift @@ -137,7 +137,7 @@ public class ClassroomPetsQuery: GraphQLQuery { public var species: String { data["species"] } public var humanName: String? { data["humanName"] } public var laysEggs: Bool { data["laysEggs"] } - public var wingspan: Int { data["wingspan"] } + public var wingspan: Float { data["wingspan"] } public struct Fragments: FragmentContainer { public let data: DataDict diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift new file mode 100644 index 0000000000..6c3de02612 --- /dev/null +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift @@ -0,0 +1,56 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI + +public class PetAdoptionMutation: GraphQLMutation { + public let operationName: String = "PetAdoptionMutation" + public let document: DocumentType = .notPersisted( + definition: .init( + """ + mutation PetAdoptionMutation($input: PetAdoptionInput!) { + adoptPet(input: $input) { + id + humanName + } + } + """ + )) + + public var input: PetAdoptionInput + + public init(input: PetAdoptionInput) { + self.input = input + } + + public var variables: Variables? { + ["input": input] + } + + public struct Data: AnimalKingdomAPI.SelectionSet { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Mutation.self) } + public static var selections: [Selection] { [ + .field("adoptPet", AdoptPet.self), + ] } + + public var adoptPet: AdoptPet { data["adoptPet"] } + + /// AdoptPet + public struct AdoptPet: AnimalKingdomAPI.SelectionSet { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Interface(AnimalKingdomAPI.Pet.self) } + public static var selections: [Selection] { [ + .field("id", ID?.self), + .field("humanName", String?.self), + ] } + + public var id: ID? { data["id"] } + public var humanName: String? { data["humanName"] } + } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Package.swift b/Sources/AnimalKingdomAPI/Generated/Package.swift index d8256797c0..35825a33ea 100644 --- a/Sources/AnimalKingdomAPI/Generated/Package.swift +++ b/Sources/AnimalKingdomAPI/Generated/Package.swift @@ -14,7 +14,7 @@ let package = Package( .library(name: "AnimalKingdomAPI", targets: ["AnimalKingdomAPI"]), ], dependencies: [ - .package(url: "https://github.com/apollographql/apollo-ios.git", .branch("release/1.0-alpha-incubating")), + .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0-alpha.1"), ], targets: [ .target( @@ -25,4 +25,4 @@ let package = Package( path: "." ), ] -) +) \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift new file mode 100644 index 0000000000..409314ed40 --- /dev/null +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -0,0 +1,35 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI + +struct MeasurementsInput: InputObject { + private(set) public var dict: InputDict + + init( + height: Float, + weight: Float, + wingspan: GraphQLNullable = nil + ) { + dict = InputDict([ + "height": height, + "weight": weight, + "wingspan": wingspan + ]) + } + + var height: Float { + get { dict["height"] } + set { dict["height"] = newValue } + } + + var weight: Float { + get { dict["weight"] } + set { dict["weight"] = newValue } + } + + var wingspan: GraphQLNullable { + get { dict["wingspan"] } + set { dict["wingspan"] = newValue } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift new file mode 100644 index 0000000000..5c28cb3d78 --- /dev/null +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -0,0 +1,56 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI + +struct PetAdoptionInput: InputObject { + private(set) public var dict: InputDict + + init( + ownerID: ID, + petID: ID, + humanName: GraphQLNullable = nil, + favoriteToy: String, + isSpayedOrNeutered: Bool?, + measurements: GraphQLNullable = nil + ) { + dict = InputDict([ + "ownerID": ownerID, + "petID": petID, + "humanName": humanName, + "favoriteToy": favoriteToy, + "isSpayedOrNeutered": isSpayedOrNeutered, + "measurements": measurements + ]) + } + + var ownerID: ID { + get { dict["ownerID"] } + set { dict["ownerID"] = newValue } + } + + var petID: ID { + get { dict["petID"] } + set { dict["petID"] = newValue } + } + + var humanName: GraphQLNullable { + get { dict["humanName"] } + set { dict["humanName"] = newValue } + } + + var favoriteToy: String { + get { dict["favoriteToy"] } + set { dict["favoriteToy"] = newValue } + } + + var isSpayedOrNeutered: Bool? { + get { dict["isSpayedOrNeutered"] } + set { dict["isSpayedOrNeutered"] = newValue } + } + + var measurements: GraphQLNullable { + get { dict["measurements"] } + set { dict["measurements"] = newValue } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/Objects/Mutation.swift b/Sources/AnimalKingdomAPI/Generated/Schema/Objects/Mutation.swift new file mode 100644 index 0000000000..89e6dffd92 --- /dev/null +++ b/Sources/AnimalKingdomAPI/Generated/Schema/Objects/Mutation.swift @@ -0,0 +1,12 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI + +public final class Mutation: Object { + override public class var __typename: String { "Mutation" } + + override public class var __metadata: Metadata { _metadata } + private static let _metadata: Metadata = Metadata(implements: [ + ]) +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift b/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift index d5ca415e6d..35014f5739 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift @@ -14,6 +14,7 @@ where Schema == AnimalKingdomAPI.Schema {} public enum Schema: SchemaConfiguration { public static func objectType(forTypename __typename: String) -> Object.Type? { switch __typename { + case "Mutation": return AnimalKingdomAPI.Mutation.self case "Query": return AnimalKingdomAPI.Query.self case "Cat": return AnimalKingdomAPI.Cat.self case "Bird": return AnimalKingdomAPI.Bird.self diff --git a/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls b/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls index 1c7f70a32d..8a46eb15f6 100644 --- a/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls +++ b/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls @@ -4,7 +4,28 @@ type Query { classroomPets: [ClassroomPet!]! } +type Mutation { + adoptPet(input: PetAdoptionInput!): Pet! +} + +input PetAdoptionInput { + ownerID: ID! + petID: ID! + "The given name the pet is called by its human." + humanName: String + favoriteToy: String! + isSpayedOrNeutered: Boolean! = false + measurements: MeasurementsInput +} + +input MeasurementsInput { + height: Float! + weight: Float! + wingspan: Float +} + interface Animal { + id: ID species: String! height: Height! predators: [Animal!]! @@ -12,12 +33,14 @@ interface Animal { } interface Pet { + id: ID humanName: String favoriteToy: String! owner: Human } interface HousePet implements Animal & Pet { + id: ID species: String! height: Height! predators: [Animal!]! @@ -31,6 +54,7 @@ interface HousePet implements Animal & Pet { } interface WarmBlooded implements Animal { + id: ID species: String! height: Height! predators: [Animal!]! @@ -49,6 +73,7 @@ type Height { } type Human implements Animal & WarmBlooded { + id: ID firstName: String! species: String! height: Height! @@ -59,6 +84,7 @@ type Human implements Animal & WarmBlooded { } type Cat implements Animal & Pet & WarmBlooded { + id: ID species: String! height: Height! predators: [Animal!]! @@ -72,6 +98,7 @@ type Cat implements Animal & Pet & WarmBlooded { } type Dog implements Animal & Pet & HousePet & WarmBlooded { + id: ID species: String! height: Height! predators: [Animal!]! @@ -87,6 +114,7 @@ type Dog implements Animal & Pet & HousePet & WarmBlooded { } type Bird implements Animal & Pet & WarmBlooded { + id: ID species: String! height: Height! predators: [Animal!]! @@ -96,10 +124,11 @@ type Bird implements Animal & Pet & WarmBlooded { owner: Human bodyTemperature: Int! laysEggs: Boolean! - wingspan: Int! + wingspan: Float! } type Fish implements Animal & Pet { + id: ID species: String! height: Height! predators: [Animal!]! @@ -110,6 +139,7 @@ type Fish implements Animal & Pet { } type Rat implements Animal & Pet { + id: ID species: String! height: Height! predators: [Animal!]! @@ -120,6 +150,7 @@ type Rat implements Animal & Pet { } type Crocodile implements Animal { + id: ID species: String! height: Height! predators: [Animal!]! @@ -128,6 +159,7 @@ type Crocodile implements Animal { } type PetRock implements Pet { + id: ID humanName: String favoriteToy: String! owner: Human diff --git a/Sources/AnimalKingdomAPI/graphql/PetAdoptionMutation.graphql b/Sources/AnimalKingdomAPI/graphql/PetAdoptionMutation.graphql new file mode 100644 index 0000000000..fbfddebe72 --- /dev/null +++ b/Sources/AnimalKingdomAPI/graphql/PetAdoptionMutation.graphql @@ -0,0 +1,6 @@ +mutation PetAdoptionMutation($input: PetAdoptionInput!) { + adoptPet(input: $input) { + id + humanName + } +} diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts index e719fda07f..201e723e5c 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts @@ -10,11 +10,13 @@ import { getNamedType, GraphQLCompositeType, GraphQLError, + GraphQLInputObjectType, GraphQLNamedType, GraphQLObjectType, GraphQLSchema, GraphQLType, isCompositeType, + isInputObjectType, isUnionType, Kind, OperationDefinitionNode, @@ -82,6 +84,10 @@ export function compileToIR( referencedTypes.add(getNamedType(type)) } } + + if (isInputObjectType(type)) { + addReferencedTypesFromInputObject(type) + } } function getFragment(name: string): ir.FragmentDefinition | undefined { @@ -308,4 +314,16 @@ export function compileToIR( } } } + + function addReferencedTypesFromInputObject( + inputObject: GraphQLInputObjectType + ) { + const fields = inputObject.astNode?.fields + if (fields) { + for (const field of fields) { + const type = typeFromAST(schema, field.type) as GraphQLType + addReferencedType(getNamedType(type)) + } + } + } } diff --git a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js index 87a1bc8e03..b128a00902 100644 --- a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js +++ b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js @@ -1 +1 @@ -var ApolloCodegenFrontend=function(e){"use strict";function t(e,t){if(!Boolean(e))throw new Error(t)}function n(e){return"object"==typeof e&&null!==e}function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}const i=/\r\n|[\n\r]/g;function o(e,t){let n=0,o=1;for(const s of e.body.matchAll(i)){if("number"==typeof s.index||r(!1),s.index>=t)break;n=s.index+s[0].length,o+=1}return{line:o,column:t+1-n}}function s(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${s}:${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+a([[s-1+" |",p[i-1]],[`${s} |`,d],["|","^".padStart(u)],[`${s+1} |`,p[i+1]]])}function a(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,...t){var r,i,s;const{nodes:a,source:u,positions:l,path:p,originalError:d,extensions:f}=function(e){const t=e[0];return null==t||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}(t);super(e),this.name="GraphQLError",this.path=null!=p?p:void 0,this.originalError=null!=d?d:void 0,this.nodes=c(Array.isArray(a)?a:a?[a]:void 0);const h=c(null===(r=this.nodes)||void 0===r?void 0:r.map((e=>e.loc)).filter((e=>null!=e)));this.source=null!=u?u:null==h||null===(i=h[0])||void 0===i?void 0:i.source,this.positions=null!=l?l:null==h?void 0:h.map((e=>e.start)),this.locations=l&&u?l.map((e=>o(u,e))):null==h?void 0:h.map((e=>o(e.source,e.start)));const m=n(null==d?void 0:d.extensions)?null==d?void 0:d.extensions:void 0;this.extensions=null!==(s=null!=f?f:m)&&void 0!==s?s: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!=d&&d.stack?Object.defineProperty(this,"stack",{value:d.stack,writable:!0,configurable:!0}):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"+s((t=n.loc).source,o(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+s(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 c(e){return void 0===e||0===e.length?void 0:e}function u(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,void 0,e,[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 l={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],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"]},p=new Set(Object.keys(l));function d(e){const t=null==e?void 0:e.kind;return"string"==typeof t&&p.has(t)}let f,h,m,v;function y(e){return 9===e||32===e}function E(e){return e>=48&&e<=57}function T(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return T(e)||95===e}function I(e){return T(e)||E(e)||95===e}function g(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let t=0;t0===t?e:e.slice(n))).slice(null!==(t=r)&&void 0!==t?t:0,i+1)}function _(e){let t=0;for(;t",e.EOF="",e.BANG="!",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"}(v||(v={}));class Lexer{constructor(e){const t=new Token(v.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!==v.EOF)do{if(e.next)e=e.next;else{const t=x(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function A(e){return e>=56320&&e<=57343}function D(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return v.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 x(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 u(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function V(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const c=[];for(;o2)return"[Array]";const n=Math.min(10,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>2)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+": "+B(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const Y=function(e,t){return e instanceof t};class Source{constructor(e,n="GraphQL request",r={line:1,column:1}){"string"==typeof e||t(!1,`Body must be a string. Received: ${P(e)}.`),this.body=e,this.name=n,this.locationOffset=r,this.locationOffset.line>0||t(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||t(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function J(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t){const n=function(e){return Y(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t}parseName(){const e=this.expectToken(v.NAME);return this.node(e,{kind:m.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:m.DOCUMENT,definitions:this.many(v.SOF,this.parseDefinition,v.EOF)})}parseDefinition(){if(this.peek(v.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===v.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 u(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(v.BRACE_L))return this.node(e,{kind:m.OPERATION_DEFINITION,operation:f.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(v.NAME)&&(n=this.parseName()),this.node(e,{kind:m.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(v.NAME);switch(e.value){case"query":return f.QUERY;case"mutation":return f.MUTATION;case"subscription":return f.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(v.PAREN_L,this.parseVariableDefinition,v.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:m.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(v.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(v.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(v.DOLLAR),this.node(e,{kind:m.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:m.SELECTION_SET,selections:this.many(v.BRACE_L,this.parseSelection,v.BRACE_R)})}parseSelection(){return this.peek(v.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(v.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:m.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(v.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(v.PAREN_L,t,v.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(v.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(v.NAME)?this.node(e,{kind:m.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:m.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){var e;const t=this._lexer.token;return this.expectKeyword("fragment"),!0===(null===(e=this._options)||void 0===e?void 0:e.allowLegacyFragmentVariables)?this.node(t,{kind:m.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:m.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 v.BRACKET_L:return this.parseList(e);case v.BRACE_L:return this.parseObject(e);case v.INT:return this._lexer.advance(),this.node(t,{kind:m.INT,value:t.value});case v.FLOAT:return this._lexer.advance(),this.node(t,{kind:m.FLOAT,value:t.value});case v.STRING:case v.BLOCK_STRING:return this.parseStringLiteral();case v.NAME:switch(this._lexer.advance(),t.value){case"true":return this.node(t,{kind:m.BOOLEAN,value:!0});case"false":return this.node(t,{kind:m.BOOLEAN,value:!1});case"null":return this.node(t,{kind:m.NULL});default:return this.node(t,{kind:m.ENUM,value:t.value})}case v.DOLLAR:if(e){if(this.expectToken(v.DOLLAR),this._lexer.token.kind===v.NAME){const e=this._lexer.token.value;throw u(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._lexer.advance(),this.node(e,{kind:m.STRING,value:e.value,block:e.kind===v.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:m.LIST,values:this.any(v.BRACKET_L,(()=>this.parseValueLiteral(e)),v.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:m.OBJECT,fields:this.any(v.BRACE_L,(()=>this.parseObjectField(e)),v.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(v.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(v.AT),this.node(t,{kind:m.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(v.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(v.BRACKET_R),t=this.node(e,{kind:m.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(v.BANG)?this.node(e,{kind:m.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:m.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(v.STRING)||this.peek(v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);return this.node(e,{kind:m.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(v.COLON);const n=this.parseNamedType();return this.node(e,{kind:m.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:m.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:m.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(v.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseFieldDefinition,v.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(v.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:m.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(v.PAREN_L,this.parseInputValueDef,v.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(v.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(v.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:m.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:m.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:m.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(v.EQUALS)?this.delimitedMany(v.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:m.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(v.BRACE_L,this.parseEnumValueDefinition,v.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:m.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 u(this._lexer.source,this._lexer.token.start,`${q(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:m.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseInputValueDef,v.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:m.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:m.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:m.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:m.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:m.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:m.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:m.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(v.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:m.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(v.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.prototype.hasOwnProperty.call(h,t.value))return t;throw this.unexpected(e)}node(e,t){var n;return!0!==(null===(n=this._options)||void 0===n?void 0:n.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._lexer.advance(),t;throw u(this._lexer.source,t.start,`Expected ${X(e)}, found ${q(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this._lexer.advance(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==v.NAME||t.value!==e)throw u(this._lexer.source,t.start,`Expected "${e}", found ${q(t)}.`);this._lexer.advance()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===v.NAME&&t.value===e&&(this._lexer.advance(),!0)}unexpected(e){const t=null!=e?e:this._lexer.token;return u(this._lexer.source,t.start,`Unexpected ${q(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}}function q(e){const t=e.value;return X(e.kind)+(null!=t?` "${t}"`:"")}function X(e){return function(e){return e===v.BANG||e===v.DOLLAR||e===v.AMP||e===v.PAREN_L||e===v.PAREN_R||e===v.SPREAD||e===v.COLON||e===v.EQUALS||e===v.AT||e===v.BRACKET_L||e===v.BRACKET_R||e===v.BRACE_L||e===v.PIPE||e===v.BRACE_R}(e)?`"${e}"`:e}function K(e,t){const[n,r]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const o=r.map((e=>`"${e}"`));switch(o.length){case 0:return"";case 1:return i+o[0]+"?";case 2:return i+o[0]+" or "+o[1]+"?"}const s=o.slice(0,5),a=s.pop();return i+s.join(", ")+", or "+a+"?"}function z(e){return e}function H(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}function W(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function Z(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function ee(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-te,o=t.charCodeAt(r)}while(ne(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const te=48;function ne(e){return!isNaN(e)&&te<=e&&e<=57}function re(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:ee(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=ie(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=ie(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 ie(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>me(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=ye("(",me(e.variableDefinitions,", "),")"),n=me([e.operation,me([e.name,t]),me(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+ye(" = ",n)+ye(" ",me(r," "))},SelectionSet:{leave:({selections:e})=>ve(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){const o=ye("",e,": ")+t;let s=o+ye("(",me(n,", "),")");return s.length>80&&(s=o+ye("(\n",Ee(me(n,"\n")),"\n)")),me([s,me(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+ye(" ",me(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>me(["...",ye("on ",e),me(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${ye("(",me(n,", "),")")} on ${t} ${ye("",me(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?function(e,t){const n=e.replace(/"""/g,'\\"""'),r=n.split(/\r\n|[\n\r]/g),i=1===r.length,o=r.length>1&&r.slice(1).every((e=>0===e.length||y(e.charCodeAt(0)))),s=n.endsWith('\\"""'),a=e.endsWith('"')&&!s,c=e.endsWith("\\"),u=a||c,l=!(null!=t&&t.minimize)&&(!i||e.length>70||u||o||s);let p="";const d=i&&y(e.charCodeAt(0));return(l&&!d||o)&&(p+="\n"),p+=n,(l||u)&&(p+="\n"),'"""'+p+'"""'}(e):`"${e.replace(se,ae)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+me(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+me(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+ye("(",me(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>ye("",e,"\n")+me(["schema",me(t," "),ve(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me(["scalar",t,me(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["type",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>ye("",e,"\n")+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+": "+r+ye(" ",me(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>ye("",e,"\n")+me([t+": "+n,ye("= ",r),me(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["interface",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>ye("",e,"\n")+me(["union",t,me(n," "),ye("= ",me(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>ye("",e,"\n")+me(["enum",t,me(n," "),ve(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me([t,me(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>ye("",e,"\n")+me(["input",t,me(n," "),ve(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>ye("",e,"\n")+"directive @"+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+(r?" repeatable":"")+" on "+me(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>me(["extend schema",me(e," "),ve(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>me(["extend scalar",e,me(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend type",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend interface",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>me(["extend union",e,me(t," "),ye("= ",me(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>me(["extend enum",e,me(t," "),ve(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>me(["extend input",e,me(t," "),ve(n)]," ")}};function me(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function ve(e){return ye("{\n",Ee(me(e,"\n")),"\n}")}function ye(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Ee(e){return ye(" ",e.replace(/\n/g,"\n "))}function Te(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}function Ne(e,t){switch(e.kind){case m.NULL:return null;case m.INT:return parseInt(e.value,10);case m.FLOAT:return parseFloat(e.value);case m.STRING:case m.ENUM:case m.BOOLEAN:return e.value;case m.LIST:return e.values.map((e=>Ne(e,t)));case m.OBJECT:return W(e.fields,(e=>e.name.value),(e=>Ne(e.value,t)));case m.VARIABLE:return null==t?void 0:t[e.name.value]}}function Ie(e){if(null!=e||t(!1,"Must provide name."),"string"==typeof e||t(!1,"Expected name to be a string."),0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;ts(Ne(e,t)),this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(o=e.extensionASTNodes)&&void 0!==o?o:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||t(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${P(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||t(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||t(!1,`${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){var n;this.name=Ie(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=()=>Ye(e),this._interfaces=()=>Be(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||t(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${P(e.isTypeOf)}.`)}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:Xe(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Be(e){var n;const r=Me(null!==(n=e.interfaces)&&void 0!==n?n:[]);return Array.isArray(r)||t(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),r}function Ye(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>{var i;qe(n)||t(!1,`${e.name}.${r} field config must be an object.`),null==n.resolve||"function"==typeof n.resolve||t(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${P(n.resolve)}.`);const o=null!==(i=n.args)&&void 0!==i?i:{};return qe(o)||t(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:Ie(r),description:n.description,type:n.type,args:Je(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function Je(e){return Object.entries(e).map((([e,t])=>({name:Ie(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:oe(t.extensions),astNode:t.astNode})))}function qe(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:Ke(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function Ke(e){return W(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(e){return xe(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=Ye.bind(void 0,e),this._interfaces=Be.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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:Xe(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){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._types=He.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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 He(e){const n=Me(e.types);return Array.isArray(n)||t(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),n}class GraphQLEnumType{constructor(e){var n,r,i;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._values=(r=this.name,qe(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(qe(n)||t(!1,`${r}.${e} must refer to an object with a "value" key representing an internal value but got: ${P(n)}.`),{name:ge(e),description:n.description,value:void 0!==n.value?n.value:e,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=H(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${P(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=P(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+We(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+We(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.ENUM){const t=fe(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+We(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=fe(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+We(this,t),e)}return n.value}toConfig(){const e=W(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 We(e,t){return K("the enum value",re(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){var t;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ze.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=Z(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}}toString(){return this.name}toJSON(){return this.toString()}}function Ze(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>(!("resolve"in n)||t(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:Ie(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))}function et(e){return xe(e.type)&&void 0===e.defaultValue}function tt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&tt(e.ofType,t.ofType)}function nt(e,t,n){return t===n||(xe(n)?!!xe(t)&&nt(e,t.ofType,n.ofType):xe(t)?nt(e,t.ofType,n):we(n)?!!we(t)&&nt(e,t.ofType,n.ofType):!we(t)&&(Ge(n)&&(Se(t)||Oe(t))&&e.isSubType(n,t)))}function rt(e,t,n){return t===n||(Ge(t)?Ge(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Ge(n)&&e.isSubType(n,t))}const it=2147483647,ot=-2147483648,st=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=ft(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: ${P(t)}`);if(n>it||nit||eit||te.name===t))}function ft(e){if(n(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!n(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}function ht(e){return Y(e,GraphQLDirective)}class GraphQLDirective{constructor(e){var r,i;this.name=Ie(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(r=e.isRepeatable)&&void 0!==r&&r,this.extensions=oe(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||t(!1,`@${e.name} locations must be an Array.`);const o=null!==(i=e.args)&&void 0!==i?i:{};n(o)&&!Array.isArray(o)||t(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=Je(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:Ke(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const mt=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Included when true."}}}),vt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Skipped when true."}}}),yt="No longer supported",Et=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[h.FIELD_DEFINITION,h.ARGUMENT_DEFINITION,h.INPUT_FIELD_DEFINITION,h.ENUM_VALUE],args:{reason:{type:ct,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:yt}}}),Tt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ct),description:"The URL that specifies the behavior of this scalar."}}}),Nt=Object.freeze([mt,vt,Et,Tt]);function It(e,t){if(xe(t)){const n=It(e,t.ofType);return(null==n?void 0:n.kind)===m.NULL?null:n}if(null===e)return{kind:m.NULL};if(void 0===e)return null;if(we(t)){const n=t.ofType;if("object"==typeof(i=e)&&"function"==typeof(null==i?void 0:i[Symbol.iterator])){const t=[];for(const r of e){const e=It(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return It(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=It(e[n.name],n.type);t&&r.push({kind:m.OBJECT_FIELD,name:{kind:m.NAME,value:n.name},value:t})}return{kind:m.OBJECT,fields:r}}if(Re(t)){const n=t.serialize(e);if(null==n)return null;if("boolean"==typeof n)return{kind:m.BOOLEAN,value:n};if("number"==typeof n&&Number.isFinite(n)){const e=String(n);return gt.test(e)?{kind:m.INT,value:e}:{kind:m.FLOAT,value:e}}if("string"==typeof n)return Ae(t)?{kind:m.ENUM,value:n}:t===lt&>.test(n)?{kind:m.INT,value:n}:{kind:m.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${P(n)}.`)}r(!1,"Unexpected input type: "+P(t))}const gt=/^-?(?:0|[1-9][0-9]*)$/,_t=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:ct,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(St))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(St),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:St,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:St,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(bt))),resolve:e=>e.getDirectives()}})}),bt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(ut),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ot))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ot=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:h.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:h.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:h.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:h.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:h.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:h.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:h.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:h.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:h.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:h.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:h.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:h.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:h.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:h.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:h.UNION,description:"Location adjacent to a union definition."},ENUM:{value:h.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:h.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:h.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:h.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),St=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(xt),resolve:e=>be(e)?wt.SCALAR:Oe(e)?wt.OBJECT:Se(e)?wt.INTERFACE:Le(e)?wt.UNION:Ae(e)?wt.ENUM:De(e)?wt.INPUT_OBJECT:we(e)?wt.LIST:xe(e)?wt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ct,resolve:e=>"name"in e?e.name:void 0},description:{type:ct,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ct,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(Lt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Oe(e)||Se(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e){if(Oe(e)||Se(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if(Ge(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Dt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ae(e)){const n=e.getValues();return t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(De(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:St,resolve:e=>"ofType"in e?e.ofType:void 0}})}),Lt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),At=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ct,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=It(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),Dt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})});let wt;!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"}(wt||(wt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:wt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:wt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:wt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:wt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:wt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:wt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:wt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:wt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),kt={name:"__schema",type:new GraphQLNonNull(_t),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},Ft={name:"__type",type:St,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ct),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},Rt={name:"__typename",type:new GraphQLNonNull(ct),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},Ct=Object.freeze([_t,bt,Ot,St,Lt,At,Dt,xt]);function Gt(e){return Ct.some((({name:t})=>e.name===t))}function $t(e){if(!function(e){return Y(e,GraphQLSchema)}(e))throw new Error(`Expected ${P(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){var r,i;this.__validationErrors=!0===e.assumeValid?[]:void 0,n(e)||t(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||t(!1,`"types" must be Array if provided but got: ${P(e.types)}.`),!e.directives||Array.isArray(e.directives)||t(!1,`"directives" must be Array if provided but got: ${P(e.directives)}.`),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(r=e.extensionASTNodes)&&void 0!==r?r:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(i=e.directives)&&void 0!==i?i:Nt;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Qt(t,o);null!=this._queryType&&Qt(this._queryType,o),null!=this._mutationType&&Qt(this._mutationType,o),null!=this._subscriptionType&&Qt(this._subscriptionType,o);for(const e of this._directives)if(ht(e))for(const t of e.args)Qt(t.type,o);Qt(_t,o),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of o){if(null==e)continue;const n=e.name;if(n||t(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[n])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${n}".`);if(this._typeMap[n]=e,Se(e)){for(const t of e.getInterfaces())if(Se(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(Oe(e))for(const t of e.getInterfaces())if(Se(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 f.QUERY:return this.getQueryType();case f.MUTATION:return this.getMutationType();case f.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return Le(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),Le(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}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=Ve(e);if(!t.has(n))if(t.add(n),Le(n))for(const e of n.getTypes())Qt(e,t);else if(Oe(n)||Se(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(De(n))for(const e of Object.values(n.getFields()))Qt(e.type,t);return t}function jt(e){if($t(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!Oe(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Ut(t,f.QUERY))&&void 0!==r?r:n.astNode)}}else e.reportError("Query root type must be provided.",t.astNode);const i=t.getMutationType();var o;i&&!Oe(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Ut(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!Oe(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Ut(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(ht(n)){Vt(e,n);for(const r of n.args){var t;if(Vt(e,r),ke(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),ze(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Ht(r.astNode),null===(t=r.astNode)||void 0===t?void 0:t.type])}}else e.reportError(`Expected directive but got: ${P(n)}.`,null==n?void 0:n.astNode)}(t),function(e){const t=function(e){const t=Object.create(null),n=[],r=Object.create(null);return i;function i(o){if(t[o.name])return;t[o.name]=!0,r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if(xe(t.type)&&De(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))Ue(r)?(Gt(r)||Vt(e,r),Oe(r)||Se(r)?(Mt(e,r),Pt(e,r)):Le(r)?Jt(e,r):Ae(r)?qt(e,r):De(r)&&(Xt(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${P(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,n))}getErrors(){return this._errors}}function Ut(e,t){var n;return null===(n=[e.astNode,...e.extensionASTNodes].flatMap((e=>{var t;return null!==(t=null==e?void 0:e.operationTypes)&&void 0!==t?t:[]})).find((e=>e.operation===t)))||void 0===n?void 0:n.type}function Vt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Mt(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 s of n){var r;if(Vt(e,s),!Fe(s.type))e.reportError(`The type of ${t.name}.${s.name} must be Output Type but got: ${P(s.type)}.`,null===(r=s.astNode)||void 0===r?void 0:r.type);for(const n of s.args){const r=n.name;var i,o;if(Vt(e,n),!ke(n.type))e.reportError(`The type of ${t.name}.${s.name}(${r}:) must be Input Type but got: ${P(n.type)}.`,null===(i=n.astNode)||void 0===i?void 0:i.type);if(ze(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Ht(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Pt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Se(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Kt(t,r)):(n[r.name]=!0,Yt(e,t,r),Bt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Kt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,Kt(t,r))}function Bt(e,t,n){const r=t.getFields();for(const c of Object.values(n.getFields())){const u=c.name,l=r[u];if(l){var i,o;if(!nt(e.schema,l.type,c.type))e.reportError(`Interface field ${n.name}.${u} expects type ${P(c.type)} but ${t.name}.${u} is type ${P(l.type)}.`,[null===(i=c.astNode)||void 0===i?void 0:i.type,null===(o=l.astNode)||void 0===o?void 0:o.type]);for(const r of c.args){const i=r.name,o=l.args.find((e=>e.name===i));var s,a;if(o){if(!tt(r.type,o.type))e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expects type ${P(r.type)} but ${t.name}.${u}(${i}:) is type ${P(o.type)}.`,[null===(s=r.astNode)||void 0===s?void 0:s.type,null===(a=o.astNode)||void 0===a?void 0:a.type])}else e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expected but ${t.name}.${u} does not provide it.`,[r.astNode,l.astNode])}for(const r of l.args){const i=r.name;!c.args.find((e=>e.name===i))&&ze(r)&&e.reportError(`Object field ${t.name}.${u} includes required argument ${i} that is missing from the Interface field ${n.name}.${u}.`,[r.astNode,c.astNode])}}else e.reportError(`Interface field ${n.name}.${u} expected but ${t.name} does not provide it.`,[c.astNode,t.astNode,...t.extensionASTNodes])}}function Yt(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}.`,[...Kt(n,i),...Kt(t,n)])}function Jt(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=Object.create(null);for(const i of n)r[i.name]?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,zt(t,i.name)):(r[i.name]=!0,Oe(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,zt(t,String(i))))}function qt(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)Vt(e,t)}function Xt(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 o of n){var r,i;if(Vt(e,o),!ke(o.type))e.reportError(`The type of ${t.name}.${o.name} must be Input Type but got: ${P(o.type)}.`,null===(r=o.astNode)||void 0===r?void 0:r.type);if(et(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Ht(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function Kt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.interfaces)&&void 0!==t?t:[]})).filter((e=>e.name.value===t.name))}function zt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.types)&&void 0!==t?t:[]})).filter((e=>e.name.value===t))}function Ht(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Et.name))}function Wt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLNonNull(n)}case m.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=null!=n?n:Zt,t&&(ke(t)&&this._inputTypeStack.push(t),Ce(t)&&this._parentTypeStack.push(t),Fe(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case m.SELECTION_SET:{const e=Ve(this.getType());this._parentTypeStack.push(Ce(e)?e:void 0);break}case m.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(Fe(i)?i:void 0);break}case m.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case m.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(Oe(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Wt(t,n):Ve(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Wt(t,e.type);this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ARGUMENT:{var n;let t,r;const i=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();i&&(t=i.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(ke(r)?r:void 0);break}case m.LIST:{const e=je(this.getInputType()),t=we(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(ke(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Ve(this.getInputType());let n,r;De(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ENUM:{const t=Ve(this.getInputType());let n;Ae(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case m.SELECTION_SET:this._parentTypeStack.pop();break;case m.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case m.DIRECTIVE:this._directive=null;break;case m.OPERATION_DEFINITION:case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:this._typeStack.pop();break;case m.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case m.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.LIST:case m.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.ENUM:this._enumValue=null}}}function Zt(e,t,n){const r=n.name.value;return r===kt.name&&e.getQueryType()===t?kt:r===Ft.name&&e.getQueryType()===t?Ft:r===Rt.name&&Ce(t)?Rt:Oe(t)||Se(t)?t.getFields()[r]:void 0}function en(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=de(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),d(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=de(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function tn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function nn(e){return e.kind===m.SCALAR_TYPE_DEFINITION||e.kind===m.OBJECT_TYPE_DEFINITION||e.kind===m.INTERFACE_TYPE_DEFINITION||e.kind===m.UNION_TYPE_DEFINITION||e.kind===m.ENUM_TYPE_DEFINITION||e.kind===m.INPUT_OBJECT_TYPE_DEFINITION}function rn(e){return e.kind===m.SCALAR_TYPE_EXTENSION||e.kind===m.OBJECT_TYPE_EXTENSION||e.kind===m.INTERFACE_TYPE_EXTENSION||e.kind===m.UNION_TYPE_EXTENSION||e.kind===m.ENUM_TYPE_EXTENSION||e.kind===m.INPUT_OBJECT_TYPE_EXTENSION}function on(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=e.args.map((e=>e.name));const i=e.getDocument().definitions;for(const e of i)if(e.kind===m.DIRECTIVE_DEFINITION){var o;const n=null!==(o=e.arguments)&&void 0!==o?o:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const r=n.name.value,i=t[r];if(n.arguments&&i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=re(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+K(o),t))}}return!1}}}function sn(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():Nt;for(const e of i)t[e.name]=e.locations;const o=e.getDocument().definitions;for(const e of o)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,i,o,s,a){const c=n.name.value,u=t[c];if(!u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,n));const l=function(e){const t=e[e.length-1];switch("kind"in t||r(!1),t.kind){case m.OPERATION_DEFINITION:return function(e){switch(e){case f.QUERY:return h.QUERY;case f.MUTATION:return h.MUTATION;case f.SUBSCRIPTION:return h.SUBSCRIPTION}}(t.operation);case m.FIELD:return h.FIELD;case m.FRAGMENT_SPREAD:return h.FRAGMENT_SPREAD;case m.INLINE_FRAGMENT:return h.INLINE_FRAGMENT;case m.FRAGMENT_DEFINITION:return h.FRAGMENT_DEFINITION;case m.VARIABLE_DEFINITION:return h.VARIABLE_DEFINITION;case m.SCHEMA_DEFINITION:case m.SCHEMA_EXTENSION:return h.SCHEMA;case m.SCALAR_TYPE_DEFINITION:case m.SCALAR_TYPE_EXTENSION:return h.SCALAR;case m.OBJECT_TYPE_DEFINITION:case m.OBJECT_TYPE_EXTENSION:return h.OBJECT;case m.FIELD_DEFINITION:return h.FIELD_DEFINITION;case m.INTERFACE_TYPE_DEFINITION:case m.INTERFACE_TYPE_EXTENSION:return h.INTERFACE;case m.UNION_TYPE_DEFINITION:case m.UNION_TYPE_EXTENSION:return h.UNION;case m.ENUM_TYPE_DEFINITION:case m.ENUM_TYPE_EXTENSION:return h.ENUM;case m.ENUM_VALUE_DEFINITION:return h.ENUM_VALUE;case m.INPUT_OBJECT_TYPE_DEFINITION:case m.INPUT_OBJECT_TYPE_EXTENSION:return h.INPUT_OBJECT;case m.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||r(!1),t.kind===m.INPUT_OBJECT_TYPE_DEFINITION?h.INPUT_FIELD_DEFINITION:h.ARGUMENT_DEFINITION}default:r(!1,"Unexpected kind: "+P(t.kind))}}(a);l&&!u.includes(l)&&e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,n))}}}function an(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(r[t.name.value]=!0);const i=[...Object.keys(n),...Object.keys(r)];return{NamedType(t,o,s,a,c){const u=t.name.value;if(!n[u]&&!r[u]){var l;const n=null!==(l=c[2])&&void 0!==l?l:s,r=null!=n&&("kind"in(p=n)&&(function(e){return e.kind===m.SCHEMA_DEFINITION||nn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||rn(e)}(p)));if(r&&cn.includes(u))return;const o=re(u,r?cn.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+K(o),t))}var p}}}const cn=[...pt,...Ct].map((e=>e.name));function un(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const r=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))r[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==r[n]&&e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,t))}}}}}function ln(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:ln(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(ln)};case m.INT:case m.FLOAT:case m.STRING:case m.BOOLEAN:case m.NULL:case m.ENUM:case m.VARIABLE:return e}var t}function pn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+pn(t))).join(" and "):e}function dn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=Tn(e,n,a);if(o!==c){hn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),dn(e,t,n,r,i,o,a))}}function fn(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]=Tn(e,n,a),[p,d]=Tn(e,n,c);hn(e,t,n,r,i,u,p);for(const s of d)fn(e,t,n,r,i,o,s);for(const o of l)fn(e,t,n,r,i,o,s)}function hn(e,t,n,r,i,o,s){for(const[a,c]of Object.entries(o)){const o=s[a];if(o)for(const s of c)for(const c of o){const o=mn(e,n,r,i,a,s,c);o&&t.push(o)}}}function mn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&Oe(a)&&Oe(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(vn(c)!==vn(p))return[[i,"they have differing arguments"],[c],[p]]}const h=null==u?void 0:u.type,m=null==d?void 0:d.type;if(h&&m&&yn(h,m))return[[i,`they return conflicting types "${P(h)}" and "${P(m)}"`],[c],[p]];const v=c.selectionSet,y=p.selectionSet;if(v&&y){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=En(e,t,i,o),[p,d]=En(e,t,s,a);hn(e,c,t,n,r,u,p);for(const i of d)dn(e,c,t,n,r,u,i);for(const i of l)dn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)fn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ve(h),v,Ve(m),y);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 vn(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(ln({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function yn(e,t){return we(e)?!we(t)||yn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||yn(e.ofType,t.ofType):!!xe(t)||!(!Re(e)&&!Re(t))&&e!==t)}function En(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);Nn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function Tn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Wt(e.getSchema(),n.typeCondition);return En(e,t,i,n.selectionSet)}function Nn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(Oe(t)||Se(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;r[i]||(r[i]=[]),r[i].push([t,o,n]);break}case m.FRAGMENT_SPREAD:i[o.name.value]=!0;break;case m.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?Wt(e.getSchema(),n):t;Nn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){var r;const[i,o]=ee.name));const o=e.getDocument().definitions;for(const e of o)if(e.kind===m.DIRECTIVE_DEFINITION){var s;const t=null!==(s=e.arguments)&&void 0!==s?s:[];n[e.name.value]=H(t.filter(_n),(e=>e.name.value))}return{Directive:{leave(t){const r=t.name.value,i=n[r];if(i){var o;const n=null!==(o=t.arguments)&&void 0!==o?o:[],s=new Set(n.map((e=>e.name.value)));for(const[n,o]of Object.entries(i))if(!s.has(n)){const i=_e(o.type)?P(o.type):fe(o.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${n}" of type "${i}" is required, but it was not provided.`,t))}}}}}}function _n(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function bn(e,t,n){if(e){if(e.kind===m.VARIABLE){const r=e.name.value;if(null==n||void 0===n[r])return;const i=n[r];if(null===i&&xe(t))return;return i}if(xe(t)){if(e.kind===m.NULL)return;return bn(e,t.ofType,n)}if(e.kind===m.NULL)return null;if(we(t)){const r=t.ofType;if(e.kind===m.LIST){const t=[];for(const i of e.values)if(On(i,n)){if(xe(r))return;t.push(null)}else{const e=bn(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=bn(e,r,n);if(void 0===i)return;return[i]}if(De(t)){if(e.kind!==m.OBJECT)return;const r=Object.create(null),i=H(e.fields,(e=>e.name.value));for(const e of Object.values(t.getFields())){const t=i[e.name];if(!t||On(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=bn(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Re(t)){let r;try{r=t.parseLiteral(e,n)}catch(e){return}if(void 0===r)return;return r}r(!1,"Unexpected input type: "+P(t))}}function On(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function Sn(e,t,n){var r;const i=null===(r=t.directives)||void 0===r?void 0:r.find((t=>t.name.value===e.name));if(i)return function(e,t,n){var r;const i={},o=H(null!==(r=t.arguments)&&void 0!==r?r:[],(e=>e.name.value));for(const r of e.args){const e=r.name,c=r.type,u=o[e];if(!u){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was not provided.`,t);continue}const l=u.value;let p=l.kind===m.NULL;if(l.kind===m.VARIABLE){const t=l.name.value;if(null==n||(s=n,a=t,!Object.prototype.hasOwnProperty.call(s,a))){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was provided the variable "$${t}" which was not provided a runtime value.`,l);continue}p=null==n[t]}if(p&&xe(c))throw new GraphQLError(`Argument "${e}" of non-null type "${P(c)}" must not be null.`,l);const d=bn(l,c,n);if(void 0===d)throw new GraphQLError(`Argument "${e}" has invalid value ${fe(l)}.`,l);i[e]=d}var s,a;return i}(e,i,n)}function Ln(e,t,n,r,i){const o=new Map;return An(e,t,n,r,i,o,new Set),o}function An(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!Dn(n,c))continue;const e=(a=c).alias?a.alias.value:a.name.value,t=o.get(e);void 0!==t?t.push(c):o.set(e,[c]);break}case m.INLINE_FRAGMENT:if(!Dn(n,c)||!wn(e,c,r))continue;An(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!Dn(n,c))continue;s.add(i);const a=t[i];if(!a||!wn(e,a,r))continue;An(e,t,n,r,a.selectionSet,o,s);break}}var a}function Dn(e,t){const n=Sn(vt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=Sn(mt,t,e);return!1!==(null==r?void 0:r.if)}function wn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Wt(e,r);return i===n||!!Ge(i)&&e.isSubType(i,n)}function xn(e,t){const n=new Map;for(const r of e){const e=t(r),i=n.get(e);void 0===i?n.set(e,[r]):i.push(r)}return n}function kn(e){return{Field:t,Directive:t};function t(t){var n;const r=xn(null!==(n=t.arguments)&&void 0!==n?n:[],(e=>e.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}function Fn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=!e.isRepeatable;const i=e.getDocument().definitions;for(const e of i)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const o=Object.create(null),s=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION)r=o;else if(nn(n)||rn(n)){const e=n.name.value;r=s[e],void 0===r&&(s[e]=r=Object.create(null))}else r=Object.create(null);for(const i of n.directives){const n=i.name.value;t[n]&&(r[n]?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,[r[n],i])):r[n]=i)}}}}function Rn(e,t){return!!(Oe(e)||Se(e)||De(e))&&null!=e.getFields()[t]}function Cn(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||r(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new GraphQLError(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}function Gn(e,t){const n=e.getInputType();if(!n)return;const r=Ve(n);if(Re(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}catch(r){const i=P(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${fe(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}function $n(e,t,n,r,i){if(xe(r)&&!xe(t)){const o=void 0!==i;if(!(null!=n&&n.kind!==m.NULL)&&!o)return!1;return nt(e,t,r.ofType)}return nt(e,t,r)}const Qn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!tn(n)){const t=n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,n))}return!1}}},function(e){const t=Object.create(null);return{OperationDefinition(n){const r=n.name;return r&&(t[r.value]?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,[t[r.value],r])):t[r.value]=r),!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===m.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",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===m.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const c=Ln(n,a,o,r,t.selectionSet);if(c.size>1){const t=[...c.values()].slice(1).flat();e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of c.values()){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.",t))}}}}}},an,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Wt(e.getSchema(),n);if(t&&!Ce(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Wt(e.getSchema(),t.typeCondition);if(n&&!Ce(n)){const n=fe(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,t.typeCondition))}}}},function(e){return{VariableDefinition(t){const n=Wt(e.getSchema(),t.type);if(void 0!==n&&!ke(n)){const n=t.variable.name.value,r=fe(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,t.type))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Re(Ve(n))){if(r){const i=t.name.value,o=P(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,r))}}else if(!r){const r=t.name.value,i=P(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,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=K("to use an inline fragment on",function(e,t,n){if(!Ge(t))return[];const r=new Set,i=Object.create(null);for(const s of e.getPossibleTypes(t))if(s.getFields()[n]){r.add(s),i[s.name]=1;for(const e of s.getInterfaces()){var o;e.getFields()[n]&&(r.add(e),i[e.name]=(null!==(o=i[e.name])&&void 0!==o?o:0)+1)}}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Se(t)&&e.isSubType(t,n)?-1:Se(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=K(function(e,t){if(Oe(e)||Se(e)){return re(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,t))}}}}},function(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value;return t[r]?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,[t[r],n.name])):t[r]=n.name,!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,t.name))}}},un,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ce(n)&&Ce(r)&&!rt(e.getSchema(),n,r)){const i=P(r),o=P(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,t))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=Wt(e.getSchema(),n.typeCondition);if(Ce(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!rt(e.getSchema(),r,i)){const o=P(i),s=P(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,t))}}}},function(e){const t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t[o.name.value])return;const s=o.name.value;t[s]=!0;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}.`:"."),t))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){var n;const r=xn(null!==(n=t.variableDefinitions)&&void 0!==n?n:[],(e=>e.variable.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:i}of r){const r=i.name.value;!0!==t[r]&&e.reportError(new GraphQLError(n.name?`Variable "$${r}" is not defined by operation "${n.name.value}".`:`Variable "$${r}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}},function(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){const r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(const{node:e}of i)r[e.name.value]=!0;for(const i of t){const t=i.variable.name.value;!0!==r[t]&&e.reportError(new GraphQLError(n.name?`Variable "$${t}" is never used in operation "${n.name.value}".`:`Variable "$${t}" is never used.`,i))}}},VariableDefinition(e){t.push(e)}}},sn,Fn,function(e){return{...on(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=re(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+K(o),t))}}}},kn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Gn(e,t),!1},ObjectValue(t){const n=Ve(e.getInputType());if(!De(n))return Gn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&et(i)){const r=P(i.type);e.reportError(new GraphQLError(`Field "${n.name}.${i.name}" of required type "${r}" was not provided.`,t))}}},ObjectField(t){const n=Ve(e.getParentInputType());if(!e.getInputType()&&De(n)){const r=re(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+K(r),t))}},NullValue(t){const n=e.getInputType();xe(n)&&e.reportError(new GraphQLError(`Expected value of type "${P(n)}", found ${fe(t)}.`,t))},EnumValue:t=>Gn(e,t),IntValue:t=>Gn(e,t),FloatValue:t=>Gn(e,t),StringValue:t=>Gn(e,t),BooleanValue:t=>Gn(e,t)}},function(e){return{...gn(e),Field:{leave(t){var n;const r=e.getFieldDef();if(!r)return!1;const i=new Set(null===(n=t.arguments)||void 0===n?void 0:n.map((e=>e.name.value)));for(const n of r.args)if(!i.has(n.name)&&ze(n)){const i=P(n.type);e.reportError(new GraphQLError(`Field "${r.name}" argument "${n.name}" of type "${i}" is required, but it was not provided.`,t))}}}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t[r];if(s&&i){const t=e.getSchema(),a=Wt(t,s.type);if(a&&!$n(t,a,s.defaultValue,i,o)){const t=P(a),o=P(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,[s,n]))}}}}},VariableDefinition(e){t[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]=En(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of Object.entries(i))if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",t)),++s)}}},function(e){const t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const o=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of o){const i=t.operation,o=n[i];r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,[o,t])):n[i]=t}return!1}},function(e){const t=Object.create(null),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(null==n||!n.getType(i))return t[i]?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,r.name))}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.values)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value,i=n[o];Ae(i)&&i.getValue(r)?e.reportError(new GraphQLError(`Enum value "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Enum value "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.fields)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value;Rn(n[o],r)?e.reportError(new GraphQLError(`Field "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Field "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,i=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of i){var o;n(`${r}.${e.name.value}`,null!==(o=e.arguments)&&void 0!==o?o:[])}return!1}function n(t,n){const r=xn(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.`,i.map((e=>e.name))));return!1}},function(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,r.name))}}},an,sn,Fn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(n[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=n[o],a=null==t?void 0:t.getType(o);let c;if(s?c=In[s.kind]:a&&(c=function(e){if(be(e))return m.SCALAR_TYPE_EXTENSION;if(Oe(e))return m.OBJECT_TYPE_EXTENSION;if(Se(e))return m.INTERFACE_TYPE_EXTENSION;if(Le(e))return m.UNION_TYPE_EXTENSION;if(Ae(e))return m.ENUM_TYPE_EXTENSION;if(De(e))return m.INPUT_OBJECT_TYPE_EXTENSION;r(!1,"Unexpected type: "+P(e))}(a)),c){if(c!==i.kind){const t=function(e){switch(e){case m.SCALAR_TYPE_EXTENSION:return"scalar";case m.OBJECT_TYPE_EXTENSION:return"object";case m.INTERFACE_TYPE_EXTENSION:return"interface";case m.UNION_TYPE_EXTENSION:return"union";case m.ENUM_TYPE_EXTENSION:return"enum";case m.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:r(!1,"Unexpected kind: "+P(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,s?[s,i]:i))}}else{const r=re(o,Object.keys({...n,...null==t?void 0:t.getTypeMap()}));e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+K(r),i.name))}}},on,kn,Cn,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===m.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===m.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=Object.create(null),r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!0!==n[i]){n[i]=!0;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);le(e,en(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 Un(e,n,r=Qn,i,o=new TypeInfo(e)){var s;const a=null!==(s=null==i?void 0:i.maxErrors)&&void 0!==s?s:100;n||t(!1,"Must provide document."),function(e){const t=jt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const c=Object.freeze({}),u=[],l=new ValidationContext(e,n,o,(e=>{if(u.length>=a)throw u.push(new GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;u.push(e)})),p=pe(r.map((e=>e(l))));try{le(n,en(o,p))}catch(e){if(e!==c)throw e}return u}function Vn(e,t,n=jn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Mn(e,r){n(e)&&n(e.__schema)||t(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${P(e)}.`);const i=e.__schema,o=W(i.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case wt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case wt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case wt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case wt.UNION:return function(e){if(!e.possibleTypes){const t=P(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(d)})}(e);case wt.ENUM:return function(e){if(!e.enumValues){const t=P(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:W(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case wt.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=P(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>E(e.inputFields)})}(e)}var t;var n;var r;const i=P(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}.`)}(e)));for(const e of[...pt,...Ct])o[e.name]&&(o[e.name]=e);const s=i.queryType?d(i.queryType):null,a=i.mutationType?d(i.mutationType):null,c=i.subscriptionType?d(i.subscriptionType):null,u=i.directives?i.directives.map((function(e){if(!e.args){const t=P(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=P(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:E(e.args)})})):[];return new GraphQLSchema({description:i.description,query:s,mutation:a,subscription:c,types:Object.values(o),directives:u,assumeValid:null==r?void 0:r.assumeValid});function l(e){if(e.kind===wt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===wt.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=l(t);return new GraphQLNonNull(function(e){if(!Qe(e))throw new Error(`Expected ${P(e)} to be a GraphQL nullable type.`);return e}(n))}return p(e)}function p(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${P(e)}.`);const n=o[t];if(!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 d(e){return function(e){if(!Oe(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Se(e))throw new Error(`Expected ${P(e)} to be a GraphQL Interface type.`);return e}(p(e))}function h(e){if(null===e.interfaces&&e.kind===wt.INTERFACE)return[];if(!e.interfaces){const t=P(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(f)}function m(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${P(e)}.`);return W(e.fields,(e=>e.name),y)}function y(e){const t=l(e.type);if(!Fe(t)){const e=P(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=P(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:E(e.args)}}function E(e){return W(e,(e=>e.name),T)}function T(e){const t=l(e.type);if(!ke(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?bn(function(e,t){const n=new Parser(e,t);n.expectToken(v.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(v.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function Pn(e,t,n){var i,o,s,a;const c=[],u=Object.create(null),l=[];let p;const d=[];for(const e of t.definitions)if(e.kind===m.SCHEMA_DEFINITION)p=e;else if(e.kind===m.SCHEMA_EXTENSION)d.push(e);else if(nn(e))c.push(e);else if(rn(e)){const t=e.name.value,n=u[t];u[t]=n?n.concat([e]):[e]}else e.kind===m.DIRECTIVE_DEFINITION&&l.push(e);if(0===Object.keys(u).length&&0===c.length&&0===l.length&&0===d.length&&null==p)return e;const f=Object.create(null);for(const t of e.types)f[t.name]=T(t);for(const e of c){var h;const t=e.name.value;f[t]=null!==(h=Bn[t])&&void 0!==h?h:x(e)}const v={query:e.query&&E(e.query),mutation:e.mutation&&E(e.mutation),subscription:e.subscription&&E(e.subscription),...p&&g([p]),...g(d)};return{description:null===(i=p)||void 0===i||null===(o=i.description)||void 0===o?void 0:o.value,...v,types:Object.values(f),directives:[...e.directives.map((function(e){const t=e.toConfig();return new GraphQLDirective({...t,args:Z(t.args,I)})})),...l.map((function(e){var t;return new GraphQLDirective({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:S(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(s=p)&&void 0!==s?s:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(d),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a};function y(e){return we(e)?new GraphQLList(y(e.ofType)):xe(e)?new GraphQLNonNull(y(e.ofType)):E(e)}function E(e){return f[e.name]}function T(e){return Gt(e)||dt(e)?e:be(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];let i=n.specifiedByURL;for(const e of r){var o;i=null!==(o=Jn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Oe(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLObjectType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Se(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Le(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLUnionType({...n,types:()=>[...e.getTypes().map(E),...w(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Ae(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[e.name])&&void 0!==t?t:[];return new GraphQLEnumType({...n,values:{...n.values,...A(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):De(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInputObjectType({...n,fields:()=>({...Z(n.fields,(e=>({...e,type:y(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):void r(!1,"Unexpected type: "+P(e))}function N(e){return{...e,type:y(e.type),args:e.args&&Z(e.args,I)}}function I(e){return{...e,type:y(e.type)}}function g(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=_(n.type)}return t}function _(e){var t;const n=e.name.value,r=null!==(t=Bn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function b(e){return e.kind===m.LIST_TYPE?new GraphQLList(b(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(b(e.type)):_(e)}function O(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:b(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:S(n.arguments),deprecationReason:Yn(n),astNode:n}}}return t}function S(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=b(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:bn(e.defaultValue,t),deprecationReason:Yn(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=b(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:bn(n.defaultValue,e),deprecationReason:Yn(n),astNode:n}}}return t}function A(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:Yn(n),astNode:n}}}return t}function D(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function w(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function x(e){var t;const n=e.name.value,r=null!==(t=u[n])&&void 0!==t?t:[];switch(e.kind){case m.OBJECT_TYPE_DEFINITION:{var i;const t=[e,...r];return new GraphQLObjectType({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.INTERFACE_TYPE_DEFINITION:{var o;const t=[e,...r];return new GraphQLInterfaceType({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.ENUM_TYPE_DEFINITION:{var s;const t=[e,...r];return new GraphQLEnumType({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,values:A(t),astNode:e,extensionASTNodes:r})}case m.UNION_TYPE_DEFINITION:{var a;const t=[e,...r];return new GraphQLUnionType({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,types:()=>w(t),astNode:e,extensionASTNodes:r})}case m.SCALAR_TYPE_DEFINITION:var c;return new GraphQLScalarType({name:n,description:null===(c=e.description)||void 0===c?void 0:c.value,specifiedByURL:Jn(e),astNode:e,extensionASTNodes:r});case m.INPUT_OBJECT_TYPE_DEFINITION:{var l;const t=[e,...r];return new GraphQLInputObjectType({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const Bn=H([...pt,...Ct],(e=>e.name));function Yn(e){const t=Sn(Et,e);return null==t?void 0:t.reason}function Jn(e){const t=Sn(Tt,e);return null==t?void 0:t.url}function qn(e,n){null!=e&&e.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&function(e){const t=Vn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Pn({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,n);if(null==r.astNode)for(const e of r.types)switch(e.name){case"Query":r.query=e;break;case"Mutation":r.mutation=e;break;case"Subscription":r.subscription=e}const i=[...r.directives,...Nt.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Xn(e){return function(e,t,n){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[zn(e),...i.map((e=>function(e){return rr(e)+"directive @"+e.name+er(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(be(e))return function(e){return rr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(Oe(e))return function(e){return rr(e)+`type ${e.name}`+Hn(e)+Wn(e)}(e);if(Se(e))return function(e){return rr(e)+`interface ${e.name}`+Hn(e)+Wn(e)}(e);if(Le(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return rr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>rr(e," ",!t)+" "+e.name+nr(e.deprecationReason)));return rr(e)+`enum ${e.name}`+Zn(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+tr(e)));return rr(e)+`input ${e.name}`+Zn(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!Nt.some((({name:e})=>e===t.name));var t}),Kn)}function Kn(e){return!dt(e)&&!Gt(e)}function zn(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();if(r&&"Subscription"!==r.name)return!1;return!0}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),rr(e)+`schema {\n${t.join("\n")}\n}`}function Hn(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Wn(e){return Zn(Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+e.name+er(e.args," ")+": "+String(e.type)+nr(e.deprecationReason))))}function Zn(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function er(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(tr).join(", ")+")":"(\n"+e.map(((e,n)=>rr(e," "+t,!n)+" "+t+tr(e))).join("\n")+"\n"+t+")"}function tr(e){const t=It(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+nr(e.deprecationReason)}function nr(e){if(null==e)return"";if(e!==yt){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function rr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+fe({kind:m.STRING,value:r,block:b(r)}).replace(/\n/g,"\n"+t)+"\n"}const ir=[un],or=[function(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.",t)),!1)}},function(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.",t))}}},...Qn.filter((e=>!ir.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function sr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function ar(e){return e.startsWith("__")}function cr(e){return null!=e}function ur(e){switch(e.kind){case m.VARIABLE:return{kind:e.kind,value:e.name.value};case m.LIST:return{kind:e.kind,value:e.values.map(ur)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=ur(t.value),e)),{})};default:return e}}function lr(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 pr(e,t){const n=new Map;for(const e of t.definitions)e.kind===m.FRAGMENT_DEFINITION&&n.set(e.name.value,e);const r=[],i=new Map,o=new Set;for(const e of t.definitions)e.kind===m.OPERATION_DEFINITION&&r.push(a(e));for(const[e,t]of n.entries())i.set(e,c(t));return{operations:r,fragments:Array.from(i.values()),referencedTypes:Array.from(o.values())};function s(e){if(o.add(e),Le(e)){const t=e.getTypes();for(e of t)o.add(Ve(e))}}function a(t){if(!t.name)throw new GraphQLError("Operations should be named",t);const n=lr(t),r=t.name.value,i=t.operation,a=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?ur(t.defaultValue):void 0,i=Wt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,t);return s(Ve(i)),{name:n,type:i,defaultValue:r}})),c=fe(t),l=e.getRootType(i);return o.add(Ve(l)),{filePath:n,name:r,operationType:i,rootType:l,variables:a,source:c,selectionSet:u(t.selectionSet,l)}}function c(t){const n=t.name.value,r=lr(t),i=fe(t),o=Wt(e,t.typeCondition);return s(Ve(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r,o=new Set){return{parentType:r,selections:t.selections.map((t=>function(t,r,o){var a;switch(t.kind){case m.FIELD:{const n=t.name.value,i=null===(a=t.alias)||void 0===a?void 0:a.value,o=function(e,t,n){return n===kt.name&&e.getQueryType()===t?kt:n===Ft.name&&e.getQueryType()===t?Ft:n===Rt.name&&(Oe(t)||Se(t)||Le(t))?Rt:Oe(t)||Se(t)?t.getFields()[n]:void 0}(e,r,n);if(!o)throw new GraphQLError(`Cannot query field "${n}" on type "${String(r)}"`,t);const c=o.type,l=Ve(c);s(Ve(l));const{description:p,deprecationReason:d}=o,f=t.arguments&&t.arguments.length>0?t.arguments.map((e=>{const t=e.name.value,n=o.args.find((t=>t.name===e.name.value)),r=n&&n.type||void 0;return{name:t,value:ur(e.value),type:r}})):void 0;let h={kind:"Field",name:n,alias:i,arguments:f,type:c,description:!ar(n)&&p?p:void 0,deprecationReason:d||void 0};if(Ce(l)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,t);h.selectionSet=u(e,l)}return h}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Wt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i)}}case m.FRAGMENT_SPREAD:{const e=t.name.value;if(o.has(e))return;o.add(e);const r=function(e){let t=i.get(e);if(t)return t;const r=n.get(e);return r?(n.delete(e),t=c(r),i.set(e,t),t):void 0}(e);if(!r)throw new GraphQLError(`Unknown fragment "${e}".`,t.name);return{kind:"FragmentSpread",fragment:r}}}}(t,r,o))).filter(cr)}}}return m.FIELD,m.NAME,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){return pr(e,t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Mn(t);return sr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Vn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=qn(t,{assumeValidSDL:!0});return sr(n),n},e.mergeDocuments=function(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)},e.parseDocument=function(e){return J(e)},e.printSchemaToSDL=function(e){return Xn(e)},e.validateDocument=function(e,t){return Un(e,t,or)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); +var ApolloCodegenFrontend=function(e){"use strict";function t(e,t){if(!Boolean(e))throw new Error(t)}function n(e){return"object"==typeof e&&null!==e}function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}const i=/\r\n|[\n\r]/g;function o(e,t){let n=0,o=1;for(const s of e.body.matchAll(i)){if("number"==typeof s.index||r(!1),s.index>=t)break;n=s.index+s[0].length,o+=1}return{line:o,column:t+1-n}}function s(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${s}:${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+a([[s-1+" |",p[i-1]],[`${s} |`,d],["|","^".padStart(u)],[`${s+1} |`,p[i+1]]])}function a(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,...t){var r,i,s;const{nodes:a,source:u,positions:l,path:p,originalError:d,extensions:f}=function(e){const t=e[0];return null==t||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}(t);super(e),this.name="GraphQLError",this.path=null!=p?p:void 0,this.originalError=null!=d?d:void 0,this.nodes=c(Array.isArray(a)?a:a?[a]:void 0);const h=c(null===(r=this.nodes)||void 0===r?void 0:r.map((e=>e.loc)).filter((e=>null!=e)));this.source=null!=u?u:null==h||null===(i=h[0])||void 0===i?void 0:i.source,this.positions=null!=l?l:null==h?void 0:h.map((e=>e.start)),this.locations=l&&u?l.map((e=>o(u,e))):null==h?void 0:h.map((e=>o(e.source,e.start)));const m=n(null==d?void 0:d.extensions)?null==d?void 0:d.extensions:void 0;this.extensions=null!==(s=null!=f?f:m)&&void 0!==s?s: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!=d&&d.stack?Object.defineProperty(this,"stack",{value:d.stack,writable:!0,configurable:!0}):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"+s((t=n.loc).source,o(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+s(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 c(e){return void 0===e||0===e.length?void 0:e}function u(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,void 0,e,[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 l={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],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"]},p=new Set(Object.keys(l));function d(e){const t=null==e?void 0:e.kind;return"string"==typeof t&&p.has(t)}let f,h,m,v;function y(e){return 9===e||32===e}function E(e){return e>=48&&e<=57}function T(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return T(e)||95===e}function I(e){return T(e)||E(e)||95===e}function g(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let t=0;t0===t?e:e.slice(n))).slice(null!==(t=r)&&void 0!==t?t:0,i+1)}function _(e){let t=0;for(;t",e.EOF="",e.BANG="!",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"}(v||(v={}));class Lexer{constructor(e){const t=new Token(v.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!==v.EOF)do{if(e.next)e=e.next;else{const t=x(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function A(e){return e>=56320&&e<=57343}function D(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return v.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 x(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 u(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function V(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const c=[];for(;o2)return"[Array]";const n=Math.min(10,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>2)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+": "+B(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const Y=function(e,t){return e instanceof t};class Source{constructor(e,n="GraphQL request",r={line:1,column:1}){"string"==typeof e||t(!1,`Body must be a string. Received: ${P(e)}.`),this.body=e,this.name=n,this.locationOffset=r,this.locationOffset.line>0||t(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||t(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function J(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t){const n=function(e){return Y(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t}parseName(){const e=this.expectToken(v.NAME);return this.node(e,{kind:m.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:m.DOCUMENT,definitions:this.many(v.SOF,this.parseDefinition,v.EOF)})}parseDefinition(){if(this.peek(v.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===v.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 u(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(v.BRACE_L))return this.node(e,{kind:m.OPERATION_DEFINITION,operation:f.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(v.NAME)&&(n=this.parseName()),this.node(e,{kind:m.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(v.NAME);switch(e.value){case"query":return f.QUERY;case"mutation":return f.MUTATION;case"subscription":return f.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(v.PAREN_L,this.parseVariableDefinition,v.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:m.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(v.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(v.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(v.DOLLAR),this.node(e,{kind:m.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:m.SELECTION_SET,selections:this.many(v.BRACE_L,this.parseSelection,v.BRACE_R)})}parseSelection(){return this.peek(v.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(v.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:m.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(v.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(v.PAREN_L,t,v.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(v.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(v.NAME)?this.node(e,{kind:m.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:m.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){var e;const t=this._lexer.token;return this.expectKeyword("fragment"),!0===(null===(e=this._options)||void 0===e?void 0:e.allowLegacyFragmentVariables)?this.node(t,{kind:m.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:m.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 v.BRACKET_L:return this.parseList(e);case v.BRACE_L:return this.parseObject(e);case v.INT:return this._lexer.advance(),this.node(t,{kind:m.INT,value:t.value});case v.FLOAT:return this._lexer.advance(),this.node(t,{kind:m.FLOAT,value:t.value});case v.STRING:case v.BLOCK_STRING:return this.parseStringLiteral();case v.NAME:switch(this._lexer.advance(),t.value){case"true":return this.node(t,{kind:m.BOOLEAN,value:!0});case"false":return this.node(t,{kind:m.BOOLEAN,value:!1});case"null":return this.node(t,{kind:m.NULL});default:return this.node(t,{kind:m.ENUM,value:t.value})}case v.DOLLAR:if(e){if(this.expectToken(v.DOLLAR),this._lexer.token.kind===v.NAME){const e=this._lexer.token.value;throw u(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._lexer.advance(),this.node(e,{kind:m.STRING,value:e.value,block:e.kind===v.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:m.LIST,values:this.any(v.BRACKET_L,(()=>this.parseValueLiteral(e)),v.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:m.OBJECT,fields:this.any(v.BRACE_L,(()=>this.parseObjectField(e)),v.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(v.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(v.AT),this.node(t,{kind:m.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(v.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(v.BRACKET_R),t=this.node(e,{kind:m.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(v.BANG)?this.node(e,{kind:m.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:m.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(v.STRING)||this.peek(v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);return this.node(e,{kind:m.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(v.COLON);const n=this.parseNamedType();return this.node(e,{kind:m.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:m.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:m.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(v.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseFieldDefinition,v.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(v.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:m.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(v.PAREN_L,this.parseInputValueDef,v.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(v.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(v.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:m.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:m.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:m.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(v.EQUALS)?this.delimitedMany(v.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:m.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(v.BRACE_L,this.parseEnumValueDefinition,v.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:m.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 u(this._lexer.source,this._lexer.token.start,`${q(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:m.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseInputValueDef,v.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:m.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:m.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:m.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:m.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:m.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:m.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:m.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(v.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:m.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(v.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.prototype.hasOwnProperty.call(h,t.value))return t;throw this.unexpected(e)}node(e,t){var n;return!0!==(null===(n=this._options)||void 0===n?void 0:n.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._lexer.advance(),t;throw u(this._lexer.source,t.start,`Expected ${X(e)}, found ${q(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this._lexer.advance(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==v.NAME||t.value!==e)throw u(this._lexer.source,t.start,`Expected "${e}", found ${q(t)}.`);this._lexer.advance()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===v.NAME&&t.value===e&&(this._lexer.advance(),!0)}unexpected(e){const t=null!=e?e:this._lexer.token;return u(this._lexer.source,t.start,`Unexpected ${q(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}}function q(e){const t=e.value;return X(e.kind)+(null!=t?` "${t}"`:"")}function X(e){return function(e){return e===v.BANG||e===v.DOLLAR||e===v.AMP||e===v.PAREN_L||e===v.PAREN_R||e===v.SPREAD||e===v.COLON||e===v.EQUALS||e===v.AT||e===v.BRACKET_L||e===v.BRACKET_R||e===v.BRACE_L||e===v.PIPE||e===v.BRACE_R}(e)?`"${e}"`:e}function K(e,t){const[n,r]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const o=r.map((e=>`"${e}"`));switch(o.length){case 0:return"";case 1:return i+o[0]+"?";case 2:return i+o[0]+" or "+o[1]+"?"}const s=o.slice(0,5),a=s.pop();return i+s.join(", ")+", or "+a+"?"}function z(e){return e}function H(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}function W(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function Z(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function ee(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-te,o=t.charCodeAt(r)}while(ne(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const te=48;function ne(e){return!isNaN(e)&&te<=e&&e<=57}function re(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:ee(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=ie(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=ie(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 ie(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>me(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=ye("(",me(e.variableDefinitions,", "),")"),n=me([e.operation,me([e.name,t]),me(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+ye(" = ",n)+ye(" ",me(r," "))},SelectionSet:{leave:({selections:e})=>ve(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){const o=ye("",e,": ")+t;let s=o+ye("(",me(n,", "),")");return s.length>80&&(s=o+ye("(\n",Ee(me(n,"\n")),"\n)")),me([s,me(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+ye(" ",me(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>me(["...",ye("on ",e),me(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${ye("(",me(n,", "),")")} on ${t} ${ye("",me(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?function(e,t){const n=e.replace(/"""/g,'\\"""'),r=n.split(/\r\n|[\n\r]/g),i=1===r.length,o=r.length>1&&r.slice(1).every((e=>0===e.length||y(e.charCodeAt(0)))),s=n.endsWith('\\"""'),a=e.endsWith('"')&&!s,c=e.endsWith("\\"),u=a||c,l=!(null!=t&&t.minimize)&&(!i||e.length>70||u||o||s);let p="";const d=i&&y(e.charCodeAt(0));return(l&&!d||o)&&(p+="\n"),p+=n,(l||u)&&(p+="\n"),'"""'+p+'"""'}(e):`"${e.replace(se,ae)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+me(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+me(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+ye("(",me(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>ye("",e,"\n")+me(["schema",me(t," "),ve(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me(["scalar",t,me(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["type",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>ye("",e,"\n")+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+": "+r+ye(" ",me(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>ye("",e,"\n")+me([t+": "+n,ye("= ",r),me(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["interface",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>ye("",e,"\n")+me(["union",t,me(n," "),ye("= ",me(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>ye("",e,"\n")+me(["enum",t,me(n," "),ve(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me([t,me(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>ye("",e,"\n")+me(["input",t,me(n," "),ve(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>ye("",e,"\n")+"directive @"+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+(r?" repeatable":"")+" on "+me(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>me(["extend schema",me(e," "),ve(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>me(["extend scalar",e,me(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend type",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend interface",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>me(["extend union",e,me(t," "),ye("= ",me(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>me(["extend enum",e,me(t," "),ve(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>me(["extend input",e,me(t," "),ve(n)]," ")}};function me(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function ve(e){return ye("{\n",Ee(me(e,"\n")),"\n}")}function ye(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Ee(e){return ye(" ",e.replace(/\n/g,"\n "))}function Te(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}function Ne(e,t){switch(e.kind){case m.NULL:return null;case m.INT:return parseInt(e.value,10);case m.FLOAT:return parseFloat(e.value);case m.STRING:case m.ENUM:case m.BOOLEAN:return e.value;case m.LIST:return e.values.map((e=>Ne(e,t)));case m.OBJECT:return W(e.fields,(e=>e.name.value),(e=>Ne(e.value,t)));case m.VARIABLE:return null==t?void 0:t[e.name.value]}}function Ie(e){if(null!=e||t(!1,"Must provide name."),"string"==typeof e||t(!1,"Expected name to be a string."),0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;ts(Ne(e,t)),this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(o=e.extensionASTNodes)&&void 0!==o?o:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||t(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${P(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||t(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||t(!1,`${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){var n;this.name=Ie(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=()=>Ye(e),this._interfaces=()=>Be(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||t(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${P(e.isTypeOf)}.`)}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:Xe(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Be(e){var n;const r=Me(null!==(n=e.interfaces)&&void 0!==n?n:[]);return Array.isArray(r)||t(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),r}function Ye(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>{var i;qe(n)||t(!1,`${e.name}.${r} field config must be an object.`),null==n.resolve||"function"==typeof n.resolve||t(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${P(n.resolve)}.`);const o=null!==(i=n.args)&&void 0!==i?i:{};return qe(o)||t(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:Ie(r),description:n.description,type:n.type,args:Je(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function Je(e){return Object.entries(e).map((([e,t])=>({name:Ie(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:oe(t.extensions),astNode:t.astNode})))}function qe(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:Ke(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function Ke(e){return W(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(e){return xe(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=Ye.bind(void 0,e),this._interfaces=Be.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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:Xe(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){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._types=He.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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 He(e){const n=Me(e.types);return Array.isArray(n)||t(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),n}class GraphQLEnumType{constructor(e){var n,r,i;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._values=(r=this.name,qe(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(qe(n)||t(!1,`${r}.${e} must refer to an object with a "value" key representing an internal value but got: ${P(n)}.`),{name:ge(e),description:n.description,value:void 0!==n.value?n.value:e,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=H(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${P(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=P(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+We(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+We(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.ENUM){const t=fe(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+We(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=fe(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+We(this,t),e)}return n.value}toConfig(){const e=W(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 We(e,t){return K("the enum value",re(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){var t;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ze.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=Z(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}}toString(){return this.name}toJSON(){return this.toString()}}function Ze(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>(!("resolve"in n)||t(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:Ie(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))}function et(e){return xe(e.type)&&void 0===e.defaultValue}function tt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&tt(e.ofType,t.ofType)}function nt(e,t,n){return t===n||(xe(n)?!!xe(t)&&nt(e,t.ofType,n.ofType):xe(t)?nt(e,t.ofType,n):we(n)?!!we(t)&&nt(e,t.ofType,n.ofType):!we(t)&&(Ge(n)&&(Se(t)||Oe(t))&&e.isSubType(n,t)))}function rt(e,t,n){return t===n||(Ge(t)?Ge(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Ge(n)&&e.isSubType(n,t))}const it=2147483647,ot=-2147483648,st=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=ft(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: ${P(t)}`);if(n>it||nit||eit||te.name===t))}function ft(e){if(n(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!n(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}function ht(e){return Y(e,GraphQLDirective)}class GraphQLDirective{constructor(e){var r,i;this.name=Ie(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(r=e.isRepeatable)&&void 0!==r&&r,this.extensions=oe(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||t(!1,`@${e.name} locations must be an Array.`);const o=null!==(i=e.args)&&void 0!==i?i:{};n(o)&&!Array.isArray(o)||t(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=Je(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:Ke(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const mt=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Included when true."}}}),vt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Skipped when true."}}}),yt="No longer supported",Et=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[h.FIELD_DEFINITION,h.ARGUMENT_DEFINITION,h.INPUT_FIELD_DEFINITION,h.ENUM_VALUE],args:{reason:{type:ct,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:yt}}}),Tt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ct),description:"The URL that specifies the behavior of this scalar."}}}),Nt=Object.freeze([mt,vt,Et,Tt]);function It(e,t){if(xe(t)){const n=It(e,t.ofType);return(null==n?void 0:n.kind)===m.NULL?null:n}if(null===e)return{kind:m.NULL};if(void 0===e)return null;if(we(t)){const n=t.ofType;if("object"==typeof(i=e)&&"function"==typeof(null==i?void 0:i[Symbol.iterator])){const t=[];for(const r of e){const e=It(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return It(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=It(e[n.name],n.type);t&&r.push({kind:m.OBJECT_FIELD,name:{kind:m.NAME,value:n.name},value:t})}return{kind:m.OBJECT,fields:r}}if(Re(t)){const n=t.serialize(e);if(null==n)return null;if("boolean"==typeof n)return{kind:m.BOOLEAN,value:n};if("number"==typeof n&&Number.isFinite(n)){const e=String(n);return gt.test(e)?{kind:m.INT,value:e}:{kind:m.FLOAT,value:e}}if("string"==typeof n)return Ae(t)?{kind:m.ENUM,value:n}:t===lt&>.test(n)?{kind:m.INT,value:n}:{kind:m.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${P(n)}.`)}r(!1,"Unexpected input type: "+P(t))}const gt=/^-?(?:0|[1-9][0-9]*)$/,_t=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:ct,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(St))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(St),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:St,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:St,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(bt))),resolve:e=>e.getDirectives()}})}),bt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(ut),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ot))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ot=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:h.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:h.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:h.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:h.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:h.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:h.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:h.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:h.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:h.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:h.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:h.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:h.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:h.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:h.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:h.UNION,description:"Location adjacent to a union definition."},ENUM:{value:h.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:h.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:h.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:h.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),St=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(xt),resolve:e=>be(e)?wt.SCALAR:Oe(e)?wt.OBJECT:Se(e)?wt.INTERFACE:Le(e)?wt.UNION:Ae(e)?wt.ENUM:De(e)?wt.INPUT_OBJECT:we(e)?wt.LIST:xe(e)?wt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ct,resolve:e=>"name"in e?e.name:void 0},description:{type:ct,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ct,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(Lt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Oe(e)||Se(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e){if(Oe(e)||Se(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if(Ge(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Dt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ae(e)){const n=e.getValues();return t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(De(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:St,resolve:e=>"ofType"in e?e.ofType:void 0}})}),Lt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),At=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ct,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=It(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),Dt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})});let wt;!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"}(wt||(wt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:wt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:wt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:wt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:wt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:wt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:wt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:wt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:wt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),kt={name:"__schema",type:new GraphQLNonNull(_t),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},Ft={name:"__type",type:St,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ct),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},Rt={name:"__typename",type:new GraphQLNonNull(ct),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},Ct=Object.freeze([_t,bt,Ot,St,Lt,At,Dt,xt]);function Gt(e){return Ct.some((({name:t})=>e.name===t))}function $t(e){if(!function(e){return Y(e,GraphQLSchema)}(e))throw new Error(`Expected ${P(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){var r,i;this.__validationErrors=!0===e.assumeValid?[]:void 0,n(e)||t(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||t(!1,`"types" must be Array if provided but got: ${P(e.types)}.`),!e.directives||Array.isArray(e.directives)||t(!1,`"directives" must be Array if provided but got: ${P(e.directives)}.`),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(r=e.extensionASTNodes)&&void 0!==r?r:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(i=e.directives)&&void 0!==i?i:Nt;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Qt(t,o);null!=this._queryType&&Qt(this._queryType,o),null!=this._mutationType&&Qt(this._mutationType,o),null!=this._subscriptionType&&Qt(this._subscriptionType,o);for(const e of this._directives)if(ht(e))for(const t of e.args)Qt(t.type,o);Qt(_t,o),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of o){if(null==e)continue;const n=e.name;if(n||t(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[n])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${n}".`);if(this._typeMap[n]=e,Se(e)){for(const t of e.getInterfaces())if(Se(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(Oe(e))for(const t of e.getInterfaces())if(Se(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 f.QUERY:return this.getQueryType();case f.MUTATION:return this.getMutationType();case f.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return Le(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),Le(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}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=Ve(e);if(!t.has(n))if(t.add(n),Le(n))for(const e of n.getTypes())Qt(e,t);else if(Oe(n)||Se(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(De(n))for(const e of Object.values(n.getFields()))Qt(e.type,t);return t}function jt(e){if($t(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!Oe(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Ut(t,f.QUERY))&&void 0!==r?r:n.astNode)}}else e.reportError("Query root type must be provided.",t.astNode);const i=t.getMutationType();var o;i&&!Oe(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Ut(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!Oe(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Ut(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(ht(n)){Vt(e,n);for(const r of n.args){var t;if(Vt(e,r),ke(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),ze(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Ht(r.astNode),null===(t=r.astNode)||void 0===t?void 0:t.type])}}else e.reportError(`Expected directive but got: ${P(n)}.`,null==n?void 0:n.astNode)}(t),function(e){const t=function(e){const t=Object.create(null),n=[],r=Object.create(null);return i;function i(o){if(t[o.name])return;t[o.name]=!0,r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if(xe(t.type)&&De(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))Ue(r)?(Gt(r)||Vt(e,r),Oe(r)||Se(r)?(Mt(e,r),Pt(e,r)):Le(r)?Jt(e,r):Ae(r)?qt(e,r):De(r)&&(Xt(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${P(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,n))}getErrors(){return this._errors}}function Ut(e,t){var n;return null===(n=[e.astNode,...e.extensionASTNodes].flatMap((e=>{var t;return null!==(t=null==e?void 0:e.operationTypes)&&void 0!==t?t:[]})).find((e=>e.operation===t)))||void 0===n?void 0:n.type}function Vt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Mt(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 s of n){var r;if(Vt(e,s),!Fe(s.type))e.reportError(`The type of ${t.name}.${s.name} must be Output Type but got: ${P(s.type)}.`,null===(r=s.astNode)||void 0===r?void 0:r.type);for(const n of s.args){const r=n.name;var i,o;if(Vt(e,n),!ke(n.type))e.reportError(`The type of ${t.name}.${s.name}(${r}:) must be Input Type but got: ${P(n.type)}.`,null===(i=n.astNode)||void 0===i?void 0:i.type);if(ze(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Ht(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Pt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Se(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Kt(t,r)):(n[r.name]=!0,Yt(e,t,r),Bt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Kt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,Kt(t,r))}function Bt(e,t,n){const r=t.getFields();for(const c of Object.values(n.getFields())){const u=c.name,l=r[u];if(l){var i,o;if(!nt(e.schema,l.type,c.type))e.reportError(`Interface field ${n.name}.${u} expects type ${P(c.type)} but ${t.name}.${u} is type ${P(l.type)}.`,[null===(i=c.astNode)||void 0===i?void 0:i.type,null===(o=l.astNode)||void 0===o?void 0:o.type]);for(const r of c.args){const i=r.name,o=l.args.find((e=>e.name===i));var s,a;if(o){if(!tt(r.type,o.type))e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expects type ${P(r.type)} but ${t.name}.${u}(${i}:) is type ${P(o.type)}.`,[null===(s=r.astNode)||void 0===s?void 0:s.type,null===(a=o.astNode)||void 0===a?void 0:a.type])}else e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expected but ${t.name}.${u} does not provide it.`,[r.astNode,l.astNode])}for(const r of l.args){const i=r.name;!c.args.find((e=>e.name===i))&&ze(r)&&e.reportError(`Object field ${t.name}.${u} includes required argument ${i} that is missing from the Interface field ${n.name}.${u}.`,[r.astNode,c.astNode])}}else e.reportError(`Interface field ${n.name}.${u} expected but ${t.name} does not provide it.`,[c.astNode,t.astNode,...t.extensionASTNodes])}}function Yt(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}.`,[...Kt(n,i),...Kt(t,n)])}function Jt(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=Object.create(null);for(const i of n)r[i.name]?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,zt(t,i.name)):(r[i.name]=!0,Oe(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,zt(t,String(i))))}function qt(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)Vt(e,t)}function Xt(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 o of n){var r,i;if(Vt(e,o),!ke(o.type))e.reportError(`The type of ${t.name}.${o.name} must be Input Type but got: ${P(o.type)}.`,null===(r=o.astNode)||void 0===r?void 0:r.type);if(et(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Ht(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function Kt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.interfaces)&&void 0!==t?t:[]})).filter((e=>e.name.value===t.name))}function zt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.types)&&void 0!==t?t:[]})).filter((e=>e.name.value===t))}function Ht(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Et.name))}function Wt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLNonNull(n)}case m.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=null!=n?n:Zt,t&&(ke(t)&&this._inputTypeStack.push(t),Ce(t)&&this._parentTypeStack.push(t),Fe(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case m.SELECTION_SET:{const e=Ve(this.getType());this._parentTypeStack.push(Ce(e)?e:void 0);break}case m.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(Fe(i)?i:void 0);break}case m.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case m.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(Oe(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Wt(t,n):Ve(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Wt(t,e.type);this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ARGUMENT:{var n;let t,r;const i=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();i&&(t=i.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(ke(r)?r:void 0);break}case m.LIST:{const e=je(this.getInputType()),t=we(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(ke(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Ve(this.getInputType());let n,r;De(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ENUM:{const t=Ve(this.getInputType());let n;Ae(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case m.SELECTION_SET:this._parentTypeStack.pop();break;case m.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case m.DIRECTIVE:this._directive=null;break;case m.OPERATION_DEFINITION:case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:this._typeStack.pop();break;case m.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case m.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.LIST:case m.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.ENUM:this._enumValue=null}}}function Zt(e,t,n){const r=n.name.value;return r===kt.name&&e.getQueryType()===t?kt:r===Ft.name&&e.getQueryType()===t?Ft:r===Rt.name&&Ce(t)?Rt:Oe(t)||Se(t)?t.getFields()[r]:void 0}function en(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=de(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),d(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=de(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function tn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function nn(e){return e.kind===m.SCALAR_TYPE_DEFINITION||e.kind===m.OBJECT_TYPE_DEFINITION||e.kind===m.INTERFACE_TYPE_DEFINITION||e.kind===m.UNION_TYPE_DEFINITION||e.kind===m.ENUM_TYPE_DEFINITION||e.kind===m.INPUT_OBJECT_TYPE_DEFINITION}function rn(e){return e.kind===m.SCALAR_TYPE_EXTENSION||e.kind===m.OBJECT_TYPE_EXTENSION||e.kind===m.INTERFACE_TYPE_EXTENSION||e.kind===m.UNION_TYPE_EXTENSION||e.kind===m.ENUM_TYPE_EXTENSION||e.kind===m.INPUT_OBJECT_TYPE_EXTENSION}function on(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=e.args.map((e=>e.name));const i=e.getDocument().definitions;for(const e of i)if(e.kind===m.DIRECTIVE_DEFINITION){var o;const n=null!==(o=e.arguments)&&void 0!==o?o:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const r=n.name.value,i=t[r];if(n.arguments&&i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=re(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+K(o),t))}}return!1}}}function sn(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():Nt;for(const e of i)t[e.name]=e.locations;const o=e.getDocument().definitions;for(const e of o)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,i,o,s,a){const c=n.name.value,u=t[c];if(!u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,n));const l=function(e){const t=e[e.length-1];switch("kind"in t||r(!1),t.kind){case m.OPERATION_DEFINITION:return function(e){switch(e){case f.QUERY:return h.QUERY;case f.MUTATION:return h.MUTATION;case f.SUBSCRIPTION:return h.SUBSCRIPTION}}(t.operation);case m.FIELD:return h.FIELD;case m.FRAGMENT_SPREAD:return h.FRAGMENT_SPREAD;case m.INLINE_FRAGMENT:return h.INLINE_FRAGMENT;case m.FRAGMENT_DEFINITION:return h.FRAGMENT_DEFINITION;case m.VARIABLE_DEFINITION:return h.VARIABLE_DEFINITION;case m.SCHEMA_DEFINITION:case m.SCHEMA_EXTENSION:return h.SCHEMA;case m.SCALAR_TYPE_DEFINITION:case m.SCALAR_TYPE_EXTENSION:return h.SCALAR;case m.OBJECT_TYPE_DEFINITION:case m.OBJECT_TYPE_EXTENSION:return h.OBJECT;case m.FIELD_DEFINITION:return h.FIELD_DEFINITION;case m.INTERFACE_TYPE_DEFINITION:case m.INTERFACE_TYPE_EXTENSION:return h.INTERFACE;case m.UNION_TYPE_DEFINITION:case m.UNION_TYPE_EXTENSION:return h.UNION;case m.ENUM_TYPE_DEFINITION:case m.ENUM_TYPE_EXTENSION:return h.ENUM;case m.ENUM_VALUE_DEFINITION:return h.ENUM_VALUE;case m.INPUT_OBJECT_TYPE_DEFINITION:case m.INPUT_OBJECT_TYPE_EXTENSION:return h.INPUT_OBJECT;case m.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||r(!1),t.kind===m.INPUT_OBJECT_TYPE_DEFINITION?h.INPUT_FIELD_DEFINITION:h.ARGUMENT_DEFINITION}default:r(!1,"Unexpected kind: "+P(t.kind))}}(a);l&&!u.includes(l)&&e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,n))}}}function an(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(r[t.name.value]=!0);const i=[...Object.keys(n),...Object.keys(r)];return{NamedType(t,o,s,a,c){const u=t.name.value;if(!n[u]&&!r[u]){var l;const n=null!==(l=c[2])&&void 0!==l?l:s,r=null!=n&&("kind"in(p=n)&&(function(e){return e.kind===m.SCHEMA_DEFINITION||nn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||rn(e)}(p)));if(r&&cn.includes(u))return;const o=re(u,r?cn.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+K(o),t))}var p}}}const cn=[...pt,...Ct].map((e=>e.name));function un(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const r=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))r[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==r[n]&&e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,t))}}}}}function ln(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:ln(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(ln)};case m.INT:case m.FLOAT:case m.STRING:case m.BOOLEAN:case m.NULL:case m.ENUM:case m.VARIABLE:return e}var t}function pn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+pn(t))).join(" and "):e}function dn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=Tn(e,n,a);if(o!==c){hn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),dn(e,t,n,r,i,o,a))}}function fn(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]=Tn(e,n,a),[p,d]=Tn(e,n,c);hn(e,t,n,r,i,u,p);for(const s of d)fn(e,t,n,r,i,o,s);for(const o of l)fn(e,t,n,r,i,o,s)}function hn(e,t,n,r,i,o,s){for(const[a,c]of Object.entries(o)){const o=s[a];if(o)for(const s of c)for(const c of o){const o=mn(e,n,r,i,a,s,c);o&&t.push(o)}}}function mn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&Oe(a)&&Oe(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(vn(c)!==vn(p))return[[i,"they have differing arguments"],[c],[p]]}const h=null==u?void 0:u.type,m=null==d?void 0:d.type;if(h&&m&&yn(h,m))return[[i,`they return conflicting types "${P(h)}" and "${P(m)}"`],[c],[p]];const v=c.selectionSet,y=p.selectionSet;if(v&&y){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=En(e,t,i,o),[p,d]=En(e,t,s,a);hn(e,c,t,n,r,u,p);for(const i of d)dn(e,c,t,n,r,u,i);for(const i of l)dn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)fn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ve(h),v,Ve(m),y);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 vn(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(ln({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function yn(e,t){return we(e)?!we(t)||yn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||yn(e.ofType,t.ofType):!!xe(t)||!(!Re(e)&&!Re(t))&&e!==t)}function En(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);Nn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function Tn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Wt(e.getSchema(),n.typeCondition);return En(e,t,i,n.selectionSet)}function Nn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(Oe(t)||Se(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;r[i]||(r[i]=[]),r[i].push([t,o,n]);break}case m.FRAGMENT_SPREAD:i[o.name.value]=!0;break;case m.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?Wt(e.getSchema(),n):t;Nn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){var r;const[i,o]=ee.name));const o=e.getDocument().definitions;for(const e of o)if(e.kind===m.DIRECTIVE_DEFINITION){var s;const t=null!==(s=e.arguments)&&void 0!==s?s:[];n[e.name.value]=H(t.filter(_n),(e=>e.name.value))}return{Directive:{leave(t){const r=t.name.value,i=n[r];if(i){var o;const n=null!==(o=t.arguments)&&void 0!==o?o:[],s=new Set(n.map((e=>e.name.value)));for(const[n,o]of Object.entries(i))if(!s.has(n)){const i=_e(o.type)?P(o.type):fe(o.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${n}" of type "${i}" is required, but it was not provided.`,t))}}}}}}function _n(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function bn(e,t,n){if(e){if(e.kind===m.VARIABLE){const r=e.name.value;if(null==n||void 0===n[r])return;const i=n[r];if(null===i&&xe(t))return;return i}if(xe(t)){if(e.kind===m.NULL)return;return bn(e,t.ofType,n)}if(e.kind===m.NULL)return null;if(we(t)){const r=t.ofType;if(e.kind===m.LIST){const t=[];for(const i of e.values)if(On(i,n)){if(xe(r))return;t.push(null)}else{const e=bn(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=bn(e,r,n);if(void 0===i)return;return[i]}if(De(t)){if(e.kind!==m.OBJECT)return;const r=Object.create(null),i=H(e.fields,(e=>e.name.value));for(const e of Object.values(t.getFields())){const t=i[e.name];if(!t||On(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=bn(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Re(t)){let r;try{r=t.parseLiteral(e,n)}catch(e){return}if(void 0===r)return;return r}r(!1,"Unexpected input type: "+P(t))}}function On(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function Sn(e,t,n){var r;const i=null===(r=t.directives)||void 0===r?void 0:r.find((t=>t.name.value===e.name));if(i)return function(e,t,n){var r;const i={},o=H(null!==(r=t.arguments)&&void 0!==r?r:[],(e=>e.name.value));for(const r of e.args){const e=r.name,c=r.type,u=o[e];if(!u){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was not provided.`,t);continue}const l=u.value;let p=l.kind===m.NULL;if(l.kind===m.VARIABLE){const t=l.name.value;if(null==n||(s=n,a=t,!Object.prototype.hasOwnProperty.call(s,a))){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was provided the variable "$${t}" which was not provided a runtime value.`,l);continue}p=null==n[t]}if(p&&xe(c))throw new GraphQLError(`Argument "${e}" of non-null type "${P(c)}" must not be null.`,l);const d=bn(l,c,n);if(void 0===d)throw new GraphQLError(`Argument "${e}" has invalid value ${fe(l)}.`,l);i[e]=d}var s,a;return i}(e,i,n)}function Ln(e,t,n,r,i){const o=new Map;return An(e,t,n,r,i,o,new Set),o}function An(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!Dn(n,c))continue;const e=(a=c).alias?a.alias.value:a.name.value,t=o.get(e);void 0!==t?t.push(c):o.set(e,[c]);break}case m.INLINE_FRAGMENT:if(!Dn(n,c)||!wn(e,c,r))continue;An(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!Dn(n,c))continue;s.add(i);const a=t[i];if(!a||!wn(e,a,r))continue;An(e,t,n,r,a.selectionSet,o,s);break}}var a}function Dn(e,t){const n=Sn(vt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=Sn(mt,t,e);return!1!==(null==r?void 0:r.if)}function wn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Wt(e,r);return i===n||!!Ge(i)&&e.isSubType(i,n)}function xn(e,t){const n=new Map;for(const r of e){const e=t(r),i=n.get(e);void 0===i?n.set(e,[r]):i.push(r)}return n}function kn(e){return{Field:t,Directive:t};function t(t){var n;const r=xn(null!==(n=t.arguments)&&void 0!==n?n:[],(e=>e.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}function Fn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=!e.isRepeatable;const i=e.getDocument().definitions;for(const e of i)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const o=Object.create(null),s=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION)r=o;else if(nn(n)||rn(n)){const e=n.name.value;r=s[e],void 0===r&&(s[e]=r=Object.create(null))}else r=Object.create(null);for(const i of n.directives){const n=i.name.value;t[n]&&(r[n]?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,[r[n],i])):r[n]=i)}}}}function Rn(e,t){return!!(Oe(e)||Se(e)||De(e))&&null!=e.getFields()[t]}function Cn(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||r(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new GraphQLError(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}function Gn(e,t){const n=e.getInputType();if(!n)return;const r=Ve(n);if(Re(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}catch(r){const i=P(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${fe(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}function $n(e,t,n,r,i){if(xe(r)&&!xe(t)){const o=void 0!==i;if(!(null!=n&&n.kind!==m.NULL)&&!o)return!1;return nt(e,t,r.ofType)}return nt(e,t,r)}const Qn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!tn(n)){const t=n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,n))}return!1}}},function(e){const t=Object.create(null);return{OperationDefinition(n){const r=n.name;return r&&(t[r.value]?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,[t[r.value],r])):t[r.value]=r),!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===m.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",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===m.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const c=Ln(n,a,o,r,t.selectionSet);if(c.size>1){const t=[...c.values()].slice(1).flat();e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of c.values()){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.",t))}}}}}},an,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Wt(e.getSchema(),n);if(t&&!Ce(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Wt(e.getSchema(),t.typeCondition);if(n&&!Ce(n)){const n=fe(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,t.typeCondition))}}}},function(e){return{VariableDefinition(t){const n=Wt(e.getSchema(),t.type);if(void 0!==n&&!ke(n)){const n=t.variable.name.value,r=fe(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,t.type))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Re(Ve(n))){if(r){const i=t.name.value,o=P(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,r))}}else if(!r){const r=t.name.value,i=P(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,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=K("to use an inline fragment on",function(e,t,n){if(!Ge(t))return[];const r=new Set,i=Object.create(null);for(const s of e.getPossibleTypes(t))if(s.getFields()[n]){r.add(s),i[s.name]=1;for(const e of s.getInterfaces()){var o;e.getFields()[n]&&(r.add(e),i[e.name]=(null!==(o=i[e.name])&&void 0!==o?o:0)+1)}}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Se(t)&&e.isSubType(t,n)?-1:Se(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=K(function(e,t){if(Oe(e)||Se(e)){return re(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,t))}}}}},function(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value;return t[r]?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,[t[r],n.name])):t[r]=n.name,!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,t.name))}}},un,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ce(n)&&Ce(r)&&!rt(e.getSchema(),n,r)){const i=P(r),o=P(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,t))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=Wt(e.getSchema(),n.typeCondition);if(Ce(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!rt(e.getSchema(),r,i)){const o=P(i),s=P(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,t))}}}},function(e){const t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t[o.name.value])return;const s=o.name.value;t[s]=!0;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}.`:"."),t))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){var n;const r=xn(null!==(n=t.variableDefinitions)&&void 0!==n?n:[],(e=>e.variable.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:i}of r){const r=i.name.value;!0!==t[r]&&e.reportError(new GraphQLError(n.name?`Variable "$${r}" is not defined by operation "${n.name.value}".`:`Variable "$${r}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}},function(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){const r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(const{node:e}of i)r[e.name.value]=!0;for(const i of t){const t=i.variable.name.value;!0!==r[t]&&e.reportError(new GraphQLError(n.name?`Variable "$${t}" is never used in operation "${n.name.value}".`:`Variable "$${t}" is never used.`,i))}}},VariableDefinition(e){t.push(e)}}},sn,Fn,function(e){return{...on(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=re(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+K(o),t))}}}},kn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Gn(e,t),!1},ObjectValue(t){const n=Ve(e.getInputType());if(!De(n))return Gn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&et(i)){const r=P(i.type);e.reportError(new GraphQLError(`Field "${n.name}.${i.name}" of required type "${r}" was not provided.`,t))}}},ObjectField(t){const n=Ve(e.getParentInputType());if(!e.getInputType()&&De(n)){const r=re(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+K(r),t))}},NullValue(t){const n=e.getInputType();xe(n)&&e.reportError(new GraphQLError(`Expected value of type "${P(n)}", found ${fe(t)}.`,t))},EnumValue:t=>Gn(e,t),IntValue:t=>Gn(e,t),FloatValue:t=>Gn(e,t),StringValue:t=>Gn(e,t),BooleanValue:t=>Gn(e,t)}},function(e){return{...gn(e),Field:{leave(t){var n;const r=e.getFieldDef();if(!r)return!1;const i=new Set(null===(n=t.arguments)||void 0===n?void 0:n.map((e=>e.name.value)));for(const n of r.args)if(!i.has(n.name)&&ze(n)){const i=P(n.type);e.reportError(new GraphQLError(`Field "${r.name}" argument "${n.name}" of type "${i}" is required, but it was not provided.`,t))}}}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t[r];if(s&&i){const t=e.getSchema(),a=Wt(t,s.type);if(a&&!$n(t,a,s.defaultValue,i,o)){const t=P(a),o=P(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,[s,n]))}}}}},VariableDefinition(e){t[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]=En(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of Object.entries(i))if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",t)),++s)}}},function(e){const t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const o=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of o){const i=t.operation,o=n[i];r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,[o,t])):n[i]=t}return!1}},function(e){const t=Object.create(null),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(null==n||!n.getType(i))return t[i]?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,r.name))}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.values)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value,i=n[o];Ae(i)&&i.getValue(r)?e.reportError(new GraphQLError(`Enum value "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Enum value "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.fields)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value;Rn(n[o],r)?e.reportError(new GraphQLError(`Field "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Field "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,i=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of i){var o;n(`${r}.${e.name.value}`,null!==(o=e.arguments)&&void 0!==o?o:[])}return!1}function n(t,n){const r=xn(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.`,i.map((e=>e.name))));return!1}},function(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,r.name))}}},an,sn,Fn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(n[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=n[o],a=null==t?void 0:t.getType(o);let c;if(s?c=In[s.kind]:a&&(c=function(e){if(be(e))return m.SCALAR_TYPE_EXTENSION;if(Oe(e))return m.OBJECT_TYPE_EXTENSION;if(Se(e))return m.INTERFACE_TYPE_EXTENSION;if(Le(e))return m.UNION_TYPE_EXTENSION;if(Ae(e))return m.ENUM_TYPE_EXTENSION;if(De(e))return m.INPUT_OBJECT_TYPE_EXTENSION;r(!1,"Unexpected type: "+P(e))}(a)),c){if(c!==i.kind){const t=function(e){switch(e){case m.SCALAR_TYPE_EXTENSION:return"scalar";case m.OBJECT_TYPE_EXTENSION:return"object";case m.INTERFACE_TYPE_EXTENSION:return"interface";case m.UNION_TYPE_EXTENSION:return"union";case m.ENUM_TYPE_EXTENSION:return"enum";case m.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:r(!1,"Unexpected kind: "+P(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,s?[s,i]:i))}}else{const r=re(o,Object.keys({...n,...null==t?void 0:t.getTypeMap()}));e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+K(r),i.name))}}},on,kn,Cn,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===m.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===m.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=Object.create(null),r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!0!==n[i]){n[i]=!0;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);le(e,en(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 Un(e,n,r=Qn,i,o=new TypeInfo(e)){var s;const a=null!==(s=null==i?void 0:i.maxErrors)&&void 0!==s?s:100;n||t(!1,"Must provide document."),function(e){const t=jt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const c=Object.freeze({}),u=[],l=new ValidationContext(e,n,o,(e=>{if(u.length>=a)throw u.push(new GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;u.push(e)})),p=pe(r.map((e=>e(l))));try{le(n,en(o,p))}catch(e){if(e!==c)throw e}return u}function Vn(e,t,n=jn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Mn(e,r){n(e)&&n(e.__schema)||t(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${P(e)}.`);const i=e.__schema,o=W(i.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case wt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case wt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case wt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case wt.UNION:return function(e){if(!e.possibleTypes){const t=P(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(d)})}(e);case wt.ENUM:return function(e){if(!e.enumValues){const t=P(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:W(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case wt.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=P(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>E(e.inputFields)})}(e)}var t;var n;var r;const i=P(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}.`)}(e)));for(const e of[...pt,...Ct])o[e.name]&&(o[e.name]=e);const s=i.queryType?d(i.queryType):null,a=i.mutationType?d(i.mutationType):null,c=i.subscriptionType?d(i.subscriptionType):null,u=i.directives?i.directives.map((function(e){if(!e.args){const t=P(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=P(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:E(e.args)})})):[];return new GraphQLSchema({description:i.description,query:s,mutation:a,subscription:c,types:Object.values(o),directives:u,assumeValid:null==r?void 0:r.assumeValid});function l(e){if(e.kind===wt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===wt.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=l(t);return new GraphQLNonNull(function(e){if(!Qe(e))throw new Error(`Expected ${P(e)} to be a GraphQL nullable type.`);return e}(n))}return p(e)}function p(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${P(e)}.`);const n=o[t];if(!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 d(e){return function(e){if(!Oe(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Se(e))throw new Error(`Expected ${P(e)} to be a GraphQL Interface type.`);return e}(p(e))}function h(e){if(null===e.interfaces&&e.kind===wt.INTERFACE)return[];if(!e.interfaces){const t=P(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(f)}function m(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${P(e)}.`);return W(e.fields,(e=>e.name),y)}function y(e){const t=l(e.type);if(!Fe(t)){const e=P(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=P(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:E(e.args)}}function E(e){return W(e,(e=>e.name),T)}function T(e){const t=l(e.type);if(!ke(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?bn(function(e,t){const n=new Parser(e,t);n.expectToken(v.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(v.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function Pn(e,t,n){var i,o,s,a;const c=[],u=Object.create(null),l=[];let p;const d=[];for(const e of t.definitions)if(e.kind===m.SCHEMA_DEFINITION)p=e;else if(e.kind===m.SCHEMA_EXTENSION)d.push(e);else if(nn(e))c.push(e);else if(rn(e)){const t=e.name.value,n=u[t];u[t]=n?n.concat([e]):[e]}else e.kind===m.DIRECTIVE_DEFINITION&&l.push(e);if(0===Object.keys(u).length&&0===c.length&&0===l.length&&0===d.length&&null==p)return e;const f=Object.create(null);for(const t of e.types)f[t.name]=T(t);for(const e of c){var h;const t=e.name.value;f[t]=null!==(h=Bn[t])&&void 0!==h?h:x(e)}const v={query:e.query&&E(e.query),mutation:e.mutation&&E(e.mutation),subscription:e.subscription&&E(e.subscription),...p&&g([p]),...g(d)};return{description:null===(i=p)||void 0===i||null===(o=i.description)||void 0===o?void 0:o.value,...v,types:Object.values(f),directives:[...e.directives.map((function(e){const t=e.toConfig();return new GraphQLDirective({...t,args:Z(t.args,I)})})),...l.map((function(e){var t;return new GraphQLDirective({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:S(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(s=p)&&void 0!==s?s:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(d),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a};function y(e){return we(e)?new GraphQLList(y(e.ofType)):xe(e)?new GraphQLNonNull(y(e.ofType)):E(e)}function E(e){return f[e.name]}function T(e){return Gt(e)||dt(e)?e:be(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];let i=n.specifiedByURL;for(const e of r){var o;i=null!==(o=Jn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Oe(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLObjectType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Se(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Le(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLUnionType({...n,types:()=>[...e.getTypes().map(E),...w(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Ae(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[e.name])&&void 0!==t?t:[];return new GraphQLEnumType({...n,values:{...n.values,...A(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):De(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInputObjectType({...n,fields:()=>({...Z(n.fields,(e=>({...e,type:y(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):void r(!1,"Unexpected type: "+P(e))}function N(e){return{...e,type:y(e.type),args:e.args&&Z(e.args,I)}}function I(e){return{...e,type:y(e.type)}}function g(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=_(n.type)}return t}function _(e){var t;const n=e.name.value,r=null!==(t=Bn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function b(e){return e.kind===m.LIST_TYPE?new GraphQLList(b(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(b(e.type)):_(e)}function O(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:b(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:S(n.arguments),deprecationReason:Yn(n),astNode:n}}}return t}function S(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=b(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:bn(e.defaultValue,t),deprecationReason:Yn(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=b(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:bn(n.defaultValue,e),deprecationReason:Yn(n),astNode:n}}}return t}function A(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:Yn(n),astNode:n}}}return t}function D(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function w(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function x(e){var t;const n=e.name.value,r=null!==(t=u[n])&&void 0!==t?t:[];switch(e.kind){case m.OBJECT_TYPE_DEFINITION:{var i;const t=[e,...r];return new GraphQLObjectType({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.INTERFACE_TYPE_DEFINITION:{var o;const t=[e,...r];return new GraphQLInterfaceType({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.ENUM_TYPE_DEFINITION:{var s;const t=[e,...r];return new GraphQLEnumType({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,values:A(t),astNode:e,extensionASTNodes:r})}case m.UNION_TYPE_DEFINITION:{var a;const t=[e,...r];return new GraphQLUnionType({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,types:()=>w(t),astNode:e,extensionASTNodes:r})}case m.SCALAR_TYPE_DEFINITION:var c;return new GraphQLScalarType({name:n,description:null===(c=e.description)||void 0===c?void 0:c.value,specifiedByURL:Jn(e),astNode:e,extensionASTNodes:r});case m.INPUT_OBJECT_TYPE_DEFINITION:{var l;const t=[e,...r];return new GraphQLInputObjectType({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const Bn=H([...pt,...Ct],(e=>e.name));function Yn(e){const t=Sn(Et,e);return null==t?void 0:t.reason}function Jn(e){const t=Sn(Tt,e);return null==t?void 0:t.url}function qn(e,n){null!=e&&e.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&function(e){const t=Vn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Pn({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,n);if(null==r.astNode)for(const e of r.types)switch(e.name){case"Query":r.query=e;break;case"Mutation":r.mutation=e;break;case"Subscription":r.subscription=e}const i=[...r.directives,...Nt.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Xn(e){return function(e,t,n){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[zn(e),...i.map((e=>function(e){return rr(e)+"directive @"+e.name+er(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(be(e))return function(e){return rr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(Oe(e))return function(e){return rr(e)+`type ${e.name}`+Hn(e)+Wn(e)}(e);if(Se(e))return function(e){return rr(e)+`interface ${e.name}`+Hn(e)+Wn(e)}(e);if(Le(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return rr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>rr(e," ",!t)+" "+e.name+nr(e.deprecationReason)));return rr(e)+`enum ${e.name}`+Zn(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+tr(e)));return rr(e)+`input ${e.name}`+Zn(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!Nt.some((({name:e})=>e===t.name));var t}),Kn)}function Kn(e){return!dt(e)&&!Gt(e)}function zn(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();if(r&&"Subscription"!==r.name)return!1;return!0}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),rr(e)+`schema {\n${t.join("\n")}\n}`}function Hn(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Wn(e){return Zn(Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+e.name+er(e.args," ")+": "+String(e.type)+nr(e.deprecationReason))))}function Zn(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function er(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(tr).join(", ")+")":"(\n"+e.map(((e,n)=>rr(e," "+t,!n)+" "+t+tr(e))).join("\n")+"\n"+t+")"}function tr(e){const t=It(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+nr(e.deprecationReason)}function nr(e){if(null==e)return"";if(e!==yt){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function rr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+fe({kind:m.STRING,value:r,block:b(r)}).replace(/\n/g,"\n"+t)+"\n"}const ir=[un],or=[function(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.",t)),!1)}},function(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.",t))}}},...Qn.filter((e=>!ir.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function sr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function ar(e){return e.startsWith("__")}function cr(e){return null!=e}function ur(e){switch(e.kind){case m.VARIABLE:return{kind:e.kind,value:e.name.value};case m.LIST:return{kind:e.kind,value:e.values.map(ur)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=ur(t.value),e)),{})};default:return e}}function lr(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 pr(e,t){const n=new Map;for(const e of t.definitions)e.kind===m.FRAGMENT_DEFINITION&&n.set(e.name.value,e);const r=[],i=new Map,o=new Set;for(const e of t.definitions)e.kind===m.OPERATION_DEFINITION&&r.push(a(e));for(const[e,t]of n.entries())i.set(e,c(t));return{operations:r,fragments:Array.from(i.values()),referencedTypes:Array.from(o.values())};function s(t){if(o.add(t),Le(t)){const e=t.getTypes();for(t of e)o.add(Ve(t))}De(t)&&function(t){var n;const r=null===(n=t.astNode)||void 0===n?void 0:n.fields;if(r)for(const t of r){s(Ve(Wt(e,t.type)))}}(t)}function a(t){if(!t.name)throw new GraphQLError("Operations should be named",t);const n=lr(t),r=t.name.value,i=t.operation,a=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?ur(t.defaultValue):void 0,i=Wt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,t);return s(Ve(i)),{name:n,type:i,defaultValue:r}})),c=fe(t),l=e.getRootType(i);return o.add(Ve(l)),{filePath:n,name:r,operationType:i,rootType:l,variables:a,source:c,selectionSet:u(t.selectionSet,l)}}function c(t){const n=t.name.value,r=lr(t),i=fe(t),o=Wt(e,t.typeCondition);return s(Ve(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r,o=new Set){return{parentType:r,selections:t.selections.map((t=>function(t,r,o){var a;switch(t.kind){case m.FIELD:{const n=t.name.value,i=null===(a=t.alias)||void 0===a?void 0:a.value,o=function(e,t,n){return n===kt.name&&e.getQueryType()===t?kt:n===Ft.name&&e.getQueryType()===t?Ft:n===Rt.name&&(Oe(t)||Se(t)||Le(t))?Rt:Oe(t)||Se(t)?t.getFields()[n]:void 0}(e,r,n);if(!o)throw new GraphQLError(`Cannot query field "${n}" on type "${String(r)}"`,t);const c=o.type,l=Ve(c);s(Ve(l));const{description:p,deprecationReason:d}=o,f=t.arguments&&t.arguments.length>0?t.arguments.map((e=>{const t=e.name.value,n=o.args.find((t=>t.name===e.name.value)),r=n&&n.type||void 0;return{name:t,value:ur(e.value),type:r}})):void 0;let h={kind:"Field",name:n,alias:i,arguments:f,type:c,description:!ar(n)&&p?p:void 0,deprecationReason:d||void 0};if(Ce(l)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,t);h.selectionSet=u(e,l)}return h}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Wt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i)}}case m.FRAGMENT_SPREAD:{const e=t.name.value;if(o.has(e))return;o.add(e);const r=function(e){let t=i.get(e);if(t)return t;const r=n.get(e);return r?(n.delete(e),t=c(r),i.set(e,t),t):void 0}(e);if(!r)throw new GraphQLError(`Unknown fragment "${e}".`,t.name);return{kind:"FragmentSpread",fragment:r}}}}(t,r,o))).filter(cr)}}}return m.FIELD,m.NAME,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){return pr(e,t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Mn(t);return sr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Vn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=qn(t,{assumeValidSDL:!0});return sr(n),n},e.mergeDocuments=function(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)},e.parseDocument=function(e){return J(e)},e.printSchemaToSDL=function(e){return Xn(e)},e.validateDocument=function(e,t){return Un(e,t,or)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); From 6af18f754155f7891701e0b665b711da0f966476 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Wed, 16 Feb 2022 13:23:25 -0800 Subject: [PATCH 12/25] Add public modifier to input object template --- .../Generated/Schema/InputObjects/MeasurementsInput.swift | 2 +- .../Generated/Schema/InputObjects/PetAdoptionInput.swift | 2 +- .../ApolloCodegenLib/Templates/InputObjectTemplate.swift | 2 +- .../AnimalKingdomAPI/AnimalKingdomIRCreationTests.swift | 2 +- .../CodeGeneration/Templates/InputObjectTemplateTests.swift | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift index 409314ed40..43091b7fb7 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -3,7 +3,7 @@ import ApolloAPI -struct MeasurementsInput: InputObject { +public struct MeasurementsInput: InputObject { private(set) public var dict: InputDict init( diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift index 5c28cb3d78..114d2a9714 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -3,7 +3,7 @@ import ApolloAPI -struct PetAdoptionInput: InputObject { +public struct PetAdoptionInput: InputObject { private(set) public var dict: InputDict init( diff --git a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift index 63d95f0bab..0efc615e52 100644 --- a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift @@ -11,7 +11,7 @@ struct InputObjectTemplate { \(ImportStatementTemplate.SchemaType.render()) - struct \(graphqlInputObject.name.firstUppercased): InputObject { + public struct \(graphqlInputObject.name.firstUppercased): InputObject { private(set) public var dict: InputDict init( diff --git a/Tests/ApolloCodegenTests/AnimalKingdomAPI/AnimalKingdomIRCreationTests.swift b/Tests/ApolloCodegenTests/AnimalKingdomAPI/AnimalKingdomIRCreationTests.swift index ddbf8126f0..963825e9b8 100644 --- a/Tests/ApolloCodegenTests/AnimalKingdomAPI/AnimalKingdomIRCreationTests.swift +++ b/Tests/ApolloCodegenTests/AnimalKingdomAPI/AnimalKingdomIRCreationTests.swift @@ -863,7 +863,7 @@ final class AnimalKingdomIRCreationTests: XCTestCase { expected = ( fields: [ .mock("wingspan", - type: .nonNull(.scalar(GraphQLScalarType.integer()))) + type: .nonNull(.scalar(GraphQLScalarType.float()))) ], typeCases: [], fragments: [] diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index c7651d0e71..7b5386f418 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -77,7 +77,7 @@ class InputObjectTemplateTests: XCTestCase { fields: [GraphQLInputField.mock("field", type: .scalar(.integer()), defaultValue: nil)] ) - let expected = "struct MockInput: InputObject {" + let expected = "public struct MockInput: InputObject {" // when let actual = subject.render() @@ -93,7 +93,7 @@ class InputObjectTemplateTests: XCTestCase { fields: [GraphQLInputField.mock("field", type: .scalar(.integer()), defaultValue: nil)] ) - let expected = "struct MOCKInput: InputObject {" + let expected = "public struct MOCKInput: InputObject {" // when let actual = subject.render() @@ -109,7 +109,7 @@ class InputObjectTemplateTests: XCTestCase { fields: [GraphQLInputField.mock("field", type: .scalar(.integer()), defaultValue: nil)] ) - let expected = "struct MOcK_Input: InputObject {" + let expected = "public struct MOcK_Input: InputObject {" // when let actual = subject.render() From eda88fb795a1a6e7f3325d00eabc705ebded81b9 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Wed, 16 Feb 2022 14:04:52 -0800 Subject: [PATCH 13/25] WIP: Fixing Input Object Accessors --- Apollo.xcodeproj/project.pbxproj | 13 ++++ .../xcschemes/AnimalKingdomAPI.xcscheme | 67 +++++++++++++++++++ .../InputObjects/MeasurementsInput.swift | 14 ++-- .../InputObjects/PetAdoptionInput.swift | 26 +++---- Sources/ApolloAPI/GraphQLOperation.swift | 13 +++- Sources/ApolloAPI/InputObject.swift | 27 ++------ 6 files changed, 115 insertions(+), 45 deletions(-) create mode 100644 Apollo.xcodeproj/xcshareddata/xcschemes/AnimalKingdomAPI.xcscheme diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 70ed767bff..c4cd47c5f7 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -538,6 +538,13 @@ remoteGlobalIDString = 9FC750431D2A532C00458D91; remoteInfo = Apollo; }; + DE6D083427BDAB9E009F5F33 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9FC7503B1D2A532C00458D91 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DE058606266978A100265760; + remoteInfo = ApolloAPI; + }; DECD46F9262F659100924527 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 9FC7503B1D2A532C00458D91 /* Project object */; @@ -2831,6 +2838,7 @@ buildRules = ( ); dependencies = ( + DE6D083527BDAB9E009F5F33 /* PBXTargetDependency */, DE3C7A97260A6C1000D2F4FF /* PBXTargetDependency */, ); name = AnimalKingdomAPI; @@ -3689,6 +3697,11 @@ target = 9FC750431D2A532C00458D91 /* Apollo */; targetProxy = DE6B15B226152BE10068D642 /* PBXContainerItemProxy */; }; + DE6D083527BDAB9E009F5F33 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DE058606266978A100265760 /* ApolloAPI */; + targetProxy = DE6D083427BDAB9E009F5F33 /* PBXContainerItemProxy */; + }; DECD46FA262F659100924527 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 9B7B6F46233C26D100F32205 /* ApolloCodegenLib */; diff --git a/Apollo.xcodeproj/xcshareddata/xcschemes/AnimalKingdomAPI.xcscheme b/Apollo.xcodeproj/xcshareddata/xcschemes/AnimalKingdomAPI.xcscheme new file mode 100644 index 0000000000..9d54a6a58d --- /dev/null +++ b/Apollo.xcodeproj/xcshareddata/xcschemes/AnimalKingdomAPI.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift index 43091b7fb7..fedb40b029 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -19,17 +19,17 @@ public struct MeasurementsInput: InputObject { } var height: Float { - get { dict["height"] } - set { dict["height"] = newValue } + get { dict.height } + set { dict.height = newValue } } var weight: Float { - get { dict["weight"] } - set { dict["weight"] = newValue } + get { dict.weight } + set { dict.weight = newValue } } var wingspan: GraphQLNullable { - get { dict["wingspan"] } - set { dict["wingspan"] = newValue } + get { dict.wingspan } + set { dict.wingspan = newValue } } -} \ No newline at end of file +} diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift index 114d2a9714..f12421b320 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -25,32 +25,32 @@ public struct PetAdoptionInput: InputObject { } var ownerID: ID { - get { dict["ownerID"] } - set { dict["ownerID"] = newValue } + get { dict.ownerID } + set { dict.ownerID = newValue } } var petID: ID { - get { dict["petID"] } - set { dict["petID"] = newValue } + get { dict.petID } + set { dict.petID = newValue } } var humanName: GraphQLNullable { - get { dict["humanName"] } - set { dict["humanName"] = newValue } + get { dict.humanName } + set { dict.humanName = newValue } } var favoriteToy: String { - get { dict["favoriteToy"] } - set { dict["favoriteToy"] = newValue } + get { dict.favoriteToy } + set { dict.favoriteToy = newValue } } var isSpayedOrNeutered: Bool? { - get { dict["isSpayedOrNeutered"] } - set { dict["isSpayedOrNeutered"] = newValue } + get { dict.isSpayedOrNeutered } + set { dict.isSpayedOrNeutered = newValue } } var measurements: GraphQLNullable { - get { dict["measurements"] } - set { dict["measurements"] = newValue } + get { dict.measurements } + set { dict.measurements = newValue } } -} \ No newline at end of file +} diff --git a/Sources/ApolloAPI/GraphQLOperation.swift b/Sources/ApolloAPI/GraphQLOperation.swift index 66fe50b050..f968fbf12e 100644 --- a/Sources/ApolloAPI/GraphQLOperation.swift +++ b/Sources/ApolloAPI/GraphQLOperation.swift @@ -127,12 +127,21 @@ extension Dictionary: GraphQLOperationVariableValue where Key == String, Value = } } -extension GraphQLNullable: GraphQLOperationVariableValue where Wrapped: JSONEncodable { +extension GraphQLNullable: GraphQLOperationVariableValue where Wrapped: GraphQLOperationVariableValue { public var jsonEncodableValue: JSONEncodable? { switch self { case .none: return nil case .null: return NSNull() - case let .some(value): return value + case let .some(value): return value.jsonEncodableValue + } + } +} + +extension Optional: GraphQLOperationVariableValue where Wrapped: GraphQLOperationVariableValue { + public var jsonEncodableValue: JSONEncodable? { + switch self { + case .none: return nil + case let .some(value): return value.jsonEncodableValue } } } diff --git a/Sources/ApolloAPI/InputObject.swift b/Sources/ApolloAPI/InputObject.swift index 3222c7d2a7..bfe123abad 100644 --- a/Sources/ApolloAPI/InputObject.swift +++ b/Sources/ApolloAPI/InputObject.swift @@ -10,6 +10,7 @@ extension InputObject { } /// A structure that wraps the underlying data dictionary used by `InputObject`s. +@dynamicMemberLookup public struct InputDict: GraphQLOperationVariableValue { private var data: [String: GraphQLOperationVariableValue] @@ -20,29 +21,9 @@ public struct InputDict: GraphQLOperationVariableValue { public var jsonEncodableValue: JSONEncodable? { data.jsonEncodableObject } - public subscript(_ key: String) -> T { - data[key] as! T - } - - public subscript(_ key: String) -> T? { - get { data[key] as? T } - set { data[key] = newValue } - } - - public subscript(_ key: String) -> [T] { - data[key] as! [T] - } - - public subscript(_ key: String) -> [T]? { - data[key] as? [T] - } - - public subscript(_ key: String) -> [[T]] { - data[key] as! [[T]] - } - - public subscript(_ key: String) -> [[T]]? { - data[key] as? [[T]] + public subscript(dynamicMember key: StaticString) -> T { + get { data[key.description] as! T } + set { data[key.description] = newValue } } } From df531ec2534e6bde1da536069b1670f08a015436 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Thu, 17 Feb 2022 12:10:51 -0800 Subject: [PATCH 14/25] Add public to input object init and fields --- .../InputObjects/MeasurementsInput.swift | 24 ++--- .../InputObjects/PetAdoptionInput.swift | 42 ++++----- .../Templates/InputObjectTemplate.swift | 6 +- .../Templates/InputObjectTemplateTests.swift | 91 +++++++++++-------- 4 files changed, 91 insertions(+), 72 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift index fedb40b029..3536cfd0a9 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -4,9 +4,9 @@ import ApolloAPI public struct MeasurementsInput: InputObject { - private(set) public var dict: InputDict + public private(set) var dict: InputDict - init( + public init( height: Float, weight: Float, wingspan: GraphQLNullable = nil @@ -18,18 +18,18 @@ public struct MeasurementsInput: InputObject { ]) } - var height: Float { - get { dict.height } - set { dict.height = newValue } + public var height: Float { + get { dict["height"] } + set { dict["height"] = newValue } } - var weight: Float { - get { dict.weight } - set { dict.weight = newValue } + public var weight: Float { + get { dict["weight"] } + set { dict["weight"] = newValue } } - var wingspan: GraphQLNullable { - get { dict.wingspan } - set { dict.wingspan = newValue } + public var wingspan: GraphQLNullable { + get { dict["wingspan"] } + set { dict["wingspan"] = newValue } } -} +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift index f12421b320..ae5712d81a 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -4,9 +4,9 @@ import ApolloAPI public struct PetAdoptionInput: InputObject { - private(set) public var dict: InputDict + public private(set) var dict: InputDict - init( + public init( ownerID: ID, petID: ID, humanName: GraphQLNullable = nil, @@ -24,33 +24,33 @@ public struct PetAdoptionInput: InputObject { ]) } - var ownerID: ID { - get { dict.ownerID } - set { dict.ownerID = newValue } + public var ownerID: ID { + get { dict["ownerID"] } + set { dict["ownerID"] = newValue } } - var petID: ID { - get { dict.petID } - set { dict.petID = newValue } + public var petID: ID { + get { dict["petID"] } + set { dict["petID"] = newValue } } - var humanName: GraphQLNullable { - get { dict.humanName } - set { dict.humanName = newValue } + public var humanName: GraphQLNullable { + get { dict["humanName"] } + set { dict["humanName"] = newValue } } - var favoriteToy: String { - get { dict.favoriteToy } - set { dict.favoriteToy = newValue } + public var favoriteToy: String { + get { dict["favoriteToy"] } + set { dict["favoriteToy"] = newValue } } - var isSpayedOrNeutered: Bool? { - get { dict.isSpayedOrNeutered } - set { dict.isSpayedOrNeutered = newValue } + public var isSpayedOrNeutered: Bool? { + get { dict["isSpayedOrNeutered"] } + set { dict["isSpayedOrNeutered"] = newValue } } - var measurements: GraphQLNullable { - get { dict.measurements } - set { dict.measurements = newValue } + public var measurements: GraphQLNullable { + get { dict["measurements"] } + set { dict["measurements"] = newValue } } -} +} \ No newline at end of file diff --git a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift index 0efc615e52..6b09a73af6 100644 --- a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift @@ -12,9 +12,9 @@ struct InputObjectTemplate { \(ImportStatementTemplate.SchemaType.render()) public struct \(graphqlInputObject.name.firstUppercased): InputObject { - private(set) public var dict: InputDict + public private(set) var dict: InputDict - init( + public init( \(InitializerParametersTemplate()) ) { dict = InputDict([ @@ -44,7 +44,7 @@ struct InputObjectTemplate { private func FieldPropertyTemplate(_ field: GraphQLInputField) -> String { """ - var \(field.name): \(field.renderInputValueType()) { + public var \(field.name): \(field.renderInputValueType()) { get { dict[\"\(field.name)\"] } set { dict[\"\(field.name)\"] = newValue } } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index 7b5386f418..8e7296d0ee 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -68,6 +68,25 @@ class InputObjectTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 4, ignoringExtraLines: true)) } + func test__render__generatesDefinitionWithInputDictVariable() throws { + // given + buildSubject( + name: "mockInput", + fields: [GraphQLInputField.mock("field", type: .scalar(.integer()), defaultValue: nil)] + ) + + let expected = """ + public struct MockInput: InputObject { + public private(set) var dict: InputDict + """ + + // when + let actual = subject.render() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 6, ignoringExtraLines: true)) + } + // MARK: Casing Tests func test__render__givenLowercasedInputObjectField__generatesCorrectlyCasedSwiftDefinition() throws { @@ -127,7 +146,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( field: GraphQLNullable = nil ) { dict = InputDict([ @@ -135,7 +154,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var field: GraphQLNullable { + public var field: GraphQLNullable { get { dict["field"] } set { dict["field"] = newValue } } @@ -195,7 +214,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( stringField: GraphQLNullable = nil, intField: GraphQLNullable = nil, boolField: GraphQLNullable = nil, @@ -215,37 +234,37 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var stringField: GraphQLNullable { + public var stringField: GraphQLNullable { get { dict["stringField"] } set { dict["stringField"] = newValue } } - var intField: GraphQLNullable { + public var intField: GraphQLNullable { get { dict["intField"] } set { dict["intField"] = newValue } } - var boolField: GraphQLNullable { + public var boolField: GraphQLNullable { get { dict["boolField"] } set { dict["boolField"] = newValue } } - var floatField: GraphQLNullable { + public var floatField: GraphQLNullable { get { dict["floatField"] } set { dict["floatField"] = newValue } } - var enumField: GraphQLNullable> { + public var enumField: GraphQLNullable> { get { dict["enumField"] } set { dict["enumField"] = newValue } } - var inputField: GraphQLNullable { + public var inputField: GraphQLNullable { get { dict["inputField"] } set { dict["inputField"] = newValue } } - var listField: GraphQLNullable<[String?]> { + public var listField: GraphQLNullable<[String?]> { get { dict["listField"] } set { dict["listField"] = newValue } } @@ -267,7 +286,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullable: GraphQLNullable = nil ) { dict = InputDict([ @@ -275,7 +294,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullable: GraphQLNullable { + public var nullable: GraphQLNullable { """ // when @@ -292,7 +311,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullableWithDefault: GraphQLNullable ) { dict = InputDict([ @@ -300,7 +319,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullableWithDefault: GraphQLNullable { + public var nullableWithDefault: GraphQLNullable { """ // when @@ -317,7 +336,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nonNullable: Int ) { dict = InputDict([ @@ -325,7 +344,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nonNullable: Int { + public var nonNullable: Int { """ // when @@ -342,7 +361,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nonNullableWithDefault: Int? ) { dict = InputDict([ @@ -350,7 +369,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nonNullableWithDefault: Int? { + public var nonNullableWithDefault: Int? { """ // when @@ -367,7 +386,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullableListNullableItem: GraphQLNullable<[String?]> = nil ) { dict = InputDict([ @@ -375,7 +394,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullableListNullableItem: GraphQLNullable<[String?]> { + public var nullableListNullableItem: GraphQLNullable<[String?]> { """ // when @@ -392,7 +411,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullableListNullableItemWithDefault: GraphQLNullable<[String?]> ) { dict = InputDict([ @@ -400,7 +419,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullableListNullableItemWithDefault: GraphQLNullable<[String?]> { + public var nullableListNullableItemWithDefault: GraphQLNullable<[String?]> { """ // when @@ -417,7 +436,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullableListNonNullableItem: GraphQLNullable<[String]> = nil ) { dict = InputDict([ @@ -425,7 +444,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullableListNonNullableItem: GraphQLNullable<[String]> { + public var nullableListNonNullableItem: GraphQLNullable<[String]> { """ // when @@ -442,7 +461,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullableListNonNullableItemWithDefault: GraphQLNullable<[String]> ) { dict = InputDict([ @@ -450,7 +469,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullableListNonNullableItemWithDefault: GraphQLNullable<[String]> { + public var nullableListNonNullableItemWithDefault: GraphQLNullable<[String]> { """ // when @@ -467,7 +486,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nonNullableListNullableItem: [String?] ) { dict = InputDict([ @@ -475,7 +494,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nonNullableListNullableItem: [String?] { + public var nonNullableListNullableItem: [String?] { """ // when @@ -492,7 +511,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nonNullableListNullableItemWithDefault: [String?]? ) { dict = InputDict([ @@ -500,7 +519,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nonNullableListNullableItemWithDefault: [String?]? { + public var nonNullableListNullableItemWithDefault: [String?]? { """ // when @@ -517,7 +536,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nonNullableListNonNullableItem: [String] ) { dict = InputDict([ @@ -525,7 +544,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nonNullableListNonNullableItem: [String] { + public var nonNullableListNonNullableItem: [String] { """ // when @@ -542,7 +561,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nonNullableListNonNullableItemWithDefault: [String]? ) { dict = InputDict([ @@ -550,7 +569,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nonNullableListNonNullableItemWithDefault: [String]? { + public var nonNullableListNonNullableItemWithDefault: [String]? { """ // when @@ -569,7 +588,7 @@ class InputObjectTemplateTests: XCTestCase { ]) let expected = """ - init( + public init( nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]> = nil ) { dict = InputDict([ @@ -577,7 +596,7 @@ class InputObjectTemplateTests: XCTestCase { ]) } - var nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]> { + public var nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]> { """ // when From e49a422b8c6f04b3c9985a435c854ce8b6ccc413 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Thu, 17 Feb 2022 12:14:05 -0800 Subject: [PATCH 15/25] Generate InputObject fields with dynamic member accessors --- .../InputObjects/MeasurementsInput.swift | 12 +++---- .../InputObjects/PetAdoptionInput.swift | 24 +++++++------- .../Templates/InputObjectTemplate.swift | 4 +-- .../Templates/InputObjectTemplateTests.swift | 32 +++++++++---------- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift index 3536cfd0a9..5ee6140577 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -19,17 +19,17 @@ public struct MeasurementsInput: InputObject { } public var height: Float { - get { dict["height"] } - set { dict["height"] = newValue } + get { dict.height } + set { dict.height = newValue } } public var weight: Float { - get { dict["weight"] } - set { dict["weight"] = newValue } + get { dict.weight } + set { dict.weight = newValue } } public var wingspan: GraphQLNullable { - get { dict["wingspan"] } - set { dict["wingspan"] = newValue } + get { dict.wingspan } + set { dict.wingspan = newValue } } } \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift index ae5712d81a..641ed4d443 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -25,32 +25,32 @@ public struct PetAdoptionInput: InputObject { } public var ownerID: ID { - get { dict["ownerID"] } - set { dict["ownerID"] = newValue } + get { dict.ownerID } + set { dict.ownerID = newValue } } public var petID: ID { - get { dict["petID"] } - set { dict["petID"] = newValue } + get { dict.petID } + set { dict.petID = newValue } } public var humanName: GraphQLNullable { - get { dict["humanName"] } - set { dict["humanName"] = newValue } + get { dict.humanName } + set { dict.humanName = newValue } } public var favoriteToy: String { - get { dict["favoriteToy"] } - set { dict["favoriteToy"] = newValue } + get { dict.favoriteToy } + set { dict.favoriteToy = newValue } } public var isSpayedOrNeutered: Bool? { - get { dict["isSpayedOrNeutered"] } - set { dict["isSpayedOrNeutered"] = newValue } + get { dict.isSpayedOrNeutered } + set { dict.isSpayedOrNeutered = newValue } } public var measurements: GraphQLNullable { - get { dict["measurements"] } - set { dict["measurements"] = newValue } + get { dict.measurements } + set { dict.measurements = newValue } } } \ No newline at end of file diff --git a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift index 6b09a73af6..447a9468cc 100644 --- a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift @@ -45,8 +45,8 @@ struct InputObjectTemplate { private func FieldPropertyTemplate(_ field: GraphQLInputField) -> String { """ public var \(field.name): \(field.renderInputValueType()) { - get { dict[\"\(field.name)\"] } - set { dict[\"\(field.name)\"] = newValue } + get { dict.\(field.name) } + set { dict.\(field.name) = newValue } } """ } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index 8e7296d0ee..9f54e774e5 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -155,8 +155,8 @@ class InputObjectTemplateTests: XCTestCase { } public var field: GraphQLNullable { - get { dict["field"] } - set { dict["field"] = newValue } + get { dict.field } + set { dict.field = newValue } } } """ @@ -235,38 +235,38 @@ class InputObjectTemplateTests: XCTestCase { } public var stringField: GraphQLNullable { - get { dict["stringField"] } - set { dict["stringField"] = newValue } + get { dict.stringField } + set { dict.stringField = newValue } } public var intField: GraphQLNullable { - get { dict["intField"] } - set { dict["intField"] = newValue } + get { dict.intField } + set { dict.intField = newValue } } public var boolField: GraphQLNullable { - get { dict["boolField"] } - set { dict["boolField"] = newValue } + get { dict.boolField } + set { dict.boolField = newValue } } public var floatField: GraphQLNullable { - get { dict["floatField"] } - set { dict["floatField"] = newValue } + get { dict.floatField } + set { dict.floatField = newValue } } public var enumField: GraphQLNullable> { - get { dict["enumField"] } - set { dict["enumField"] = newValue } + get { dict.enumField } + set { dict.enumField = newValue } } public var inputField: GraphQLNullable { - get { dict["inputField"] } - set { dict["inputField"] = newValue } + get { dict.inputField } + set { dict.inputField = newValue } } public var listField: GraphQLNullable<[String?]> { - get { dict["listField"] } - set { dict["listField"] = newValue } + get { dict.listField } + set { dict.listField = newValue } } """ From 99b65b642f6964ef19010933aa74ba71d9ab3f56 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Thu, 17 Feb 2022 12:38:54 -0800 Subject: [PATCH 16/25] Rename input object "dict" to "data" --- .../InputObjects/MeasurementsInput.swift | 16 ++--- .../InputObjects/PetAdoptionInput.swift | 28 ++++---- Sources/ApolloAPI/InputObject.swift | 4 +- .../Templates/InputObjectTemplate.swift | 8 +-- .../Templates/InputObjectTemplateTests.swift | 64 +++++++++---------- 5 files changed, 60 insertions(+), 60 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift index 5ee6140577..2515f772e9 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -4,14 +4,14 @@ import ApolloAPI public struct MeasurementsInput: InputObject { - public private(set) var dict: InputDict + public private(set) var data: InputDict public init( height: Float, weight: Float, wingspan: GraphQLNullable = nil ) { - dict = InputDict([ + data = InputDict([ "height": height, "weight": weight, "wingspan": wingspan @@ -19,17 +19,17 @@ public struct MeasurementsInput: InputObject { } public var height: Float { - get { dict.height } - set { dict.height = newValue } + get { data.height } + set { data.height = newValue } } public var weight: Float { - get { dict.weight } - set { dict.weight = newValue } + get { data.weight } + set { data.weight = newValue } } public var wingspan: GraphQLNullable { - get { dict.wingspan } - set { dict.wingspan = newValue } + get { data.wingspan } + set { data.wingspan = newValue } } } \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift index 641ed4d443..cd269fa0bb 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -4,7 +4,7 @@ import ApolloAPI public struct PetAdoptionInput: InputObject { - public private(set) var dict: InputDict + public private(set) var data: InputDict public init( ownerID: ID, @@ -14,7 +14,7 @@ public struct PetAdoptionInput: InputObject { isSpayedOrNeutered: Bool?, measurements: GraphQLNullable = nil ) { - dict = InputDict([ + data = InputDict([ "ownerID": ownerID, "petID": petID, "humanName": humanName, @@ -25,32 +25,32 @@ public struct PetAdoptionInput: InputObject { } public var ownerID: ID { - get { dict.ownerID } - set { dict.ownerID = newValue } + get { data.ownerID } + set { data.ownerID = newValue } } public var petID: ID { - get { dict.petID } - set { dict.petID = newValue } + get { data.petID } + set { data.petID = newValue } } public var humanName: GraphQLNullable { - get { dict.humanName } - set { dict.humanName = newValue } + get { data.humanName } + set { data.humanName = newValue } } public var favoriteToy: String { - get { dict.favoriteToy } - set { dict.favoriteToy = newValue } + get { data.favoriteToy } + set { data.favoriteToy = newValue } } public var isSpayedOrNeutered: Bool? { - get { dict.isSpayedOrNeutered } - set { dict.isSpayedOrNeutered = newValue } + get { data.isSpayedOrNeutered } + set { data.isSpayedOrNeutered = newValue } } public var measurements: GraphQLNullable { - get { dict.measurements } - set { dict.measurements = newValue } + get { data.measurements } + set { data.measurements = newValue } } } \ No newline at end of file diff --git a/Sources/ApolloAPI/InputObject.swift b/Sources/ApolloAPI/InputObject.swift index bfe123abad..a9e0305f1c 100644 --- a/Sources/ApolloAPI/InputObject.swift +++ b/Sources/ApolloAPI/InputObject.swift @@ -2,11 +2,11 @@ /// /// - See: [GraphQLSpec - Input Objects](https://spec.graphql.org/draft/#sec-Input-Objects) public protocol InputObject: GraphQLOperationVariableValue { - var dict: InputDict { get } + var data: InputDict { get } } extension InputObject { - public var jsonEncodableValue: JSONEncodable? { dict.jsonEncodableValue } + public var jsonEncodableValue: JSONEncodable? { data.jsonEncodableValue } } /// A structure that wraps the underlying data dictionary used by `InputObject`s. diff --git a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift index 447a9468cc..3677c0b1f6 100644 --- a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift @@ -12,12 +12,12 @@ struct InputObjectTemplate { \(ImportStatementTemplate.SchemaType.render()) public struct \(graphqlInputObject.name.firstUppercased): InputObject { - public private(set) var dict: InputDict + public private(set) var data: InputDict public init( \(InitializerParametersTemplate()) ) { - dict = InputDict([ + data = InputDict([ \(InputDictInitializerTemplate()) ]) } @@ -45,8 +45,8 @@ struct InputObjectTemplate { private func FieldPropertyTemplate(_ field: GraphQLInputField) -> String { """ public var \(field.name): \(field.renderInputValueType()) { - get { dict.\(field.name) } - set { dict.\(field.name) = newValue } + get { data.\(field.name) } + set { data.\(field.name) = newValue } } """ } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index 9f54e774e5..c33c1125ef 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -77,7 +77,7 @@ class InputObjectTemplateTests: XCTestCase { let expected = """ public struct MockInput: InputObject { - public private(set) var dict: InputDict + public private(set) var data: InputDict """ // when @@ -149,14 +149,14 @@ class InputObjectTemplateTests: XCTestCase { public init( field: GraphQLNullable = nil ) { - dict = InputDict([ + data = InputDict([ "field": field ]) } public var field: GraphQLNullable { - get { dict.field } - set { dict.field = newValue } + get { data.field } + set { data.field = newValue } } } """ @@ -223,7 +223,7 @@ class InputObjectTemplateTests: XCTestCase { inputField: GraphQLNullable = nil, listField: GraphQLNullable<[String?]> = nil ) { - dict = InputDict([ + data = InputDict([ "stringField": stringField, "intField": intField, "boolField": boolField, @@ -235,38 +235,38 @@ class InputObjectTemplateTests: XCTestCase { } public var stringField: GraphQLNullable { - get { dict.stringField } - set { dict.stringField = newValue } + get { data.stringField } + set { data.stringField = newValue } } public var intField: GraphQLNullable { - get { dict.intField } - set { dict.intField = newValue } + get { data.intField } + set { data.intField = newValue } } public var boolField: GraphQLNullable { - get { dict.boolField } - set { dict.boolField = newValue } + get { data.boolField } + set { data.boolField = newValue } } public var floatField: GraphQLNullable { - get { dict.floatField } - set { dict.floatField = newValue } + get { data.floatField } + set { data.floatField = newValue } } public var enumField: GraphQLNullable> { - get { dict.enumField } - set { dict.enumField = newValue } + get { data.enumField } + set { data.enumField = newValue } } public var inputField: GraphQLNullable { - get { dict.inputField } - set { dict.inputField = newValue } + get { data.inputField } + set { data.inputField = newValue } } public var listField: GraphQLNullable<[String?]> { - get { dict.listField } - set { dict.listField = newValue } + get { data.listField } + set { data.listField = newValue } } """ @@ -289,7 +289,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullable: GraphQLNullable = nil ) { - dict = InputDict([ + data = InputDict([ "nullable": nullable ]) } @@ -314,7 +314,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullableWithDefault: GraphQLNullable ) { - dict = InputDict([ + data = InputDict([ "nullableWithDefault": nullableWithDefault ]) } @@ -339,7 +339,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nonNullable: Int ) { - dict = InputDict([ + data = InputDict([ "nonNullable": nonNullable ]) } @@ -364,7 +364,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nonNullableWithDefault: Int? ) { - dict = InputDict([ + data = InputDict([ "nonNullableWithDefault": nonNullableWithDefault ]) } @@ -389,7 +389,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullableListNullableItem: GraphQLNullable<[String?]> = nil ) { - dict = InputDict([ + data = InputDict([ "nullableListNullableItem": nullableListNullableItem ]) } @@ -414,7 +414,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullableListNullableItemWithDefault: GraphQLNullable<[String?]> ) { - dict = InputDict([ + data = InputDict([ "nullableListNullableItemWithDefault": nullableListNullableItemWithDefault ]) } @@ -439,7 +439,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullableListNonNullableItem: GraphQLNullable<[String]> = nil ) { - dict = InputDict([ + data = InputDict([ "nullableListNonNullableItem": nullableListNonNullableItem ]) } @@ -464,7 +464,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullableListNonNullableItemWithDefault: GraphQLNullable<[String]> ) { - dict = InputDict([ + data = InputDict([ "nullableListNonNullableItemWithDefault": nullableListNonNullableItemWithDefault ]) } @@ -489,7 +489,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nonNullableListNullableItem: [String?] ) { - dict = InputDict([ + data = InputDict([ "nonNullableListNullableItem": nonNullableListNullableItem ]) } @@ -514,7 +514,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nonNullableListNullableItemWithDefault: [String?]? ) { - dict = InputDict([ + data = InputDict([ "nonNullableListNullableItemWithDefault": nonNullableListNullableItemWithDefault ]) } @@ -539,7 +539,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nonNullableListNonNullableItem: [String] ) { - dict = InputDict([ + data = InputDict([ "nonNullableListNonNullableItem": nonNullableListNonNullableItem ]) } @@ -564,7 +564,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nonNullableListNonNullableItemWithDefault: [String]? ) { - dict = InputDict([ + data = InputDict([ "nonNullableListNonNullableItemWithDefault": nonNullableListNonNullableItemWithDefault ]) } @@ -591,7 +591,7 @@ class InputObjectTemplateTests: XCTestCase { public init( nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]> = nil ) { - dict = InputDict([ + data = InputDict([ "nullableListNullableItem": nullableListNullableItem ]) } From b7b56bb9c3bb01b71e78dd13e7d984362f510a3d Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Thu, 17 Feb 2022 12:57:39 -0800 Subject: [PATCH 17/25] Added PetSearchQuery to AnimalKingdom API --- Apollo.xcodeproj/project.pbxproj | 12 ++++ .../Generated/Operations/PetSearchQuery.swift | 63 +++++++++++++++++++ .../InputObjects/PetSearchFilters.swift | 35 +++++++++++ .../Generated/Schema/Schema.swift | 2 +- .../graphql/AnimalSchema.graphqls | 8 ++- .../graphql/PetSearchQuery.graphql | 14 +++++ ...nDefinition_VariableDefinition_Tests.swift | 2 +- 7 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift create mode 100644 Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift create mode 100644 Sources/AnimalKingdomAPI/graphql/PetSearchQuery.graphql diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index c4cd47c5f7..e7b440a626 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -266,6 +266,9 @@ DE6D080727BD9AA9009F5F33 /* PetAdoptionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */; }; DE6D080927BD9ABA009F5F33 /* Mutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080827BD9ABA009F5F33 /* Mutation.swift */; }; DE6D083327BDA211009F5F33 /* MeasurementsInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D083227BDA211009F5F33 /* MeasurementsInput.swift */; }; + DE72867A27BEEC4D00577A0E /* PetSearchQuery.graphql in Resources */ = {isa = PBXBuildFile; fileRef = DE72867927BEEC4D00577A0E /* PetSearchQuery.graphql */; }; + DE72867C27BEEDF900577A0E /* PetSearchQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE72867B27BEEDF900577A0E /* PetSearchQuery.swift */; }; + DE72867E27BEEE2D00577A0E /* PetSearchFilters.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE72867D27BEEE2D00577A0E /* PetSearchFilters.swift */; }; DE736F4626FA6EE6007187F2 /* InflectorKit in Frameworks */ = {isa = PBXBuildFile; productRef = E6E4209126A7DF4200B82624 /* InflectorKit */; }; DE796429276998B000978A03 /* IR+RootFieldBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */; }; DE79642B276999E700978A03 /* IRNamedFragmentBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */; }; @@ -1005,6 +1008,9 @@ DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionInput.swift; sourceTree = ""; }; DE6D080827BD9ABA009F5F33 /* Mutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mutation.swift; sourceTree = ""; }; DE6D083227BDA211009F5F33 /* MeasurementsInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeasurementsInput.swift; sourceTree = ""; }; + DE72867927BEEC4D00577A0E /* PetSearchQuery.graphql */ = {isa = PBXFileReference; lastKnownFileType = text; path = PetSearchQuery.graphql; sourceTree = ""; }; + DE72867B27BEEDF900577A0E /* PetSearchQuery.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetSearchQuery.swift; sourceTree = ""; }; + DE72867D27BEEE2D00577A0E /* PetSearchFilters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetSearchFilters.swift; sourceTree = ""; }; DE796428276998B000978A03 /* IR+RootFieldBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+RootFieldBuilder.swift"; sourceTree = ""; }; DE79642A276999E700978A03 /* IRNamedFragmentBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IRNamedFragmentBuilderTests.swift; sourceTree = ""; }; DE79642C27699A6A00978A03 /* IR+NamedFragmentBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IR+NamedFragmentBuilder.swift"; sourceTree = ""; }; @@ -2095,6 +2101,7 @@ children = ( DE2FCF2E26E8092B0057EA67 /* AllAnimalsQuery.graphql */, DE2FCF2D26E8092B0057EA67 /* AnimalSchema.graphqls */, + DE72867927BEEC4D00577A0E /* PetSearchQuery.graphql */, DE6D080227BD9933009F5F33 /* PetAdoptionMutation.graphql */, DE2FCF2F26E8092B0057EA67 /* ClassroomPets.graphql */, DE2FCF3226E8092B0057EA67 /* HeightInMeters.graphql */, @@ -2190,6 +2197,7 @@ isa = PBXGroup; children = ( DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */, + DE72867D27BEEE2D00577A0E /* PetSearchFilters.swift */, DE6D083227BDA211009F5F33 /* MeasurementsInput.swift */, ); path = InputObjects; @@ -2332,6 +2340,7 @@ E603765927B2FB1900E7B060 /* ClassroomPetDetails.swift */, E603765A27B2FB1900E7B060 /* ClassroomPetsQuery.swift */, DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */, + DE72867B27BEEDF900577A0E /* PetSearchQuery.swift */, E603765B27B2FB1900E7B060 /* AllAnimalsQuery.swift */, E603765C27B2FB1900E7B060 /* WarmBloodedDetails.swift */, ); @@ -3093,6 +3102,7 @@ DE223C1E271F332D004A0148 /* AnimalSchema.graphqls in Resources */, DE223C1F271F332D004A0148 /* ClassroomPets.graphql in Resources */, DE223C20271F332D004A0148 /* HeightInMeters.graphql in Resources */, + DE72867A27BEEC4D00577A0E /* PetSearchQuery.graphql in Resources */, DE223C21271F332D004A0148 /* PetDetails.graphql in Resources */, DE223C22271F332D004A0148 /* WarmBloodedDetails.graphql in Resources */, ); @@ -3525,6 +3535,7 @@ buildActionMask = 2147483647; files = ( E603864A27B2FB1D00E7B060 /* Height.swift in Sources */, + DE72867E27BEEE2D00577A0E /* PetSearchFilters.swift in Sources */, E603864227B2FB1D00E7B060 /* ClassroomPet.swift in Sources */, E603864F27B2FB1D00E7B060 /* WarmBlooded.swift in Sources */, E603863F27B2FB1D00E7B060 /* ClassroomPetsQuery.swift in Sources */, @@ -3538,6 +3549,7 @@ E603864427B2FB1D00E7B060 /* RelativeSize.swift in Sources */, DE6D083327BDA211009F5F33 /* MeasurementsInput.swift in Sources */, E603864627B2FB1D00E7B060 /* Bird.swift in Sources */, + DE72867C27BEEDF900577A0E /* PetSearchQuery.swift in Sources */, E603864927B2FB1D00E7B060 /* Rat.swift in Sources */, E603863E27B2FB1D00E7B060 /* ClassroomPetDetails.swift in Sources */, E603864127B2FB1D00E7B060 /* WarmBloodedDetails.swift in Sources */, diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift new file mode 100644 index 0000000000..8706974ef6 --- /dev/null +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift @@ -0,0 +1,63 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI + +public class PetSearchQuery: GraphQLQuery { + public let operationName: String = "PetSearch" + public let document: DocumentType = .notPersisted( + definition: .init( + """ + query PetSearch($filters: PetSearchFilters = {species: ["Dog", "Cat"], size: SMALL, measurements: {height: 10.5, weight: 5.0}}) { + pets(filters: $filters) { + id + humanName + } + } + """ + )) + + public var filters: GraphQLNullable + + public init(filters: GraphQLNullable = [ + "species": ["Dog", "Cat"], + "size": GraphQLEnum("SMALL"), + "measurements": [ + "height": 10.5, + "weight": 5.0 + ] + ]) { + self.filters = filters + } + + public var variables: Variables? { + ["filters": filters] + } + + public struct Data: AnimalKingdomAPI.SelectionSet { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Query.self) } + public static var selections: [Selection] { [ + .field("pets", [Pet].self), + ] } + + public var pets: [Pet] { data["pets"] } + + /// Pet + public struct Pet: AnimalKingdomAPI.SelectionSet { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Interface(AnimalKingdomAPI.Pet.self) } + public static var selections: [Selection] { [ + .field("id", ID?.self), + .field("humanName", String?.self), + ] } + + public var id: ID? { data["id"] } + public var humanName: String? { data["humanName"] } + } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift new file mode 100644 index 0000000000..3eb1042af7 --- /dev/null +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift @@ -0,0 +1,35 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI + +public struct PetSearchFilters: InputObject { + public private(set) var data: InputDict + + public init( + species: [String], + size: GraphQLNullable> = nil, + measurements: GraphQLNullable = nil + ) { + data = InputDict([ + "species": species, + "size": size, + "measurements": measurements + ]) + } + + public var species: [String] { + get { data.species } + set { data.species = newValue } + } + + public var size: GraphQLNullable> { + get { data.size } + set { data.size = newValue } + } + + public var measurements: GraphQLNullable { + get { data.measurements } + set { data.measurements = newValue } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift b/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift index 35014f5739..9b302ad99d 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/Schema.swift @@ -14,8 +14,8 @@ where Schema == AnimalKingdomAPI.Schema {} public enum Schema: SchemaConfiguration { public static func objectType(forTypename __typename: String) -> Object.Type? { switch __typename { - case "Mutation": return AnimalKingdomAPI.Mutation.self case "Query": return AnimalKingdomAPI.Query.self + case "Mutation": return AnimalKingdomAPI.Mutation.self case "Cat": return AnimalKingdomAPI.Cat.self case "Bird": return AnimalKingdomAPI.Bird.self case "Rat": return AnimalKingdomAPI.Rat.self diff --git a/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls b/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls index 8a46eb15f6..a5fef63781 100644 --- a/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls +++ b/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls @@ -1,7 +1,7 @@ type Query { allAnimals: [Animal!]! - allPets: [Pet!]! classroomPets: [ClassroomPet!]! + pets(filters: PetSearchFilters!): [Pet!]! } type Mutation { @@ -24,6 +24,12 @@ input MeasurementsInput { wingspan: Float } +input PetSearchFilters { + species: [String!]! + size: RelativeSize + measurements: MeasurementsInput +} + interface Animal { id: ID species: String! diff --git a/Sources/AnimalKingdomAPI/graphql/PetSearchQuery.graphql b/Sources/AnimalKingdomAPI/graphql/PetSearchQuery.graphql new file mode 100644 index 0000000000..6a65134cdf --- /dev/null +++ b/Sources/AnimalKingdomAPI/graphql/PetSearchQuery.graphql @@ -0,0 +1,14 @@ +query PetSearch($filters: PetSearchFilters = { + species: ["Dog", "Cat"], + size: SMALL, + measurements: { + height: 10.5, + weight: 5.0 + } + } +) { + pets(filters: $filters) { + id + humanName + } +} diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index ba41e5ae43..0a6eb14226 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -2,7 +2,7 @@ import XCTest import Nimble @testable import ApolloCodegenLib -class OperationDefinition_VariableDefinition_Render_Tests: XCTestCase { +class OperationDefinition_VariableDefinition_Tests: XCTestCase { var subject: CompilationResult.VariableDefinition! From 6528aecc532835041e344fba3d9c191f42a82ec2 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Thu, 17 Feb 2022 14:16:44 -0800 Subject: [PATCH 18/25] Fixed rendering of input enum values --- Apollo.xcodeproj/project.pbxproj | 4 -- .../GraphQLValue+Rendered.swift | 29 ----------- ...OperationVariableDefinition+Rendered.swift | 51 +++++++++++++++++-- ...nDefinition_VariableDefinition_Tests.swift | 8 +-- 4 files changed, 51 insertions(+), 41 deletions(-) delete mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index e7b440a626..e059eb39ba 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -261,7 +261,6 @@ DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */; }; DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */; }; - DE6D080127BC802D009F5F33 /* GraphQLValue+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */; }; DE6D080427BD9A91009F5F33 /* PetAdoptionMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */; }; DE6D080727BD9AA9009F5F33 /* PetAdoptionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */; }; DE6D080927BD9ABA009F5F33 /* Mutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080827BD9ABA009F5F33 /* Mutation.swift */; }; @@ -1002,7 +1001,6 @@ DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLInputField+Rendered.swift"; sourceTree = ""; }; DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationDefinition_VariableDefinition_Tests.swift; sourceTree = ""; }; DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OperationVariableDefinition+Rendered.swift"; sourceTree = ""; }; - DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLValue+Rendered.swift"; sourceTree = ""; }; DE6D080227BD9933009F5F33 /* PetAdoptionMutation.graphql */ = {isa = PBXFileReference; lastKnownFileType = text; path = PetAdoptionMutation.graphql; sourceTree = ""; }; DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionMutation.swift; sourceTree = ""; }; DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionInput.swift; sourceTree = ""; }; @@ -2188,7 +2186,6 @@ DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */, DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */, - DE6D080027BC802D009F5F33 /* GraphQLValue+Rendered.swift */, ); path = RenderingHelpers; sourceTree = ""; @@ -3223,7 +3220,6 @@ E6D90D0B278FFDDA009CAC5D /* SchemaFileGenerator.swift in Sources */, DE7C183C272A12EB00727031 /* TypeScopeDescriptor.swift in Sources */, DE7C183E272A154400727031 /* IR.swift in Sources */, - DE6D080127BC802D009F5F33 /* GraphQLValue+Rendered.swift in Sources */, 9F628E9525935BE600F94F9D /* GraphQLType.swift in Sources */, 9BFE8DA9265D5D8F000BBF81 /* URLDownloader.swift in Sources */, E6C9849327929EBE009481BE /* EnumTemplate.swift in Sources */, diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift deleted file mode 100644 index 369482ec7d..0000000000 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLValue+Rendered.swift +++ /dev/null @@ -1,29 +0,0 @@ -extension GraphQLValue { - var renderedAsVariableDefaultValue: TemplateString { - switch self { - case .null: return ".null" - case let .enum(enumValue): return ".init(\"\(enumValue)\")" - default: return renderedAsInputValueLiteral - } - } - - var renderedAsInputValueLiteral: TemplateString { - switch self { - case let .string(string): return "\"\(string)\"" - case let .boolean(boolean): return boolean ? "true" : "false" - case let .int(int): return TemplateString(int.description) - case let .float(float): return TemplateString(float.description) - case let .enum(enumValue): return "GraphQLEnum(\"\(enumValue)\")" - case .null: return "nil" - case let .list(list): - return "[\(list.map(\.renderedAsInputValueLiteral), separator: ", ")]" - - case let .object(object): - return "[\(list: object.map{"\"\($0.0)\": \($0.1.renderedAsInputValueLiteral)"})]" - - case .variable: - preconditionFailure("Variable cannot be used as Default Value for an Operation Variable!") - } - } - -} diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift index 4980099875..b53376c891 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift @@ -1,12 +1,55 @@ +import OrderedCollections extension CompilationResult.VariableDefinition { func renderInputValueType(includeDefault: Bool = false) -> TemplateString { - "\(type.renderAsInputValue())\(ifLet: defaultValue, where: {_ in includeDefault}, {" = " + $0.renderedAsVariableDefaultValue})" + """ + \(type.renderAsInputValue())\ + \(ifLet: renderVariableDefaultValue(), where: {_ in includeDefault}, {" = " + $0}) + """ } - var hasDefaultValue: Bool { + private func renderVariableDefaultValue() -> TemplateString? { switch defaultValue { - case .none, .some(nil): return false - default: return true + case .none: return nil + case .null: return ".null" + case let .enum(enumValue): return ".init(\"\(enumValue)\")" + case let .some(value): return renderInputValueLiteral(value: value, type: type) } } } + +private func renderInputValueLiteral(value: GraphQLValue, type: GraphQLType) -> TemplateString { + switch value { + case let .string(string): return "\"\(string)\"" + case let .boolean(boolean): return boolean ? "true" : "false" + case let .int(int): return TemplateString(int.description) + case let .float(float): return TemplateString(float.description) + case let .enum(enumValue): return "GraphQLEnum<\(type.namedType.name)>(\"\(enumValue)\")" + case .null: return "nil" + case let .list(list): + return "[\(list.map { renderInputValueLiteral(value: $0, type: type) }, separator: ", ")]" + + case let .object(object): + guard case let .inputObject(inputObject) = type else { + preconditionFailure("Variable type must be InputObject with value of .object type.") + } + + return inputObject.renderInputValueLiteral(values: object) + + case .variable: + preconditionFailure("Variable cannot be used as Default Value for an Operation Variable!") + } +} + +fileprivate extension GraphQLInputObjectType { + func renderInputValueLiteral(values: OrderedDictionary) -> TemplateString { + let entries = values.map { entry -> TemplateString in + guard let field = self.fields[entry.0] else { + preconditionFailure("Field \(entry.0) not found on input object.") + } + + return "\"\(entry.0)\": " + + ApolloCodegenLib.renderInputValueLiteral(value: entry.1, type: field.type) + } + return "[\(list: entries)]" + } +} diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index 0a6eb14226..a6a8128893 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -204,7 +204,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { "InnerInputObject", fields: [ .mock("innerStringField", type: .scalar(.string()), defaultValue: nil), - .mock("innerListField", type: .list(.scalar(.string())), defaultValue: nil), + .mock("innerListField", type: .list(.enum(.mock(name: "EnumList"))), defaultValue: nil), .mock("innerIntField", type: .scalar(.integer()), defaultValue: nil), .mock("innerEnumField", type: .enum(.mock(name: "EnumValue")), defaultValue: nil), ] @@ -222,7 +222,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { "innerEnumField": .enum("CaseONE"), "innerInputObject": .object([ "innerStringField": .string("EFGH"), - "innerListField": .list([.string("C"), .string("D")]), + "innerListField": .list([.enum("CaseTwo"), .enum("CaseThree")]), ]) ]) ) @@ -234,10 +234,10 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { "innerFloatField": 12.3456, "innerBoolField": true, "innerListField": ["A", "B"], - "innerEnumField": GraphQLEnum("CaseONE"), + "innerEnumField": GraphQLEnum("CaseONE"), "innerInputObject": [ "innerStringField": "EFGH", - "innerListField": ["C", "D"] + "innerListField": [GraphQLEnum("CaseTwo"), GraphQLEnum("CaseThree")] ] ] """ From 6650ffff16d7043d026137c9a1e233a27916b9f7 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Thu, 17 Feb 2022 14:18:52 -0800 Subject: [PATCH 19/25] Fixed conversion of default value dictionary literal to InputObject --- .../Operations/PetAdoptionMutation.swift | 4 +-- .../Generated/Operations/PetSearchQuery.swift | 6 ++-- .../InputObjects/MeasurementsInput.swift | 4 +++ .../InputObjects/PetAdoptionInput.swift | 4 +++ .../InputObjects/PetSearchFilters.swift | 4 +++ .../graphql/AnimalSchema.graphqls | 24 ++++++------- Sources/ApolloAPI/GraphQLEnum.swift | 4 +++ Sources/ApolloAPI/GraphQLNullable.swift | 1 + Sources/ApolloAPI/InputObject.swift | 14 +++++++- .../Templates/InputObjectTemplate.swift | 4 +++ .../Templates/InputObjectTemplateTests.swift | 36 ++++++++++--------- 11 files changed, 71 insertions(+), 34 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift index 6c3de02612..5493eb7c8e 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift @@ -45,11 +45,11 @@ public class PetAdoptionMutation: GraphQLMutation { public static var __parentType: ParentType { .Interface(AnimalKingdomAPI.Pet.self) } public static var selections: [Selection] { [ - .field("id", ID?.self), + .field("id", ID.self), .field("humanName", String?.self), ] } - public var id: ID? { data["id"] } + public var id: ID { data["id"] } public var humanName: String? { data["humanName"] } } } diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift index 8706974ef6..4afbd8a905 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift @@ -21,7 +21,7 @@ public class PetSearchQuery: GraphQLQuery { public init(filters: GraphQLNullable = [ "species": ["Dog", "Cat"], - "size": GraphQLEnum("SMALL"), + "size": GraphQLEnum("SMALL"), "measurements": [ "height": 10.5, "weight": 5.0 @@ -52,11 +52,11 @@ public class PetSearchQuery: GraphQLQuery { public static var __parentType: ParentType { .Interface(AnimalKingdomAPI.Pet.self) } public static var selections: [Selection] { [ - .field("id", ID?.self), + .field("id", ID.self), .field("humanName", String?.self), ] } - public var id: ID? { data["id"] } + public var id: ID { data["id"] } public var humanName: String? { data["humanName"] } } } diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift index 2515f772e9..18322169ad 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/MeasurementsInput.swift @@ -6,6 +6,10 @@ import ApolloAPI public struct MeasurementsInput: InputObject { public private(set) var data: InputDict + public init(_ data: InputDict) { + self.data = data + } + public init( height: Float, weight: Float, diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift index cd269fa0bb..4a68fe3ae9 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetAdoptionInput.swift @@ -6,6 +6,10 @@ import ApolloAPI public struct PetAdoptionInput: InputObject { public private(set) var data: InputDict + public init(_ data: InputDict) { + self.data = data + } + public init( ownerID: ID, petID: ID, diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift index 3eb1042af7..87ee858ce3 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift @@ -6,6 +6,10 @@ import ApolloAPI public struct PetSearchFilters: InputObject { public private(set) var data: InputDict + public init(_ data: InputDict) { + self.data = data + } + public init( species: [String], size: GraphQLNullable> = nil, diff --git a/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls b/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls index a5fef63781..3ed4adf1cb 100644 --- a/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls +++ b/Sources/AnimalKingdomAPI/graphql/AnimalSchema.graphqls @@ -31,7 +31,7 @@ input PetSearchFilters { } interface Animal { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -39,14 +39,14 @@ interface Animal { } interface Pet { - id: ID + id: ID! humanName: String favoriteToy: String! owner: Human } interface HousePet implements Animal & Pet { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -60,7 +60,7 @@ interface HousePet implements Animal & Pet { } interface WarmBlooded implements Animal { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -79,7 +79,7 @@ type Height { } type Human implements Animal & WarmBlooded { - id: ID + id: ID! firstName: String! species: String! height: Height! @@ -90,7 +90,7 @@ type Human implements Animal & WarmBlooded { } type Cat implements Animal & Pet & WarmBlooded { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -104,7 +104,7 @@ type Cat implements Animal & Pet & WarmBlooded { } type Dog implements Animal & Pet & HousePet & WarmBlooded { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -120,7 +120,7 @@ type Dog implements Animal & Pet & HousePet & WarmBlooded { } type Bird implements Animal & Pet & WarmBlooded { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -134,7 +134,7 @@ type Bird implements Animal & Pet & WarmBlooded { } type Fish implements Animal & Pet { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -145,7 +145,7 @@ type Fish implements Animal & Pet { } type Rat implements Animal & Pet { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -156,7 +156,7 @@ type Rat implements Animal & Pet { } type Crocodile implements Animal { - id: ID + id: ID! species: String! height: Height! predators: [Animal!]! @@ -165,7 +165,7 @@ type Crocodile implements Animal { } type PetRock implements Pet { - id: ID + id: ID! humanName: String favoriteToy: String! owner: Human diff --git a/Sources/ApolloAPI/GraphQLEnum.swift b/Sources/ApolloAPI/GraphQLEnum.swift index 3e794eb84b..a589c3d2f8 100644 --- a/Sources/ApolloAPI/GraphQLEnum.swift +++ b/Sources/ApolloAPI/GraphQLEnum.swift @@ -34,6 +34,10 @@ public enum GraphQLEnum: CaseIterable, Equatable, RawRepresentable self = .case(caseValue) } + public init(_ rawValue: String) { + self.init(rawValue: rawValue) + } + /// The underlying enum case. If the value is `__unknown`, this will be `nil`. public var value: T? { switch self { diff --git a/Sources/ApolloAPI/GraphQLNullable.swift b/Sources/ApolloAPI/GraphQLNullable.swift index ab6b1c2f5d..f410de4571 100644 --- a/Sources/ApolloAPI/GraphQLNullable.swift +++ b/Sources/ApolloAPI/GraphQLNullable.swift @@ -101,6 +101,7 @@ extension Array: _InitializableByArrayLiteralElements {} public protocol _InitializableByDictionaryLiteralElements: ExpressibleByDictionaryLiteral { init(_ elements: [(Key, Value)]) } + extension Dictionary: _InitializableByDictionaryLiteralElements { public init(_ elements: [(Key, Value)]) { self.init(uniqueKeysWithValues: elements) diff --git a/Sources/ApolloAPI/InputObject.swift b/Sources/ApolloAPI/InputObject.swift index a9e0305f1c..8c5cc21d0a 100644 --- a/Sources/ApolloAPI/InputObject.swift +++ b/Sources/ApolloAPI/InputObject.swift @@ -1,14 +1,26 @@ /// An protocol for a struct that represents a GraphQL Input Object. /// /// - See: [GraphQLSpec - Input Objects](https://spec.graphql.org/draft/#sec-Input-Objects) -public protocol InputObject: GraphQLOperationVariableValue { +public protocol InputObject: + GraphQLOperationVariableValue, _InitializableByDictionaryLiteralElements +{ var data: InputDict { get } + init(_ data: InputDict) } extension InputObject { public var jsonEncodableValue: JSONEncodable? { data.jsonEncodableValue } + + public init(dictionaryLiteral elements: (String, GraphQLOperationVariableValue)...) { + self.init(elements) + } + + public init(_ elements: [(String, GraphQLOperationVariableValue)]) { + self.init(InputDict(.init(uniqueKeysWithValues: elements))) + } } + /// A structure that wraps the underlying data dictionary used by `InputObject`s. @dynamicMemberLookup public struct InputDict: GraphQLOperationVariableValue { diff --git a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift index 3677c0b1f6..4bd82b37b1 100644 --- a/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/InputObjectTemplate.swift @@ -13,6 +13,10 @@ struct InputObjectTemplate { public struct \(graphqlInputObject.name.firstUppercased): InputObject { public private(set) var data: InputDict + + public init(_ data: InputDict) { + self.data = data + } public init( \(InitializerParametersTemplate()) diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index c33c1125ef..efe3e87baa 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -68,7 +68,7 @@ class InputObjectTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 4, ignoringExtraLines: true)) } - func test__render__generatesDefinitionWithInputDictVariable() throws { + func test__render__generatesDefinitionWithInputDictVariableAndInitializer() throws { // given buildSubject( name: "mockInput", @@ -78,6 +78,10 @@ class InputObjectTemplateTests: XCTestCase { let expected = """ public struct MockInput: InputObject { public private(set) var data: InputDict + + public init(_ data: InputDict) { + self.data = data + } """ // when @@ -165,7 +169,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: false)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: false)) } func test__render__givenAllPossibleSchemaInputFieldTypes__generatesCorrectParametersAndInitializer() throws { @@ -274,7 +278,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } // MARK: Nullable Field Tests @@ -301,7 +305,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NullableField_WithDefault__generates_NullableParameter_NoInitializerDefault() throws { @@ -326,7 +330,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NonNullableField_NoDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { @@ -351,7 +355,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NonNullableField_WithDefault__generates_OptionalParameter_NoInitializerDefault() throws { @@ -376,7 +380,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NullableList_NullableItem_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { @@ -401,7 +405,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { @@ -426,7 +430,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NullableList_NonNullableItem_NoDefault__generates_NullableParameter_NonOptionalItem_InitializerNilDefault() throws { @@ -451,7 +455,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { @@ -476,7 +480,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NonNullableList_NullableItem_NoDefault__generates_NonNullableNonOptionalParameter_OptionalItem_NoInitializerDefault() throws { @@ -501,7 +505,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_NoInitializerDefault() throws { @@ -526,7 +530,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NonNullableList_NonNullableItem_NoDefault__generates_NonNullableNonOptionalParameter_NonOptionalItem_NoInitializerDefault() throws { @@ -551,7 +555,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_NoInitializerDefault() throws { @@ -576,7 +580,7 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } func test__render__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_InitializerNilDefault() throws { @@ -603,6 +607,6 @@ class InputObjectTemplateTests: XCTestCase { let actual = subject.render() // then - expect(actual).to(equalLineByLine(expected, atLine: 9, ignoringExtraLines: true)) + expect(actual).to(equalLineByLine(expected, atLine: 13, ignoringExtraLines: true)) } } From 2a18a8a443da7291c37573c13b539e9d4c290baf Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Fri, 18 Feb 2022 12:35:05 -0800 Subject: [PATCH 20/25] WIP --- Apollo.xcodeproj/project.pbxproj | 17 +- .../Generated/Operations/PetSearchQuery.swift | 21 ++- .../InputObjects/PetSearchFilters.swift | 2 +- Sources/ApolloAPI/InputObject.swift | 14 +- Sources/ApolloCodegenLib/IR/IR+Field.swift | 1 + .../OperationDefinitionTemplate.swift | 17 +- ...OperationVariableDefinition+Rendered.swift | 9 +- .../Templates/SelectionSetTemplate.swift | 8 +- SwiftScripts/Package.resolved | 51 ++--- ...nDefinition_VariableDefinition_Tests.swift | 175 +++++++++--------- .../SelectionSetTemplateTests.swift | 40 ++++ 11 files changed, 188 insertions(+), 167 deletions(-) diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index e059eb39ba..367bb733d2 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -184,6 +184,7 @@ DE09F9BD27024FEA00795949 /* InputObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE09F9BC27024FEA00795949 /* InputObject.swift */; }; DE09F9C3270269E800795949 /* MockJavaScriptObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE09F9C0270269E800795949 /* MockJavaScriptObject.swift */; }; DE09F9C6270269F800795949 /* OperationDefinitionTemplate_DocumentType_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE09F9C5270269F800795949 /* OperationDefinitionTemplate_DocumentType_Tests.swift */; }; + DE0BCCE127C020F300A04743 /* AnimalKingdomAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE3C7A11260A6B9800D2F4FF /* AnimalKingdomAPI.framework */; }; DE12B2D7273B204B003371CC /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE12B2D6273B204B003371CC /* TestError.swift */; }; DE12B2D9273C4338003371CC /* MockIRSubscripts.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE12B2D8273C4338003371CC /* MockIRSubscripts.swift */; }; DE181A2C26C5C0CB000C0B9C /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE181A2B26C5C0CB000C0B9C /* WebSocket.swift */; }; @@ -526,6 +527,13 @@ remoteGlobalIDString = DE058606266978A100265760; remoteInfo = ApolloModels; }; + DE0BCCDF27C020EE00A04743 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9FC7503B1D2A532C00458D91 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DE3C7A00260A6B9800D2F4FF; + remoteInfo = AnimalKingdomAPI; + }; DE3C7A96260A6C1000D2F4FF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 9FC7503B1D2A532C00458D91 /* Project object */; @@ -1167,6 +1175,7 @@ DEAFB77F2706474C00BE02F3 /* Nimble in Frameworks */, DECD49DB262F8AAA00924527 /* ApolloTestSupport.framework in Frameworks */, DECD4992262F841600924527 /* ApolloCodegenTestSupport.framework in Frameworks */, + DE0BCCE127C020F300A04743 /* AnimalKingdomAPI.framework in Frameworks */, 9FDE0752258F3BC200DC0CA5 /* StarWarsAPI.framework in Frameworks */, 9BAEEC01234BB8FD00808306 /* ApolloCodegenLib.framework in Frameworks */, ); @@ -2673,10 +2682,11 @@ buildRules = ( ); dependencies = ( + 9BAEEC03234BB8FD00808306 /* PBXTargetDependency */, DECD49DA262F8AA500924527 /* PBXTargetDependency */, DECD4991262F841300924527 /* PBXTargetDependency */, + DE0BCCE027C020EE00A04743 /* PBXTargetDependency */, 9FDE0742258F3B6100DC0CA5 /* PBXTargetDependency */, - 9BAEEC03234BB8FD00808306 /* PBXTargetDependency */, ); name = ApolloCodegenTests; packageProductDependencies = ( @@ -3695,6 +3705,11 @@ target = DE058606266978A100265760 /* ApolloAPI */; targetProxy = DE05862726697B1D00265760 /* PBXContainerItemProxy */; }; + DE0BCCE027C020EE00A04743 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DE3C7A00260A6B9800D2F4FF /* AnimalKingdomAPI */; + targetProxy = DE0BCCDF27C020EE00A04743 /* PBXContainerItemProxy */; + }; DE3C7A97260A6C1000D2F4FF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 9B68353D2463481A00337AE6 /* ApolloUtils */; diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift index 4afbd8a905..6f89a600fe 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift @@ -19,14 +19,17 @@ public class PetSearchQuery: GraphQLQuery { public var filters: GraphQLNullable - public init(filters: GraphQLNullable = [ - "species": ["Dog", "Cat"], - "size": GraphQLEnum("SMALL"), - "measurements": [ - "height": 10.5, - "weight": 5.0 - ] - ]) { + public enum DefaultVariables { + public static let filters: GraphQLNullable = .some(PetSearchFilters( + species: ["Dog", "Cat"], + size: .some(.case(.SMALL)), + measurements: .some(MeasurementsInput( + height: 10.5, + weight: 5.0 + )))) + } + + public init(filters: GraphQLNullable = DefaultVariables.filters) { self.filters = filters } @@ -60,4 +63,4 @@ public class PetSearchQuery: GraphQLQuery { public var humanName: String? { data["humanName"] } } } -} \ No newline at end of file +} diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift index 87ee858ce3..3866df4491 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift @@ -36,4 +36,4 @@ public struct PetSearchFilters: InputObject { get { data.measurements } set { data.measurements = newValue } } -} \ No newline at end of file +} diff --git a/Sources/ApolloAPI/InputObject.swift b/Sources/ApolloAPI/InputObject.swift index 8c5cc21d0a..a9e0305f1c 100644 --- a/Sources/ApolloAPI/InputObject.swift +++ b/Sources/ApolloAPI/InputObject.swift @@ -1,26 +1,14 @@ /// An protocol for a struct that represents a GraphQL Input Object. /// /// - See: [GraphQLSpec - Input Objects](https://spec.graphql.org/draft/#sec-Input-Objects) -public protocol InputObject: - GraphQLOperationVariableValue, _InitializableByDictionaryLiteralElements -{ +public protocol InputObject: GraphQLOperationVariableValue { var data: InputDict { get } - init(_ data: InputDict) } extension InputObject { public var jsonEncodableValue: JSONEncodable? { data.jsonEncodableValue } - - public init(dictionaryLiteral elements: (String, GraphQLOperationVariableValue)...) { - self.init(elements) - } - - public init(_ elements: [(String, GraphQLOperationVariableValue)]) { - self.init(InputDict(.init(uniqueKeysWithValues: elements))) - } } - /// A structure that wraps the underlying data dictionary used by `InputObject`s. @dynamicMemberLookup public struct InputDict: GraphQLOperationVariableValue { diff --git a/Sources/ApolloCodegenLib/IR/IR+Field.swift b/Sources/ApolloCodegenLib/IR/IR+Field.swift index 595b6a8290..ac1e6638eb 100644 --- a/Sources/ApolloCodegenLib/IR/IR+Field.swift +++ b/Sources/ApolloCodegenLib/IR/IR+Field.swift @@ -9,6 +9,7 @@ extension IR { var alias: String? { underlyingField.alias } var responseKey: String { underlyingField.responseKey } var type: GraphQLType { underlyingField.type } + var arguments: [CompilationResult.Argument]? { underlyingField.arguments } fileprivate init(_ field: CompilationResult.Field) { self.underlyingField = field diff --git a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift index 028f55f0ba..afeb2ad841 100644 --- a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift @@ -85,12 +85,15 @@ struct OperationDefinitionTemplate { _ variables: [CompilationResult.VariableDefinition] ) -> TemplateString { """ - \(variables.map { "public var \($0.name): \($0.renderInputValueType())"}, separator: "\n") + \(variables.map { "public var \($0.name): \($0.type.renderAsInputValue())"}, separator: "\n") """ } - static func Parameter(_ variable: CompilationResult.VariableDefinition) -> String { - "\(variable.name): \(variable.renderInputValueType(includeDefault: true))" + static func Parameter(_ variable: CompilationResult.VariableDefinition) -> TemplateString { + """ + \(variable.name): \(variable.type.renderAsInputValue())\ + \(ifLet: variable.renderVariableDefaultValue(), {" = " + $0}) + """ } static func Accessors( @@ -101,10 +104,10 @@ struct OperationDefinitionTemplate { } return """ - public var variables: Variables? { - [\(variables.map { "\"\($0.name)\": \($0.name)"}, separator: ",\n ")] - } - """ + public var variables: Variables? { + [\(variables.map { "\"\($0.name)\": \($0.name)"}, separator: ",\n ")] + } + """ } } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift index b53376c891..d78d8035a8 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift @@ -1,13 +1,6 @@ import OrderedCollections extension CompilationResult.VariableDefinition { - func renderInputValueType(includeDefault: Bool = false) -> TemplateString { - """ - \(type.renderAsInputValue())\ - \(ifLet: renderVariableDefaultValue(), where: {_ in includeDefault}, {" = " + $0}) - """ - } - - private func renderVariableDefaultValue() -> TemplateString? { + func renderVariableDefaultValue() -> TemplateString? { switch defaultValue { case .none: return nil case .null: return ".null" diff --git a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift index a343e9cdce..336a09997b 100644 --- a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift @@ -100,8 +100,14 @@ struct SelectionSetTemplate { private func FieldSelectionTemplate(_ field: IR.Field) -> TemplateString { """ - .field("\(field.name)", \(ifLet: field.alias, {"alias: \"\($0)\", "})\(typeName(for: field)).self) + .field("\(field.name)", \ + \(ifLet: field.alias, {"alias: \"\($0)\", "})\ + \(typeName(for: field)).self\ + ) """ + // \(ifLet: field.arguments, where: { !$0.isEmpty }, { + // "arguments: [\($0.map {"" }), " + // }) } private func typeName(for field: IR.Field) -> String { diff --git a/SwiftScripts/Package.resolved b/SwiftScripts/Package.resolved index 231d48d62e..502fcb59f5 100644 --- a/SwiftScripts/Package.resolved +++ b/SwiftScripts/Package.resolved @@ -1,15 +1,6 @@ { "object": { "pins": [ - { - "package": "Commandant", - "repositoryURL": "https://github.com/Carthage/Commandant.git", - "state": { - "branch": null, - "revision": "ab68611013dec67413628ac87c1f29e8427bc8e4", - "version": "0.17.0" - } - }, { "package": "InflectorKit", "repositoryURL": "https://github.com/mattt/InflectorKit", @@ -28,15 +19,6 @@ "version": "0.5.0" } }, - { - "package": "Nimble", - "repositoryURL": "https://github.com/Quick/Nimble.git", - "state": { - "branch": null, - "revision": "72f5a90d573f7f7d70aa6b8ad84b3e1e02eabb4d", - "version": "8.0.9" - } - }, { "package": "ProcessRunner", "repositoryURL": "https://github.com/eneko/ProcessRunner.git", @@ -46,22 +28,13 @@ "version": "1.1.0" } }, - { - "package": "Quick", - "repositoryURL": "https://github.com/Quick/Quick.git", - "state": { - "branch": null, - "revision": "09b3becb37cb2163919a3842a4c5fa6ec7130792", - "version": "2.2.1" - } - }, { "package": "Rainbow", "repositoryURL": "https://github.com/onevcat/Rainbow", "state": { "branch": null, - "revision": "9c52c1952e9b2305d4507cf473392ac2d7c9b155", - "version": "3.1.5" + "revision": "626c3d4b6b55354b4af3aa309f998fae9b31a3d9", + "version": "3.2.0" } }, { @@ -78,8 +51,8 @@ "repositoryURL": "https://github.com/jpsim/SourceKitten.git", "state": { "branch": null, - "revision": "77a4dbbb477a8110eb8765e3c44c70fb4929098f", - "version": "0.29.0" + "revision": "558628392eb31d37cb251cfe626c53eafd330df6", + "version": "0.31.1" } }, { @@ -87,8 +60,8 @@ "repositoryURL": "https://github.com/stephencelis/SQLite.swift.git", "state": { "branch": null, - "revision": "60a65015f6402b7c34b9a924f755ca0a73afeeaa", - "version": "0.13.1" + "revision": "5f5ad81ac0d0a0f3e56e39e646e8423c617df523", + "version": "0.13.2" } }, { @@ -105,8 +78,8 @@ "repositoryURL": "https://github.com/apple/swift-collections", "state": { "branch": null, - "revision": "2d33a0ea89c961dcb2b3da2157963d9c0370347e", - "version": "1.0.1" + "revision": "48254824bb4248676bf7ce56014ff57b142b77eb", + "version": "1.0.2" } }, { @@ -114,8 +87,8 @@ "repositoryURL": "https://github.com/drmohundro/SWXMLHash.git", "state": { "branch": null, - "revision": "a4931e5c3bafbedeb1601d3bb76bbe835c6d475a", - "version": "5.0.1" + "revision": "9183170d20857753d4f331b0ca63f73c60764bf3", + "version": "5.0.2" } }, { @@ -123,8 +96,8 @@ "repositoryURL": "https://github.com/jpsim/Yams.git", "state": { "branch": null, - "revision": "c947a306d2e80ecb2c0859047b35c73b8e1ca27f", - "version": "2.0.0" + "revision": "9ff1cc9327586db4e0c8f46f064b6a82ec1566fa", + "version": "4.0.6" } } ] diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index a6a8128893..06c9e9a1b1 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -16,7 +16,20 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { super.tearDown() } - func test__renderInputValueType_includeDefaultTrue__givenAllInputFieldTypes_nilDefaultValues__generatesCorrectParametersWithoutInitializer() throws { + func test__renderOperationVariableProperty_givenDefaultValue_generatesCorrectParameterNoInitializerDefault() throws { + // given + subject = .mock("variable", type: .scalar(.string()), defaultValue: .string("Value")) + + let expected = "public var variable: GraphQLNullable" + + // when + let actual = OperationDefinitionTemplate.Variables.Properties([subject]).description + + // then + expect(actual).to(equal(expected)) + } + + func test__renderOperationVariableParameter_includeDefaultTrue__givenAllInputFieldTypes_nilDefaultValues__generatesCorrectParametersWithoutInitializer() throws { // given let tests: [(variable: CompilationResult.VariableDefinition, expected: String)] = [ ( @@ -25,7 +38,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.string()), defaultValue: nil ), - "GraphQLNullable" + "stringField: GraphQLNullable" ), ( .mock( @@ -33,7 +46,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.integer()), defaultValue: nil ), - "GraphQLNullable" + "intField: GraphQLNullable" ), ( .mock( @@ -41,7 +54,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.boolean()), defaultValue: nil ), - "GraphQLNullable" + "boolField: GraphQLNullable" ), ( .mock( @@ -49,7 +62,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.float()), defaultValue: nil ), - "GraphQLNullable" + "floatField: GraphQLNullable" ), ( .mock( @@ -57,7 +70,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .enum(.mock(name: "EnumValue")), defaultValue: nil ), - "GraphQLNullable>" + "enumField: GraphQLNullable>" ), ( .mock( @@ -70,7 +83,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { )), defaultValue: nil ), - "GraphQLNullable" + "inputField: GraphQLNullable" ), ( .mock( @@ -78,20 +91,20 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .list(.scalar(.string())), defaultValue: nil ), - "GraphQLNullable<[String?]>" + "listField: GraphQLNullable<[String?]>" ) ] for test in tests { // when - let actual = test.variable.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(test.variable).description // then expect(actual).to(equal(test.expected)) } } - func test__renderInputValueType_includeDefaultTrue__givenAllInputFieldTypes_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + func test__renderOperationVariableParameter_includeDefaultTrue__givenAllInputFieldTypes_withDefaultValues__generatesCorrectParametersWithInitializer() throws { // given let tests: [(variable: CompilationResult.VariableDefinition, expected: String)] = [ ( @@ -100,7 +113,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.string()), defaultValue: .string("Value") ), - "GraphQLNullable = \"Value\"" + "stringField: GraphQLNullable = \"Value\"" ), ( .mock( @@ -108,7 +121,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.string()), defaultValue: .null ), - "GraphQLNullable = .null" + "stringFieldNullDefaultValue: GraphQLNullable = .null" ), ( .mock( @@ -116,7 +129,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.integer()), defaultValue: .int(300) ), - "GraphQLNullable = 300" + "intField: GraphQLNullable = 300" ), ( .mock( @@ -124,7 +137,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.boolean()), defaultValue: .boolean(true) ), - "GraphQLNullable = true" + "boolField: GraphQLNullable = true" ), ( .mock( @@ -132,7 +145,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.boolean()), defaultValue: .boolean(false) ), - "GraphQLNullable = false" + "boolField: GraphQLNullable = false" ), ( .mock( @@ -140,7 +153,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .scalar(.float()), defaultValue: .float(12.3943) ), - "GraphQLNullable = 12.3943" + "floatField: GraphQLNullable = 12.3943" ), ( .mock( @@ -148,7 +161,17 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .enum(.mock(name: "EnumValue")), defaultValue: .enum("CaseONE") ), - "GraphQLNullable> = .init(\"CaseONE\")" + "enumField: GraphQLNullable> = .init(\"CaseONE\")" + ), + ( + .mock( + "listField", + type: .list(.scalar(.string())), + defaultValue: .list([.string("1"), .string("2")]) + ), + """ + listField: GraphQLNullable<[String?]> = ["1", "2"] + """ ), ( .mock( @@ -162,31 +185,21 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { defaultValue: .object(["innerStringField": .string("Value")]) ), """ - GraphQLNullable = ["innerStringField": "Value"] + inputField: GraphQLNullable = ["innerStringField": "Value"] """ ), - ( - .mock( - "listField", - type: .list(.scalar(.string())), - defaultValue: .list([.string("1"), .string("2")]) - ), - """ - GraphQLNullable<[String?]> = ["1", "2"] - """ - ) ] for test in tests { // when - let actual = test.variable.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(test.variable).description // then expect(actual).to(equal(test.expected)) } } - func test__renderInputValueType_includeDefaultTrue__givenNestedInputObject_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + func test__renderOperationVariableParameter_includeDefaultTrue__givenNestedInputObject_withDefaultValues__generatesCorrectParametersWithInitializer() throws { // given subject = .mock( "inputField", @@ -228,7 +241,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { ) let expected = """ - GraphQLNullable = [ + inputField: GraphQLNullable = [ "innerStringField": "ABCD", "innerIntField": 123, "innerFloatField": 12.3456, @@ -243,7 +256,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { """ // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equalLineByLine(expected)) @@ -251,211 +264,197 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { // MARK: Nullable Field Tests - func test__renderInputValueType__given_NullableField_NoDefault__generates_NullableParameter_Initializer() throws { + func test__renderOperationVariableParameter__given_NullableField_NoDefault__generates_NullableParameter_Initializer() throws { // given subject = .mock("nullable", type: .scalar(.integer()), defaultValue: nil) - let expected = "GraphQLNullable" + let expected = "nullable: GraphQLNullable" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableField_WithDefault__generates_NullableParameter_NoInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NullableField_WithDefault__generates_NullableParameter_NoInitializerDefault() throws { // given subject = .mock("nullableWithDefault", type: .scalar(.integer()), defaultValue: .int(3)) - let expected = "GraphQLNullable = 3" + let expected = "nullableWithDefault: GraphQLNullable = 3" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType_includeDefaultFalse_givenDefaultValue_generatesCorrectParameterNoInitializerDefault() throws { - // given - subject = .mock("variable", type: .scalar(.string()), defaultValue: .string("Value")) - - let expected = "GraphQLNullable" - - // when - let actual = subject.renderInputValueType(includeDefault: false).description - - // then - expect(actual).to(equal(expected)) - } - - - func test__renderInputValueType__given_NonNullableField_NoDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NonNullableField_NoDefault__generates_NonNullableNonOptionalParameter_NoInitializerDefault() throws { // given subject = .mock("nonNullable", type: .nonNull(.scalar(.integer())), defaultValue: nil) - let expected = "Int" + let expected = "nonNullable: Int" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableField_WithDefault__generates_NonNullableNonOptionalParameter_WithInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NonNullableField_WithDefault__generates_NonNullableNonOptionalParameter_WithInitializerDefault() throws { // given subject = .mock("nonNullableWithDefault", type: .nonNull(.scalar(.integer())), defaultValue: .int(3)) - let expected = "Int = 3" + let expected = "nonNullableWithDefault: Int = 3" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NullableItem_NoDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NullableList_NullableItem_NoDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { // given subject = .mock("nullableListNullableItem", type: .list(.scalar(.string())), defaultValue: nil) - let expected = "GraphQLNullable<[String?]>" + let expected = "nullableListNullableItem: GraphQLNullable<[String?]>" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_WithInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_WithInitializerDefault() throws { // given subject = .mock("nullableListNullableItemWithDefault", type: .list(.scalar(.string())), defaultValue: .list([.string("val")])) - let expected = "GraphQLNullable<[String?]> = [\"val\"]" + let expected = "nullableListNullableItemWithDefault: GraphQLNullable<[String?]> = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NullableItem_WithDefault_includingNullElement_generates_NullableParameter_OptionalItem_WithInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NullableList_NullableItem_WithDefault_includingNullElement_generates_NullableParameter_OptionalItem_WithInitializerDefault() throws { // given subject = .mock("nullableListNullableItemWithDefault", type: .list(.scalar(.string())), defaultValue: .list([.string("val"), .null])) - let expected = "GraphQLNullable<[String?]> = [\"val\", nil]" + let expected = "nullableListNullableItemWithDefault: GraphQLNullable<[String?]> = [\"val\", nil]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NonNullableItem_NoDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NullableList_NonNullableItem_NoDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { // given subject = .mock("nullableListNonNullableItem", type: .list(.nonNull(.scalar(.string()))), defaultValue: nil) - let expected = "GraphQLNullable<[String]>" + let expected = "nullableListNonNullableItem: GraphQLNullable<[String]>" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_WithInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_WithInitializerDefault() throws { // given subject = .mock("nullableListNonNullableItemWithDefault", type: .list(.nonNull(.scalar(.string()))), defaultValue: .list([.string("val")])) - let expected = "GraphQLNullable<[String]> = [\"val\"]" + let expected = "nullableListNonNullableItemWithDefault: GraphQLNullable<[String]> = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableList_NullableItem_NoDefault__generates_NonNullableNonOptionalParameter_OptionalItem_NoInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NonNullableList_NullableItem_NoDefault__generates_NonNullableNonOptionalParameter_OptionalItem_NoInitializerDefault() throws { // given subject = .mock("nonNullableListNullableItem", type: .nonNull(.list(.scalar(.string()))), defaultValue: nil) - let expected = "[String?]" + let expected = "nonNullableListNullableItem: [String?]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_WithInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_WithInitializerDefault() throws { // given subject = .mock("nonNullableListNullableItemWithDefault", type: .nonNull(.list(.scalar(.string()))), defaultValue: .list([.string("val")])) - let expected = "[String?] = [\"val\"]" + let expected = "nonNullableListNullableItemWithDefault: [String?] = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableList_NonNullableItem_NoDefault__generates_NonNullableNonOptionalParameter_NonOptionalItem_NoInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NonNullableList_NonNullableItem_NoDefault__generates_NonNullableNonOptionalParameter_NonOptionalItem_NoInitializerDefault() throws { // given subject = .mock("nonNullableListNonNullableItem", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: nil) - let expected = "[String]" + let expected = "nonNullableListNonNullableItem: [String]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_WithInitializerDefault() throws { + func test__renderOperationVariableParameter__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_WithInitializerDefault() throws { // given subject = .mock("nonNullableListNonNullableItemWithDefault", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: .list([.string("val")])) - let expected = "[String] = [\"val\"]" + let expected = "nonNullableListNonNullableItemWithDefault: [String] = [\"val\"]" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) } - func test__renderInputValueType__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_NoInitializerNilDefault() throws { + func test__renderOperationVariableParameter__given_NullableListOfNullableEnum_NoDefault__generates_NullableParameter_OptionalItem_NoInitializerNilDefault() throws { // given subject = .mock("nullableListNullableItem", type: .list(.enum(.mock(name: "EnumValue"))), defaultValue: nil) - let expected = "GraphQLNullable<[GraphQLEnum?]>" + let expected = "nullableListNullableItem: GraphQLNullable<[GraphQLEnum?]>" // when - let actual = subject.renderInputValueType(includeDefault: true).description + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description // then expect(actual).to(equal(expected)) diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift index 64d3c262b8..a191dfcb2c 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift @@ -464,6 +464,46 @@ class SelectionSetTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) } + // MARK: Selections - Fields - Arguments + + func test__render_selections__givenFieldWithArgumentWithConstantValue_rendersFieldSelections() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + string(variable: Int): String! + } + """ + + document = """ + query TestOperation { + allAnimals { + aliased: string(variable: 3) + } + } + """ + + let expected = """ + public static var selections: [Selection] { [ + .field("string", alias: "aliased", String.self, arguments: ["variable": 3]), + ] } + """ + + // when + try buildSubjectAndOperation() + let allAnimals = try XCTUnwrap( + operation[field: "query"]?[field: "allAnimals"] as? IR.EntityField + ) + + let actual = subject.render(field: allAnimals) + + // then + expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) + } + // MARK: Selections - Type Cases func test__render_selections__givenTypeCases_rendersTypeCaseSelections() throws { From ba9c640975a3f9575fa33e3dcbdd01a59ba48bec Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Fri, 18 Feb 2022 13:40:51 -0800 Subject: [PATCH 21/25] Restructured tests to be accurate for behavior with initializing inpuit object default values directly --- .../Generated/Operations/PetSearchQuery.swift | 25 ++-- Sources/ApolloAPI/GraphQLNullable.swift | 10 +- ...nDefinition_VariableDefinition_Tests.swift | 109 +++++++++++++++--- 3 files changed, 114 insertions(+), 30 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift index 6f89a600fe..e6889781c4 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift @@ -19,17 +19,20 @@ public class PetSearchQuery: GraphQLQuery { public var filters: GraphQLNullable - public enum DefaultVariables { - public static let filters: GraphQLNullable = .some(PetSearchFilters( - species: ["Dog", "Cat"], - size: .some(.case(.SMALL)), - measurements: .some(MeasurementsInput( - height: 10.5, - weight: 5.0 - )))) - } - - public init(filters: GraphQLNullable = DefaultVariables.filters) { + public init( + filters: GraphQLNullable = .init( + PetSearchFilters( + species: ["Dog", "Cat"], + size: .init(.SMALL), + measurements: .init( + MeasurementsInput( + height: 10.5, + weight: 5.0 + ) + ) + ) + ) + ) { self.filters = filters } diff --git a/Sources/ApolloAPI/GraphQLNullable.swift b/Sources/ApolloAPI/GraphQLNullable.swift index f410de4571..2a5ab04e59 100644 --- a/Sources/ApolloAPI/GraphQLNullable.swift +++ b/Sources/ApolloAPI/GraphQLNullable.swift @@ -110,8 +110,12 @@ extension Dictionary: _InitializableByDictionaryLiteralElements { // MARK: - Custom Type Initialization -public extension GraphQLNullable where Wrapped: RawRepresentable, Wrapped.RawValue == String { - init(_ rawValue: String) { - self = .some(Wrapped(rawValue: rawValue)!) +public extension GraphQLNullable { + init(_ caseValue: T) where Wrapped == GraphQLEnum { + self = .some(Wrapped(caseValue)) + } + + init(_ object: Wrapped) where Wrapped: InputObject { + self = .some(object) } } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift index 06c9e9a1b1..8c1234df5c 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinition_VariableDefinition_Tests.swift @@ -104,7 +104,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { } } - func test__renderOperationVariableParameter_includeDefaultTrue__givenAllInputFieldTypes_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + func test__renderOperationVariableParameter__givenAllInputFieldTypes_withDefaultValues__generatesCorrectParametersWithInitializer() throws { // given let tests: [(variable: CompilationResult.VariableDefinition, expected: String)] = [ ( @@ -161,7 +161,15 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { type: .enum(.mock(name: "EnumValue")), defaultValue: .enum("CaseONE") ), - "enumField: GraphQLNullable> = .init(\"CaseONE\")" + "enumField: GraphQLNullable> = .init(.CaseONE)" + ), + ( + .mock( + "enumField", + type: .nonNull(.enum(.mock(name: "EnumValue"))), + defaultValue: .enum("CaseONE") + ), + "enumField: GraphQLEnum = .init(.CaseONE)" ), ( .mock( @@ -185,7 +193,9 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { defaultValue: .object(["innerStringField": .string("Value")]) ), """ - inputField: GraphQLNullable = ["innerStringField": "Value"] + inputField: GraphQLNullable = .init( + InnerInputObject(innerStringField: "Value") + ) """ ), ] @@ -199,7 +209,7 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { } } - func test__renderOperationVariableParameter_includeDefaultTrue__givenNestedInputObject_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + func test__renderOperationVariableParameter_includeDefaultTrue__givenNullable_nestedInputObject_withDefaultValues__generatesCorrectParametersWithInitializer() throws { // given subject = .mock( "inputField", @@ -241,18 +251,85 @@ class OperationDefinition_VariableDefinition_Tests: XCTestCase { ) let expected = """ - inputField: GraphQLNullable = [ - "innerStringField": "ABCD", - "innerIntField": 123, - "innerFloatField": 12.3456, - "innerBoolField": true, - "innerListField": ["A", "B"], - "innerEnumField": GraphQLEnum("CaseONE"), - "innerInputObject": [ - "innerStringField": "EFGH", - "innerListField": [GraphQLEnum("CaseTwo"), GraphQLEnum("CaseThree")] - ] - ] + inputField: GraphQLNullable = .init( + InputObject( + innerStringField: "ABCD", + innerIntField: 123, + innerFloatField: 12.3456, + innerBoolField: true, + innerListField: ["A", "B"], + innerEnumField: .init(.CaseONE), + innerInputObject: .init( + InnerInputObject( + innerStringField: "EFGH", + innerListField: [.init(.CaseTwo), .init(.CaseThree)] + ) + ) + ) + ) + """ + + // when + let actual = OperationDefinitionTemplate.Variables.Parameter(subject).description + + // then + expect(actual).to(equalLineByLine(expected)) + } + + func test__renderOperationVariableParameter_includeDefaultTrue__givenNotNullable_nestedInputObject_withDefaultValues__generatesCorrectParametersWithInitializer() throws { + // given + subject = .mock( + "inputField", + type: .nonNull(.inputObject(.mock( + "InputObject", + fields: [ + .mock("innerStringField", type: .scalar(.string()), defaultValue: nil), + .mock("innerIntField", type: .scalar(.integer()), defaultValue: nil), + .mock("innerFloatField", type: .scalar(.float()), defaultValue: nil), + .mock("innerBoolField", type: .scalar(.boolean()), defaultValue: nil), + .mock("innerListField", type: .list(.scalar(.string())), defaultValue: nil), + .mock("innerEnumField", type: .enum(.mock(name: "EnumValue")), defaultValue: nil), + .mock("innerInputObject", + type: .nonNull(.inputObject(.mock( + "InnerInputObject", + fields: [ + .mock("innerStringField", type: .scalar(.string()), defaultValue: nil), + .mock("innerListField", type: .list(.enum(.mock(name: "EnumList"))), defaultValue: nil), + .mock("innerIntField", type: .scalar(.integer()), defaultValue: nil), + .mock("innerEnumField", type: .enum(.mock(name: "EnumValue")), defaultValue: nil), + ] + ))), + defaultValue: nil + ) + ] + ))), + defaultValue: .object([ + "innerStringField": .string("ABCD"), + "innerIntField": .int(123), + "innerFloatField": .float(12.3456), + "innerBoolField": .boolean(true), + "innerListField": .list([.string("A"), .string("B")]), + "innerEnumField": .enum("CaseONE"), + "innerInputObject": .object([ + "innerStringField": .string("EFGH"), + "innerListField": .list([.enum("CaseTwo"), .enum("CaseThree")]), + ]) + ]) + ) + + let expected = """ + inputField: InputObject = InputObject( + innerStringField: "ABCD", + innerIntField: 123, + innerFloatField: 12.3456, + innerBoolField: true, + innerListField: ["A", "B"], + innerEnumField: .init(.CaseONE), + innerInputObject: InnerInputObject( + innerStringField: "EFGH", + innerListField: [.init(.CaseTwo), .init(.CaseThree)] + ) + ) """ // when From 3c105a1dfa9f7881ee903a4dbf9de5376fc04307 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Fri, 18 Feb 2022 14:46:14 -0800 Subject: [PATCH 22/25] Changed Implementation for direct input value initialization --- Apollo.xcodeproj/project.pbxproj | 2 + .../InputObjects/PetSearchFilters.swift | 2 +- .../Frontend/GraphQLSchema.swift | 2 +- .../GraphQLInputField+Rendered.swift | 8 +- ...OperationVariableDefinition+Rendered.swift | 97 +++++++++++++------ .../MockGraphQLType.swift | 2 +- SwiftScripts/Package.resolved | 51 +++++++--- .../Templates/InputObjectTemplateTests.swift | 29 +++--- 8 files changed, 127 insertions(+), 66 deletions(-) diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 367bb733d2..4e7e8098a8 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -259,6 +259,7 @@ DE674D9F261CEEE4000E8FC8 /* a.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9B2061192591B3550020D1E0 /* a.txt */; }; DE6B15AF26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6B15AE26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift */; }; DE6B15B126152BE10068D642 /* Apollo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FC750441D2A532C00458D91 /* Apollo.framework */; }; + DE6B650827C059A800970E4E /* ApolloAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE058621266978A100265760 /* ApolloAPI.framework */; }; DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */; }; DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */; }; @@ -1240,6 +1241,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DE6B650827C059A800970E4E /* ApolloAPI.framework in Frameworks */, DE3C7A94260A6C1000D2F4FF /* ApolloUtils.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift index 3866df4491..87ee858ce3 100644 --- a/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift +++ b/Sources/AnimalKingdomAPI/Generated/Schema/InputObjects/PetSearchFilters.swift @@ -36,4 +36,4 @@ public struct PetSearchFilters: InputObject { get { data.measurements } set { data.measurements = newValue } } -} +} \ No newline at end of file diff --git a/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift b/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift index a38a3da8e3..cb15fbc60c 100644 --- a/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift +++ b/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift @@ -75,7 +75,7 @@ public class GraphQLInputField: JavaScriptObject { private(set) lazy var description: String? = self["description"] - lazy var defaultValue: Any? = self["defaultValue"] + lazy var defaultValue: GraphQLValue? = self["defaultValue"] private(set) lazy var deprecationReason: String? = self["deprecationReason"] } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift index ca52721267..12b4ba1319 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/GraphQLInputField+Rendered.swift @@ -24,12 +24,8 @@ extension GraphQLInputField { switch defaultValue { case .none, .some(nil): return false - case let .some(value): - guard let value = value as? JSValue else { - fatalError("Cannot determine default value for Input field: \(self)") - } - - return !value.isUndefined + case .some: + return true } } } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift index d78d8035a8..4da1b102fe 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift @@ -1,48 +1,85 @@ import OrderedCollections -extension CompilationResult.VariableDefinition { + +protocol InputVariableRenderable { + var type: GraphQLType { get } + var defaultValue: GraphQLValue? { get } +} + +extension CompilationResult.VariableDefinition: InputVariableRenderable {} + +struct InputVariable: InputVariableRenderable { + let type: GraphQLType + let defaultValue: GraphQLValue? +} + +extension InputVariableRenderable { func renderVariableDefaultValue() -> TemplateString? { + renderVariableDefaultValue(inList: false) + } + + private func renderVariableDefaultValue(inList: Bool) -> TemplateString? { switch defaultValue { case .none: return nil - case .null: return ".null" - case let .enum(enumValue): return ".init(\"\(enumValue)\")" - case let .some(value): return renderInputValueLiteral(value: value, type: type) - } - } -} + case .null: return inList ? "nil" : ".null" + case let .string(string): return "\"\(string)\"" + case let .boolean(boolean): return boolean ? "true" : "false" + case let .int(int): return TemplateString(int.description) + case let .float(float): return TemplateString(float.description) + case let .enum(enumValue): return ".init(.\(enumValue))" + case let .list(list): + switch type { + case let .nonNull(.list(listInnerType)), + let .list(listInnerType): + return """ + [\(list.compactMap { + InputVariable(type: listInnerType, defaultValue: $0).renderVariableDefaultValue(inList: true) + }, separator: ", ")] + """ -private func renderInputValueLiteral(value: GraphQLValue, type: GraphQLType) -> TemplateString { - switch value { - case let .string(string): return "\"\(string)\"" - case let .boolean(boolean): return boolean ? "true" : "false" - case let .int(int): return TemplateString(int.description) - case let .float(float): return TemplateString(float.description) - case let .enum(enumValue): return "GraphQLEnum<\(type.namedType.name)>(\"\(enumValue)\")" - case .null: return "nil" - case let .list(list): - return "[\(list.map { renderInputValueLiteral(value: $0, type: type) }, separator: ", ")]" - - case let .object(object): - guard case let .inputObject(inputObject) = type else { - preconditionFailure("Variable type must be InputObject with value of .object type.") - } + default: + preconditionFailure("Variable type must be List with value of .list type.") + } + + case let .object(object): + switch type { + case let .nonNull(.inputObject(inputObjectType)): + return inputObjectType.renderInputValueLiteral(values: object).unsafelyUnwrapped + + case let .inputObject(inputObjectType): + return """ + .init( + \(inputObjectType.renderInputValueLiteral(values: object).unsafelyUnwrapped) + ) + """ - return inputObject.renderInputValueLiteral(values: object) + default: + preconditionFailure("Variable type must be InputObject with value of .object type.") + } - case .variable: - preconditionFailure("Variable cannot be used as Default Value for an Operation Variable!") + case .variable: + preconditionFailure("Variable cannot be used as Default Value for an Operation Variable!") + } } } fileprivate extension GraphQLInputObjectType { - func renderInputValueLiteral(values: OrderedDictionary) -> TemplateString { - let entries = values.map { entry -> TemplateString in + func renderInputValueLiteral(values: OrderedDictionary) -> TemplateString? { + let entries = values.compactMap { entry -> TemplateString? in guard let field = self.fields[entry.0] else { preconditionFailure("Field \(entry.0) not found on input object.") } + let variable = InputVariable(type: field.type, defaultValue: entry.value) + guard let defaultValue = variable.renderVariableDefaultValue() else { + return nil + } - return "\"\(entry.0)\": " + - ApolloCodegenLib.renderInputValueLiteral(value: entry.1, type: field.type) + return "\(entry.0): " + defaultValue } - return "[\(list: entries)]" + + guard !entries.isEmpty else { return nil } + + return """ + \(name)(\(list: entries)) + """ } } diff --git a/Sources/ApolloCodegenTestSupport/MockGraphQLType.swift b/Sources/ApolloCodegenTestSupport/MockGraphQLType.swift index 9668718e48..05243c1d16 100644 --- a/Sources/ApolloCodegenTestSupport/MockGraphQLType.swift +++ b/Sources/ApolloCodegenTestSupport/MockGraphQLType.swift @@ -98,7 +98,7 @@ public extension GraphQLInputField { class func mock( _ name: String, type: GraphQLType, - defaultValue: Any? + defaultValue: GraphQLValue? ) -> Self { let mock = Self.emptyMockObject() mock.name = name diff --git a/SwiftScripts/Package.resolved b/SwiftScripts/Package.resolved index 502fcb59f5..231d48d62e 100644 --- a/SwiftScripts/Package.resolved +++ b/SwiftScripts/Package.resolved @@ -1,6 +1,15 @@ { "object": { "pins": [ + { + "package": "Commandant", + "repositoryURL": "https://github.com/Carthage/Commandant.git", + "state": { + "branch": null, + "revision": "ab68611013dec67413628ac87c1f29e8427bc8e4", + "version": "0.17.0" + } + }, { "package": "InflectorKit", "repositoryURL": "https://github.com/mattt/InflectorKit", @@ -19,6 +28,15 @@ "version": "0.5.0" } }, + { + "package": "Nimble", + "repositoryURL": "https://github.com/Quick/Nimble.git", + "state": { + "branch": null, + "revision": "72f5a90d573f7f7d70aa6b8ad84b3e1e02eabb4d", + "version": "8.0.9" + } + }, { "package": "ProcessRunner", "repositoryURL": "https://github.com/eneko/ProcessRunner.git", @@ -28,13 +46,22 @@ "version": "1.1.0" } }, + { + "package": "Quick", + "repositoryURL": "https://github.com/Quick/Quick.git", + "state": { + "branch": null, + "revision": "09b3becb37cb2163919a3842a4c5fa6ec7130792", + "version": "2.2.1" + } + }, { "package": "Rainbow", "repositoryURL": "https://github.com/onevcat/Rainbow", "state": { "branch": null, - "revision": "626c3d4b6b55354b4af3aa309f998fae9b31a3d9", - "version": "3.2.0" + "revision": "9c52c1952e9b2305d4507cf473392ac2d7c9b155", + "version": "3.1.5" } }, { @@ -51,8 +78,8 @@ "repositoryURL": "https://github.com/jpsim/SourceKitten.git", "state": { "branch": null, - "revision": "558628392eb31d37cb251cfe626c53eafd330df6", - "version": "0.31.1" + "revision": "77a4dbbb477a8110eb8765e3c44c70fb4929098f", + "version": "0.29.0" } }, { @@ -60,8 +87,8 @@ "repositoryURL": "https://github.com/stephencelis/SQLite.swift.git", "state": { "branch": null, - "revision": "5f5ad81ac0d0a0f3e56e39e646e8423c617df523", - "version": "0.13.2" + "revision": "60a65015f6402b7c34b9a924f755ca0a73afeeaa", + "version": "0.13.1" } }, { @@ -78,8 +105,8 @@ "repositoryURL": "https://github.com/apple/swift-collections", "state": { "branch": null, - "revision": "48254824bb4248676bf7ce56014ff57b142b77eb", - "version": "1.0.2" + "revision": "2d33a0ea89c961dcb2b3da2157963d9c0370347e", + "version": "1.0.1" } }, { @@ -87,8 +114,8 @@ "repositoryURL": "https://github.com/drmohundro/SWXMLHash.git", "state": { "branch": null, - "revision": "9183170d20857753d4f331b0ca63f73c60764bf3", - "version": "5.0.2" + "revision": "a4931e5c3bafbedeb1601d3bb76bbe835c6d475a", + "version": "5.0.1" } }, { @@ -96,8 +123,8 @@ "repositoryURL": "https://github.com/jpsim/Yams.git", "state": { "branch": null, - "revision": "9ff1cc9327586db4e0c8f46f064b6a82ec1566fa", - "version": "4.0.6" + "revision": "c947a306d2e80ecb2c0859047b35c73b8e1ca27f", + "version": "2.0.0" } } ] diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift index efe3e87baa..1d7430c872 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/InputObjectTemplateTests.swift @@ -1,25 +1,16 @@ import XCTest import Nimble @testable import ApolloCodegenLib -import JavaScriptCore class InputObjectTemplateTests: XCTestCase { - var jsVM: JSVirtualMachine! - var jsContext: JSContext! var subject: InputObjectTemplate! override func setUp() { super.setUp() - - jsVM = JSVirtualMachine() - jsContext = JSContext(virtualMachine: jsVM) } override func tearDown() { subject = nil - jsContext = nil - jsVM = nil - super.tearDown() } @@ -311,7 +302,7 @@ class InputObjectTemplateTests: XCTestCase { func test__render__given_NullableField_WithDefault__generates_NullableParameter_NoInitializerDefault() throws { // given buildSubject(fields: [ - GraphQLInputField.mock("nullableWithDefault", type: .scalar(.integer()), defaultValue: JSValue(int32: 3, in: jsContext)) + GraphQLInputField.mock("nullableWithDefault", type: .scalar(.integer()), defaultValue: .int(3)) ]) let expected = """ @@ -361,7 +352,7 @@ class InputObjectTemplateTests: XCTestCase { func test__render__given_NonNullableField_WithDefault__generates_OptionalParameter_NoInitializerDefault() throws { // given buildSubject(fields: [ - GraphQLInputField.mock("nonNullableWithDefault", type: .nonNull(.scalar(.integer())), defaultValue: JSValue(int32: 3, in: jsContext)) + GraphQLInputField.mock("nonNullableWithDefault", type: .nonNull(.scalar(.integer())), defaultValue: .int(3)) ]) let expected = """ @@ -411,7 +402,9 @@ class InputObjectTemplateTests: XCTestCase { func test__render__given_NullableList_NullableItem_WithDefault__generates_NullableParameter_OptionalItem_NoInitializerDefault() throws { // given buildSubject(fields: [ - GraphQLInputField.mock("nullableListNullableItemWithDefault", type: .list(.scalar(.string())), defaultValue: JSValue(object: ["val"], in: jsContext)) + GraphQLInputField.mock("nullableListNullableItemWithDefault", + type: .list(.scalar(.string())), + defaultValue: .list([.string("val")])) ]) let expected = """ @@ -461,7 +454,9 @@ class InputObjectTemplateTests: XCTestCase { func test__render__given_NullableList_NonNullableItem_WithDefault__generates_NullableParameter_NonOptionalItem_NoInitializerDefault() throws { // given buildSubject(fields: [ - GraphQLInputField.mock("nullableListNonNullableItemWithDefault", type: .list(.nonNull(.scalar(.string()))), defaultValue: JSValue(object: ["val"], in: jsContext)) + GraphQLInputField.mock("nullableListNonNullableItemWithDefault", + type: .list(.nonNull(.scalar(.string()))), + defaultValue: .list([.string("val")])) ]) let expected = """ @@ -511,7 +506,9 @@ class InputObjectTemplateTests: XCTestCase { func test__render__given_NonNullableList_NullableItem_WithDefault__generates_OptionalParameter_OptionalItem_NoInitializerDefault() throws { // given buildSubject(fields: [ - GraphQLInputField.mock("nonNullableListNullableItemWithDefault", type: .nonNull(.list(.scalar(.string()))), defaultValue: JSValue(object: ["val"], in: jsContext)) + GraphQLInputField.mock("nonNullableListNullableItemWithDefault", + type: .nonNull(.list(.scalar(.string()))), + defaultValue: .list([.string("val")])) ]) let expected = """ @@ -561,7 +558,9 @@ class InputObjectTemplateTests: XCTestCase { func test__render__given_NonNullableList_NonNullableItem_WithDefault__generates_OptionalParameter_NonOptionalItem_NoInitializerDefault() throws { // given buildSubject(fields: [ - GraphQLInputField.mock("nonNullableListNonNullableItemWithDefault", type: .nonNull(.list(.nonNull(.scalar(.string())))), defaultValue: JSValue(object: ["val"], in: jsContext)) + GraphQLInputField.mock("nonNullableListNonNullableItemWithDefault", + type: .nonNull(.list(.nonNull(.scalar(.string())))), + defaultValue: .list([.string("val")])) ]) let expected = """ From 224eda69a91b7a5d6e6b21a7ae27b534663d45e1 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Fri, 18 Feb 2022 15:46:35 -0800 Subject: [PATCH 23/25] WIP: FieldArgument Rendering --- Apollo.xcodeproj/project.pbxproj | 8 +- .../Frontend/CompilationResult.swift | 4 +- .../Frontend/JavaScript/src/compiler/index.ts | 12 ++- .../Frontend/JavaScript/src/compiler/ir.ts | 2 +- .../OperationDefinitionTemplate.swift | 2 +- ...ed.swift => InputVariableRenderable.swift} | 25 +++--- .../Templates/SelectionSetTemplate.swift | 13 +-- .../SelectionSetTemplateTests.swift | 81 +++++++++++++++++++ 8 files changed, 119 insertions(+), 28 deletions(-) rename Sources/ApolloCodegenLib/Templates/RenderingHelpers/{OperationVariableDefinition+Rendered.swift => InputVariableRenderable.swift} (76%) diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 4e7e8098a8..9dd6717c12 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -262,7 +262,7 @@ DE6B650827C059A800970E4E /* ApolloAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE058621266978A100265760 /* ApolloAPI.framework */; }; DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */; }; DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; - DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */; }; + DE6D07FF27BC7F78009F5F33 /* InputVariableRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */; }; DE6D080427BD9A91009F5F33 /* PetAdoptionMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */; }; DE6D080727BD9AA9009F5F33 /* PetAdoptionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */; }; DE6D080927BD9ABA009F5F33 /* Mutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D080827BD9ABA009F5F33 /* Mutation.swift */; }; @@ -1009,7 +1009,7 @@ DE6B160D26152D210068D642 /* Workspace-Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Shared.xcconfig"; sourceTree = ""; }; DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLInputField+Rendered.swift"; sourceTree = ""; }; DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationDefinition_VariableDefinition_Tests.swift; sourceTree = ""; }; - DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OperationVariableDefinition+Rendered.swift"; sourceTree = ""; }; + DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputVariableRenderable.swift; sourceTree = ""; }; DE6D080227BD9933009F5F33 /* PetAdoptionMutation.graphql */ = {isa = PBXFileReference; lastKnownFileType = text; path = PetAdoptionMutation.graphql; sourceTree = ""; }; DE6D080327BD9A91009F5F33 /* PetAdoptionMutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionMutation.swift; sourceTree = ""; }; DE6D080627BD9AA9009F5F33 /* PetAdoptionInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAdoptionInput.swift; sourceTree = ""; }; @@ -2196,7 +2196,7 @@ E64F7EBB27A11A510059C021 /* GraphQLNamedType+SwiftName.swift */, DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */, - DE6D07FE27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift */, + DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */, ); path = RenderingHelpers; sourceTree = ""; @@ -3204,7 +3204,7 @@ E66F8899276C15580000BDA8 /* ObjectFileGenerator.swift in Sources */, 9BAEEBEF2346644B00808306 /* ApolloSchemaDownloader.swift in Sources */, DE5FD601276923620033EE23 /* TemplateString.swift in Sources */, - DE6D07FF27BC7F78009F5F33 /* OperationVariableDefinition+Rendered.swift in Sources */, + DE6D07FF27BC7F78009F5F33 /* InputVariableRenderable.swift in Sources */, DE796429276998B000978A03 /* IR+RootFieldBuilder.swift in Sources */, E64F7EC127A122300059C021 /* ObjectTemplate.swift in Sources */, 9F1A966F258F34BB00A06EEB /* JavaScriptBridge.swift in Sources */, diff --git a/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift b/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift index 3f43296750..213804b8ac 100644 --- a/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift +++ b/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift @@ -238,7 +238,9 @@ public class CompilationResult: JavaScriptObject { public class Argument: JavaScriptObject, Hashable { lazy var name: String = self["name"] - + + lazy var type: GraphQLType = self["type"] + lazy var value: GraphQLValue = self["value"] public func hash(into hasher: inout Hasher) { diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts index 201e723e5c..045f17fce2 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts @@ -220,7 +220,7 @@ export function compileToIR( if (!fieldDef) { throw new GraphQLError( `Cannot query field "${name}" on type "${String(parentType)}"`, - selectionNode + { nodes: selectionNode } ); } @@ -238,7 +238,15 @@ export function compileToIR( const argDef = fieldDef.args.find( (argDef) => argDef.name === arg.name.value ); - const argDefType = (argDef && argDef.type) || undefined; + const argDefType = argDef?.type; + + if (!argDefType) { + throw new GraphQLError( + `Cannot find argument type for argument "${name}" on field "${selectionNode.name.value}"`, + { nodes: [selectionNode, arg] } + ) + } + return { name, value: valueFromValueNode(arg.value), diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts index b78026101c..1aeae3537d 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts @@ -55,7 +55,7 @@ export interface Field { export interface Argument { name: string; value: GraphQLValue; - type?: GraphQLInputType; + type: GraphQLInputType; } export interface InlineFragment { diff --git a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift index afeb2ad841..4cff725cb5 100644 --- a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift @@ -92,7 +92,7 @@ struct OperationDefinitionTemplate { static func Parameter(_ variable: CompilationResult.VariableDefinition) -> TemplateString { """ \(variable.name): \(variable.type.renderAsInputValue())\ - \(ifLet: variable.renderVariableDefaultValue(), {" = " + $0}) + \(if: variable.defaultValue != nil, " = " + variable.renderVariableDefaultValue()) """ } diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift similarity index 76% rename from Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift rename to Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift index 4da1b102fe..f77bbd3a7e 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationVariableDefinition+Rendered.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift @@ -6,6 +6,9 @@ protocol InputVariableRenderable { } extension CompilationResult.VariableDefinition: InputVariableRenderable {} +extension CompilationResult.Argument: InputVariableRenderable { + var defaultValue: GraphQLValue? { value } +} struct InputVariable: InputVariableRenderable { let type: GraphQLType @@ -13,13 +16,13 @@ struct InputVariable: InputVariableRenderable { } extension InputVariableRenderable { - func renderVariableDefaultValue() -> TemplateString? { + func renderVariableDefaultValue() -> TemplateString { renderVariableDefaultValue(inList: false) } - private func renderVariableDefaultValue(inList: Bool) -> TemplateString? { + private func renderVariableDefaultValue(inList: Bool) -> TemplateString { switch defaultValue { - case .none: return nil + case .none: return "" case .null: return inList ? "nil" : ".null" case let .string(string): return "\"\(string)\"" case let .boolean(boolean): return boolean ? "true" : "false" @@ -43,12 +46,12 @@ extension InputVariableRenderable { case let .object(object): switch type { case let .nonNull(.inputObject(inputObjectType)): - return inputObjectType.renderInputValueLiteral(values: object).unsafelyUnwrapped + return inputObjectType.renderInitializer(values: object) case let .inputObject(inputObjectType): return """ .init( - \(inputObjectType.renderInputValueLiteral(values: object).unsafelyUnwrapped) + \(inputObjectType.renderInitializer(values: object)) ) """ @@ -63,21 +66,17 @@ extension InputVariableRenderable { } fileprivate extension GraphQLInputObjectType { - func renderInputValueLiteral(values: OrderedDictionary) -> TemplateString? { - let entries = values.compactMap { entry -> TemplateString? in + func renderInitializer(values: OrderedDictionary) -> TemplateString { + let entries = values.compactMap { entry -> TemplateString in guard let field = self.fields[entry.0] else { preconditionFailure("Field \(entry.0) not found on input object.") } + let variable = InputVariable(type: field.type, defaultValue: entry.value) - guard let defaultValue = variable.renderVariableDefaultValue() else { - return nil - } - return "\(entry.0): " + defaultValue + return "\(entry.0): " + variable.renderVariableDefaultValue() } - guard !entries.isEmpty else { return nil } - return """ \(name)(\(list: entries)) """ diff --git a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift index 336a09997b..618db19835 100644 --- a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift @@ -100,14 +100,15 @@ struct SelectionSetTemplate { private func FieldSelectionTemplate(_ field: IR.Field) -> TemplateString { """ - .field("\(field.name)", \ - \(ifLet: field.alias, {"alias: \"\($0)\", "})\ - \(typeName(for: field)).self\ + .field("\(field.name)"\ + \(ifLet: field.alias, {", alias: \"\($0)\""})\ + , \(typeName(for: field)).self\ + \(ifLet: field.arguments, + where: { !$0.isEmpty }, { + ", arguments: [\($0.map { "\"\($0.name)\": \($0.renderVariableDefaultValue())" })]" + })\ ) """ - // \(ifLet: field.arguments, where: { !$0.isEmpty }, { - // "arguments: [\($0.map {"" }), " - // }) } private func typeName(for field: IR.Field) -> String { diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift index a191dfcb2c..5571f10447 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift @@ -504,6 +504,87 @@ class SelectionSetTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) } + func test__render_selections__givenFieldWithArgumentOfInputObjectTypeWithNullableFields_withConstantValues_rendersFieldSelections() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + string(input: TestInput): String! + } + + input TestInput { + string: String + int: Int + float: Float + bool: Boolean + list: [String] + enum: TestEnum + innerInput: InnerInput + } + + input InnerInput { + string: String + enumList: [TestEnum] + } + + enum TestEnum { + CaseOne + CaseTwo + } + """ + + document = """ + query TestOperation { + allAnimals { + aliased: string(input: { + string: "ABCD", + int: 3, + float: 123.456, + bool: true, + list: ["A", "B"], + enum: CaseOne, + innerInput: { + string: "EFGH", + enumList: [CaseOne, CaseTwo] + } + }) + } + } + """ + + let expected = """ + public static var selections: [Selection] { [ + .field("string", alias: "aliased", String.self, arguments: ["input": [ + "string": "ABCD", + "int": 3, + "float": 123.456, + "bool": true, + "list": ["A", "B"], + "enum": .init(.CaseOne), + "innerInput": [ + "string": "EFGH", + "enumList": ["CaseOne", ".CaseTwo"] + ] + ] + ) + ] } + """ + + // when + try buildSubjectAndOperation() + let allAnimals = try XCTUnwrap( + operation[field: "query"]?[field: "allAnimals"] as? IR.EntityField + ) + + let actual = subject.render(field: allAnimals) + + // then + expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) + } + // MARK: Selections - Type Cases func test__render_selections__givenTypeCases_rendersTypeCaseSelections() throws { From 3c780f33214c7bd4d2f32856e78478fe9d58b155 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Mon, 21 Feb 2022 12:59:43 -0800 Subject: [PATCH 24/25] Fix field argument rendering to use literals --- Apollo.xcodeproj/project.pbxproj | 4 + Sources/ApolloAPI/InputValue.swift | 34 +------- Sources/ApolloAPI/ScalarTypes.swift | 5 +- .../FieldArgumentRendering.swift | 22 +++++ .../InputVariableRenderable.swift | 3 - .../Templates/SelectionSetTemplate.swift | 8 +- .../SelectionSetTemplateTests.swift | 85 +++++++++++++++++-- 7 files changed, 117 insertions(+), 44 deletions(-) create mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/FieldArgumentRendering.swift diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 9dd6717c12..b7c9135c37 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -260,6 +260,7 @@ DE6B15AF26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6B15AE26152BE10068D642 /* DefaultInterceptorProviderIntegrationTests.swift */; }; DE6B15B126152BE10068D642 /* Apollo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FC750441D2A532C00458D91 /* Apollo.framework */; }; DE6B650827C059A800970E4E /* ApolloAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE058621266978A100265760 /* ApolloAPI.framework */; }; + DE6B650C27C4293D00970E4E /* FieldArgumentRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6B650B27C4293D00970E4E /* FieldArgumentRendering.swift */; }; DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */; }; DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */; }; DE6D07FF27BC7F78009F5F33 /* InputVariableRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */; }; @@ -1007,6 +1008,7 @@ DE6B160B26152D210068D642 /* Project-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Debug.xcconfig"; sourceTree = ""; }; DE6B160C26152D210068D642 /* Workspace-Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Packaging.xcconfig"; sourceTree = ""; }; DE6B160D26152D210068D642 /* Workspace-Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Workspace-Shared.xcconfig"; sourceTree = ""; }; + DE6B650B27C4293D00970E4E /* FieldArgumentRendering.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldArgumentRendering.swift; sourceTree = ""; }; DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphQLInputField+Rendered.swift"; sourceTree = ""; }; DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationDefinition_VariableDefinition_Tests.swift; sourceTree = ""; }; DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputVariableRenderable.swift; sourceTree = ""; }; @@ -2197,6 +2199,7 @@ DEE2DAA127BAF00500EC0607 /* GraphQLType+Rendered.swift */, DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */, DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */, + DE6B650B27C4293D00970E4E /* FieldArgumentRendering.swift */, ); path = RenderingHelpers; sourceTree = ""; @@ -3222,6 +3225,7 @@ 9BAEEBF32346DDAD00808306 /* CodegenLogger.swift in Sources */, 9F628EB52593651B00F94F9D /* GraphQLValue.swift in Sources */, DE5FD5FD2769222D0033EE23 /* OperationDefinitionTemplate.swift in Sources */, + DE6B650C27C4293D00970E4E /* FieldArgumentRendering.swift in Sources */, DE5EEC8527988F1A00AF5913 /* IR+SelectionSet.swift in Sources */, DE3484622746FF8F0065B77E /* IR+OperationBuilder.swift in Sources */, E610D8DF278F8F1E0023E495 /* UnionFileGenerator.swift in Sources */, diff --git a/Sources/ApolloAPI/InputValue.swift b/Sources/ApolloAPI/InputValue.swift index 76d4a5cbd1..3347ae9e77 100644 --- a/Sources/ApolloAPI/InputValue.swift +++ b/Sources/ApolloAPI/InputValue.swift @@ -29,32 +29,6 @@ public indirect enum InputValue { case null } -// MARK: - InputValueConvertible - -extension InputValue: InputValueConvertible { - public init(_ value: InputValueConvertible) { - self = value.asInputValue - } - - @inlinable public var asInputValue: InputValue { self } -} - -public protocol InputValueConvertible { - @inlinable var asInputValue: InputValue { get } -} - -extension Array: InputValueConvertible where Element: InputValueConvertible { - @inlinable public var asInputValue: InputValue { .list(self.map{ $0.asInputValue })} -} - -extension Dictionary: InputValueConvertible where Key == String, Value: InputValueConvertible { - @inlinable public var asInputValue: InputValue { .object(self.mapValues { $0.asInputValue })} -} - -extension InputValueConvertible where Self: RawRepresentable, RawValue == String { - @inlinable public var asInputValue: InputValue { .scalar(rawValue) } -} - // MARK: - ExpressibleBy Literal Extensions extension InputValue: ExpressibleByStringLiteral { @@ -82,14 +56,14 @@ extension InputValue: ExpressibleByBooleanLiteral { } extension InputValue: ExpressibleByArrayLiteral { - @inlinable public init(arrayLiteral elements: InputValueConvertible...) { - self = .list(Array(elements.map { $0.asInputValue })) + @inlinable public init(arrayLiteral elements: InputValue...) { + self = .list(Array(elements.map { $0 })) } } extension InputValue: ExpressibleByDictionaryLiteral { - @inlinable public init(dictionaryLiteral elements: (String, InputValueConvertible)...) { - self = .object(Dictionary(elements.map{ ($0.0, $0.1.asInputValue) }, + @inlinable public init(dictionaryLiteral elements: (String, InputValue)...) { + self = .object(Dictionary(elements.map{ ($0.0, $0.1) }, uniquingKeysWith: { (_, last) in last })) } } diff --git a/Sources/ApolloAPI/ScalarTypes.swift b/Sources/ApolloAPI/ScalarTypes.swift index c5020a5f83..f973dd26d2 100644 --- a/Sources/ApolloAPI/ScalarTypes.swift +++ b/Sources/ApolloAPI/ScalarTypes.swift @@ -5,7 +5,6 @@ public protocol ScalarType: JSONDecodable, JSONEncodable, Cacheable, - InputValueConvertible, GraphQLOperationVariableValue {} extension String: ScalarType {} @@ -17,9 +16,7 @@ extension Double: ScalarType {} extension ScalarType { public static func value(with cacheData: JSONValue, in transaction: CacheTransaction) throws -> Self { return cacheData as! Self - } - - public var asInputValue: InputValue { .scalar(self) } + } } public protocol CustomScalarType: diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/FieldArgumentRendering.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/FieldArgumentRendering.swift new file mode 100644 index 0000000000..4db259409a --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/FieldArgumentRendering.swift @@ -0,0 +1,22 @@ +import OrderedCollections + +extension GraphQLValue { + func renderInputValueLiteral() -> TemplateString { + switch self { + case let .string(string): return "\"\(string)\"" + case let .boolean(boolean): return boolean ? "true" : "false" + case let .int(int): return TemplateString(int.description) + case let .float(float): return TemplateString(float.description) + case let .enum(enumValue): return "\"\(enumValue)\"" + case .null: return ".null" + case let .list(list): + return "[\(list.map{ $0.renderInputValueLiteral() }, separator: ", ")]" + + case let .object(object): + return "[\(list: object.map{ "\"\($0.0)\": " + $0.1.renderInputValueLiteral() })]" + + case let .variable(variableName): + return ".variable(\"\(variableName)\")" + } + } +} diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift index f77bbd3a7e..b04c98c394 100644 --- a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/InputVariableRenderable.swift @@ -6,9 +6,6 @@ protocol InputVariableRenderable { } extension CompilationResult.VariableDefinition: InputVariableRenderable {} -extension CompilationResult.Argument: InputVariableRenderable { - var defaultValue: GraphQLValue? { value } -} struct InputVariable: InputVariableRenderable { let type: GraphQLType diff --git a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift index 618db19835..328abd42c5 100644 --- a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift @@ -104,8 +104,8 @@ struct SelectionSetTemplate { \(ifLet: field.alias, {", alias: \"\($0)\""})\ , \(typeName(for: field)).self\ \(ifLet: field.arguments, - where: { !$0.isEmpty }, { - ", arguments: [\($0.map { "\"\($0.name)\": \($0.renderVariableDefaultValue())" })]" + where: { !$0.isEmpty }, { args in + ", arguments: " + renderValue(for: args) })\ ) """ @@ -124,6 +124,10 @@ struct SelectionSetTemplate { } } + private func renderValue(for arguments: [CompilationResult.Argument]) -> TemplateString { + "[\(list: arguments.map{ "\"\($0.name)\": " + $0.value.renderInputValueLiteral() })]" + } + private func TypeCaseSelectionTemplate(_ typeCase: IR.SelectionSet.TypeInfo) -> TemplateString { """ .typeCase(As\(typeCase.parentType.name.firstUppercased).self) diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift index 5571f10447..7ba4810f3e 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift @@ -504,6 +504,82 @@ class SelectionSetTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) } + func test__render_selections__givenFieldWithArgumentWithNullConstantValue_rendersFieldSelections() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + string(variable: Int): String! + } + """ + + document = """ + query TestOperation { + allAnimals { + aliased: string(variable: null) + } + } + """ + + let expected = """ + public static var selections: [Selection] { [ + .field("string", alias: "aliased", String.self, arguments: ["variable": .null]), + ] } + """ + + // when + try buildSubjectAndOperation() + let allAnimals = try XCTUnwrap( + operation[field: "query"]?[field: "allAnimals"] as? IR.EntityField + ) + + let actual = subject.render(field: allAnimals) + + // then + expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) + } + + func test__render_selections__givenFieldWithArgumentWithVariableValue_rendersFieldSelections() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + string(variable: Int): String! + } + """ + + document = """ + query TestOperation($var: Int) { + allAnimals { + aliased: string(variable: $var) + } + } + """ + + let expected = """ + public static var selections: [Selection] { [ + .field("string", alias: "aliased", String.self, arguments: ["variable": .variable("var")]), + ] } + """ + + // when + try buildSubjectAndOperation() + let allAnimals = try XCTUnwrap( + operation[field: "query"]?[field: "allAnimals"] as? IR.EntityField + ) + + let actual = subject.render(field: allAnimals) + + // then + expect(actual).to(equalLineByLine(expected, atLine: 7, ignoringExtraLines: true)) + } + func test__render_selections__givenFieldWithArgumentOfInputObjectTypeWithNullableFields_withConstantValues_rendersFieldSelections() throws { // given schemaSDL = """ @@ -563,13 +639,12 @@ class SelectionSetTemplateTests: XCTestCase { "float": 123.456, "bool": true, "list": ["A", "B"], - "enum": .init(.CaseOne), + "enum": "CaseOne", "innerInput": [ - "string": "EFGH", - "enumList": ["CaseOne", ".CaseTwo"] - ] + "string": "EFGH", + "enumList": ["CaseOne", "CaseTwo"] ] - ) + ]]), ] } """ From ddd74acefeec5bfb1f2e93e58fec07d69fc7f7a0 Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Mon, 21 Feb 2022 13:37:52 -0800 Subject: [PATCH 25/25] Regenerate AnimalKingdomAPI with field arguments --- .../Operations/PetAdoptionMutation.swift | 2 +- .../Generated/Operations/PetSearchQuery.swift | 24 +++++++++---------- .../Frontend/GraphQLSchema.swift | 2 +- .../Frontend/JavaScript/src/compiler/index.ts | 2 +- .../dist/ApolloCodegenFrontend.bundle.js | 2 +- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift index 5493eb7c8e..00d4f89627 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetAdoptionMutation.swift @@ -33,7 +33,7 @@ public class PetAdoptionMutation: GraphQLMutation { public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Mutation.self) } public static var selections: [Selection] { [ - .field("adoptPet", AdoptPet.self), + .field("adoptPet", AdoptPet.self, arguments: ["input": .variable("input")]), ] } public var adoptPet: AdoptPet { data["adoptPet"] } diff --git a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift index e6889781c4..daa1c10cf6 100644 --- a/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift +++ b/Sources/AnimalKingdomAPI/Generated/Operations/PetSearchQuery.swift @@ -19,20 +19,18 @@ public class PetSearchQuery: GraphQLQuery { public var filters: GraphQLNullable - public init( - filters: GraphQLNullable = .init( - PetSearchFilters( - species: ["Dog", "Cat"], - size: .init(.SMALL), - measurements: .init( - MeasurementsInput( - height: 10.5, - weight: 5.0 - ) + public init(filters: GraphQLNullable = .init( + PetSearchFilters( + species: ["Dog", "Cat"], + size: .init(.SMALL), + measurements: .init( + MeasurementsInput( + height: 10.5, + weight: 5.0 ) ) ) - ) { + )) { self.filters = filters } @@ -46,7 +44,7 @@ public class PetSearchQuery: GraphQLQuery { public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Query.self) } public static var selections: [Selection] { [ - .field("pets", [Pet].self), + .field("pets", [Pet].self, arguments: ["filters": .variable("filters")]), ] } public var pets: [Pet] { data["pets"] } @@ -66,4 +64,4 @@ public class PetSearchQuery: GraphQLQuery { public var humanName: String? { data["humanName"] } } } -} +} \ No newline at end of file diff --git a/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift b/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift index cb15fbc60c..0b2ddf8744 100644 --- a/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift +++ b/Sources/ApolloCodegenLib/Frontend/GraphQLSchema.swift @@ -75,7 +75,7 @@ public class GraphQLInputField: JavaScriptObject { private(set) lazy var description: String? = self["description"] - lazy var defaultValue: GraphQLValue? = self["defaultValue"] + lazy var defaultValue: GraphQLValue? = (self["astNode"] as JavaScriptObject)["defaultValue"] private(set) lazy var deprecationReason: String? = self["deprecationReason"] } diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts index 045f17fce2..2bacb53731 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts @@ -131,7 +131,7 @@ export function compileToIR( if (!type) { throw new GraphQLError( `Couldn't get type from type node "${node.type}"`, - node + { nodes: node } ); } diff --git a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js index b128a00902..158cc16098 100644 --- a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js +++ b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js @@ -1 +1 @@ -var ApolloCodegenFrontend=function(e){"use strict";function t(e,t){if(!Boolean(e))throw new Error(t)}function n(e){return"object"==typeof e&&null!==e}function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}const i=/\r\n|[\n\r]/g;function o(e,t){let n=0,o=1;for(const s of e.body.matchAll(i)){if("number"==typeof s.index||r(!1),s.index>=t)break;n=s.index+s[0].length,o+=1}return{line:o,column:t+1-n}}function s(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${s}:${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+a([[s-1+" |",p[i-1]],[`${s} |`,d],["|","^".padStart(u)],[`${s+1} |`,p[i+1]]])}function a(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,...t){var r,i,s;const{nodes:a,source:u,positions:l,path:p,originalError:d,extensions:f}=function(e){const t=e[0];return null==t||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}(t);super(e),this.name="GraphQLError",this.path=null!=p?p:void 0,this.originalError=null!=d?d:void 0,this.nodes=c(Array.isArray(a)?a:a?[a]:void 0);const h=c(null===(r=this.nodes)||void 0===r?void 0:r.map((e=>e.loc)).filter((e=>null!=e)));this.source=null!=u?u:null==h||null===(i=h[0])||void 0===i?void 0:i.source,this.positions=null!=l?l:null==h?void 0:h.map((e=>e.start)),this.locations=l&&u?l.map((e=>o(u,e))):null==h?void 0:h.map((e=>o(e.source,e.start)));const m=n(null==d?void 0:d.extensions)?null==d?void 0:d.extensions:void 0;this.extensions=null!==(s=null!=f?f:m)&&void 0!==s?s: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!=d&&d.stack?Object.defineProperty(this,"stack",{value:d.stack,writable:!0,configurable:!0}):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"+s((t=n.loc).source,o(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+s(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 c(e){return void 0===e||0===e.length?void 0:e}function u(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,void 0,e,[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 l={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],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"]},p=new Set(Object.keys(l));function d(e){const t=null==e?void 0:e.kind;return"string"==typeof t&&p.has(t)}let f,h,m,v;function y(e){return 9===e||32===e}function E(e){return e>=48&&e<=57}function T(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return T(e)||95===e}function I(e){return T(e)||E(e)||95===e}function g(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let t=0;t0===t?e:e.slice(n))).slice(null!==(t=r)&&void 0!==t?t:0,i+1)}function _(e){let t=0;for(;t",e.EOF="",e.BANG="!",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"}(v||(v={}));class Lexer{constructor(e){const t=new Token(v.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!==v.EOF)do{if(e.next)e=e.next;else{const t=x(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function A(e){return e>=56320&&e<=57343}function D(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return v.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 x(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 u(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function V(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const c=[];for(;o2)return"[Array]";const n=Math.min(10,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>2)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+": "+B(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const Y=function(e,t){return e instanceof t};class Source{constructor(e,n="GraphQL request",r={line:1,column:1}){"string"==typeof e||t(!1,`Body must be a string. Received: ${P(e)}.`),this.body=e,this.name=n,this.locationOffset=r,this.locationOffset.line>0||t(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||t(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function J(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t){const n=function(e){return Y(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t}parseName(){const e=this.expectToken(v.NAME);return this.node(e,{kind:m.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:m.DOCUMENT,definitions:this.many(v.SOF,this.parseDefinition,v.EOF)})}parseDefinition(){if(this.peek(v.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===v.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 u(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(v.BRACE_L))return this.node(e,{kind:m.OPERATION_DEFINITION,operation:f.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(v.NAME)&&(n=this.parseName()),this.node(e,{kind:m.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(v.NAME);switch(e.value){case"query":return f.QUERY;case"mutation":return f.MUTATION;case"subscription":return f.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(v.PAREN_L,this.parseVariableDefinition,v.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:m.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(v.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(v.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(v.DOLLAR),this.node(e,{kind:m.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:m.SELECTION_SET,selections:this.many(v.BRACE_L,this.parseSelection,v.BRACE_R)})}parseSelection(){return this.peek(v.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(v.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:m.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(v.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(v.PAREN_L,t,v.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(v.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(v.NAME)?this.node(e,{kind:m.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:m.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){var e;const t=this._lexer.token;return this.expectKeyword("fragment"),!0===(null===(e=this._options)||void 0===e?void 0:e.allowLegacyFragmentVariables)?this.node(t,{kind:m.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:m.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 v.BRACKET_L:return this.parseList(e);case v.BRACE_L:return this.parseObject(e);case v.INT:return this._lexer.advance(),this.node(t,{kind:m.INT,value:t.value});case v.FLOAT:return this._lexer.advance(),this.node(t,{kind:m.FLOAT,value:t.value});case v.STRING:case v.BLOCK_STRING:return this.parseStringLiteral();case v.NAME:switch(this._lexer.advance(),t.value){case"true":return this.node(t,{kind:m.BOOLEAN,value:!0});case"false":return this.node(t,{kind:m.BOOLEAN,value:!1});case"null":return this.node(t,{kind:m.NULL});default:return this.node(t,{kind:m.ENUM,value:t.value})}case v.DOLLAR:if(e){if(this.expectToken(v.DOLLAR),this._lexer.token.kind===v.NAME){const e=this._lexer.token.value;throw u(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._lexer.advance(),this.node(e,{kind:m.STRING,value:e.value,block:e.kind===v.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:m.LIST,values:this.any(v.BRACKET_L,(()=>this.parseValueLiteral(e)),v.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:m.OBJECT,fields:this.any(v.BRACE_L,(()=>this.parseObjectField(e)),v.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(v.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(v.AT),this.node(t,{kind:m.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(v.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(v.BRACKET_R),t=this.node(e,{kind:m.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(v.BANG)?this.node(e,{kind:m.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:m.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(v.STRING)||this.peek(v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);return this.node(e,{kind:m.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(v.COLON);const n=this.parseNamedType();return this.node(e,{kind:m.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:m.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:m.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(v.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseFieldDefinition,v.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(v.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:m.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(v.PAREN_L,this.parseInputValueDef,v.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(v.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(v.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:m.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:m.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:m.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(v.EQUALS)?this.delimitedMany(v.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:m.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(v.BRACE_L,this.parseEnumValueDefinition,v.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:m.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 u(this._lexer.source,this._lexer.token.start,`${q(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:m.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseInputValueDef,v.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:m.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:m.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:m.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:m.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:m.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:m.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:m.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(v.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:m.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(v.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.prototype.hasOwnProperty.call(h,t.value))return t;throw this.unexpected(e)}node(e,t){var n;return!0!==(null===(n=this._options)||void 0===n?void 0:n.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._lexer.advance(),t;throw u(this._lexer.source,t.start,`Expected ${X(e)}, found ${q(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this._lexer.advance(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==v.NAME||t.value!==e)throw u(this._lexer.source,t.start,`Expected "${e}", found ${q(t)}.`);this._lexer.advance()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===v.NAME&&t.value===e&&(this._lexer.advance(),!0)}unexpected(e){const t=null!=e?e:this._lexer.token;return u(this._lexer.source,t.start,`Unexpected ${q(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}}function q(e){const t=e.value;return X(e.kind)+(null!=t?` "${t}"`:"")}function X(e){return function(e){return e===v.BANG||e===v.DOLLAR||e===v.AMP||e===v.PAREN_L||e===v.PAREN_R||e===v.SPREAD||e===v.COLON||e===v.EQUALS||e===v.AT||e===v.BRACKET_L||e===v.BRACKET_R||e===v.BRACE_L||e===v.PIPE||e===v.BRACE_R}(e)?`"${e}"`:e}function K(e,t){const[n,r]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const o=r.map((e=>`"${e}"`));switch(o.length){case 0:return"";case 1:return i+o[0]+"?";case 2:return i+o[0]+" or "+o[1]+"?"}const s=o.slice(0,5),a=s.pop();return i+s.join(", ")+", or "+a+"?"}function z(e){return e}function H(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}function W(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function Z(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function ee(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-te,o=t.charCodeAt(r)}while(ne(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const te=48;function ne(e){return!isNaN(e)&&te<=e&&e<=57}function re(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:ee(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=ie(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=ie(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 ie(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>me(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=ye("(",me(e.variableDefinitions,", "),")"),n=me([e.operation,me([e.name,t]),me(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+ye(" = ",n)+ye(" ",me(r," "))},SelectionSet:{leave:({selections:e})=>ve(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){const o=ye("",e,": ")+t;let s=o+ye("(",me(n,", "),")");return s.length>80&&(s=o+ye("(\n",Ee(me(n,"\n")),"\n)")),me([s,me(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+ye(" ",me(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>me(["...",ye("on ",e),me(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${ye("(",me(n,", "),")")} on ${t} ${ye("",me(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?function(e,t){const n=e.replace(/"""/g,'\\"""'),r=n.split(/\r\n|[\n\r]/g),i=1===r.length,o=r.length>1&&r.slice(1).every((e=>0===e.length||y(e.charCodeAt(0)))),s=n.endsWith('\\"""'),a=e.endsWith('"')&&!s,c=e.endsWith("\\"),u=a||c,l=!(null!=t&&t.minimize)&&(!i||e.length>70||u||o||s);let p="";const d=i&&y(e.charCodeAt(0));return(l&&!d||o)&&(p+="\n"),p+=n,(l||u)&&(p+="\n"),'"""'+p+'"""'}(e):`"${e.replace(se,ae)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+me(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+me(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+ye("(",me(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>ye("",e,"\n")+me(["schema",me(t," "),ve(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me(["scalar",t,me(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["type",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>ye("",e,"\n")+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+": "+r+ye(" ",me(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>ye("",e,"\n")+me([t+": "+n,ye("= ",r),me(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["interface",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>ye("",e,"\n")+me(["union",t,me(n," "),ye("= ",me(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>ye("",e,"\n")+me(["enum",t,me(n," "),ve(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me([t,me(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>ye("",e,"\n")+me(["input",t,me(n," "),ve(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>ye("",e,"\n")+"directive @"+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+(r?" repeatable":"")+" on "+me(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>me(["extend schema",me(e," "),ve(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>me(["extend scalar",e,me(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend type",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend interface",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>me(["extend union",e,me(t," "),ye("= ",me(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>me(["extend enum",e,me(t," "),ve(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>me(["extend input",e,me(t," "),ve(n)]," ")}};function me(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function ve(e){return ye("{\n",Ee(me(e,"\n")),"\n}")}function ye(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Ee(e){return ye(" ",e.replace(/\n/g,"\n "))}function Te(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}function Ne(e,t){switch(e.kind){case m.NULL:return null;case m.INT:return parseInt(e.value,10);case m.FLOAT:return parseFloat(e.value);case m.STRING:case m.ENUM:case m.BOOLEAN:return e.value;case m.LIST:return e.values.map((e=>Ne(e,t)));case m.OBJECT:return W(e.fields,(e=>e.name.value),(e=>Ne(e.value,t)));case m.VARIABLE:return null==t?void 0:t[e.name.value]}}function Ie(e){if(null!=e||t(!1,"Must provide name."),"string"==typeof e||t(!1,"Expected name to be a string."),0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;ts(Ne(e,t)),this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(o=e.extensionASTNodes)&&void 0!==o?o:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||t(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${P(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||t(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||t(!1,`${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){var n;this.name=Ie(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=()=>Ye(e),this._interfaces=()=>Be(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||t(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${P(e.isTypeOf)}.`)}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:Xe(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Be(e){var n;const r=Me(null!==(n=e.interfaces)&&void 0!==n?n:[]);return Array.isArray(r)||t(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),r}function Ye(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>{var i;qe(n)||t(!1,`${e.name}.${r} field config must be an object.`),null==n.resolve||"function"==typeof n.resolve||t(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${P(n.resolve)}.`);const o=null!==(i=n.args)&&void 0!==i?i:{};return qe(o)||t(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:Ie(r),description:n.description,type:n.type,args:Je(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function Je(e){return Object.entries(e).map((([e,t])=>({name:Ie(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:oe(t.extensions),astNode:t.astNode})))}function qe(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:Ke(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function Ke(e){return W(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(e){return xe(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=Ye.bind(void 0,e),this._interfaces=Be.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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:Xe(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){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._types=He.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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 He(e){const n=Me(e.types);return Array.isArray(n)||t(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),n}class GraphQLEnumType{constructor(e){var n,r,i;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._values=(r=this.name,qe(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(qe(n)||t(!1,`${r}.${e} must refer to an object with a "value" key representing an internal value but got: ${P(n)}.`),{name:ge(e),description:n.description,value:void 0!==n.value?n.value:e,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=H(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${P(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=P(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+We(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+We(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.ENUM){const t=fe(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+We(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=fe(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+We(this,t),e)}return n.value}toConfig(){const e=W(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 We(e,t){return K("the enum value",re(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){var t;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ze.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=Z(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}}toString(){return this.name}toJSON(){return this.toString()}}function Ze(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>(!("resolve"in n)||t(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:Ie(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))}function et(e){return xe(e.type)&&void 0===e.defaultValue}function tt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&tt(e.ofType,t.ofType)}function nt(e,t,n){return t===n||(xe(n)?!!xe(t)&&nt(e,t.ofType,n.ofType):xe(t)?nt(e,t.ofType,n):we(n)?!!we(t)&&nt(e,t.ofType,n.ofType):!we(t)&&(Ge(n)&&(Se(t)||Oe(t))&&e.isSubType(n,t)))}function rt(e,t,n){return t===n||(Ge(t)?Ge(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Ge(n)&&e.isSubType(n,t))}const it=2147483647,ot=-2147483648,st=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=ft(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: ${P(t)}`);if(n>it||nit||eit||te.name===t))}function ft(e){if(n(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!n(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}function ht(e){return Y(e,GraphQLDirective)}class GraphQLDirective{constructor(e){var r,i;this.name=Ie(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(r=e.isRepeatable)&&void 0!==r&&r,this.extensions=oe(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||t(!1,`@${e.name} locations must be an Array.`);const o=null!==(i=e.args)&&void 0!==i?i:{};n(o)&&!Array.isArray(o)||t(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=Je(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:Ke(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const mt=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Included when true."}}}),vt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Skipped when true."}}}),yt="No longer supported",Et=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[h.FIELD_DEFINITION,h.ARGUMENT_DEFINITION,h.INPUT_FIELD_DEFINITION,h.ENUM_VALUE],args:{reason:{type:ct,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:yt}}}),Tt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ct),description:"The URL that specifies the behavior of this scalar."}}}),Nt=Object.freeze([mt,vt,Et,Tt]);function It(e,t){if(xe(t)){const n=It(e,t.ofType);return(null==n?void 0:n.kind)===m.NULL?null:n}if(null===e)return{kind:m.NULL};if(void 0===e)return null;if(we(t)){const n=t.ofType;if("object"==typeof(i=e)&&"function"==typeof(null==i?void 0:i[Symbol.iterator])){const t=[];for(const r of e){const e=It(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return It(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=It(e[n.name],n.type);t&&r.push({kind:m.OBJECT_FIELD,name:{kind:m.NAME,value:n.name},value:t})}return{kind:m.OBJECT,fields:r}}if(Re(t)){const n=t.serialize(e);if(null==n)return null;if("boolean"==typeof n)return{kind:m.BOOLEAN,value:n};if("number"==typeof n&&Number.isFinite(n)){const e=String(n);return gt.test(e)?{kind:m.INT,value:e}:{kind:m.FLOAT,value:e}}if("string"==typeof n)return Ae(t)?{kind:m.ENUM,value:n}:t===lt&>.test(n)?{kind:m.INT,value:n}:{kind:m.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${P(n)}.`)}r(!1,"Unexpected input type: "+P(t))}const gt=/^-?(?:0|[1-9][0-9]*)$/,_t=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:ct,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(St))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(St),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:St,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:St,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(bt))),resolve:e=>e.getDirectives()}})}),bt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(ut),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ot))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ot=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:h.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:h.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:h.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:h.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:h.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:h.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:h.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:h.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:h.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:h.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:h.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:h.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:h.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:h.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:h.UNION,description:"Location adjacent to a union definition."},ENUM:{value:h.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:h.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:h.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:h.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),St=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(xt),resolve:e=>be(e)?wt.SCALAR:Oe(e)?wt.OBJECT:Se(e)?wt.INTERFACE:Le(e)?wt.UNION:Ae(e)?wt.ENUM:De(e)?wt.INPUT_OBJECT:we(e)?wt.LIST:xe(e)?wt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ct,resolve:e=>"name"in e?e.name:void 0},description:{type:ct,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ct,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(Lt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Oe(e)||Se(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e){if(Oe(e)||Se(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if(Ge(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Dt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ae(e)){const n=e.getValues();return t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(De(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:St,resolve:e=>"ofType"in e?e.ofType:void 0}})}),Lt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),At=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ct,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=It(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),Dt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})});let wt;!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"}(wt||(wt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:wt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:wt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:wt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:wt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:wt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:wt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:wt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:wt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),kt={name:"__schema",type:new GraphQLNonNull(_t),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},Ft={name:"__type",type:St,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ct),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},Rt={name:"__typename",type:new GraphQLNonNull(ct),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},Ct=Object.freeze([_t,bt,Ot,St,Lt,At,Dt,xt]);function Gt(e){return Ct.some((({name:t})=>e.name===t))}function $t(e){if(!function(e){return Y(e,GraphQLSchema)}(e))throw new Error(`Expected ${P(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){var r,i;this.__validationErrors=!0===e.assumeValid?[]:void 0,n(e)||t(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||t(!1,`"types" must be Array if provided but got: ${P(e.types)}.`),!e.directives||Array.isArray(e.directives)||t(!1,`"directives" must be Array if provided but got: ${P(e.directives)}.`),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(r=e.extensionASTNodes)&&void 0!==r?r:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(i=e.directives)&&void 0!==i?i:Nt;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Qt(t,o);null!=this._queryType&&Qt(this._queryType,o),null!=this._mutationType&&Qt(this._mutationType,o),null!=this._subscriptionType&&Qt(this._subscriptionType,o);for(const e of this._directives)if(ht(e))for(const t of e.args)Qt(t.type,o);Qt(_t,o),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of o){if(null==e)continue;const n=e.name;if(n||t(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[n])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${n}".`);if(this._typeMap[n]=e,Se(e)){for(const t of e.getInterfaces())if(Se(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(Oe(e))for(const t of e.getInterfaces())if(Se(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 f.QUERY:return this.getQueryType();case f.MUTATION:return this.getMutationType();case f.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return Le(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),Le(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}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=Ve(e);if(!t.has(n))if(t.add(n),Le(n))for(const e of n.getTypes())Qt(e,t);else if(Oe(n)||Se(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(De(n))for(const e of Object.values(n.getFields()))Qt(e.type,t);return t}function jt(e){if($t(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!Oe(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Ut(t,f.QUERY))&&void 0!==r?r:n.astNode)}}else e.reportError("Query root type must be provided.",t.astNode);const i=t.getMutationType();var o;i&&!Oe(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Ut(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!Oe(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Ut(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(ht(n)){Vt(e,n);for(const r of n.args){var t;if(Vt(e,r),ke(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),ze(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Ht(r.astNode),null===(t=r.astNode)||void 0===t?void 0:t.type])}}else e.reportError(`Expected directive but got: ${P(n)}.`,null==n?void 0:n.astNode)}(t),function(e){const t=function(e){const t=Object.create(null),n=[],r=Object.create(null);return i;function i(o){if(t[o.name])return;t[o.name]=!0,r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if(xe(t.type)&&De(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))Ue(r)?(Gt(r)||Vt(e,r),Oe(r)||Se(r)?(Mt(e,r),Pt(e,r)):Le(r)?Jt(e,r):Ae(r)?qt(e,r):De(r)&&(Xt(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${P(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,n))}getErrors(){return this._errors}}function Ut(e,t){var n;return null===(n=[e.astNode,...e.extensionASTNodes].flatMap((e=>{var t;return null!==(t=null==e?void 0:e.operationTypes)&&void 0!==t?t:[]})).find((e=>e.operation===t)))||void 0===n?void 0:n.type}function Vt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Mt(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 s of n){var r;if(Vt(e,s),!Fe(s.type))e.reportError(`The type of ${t.name}.${s.name} must be Output Type but got: ${P(s.type)}.`,null===(r=s.astNode)||void 0===r?void 0:r.type);for(const n of s.args){const r=n.name;var i,o;if(Vt(e,n),!ke(n.type))e.reportError(`The type of ${t.name}.${s.name}(${r}:) must be Input Type but got: ${P(n.type)}.`,null===(i=n.astNode)||void 0===i?void 0:i.type);if(ze(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Ht(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Pt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Se(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Kt(t,r)):(n[r.name]=!0,Yt(e,t,r),Bt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Kt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,Kt(t,r))}function Bt(e,t,n){const r=t.getFields();for(const c of Object.values(n.getFields())){const u=c.name,l=r[u];if(l){var i,o;if(!nt(e.schema,l.type,c.type))e.reportError(`Interface field ${n.name}.${u} expects type ${P(c.type)} but ${t.name}.${u} is type ${P(l.type)}.`,[null===(i=c.astNode)||void 0===i?void 0:i.type,null===(o=l.astNode)||void 0===o?void 0:o.type]);for(const r of c.args){const i=r.name,o=l.args.find((e=>e.name===i));var s,a;if(o){if(!tt(r.type,o.type))e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expects type ${P(r.type)} but ${t.name}.${u}(${i}:) is type ${P(o.type)}.`,[null===(s=r.astNode)||void 0===s?void 0:s.type,null===(a=o.astNode)||void 0===a?void 0:a.type])}else e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expected but ${t.name}.${u} does not provide it.`,[r.astNode,l.astNode])}for(const r of l.args){const i=r.name;!c.args.find((e=>e.name===i))&&ze(r)&&e.reportError(`Object field ${t.name}.${u} includes required argument ${i} that is missing from the Interface field ${n.name}.${u}.`,[r.astNode,c.astNode])}}else e.reportError(`Interface field ${n.name}.${u} expected but ${t.name} does not provide it.`,[c.astNode,t.astNode,...t.extensionASTNodes])}}function Yt(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}.`,[...Kt(n,i),...Kt(t,n)])}function Jt(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=Object.create(null);for(const i of n)r[i.name]?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,zt(t,i.name)):(r[i.name]=!0,Oe(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,zt(t,String(i))))}function qt(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)Vt(e,t)}function Xt(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 o of n){var r,i;if(Vt(e,o),!ke(o.type))e.reportError(`The type of ${t.name}.${o.name} must be Input Type but got: ${P(o.type)}.`,null===(r=o.astNode)||void 0===r?void 0:r.type);if(et(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Ht(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function Kt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.interfaces)&&void 0!==t?t:[]})).filter((e=>e.name.value===t.name))}function zt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.types)&&void 0!==t?t:[]})).filter((e=>e.name.value===t))}function Ht(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Et.name))}function Wt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLNonNull(n)}case m.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=null!=n?n:Zt,t&&(ke(t)&&this._inputTypeStack.push(t),Ce(t)&&this._parentTypeStack.push(t),Fe(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case m.SELECTION_SET:{const e=Ve(this.getType());this._parentTypeStack.push(Ce(e)?e:void 0);break}case m.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(Fe(i)?i:void 0);break}case m.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case m.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(Oe(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Wt(t,n):Ve(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Wt(t,e.type);this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ARGUMENT:{var n;let t,r;const i=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();i&&(t=i.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(ke(r)?r:void 0);break}case m.LIST:{const e=je(this.getInputType()),t=we(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(ke(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Ve(this.getInputType());let n,r;De(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ENUM:{const t=Ve(this.getInputType());let n;Ae(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case m.SELECTION_SET:this._parentTypeStack.pop();break;case m.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case m.DIRECTIVE:this._directive=null;break;case m.OPERATION_DEFINITION:case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:this._typeStack.pop();break;case m.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case m.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.LIST:case m.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.ENUM:this._enumValue=null}}}function Zt(e,t,n){const r=n.name.value;return r===kt.name&&e.getQueryType()===t?kt:r===Ft.name&&e.getQueryType()===t?Ft:r===Rt.name&&Ce(t)?Rt:Oe(t)||Se(t)?t.getFields()[r]:void 0}function en(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=de(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),d(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=de(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function tn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function nn(e){return e.kind===m.SCALAR_TYPE_DEFINITION||e.kind===m.OBJECT_TYPE_DEFINITION||e.kind===m.INTERFACE_TYPE_DEFINITION||e.kind===m.UNION_TYPE_DEFINITION||e.kind===m.ENUM_TYPE_DEFINITION||e.kind===m.INPUT_OBJECT_TYPE_DEFINITION}function rn(e){return e.kind===m.SCALAR_TYPE_EXTENSION||e.kind===m.OBJECT_TYPE_EXTENSION||e.kind===m.INTERFACE_TYPE_EXTENSION||e.kind===m.UNION_TYPE_EXTENSION||e.kind===m.ENUM_TYPE_EXTENSION||e.kind===m.INPUT_OBJECT_TYPE_EXTENSION}function on(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=e.args.map((e=>e.name));const i=e.getDocument().definitions;for(const e of i)if(e.kind===m.DIRECTIVE_DEFINITION){var o;const n=null!==(o=e.arguments)&&void 0!==o?o:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const r=n.name.value,i=t[r];if(n.arguments&&i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=re(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+K(o),t))}}return!1}}}function sn(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():Nt;for(const e of i)t[e.name]=e.locations;const o=e.getDocument().definitions;for(const e of o)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,i,o,s,a){const c=n.name.value,u=t[c];if(!u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,n));const l=function(e){const t=e[e.length-1];switch("kind"in t||r(!1),t.kind){case m.OPERATION_DEFINITION:return function(e){switch(e){case f.QUERY:return h.QUERY;case f.MUTATION:return h.MUTATION;case f.SUBSCRIPTION:return h.SUBSCRIPTION}}(t.operation);case m.FIELD:return h.FIELD;case m.FRAGMENT_SPREAD:return h.FRAGMENT_SPREAD;case m.INLINE_FRAGMENT:return h.INLINE_FRAGMENT;case m.FRAGMENT_DEFINITION:return h.FRAGMENT_DEFINITION;case m.VARIABLE_DEFINITION:return h.VARIABLE_DEFINITION;case m.SCHEMA_DEFINITION:case m.SCHEMA_EXTENSION:return h.SCHEMA;case m.SCALAR_TYPE_DEFINITION:case m.SCALAR_TYPE_EXTENSION:return h.SCALAR;case m.OBJECT_TYPE_DEFINITION:case m.OBJECT_TYPE_EXTENSION:return h.OBJECT;case m.FIELD_DEFINITION:return h.FIELD_DEFINITION;case m.INTERFACE_TYPE_DEFINITION:case m.INTERFACE_TYPE_EXTENSION:return h.INTERFACE;case m.UNION_TYPE_DEFINITION:case m.UNION_TYPE_EXTENSION:return h.UNION;case m.ENUM_TYPE_DEFINITION:case m.ENUM_TYPE_EXTENSION:return h.ENUM;case m.ENUM_VALUE_DEFINITION:return h.ENUM_VALUE;case m.INPUT_OBJECT_TYPE_DEFINITION:case m.INPUT_OBJECT_TYPE_EXTENSION:return h.INPUT_OBJECT;case m.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||r(!1),t.kind===m.INPUT_OBJECT_TYPE_DEFINITION?h.INPUT_FIELD_DEFINITION:h.ARGUMENT_DEFINITION}default:r(!1,"Unexpected kind: "+P(t.kind))}}(a);l&&!u.includes(l)&&e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,n))}}}function an(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(r[t.name.value]=!0);const i=[...Object.keys(n),...Object.keys(r)];return{NamedType(t,o,s,a,c){const u=t.name.value;if(!n[u]&&!r[u]){var l;const n=null!==(l=c[2])&&void 0!==l?l:s,r=null!=n&&("kind"in(p=n)&&(function(e){return e.kind===m.SCHEMA_DEFINITION||nn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||rn(e)}(p)));if(r&&cn.includes(u))return;const o=re(u,r?cn.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+K(o),t))}var p}}}const cn=[...pt,...Ct].map((e=>e.name));function un(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const r=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))r[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==r[n]&&e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,t))}}}}}function ln(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:ln(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(ln)};case m.INT:case m.FLOAT:case m.STRING:case m.BOOLEAN:case m.NULL:case m.ENUM:case m.VARIABLE:return e}var t}function pn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+pn(t))).join(" and "):e}function dn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=Tn(e,n,a);if(o!==c){hn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),dn(e,t,n,r,i,o,a))}}function fn(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]=Tn(e,n,a),[p,d]=Tn(e,n,c);hn(e,t,n,r,i,u,p);for(const s of d)fn(e,t,n,r,i,o,s);for(const o of l)fn(e,t,n,r,i,o,s)}function hn(e,t,n,r,i,o,s){for(const[a,c]of Object.entries(o)){const o=s[a];if(o)for(const s of c)for(const c of o){const o=mn(e,n,r,i,a,s,c);o&&t.push(o)}}}function mn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&Oe(a)&&Oe(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(vn(c)!==vn(p))return[[i,"they have differing arguments"],[c],[p]]}const h=null==u?void 0:u.type,m=null==d?void 0:d.type;if(h&&m&&yn(h,m))return[[i,`they return conflicting types "${P(h)}" and "${P(m)}"`],[c],[p]];const v=c.selectionSet,y=p.selectionSet;if(v&&y){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=En(e,t,i,o),[p,d]=En(e,t,s,a);hn(e,c,t,n,r,u,p);for(const i of d)dn(e,c,t,n,r,u,i);for(const i of l)dn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)fn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ve(h),v,Ve(m),y);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 vn(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(ln({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function yn(e,t){return we(e)?!we(t)||yn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||yn(e.ofType,t.ofType):!!xe(t)||!(!Re(e)&&!Re(t))&&e!==t)}function En(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);Nn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function Tn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Wt(e.getSchema(),n.typeCondition);return En(e,t,i,n.selectionSet)}function Nn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(Oe(t)||Se(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;r[i]||(r[i]=[]),r[i].push([t,o,n]);break}case m.FRAGMENT_SPREAD:i[o.name.value]=!0;break;case m.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?Wt(e.getSchema(),n):t;Nn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){var r;const[i,o]=ee.name));const o=e.getDocument().definitions;for(const e of o)if(e.kind===m.DIRECTIVE_DEFINITION){var s;const t=null!==(s=e.arguments)&&void 0!==s?s:[];n[e.name.value]=H(t.filter(_n),(e=>e.name.value))}return{Directive:{leave(t){const r=t.name.value,i=n[r];if(i){var o;const n=null!==(o=t.arguments)&&void 0!==o?o:[],s=new Set(n.map((e=>e.name.value)));for(const[n,o]of Object.entries(i))if(!s.has(n)){const i=_e(o.type)?P(o.type):fe(o.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${n}" of type "${i}" is required, but it was not provided.`,t))}}}}}}function _n(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function bn(e,t,n){if(e){if(e.kind===m.VARIABLE){const r=e.name.value;if(null==n||void 0===n[r])return;const i=n[r];if(null===i&&xe(t))return;return i}if(xe(t)){if(e.kind===m.NULL)return;return bn(e,t.ofType,n)}if(e.kind===m.NULL)return null;if(we(t)){const r=t.ofType;if(e.kind===m.LIST){const t=[];for(const i of e.values)if(On(i,n)){if(xe(r))return;t.push(null)}else{const e=bn(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=bn(e,r,n);if(void 0===i)return;return[i]}if(De(t)){if(e.kind!==m.OBJECT)return;const r=Object.create(null),i=H(e.fields,(e=>e.name.value));for(const e of Object.values(t.getFields())){const t=i[e.name];if(!t||On(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=bn(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Re(t)){let r;try{r=t.parseLiteral(e,n)}catch(e){return}if(void 0===r)return;return r}r(!1,"Unexpected input type: "+P(t))}}function On(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function Sn(e,t,n){var r;const i=null===(r=t.directives)||void 0===r?void 0:r.find((t=>t.name.value===e.name));if(i)return function(e,t,n){var r;const i={},o=H(null!==(r=t.arguments)&&void 0!==r?r:[],(e=>e.name.value));for(const r of e.args){const e=r.name,c=r.type,u=o[e];if(!u){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was not provided.`,t);continue}const l=u.value;let p=l.kind===m.NULL;if(l.kind===m.VARIABLE){const t=l.name.value;if(null==n||(s=n,a=t,!Object.prototype.hasOwnProperty.call(s,a))){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was provided the variable "$${t}" which was not provided a runtime value.`,l);continue}p=null==n[t]}if(p&&xe(c))throw new GraphQLError(`Argument "${e}" of non-null type "${P(c)}" must not be null.`,l);const d=bn(l,c,n);if(void 0===d)throw new GraphQLError(`Argument "${e}" has invalid value ${fe(l)}.`,l);i[e]=d}var s,a;return i}(e,i,n)}function Ln(e,t,n,r,i){const o=new Map;return An(e,t,n,r,i,o,new Set),o}function An(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!Dn(n,c))continue;const e=(a=c).alias?a.alias.value:a.name.value,t=o.get(e);void 0!==t?t.push(c):o.set(e,[c]);break}case m.INLINE_FRAGMENT:if(!Dn(n,c)||!wn(e,c,r))continue;An(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!Dn(n,c))continue;s.add(i);const a=t[i];if(!a||!wn(e,a,r))continue;An(e,t,n,r,a.selectionSet,o,s);break}}var a}function Dn(e,t){const n=Sn(vt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=Sn(mt,t,e);return!1!==(null==r?void 0:r.if)}function wn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Wt(e,r);return i===n||!!Ge(i)&&e.isSubType(i,n)}function xn(e,t){const n=new Map;for(const r of e){const e=t(r),i=n.get(e);void 0===i?n.set(e,[r]):i.push(r)}return n}function kn(e){return{Field:t,Directive:t};function t(t){var n;const r=xn(null!==(n=t.arguments)&&void 0!==n?n:[],(e=>e.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}function Fn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=!e.isRepeatable;const i=e.getDocument().definitions;for(const e of i)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const o=Object.create(null),s=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION)r=o;else if(nn(n)||rn(n)){const e=n.name.value;r=s[e],void 0===r&&(s[e]=r=Object.create(null))}else r=Object.create(null);for(const i of n.directives){const n=i.name.value;t[n]&&(r[n]?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,[r[n],i])):r[n]=i)}}}}function Rn(e,t){return!!(Oe(e)||Se(e)||De(e))&&null!=e.getFields()[t]}function Cn(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||r(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new GraphQLError(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}function Gn(e,t){const n=e.getInputType();if(!n)return;const r=Ve(n);if(Re(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}catch(r){const i=P(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${fe(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}function $n(e,t,n,r,i){if(xe(r)&&!xe(t)){const o=void 0!==i;if(!(null!=n&&n.kind!==m.NULL)&&!o)return!1;return nt(e,t,r.ofType)}return nt(e,t,r)}const Qn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!tn(n)){const t=n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,n))}return!1}}},function(e){const t=Object.create(null);return{OperationDefinition(n){const r=n.name;return r&&(t[r.value]?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,[t[r.value],r])):t[r.value]=r),!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===m.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",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===m.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const c=Ln(n,a,o,r,t.selectionSet);if(c.size>1){const t=[...c.values()].slice(1).flat();e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of c.values()){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.",t))}}}}}},an,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Wt(e.getSchema(),n);if(t&&!Ce(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Wt(e.getSchema(),t.typeCondition);if(n&&!Ce(n)){const n=fe(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,t.typeCondition))}}}},function(e){return{VariableDefinition(t){const n=Wt(e.getSchema(),t.type);if(void 0!==n&&!ke(n)){const n=t.variable.name.value,r=fe(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,t.type))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Re(Ve(n))){if(r){const i=t.name.value,o=P(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,r))}}else if(!r){const r=t.name.value,i=P(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,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=K("to use an inline fragment on",function(e,t,n){if(!Ge(t))return[];const r=new Set,i=Object.create(null);for(const s of e.getPossibleTypes(t))if(s.getFields()[n]){r.add(s),i[s.name]=1;for(const e of s.getInterfaces()){var o;e.getFields()[n]&&(r.add(e),i[e.name]=(null!==(o=i[e.name])&&void 0!==o?o:0)+1)}}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Se(t)&&e.isSubType(t,n)?-1:Se(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=K(function(e,t){if(Oe(e)||Se(e)){return re(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,t))}}}}},function(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value;return t[r]?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,[t[r],n.name])):t[r]=n.name,!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,t.name))}}},un,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ce(n)&&Ce(r)&&!rt(e.getSchema(),n,r)){const i=P(r),o=P(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,t))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=Wt(e.getSchema(),n.typeCondition);if(Ce(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!rt(e.getSchema(),r,i)){const o=P(i),s=P(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,t))}}}},function(e){const t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t[o.name.value])return;const s=o.name.value;t[s]=!0;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}.`:"."),t))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){var n;const r=xn(null!==(n=t.variableDefinitions)&&void 0!==n?n:[],(e=>e.variable.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:i}of r){const r=i.name.value;!0!==t[r]&&e.reportError(new GraphQLError(n.name?`Variable "$${r}" is not defined by operation "${n.name.value}".`:`Variable "$${r}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}},function(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){const r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(const{node:e}of i)r[e.name.value]=!0;for(const i of t){const t=i.variable.name.value;!0!==r[t]&&e.reportError(new GraphQLError(n.name?`Variable "$${t}" is never used in operation "${n.name.value}".`:`Variable "$${t}" is never used.`,i))}}},VariableDefinition(e){t.push(e)}}},sn,Fn,function(e){return{...on(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=re(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+K(o),t))}}}},kn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Gn(e,t),!1},ObjectValue(t){const n=Ve(e.getInputType());if(!De(n))return Gn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&et(i)){const r=P(i.type);e.reportError(new GraphQLError(`Field "${n.name}.${i.name}" of required type "${r}" was not provided.`,t))}}},ObjectField(t){const n=Ve(e.getParentInputType());if(!e.getInputType()&&De(n)){const r=re(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+K(r),t))}},NullValue(t){const n=e.getInputType();xe(n)&&e.reportError(new GraphQLError(`Expected value of type "${P(n)}", found ${fe(t)}.`,t))},EnumValue:t=>Gn(e,t),IntValue:t=>Gn(e,t),FloatValue:t=>Gn(e,t),StringValue:t=>Gn(e,t),BooleanValue:t=>Gn(e,t)}},function(e){return{...gn(e),Field:{leave(t){var n;const r=e.getFieldDef();if(!r)return!1;const i=new Set(null===(n=t.arguments)||void 0===n?void 0:n.map((e=>e.name.value)));for(const n of r.args)if(!i.has(n.name)&&ze(n)){const i=P(n.type);e.reportError(new GraphQLError(`Field "${r.name}" argument "${n.name}" of type "${i}" is required, but it was not provided.`,t))}}}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t[r];if(s&&i){const t=e.getSchema(),a=Wt(t,s.type);if(a&&!$n(t,a,s.defaultValue,i,o)){const t=P(a),o=P(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,[s,n]))}}}}},VariableDefinition(e){t[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]=En(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of Object.entries(i))if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",t)),++s)}}},function(e){const t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const o=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of o){const i=t.operation,o=n[i];r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,[o,t])):n[i]=t}return!1}},function(e){const t=Object.create(null),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(null==n||!n.getType(i))return t[i]?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,r.name))}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.values)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value,i=n[o];Ae(i)&&i.getValue(r)?e.reportError(new GraphQLError(`Enum value "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Enum value "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.fields)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value;Rn(n[o],r)?e.reportError(new GraphQLError(`Field "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Field "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,i=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of i){var o;n(`${r}.${e.name.value}`,null!==(o=e.arguments)&&void 0!==o?o:[])}return!1}function n(t,n){const r=xn(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.`,i.map((e=>e.name))));return!1}},function(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,r.name))}}},an,sn,Fn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(n[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=n[o],a=null==t?void 0:t.getType(o);let c;if(s?c=In[s.kind]:a&&(c=function(e){if(be(e))return m.SCALAR_TYPE_EXTENSION;if(Oe(e))return m.OBJECT_TYPE_EXTENSION;if(Se(e))return m.INTERFACE_TYPE_EXTENSION;if(Le(e))return m.UNION_TYPE_EXTENSION;if(Ae(e))return m.ENUM_TYPE_EXTENSION;if(De(e))return m.INPUT_OBJECT_TYPE_EXTENSION;r(!1,"Unexpected type: "+P(e))}(a)),c){if(c!==i.kind){const t=function(e){switch(e){case m.SCALAR_TYPE_EXTENSION:return"scalar";case m.OBJECT_TYPE_EXTENSION:return"object";case m.INTERFACE_TYPE_EXTENSION:return"interface";case m.UNION_TYPE_EXTENSION:return"union";case m.ENUM_TYPE_EXTENSION:return"enum";case m.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:r(!1,"Unexpected kind: "+P(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,s?[s,i]:i))}}else{const r=re(o,Object.keys({...n,...null==t?void 0:t.getTypeMap()}));e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+K(r),i.name))}}},on,kn,Cn,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===m.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===m.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=Object.create(null),r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!0!==n[i]){n[i]=!0;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);le(e,en(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 Un(e,n,r=Qn,i,o=new TypeInfo(e)){var s;const a=null!==(s=null==i?void 0:i.maxErrors)&&void 0!==s?s:100;n||t(!1,"Must provide document."),function(e){const t=jt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const c=Object.freeze({}),u=[],l=new ValidationContext(e,n,o,(e=>{if(u.length>=a)throw u.push(new GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;u.push(e)})),p=pe(r.map((e=>e(l))));try{le(n,en(o,p))}catch(e){if(e!==c)throw e}return u}function Vn(e,t,n=jn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Mn(e,r){n(e)&&n(e.__schema)||t(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${P(e)}.`);const i=e.__schema,o=W(i.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case wt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case wt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case wt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case wt.UNION:return function(e){if(!e.possibleTypes){const t=P(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(d)})}(e);case wt.ENUM:return function(e){if(!e.enumValues){const t=P(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:W(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case wt.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=P(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>E(e.inputFields)})}(e)}var t;var n;var r;const i=P(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}.`)}(e)));for(const e of[...pt,...Ct])o[e.name]&&(o[e.name]=e);const s=i.queryType?d(i.queryType):null,a=i.mutationType?d(i.mutationType):null,c=i.subscriptionType?d(i.subscriptionType):null,u=i.directives?i.directives.map((function(e){if(!e.args){const t=P(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=P(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:E(e.args)})})):[];return new GraphQLSchema({description:i.description,query:s,mutation:a,subscription:c,types:Object.values(o),directives:u,assumeValid:null==r?void 0:r.assumeValid});function l(e){if(e.kind===wt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===wt.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=l(t);return new GraphQLNonNull(function(e){if(!Qe(e))throw new Error(`Expected ${P(e)} to be a GraphQL nullable type.`);return e}(n))}return p(e)}function p(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${P(e)}.`);const n=o[t];if(!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 d(e){return function(e){if(!Oe(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Se(e))throw new Error(`Expected ${P(e)} to be a GraphQL Interface type.`);return e}(p(e))}function h(e){if(null===e.interfaces&&e.kind===wt.INTERFACE)return[];if(!e.interfaces){const t=P(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(f)}function m(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${P(e)}.`);return W(e.fields,(e=>e.name),y)}function y(e){const t=l(e.type);if(!Fe(t)){const e=P(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=P(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:E(e.args)}}function E(e){return W(e,(e=>e.name),T)}function T(e){const t=l(e.type);if(!ke(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?bn(function(e,t){const n=new Parser(e,t);n.expectToken(v.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(v.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function Pn(e,t,n){var i,o,s,a;const c=[],u=Object.create(null),l=[];let p;const d=[];for(const e of t.definitions)if(e.kind===m.SCHEMA_DEFINITION)p=e;else if(e.kind===m.SCHEMA_EXTENSION)d.push(e);else if(nn(e))c.push(e);else if(rn(e)){const t=e.name.value,n=u[t];u[t]=n?n.concat([e]):[e]}else e.kind===m.DIRECTIVE_DEFINITION&&l.push(e);if(0===Object.keys(u).length&&0===c.length&&0===l.length&&0===d.length&&null==p)return e;const f=Object.create(null);for(const t of e.types)f[t.name]=T(t);for(const e of c){var h;const t=e.name.value;f[t]=null!==(h=Bn[t])&&void 0!==h?h:x(e)}const v={query:e.query&&E(e.query),mutation:e.mutation&&E(e.mutation),subscription:e.subscription&&E(e.subscription),...p&&g([p]),...g(d)};return{description:null===(i=p)||void 0===i||null===(o=i.description)||void 0===o?void 0:o.value,...v,types:Object.values(f),directives:[...e.directives.map((function(e){const t=e.toConfig();return new GraphQLDirective({...t,args:Z(t.args,I)})})),...l.map((function(e){var t;return new GraphQLDirective({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:S(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(s=p)&&void 0!==s?s:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(d),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a};function y(e){return we(e)?new GraphQLList(y(e.ofType)):xe(e)?new GraphQLNonNull(y(e.ofType)):E(e)}function E(e){return f[e.name]}function T(e){return Gt(e)||dt(e)?e:be(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];let i=n.specifiedByURL;for(const e of r){var o;i=null!==(o=Jn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Oe(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLObjectType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Se(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Le(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLUnionType({...n,types:()=>[...e.getTypes().map(E),...w(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Ae(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[e.name])&&void 0!==t?t:[];return new GraphQLEnumType({...n,values:{...n.values,...A(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):De(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInputObjectType({...n,fields:()=>({...Z(n.fields,(e=>({...e,type:y(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):void r(!1,"Unexpected type: "+P(e))}function N(e){return{...e,type:y(e.type),args:e.args&&Z(e.args,I)}}function I(e){return{...e,type:y(e.type)}}function g(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=_(n.type)}return t}function _(e){var t;const n=e.name.value,r=null!==(t=Bn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function b(e){return e.kind===m.LIST_TYPE?new GraphQLList(b(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(b(e.type)):_(e)}function O(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:b(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:S(n.arguments),deprecationReason:Yn(n),astNode:n}}}return t}function S(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=b(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:bn(e.defaultValue,t),deprecationReason:Yn(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=b(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:bn(n.defaultValue,e),deprecationReason:Yn(n),astNode:n}}}return t}function A(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:Yn(n),astNode:n}}}return t}function D(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function w(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function x(e){var t;const n=e.name.value,r=null!==(t=u[n])&&void 0!==t?t:[];switch(e.kind){case m.OBJECT_TYPE_DEFINITION:{var i;const t=[e,...r];return new GraphQLObjectType({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.INTERFACE_TYPE_DEFINITION:{var o;const t=[e,...r];return new GraphQLInterfaceType({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.ENUM_TYPE_DEFINITION:{var s;const t=[e,...r];return new GraphQLEnumType({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,values:A(t),astNode:e,extensionASTNodes:r})}case m.UNION_TYPE_DEFINITION:{var a;const t=[e,...r];return new GraphQLUnionType({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,types:()=>w(t),astNode:e,extensionASTNodes:r})}case m.SCALAR_TYPE_DEFINITION:var c;return new GraphQLScalarType({name:n,description:null===(c=e.description)||void 0===c?void 0:c.value,specifiedByURL:Jn(e),astNode:e,extensionASTNodes:r});case m.INPUT_OBJECT_TYPE_DEFINITION:{var l;const t=[e,...r];return new GraphQLInputObjectType({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const Bn=H([...pt,...Ct],(e=>e.name));function Yn(e){const t=Sn(Et,e);return null==t?void 0:t.reason}function Jn(e){const t=Sn(Tt,e);return null==t?void 0:t.url}function qn(e,n){null!=e&&e.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&function(e){const t=Vn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Pn({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,n);if(null==r.astNode)for(const e of r.types)switch(e.name){case"Query":r.query=e;break;case"Mutation":r.mutation=e;break;case"Subscription":r.subscription=e}const i=[...r.directives,...Nt.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Xn(e){return function(e,t,n){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[zn(e),...i.map((e=>function(e){return rr(e)+"directive @"+e.name+er(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(be(e))return function(e){return rr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(Oe(e))return function(e){return rr(e)+`type ${e.name}`+Hn(e)+Wn(e)}(e);if(Se(e))return function(e){return rr(e)+`interface ${e.name}`+Hn(e)+Wn(e)}(e);if(Le(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return rr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>rr(e," ",!t)+" "+e.name+nr(e.deprecationReason)));return rr(e)+`enum ${e.name}`+Zn(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+tr(e)));return rr(e)+`input ${e.name}`+Zn(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!Nt.some((({name:e})=>e===t.name));var t}),Kn)}function Kn(e){return!dt(e)&&!Gt(e)}function zn(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();if(r&&"Subscription"!==r.name)return!1;return!0}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),rr(e)+`schema {\n${t.join("\n")}\n}`}function Hn(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Wn(e){return Zn(Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+e.name+er(e.args," ")+": "+String(e.type)+nr(e.deprecationReason))))}function Zn(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function er(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(tr).join(", ")+")":"(\n"+e.map(((e,n)=>rr(e," "+t,!n)+" "+t+tr(e))).join("\n")+"\n"+t+")"}function tr(e){const t=It(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+nr(e.deprecationReason)}function nr(e){if(null==e)return"";if(e!==yt){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function rr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+fe({kind:m.STRING,value:r,block:b(r)}).replace(/\n/g,"\n"+t)+"\n"}const ir=[un],or=[function(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.",t)),!1)}},function(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.",t))}}},...Qn.filter((e=>!ir.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function sr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function ar(e){return e.startsWith("__")}function cr(e){return null!=e}function ur(e){switch(e.kind){case m.VARIABLE:return{kind:e.kind,value:e.name.value};case m.LIST:return{kind:e.kind,value:e.values.map(ur)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=ur(t.value),e)),{})};default:return e}}function lr(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 pr(e,t){const n=new Map;for(const e of t.definitions)e.kind===m.FRAGMENT_DEFINITION&&n.set(e.name.value,e);const r=[],i=new Map,o=new Set;for(const e of t.definitions)e.kind===m.OPERATION_DEFINITION&&r.push(a(e));for(const[e,t]of n.entries())i.set(e,c(t));return{operations:r,fragments:Array.from(i.values()),referencedTypes:Array.from(o.values())};function s(t){if(o.add(t),Le(t)){const e=t.getTypes();for(t of e)o.add(Ve(t))}De(t)&&function(t){var n;const r=null===(n=t.astNode)||void 0===n?void 0:n.fields;if(r)for(const t of r){s(Ve(Wt(e,t.type)))}}(t)}function a(t){if(!t.name)throw new GraphQLError("Operations should be named",t);const n=lr(t),r=t.name.value,i=t.operation,a=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?ur(t.defaultValue):void 0,i=Wt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,t);return s(Ve(i)),{name:n,type:i,defaultValue:r}})),c=fe(t),l=e.getRootType(i);return o.add(Ve(l)),{filePath:n,name:r,operationType:i,rootType:l,variables:a,source:c,selectionSet:u(t.selectionSet,l)}}function c(t){const n=t.name.value,r=lr(t),i=fe(t),o=Wt(e,t.typeCondition);return s(Ve(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r,o=new Set){return{parentType:r,selections:t.selections.map((t=>function(t,r,o){var a;switch(t.kind){case m.FIELD:{const n=t.name.value,i=null===(a=t.alias)||void 0===a?void 0:a.value,o=function(e,t,n){return n===kt.name&&e.getQueryType()===t?kt:n===Ft.name&&e.getQueryType()===t?Ft:n===Rt.name&&(Oe(t)||Se(t)||Le(t))?Rt:Oe(t)||Se(t)?t.getFields()[n]:void 0}(e,r,n);if(!o)throw new GraphQLError(`Cannot query field "${n}" on type "${String(r)}"`,t);const c=o.type,l=Ve(c);s(Ve(l));const{description:p,deprecationReason:d}=o,f=t.arguments&&t.arguments.length>0?t.arguments.map((e=>{const t=e.name.value,n=o.args.find((t=>t.name===e.name.value)),r=n&&n.type||void 0;return{name:t,value:ur(e.value),type:r}})):void 0;let h={kind:"Field",name:n,alias:i,arguments:f,type:c,description:!ar(n)&&p?p:void 0,deprecationReason:d||void 0};if(Ce(l)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,t);h.selectionSet=u(e,l)}return h}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Wt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i)}}case m.FRAGMENT_SPREAD:{const e=t.name.value;if(o.has(e))return;o.add(e);const r=function(e){let t=i.get(e);if(t)return t;const r=n.get(e);return r?(n.delete(e),t=c(r),i.set(e,t),t):void 0}(e);if(!r)throw new GraphQLError(`Unknown fragment "${e}".`,t.name);return{kind:"FragmentSpread",fragment:r}}}}(t,r,o))).filter(cr)}}}return m.FIELD,m.NAME,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){return pr(e,t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Mn(t);return sr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Vn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=qn(t,{assumeValidSDL:!0});return sr(n),n},e.mergeDocuments=function(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)},e.parseDocument=function(e){return J(e)},e.printSchemaToSDL=function(e){return Xn(e)},e.validateDocument=function(e,t){return Un(e,t,or)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); +var ApolloCodegenFrontend=function(e){"use strict";function t(e,t){if(!Boolean(e))throw new Error(t)}function n(e){return"object"==typeof e&&null!==e}function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}const i=/\r\n|[\n\r]/g;function o(e,t){let n=0,o=1;for(const s of e.body.matchAll(i)){if("number"==typeof s.index||r(!1),s.index>=t)break;n=s.index+s[0].length,o+=1}return{line:o,column:t+1-n}}function s(e,t){const n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,c=1===t.line?n:0,u=t.column+c,l=`${e.name}:${s}:${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+a([[s-1+" |",p[i-1]],[`${s} |`,d],["|","^".padStart(u)],[`${s+1} |`,p[i+1]]])}function a(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,...t){var r,i,s;const{nodes:a,source:u,positions:l,path:p,originalError:d,extensions:f}=function(e){const t=e[0];return null==t||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}(t);super(e),this.name="GraphQLError",this.path=null!=p?p:void 0,this.originalError=null!=d?d:void 0,this.nodes=c(Array.isArray(a)?a:a?[a]:void 0);const h=c(null===(r=this.nodes)||void 0===r?void 0:r.map((e=>e.loc)).filter((e=>null!=e)));this.source=null!=u?u:null==h||null===(i=h[0])||void 0===i?void 0:i.source,this.positions=null!=l?l:null==h?void 0:h.map((e=>e.start)),this.locations=l&&u?l.map((e=>o(u,e))):null==h?void 0:h.map((e=>o(e.source,e.start)));const m=n(null==d?void 0:d.extensions)?null==d?void 0:d.extensions:void 0;this.extensions=null!==(s=null!=f?f:m)&&void 0!==s?s: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!=d&&d.stack?Object.defineProperty(this,"stack",{value:d.stack,writable:!0,configurable:!0}):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"+s((t=n.loc).source,o(t.source,t.start)));else if(this.source&&this.locations)for(const t of this.locations)e+="\n\n"+s(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 c(e){return void 0===e||0===e.length?void 0:e}function u(e,t,n){return new GraphQLError(`Syntax Error: ${n}`,void 0,e,[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 l={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],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"]},p=new Set(Object.keys(l));function d(e){const t=null==e?void 0:e.kind;return"string"==typeof t&&p.has(t)}let f,h,m,v;function y(e){return 9===e||32===e}function E(e){return e>=48&&e<=57}function T(e){return e>=97&&e<=122||e>=65&&e<=90}function N(e){return T(e)||95===e}function I(e){return T(e)||E(e)||95===e}function g(e){var t;let n=Number.MAX_SAFE_INTEGER,r=null,i=-1;for(let t=0;t0===t?e:e.slice(n))).slice(null!==(t=r)&&void 0!==t?t:0,i+1)}function _(e){let t=0;for(;t",e.EOF="",e.BANG="!",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"}(v||(v={}));class Lexer{constructor(e){const t=new Token(v.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!==v.EOF)do{if(e.next)e=e.next;else{const t=x(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function S(e,t){return L(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function L(e){return e>=55296&&e<=56319}function A(e){return e>=56320&&e<=57343}function D(e,t){const n=e.source.body.codePointAt(t);if(void 0===n)return v.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 x(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 u(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function V(e,t){const n=e.source.body,r=n.length;let i=e.lineStart,o=t+3,s=o,a="";const c=[];for(;o2)return"[Array]";const n=Math.min(10,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>2)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+": "+B(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}const Y=function(e,t){return e instanceof t};class Source{constructor(e,n="GraphQL request",r={line:1,column:1}){"string"==typeof e||t(!1,`Body must be a string. Received: ${P(e)}.`),this.body=e,this.name=n,this.locationOffset=r,this.locationOffset.line>0||t(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||t(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function J(e,t){return new Parser(e,t).parseDocument()}class Parser{constructor(e,t){const n=function(e){return Y(e,Source)}(e)?e:new Source(e);this._lexer=new Lexer(n),this._options=t}parseName(){const e=this.expectToken(v.NAME);return this.node(e,{kind:m.NAME,value:e.value})}parseDocument(){return this.node(this._lexer.token,{kind:m.DOCUMENT,definitions:this.many(v.SOF,this.parseDefinition,v.EOF)})}parseDefinition(){if(this.peek(v.BRACE_L))return this.parseOperationDefinition();const e=this.peekDescription(),t=e?this._lexer.lookahead():this._lexer.token;if(t.kind===v.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 u(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(v.BRACE_L))return this.node(e,{kind:m.OPERATION_DEFINITION,operation:f.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const t=this.parseOperationType();let n;return this.peek(v.NAME)&&(n=this.parseName()),this.node(e,{kind:m.OPERATION_DEFINITION,operation:t,name:n,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const e=this.expectToken(v.NAME);switch(e.value){case"query":return f.QUERY;case"mutation":return f.MUTATION;case"subscription":return f.SUBSCRIPTION}throw this.unexpected(e)}parseVariableDefinitions(){return this.optionalMany(v.PAREN_L,this.parseVariableDefinition,v.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:m.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(v.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(v.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const e=this._lexer.token;return this.expectToken(v.DOLLAR),this.node(e,{kind:m.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:m.SELECTION_SET,selections:this.many(v.BRACE_L,this.parseSelection,v.BRACE_R)})}parseSelection(){return this.peek(v.SPREAD)?this.parseFragment():this.parseField()}parseField(){const e=this._lexer.token,t=this.parseName();let n,r;return this.expectOptionalToken(v.COLON)?(n=t,r=this.parseName()):r=t,this.node(e,{kind:m.FIELD,alias:n,name:r,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(v.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(e){const t=e?this.parseConstArgument:this.parseArgument;return this.optionalMany(v.PAREN_L,t,v.PAREN_R)}parseArgument(e=!1){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.ARGUMENT,name:n,value:this.parseValueLiteral(e)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const e=this._lexer.token;this.expectToken(v.SPREAD);const t=this.expectOptionalKeyword("on");return!t&&this.peek(v.NAME)?this.node(e,{kind:m.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(e,{kind:m.INLINE_FRAGMENT,typeCondition:t?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){var e;const t=this._lexer.token;return this.expectKeyword("fragment"),!0===(null===(e=this._options)||void 0===e?void 0:e.allowLegacyFragmentVariables)?this.node(t,{kind:m.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:m.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 v.BRACKET_L:return this.parseList(e);case v.BRACE_L:return this.parseObject(e);case v.INT:return this._lexer.advance(),this.node(t,{kind:m.INT,value:t.value});case v.FLOAT:return this._lexer.advance(),this.node(t,{kind:m.FLOAT,value:t.value});case v.STRING:case v.BLOCK_STRING:return this.parseStringLiteral();case v.NAME:switch(this._lexer.advance(),t.value){case"true":return this.node(t,{kind:m.BOOLEAN,value:!0});case"false":return this.node(t,{kind:m.BOOLEAN,value:!1});case"null":return this.node(t,{kind:m.NULL});default:return this.node(t,{kind:m.ENUM,value:t.value})}case v.DOLLAR:if(e){if(this.expectToken(v.DOLLAR),this._lexer.token.kind===v.NAME){const e=this._lexer.token.value;throw u(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._lexer.advance(),this.node(e,{kind:m.STRING,value:e.value,block:e.kind===v.BLOCK_STRING})}parseList(e){return this.node(this._lexer.token,{kind:m.LIST,values:this.any(v.BRACKET_L,(()=>this.parseValueLiteral(e)),v.BRACKET_R)})}parseObject(e){return this.node(this._lexer.token,{kind:m.OBJECT,fields:this.any(v.BRACE_L,(()=>this.parseObjectField(e)),v.BRACE_R)})}parseObjectField(e){const t=this._lexer.token,n=this.parseName();return this.expectToken(v.COLON),this.node(t,{kind:m.OBJECT_FIELD,name:n,value:this.parseValueLiteral(e)})}parseDirectives(e){const t=[];for(;this.peek(v.AT);)t.push(this.parseDirective(e));return t}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(e){const t=this._lexer.token;return this.expectToken(v.AT),this.node(t,{kind:m.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(e)})}parseTypeReference(){const e=this._lexer.token;let t;if(this.expectOptionalToken(v.BRACKET_L)){const n=this.parseTypeReference();this.expectToken(v.BRACKET_R),t=this.node(e,{kind:m.LIST_TYPE,type:n})}else t=this.parseNamedType();return this.expectOptionalToken(v.BANG)?this.node(e,{kind:m.NON_NULL_TYPE,type:t}):t}parseNamedType(){return this.node(this._lexer.token,{kind:m.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(v.STRING)||this.peek(v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);return this.node(e,{kind:m.SCHEMA_DEFINITION,description:t,directives:n,operationTypes:r})}parseOperationTypeDefinition(){const e=this._lexer.token,t=this.parseOperationType();this.expectToken(v.COLON);const n=this.parseNamedType();return this.node(e,{kind:m.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:m.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:m.OBJECT_TYPE_DEFINITION,description:t,name:n,interfaces:r,directives:i,fields:o})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(v.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseFieldDefinition,v.BRACE_R)}parseFieldDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName(),r=this.parseArgumentDefs();this.expectToken(v.COLON);const i=this.parseTypeReference(),o=this.parseConstDirectives();return this.node(e,{kind:m.FIELD_DEFINITION,description:t,name:n,arguments:r,type:i,directives:o})}parseArgumentDefs(){return this.optionalMany(v.PAREN_L,this.parseInputValueDef,v.PAREN_R)}parseInputValueDef(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseName();this.expectToken(v.COLON);const r=this.parseTypeReference();let i;this.expectOptionalToken(v.EQUALS)&&(i=this.parseConstValueLiteral());const o=this.parseConstDirectives();return this.node(e,{kind:m.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:m.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:m.UNION_TYPE_DEFINITION,description:t,name:n,directives:r,types:i})}parseUnionMemberTypes(){return this.expectOptionalToken(v.EQUALS)?this.delimitedMany(v.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:m.ENUM_TYPE_DEFINITION,description:t,name:n,directives:r,values:i})}parseEnumValuesDefinition(){return this.optionalMany(v.BRACE_L,this.parseEnumValueDefinition,v.BRACE_R)}parseEnumValueDefinition(){const e=this._lexer.token,t=this.parseDescription(),n=this.parseEnumValueName(),r=this.parseConstDirectives();return this.node(e,{kind:m.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 u(this._lexer.source,this._lexer.token.start,`${q(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:m.INPUT_OBJECT_TYPE_DEFINITION,description:t,name:n,directives:r,fields:i})}parseInputFieldsDefinition(){return this.optionalMany(v.BRACE_L,this.parseInputValueDef,v.BRACE_R)}parseTypeSystemExtension(){const e=this._lexer.lookahead();if(e.kind===v.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(v.BRACE_L,this.parseOperationTypeDefinition,v.BRACE_R);if(0===t.length&&0===n.length)throw this.unexpected();return this.node(e,{kind:m.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:m.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:m.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:m.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:m.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:m.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:m.INPUT_OBJECT_TYPE_EXTENSION,name:t,directives:n,fields:r})}parseDirectiveDefinition(){const e=this._lexer.token,t=this.parseDescription();this.expectKeyword("directive"),this.expectToken(v.AT);const n=this.parseName(),r=this.parseArgumentDefs(),i=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const o=this.parseDirectiveLocations();return this.node(e,{kind:m.DIRECTIVE_DEFINITION,description:t,name:n,arguments:r,repeatable:i,locations:o})}parseDirectiveLocations(){return this.delimitedMany(v.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const e=this._lexer.token,t=this.parseName();if(Object.prototype.hasOwnProperty.call(h,t.value))return t;throw this.unexpected(e)}node(e,t){var n;return!0!==(null===(n=this._options)||void 0===n?void 0:n.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._lexer.advance(),t;throw u(this._lexer.source,t.start,`Expected ${X(e)}, found ${q(t)}.`)}expectOptionalToken(e){return this._lexer.token.kind===e&&(this._lexer.advance(),!0)}expectKeyword(e){const t=this._lexer.token;if(t.kind!==v.NAME||t.value!==e)throw u(this._lexer.source,t.start,`Expected "${e}", found ${q(t)}.`);this._lexer.advance()}expectOptionalKeyword(e){const t=this._lexer.token;return t.kind===v.NAME&&t.value===e&&(this._lexer.advance(),!0)}unexpected(e){const t=null!=e?e:this._lexer.token;return u(this._lexer.source,t.start,`Unexpected ${q(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}}function q(e){const t=e.value;return X(e.kind)+(null!=t?` "${t}"`:"")}function X(e){return function(e){return e===v.BANG||e===v.DOLLAR||e===v.AMP||e===v.PAREN_L||e===v.PAREN_R||e===v.SPREAD||e===v.COLON||e===v.EQUALS||e===v.AT||e===v.BRACKET_L||e===v.BRACKET_R||e===v.BRACE_L||e===v.PIPE||e===v.BRACE_R}(e)?`"${e}"`:e}function K(e,t){const[n,r]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const o=r.map((e=>`"${e}"`));switch(o.length){case 0:return"";case 1:return i+o[0]+"?";case 2:return i+o[0]+" or "+o[1]+"?"}const s=o.slice(0,5),a=s.pop();return i+s.join(", ")+", or "+a+"?"}function z(e){return e}function H(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}function W(e,t,n){const r=Object.create(null);for(const i of e)r[t(i)]=n(i);return r}function Z(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}function ee(e,t){let n=0,r=0;for(;n0);let a=0;do{++r,a=10*a+o-te,o=t.charCodeAt(r)}while(ne(o)&&a>0);if(sa)return 1}else{if(io)return 1;++n,++r}}return e.length-t.length}const te=48;function ne(e){return!isNaN(e)&&te<=e&&e<=57}function re(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:ee(e,t)}))}class LexicalDistance{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=ie(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=ie(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 ie(e){const t=e.length,n=new Array(t);for(let r=0;re.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>me(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=ye("(",me(e.variableDefinitions,", "),")"),n=me([e.operation,me([e.name,t]),me(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+ye(" = ",n)+ye(" ",me(r," "))},SelectionSet:{leave:({selections:e})=>ve(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:i}){const o=ye("",e,": ")+t;let s=o+ye("(",me(n,", "),")");return s.length>80&&(s=o+ye("(\n",Ee(me(n,"\n")),"\n)")),me([s,me(r," "),i]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+ye(" ",me(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>me(["...",ye("on ",e),me(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:i})=>`fragment ${e}${ye("(",me(n,", "),")")} on ${t} ${ye("",me(r," ")," ")}`+i},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?function(e,t){const n=e.replace(/"""/g,'\\"""'),r=n.split(/\r\n|[\n\r]/g),i=1===r.length,o=r.length>1&&r.slice(1).every((e=>0===e.length||y(e.charCodeAt(0)))),s=n.endsWith('\\"""'),a=e.endsWith('"')&&!s,c=e.endsWith("\\"),u=a||c,l=!(null!=t&&t.minimize)&&(!i||e.length>70||u||o||s);let p="";const d=i&&y(e.charCodeAt(0));return(l&&!d||o)&&(p+="\n"),p+=n,(l||u)&&(p+="\n"),'"""'+p+'"""'}(e):`"${e.replace(se,ae)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+me(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+me(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+ye("(",me(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>ye("",e,"\n")+me(["schema",me(t," "),ve(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me(["scalar",t,me(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["type",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:i})=>ye("",e,"\n")+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+": "+r+ye(" ",me(i," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:i})=>ye("",e,"\n")+me([t+": "+n,ye("= ",r),me(i," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:i})=>ye("",e,"\n")+me(["interface",t,ye("implements ",me(n," & ")),me(r," "),ve(i)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>ye("",e,"\n")+me(["union",t,me(n," "),ye("= ",me(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>ye("",e,"\n")+me(["enum",t,me(n," "),ve(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>ye("",e,"\n")+me([t,me(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>ye("",e,"\n")+me(["input",t,me(n," "),ve(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:i})=>ye("",e,"\n")+"directive @"+t+(Te(n)?ye("(\n",Ee(me(n,"\n")),"\n)"):ye("(",me(n,", "),")"))+(r?" repeatable":"")+" on "+me(i," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>me(["extend schema",me(e," "),ve(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>me(["extend scalar",e,me(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend type",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>me(["extend interface",e,ye("implements ",me(t," & ")),me(n," "),ve(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>me(["extend union",e,me(t," "),ye("= ",me(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>me(["extend enum",e,me(t," "),ve(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>me(["extend input",e,me(t," "),ve(n)]," ")}};function me(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function ve(e){return ye("{\n",Ee(me(e,"\n")),"\n}")}function ye(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function Ee(e){return ye(" ",e.replace(/\n/g,"\n "))}function Te(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}function Ne(e,t){switch(e.kind){case m.NULL:return null;case m.INT:return parseInt(e.value,10);case m.FLOAT:return parseFloat(e.value);case m.STRING:case m.ENUM:case m.BOOLEAN:return e.value;case m.LIST:return e.values.map((e=>Ne(e,t)));case m.OBJECT:return W(e.fields,(e=>e.name.value),(e=>Ne(e.value,t)));case m.VARIABLE:return null==t?void 0:t[e.name.value]}}function Ie(e){if(null!=e||t(!1,"Must provide name."),"string"==typeof e||t(!1,"Expected name to be a string."),0===e.length)throw new GraphQLError("Expected name to be a non-empty string.");for(let t=1;ts(Ne(e,t)),this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(o=e.extensionASTNodes)&&void 0!==o?o:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||t(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${P(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||t(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||t(!1,`${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){var n;this.name=Ie(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=()=>Ye(e),this._interfaces=()=>Be(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||t(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${P(e.isTypeOf)}.`)}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:Xe(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Be(e){var n;const r=Me(null!==(n=e.interfaces)&&void 0!==n?n:[]);return Array.isArray(r)||t(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),r}function Ye(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>{var i;qe(n)||t(!1,`${e.name}.${r} field config must be an object.`),null==n.resolve||"function"==typeof n.resolve||t(!1,`${e.name}.${r} field resolver must be a function if provided, but got: ${P(n.resolve)}.`);const o=null!==(i=n.args)&&void 0!==i?i:{};return qe(o)||t(!1,`${e.name}.${r} args must be an object with argument names as keys.`),{name:Ie(r),description:n.description,type:n.type,args:Je(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function Je(e){return Object.entries(e).map((([e,t])=>({name:Ie(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:oe(t.extensions),astNode:t.astNode})))}function qe(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:Ke(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function Ke(e){return W(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(e){return xe(e.type)&&void 0===e.defaultValue}class GraphQLInterfaceType{constructor(e){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._fields=Ye.bind(void 0,e),this._interfaces=Be.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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:Xe(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){var n;this.name=Ie(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._types=He.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||t(!1,`${this.name} must provide "resolveType" as a function, but got: ${P(e.resolveType)}.`)}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 He(e){const n=Me(e.types);return Array.isArray(n)||t(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),n}class GraphQLEnumType{constructor(e){var n,r,i;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(n=e.extensionASTNodes)&&void 0!==n?n:[],this._values=(r=this.name,qe(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(qe(n)||t(!1,`${r}.${e} must refer to an object with a "value" key representing an internal value but got: ${P(n)}.`),{name:ge(e),description:n.description,value:void 0!==n.value?n.value:e,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=H(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new GraphQLError(`Enum "${this.name}" cannot represent value: ${P(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=P(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${t}.`+We(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+We(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.ENUM){const t=fe(e);throw new GraphQLError(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+We(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=fe(e);throw new GraphQLError(`Value "${t}" does not exist in "${this.name}" enum.`+We(this,t),e)}return n.value}toConfig(){const e=W(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 We(e,t){return K("the enum value",re(t,e.getValues().map((e=>e.name))))}class GraphQLInputObjectType{constructor(e){var t;this.name=Ie(e.name),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ze.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=Z(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}}toString(){return this.name}toJSON(){return this.toString()}}function Ze(e){const n=Pe(e.fields);return qe(n)||t(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),Z(n,((n,r)=>(!("resolve"in n)||t(!1,`${e.name}.${r} field has a resolve property, but Input Types cannot define resolvers.`),{name:Ie(r),description:n.description,type:n.type,defaultValue:n.defaultValue,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode})))}function et(e){return xe(e.type)&&void 0===e.defaultValue}function tt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&tt(e.ofType,t.ofType)}function nt(e,t,n){return t===n||(xe(n)?!!xe(t)&&nt(e,t.ofType,n.ofType):xe(t)?nt(e,t.ofType,n):we(n)?!!we(t)&&nt(e,t.ofType,n.ofType):!we(t)&&(Ge(n)&&(Se(t)||Oe(t))&&e.isSubType(n,t)))}function rt(e,t,n){return t===n||(Ge(t)?Ge(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!Ge(n)&&e.isSubType(n,t))}const it=2147483647,ot=-2147483648,st=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=ft(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: ${P(t)}`);if(n>it||nit||eit||te.name===t))}function ft(e){if(n(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!n(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}function ht(e){return Y(e,GraphQLDirective)}class GraphQLDirective{constructor(e){var r,i;this.name=Ie(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(r=e.isRepeatable)&&void 0!==r&&r,this.extensions=oe(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||t(!1,`@${e.name} locations must be an Array.`);const o=null!==(i=e.args)&&void 0!==i?i:{};n(o)&&!Array.isArray(o)||t(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=Je(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:Ke(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const mt=new GraphQLDirective({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Included when true."}}}),vt=new GraphQLDirective({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[h.FIELD,h.FRAGMENT_SPREAD,h.INLINE_FRAGMENT],args:{if:{type:new GraphQLNonNull(ut),description:"Skipped when true."}}}),yt="No longer supported",Et=new GraphQLDirective({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[h.FIELD_DEFINITION,h.ARGUMENT_DEFINITION,h.INPUT_FIELD_DEFINITION,h.ENUM_VALUE],args:{reason:{type:ct,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:yt}}}),Tt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ct),description:"The URL that specifies the behavior of this scalar."}}}),Nt=Object.freeze([mt,vt,Et,Tt]);function It(e,t){if(xe(t)){const n=It(e,t.ofType);return(null==n?void 0:n.kind)===m.NULL?null:n}if(null===e)return{kind:m.NULL};if(void 0===e)return null;if(we(t)){const n=t.ofType;if("object"==typeof(i=e)&&"function"==typeof(null==i?void 0:i[Symbol.iterator])){const t=[];for(const r of e){const e=It(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return It(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=It(e[n.name],n.type);t&&r.push({kind:m.OBJECT_FIELD,name:{kind:m.NAME,value:n.name},value:t})}return{kind:m.OBJECT,fields:r}}if(Re(t)){const n=t.serialize(e);if(null==n)return null;if("boolean"==typeof n)return{kind:m.BOOLEAN,value:n};if("number"==typeof n&&Number.isFinite(n)){const e=String(n);return gt.test(e)?{kind:m.INT,value:e}:{kind:m.FLOAT,value:e}}if("string"==typeof n)return Ae(t)?{kind:m.ENUM,value:n}:t===lt&>.test(n)?{kind:m.INT,value:n}:{kind:m.STRING,value:n};throw new TypeError(`Cannot convert value to AST: ${P(n)}.`)}r(!1,"Unexpected input type: "+P(t))}const gt=/^-?(?:0|[1-9][0-9]*)$/,_t=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:ct,resolve:e=>e.description},types:{description:"A list of all types supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(St))),resolve:e=>Object.values(e.getTypeMap())},queryType:{description:"The type that query operations will be rooted at.",type:new GraphQLNonNull(St),resolve:e=>e.getQueryType()},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:St,resolve:e=>e.getMutationType()},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:St,resolve:e=>e.getSubscriptionType()},directives:{description:"A list of all directives supported by this server.",type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(bt))),resolve:e=>e.getDirectives()}})}),bt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(ut),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Ot))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Ot=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:h.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:h.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:h.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:h.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:h.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:h.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:h.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:h.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:h.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:h.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:h.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:h.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:h.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:h.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:h.UNION,description:"Location adjacent to a union definition."},ENUM:{value:h.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:h.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:h.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:h.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}}),St=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(xt),resolve:e=>be(e)?wt.SCALAR:Oe(e)?wt.OBJECT:Se(e)?wt.INTERFACE:Le(e)?wt.UNION:Ae(e)?wt.ENUM:De(e)?wt.INPUT_OBJECT:we(e)?wt.LIST:xe(e)?wt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ct,resolve:e=>"name"in e?e.name:void 0},description:{type:ct,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ct,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(Lt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Oe(e)||Se(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},interfaces:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e){if(Oe(e)||Se(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if(Ge(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(Dt)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(Ae(e)){const n=e.getValues();return t?n:n.filter((e=>null==e.deprecationReason))}}},inputFields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(De(e)){const n=Object.values(e.getFields());return t?n:n.filter((e=>null==e.deprecationReason))}}},ofType:{type:St,resolve:e=>"ofType"in e?e.ofType:void 0}})}),Lt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(At))),args:{includeDeprecated:{type:ut,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),At=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ct,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=It(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})}),Dt=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(ct),resolve:e=>e.name},description:{type:ct,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(ut),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ct,resolve:e=>e.deprecationReason}})});let wt;!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"}(wt||(wt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:wt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:wt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:wt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:wt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:wt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:wt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:wt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:wt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),kt={name:"__schema",type:new GraphQLNonNull(_t),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},Ft={name:"__type",type:St,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new GraphQLNonNull(ct),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},Rt={name:"__typename",type:new GraphQLNonNull(ct),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},Ct=Object.freeze([_t,bt,Ot,St,Lt,At,Dt,xt]);function Gt(e){return Ct.some((({name:t})=>e.name===t))}function $t(e){if(!function(e){return Y(e,GraphQLSchema)}(e))throw new Error(`Expected ${P(e)} to be a GraphQL schema.`);return e}class GraphQLSchema{constructor(e){var r,i;this.__validationErrors=!0===e.assumeValid?[]:void 0,n(e)||t(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||t(!1,`"types" must be Array if provided but got: ${P(e.types)}.`),!e.directives||Array.isArray(e.directives)||t(!1,`"directives" must be Array if provided but got: ${P(e.directives)}.`),this.description=e.description,this.extensions=oe(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(r=e.extensionASTNodes)&&void 0!==r?r:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(i=e.directives)&&void 0!==i?i:Nt;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Qt(t,o);null!=this._queryType&&Qt(this._queryType,o),null!=this._mutationType&&Qt(this._mutationType,o),null!=this._subscriptionType&&Qt(this._subscriptionType,o);for(const e of this._directives)if(ht(e))for(const t of e.args)Qt(t.type,o);Qt(_t,o),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of o){if(null==e)continue;const n=e.name;if(n||t(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[n])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${n}".`);if(this._typeMap[n]=e,Se(e)){for(const t of e.getInterfaces())if(Se(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(Oe(e))for(const t of e.getInterfaces())if(Se(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 f.QUERY:return this.getQueryType();case f.MUTATION:return this.getMutationType();case f.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return Le(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),Le(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}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=Ve(e);if(!t.has(n))if(t.add(n),Le(n))for(const e of n.getTypes())Qt(e,t);else if(Oe(n)||Se(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(De(n))for(const e of Object.values(n.getFields()))Qt(e.type,t);return t}function jt(e){if($t(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!Oe(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Ut(t,f.QUERY))&&void 0!==r?r:n.astNode)}}else e.reportError("Query root type must be provided.",t.astNode);const i=t.getMutationType();var o;i&&!Oe(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Ut(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!Oe(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Ut(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(ht(n)){Vt(e,n);for(const r of n.args){var t;if(Vt(e,r),ke(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),ze(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Ht(r.astNode),null===(t=r.astNode)||void 0===t?void 0:t.type])}}else e.reportError(`Expected directive but got: ${P(n)}.`,null==n?void 0:n.astNode)}(t),function(e){const t=function(e){const t=Object.create(null),n=[],r=Object.create(null);return i;function i(o){if(t[o.name])return;t[o.name]=!0,r[o.name]=n.length;const s=Object.values(o.getFields());for(const t of s)if(xe(t.type)&&De(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))Ue(r)?(Gt(r)||Vt(e,r),Oe(r)||Se(r)?(Mt(e,r),Pt(e,r)):Le(r)?Jt(e,r):Ae(r)?qt(e,r):De(r)&&(Xt(e,r),t(r))):e.reportError(`Expected GraphQL named type but got: ${P(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,n))}getErrors(){return this._errors}}function Ut(e,t){var n;return null===(n=[e.astNode,...e.extensionASTNodes].flatMap((e=>{var t;return null!==(t=null==e?void 0:e.operationTypes)&&void 0!==t?t:[]})).find((e=>e.operation===t)))||void 0===n?void 0:n.type}function Vt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Mt(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 s of n){var r;if(Vt(e,s),!Fe(s.type))e.reportError(`The type of ${t.name}.${s.name} must be Output Type but got: ${P(s.type)}.`,null===(r=s.astNode)||void 0===r?void 0:r.type);for(const n of s.args){const r=n.name;var i,o;if(Vt(e,n),!ke(n.type))e.reportError(`The type of ${t.name}.${s.name}(${r}:) must be Input Type but got: ${P(n.type)}.`,null===(i=n.astNode)||void 0===i?void 0:i.type);if(ze(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Ht(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Pt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Se(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,Kt(t,r)):(n[r.name]=!0,Yt(e,t,r),Bt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,Kt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,Kt(t,r))}function Bt(e,t,n){const r=t.getFields();for(const c of Object.values(n.getFields())){const u=c.name,l=r[u];if(l){var i,o;if(!nt(e.schema,l.type,c.type))e.reportError(`Interface field ${n.name}.${u} expects type ${P(c.type)} but ${t.name}.${u} is type ${P(l.type)}.`,[null===(i=c.astNode)||void 0===i?void 0:i.type,null===(o=l.astNode)||void 0===o?void 0:o.type]);for(const r of c.args){const i=r.name,o=l.args.find((e=>e.name===i));var s,a;if(o){if(!tt(r.type,o.type))e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expects type ${P(r.type)} but ${t.name}.${u}(${i}:) is type ${P(o.type)}.`,[null===(s=r.astNode)||void 0===s?void 0:s.type,null===(a=o.astNode)||void 0===a?void 0:a.type])}else e.reportError(`Interface field argument ${n.name}.${u}(${i}:) expected but ${t.name}.${u} does not provide it.`,[r.astNode,l.astNode])}for(const r of l.args){const i=r.name;!c.args.find((e=>e.name===i))&&ze(r)&&e.reportError(`Object field ${t.name}.${u} includes required argument ${i} that is missing from the Interface field ${n.name}.${u}.`,[r.astNode,c.astNode])}}else e.reportError(`Interface field ${n.name}.${u} expected but ${t.name} does not provide it.`,[c.astNode,t.astNode,...t.extensionASTNodes])}}function Yt(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}.`,[...Kt(n,i),...Kt(t,n)])}function Jt(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=Object.create(null);for(const i of n)r[i.name]?e.reportError(`Union type ${t.name} can only include type ${i.name} once.`,zt(t,i.name)):(r[i.name]=!0,Oe(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,zt(t,String(i))))}function qt(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)Vt(e,t)}function Xt(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 o of n){var r,i;if(Vt(e,o),!ke(o.type))e.reportError(`The type of ${t.name}.${o.name} must be Input Type but got: ${P(o.type)}.`,null===(r=o.astNode)||void 0===r?void 0:r.type);if(et(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Ht(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function Kt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.interfaces)&&void 0!==t?t:[]})).filter((e=>e.name.value===t.name))}function zt(e,t){const{astNode:n,extensionASTNodes:r}=e;return(null!=n?[n,...r]:r).flatMap((e=>{var t;return null!==(t=e.types)&&void 0!==t?t:[]})).filter((e=>e.name.value===t))}function Ht(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Et.name))}function Wt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Wt(e,t.type);return n&&new GraphQLNonNull(n)}case m.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=null!=n?n:Zt,t&&(ke(t)&&this._inputTypeStack.push(t),Ce(t)&&this._parentTypeStack.push(t),Fe(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case m.SELECTION_SET:{const e=Ve(this.getType());this._parentTypeStack.push(Ce(e)?e:void 0);break}case m.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(Fe(i)?i:void 0);break}case m.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case m.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push(Oe(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Wt(t,n):Ve(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Wt(t,e.type);this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ARGUMENT:{var n;let t,r;const i=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();i&&(t=i.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push(ke(r)?r:void 0);break}case m.LIST:{const e=je(this.getInputType()),t=we(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push(ke(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Ve(this.getInputType());let n,r;De(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push(ke(n)?n:void 0);break}case m.ENUM:{const t=Ve(this.getInputType());let n;Ae(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case m.SELECTION_SET:this._parentTypeStack.pop();break;case m.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case m.DIRECTIVE:this._directive=null;break;case m.OPERATION_DEFINITION:case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:this._typeStack.pop();break;case m.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case m.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.LIST:case m.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case m.ENUM:this._enumValue=null}}}function Zt(e,t,n){const r=n.name.value;return r===kt.name&&e.getQueryType()===t?kt:r===Ft.name&&e.getQueryType()===t?Ft:r===Rt.name&&Ce(t)?Rt:Oe(t)||Se(t)?t.getFields()[r]:void 0}function en(e,t){return{enter(...n){const r=n[0];e.enter(r);const i=de(t,r.kind).enter;if(i){const o=i.apply(t,n);return void 0!==o&&(e.leave(r),d(o)&&e.enter(o)),o}},leave(...n){const r=n[0],i=de(t,r.kind).leave;let o;return i&&(o=i.apply(t,n)),e.leave(r),o}}}function tn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function nn(e){return e.kind===m.SCALAR_TYPE_DEFINITION||e.kind===m.OBJECT_TYPE_DEFINITION||e.kind===m.INTERFACE_TYPE_DEFINITION||e.kind===m.UNION_TYPE_DEFINITION||e.kind===m.ENUM_TYPE_DEFINITION||e.kind===m.INPUT_OBJECT_TYPE_DEFINITION}function rn(e){return e.kind===m.SCALAR_TYPE_EXTENSION||e.kind===m.OBJECT_TYPE_EXTENSION||e.kind===m.INTERFACE_TYPE_EXTENSION||e.kind===m.UNION_TYPE_EXTENSION||e.kind===m.ENUM_TYPE_EXTENSION||e.kind===m.INPUT_OBJECT_TYPE_EXTENSION}function on(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=e.args.map((e=>e.name));const i=e.getDocument().definitions;for(const e of i)if(e.kind===m.DIRECTIVE_DEFINITION){var o;const n=null!==(o=e.arguments)&&void 0!==o?o:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const r=n.name.value,i=t[r];if(n.arguments&&i)for(const t of n.arguments){const n=t.name.value;if(!i.includes(n)){const o=re(n,i);e.reportError(new GraphQLError(`Unknown argument "${n}" on directive "@${r}".`+K(o),t))}}return!1}}}function sn(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():Nt;for(const e of i)t[e.name]=e.locations;const o=e.getDocument().definitions;for(const e of o)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,i,o,s,a){const c=n.name.value,u=t[c];if(!u)return void e.reportError(new GraphQLError(`Unknown directive "@${c}".`,n));const l=function(e){const t=e[e.length-1];switch("kind"in t||r(!1),t.kind){case m.OPERATION_DEFINITION:return function(e){switch(e){case f.QUERY:return h.QUERY;case f.MUTATION:return h.MUTATION;case f.SUBSCRIPTION:return h.SUBSCRIPTION}}(t.operation);case m.FIELD:return h.FIELD;case m.FRAGMENT_SPREAD:return h.FRAGMENT_SPREAD;case m.INLINE_FRAGMENT:return h.INLINE_FRAGMENT;case m.FRAGMENT_DEFINITION:return h.FRAGMENT_DEFINITION;case m.VARIABLE_DEFINITION:return h.VARIABLE_DEFINITION;case m.SCHEMA_DEFINITION:case m.SCHEMA_EXTENSION:return h.SCHEMA;case m.SCALAR_TYPE_DEFINITION:case m.SCALAR_TYPE_EXTENSION:return h.SCALAR;case m.OBJECT_TYPE_DEFINITION:case m.OBJECT_TYPE_EXTENSION:return h.OBJECT;case m.FIELD_DEFINITION:return h.FIELD_DEFINITION;case m.INTERFACE_TYPE_DEFINITION:case m.INTERFACE_TYPE_EXTENSION:return h.INTERFACE;case m.UNION_TYPE_DEFINITION:case m.UNION_TYPE_EXTENSION:return h.UNION;case m.ENUM_TYPE_DEFINITION:case m.ENUM_TYPE_EXTENSION:return h.ENUM;case m.ENUM_VALUE_DEFINITION:return h.ENUM_VALUE;case m.INPUT_OBJECT_TYPE_DEFINITION:case m.INPUT_OBJECT_TYPE_EXTENSION:return h.INPUT_OBJECT;case m.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||r(!1),t.kind===m.INPUT_OBJECT_TYPE_DEFINITION?h.INPUT_FIELD_DEFINITION:h.ARGUMENT_DEFINITION}default:r(!1,"Unexpected kind: "+P(t.kind))}}(a);l&&!u.includes(l)&&e.reportError(new GraphQLError(`Directive "@${c}" may not be used on ${l}.`,n))}}}function an(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(r[t.name.value]=!0);const i=[...Object.keys(n),...Object.keys(r)];return{NamedType(t,o,s,a,c){const u=t.name.value;if(!n[u]&&!r[u]){var l;const n=null!==(l=c[2])&&void 0!==l?l:s,r=null!=n&&("kind"in(p=n)&&(function(e){return e.kind===m.SCHEMA_DEFINITION||nn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||rn(e)}(p)));if(r&&cn.includes(u))return;const o=re(u,r?cn.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+K(o),t))}var p}}}const cn=[...pt,...Ct].map((e=>e.name));function un(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const r=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))r[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==r[n]&&e.reportError(new GraphQLError(`Fragment "${n}" is never used.`,t))}}}}}function ln(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:ln(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(ln)};case m.INT:case m.FLOAT:case m.STRING:case m.BOOLEAN:case m.NULL:case m.ENUM:case m.VARIABLE:return e}var t}function pn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+pn(t))).join(" and "):e}function dn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=Tn(e,n,a);if(o!==c){hn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),dn(e,t,n,r,i,o,a))}}function fn(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]=Tn(e,n,a),[p,d]=Tn(e,n,c);hn(e,t,n,r,i,u,p);for(const s of d)fn(e,t,n,r,i,o,s);for(const o of l)fn(e,t,n,r,i,o,s)}function hn(e,t,n,r,i,o,s){for(const[a,c]of Object.entries(o)){const o=s[a];if(o)for(const s of c)for(const c of o){const o=mn(e,n,r,i,a,s,c);o&&t.push(o)}}}function mn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&Oe(a)&&Oe(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(vn(c)!==vn(p))return[[i,"they have differing arguments"],[c],[p]]}const h=null==u?void 0:u.type,m=null==d?void 0:d.type;if(h&&m&&yn(h,m))return[[i,`they return conflicting types "${P(h)}" and "${P(m)}"`],[c],[p]];const v=c.selectionSet,y=p.selectionSet;if(v&&y){const r=function(e,t,n,r,i,o,s,a){const c=[],[u,l]=En(e,t,i,o),[p,d]=En(e,t,s,a);hn(e,c,t,n,r,u,p);for(const i of d)dn(e,c,t,n,r,u,i);for(const i of l)dn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)fn(e,c,t,n,r,i,o);return c}(e,t,n,f,Ve(h),v,Ve(m),y);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 vn(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(ln({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function yn(e,t){return we(e)?!we(t)||yn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||yn(e.ofType,t.ofType):!!xe(t)||!(!Re(e)&&!Re(t))&&e!==t)}function En(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);Nn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function Tn(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Wt(e.getSchema(),n.typeCondition);return En(e,t,i,n.selectionSet)}function Nn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(Oe(t)||Se(t))&&(n=t.getFields()[e]);const i=o.alias?o.alias.value:e;r[i]||(r[i]=[]),r[i].push([t,o,n]);break}case m.FRAGMENT_SPREAD:i[o.name.value]=!0;break;case m.INLINE_FRAGMENT:{const n=o.typeCondition,s=n?Wt(e.getSchema(),n):t;Nn(e,s,o.selectionSet,r,i);break}}}class PairSet{constructor(){this._data=new Map}has(e,t,n){var r;const[i,o]=ee.name));const o=e.getDocument().definitions;for(const e of o)if(e.kind===m.DIRECTIVE_DEFINITION){var s;const t=null!==(s=e.arguments)&&void 0!==s?s:[];n[e.name.value]=H(t.filter(_n),(e=>e.name.value))}return{Directive:{leave(t){const r=t.name.value,i=n[r];if(i){var o;const n=null!==(o=t.arguments)&&void 0!==o?o:[],s=new Set(n.map((e=>e.name.value)));for(const[n,o]of Object.entries(i))if(!s.has(n)){const i=_e(o.type)?P(o.type):fe(o.type);e.reportError(new GraphQLError(`Directive "@${r}" argument "${n}" of type "${i}" is required, but it was not provided.`,t))}}}}}}function _n(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function bn(e,t,n){if(e){if(e.kind===m.VARIABLE){const r=e.name.value;if(null==n||void 0===n[r])return;const i=n[r];if(null===i&&xe(t))return;return i}if(xe(t)){if(e.kind===m.NULL)return;return bn(e,t.ofType,n)}if(e.kind===m.NULL)return null;if(we(t)){const r=t.ofType;if(e.kind===m.LIST){const t=[];for(const i of e.values)if(On(i,n)){if(xe(r))return;t.push(null)}else{const e=bn(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=bn(e,r,n);if(void 0===i)return;return[i]}if(De(t)){if(e.kind!==m.OBJECT)return;const r=Object.create(null),i=H(e.fields,(e=>e.name.value));for(const e of Object.values(t.getFields())){const t=i[e.name];if(!t||On(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=bn(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Re(t)){let r;try{r=t.parseLiteral(e,n)}catch(e){return}if(void 0===r)return;return r}r(!1,"Unexpected input type: "+P(t))}}function On(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function Sn(e,t,n){var r;const i=null===(r=t.directives)||void 0===r?void 0:r.find((t=>t.name.value===e.name));if(i)return function(e,t,n){var r;const i={},o=H(null!==(r=t.arguments)&&void 0!==r?r:[],(e=>e.name.value));for(const r of e.args){const e=r.name,c=r.type,u=o[e];if(!u){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was not provided.`,t);continue}const l=u.value;let p=l.kind===m.NULL;if(l.kind===m.VARIABLE){const t=l.name.value;if(null==n||(s=n,a=t,!Object.prototype.hasOwnProperty.call(s,a))){if(void 0!==r.defaultValue)i[e]=r.defaultValue;else if(xe(c))throw new GraphQLError(`Argument "${e}" of required type "${P(c)}" was provided the variable "$${t}" which was not provided a runtime value.`,l);continue}p=null==n[t]}if(p&&xe(c))throw new GraphQLError(`Argument "${e}" of non-null type "${P(c)}" must not be null.`,l);const d=bn(l,c,n);if(void 0===d)throw new GraphQLError(`Argument "${e}" has invalid value ${fe(l)}.`,l);i[e]=d}var s,a;return i}(e,i,n)}function Ln(e,t,n,r,i){const o=new Map;return An(e,t,n,r,i,o,new Set),o}function An(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!Dn(n,c))continue;const e=(a=c).alias?a.alias.value:a.name.value,t=o.get(e);void 0!==t?t.push(c):o.set(e,[c]);break}case m.INLINE_FRAGMENT:if(!Dn(n,c)||!wn(e,c,r))continue;An(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!Dn(n,c))continue;s.add(i);const a=t[i];if(!a||!wn(e,a,r))continue;An(e,t,n,r,a.selectionSet,o,s);break}}var a}function Dn(e,t){const n=Sn(vt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=Sn(mt,t,e);return!1!==(null==r?void 0:r.if)}function wn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Wt(e,r);return i===n||!!Ge(i)&&e.isSubType(i,n)}function xn(e,t){const n=new Map;for(const r of e){const e=t(r),i=n.get(e);void 0===i?n.set(e,[r]):i.push(r)}return n}function kn(e){return{Field:t,Directive:t};function t(t){var n;const r=xn(null!==(n=t.arguments)&&void 0!==n?n:[],(e=>e.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}function Fn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():Nt;for(const e of r)t[e.name]=!e.isRepeatable;const i=e.getDocument().definitions;for(const e of i)e.kind===m.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const o=Object.create(null),s=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let r;if(n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION)r=o;else if(nn(n)||rn(n)){const e=n.name.value;r=s[e],void 0===r&&(s[e]=r=Object.create(null))}else r=Object.create(null);for(const i of n.directives){const n=i.name.value;t[n]&&(r[n]?e.reportError(new GraphQLError(`The directive "@${n}" can only be used once at this location.`,[r[n],i])):r[n]=i)}}}}function Rn(e,t){return!!(Oe(e)||Se(e)||De(e))&&null!=e.getFields()[t]}function Cn(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||r(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new GraphQLError(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}function Gn(e,t){const n=e.getInputType();if(!n)return;const r=Ve(n);if(Re(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}catch(r){const i=P(n);r instanceof GraphQLError?e.reportError(r):e.reportError(new GraphQLError(`Expected value of type "${i}", found ${fe(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=P(n);e.reportError(new GraphQLError(`Expected value of type "${r}", found ${fe(t)}.`,t))}}function $n(e,t,n,r,i){if(xe(r)&&!xe(t)){const o=void 0!==i;if(!(null!=n&&n.kind!==m.NULL)&&!o)return!1;return nt(e,t,r.ofType)}return nt(e,t,r)}const Qn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!tn(n)){const t=n.kind===m.SCHEMA_DEFINITION||n.kind===m.SCHEMA_EXTENSION?"schema":'"'+n.name.value+'"';e.reportError(new GraphQLError(`The ${t} definition is not executable.`,n))}return!1}}},function(e){const t=Object.create(null);return{OperationDefinition(n){const r=n.name;return r&&(t[r.value]?e.reportError(new GraphQLError(`There can be only one operation named "${r.value}".`,[t[r.value],r])):t[r.value]=r),!1},FragmentDefinition:()=>!1}},function(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===m.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new GraphQLError("This anonymous operation must be the only defined operation.",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===m.FRAGMENT_DEFINITION&&(a[e.name.value]=e);const c=Ln(n,a,o,r,t.selectionSet);if(c.size>1){const t=[...c.values()].slice(1).flat();e.reportError(new GraphQLError(null!=i?`Subscription "${i}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of c.values()){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.",t))}}}}}},an,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Wt(e.getSchema(),n);if(t&&!Ce(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Wt(e.getSchema(),t.typeCondition);if(n&&!Ce(n)){const n=fe(t.typeCondition);e.reportError(new GraphQLError(`Fragment "${t.name.value}" cannot condition on non composite type "${n}".`,t.typeCondition))}}}},function(e){return{VariableDefinition(t){const n=Wt(e.getSchema(),t.type);if(void 0!==n&&!ke(n)){const n=t.variable.name.value,r=fe(t.type);e.reportError(new GraphQLError(`Variable "$${n}" cannot be non-input type "${r}".`,t.type))}}}},function(e){return{Field(t){const n=e.getType(),r=t.selectionSet;if(n)if(Re(Ve(n))){if(r){const i=t.name.value,o=P(n);e.reportError(new GraphQLError(`Field "${i}" must not have a selection since type "${o}" has no subfields.`,r))}}else if(!r){const r=t.name.value,i=P(n);e.reportError(new GraphQLError(`Field "${r}" of type "${i}" must have a selection of subfields. Did you mean "${r} { ... }"?`,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=K("to use an inline fragment on",function(e,t,n){if(!Ge(t))return[];const r=new Set,i=Object.create(null);for(const s of e.getPossibleTypes(t))if(s.getFields()[n]){r.add(s),i[s.name]=1;for(const e of s.getInterfaces()){var o;e.getFields()[n]&&(r.add(e),i[e.name]=(null!==(o=i[e.name])&&void 0!==o?o:0)+1)}}return[...r].sort(((t,n)=>{const r=i[n.name]-i[t.name];return 0!==r?r:Se(t)&&e.isSubType(t,n)?-1:Se(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=K(function(e,t){if(Oe(e)||Se(e)){return re(t,Object.keys(e.getFields()))}return[]}(n,i))),e.reportError(new GraphQLError(`Cannot query field "${i}" on type "${n.name}".`+o,t))}}}}},function(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const r=n.name.value;return t[r]?e.reportError(new GraphQLError(`There can be only one fragment named "${r}".`,[t[r],n.name])):t[r]=n.name,!1}}},function(e){return{FragmentSpread(t){const n=t.name.value;e.getFragment(n)||e.reportError(new GraphQLError(`Unknown fragment "${n}".`,t.name))}}},un,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ce(n)&&Ce(r)&&!rt(e.getSchema(),n,r)){const i=P(r),o=P(n);e.reportError(new GraphQLError(`Fragment cannot be spread here as objects of type "${i}" can never be of type "${o}".`,t))}},FragmentSpread(t){const n=t.name.value,r=function(e,t){const n=e.getFragment(t);if(n){const t=Wt(e.getSchema(),n.typeCondition);if(Ce(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!rt(e.getSchema(),r,i)){const o=P(i),s=P(r);e.reportError(new GraphQLError(`Fragment "${n}" cannot be spread here as objects of type "${o}" can never be of type "${s}".`,t))}}}},function(e){const t=Object.create(null),n=[],r=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(o){if(t[o.name.value])return;const s=o.name.value;t[s]=!0;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}.`:"."),t))}n.pop()}r[s]=void 0}}},function(e){return{OperationDefinition(t){var n;const r=xn(null!==(n=t.variableDefinitions)&&void 0!==n?n:[],(e=>e.variable.name.value));for(const[t,n]of r)n.length>1&&e.reportError(new GraphQLError(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:i}of r){const r=i.name.value;!0!==t[r]&&e.reportError(new GraphQLError(n.name?`Variable "$${r}" is not defined by operation "${n.name.value}".`:`Variable "$${r}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}},function(e){let t=[];return{OperationDefinition:{enter(){t=[]},leave(n){const r=Object.create(null),i=e.getRecursiveVariableUsages(n);for(const{node:e}of i)r[e.name.value]=!0;for(const i of t){const t=i.variable.name.value;!0!==r[t]&&e.reportError(new GraphQLError(n.name?`Variable "$${t}" is never used in operation "${n.name.value}".`:`Variable "$${t}" is never used.`,i))}}},VariableDefinition(e){t.push(e)}}},sn,Fn,function(e){return{...on(e),Argument(t){const n=e.getArgument(),r=e.getFieldDef(),i=e.getParentType();if(!n&&r&&i){const n=t.name.value,o=re(n,r.args.map((e=>e.name)));e.reportError(new GraphQLError(`Unknown argument "${n}" on field "${i.name}.${r.name}".`+K(o),t))}}}},kn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Gn(e,t),!1},ObjectValue(t){const n=Ve(e.getInputType());if(!De(n))return Gn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&et(i)){const r=P(i.type);e.reportError(new GraphQLError(`Field "${n.name}.${i.name}" of required type "${r}" was not provided.`,t))}}},ObjectField(t){const n=Ve(e.getParentInputType());if(!e.getInputType()&&De(n)){const r=re(t.name.value,Object.keys(n.getFields()));e.reportError(new GraphQLError(`Field "${t.name.value}" is not defined by type "${n.name}".`+K(r),t))}},NullValue(t){const n=e.getInputType();xe(n)&&e.reportError(new GraphQLError(`Expected value of type "${P(n)}", found ${fe(t)}.`,t))},EnumValue:t=>Gn(e,t),IntValue:t=>Gn(e,t),FloatValue:t=>Gn(e,t),StringValue:t=>Gn(e,t),BooleanValue:t=>Gn(e,t)}},function(e){return{...gn(e),Field:{leave(t){var n;const r=e.getFieldDef();if(!r)return!1;const i=new Set(null===(n=t.arguments)||void 0===n?void 0:n.map((e=>e.name.value)));for(const n of r.args)if(!i.has(n.name)&&ze(n)){const i=P(n.type);e.reportError(new GraphQLError(`Field "${r.name}" argument "${n.name}" of type "${i}" is required, but it was not provided.`,t))}}}}},function(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const r=e.getRecursiveVariableUsages(n);for(const{node:n,type:i,defaultValue:o}of r){const r=n.name.value,s=t[r];if(s&&i){const t=e.getSchema(),a=Wt(t,s.type);if(a&&!$n(t,a,s.defaultValue,i,o)){const t=P(a),o=P(i);e.reportError(new GraphQLError(`Variable "$${r}" of type "${t}" used in position expecting type "${o}".`,[s,n]))}}}}},VariableDefinition(e){t[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]=En(e,t,r,i);if(function(e,t,n,r,i){for(const[o,s]of Object.entries(i))if(s.length>1)for(let i=0;i0&&e.reportError(new GraphQLError("Must provide only one schema definition.",t)),++s)}}},function(e){const t=e.getSchema(),n=Object.create(null),r=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const o=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of o){const i=t.operation,o=n[i];r[i]?e.reportError(new GraphQLError(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):o?e.reportError(new GraphQLError(`There can be only one ${i} type in schema.`,[o,t])):n[i]=t}return!1}},function(e){const t=Object.create(null),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(null==n||!n.getType(i))return t[i]?e.reportError(new GraphQLError(`There can be only one type named "${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,r.name))}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.values)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value,i=n[o];Ae(i)&&i.getValue(r)?e.reportError(new GraphQLError(`Enum value "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Enum value "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const o=t.name.value;r[o]||(r[o]=Object.create(null));const s=null!==(i=t.fields)&&void 0!==i?i:[],a=r[o];for(const t of s){const r=t.name.value;Rn(n[o],r)?e.reportError(new GraphQLError(`Field "${o}.${r}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):a[r]?e.reportError(new GraphQLError(`Field "${o}.${r}" can only be defined once.`,[a[r],t.name])):a[r]=t.name}return!1}},function(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,i=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of i){var o;n(`${r}.${e.name.value}`,null!==(o=e.arguments)&&void 0!==o?o:[])}return!1}function n(t,n){const r=xn(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.`,i.map((e=>e.name))));return!1}},function(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(r){const i=r.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new GraphQLError(`There can be only one directive named "@${i}".`,[t[i],r.name])):t[i]=r.name,!1;e.reportError(new GraphQLError(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,r.name))}}},an,sn,Fn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)nn(t)&&(n[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=n[o],a=null==t?void 0:t.getType(o);let c;if(s?c=In[s.kind]:a&&(c=function(e){if(be(e))return m.SCALAR_TYPE_EXTENSION;if(Oe(e))return m.OBJECT_TYPE_EXTENSION;if(Se(e))return m.INTERFACE_TYPE_EXTENSION;if(Le(e))return m.UNION_TYPE_EXTENSION;if(Ae(e))return m.ENUM_TYPE_EXTENSION;if(De(e))return m.INPUT_OBJECT_TYPE_EXTENSION;r(!1,"Unexpected type: "+P(e))}(a)),c){if(c!==i.kind){const t=function(e){switch(e){case m.SCALAR_TYPE_EXTENSION:return"scalar";case m.OBJECT_TYPE_EXTENSION:return"object";case m.INTERFACE_TYPE_EXTENSION:return"interface";case m.UNION_TYPE_EXTENSION:return"union";case m.ENUM_TYPE_EXTENSION:return"enum";case m.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:r(!1,"Unexpected kind: "+P(e))}}(i.kind);e.reportError(new GraphQLError(`Cannot extend non-${t} type "${o}".`,s?[s,i]:i))}}else{const r=re(o,Object.keys({...n,...null==t?void 0:t.getTypeMap()}));e.reportError(new GraphQLError(`Cannot extend type "${o}" because it is not defined.`+K(r),i.name))}}},on,kn,Cn,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===m.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===m.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=Object.create(null),r=[e.selectionSet];let i;for(;i=r.pop();)for(const e of this.getFragmentSpreads(i)){const i=e.name.value;if(!0!==n[i]){n[i]=!0;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);le(e,en(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 Un(e,n,r=Qn,i,o=new TypeInfo(e)){var s;const a=null!==(s=null==i?void 0:i.maxErrors)&&void 0!==s?s:100;n||t(!1,"Must provide document."),function(e){const t=jt(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const c=Object.freeze({}),u=[],l=new ValidationContext(e,n,o,(e=>{if(u.length>=a)throw u.push(new GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),c;u.push(e)})),p=pe(r.map((e=>e(l))));try{le(n,en(o,p))}catch(e){if(e!==c)throw e}return u}function Vn(e,t,n=jn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Mn(e,r){n(e)&&n(e.__schema)||t(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${P(e)}.`);const i=e.__schema,o=W(i.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case wt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case wt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case wt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case wt.UNION:return function(e){if(!e.possibleTypes){const t=P(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new GraphQLUnionType({name:e.name,description:e.description,types:()=>e.possibleTypes.map(d)})}(e);case wt.ENUM:return function(e){if(!e.enumValues){const t=P(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new GraphQLEnumType({name:e.name,description:e.description,values:W(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case wt.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=P(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new GraphQLInputObjectType({name:e.name,description:e.description,fields:()=>E(e.inputFields)})}(e)}var t;var n;var r;const i=P(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}.`)}(e)));for(const e of[...pt,...Ct])o[e.name]&&(o[e.name]=e);const s=i.queryType?d(i.queryType):null,a=i.mutationType?d(i.mutationType):null,c=i.subscriptionType?d(i.subscriptionType):null,u=i.directives?i.directives.map((function(e){if(!e.args){const t=P(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=P(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:E(e.args)})})):[];return new GraphQLSchema({description:i.description,query:s,mutation:a,subscription:c,types:Object.values(o),directives:u,assumeValid:null==r?void 0:r.assumeValid});function l(e){if(e.kind===wt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===wt.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=l(t);return new GraphQLNonNull(function(e){if(!Qe(e))throw new Error(`Expected ${P(e)} to be a GraphQL nullable type.`);return e}(n))}return p(e)}function p(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${P(e)}.`);const n=o[t];if(!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 d(e){return function(e){if(!Oe(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Se(e))throw new Error(`Expected ${P(e)} to be a GraphQL Interface type.`);return e}(p(e))}function h(e){if(null===e.interfaces&&e.kind===wt.INTERFACE)return[];if(!e.interfaces){const t=P(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(f)}function m(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${P(e)}.`);return W(e.fields,(e=>e.name),y)}function y(e){const t=l(e.type);if(!Fe(t)){const e=P(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=P(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:E(e.args)}}function E(e){return W(e,(e=>e.name),T)}function T(e){const t=l(e.type);if(!ke(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?bn(function(e,t){const n=new Parser(e,t);n.expectToken(v.SOF);const r=n.parseValueLiteral(!1);return n.expectToken(v.EOF),r}(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}function Pn(e,t,n){var i,o,s,a;const c=[],u=Object.create(null),l=[];let p;const d=[];for(const e of t.definitions)if(e.kind===m.SCHEMA_DEFINITION)p=e;else if(e.kind===m.SCHEMA_EXTENSION)d.push(e);else if(nn(e))c.push(e);else if(rn(e)){const t=e.name.value,n=u[t];u[t]=n?n.concat([e]):[e]}else e.kind===m.DIRECTIVE_DEFINITION&&l.push(e);if(0===Object.keys(u).length&&0===c.length&&0===l.length&&0===d.length&&null==p)return e;const f=Object.create(null);for(const t of e.types)f[t.name]=T(t);for(const e of c){var h;const t=e.name.value;f[t]=null!==(h=Bn[t])&&void 0!==h?h:x(e)}const v={query:e.query&&E(e.query),mutation:e.mutation&&E(e.mutation),subscription:e.subscription&&E(e.subscription),...p&&g([p]),...g(d)};return{description:null===(i=p)||void 0===i||null===(o=i.description)||void 0===o?void 0:o.value,...v,types:Object.values(f),directives:[...e.directives.map((function(e){const t=e.toConfig();return new GraphQLDirective({...t,args:Z(t.args,I)})})),...l.map((function(e){var t;return new GraphQLDirective({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:S(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(s=p)&&void 0!==s?s:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(d),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a};function y(e){return we(e)?new GraphQLList(y(e.ofType)):xe(e)?new GraphQLNonNull(y(e.ofType)):E(e)}function E(e){return f[e.name]}function T(e){return Gt(e)||dt(e)?e:be(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];let i=n.specifiedByURL;for(const e of r){var o;i=null!==(o=Jn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Oe(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLObjectType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Se(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Le(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLUnionType({...n,types:()=>[...e.getTypes().map(E),...w(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):Ae(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[e.name])&&void 0!==t?t:[];return new GraphQLEnumType({...n,values:{...n.values,...A(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):De(e)?function(e){var t;const n=e.toConfig(),r=null!==(t=u[n.name])&&void 0!==t?t:[];return new GraphQLInputObjectType({...n,fields:()=>({...Z(n.fields,(e=>({...e,type:y(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):void r(!1,"Unexpected type: "+P(e))}function N(e){return{...e,type:y(e.type),args:e.args&&Z(e.args,I)}}function I(e){return{...e,type:y(e.type)}}function g(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=_(n.type)}return t}function _(e){var t;const n=e.name.value,r=null!==(t=Bn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function b(e){return e.kind===m.LIST_TYPE?new GraphQLList(b(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(b(e.type)):_(e)}function O(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:b(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:S(n.arguments),deprecationReason:Yn(n),astNode:n}}}return t}function S(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=b(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:bn(e.defaultValue,t),deprecationReason:Yn(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=b(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:bn(n.defaultValue,e),deprecationReason:Yn(n),astNode:n}}}return t}function A(e){const t=Object.create(null);for(const i of e){var n;const e=null!==(n=i.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:Yn(n),astNode:n}}}return t}function D(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function w(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(_))&&void 0!==t?t:[]}))}function x(e){var t;const n=e.name.value,r=null!==(t=u[n])&&void 0!==t?t:[];switch(e.kind){case m.OBJECT_TYPE_DEFINITION:{var i;const t=[e,...r];return new GraphQLObjectType({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.INTERFACE_TYPE_DEFINITION:{var o;const t=[e,...r];return new GraphQLInterfaceType({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>D(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case m.ENUM_TYPE_DEFINITION:{var s;const t=[e,...r];return new GraphQLEnumType({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,values:A(t),astNode:e,extensionASTNodes:r})}case m.UNION_TYPE_DEFINITION:{var a;const t=[e,...r];return new GraphQLUnionType({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,types:()=>w(t),astNode:e,extensionASTNodes:r})}case m.SCALAR_TYPE_DEFINITION:var c;return new GraphQLScalarType({name:n,description:null===(c=e.description)||void 0===c?void 0:c.value,specifiedByURL:Jn(e),astNode:e,extensionASTNodes:r});case m.INPUT_OBJECT_TYPE_DEFINITION:{var l;const t=[e,...r];return new GraphQLInputObjectType({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const Bn=H([...pt,...Ct],(e=>e.name));function Yn(e){const t=Sn(Et,e);return null==t?void 0:t.reason}function Jn(e){const t=Sn(Tt,e);return null==t?void 0:t.url}function qn(e,n){null!=e&&e.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&function(e){const t=Vn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Pn({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,n);if(null==r.astNode)for(const e of r.types)switch(e.name){case"Query":r.query=e;break;case"Mutation":r.mutation=e;break;case"Subscription":r.subscription=e}const i=[...r.directives,...Nt.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Xn(e){return function(e,t,n){const i=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[zn(e),...i.map((e=>function(e){return rr(e)+"directive @"+e.name+er(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(be(e))return function(e){return rr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(Oe(e))return function(e){return rr(e)+`type ${e.name}`+Hn(e)+Wn(e)}(e);if(Se(e))return function(e){return rr(e)+`interface ${e.name}`+Hn(e)+Wn(e)}(e);if(Le(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return rr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>rr(e," ",!t)+" "+e.name+nr(e.deprecationReason)));return rr(e)+`enum ${e.name}`+Zn(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+tr(e)));return rr(e)+`input ${e.name}`+Zn(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!Nt.some((({name:e})=>e===t.name));var t}),Kn)}function Kn(e){return!dt(e)&&!Gt(e)}function zn(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();if(r&&"Subscription"!==r.name)return!1;return!0}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),rr(e)+`schema {\n${t.join("\n")}\n}`}function Hn(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Wn(e){return Zn(Object.values(e.getFields()).map(((e,t)=>rr(e," ",!t)+" "+e.name+er(e.args," ")+": "+String(e.type)+nr(e.deprecationReason))))}function Zn(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function er(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(tr).join(", ")+")":"(\n"+e.map(((e,n)=>rr(e," "+t,!n)+" "+t+tr(e))).join("\n")+"\n"+t+")"}function tr(e){const t=It(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+nr(e.deprecationReason)}function nr(e){if(null==e)return"";if(e!==yt){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function rr(e,t="",n=!0){const{description:r}=e;if(null==r)return"";return(t&&!n?"\n"+t:t)+fe({kind:m.STRING,value:r,block:b(r)}).replace(/\n/g,"\n"+t)+"\n"}const ir=[un],or=[function(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.",t)),!1)}},function(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.",t))}}},...Qn.filter((e=>!ir.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function sr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function ar(e){return e.startsWith("__")}function cr(e){return null!=e}function ur(e){switch(e.kind){case m.VARIABLE:return{kind:e.kind,value:e.name.value};case m.LIST:return{kind:e.kind,value:e.values.map(ur)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=ur(t.value),e)),{})};default:return e}}function lr(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 pr(e,t){const n=new Map;for(const e of t.definitions)e.kind===m.FRAGMENT_DEFINITION&&n.set(e.name.value,e);const r=[],i=new Map,o=new Set;for(const e of t.definitions)e.kind===m.OPERATION_DEFINITION&&r.push(a(e));for(const[e,t]of n.entries())i.set(e,c(t));return{operations:r,fragments:Array.from(i.values()),referencedTypes:Array.from(o.values())};function s(t){if(o.add(t),Le(t)){const e=t.getTypes();for(t of e)o.add(Ve(t))}De(t)&&function(t){var n;const r=null===(n=t.astNode)||void 0===n?void 0:n.fields;if(r)for(const t of r){s(Ve(Wt(e,t.type)))}}(t)}function a(t){if(!t.name)throw new GraphQLError("Operations should be named",t);const n=lr(t),r=t.name.value,i=t.operation,a=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?ur(t.defaultValue):void 0,i=Wt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,{nodes:t});return s(Ve(i)),{name:n,type:i,defaultValue:r}})),c=fe(t),l=e.getRootType(i);return o.add(Ve(l)),{filePath:n,name:r,operationType:i,rootType:l,variables:a,source:c,selectionSet:u(t.selectionSet,l)}}function c(t){const n=t.name.value,r=lr(t),i=fe(t),o=Wt(e,t.typeCondition);return s(Ve(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r,o=new Set){return{parentType:r,selections:t.selections.map((t=>function(t,r,o){var a;switch(t.kind){case m.FIELD:{const n=t.name.value,i=null===(a=t.alias)||void 0===a?void 0:a.value,o=function(e,t,n){return n===kt.name&&e.getQueryType()===t?kt:n===Ft.name&&e.getQueryType()===t?Ft:n===Rt.name&&(Oe(t)||Se(t)||Le(t))?Rt:Oe(t)||Se(t)?t.getFields()[n]:void 0}(e,r,n);if(!o)throw new GraphQLError(`Cannot query field "${n}" on type "${String(r)}"`,{nodes:t});const c=o.type,l=Ve(c);s(Ve(l));const{description:p,deprecationReason:d}=o,f=t.arguments&&t.arguments.length>0?t.arguments.map((e=>{const n=e.name.value,r=o.args.find((t=>t.name===e.name.value)),i=null==r?void 0:r.type;if(!i)throw new GraphQLError(`Cannot find argument type for argument "${n}" on field "${t.name.value}"`,{nodes:[t,e]});return{name:n,value:ur(e.value),type:i}})):void 0;let h={kind:"Field",name:n,alias:i,arguments:f,type:c,description:!ar(n)&&p?p:void 0,deprecationReason:d||void 0};if(Ce(l)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,t);h.selectionSet=u(e,l)}return h}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Wt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i)}}case m.FRAGMENT_SPREAD:{const e=t.name.value;if(o.has(e))return;o.add(e);const r=function(e){let t=i.get(e);if(t)return t;const r=n.get(e);return r?(n.delete(e),t=c(r),i.set(e,t),t):void 0}(e);if(!r)throw new GraphQLError(`Unknown fragment "${e}".`,t.name);return{kind:"FragmentSpread",fragment:r}}}}(t,r,o))).filter(cr)}}}return m.FIELD,m.NAME,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){return pr(e,t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Mn(t);return sr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Vn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=qn(t,{assumeValidSDL:!0});return sr(n),n},e.mergeDocuments=function(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)},e.parseDocument=function(e){return J(e)},e.printSchemaToSDL=function(e){return Xn(e)},e.validateDocument=function(e,t){return Un(e,t,or)},Object.defineProperty(e,"__esModule",{value:!0}),e}({});