From 55623fe601da45b18932b3d3cfe0057fe3ee0b6b Mon Sep 17 00:00:00 2001 From: Anthony Miller Date: Tue, 14 Jun 2022 13:29:11 -0700 Subject: [PATCH] Generate local cache mutations (#2311) * Create base API for cache writes * WIP: Writing test for cache mutations * Make DataDict mutable * WIP: Cache Mutation Tests * Remove mock mutable selection set * Add _modify to DataDict * Fixed some more tests * Re-add MockMutableRootSelectionSet as protocol instead of class * JSONDecodingError Equatable * Test deletion of referenced record throws error * Add default __typename get/setter to MutableRootSelectionSet * Test for adding new entity reference to cache mutation * Finished ReadWriteFromStoreTests Refactor * Fix StoreConcurrencyTests * Fix WatchQueryTests * Fix SQLIteCacheTests * Add other operations and fragments to supported locations for cache mutation directive * Add operationType to LocalCacheMutation * Create LocalCacheMutationDefinitionTemplate and break out shared code from OperationDefinitionTemplate * Make MutableSelectionSet conform to SelectionSet * Generate SelectionSet Mutable TypeName * Generate mutable field accessors * WIP * Generate Named Fragment getter and setter * Finish generation of mutable selection sets * Generate Mutable Fragments * Compile directives on FragmentDefinition * Improve __typename addition functionality in frontend * Pretty print actual rendered on template test failure * Strip local cache mutation directive from source definition * Fix bug where __typename was added to inline fragments in Frontend * Make Fragment definition generate selection set as mutable for local cache mutations * Generate Local Cache Mutations into separate folder * Add inclusion conditions to generated Fragment Accessors (#2312) * Add resolution of inclusion conditions for conditional fragment conversion * Generate inclusion conditions on Fragment Gettters * Test * Add Mutable Typealiases to generated Schema. Clean up * Fixes for code review comments --- Apollo.xcodeproj/project.pbxproj | 33 ++ .../AllAnimalsLocalCacheMutation.swift | 72 ++++ .../PetDetailsMutation.swift | 47 ++ .../AllAnimalsIncludeSkipQuery.swift | 6 +- .../Sources/Schema/Schema.swift | 8 +- .../AllAnimalsLocalCacheMutation.graphql | 9 + .../graphql/PetDetailsMutation.graphql | 5 + Sources/ApolloAPI/FragmentProtocols.swift | 30 +- Sources/ApolloAPI/LocalCacheMutation.swift | 17 +- .../FileGenerators/FileGenerator.swift | 4 + .../Frontend/CompilationResult.swift | 30 +- .../sourceDefinitionTransformTests.ts | 163 +++++++ .../Frontend/JavaScript/src/compiler/index.ts | 9 +- .../Frontend/JavaScript/src/compiler/ir.ts | 1 + .../utilities/apolloCodegenSchemaExtension.ts | 2 +- .../JavaScript/src/utilities/graphql.ts | 79 ++-- .../dist/ApolloCodegenFrontend.bundle.js | 2 +- Sources/ApolloCodegenLib/TemplateString.swift | 14 + .../Templates/FragmentTemplate.swift | 12 +- ...LocalCacheMutationDefinitionTemplate.swift | 31 ++ .../OperationDefinitionTemplate.swift | 47 +- .../OperationTemplateRenderer.swift | 54 +++ .../Templates/SchemaTemplate.swift | 6 + .../Templates/SelectionSetTemplate.swift | 113 ++++- Sources/StarWarsAPI/Package.swift | 28 -- Sources/StarWarsAPI/StarWarsAPI/Package.swift | 2 +- ...ilsFragmentConditionalInclusionQuery.swift | 2 +- Sources/UploadAPI/UploadAPI/Package.swift | 2 +- .../xcschemes/Codegen-Package.xcscheme | 2 +- .../xcshareddata/xcschemes/Codegen.xcscheme | 20 +- .../xcschemes/DocumentationGenerator.xcscheme | 2 +- .../xcschemes/SchemaDownload.xcscheme | 2 +- .../ApolloCodegenConfigurationTests.swift | 2 + .../ApolloCodegenTests.swift | 6 + .../FragmentFileGeneratorTests.swift | 32 +- .../Templates/FragmentTemplateTests.swift | 94 ++++ ...CacheMutationDefinitionTemplateTests.swift | 368 ++++++++++++++++ .../OperationDefinitionTemplateTests.swift | 2 - .../Templates/SchemaTemplateTests.swift | 18 + .../SelectionSetTemplateTests.swift | 54 ++- ...SetTemplate_LocalCacheMutation_Tests.swift | 407 ++++++++++++++++++ ...ionSetTemplate_RenderOperation_Tests.swift | 2 +- .../TestHelpers/LineByLineComparison.swift | 30 +- .../Cache/ReadWriteFromStoreTests.swift | 27 +- Tests/ApolloTests/SelectionSetTests.swift | 66 +++ .../Apollo-CodegenTestPlan.xctestplan | 1 + 46 files changed, 1773 insertions(+), 190 deletions(-) create mode 100644 Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/AllAnimalsLocalCacheMutation.swift create mode 100644 Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/PetDetailsMutation.swift create mode 100644 Sources/AnimalKingdomAPI/graphql/AllAnimalsLocalCacheMutation.graphql create mode 100644 Sources/AnimalKingdomAPI/graphql/PetDetailsMutation.graphql create mode 100644 Sources/ApolloCodegenLib/Frontend/JavaScript/src/__tests__/sourceDefinitionTransformTests.ts create mode 100644 Sources/ApolloCodegenLib/Templates/LocalCacheMutationDefinitionTemplate.swift create mode 100644 Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationTemplateRenderer.swift delete mode 100644 Sources/StarWarsAPI/Package.swift create mode 100644 Tests/ApolloCodegenTests/CodeGeneration/Templates/LocalCacheMutationDefinitionTemplateTests.swift create mode 100644 Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_LocalCacheMutation_Tests.swift diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 7ed8934a8a..29a9bcefb5 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -255,7 +255,13 @@ 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 */; }; + DE71FDBC2853B67C005FA9CC /* LocalCacheMutationDefinitionTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDBB2853B67C005FA9CC /* LocalCacheMutationDefinitionTemplate.swift */; }; + DE71FDBE2853B6D3005FA9CC /* LocalCacheMutationDefinitionTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDBD2853B6D3005FA9CC /* LocalCacheMutationDefinitionTemplateTests.swift */; }; + DE71FDC02853C242005FA9CC /* OperationTemplateRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDBF2853C242005FA9CC /* OperationTemplateRenderer.swift */; }; DE71FDC22853C4C8005FA9CC /* MockLocalCacheMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDC12853C4C8005FA9CC /* MockLocalCacheMutation.swift */; }; + DE71FDC42853D681005FA9CC /* SelectionSetTemplate_LocalCacheMutation_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDC32853D681005FA9CC /* SelectionSetTemplate_LocalCacheMutation_Tests.swift */; }; + DE71FDC82857CF1E005FA9CC /* AllAnimalsLocalCacheMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDC62857CF1E005FA9CC /* AllAnimalsLocalCacheMutation.swift */; }; + DE71FDC92857CF1E005FA9CC /* PetDetailsMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE71FDC72857CF1E005FA9CC /* PetDetailsMutation.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 */; }; @@ -1141,7 +1147,13 @@ 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 = ""; }; + DE71FDBB2853B67C005FA9CC /* LocalCacheMutationDefinitionTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalCacheMutationDefinitionTemplate.swift; sourceTree = ""; }; + DE71FDBD2853B6D3005FA9CC /* LocalCacheMutationDefinitionTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalCacheMutationDefinitionTemplateTests.swift; sourceTree = ""; }; + DE71FDBF2853C242005FA9CC /* OperationTemplateRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationTemplateRenderer.swift; sourceTree = ""; }; DE71FDC12853C4C8005FA9CC /* MockLocalCacheMutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockLocalCacheMutation.swift; sourceTree = ""; }; + DE71FDC32853D681005FA9CC /* SelectionSetTemplate_LocalCacheMutation_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectionSetTemplate_LocalCacheMutation_Tests.swift; sourceTree = ""; }; + DE71FDC62857CF1E005FA9CC /* AllAnimalsLocalCacheMutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllAnimalsLocalCacheMutation.swift; sourceTree = ""; }; + DE71FDC72857CF1E005FA9CC /* PetDetailsMutation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetDetailsMutation.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 = ""; }; @@ -2282,6 +2294,7 @@ isa = PBXGroup; children = ( DE296536279B3B8200BF9B49 /* SelectionSetTemplateTests.swift */, + DE71FDC32853D681005FA9CC /* SelectionSetTemplate_LocalCacheMutation_Tests.swift */, DE296538279B3B8200BF9B49 /* SelectionSetTemplate_RenderOperation_Tests.swift */, ); path = SelectionSet; @@ -2350,6 +2363,7 @@ E6203343284F1D1100A291D1 /* MockUnionTemplate.swift */, E64F7EC027A122300059C021 /* ObjectTemplate.swift */, DE5FD5FC2769222D0033EE23 /* OperationDefinitionTemplate.swift */, + DE71FDBB2853B67C005FA9CC /* LocalCacheMutationDefinitionTemplate.swift */, E6EE62F027DBE6F200627257 /* SchemaModuleNamespaceTemplate.swift */, DE5FD60427694FA70033EE23 /* SchemaTemplate.swift */, DE2739102769AEBA00B886EF /* SelectionSetTemplate.swift */, @@ -2375,6 +2389,7 @@ DE6D07FA27BC3BE9009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift */, DE09F9C5270269F800795949 /* OperationDefinitionTemplate_DocumentType_Tests.swift */, DE09066E27A4713F00211300 /* OperationDefinitionTemplateTests.swift */, + DE71FDBD2853B6D3005FA9CC /* LocalCacheMutationDefinitionTemplateTests.swift */, E6EE62F227DBE75A00627257 /* SchemaModuleNamespaceTemplateTests.swift */, DE5FD608276956C70033EE23 /* SchemaTemplateTests.swift */, E6B42D0C27A4749100A3BD58 /* SwiftPackageManagerModuleTemplateTests.swift */, @@ -2390,6 +2405,7 @@ isa = PBXGroup; children = ( E66C014127FEB84F00FF5FA1 /* Operations */, + DE71FDC52857CF1E005FA9CC /* LocalCacheMutations */, E66C015427FEB86800FF5FA1 /* Schema */, 96F32D3A27CCD16B00F3383C /* graphql */, DE3C79A9260A6ACD00D2F4FF /* AnimalKingdomAPI.h */, @@ -2479,10 +2495,21 @@ DE6D07F827BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift */, DE6D07FE27BC7F78009F5F33 /* InputVariableRenderable.swift */, DE6B650B27C4293D00970E4E /* FieldArgumentRendering.swift */, + DE71FDBF2853C242005FA9CC /* OperationTemplateRenderer.swift */, ); path = RenderingHelpers; sourceTree = ""; }; + DE71FDC52857CF1E005FA9CC /* LocalCacheMutations */ = { + isa = PBXGroup; + children = ( + DE71FDC62857CF1E005FA9CC /* AllAnimalsLocalCacheMutation.swift */, + DE71FDC72857CF1E005FA9CC /* PetDetailsMutation.swift */, + ); + name = LocalCacheMutations; + path = AnimalKingdomAPI/Sources/LocalCacheMutations; + sourceTree = ""; + }; DE90FCD727FCC6D20084CC79 /* Operations */ = { isa = PBXGroup; children = ( @@ -3843,6 +3870,7 @@ E610D8DB278EB0900023E495 /* InterfaceFileGenerator.swift in Sources */, 9B7B6F69233C2C0C00F32205 /* FileManager+Apollo.swift in Sources */, E674DB41274C0A9B009BB90E /* Glob.swift in Sources */, + DE71FDC02853C242005FA9CC /* OperationTemplateRenderer.swift in Sources */, E6203342284F1C9600A291D1 /* MockUnionFileGenerator.swift in Sources */, DE6D07F927BC3B6D009F5F33 /* GraphQLInputField+Rendered.swift in Sources */, 9F1A966C258F34BB00A06EEB /* GraphQLSchema.swift in Sources */, @@ -3859,6 +3887,7 @@ DE09114E27288B1F000648E5 /* SortedSelections.swift in Sources */, DE5FD607276950CC0033EE23 /* IR+Schema.swift in Sources */, E69BEDA52798B86D00000D10 /* InputObjectTemplate.swift in Sources */, + DE71FDBC2853B67C005FA9CC /* LocalCacheMutationDefinitionTemplate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3942,9 +3971,11 @@ E61EF713275EC99A00191DA7 /* ApolloCodegenTests.swift in Sources */, DE6D07FD27BC3D53009F5F33 /* OperationDefinition_VariableDefinition_Tests.swift in Sources */, E6B4E9992798A8CB004EC8C4 /* InterfaceTemplateTests.swift in Sources */, + DE71FDBE2853B6D3005FA9CC /* LocalCacheMutationDefinitionTemplateTests.swift in Sources */, E6EFDD0B27E8328E00B17FE5 /* TemplateRenderer_SchemaFile_Tests.swift in Sources */, E6A6866627F63BDC008A1D13 /* FileGenerator_ResolvePath_Tests.swift in Sources */, 9F62DF8E2590539A00E6E808 /* SchemaIntrospectionTests.swift in Sources */, + DE71FDC42853D681005FA9CC /* SelectionSetTemplate_LocalCacheMutation_Tests.swift in Sources */, E6D90D0D278FFE35009CAC5D /* SchemaFileGeneratorTests.swift in Sources */, E6B42D0B27A4746800A3BD58 /* SchemaModuleFileGeneratorTests.swift in Sources */, 9B68F0552416B33300E97318 /* LineByLineComparison.swift in Sources */, @@ -4245,6 +4276,7 @@ E66C015127FEB84F00FF5FA1 /* WarmBloodedDetails.swift in Sources */, E66C014C27FEB84F00FF5FA1 /* PetDetails.swift in Sources */, E66C016E27FEB86800FF5FA1 /* RelativeSize.swift in Sources */, + DE71FDC92857CF1E005FA9CC /* PetDetailsMutation.swift in Sources */, DE223C24271F335D004A0148 /* Resources.swift in Sources */, E66C017C27FEB86800FF5FA1 /* Pet.swift in Sources */, E66C014D27FEB84F00FF5FA1 /* HeightInMeters.swift in Sources */, @@ -4258,6 +4290,7 @@ E66C014F27FEB84F00FF5FA1 /* ClassroomPetsQuery.swift in Sources */, E676333427FF857D00D8B953 /* HousePet.swift in Sources */, E66C014E27FEB84F00FF5FA1 /* ClassroomPetDetails.swift in Sources */, + DE71FDC82857CF1E005FA9CC /* AllAnimalsLocalCacheMutation.swift in Sources */, E66C016D27FEB86800FF5FA1 /* SkinCovering.swift in Sources */, E66C017427FEB86800FF5FA1 /* Rat.swift in Sources */, E66C017527FEB86800FF5FA1 /* Height.swift in Sources */, diff --git a/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/AllAnimalsLocalCacheMutation.swift b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/AllAnimalsLocalCacheMutation.swift new file mode 100644 index 0000000000..28572ce585 --- /dev/null +++ b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/AllAnimalsLocalCacheMutation.swift @@ -0,0 +1,72 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI +@_exported import enum ApolloAPI.GraphQLEnum +@_exported import enum ApolloAPI.GraphQLNullable + +public class AllAnimalsLocalCacheMutation: GraphQLQuery { + public static let operationName: String = "AllAnimalsLocalCacheMutation" + public static let document: DocumentType = .notPersisted( + definition: .init( + """ + query AllAnimalsLocalCacheMutation { + allAnimals { + __typename + species + skinCovering + ... on Bird { + wingspan + } + } + } + """ + )) + + public init() {} + + 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("allAnimals", [AllAnimal].self), + ] } + + public var allAnimals: [AllAnimal] { data["allAnimals"] } + + /// AllAnimal + public struct AllAnimal: AnimalKingdomAPI.SelectionSet { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Interface(AnimalKingdomAPI.Animal.self) } + public static var selections: [Selection] { [ + .field("species", String.self), + .field("skinCovering", GraphQLEnum?.self), + .inlineFragment(AsBird.self), + ] } + + public var species: String { data["species"] } + public var skinCovering: GraphQLEnum? { data["skinCovering"] } + + public var asBird: AsBird? { _asInlineFragment() } + + /// AllAnimal.AsBird + public struct AsBird: AnimalKingdomAPI.InlineFragment { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Bird.self) } + public static var selections: [Selection] { [ + .field("wingspan", Float.self), + ] } + + public var wingspan: Float { data["wingspan"] } + public var species: String { data["species"] } + public var skinCovering: GraphQLEnum? { data["skinCovering"] } + } + } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/PetDetailsMutation.swift b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/PetDetailsMutation.swift new file mode 100644 index 0000000000..c1b36123a4 --- /dev/null +++ b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/PetDetailsMutation.swift @@ -0,0 +1,47 @@ +// @generated +// This file was automatically generated and should not be edited. + +import ApolloAPI +@_exported import enum ApolloAPI.GraphQLEnum +@_exported import enum ApolloAPI.GraphQLNullable + +public struct PetDetailsMutation: AnimalKingdomAPI.MutableSelectionSet, Fragment { + public static var fragmentDefinition: StaticString { """ + fragment PetDetailsMutation on Pet { + __typename + owner { + __typename + firstName + } + } + """ } + + public var data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Interface(AnimalKingdomAPI.Pet.self) } + public static var selections: [Selection] { [ + .field("owner", Owner?.self), + ] } + + public var owner: Owner? { + get { data["owner"] } + set { data["owner"] = newValue } + } + + /// Owner + public struct Owner: AnimalKingdomAPI.MutableSelectionSet { + public var data: DataDict + public init(data: DataDict) { self.data = data } + + public static var __parentType: ParentType { .Object(AnimalKingdomAPI.Human.self) } + public static var selections: [Selection] { [ + .field("firstName", String.self), + ] } + + public var firstName: String { + get { data["firstName"] } + set { data["firstName"] = newValue } + } + } +} \ No newline at end of file diff --git a/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Operations/AllAnimalsIncludeSkipQuery.swift b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Operations/AllAnimalsIncludeSkipQuery.swift index e6d0cf5068..56fd22f23c 100644 --- a/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Operations/AllAnimalsIncludeSkipQuery.swift +++ b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Operations/AllAnimalsIncludeSkipQuery.swift @@ -128,7 +128,7 @@ public class AllAnimalsIncludeSkipQuery: GraphQLQuery { public let data: DataDict public init(data: DataDict) { self.data = data } - public var heightInMeters: HeightInMeters? { _toFragment() } + public var heightInMeters: HeightInMeters? { _toFragment(if: !"skipHeightInMeters") } } /// AllAnimal.Height @@ -289,7 +289,7 @@ public class AllAnimalsIncludeSkipQuery: GraphQLQuery { public init(data: DataDict) { self.data = data } public var petDetails: PetDetails { _toFragment() } - public var heightInMeters: HeightInMeters? { _toFragment() } + public var heightInMeters: HeightInMeters? { _toFragment(if: !"skipHeightInMeters") } } /// AllAnimal.AsPet.Height @@ -421,7 +421,7 @@ public class AllAnimalsIncludeSkipQuery: GraphQLQuery { public let data: DataDict public init(data: DataDict) { self.data = data } - public var heightInMeters: HeightInMeters? { _toFragment() } + public var heightInMeters: HeightInMeters? { _toFragment(if: !"skipHeightInMeters") } } /// AllAnimal.AsClassroomPet.Height diff --git a/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Schema/Schema.swift b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Schema/Schema.swift index 6b7aae2f1b..f487f23624 100644 --- a/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Schema/Schema.swift +++ b/Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Schema/Schema.swift @@ -11,6 +11,12 @@ where Schema == AnimalKingdomAPI.Schema {} public protocol InlineFragment: ApolloAPI.SelectionSet & ApolloAPI.InlineFragment where Schema == AnimalKingdomAPI.Schema {} +public protocol MutableSelectionSet: ApolloAPI.MutableRootSelectionSet +where Schema == AnimalKingdomAPI.Schema {} + +public protocol MutableInlineFragment: ApolloAPI.MutableSelectionSet & ApolloAPI.InlineFragment +where Schema == AnimalKingdomAPI.Schema {} + public enum Schema: SchemaConfiguration { public static func objectType(forTypename __typename: String) -> Object.Type? { switch __typename { @@ -28,4 +34,4 @@ public enum Schema: SchemaConfiguration { default: return nil } } -} \ No newline at end of file +} diff --git a/Sources/AnimalKingdomAPI/graphql/AllAnimalsLocalCacheMutation.graphql b/Sources/AnimalKingdomAPI/graphql/AllAnimalsLocalCacheMutation.graphql new file mode 100644 index 0000000000..2718190c4b --- /dev/null +++ b/Sources/AnimalKingdomAPI/graphql/AllAnimalsLocalCacheMutation.graphql @@ -0,0 +1,9 @@ +query AllAnimalsLocalCacheMutation @apollo_client_ios_localCacheMutation { + allAnimals { + species + skinCovering + ... on Bird { + wingspan + } + } +} diff --git a/Sources/AnimalKingdomAPI/graphql/PetDetailsMutation.graphql b/Sources/AnimalKingdomAPI/graphql/PetDetailsMutation.graphql new file mode 100644 index 0000000000..e3e719b06e --- /dev/null +++ b/Sources/AnimalKingdomAPI/graphql/PetDetailsMutation.graphql @@ -0,0 +1,5 @@ +fragment PetDetailsMutation on Pet @apollo_client_ios_localCacheMutation { + owner { + firstName + } +} diff --git a/Sources/ApolloAPI/FragmentProtocols.swift b/Sources/ApolloAPI/FragmentProtocols.swift index a85f7cbe84..356c5afee7 100644 --- a/Sources/ApolloAPI/FragmentProtocols.swift +++ b/Sources/ApolloAPI/FragmentProtocols.swift @@ -14,16 +14,42 @@ public protocol FragmentContainer { init(data: DataDict) } -public extension FragmentContainer { +extension FragmentContainer { /// Converts a `SelectionSet` to a `Fragment` given a generic fragment type. /// /// - Warning: This function is not supported for use outside of generated call sites. /// Generated call sites are guaranteed by the GraphQL compiler to be safe. /// Unsupported usage may result in unintended consequences including crashes. - func _toFragment() -> T { + @inlinable public func _toFragment() -> T { + _convertToFragment() + } + + @usableFromInline func _convertToFragment()-> T { return T.init(data: data) } + + @inlinable public func _toFragment( + if conditions: Selection.Conditions? = nil + ) -> T? { + guard let conditions = conditions else { + return _convertToFragment() + } + + return conditions.evaluate(with: data._variables) ? _convertToFragment() : nil + } + + @inlinable public func _toFragment( + if conditions: [Selection.Condition] + ) -> T? { + return _toFragment(if: Selection.Conditions([conditions])) + } + + @inlinable public func _toFragment( + if condition: Selection.Condition + ) -> T? { + return _toFragment(if: Selection.Conditions(condition)) + } } /// A `FragmentContainer` to be used by `SelectionSet`s that have no fragments. diff --git a/Sources/ApolloAPI/LocalCacheMutation.swift b/Sources/ApolloAPI/LocalCacheMutation.swift index 3752e827e3..efac37571d 100644 --- a/Sources/ApolloAPI/LocalCacheMutation.swift +++ b/Sources/ApolloAPI/LocalCacheMutation.swift @@ -9,13 +9,17 @@ public protocol LocalCacheMutation: AnyObject, Hashable { } public extension LocalCacheMutation { - static func ==(lhs: Self, rhs: Self) -> Bool { - lhs.variables?.jsonEncodableValue?.jsonValue == rhs.variables?.jsonEncodableValue?.jsonValue + var variables: GraphQLOperation.Variables? { + return nil } func hash(into hasher: inout Hasher) { hasher.combine(variables?.jsonEncodableValue?.jsonValue) } + + static func ==(lhs: Self, rhs: Self) -> Bool { + lhs.variables?.jsonEncodableValue?.jsonValue == rhs.variables?.jsonEncodableValue?.jsonValue + } } public protocol MutableSelectionSet: SelectionSet { @@ -32,9 +36,14 @@ public extension MutableSelectionSet { public extension MutableSelectionSet where Fragments: FragmentContainer { @inlinable var fragments: Fragments { get { Self.Fragments(data: data) } - set { data._data = newValue.data._data} + _modify { + var f = Self.Fragments(data: data) + yield &f + self.data._data = f.data._data + } + @available(*, unavailable, message: "mutate properties of the fragment instead.") + set { preconditionFailure("") } } } public protocol MutableRootSelectionSet: RootSelectionSet, MutableSelectionSet {} - diff --git a/Sources/ApolloCodegenLib/FileGenerators/FileGenerator.swift b/Sources/ApolloCodegenLib/FileGenerators/FileGenerator.swift index e45abe0ed0..4370b6d9fe 100644 --- a/Sources/ApolloCodegenLib/FileGenerators/FileGenerator.swift +++ b/Sources/ApolloCodegenLib/FileGenerators/FileGenerator.swift @@ -59,6 +59,10 @@ enum FileTarget: Equatable { case .union: return "Unions" case .inputObject: return "InputObjects" case .customScalar: return "CustomScalars" + case let .operation(operation) where operation.isLocalCacheMutation: + return "LocalCacheMutations" + case let .fragment(fragment) where fragment.isLocalCacheMutation: + return "LocalCacheMutations" case .fragment, .operation: return "Operations" case .schema, .testMock: return "" } diff --git a/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift b/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift index 6138cdbd47..f494e47ff9 100644 --- a/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift +++ b/Sources/ApolloCodegenLib/Frontend/CompilationResult.swift @@ -2,6 +2,9 @@ import JavaScriptCore /// The output of the frontend compiler. public class CompilationResult: JavaScriptObject { + private enum Constants { + static let LocalCacheMutationDirectiveName = "apollo_client_ios_localCacheMutation" + } lazy var referencedTypes: [GraphQLNamedType] = self["referencedTypes"] lazy var operations: [OperationDefinition] = self["operations"] @@ -37,14 +40,25 @@ public class CompilationResult: JavaScriptObject { return lhs.name == rhs.name } + lazy var isLocalCacheMutation: Bool = { + directives?.contains { $0.name == Constants.LocalCacheMutationDirectiveName } ?? false + }() + lazy var nameWithSuffix: String = { - let suffix: String - switch operationType { - case .query: suffix = "Query" - case .mutation: suffix = "Mutation" - case .subscription: suffix = "Subscription" + func getSuffix() -> String { + if isLocalCacheMutation { + return "LocalCacheMutation" + } + + switch operationType { + case .query: return "Query" + case .mutation: return "Mutation" + case .subscription: return "Subscription" + } } + let suffix = getSuffix() + guard !name.hasSuffix(suffix) else { return name } @@ -87,6 +101,12 @@ public class CompilationResult: JavaScriptObject { lazy var filePath: String = self["filePath"] + lazy var directives: [Directive]? = self["directives"] + + lazy var isLocalCacheMutation: Bool = { + directives?.contains { $0.name == Constants.LocalCacheMutationDirectiveName } ?? false + }() + public override var debugDescription: String { "\(name) on \(type.debugDescription)" } diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/__tests__/sourceDefinitionTransformTests.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/__tests__/sourceDefinitionTransformTests.ts new file mode 100644 index 0000000000..355a141fd7 --- /dev/null +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/__tests__/sourceDefinitionTransformTests.ts @@ -0,0 +1,163 @@ + +import { + compileDocument, + parseDocument, + loadSchemaFromSDL +} from "../index" +import { + CompilationResult +} from "../compiler/index" +import { + Source, + GraphQLSchema, + DocumentNode +} from "graphql"; + +describe("given schema", () => { + const schemaSDL: string = +`type Query { + allAnimals: [Animal!] +} + +interface Animal { + species: String! + friend: Animal! +} + +interface Pet { + name: String! +}`; + + const schema: GraphQLSchema = loadSchemaFromSDL(new Source(schemaSDL, "Test Schema", { line: 1, column: 1 })); + + describe("given query not including __typename fields", () => { + const documentString: string = +`query Test { + allAnimals { + species + ... on Pet { + name + } + } +}`; + + const document: DocumentNode = parseDocument( + new Source(documentString, "Test Query", { line: 1, column: 1 }), + false + ); + + it("operation definition should have source including __typename field.", () => { + const compilationResult: CompilationResult = compileDocument(schema, document); + const operation = compilationResult.operations[0]; + + const expected: string = +`query Test { + allAnimals { + __typename + species + ... on Pet { + name + } + } +}`; + + expect(operation.source).toEqual(expected); + }); + }); + + describe("given query including __typename field with directive", () => { + const documentString: string = +`query Test { + allAnimals { + __typename @include(if: true) + species + ... on Pet { + name + } + } +}`; + + const document: DocumentNode = parseDocument( + new Source(documentString, "Test Query", { line: 1, column: 1 }), + false + ); + + it("operation definition should have source including __typename field with no directives.", () => { + const compilationResult: CompilationResult = compileDocument(schema, document); + const operation = compilationResult.operations[0]; + + const expected: string = +`query Test { + allAnimals { + __typename + species + ... on Pet { + name + } + } +}`; + + expect(operation.source).toEqual(expected); + }); + }); + + describe("given query with local cache mutation directive", () => { + const documentString: string = +`query Test @apollo_client_ios_localCacheMutation { + allAnimals { + species + ... on Pet { + name + } + } +}`; + + const document: DocumentNode = parseDocument( + new Source(documentString, "Test Query", { line: 1, column: 1 }), + false + ); + + it("operation definition should have source not including local cache mutation directive.", () => { + const compilationResult: CompilationResult = compileDocument(schema, document); + const operation = compilationResult.operations[0]; + + const expected: string = +`query Test { + allAnimals { + __typename + species + ... on Pet { + name + } + } +}`; + + expect(operation.source).toEqual(expected); + }); + }); + + describe("given fragment not including __typename field", () => { + const documentString: string = +`fragment Test on Animal { + species +}`; + + const document: DocumentNode = parseDocument( + new Source(documentString, "Test Fragment", { line: 1, column: 1 }), + false + ); + + it("fragment definition should have source including __typename field.", () => { + const compilationResult: CompilationResult = compileDocument(schema, document); + const fragment = compilationResult.fragments[0]; + + const expected: string = +`fragment Test on Animal { + __typename + species +}`; + + expect(fragment.source).toEqual(expected); + }); + }); +}); \ No newline at end of file diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts index 7b4a2a7624..e794ee2d15 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/index.ts @@ -2,7 +2,7 @@ import { getFieldDef, isMetaFieldName, isNotNullOrUndefined, - withTypenameFieldAddedWhereNeeded, + transformToNetworkRequestSourceDefinition, } from "../utilities"; import { ArgumentNode, @@ -180,7 +180,7 @@ export function compileToIR( } ); - const source = print(withTypenameFieldAddedWhereNeeded(operationDefinition)); + const source = print(transformToNetworkRequestSourceDefinition(operationDefinition)); const rootType = schema.getRootType(operationType) as GraphQLObjectType; const [directives,] = compileDirectives(operationDefinition.directives) ?? [undefined, undefined]; @@ -207,13 +207,15 @@ export function compileToIR( const name = fragmentDefinition.name.value; const filePath = filePathForNode(fragmentDefinition); - const source = print(withTypenameFieldAddedWhereNeeded(fragmentDefinition)); + const source = print(transformToNetworkRequestSourceDefinition(fragmentDefinition)); const typeCondition = typeFromAST( schema, fragmentDefinition.typeCondition ) as GraphQLCompositeType; + const [directives,] = compileDirectives(fragmentDefinition.directives) ?? [undefined, undefined]; + addReferencedType(getNamedType(typeCondition)); return { @@ -225,6 +227,7 @@ export function compileToIR( fragmentDefinition.selectionSet, typeCondition ), + directives: directives }; } diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts index 024ed7c7d2..351a599ada 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/compiler/ir.ts @@ -30,6 +30,7 @@ export interface FragmentDefinition { name: string; typeCondition: GraphQLCompositeType; selectionSet: SelectionSet; + directives?: Directive[]; source: string; filePath?: string; } diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts index 07b164780b..c132cd1d2a 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/apolloCodegenSchemaExtension.ts @@ -1,6 +1,6 @@ import { DirectiveDefinitionNode, DocumentNode, Kind, NameNode, StringValueNode } from "graphql"; -const directive_apollo_client_ios_localCacheMutation: DirectiveDefinitionNode = { +export const directive_apollo_client_ios_localCacheMutation: DirectiveDefinitionNode = { kind: Kind.DIRECTIVE_DEFINITION, description: stringNode("A directive used by the Apollo iOS client to annotate operations or fragments that should be used exclusively for generating local cache mutations instead of as standard operations."), name: nameNode("apollo_client_ios_localCacheMutation"), diff --git a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/graphql.ts b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/graphql.ts index 34a657d70b..1bd40f910e 100644 --- a/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/graphql.ts +++ b/Sources/ApolloCodegenLib/Frontend/JavaScript/src/utilities/graphql.ts @@ -17,8 +17,11 @@ import { visit, GraphQLError, DocumentNode, + DirectiveNode, } from "graphql"; +import { isNode } from "graphql/language/ast"; import { validateSDL } from "graphql/validation/validate"; +import { directive_apollo_client_ios_localCacheMutation } from "./apolloCodegenSchemaExtension"; export class GraphQLSchemaValidationError extends Error { constructor(public validationErrors: readonly GraphQLError[]) { @@ -54,41 +57,65 @@ export function isMetaFieldName(name: string) { return name.startsWith("__"); } -const typenameField = { +const typenameField: FieldNode = { kind: Kind.FIELD, name: { kind: Kind.NAME, value: "__typename" }, }; -export function withTypenameFieldAddedWhereNeeded(ast: ASTNode) { - return visit(ast, { - SelectionSet(node: SelectionSetNode) { - return { - ...node, - selections: node.selections.filter( - (selection) => - !( - selection.kind === "Field" && - (selection as FieldNode).name.value === "__typename" - ) - ), - }; +export function transformToNetworkRequestSourceDefinition(ast: ASTNode) { + return visit(ast, { + SelectionSet: { + leave(node: SelectionSetNode, _, parent) { + if (isNode(parent) && ![Kind.FIELD, Kind.FRAGMENT_DEFINITION].includes(parent.kind)) { + return node + } + return addTypenameFieldToSelectionSetIfNeeded(node) + } }, - leave(node: ASTNode) { - if (!(node.kind === "Field" || node.kind === "FragmentDefinition")) - return undefined; - if (!node.selectionSet) return undefined; - - return { - ...node, - selectionSet: { - ...node.selectionSet, - selections: [typenameField, ...node.selectionSet.selections], - }, - }; + Field: { + enter(node: FieldNode) { + return transformTypenameFieldIfNeeded(node) + } }, + Directive: { + enter(node: DirectiveNode) { + return stripLocalCacheMutationCustomClientDirective(node) + } + } }); } +function addTypenameFieldToSelectionSetIfNeeded(node: SelectionSetNode): SelectionSetNode { + const hasTypenameField = node.selections.find((selection) => + selection.kind == typenameField.kind && selection.name.value == typenameField.name.value + ); + + if (hasTypenameField) { + return node + } else { + return { + ...node, + selections: [typenameField, ...node.selections], + }; + } +} + +function transformTypenameFieldIfNeeded(node: FieldNode): FieldNode { + if (node.name.value == typenameField.name.value) { + return { + ...node, + alias: undefined, + directives: undefined + } + } else { + return node; + } +} + +function stripLocalCacheMutationCustomClientDirective(node: DirectiveNode): DirectiveNode | null { + return (node.name.value == directive_apollo_client_ios_localCacheMutation.name.value) ? null : node; +} + // Utility functions extracted from graphql-js /** diff --git a/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js b/Sources/ApolloCodegenLib/Frontend/dist/ApolloCodegenFrontend.bundle.js index d5967d404a..83e3240011 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","required"],ListNullability:["element"],RequiredDesignator:["element"],OptionalDesignator:["element"],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.QUESTION_MARK="?",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"}(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=k(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function b(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function L(e,t){return S(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function S(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 k(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 j(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(){var e;const t=this._lexer.token,n=this.parseName();let r,i;this.expectOptionalToken(v.COLON)?(r=n,i=this.parseName()):i=n;const o=this.parseArguments(!1),s=null!==(e=this._options)&&void 0!==e&&e.experimentalClientControlledNullability?this.parseRequiredStatus():void 0,a=this.parseDirectives(!1),c=this.peek(v.BRACE_L)?this.parseSelectionSet():void 0;return this.node(t,{kind:m.FIELD,alias:r,name:i,arguments:o,required:s,directives:a,selectionSet:c})}parseRequiredStatus(){const e=this.parseListNullability(),t=this.parseNullabilityDesignatorNode(e);return null!=t?t:e}parseListNullability(){const e=this._lexer.token;if(this.expectOptionalToken(v.BRACKET_L)){const t=this.parseRequiredStatus();return this.expectToken(v.BRACKET_R),this.node(e,{kind:m.LIST_NULLABILITY,element:t})}}parseNullabilityDesignatorNode(e){var t;return null!==(t=this.parseRequiredDesignatorNode(e))&&void 0!==t?t:this.parseOptionalDesignatorNode(e)}parseRequiredDesignatorNode(e){const t=this._lexer.token;if(this.expectOptionalToken(v.BANG))return this.node(t,{kind:m.REQUIRED_DESIGNATOR,element:e})}parseOptionalDesignatorNode(e){const t=this._lexer.token;if(this.expectOptionalToken(v.QUESTION_MARK))return this.node(t,{kind:m.OPTIONAL_DESIGNATOR,element:e})}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 ${K(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 K(e.kind)+(null!=t?` "${t}"`:"")}function K(e){return function(e){return e===v.BANG||e===v.QUESTION_MARK||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 X(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,required:o}){const s=me([ye("",e,": "),t],"");let a=s+ye("(",me(n,", "),")");a.length>80&&(a=s+ye("(\n",Ee(me(n,"\n")),"\n)"));const c=me([a,o],"");return me([c,me(r," "),i]," ")}},RequiredDesignator:{leave:({element:e})=>(null!=e?e:"")+"!"},OptionalDesignator:{leave:({element:e})=>(null!=e?e:"")+"?"},ListNullability:{leave:({element:e})=>"["+(null!=e?e:"")+"]"},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=()=>Je(e),this._interfaces=()=>Ye(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 Ye(e){var n;const r=Pe(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 Je(e){const n=Be(e.fields);return Ke(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;Ke(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 Ke(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:qe(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function qe(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 Ke(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:ze(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(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 He(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=Je.bind(void 0,e),this._interfaces=Ye.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=We.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 We(e){const n=Pe(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,Ke(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(Ke(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}.`+Ze(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+Ze(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}.`+Ze(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.`+Ze(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 Ze(e,t){return X("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=et.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 et(e){const n=Be(e.fields);return Ke(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 tt(e){return xe(e.type)&&void 0===e.defaultValue}function nt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&nt(e.ofType,t.ofType)}function rt(e,t,n){return t===n||(xe(n)?!!xe(t)&&rt(e,t.ofType,n.ofType):xe(t)?rt(e,t.ofType,n):we(n)?!!we(t)&&rt(e,t.ofType,n.ofType):!we(t)&&($e(n)&&(Le(t)||be(t))&&e.isSubType(n,t)))}function it(e,t,n){return t===n||($e(t)?$e(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!$e(n)&&e.isSubType(n,t))}const ot=2147483647,st=-2147483648,at=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=ht(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>ot||not||eot||te.name===t))}function ht(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 mt(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=qe(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:ze(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const vt=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(lt),description:"Included when true."}}}),yt=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(lt),description:"Skipped when true."}}}),Et="No longer supported",Tt=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:ut,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:Et}}}),Nt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ut),description:"The URL that specifies the behavior of this scalar."}}}),It=Object.freeze([vt,yt,Tt,Nt]);function gt(e,t){if(xe(t)){const n=gt(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=gt(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return gt(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=gt(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(Ce(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 _t.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===pt&&_t.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 _t=/^-?(?:0|[1-9][0-9]*)$/,Ot=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:ut,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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(lt),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Lt))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Dt))),args:{includeDeprecated:{type:lt,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Lt=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=>Oe(e)?kt.SCALAR:be(e)?kt.OBJECT:Le(e)?kt.INTERFACE:Se(e)?kt.UNION:Ae(e)?kt.ENUM:De(e)?kt.INPUT_OBJECT:we(e)?kt.LIST:xe(e)?kt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ut,resolve:e=>"name"in e?e.name:void 0},description:{type:ut,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ut,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:lt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(be(e)||Le(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(be(e)||Le(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if($e(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(wt)),args:{includeDeprecated:{type:lt,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(Dt)),args:{includeDeprecated:{type:lt,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}})}),At=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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Dt))),args:{includeDeprecated:{type:lt,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(lt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ut,resolve:e=>e.deprecationReason}})}),Dt=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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ut,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=gt(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(lt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ut,resolve:e=>e.deprecationReason}})}),wt=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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(lt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ut,resolve:e=>e.deprecationReason}})});let kt;!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"}(kt||(kt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:kt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:kt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:kt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:kt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:kt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:kt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:kt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:kt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),Rt={name:"__schema",type:new GraphQLNonNull(Ot),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(ut),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},Ct={name:"__typename",type:new GraphQLNonNull(ut),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},Gt=Object.freeze([Ot,bt,Lt,St,At,Dt,wt,xt]);function $t(e){return Gt.some((({name:t})=>e.name===t))}function Qt(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:It;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Ut(t,o);null!=this._queryType&&Ut(this._queryType,o),null!=this._mutationType&&Ut(this._mutationType,o),null!=this._subscriptionType&&Ut(this._subscriptionType,o);for(const e of this._directives)if(mt(e))for(const t of e.args)Ut(t.type,o);Ut(Ot,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,Le(e)){for(const t of e.getInterfaces())if(Le(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(be(e))for(const t of e.getInterfaces())if(Le(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 Se(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),Se(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 Ut(e,t){const n=Me(e);if(!t.has(n))if(t.add(n),Se(n))for(const e of n.getTypes())Ut(e,t);else if(be(n)||Le(n)){for(const e of n.getInterfaces())Ut(e,t);for(const e of Object.values(n.getFields())){Ut(e.type,t);for(const n of e.args)Ut(n.type,t)}}else if(De(n))for(const e of Object.values(n.getFields()))Ut(e.type,t);return t}function jt(e){if(Qt(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!be(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Vt(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&&!be(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Vt(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!be(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Vt(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(mt(n)){Mt(e,n);for(const r of n.args){var t;if(Mt(e,r),Re(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),He(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Wt(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))Ve(r)?($t(r)||Mt(e,r),be(r)||Le(r)?(Pt(e,r),Bt(e,r)):Se(r)?qt(e,r):Ae(r)?Kt(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 Vt(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 Mt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Pt(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(Mt(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(Mt(e,n),!Re(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(He(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Wt(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Bt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Le(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,zt(t,r)):(n[r.name]=!0,Jt(e,t,r),Yt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,zt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,zt(t,r))}function Yt(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(!rt(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(!nt(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))&&He(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 Jt(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}.`,[...zt(n,i),...zt(t,n)])}function qt(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.`,Ht(t,i.name)):(r[i.name]=!0,be(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,Ht(t,String(i))))}function Kt(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)Mt(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(Mt(e,o),!Re(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(tt(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Wt(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function zt(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 Ht(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 Wt(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Tt.name))}function Zt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Zt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Zt(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:en,t&&(Re(t)&&this._inputTypeStack.push(t),Ge(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=Me(this.getType());this._parentTypeStack.push(Ge(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(be(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Zt(t,n):Me(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Zt(t,e.type);this._inputTypeStack.push(Re(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(Re(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(Re(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Me(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(Re(n)?n:void 0);break}case m.ENUM:{const t=Me(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 en(e,t,n){const r=n.name.value;return r===Rt.name&&e.getQueryType()===t?Rt:r===Ft.name&&e.getQueryType()===t?Ft:r===Ct.name&&Ge(t)?Ct:be(t)||Le(t)?t.getFields()[r]:void 0}function tn(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 nn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function rn(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 on(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 sn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():It;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}".`+X(o),t))}}return!1}}}function an(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():It;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 cn(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)rn(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||rn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||on(e)}(p)));if(r&&un.includes(u))return;const o=re(u,r?un.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+X(o),t))}var p}}}const un=[...dt,...Gt].map((e=>e.name));function ln(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 pn(e,t){const n=[e];for(;we(je(n[n.length-1]));){const e=ke(je(n[n.length-1])).ofType;n.push(e)}if(t){const e=le(t,{RequiredDesignator:{leave({element:e}){if(e)return new GraphQLNonNull(je(e));const t=n.pop();return new GraphQLNonNull(je(t))}},OptionalDesignator:{leave({element:e}){if(e)return je(e);return je(n.pop())}},ListNullability:{leave({element:e}){let r=n.pop();if(we(je(r))||(r=n.pop()),!r)throw new GraphQLError("List nullability modifier is too deep.",t);const i=xe(r);return e?i?new GraphQLNonNull(new GraphQLList(e)):new GraphQLList(e):r}}});if(n.length>0)throw new GraphQLError("List nullability modifier is too shallow.",t);return e}return e}function dn(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:dn(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(dn)};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 fn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+fn(t))).join(" and "):e}function hn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=In(e,n,a);if(o!==c){vn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),hn(e,t,n,r,i,o,a))}}function mn(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]=In(e,n,a),[p,d]=In(e,n,c);vn(e,t,n,r,i,u,p);for(const s of d)mn(e,t,n,r,i,o,s);for(const o of l)mn(e,t,n,r,i,o,s)}function vn(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=yn(e,n,r,i,a,s,c);o&&t.push(o)}}}function yn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&be(a)&&be(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(En(c)!==En(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){const e=pn(h,c.required),t=pn(m,p.required);if(Tn(e,t))return[[i,`they return conflicting types "${P(e)}" and "${P(t)}"`],[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]=Nn(e,t,i,o),[p,d]=Nn(e,t,s,a);vn(e,c,t,n,r,u,p);for(const i of d)hn(e,c,t,n,r,u,i);for(const i of l)hn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)mn(e,c,t,n,r,i,o);return c}(e,t,n,f,Me(h),v,Me(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 En(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(dn({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function Tn(e,t){return we(e)?!we(t)||Tn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||Tn(e.ofType,t.ofType):!!xe(t)||!(!Ce(e)&&!Ce(t))&&e!==t)}function Nn(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);gn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function In(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Zt(e.getSchema(),n.typeCondition);return Nn(e,t,i,n.selectionSet)}function gn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(be(t)||Le(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?Zt(e.getSchema(),n):t;gn(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(bn),(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 bn(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function Ln(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 Ln(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(Sn(i,n)){if(xe(r))return;t.push(null)}else{const e=Ln(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=Ln(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||Sn(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=Ln(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Ce(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 Sn(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function An(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=Ln(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 Dn(e,t,n,r,i){const o=new Map;return wn(e,t,n,r,i,o,new Set),o}function wn(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!kn(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(!kn(n,c)||!xn(e,c,r))continue;wn(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!kn(n,c))continue;s.add(i);const a=t[i];if(!a||!xn(e,a,r))continue;wn(e,t,n,r,a.selectionSet,o,s);break}}var a}function kn(e,t){const n=An(yt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=An(vt,t,e);return!1!==(null==r?void 0:r.if)}function xn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Zt(e,r);return i===n||!!$e(i)&&e.isSubType(i,n)}function Rn(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 Fn(e){return{Field:t,Directive:t};function t(t){var n;const r=Rn(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 Cn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():It;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(rn(n)||on(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 Gn(e,t){return!!(be(e)||Le(e)||De(e))&&null!=e.getFields()[t]}function $n(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 Qn(e,t){const n=e.getInputType();if(!n)return;const r=Me(n);if(Ce(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 Un(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 rt(e,t,r.ofType)}return rt(e,t,r)}const jn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!nn(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=Dn(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))}}}}}},cn,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Zt(e.getSchema(),n);if(t&&!Ge(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Zt(e.getSchema(),t.typeCondition);if(n&&!Ge(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=Zt(e.getSchema(),t.type);if(void 0!==n&&!Re(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(Ce(Me(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=X("to use an inline fragment on",function(e,t,n){if(!$e(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:Le(t)&&e.isSubType(t,n)?-1:Le(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=X(function(e,t){if(be(e)||Le(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))}}},ln,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ge(n)&&Ge(r)&&!it(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=Zt(e.getSchema(),n.typeCondition);if(Ge(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!it(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=Rn(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)}}},an,Cn,function(e){return{...sn(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}".`+X(o),t))}}}},Fn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Qn(e,t),!1},ObjectValue(t){const n=Me(e.getInputType());if(!De(n))return Qn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&tt(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=Me(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}".`+X(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=>Qn(e,t),IntValue:t=>Qn(e,t),FloatValue:t=>Qn(e,t),StringValue:t=>Qn(e,t),BooleanValue:t=>Qn(e,t)}},function(e){return{...On(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)&&He(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=Zt(t,s.type);if(a&&!Un(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){return{Field(t){const n=e.getFieldDef(),r=t.required;if(n&&r){const i=function(e){let t=e,n=0;for(;we(je(t));){t=ke(je(t)).ofType,n+=1}return n}(n.type),o=le(r,{RequiredDesignator:{leave:({element:e})=>null!=e?e:0},OptionalDesignator:{leave:({element:e})=>null!=e?e:0},ListNullability:{leave:({element:e})=>(null!=e?e:0)+1}});i>o?e.reportError(new GraphQLError("List nullability modifier is too shallow.",t.required)):i1)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;Gn(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=Rn(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))}}},cn,an,Cn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)rn(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=_n[s.kind]:a&&(c=function(e){if(Oe(e))return m.SCALAR_TYPE_EXTENSION;if(be(e))return m.OBJECT_TYPE_EXTENSION;if(Le(e))return m.INTERFACE_TYPE_EXTENSION;if(Se(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.`+X(r),i.name))}}},sn,Fn,$n,On]);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,tn(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 Mn(e,n,r=jn,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,tn(o,p))}catch(e){if(e!==c)throw e}return u}function Pn(e,t,n=Vn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Bn(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 kt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case kt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case kt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case kt.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 kt.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 kt.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[...dt,...Gt])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===kt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===kt.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(!Ue(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(!be(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Le(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===kt.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(!Re(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?Ln(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 Yn(e,n,r){Qt(e),null!=n&&n.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==r?void 0:r.assumeValid)&&!0!==(null==r?void 0:r.assumeValidSDL)&&function(e,t){const n=Pn(e,t);if(0!==n.length)throw new Error(n.map((e=>e.message)).join("\n\n"))}(n,e);const i=e.toConfig(),o=Jn(i,n,r);return i===o?e:new GraphQLSchema(o)}function Jn(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(rn(e))c.push(e);else if(on(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=qn[t])&&void 0!==h?h:k(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:L(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 $t(e)||ft(e)?e:Oe(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=Xn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):be(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),...b(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 GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...b(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 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)}))),...S(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=qn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function O(e){return e.kind===m.LIST_TYPE?new GraphQLList(O(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(O(e.type)):_(e)}function b(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:O(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:L(n.arguments),deprecationReason:Kn(n),astNode:n}}}return t}function L(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=O(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:Ln(e.defaultValue,t),deprecationReason:Kn(e),astNode:e}}return n}function S(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=O(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:Ln(n.defaultValue,e),deprecationReason:Kn(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:Kn(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 k(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:()=>b(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:()=>b(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:Xn(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:()=>S(t),astNode:e,extensionASTNodes:r})}}}}const qn=H([...dt,...Gt],(e=>e.name));function Kn(e){const t=An(Tt,e);return null==t?void 0:t.reason}function Xn(e){const t=An(Nt,e);return null==t?void 0:t.url}function zn(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=Pn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Jn({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,...It.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Hn(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 sr(e)+"directive @"+e.name+rr(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(Oe(e))return function(e){return sr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(be(e))return function(e){return sr(e)+`type ${e.name}`+er(e)+tr(e)}(e);if(Le(e))return function(e){return sr(e)+`interface ${e.name}`+er(e)+tr(e)}(e);if(Se(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return sr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>sr(e," ",!t)+" "+e.name+or(e.deprecationReason)));return sr(e)+`enum ${e.name}`+nr(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>sr(e," ",!t)+" "+ir(e)));return sr(e)+`input ${e.name}`+nr(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!It.some((({name:e})=>e===t.name));var t}),Wn)}function Wn(e){return!ft(e)&&!$t(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}`),sr(e)+`schema {\n${t.join("\n")}\n}`}function er(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function tr(e){return nr(Object.values(e.getFields()).map(((e,t)=>sr(e," ",!t)+" "+e.name+rr(e.args," ")+": "+String(e.type)+or(e.deprecationReason))))}function nr(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function rr(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(ir).join(", ")+")":"(\n"+e.map(((e,n)=>sr(e," "+t,!n)+" "+t+ir(e))).join("\n")+"\n"+t+")"}function ir(e){const t=gt(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+or(e.deprecationReason)}function or(e){if(null==e)return"";if(e!==Et){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function sr(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:O(r)}).replace(/\n/g,"\n"+t)+"\n"}const ar=[ln],cr=[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))}}},...jn.filter((e=>!ar.includes(e)))];class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function ur(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function lr(e){return e.startsWith("__")}const pr={kind:m.FIELD,name:{kind:m.NAME,value:"__typename"}};function dr(e){return le(e,{SelectionSet:e=>({...e,selections:e.selections.filter((e=>!("Field"===e.kind&&"__typename"===e.name.value)))}),leave(e){if(("Field"===e.kind||"FragmentDefinition"===e.kind)&&e.selectionSet)return{...e,selectionSet:{...e.selectionSet,selections:[pr,...e.selectionSet.selections]}}}})}function fr(e){return null!=e}const hr={kind:m.DIRECTIVE_DEFINITION,description:(mr="A directive used by the Apollo iOS client to annotate queries that should be used for local cache mutations instead of standard query operations.",{kind:m.STRING,value:mr}),name:vr("apollo_client_ios_localCacheMutation"),repeatable:!1,locations:[vr("QUERY")]};var mr;function vr(e){return{kind:m.NAME,value:e}}const yr={kind:m.DOCUMENT,definitions:[hr]};function Er(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(Er)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=Er(t.value),e)),{})};default:return e}}function Tr(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 Nr(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.has(t)){if(o.add(t),Le(t))for(const n of e.getPossibleTypes(t))s(Me(n));if(Se(t)){const e=t.getTypes();for(t of e)s(Me(t))}if(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(Me(Zt(e,t.type)))}}(t),be(t))for(const e of t.getInterfaces())s(Me(e))}}function a(t){var n;if(!t.name)throw new GraphQLError("Operations should be named",{nodes:t});const r=Tr(t),i=t.name.value,a=t.operation,c=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?Er(t.defaultValue):void 0,i=Zt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,{nodes:t});return s(Me(i)),{name:n,type:i,defaultValue:r}})),l=fe(dr(t)),d=e.getRootType(a),[f]=null!==(n=p(t.directives))&&void 0!==n?n:[void 0,void 0];return o.add(Me(d)),{name:i,operationType:a,variables:c,rootType:d,selectionSet:u(t.selectionSet,d),directives:f,source:l,filePath:r}}function c(t){const n=t.name.value,r=Tr(t),i=fe(dr(t)),o=Zt(e,t.typeCondition);return s(Me(o)),{name:n,filePath:r,source:i,typeCondition:o,selectionSet:u(t.selectionSet,o)}}function u(t,r){return{parentType:r,selections:t.selections.map((t=>function(t,r){var o,a;const[d,f]=null!==(o=p(t.directives))&&void 0!==o?o:[void 0,void 0];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===Rt.name&&e.getQueryType()===t?Rt:n===Ft.name&&e.getQueryType()===t?Ft:n===Ct.name&&(be(t)||Le(t)||Se(t))?Ct:be(t)||Le(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=pn(o.type,t.required),p=Me(c);s(Me(p));const{description:h,deprecationReason:m}=o;let v={kind:"Field",name:n,alias:i,type:c,arguments:l(o,t.arguments),inclusionConditions:f,description:!lr(n)&&h?h:void 0,deprecationReason:m||void 0,directives:d};if(Ge(p)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,{nodes:t});v.selectionSet=u(e,p)}return v}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Zt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i),inclusionConditions:f,directives:d}}case m.FRAGMENT_SPREAD:{const e=t.name.value,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}".`,{nodes:t.name});return{kind:"FragmentSpread",fragment:r,inclusionConditions:f,directives:d}}}}(t,r))).filter(fr)}}function l(...e){const t=e[0].args;return e[1]&&e[1].length>0?e[1].map((e=>{const n=e.name.value,r=t.find((t=>t.name===e.name.value)),i=null==r?void 0:r.type;if(!i)throw new GraphQLError(`Cannot find directive argument type for argument "${n}".`,{nodes:[e]});return{name:n,value:Er(e.value),type:i}})):void 0}function p(t){if(t&&t.length>0){const n=[],r=[];for(const i of t){const t=i.name.value,o=e.getDirective(t);if(!o)throw new GraphQLError(`Cannot find directive "${t}".`,{nodes:i});n.push({name:t,arguments:l(o,i.arguments)});const s=d(i,o);s&&r.push(s)}return[n,r.length>0?r:void 0]}}function d(e,t){var n;if("include"==t.name||"skip"==t.name){const r=null===(n=e.arguments)||void 0===n?void 0:n[0].value,i="skip"==t.name;switch(null==r?void 0:r.kind){case m.BOOLEAN:return i?r.value?"SKIPPED":"INCLUDED":r.value?"INCLUDED":"SKIPPED";case m.VARIABLE:return{variable:r.name.value,isInverted:i};default:throw new GraphQLError('Conditional inclusion directive has invalid "if" argument.',{nodes:e})}}}}function Ir(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)}function gr(e){let t=[yr];return e&&(t=t.concat(e)),Ir(t)}function _r(e,t){return Yn(t,e)}return e.GraphQLEnumType=GraphQLEnumType,e.GraphQLError=GraphQLError,e.GraphQLInputObjectType=GraphQLInputObjectType,e.GraphQLInterfaceType=GraphQLInterfaceType,e.GraphQLObjectType=GraphQLObjectType,e.GraphQLScalarType=GraphQLScalarType,e.GraphQLSchema=GraphQLSchema,e.GraphQLSchemaValidationError=GraphQLSchemaValidationError,e.GraphQLUnionType=GraphQLUnionType,e.Source=Source,e.compileDocument=function(e,t){return Nr(_r(gr(),e),t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Bn(t);return ur(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Pn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=zn(t,{assumeValidSDL:!0});return ur(n),n},e.mergeDocuments=Ir,e.parseDocument=function(e,t){return J(e,{experimentalClientControlledNullability:t})},e.printSchemaToSDL=function(e){return Hn(e)},e.validateDocument=function(e,t){return Mn(_r(gr(),e),t,cr)},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","required"],ListNullability:["element"],RequiredDesignator:["element"],OptionalDesignator:["element"],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.QUESTION_MARK="?",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"}(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=k(this,e.end);e.next=t,t.prev=e,e=t}}while(e.kind===v.COMMENT);return e}}function b(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function L(e,t){return S(e.charCodeAt(t))&&A(e.charCodeAt(t+1))}function S(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 k(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 j(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(){var e;const t=this._lexer.token,n=this.parseName();let r,i;this.expectOptionalToken(v.COLON)?(r=n,i=this.parseName()):i=n;const o=this.parseArguments(!1),s=null!==(e=this._options)&&void 0!==e&&e.experimentalClientControlledNullability?this.parseRequiredStatus():void 0,a=this.parseDirectives(!1),c=this.peek(v.BRACE_L)?this.parseSelectionSet():void 0;return this.node(t,{kind:m.FIELD,alias:r,name:i,arguments:o,required:s,directives:a,selectionSet:c})}parseRequiredStatus(){const e=this.parseListNullability(),t=this.parseNullabilityDesignatorNode(e);return null!=t?t:e}parseListNullability(){const e=this._lexer.token;if(this.expectOptionalToken(v.BRACKET_L)){const t=this.parseRequiredStatus();return this.expectToken(v.BRACKET_R),this.node(e,{kind:m.LIST_NULLABILITY,element:t})}}parseNullabilityDesignatorNode(e){var t;return null!==(t=this.parseRequiredDesignatorNode(e))&&void 0!==t?t:this.parseOptionalDesignatorNode(e)}parseRequiredDesignatorNode(e){const t=this._lexer.token;if(this.expectOptionalToken(v.BANG))return this.node(t,{kind:m.REQUIRED_DESIGNATOR,element:e})}parseOptionalDesignatorNode(e){const t=this._lexer.token;if(this.expectOptionalToken(v.QUESTION_MARK))return this.node(t,{kind:m.OPTIONAL_DESIGNATOR,element:e})}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 ${K(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 K(e.kind)+(null!=t?` "${t}"`:"")}function K(e){return function(e){return e===v.BANG||e===v.QUESTION_MARK||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 X(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,required:o}){const s=me([ye("",e,": "),t],"");let a=s+ye("(",me(n,", "),")");a.length>80&&(a=s+ye("(\n",Ee(me(n,"\n")),"\n)"));const c=me([a,o],"");return me([c,me(r," "),i]," ")}},RequiredDesignator:{leave:({element:e})=>(null!=e?e:"")+"!"},OptionalDesignator:{leave:({element:e})=>(null!=e?e:"")+"?"},ListNullability:{leave:({element:e})=>"["+(null!=e?e:"")+"]"},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=()=>Je(e),this._interfaces=()=>Ye(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 Ye(e){var n;const r=Pe(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 Je(e){const n=Be(e.fields);return Ke(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;Ke(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 Ke(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:qe(o),resolve:n.resolve,subscribe:n.subscribe,deprecationReason:n.deprecationReason,extensions:oe(n.extensions),astNode:n.astNode}}))}function qe(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 Ke(e){return n(e)&&!Array.isArray(e)}function Xe(e){return Z(e,(e=>({description:e.description,type:e.type,args:ze(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function ze(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 He(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=Je.bind(void 0,e),this._interfaces=Ye.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=We.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 We(e){const n=Pe(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,Ke(i=e.values)||t(!1,`${r} values must be an object with value names as keys.`),Object.entries(i).map((([e,n])=>(Ke(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}.`+Ze(this,t))}const t=this.getValue(e);if(null==t)throw new GraphQLError(`Value "${e}" does not exist in "${this.name}" enum.`+Ze(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}.`+Ze(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.`+Ze(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 Ze(e,t){return X("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=et.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 et(e){const n=Be(e.fields);return Ke(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 tt(e){return xe(e.type)&&void 0===e.defaultValue}function nt(e,t){return e===t||(xe(e)&&xe(t)||!(!we(e)||!we(t)))&&nt(e.ofType,t.ofType)}function rt(e,t,n){return t===n||(xe(n)?!!xe(t)&&rt(e,t.ofType,n.ofType):xe(t)?rt(e,t.ofType,n):we(n)?!!we(t)&&rt(e,t.ofType,n.ofType):!we(t)&&($e(n)&&(Le(t)||be(t))&&e.isSubType(n,t)))}function it(e,t,n){return t===n||($e(t)?$e(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!$e(n)&&e.isSubType(n,t))}const ot=2147483647,st=-2147483648,at=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=ht(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>ot||not||eot||te.name===t))}function ht(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 mt(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=qe(o)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:ze(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const vt=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(lt),description:"Included when true."}}}),yt=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(lt),description:"Skipped when true."}}}),Et="No longer supported",Tt=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:ut,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:Et}}}),Nt=new GraphQLDirective({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[h.SCALAR],args:{url:{type:new GraphQLNonNull(ut),description:"The URL that specifies the behavior of this scalar."}}}),It=Object.freeze([vt,yt,Tt,Nt]);function gt(e,t){if(xe(t)){const n=gt(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=gt(r,n);null!=e&&t.push(e)}return{kind:m.LIST,values:t}}return gt(e,n)}var i;if(De(t)){if(!n(e))return null;const r=[];for(const n of Object.values(t.getFields())){const t=gt(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(Ce(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 _t.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===pt&&_t.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 _t=/^-?(?:0|[1-9][0-9]*)$/,Ot=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:ut,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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},isRepeatable:{type:new GraphQLNonNull(lt),resolve:e=>e.isRepeatable},locations:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Lt))),resolve:e=>e.locations},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Dt))),args:{includeDeprecated:{type:lt,defaultValue:!1}},resolve:(e,{includeDeprecated:t})=>t?e.args:e.args.filter((e=>null==e.deprecationReason))}})}),Lt=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=>Oe(e)?kt.SCALAR:be(e)?kt.OBJECT:Le(e)?kt.INTERFACE:Se(e)?kt.UNION:Ae(e)?kt.ENUM:De(e)?kt.INPUT_OBJECT:we(e)?kt.LIST:xe(e)?kt.NON_NULL:void r(!1,`Unexpected type: "${P(e)}".`)},name:{type:ut,resolve:e=>"name"in e?e.name:void 0},description:{type:ut,resolve:e=>"description"in e?e.description:void 0},specifiedByURL:{type:ut,resolve:e=>"specifiedByURL"in e?e.specifiedByURL:void 0},fields:{type:new GraphQLList(new GraphQLNonNull(At)),args:{includeDeprecated:{type:lt,defaultValue:!1}},resolve(e,{includeDeprecated:t}){if(be(e)||Le(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(be(e)||Le(e))return e.getInterfaces()}},possibleTypes:{type:new GraphQLList(new GraphQLNonNull(St)),resolve(e,t,n,{schema:r}){if($e(e))return r.getPossibleTypes(e)}},enumValues:{type:new GraphQLList(new GraphQLNonNull(wt)),args:{includeDeprecated:{type:lt,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(Dt)),args:{includeDeprecated:{type:lt,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}})}),At=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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},args:{type:new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(Dt))),args:{includeDeprecated:{type:lt,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(lt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ut,resolve:e=>e.deprecationReason}})}),Dt=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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},type:{type:new GraphQLNonNull(St),resolve:e=>e.type},defaultValue:{type:ut,description:"A GraphQL-formatted string representing the default value for this input value.",resolve(e){const{type:t,defaultValue:n}=e,r=gt(n,t);return r?fe(r):null}},isDeprecated:{type:new GraphQLNonNull(lt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ut,resolve:e=>e.deprecationReason}})}),wt=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(ut),resolve:e=>e.name},description:{type:ut,resolve:e=>e.description},isDeprecated:{type:new GraphQLNonNull(lt),resolve:e=>null!=e.deprecationReason},deprecationReason:{type:ut,resolve:e=>e.deprecationReason}})});let kt;!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"}(kt||(kt={}));const xt=new GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:kt.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:kt.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:kt.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:kt.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:kt.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:kt.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:kt.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:kt.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}}),Rt={name:"__schema",type:new GraphQLNonNull(Ot),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(ut),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},Ct={name:"__typename",type:new GraphQLNonNull(ut),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},Gt=Object.freeze([Ot,bt,Lt,St,At,Dt,wt,xt]);function $t(e){return Gt.some((({name:t})=>e.name===t))}function Qt(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:It;const o=new Set(e.types);if(null!=e.types)for(const t of e.types)o.delete(t),Ut(t,o);null!=this._queryType&&Ut(this._queryType,o),null!=this._mutationType&&Ut(this._mutationType,o),null!=this._subscriptionType&&Ut(this._subscriptionType,o);for(const e of this._directives)if(mt(e))for(const t of e.args)Ut(t.type,o);Ut(Ot,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,Le(e)){for(const t of e.getInterfaces())if(Le(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if(be(e))for(const t of e.getInterfaces())if(Le(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 Se(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),Se(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 Ut(e,t){const n=Me(e);if(!t.has(n))if(t.add(n),Se(n))for(const e of n.getTypes())Ut(e,t);else if(be(n)||Le(n)){for(const e of n.getInterfaces())Ut(e,t);for(const e of Object.values(n.getFields())){Ut(e.type,t);for(const n of e.args)Ut(n.type,t)}}else if(De(n))for(const e of Object.values(n.getFields()))Ut(e.type,t);return t}function jt(e){if(Qt(e),e.__validationErrors)return e.__validationErrors;const t=new SchemaValidationContext(e);!function(e){const t=e.schema,n=t.getQueryType();if(n){if(!be(n)){var r;e.reportError(`Query root type must be Object type, it cannot be ${P(n)}.`,null!==(r=Vt(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&&!be(i)&&e.reportError(`Mutation root type must be Object type if provided, it cannot be ${P(i)}.`,null!==(o=Vt(t,f.MUTATION))&&void 0!==o?o:i.astNode);const s=t.getSubscriptionType();var a;s&&!be(s)&&e.reportError(`Subscription root type must be Object type if provided, it cannot be ${P(s)}.`,null!==(a=Vt(t,f.SUBSCRIPTION))&&void 0!==a?a:s.astNode)}(t),function(e){for(const n of e.schema.getDirectives())if(mt(n)){Mt(e,n);for(const r of n.args){var t;if(Mt(e,r),Re(r.type)||e.reportError(`The type of @${n.name}(${r.name}:) must be Input Type but got: ${P(r.type)}.`,r.astNode),He(r)&&null!=r.deprecationReason)e.reportError(`Required argument @${n.name}(${r.name}:) cannot be deprecated.`,[Wt(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))Ve(r)?($t(r)||Mt(e,r),be(r)||Le(r)?(Pt(e,r),Bt(e,r)):Se(r)?qt(e,r):Ae(r)?Kt(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 Vt(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 Mt(e,t){t.name.startsWith("__")&&e.reportError(`Name "${t.name}" must not begin with "__", which is reserved by GraphQL introspection.`,t.astNode)}function Pt(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(Mt(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(Mt(e,n),!Re(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(He(n)&&null!=n.deprecationReason)e.reportError(`Required argument ${t.name}.${s.name}(${r}:) cannot be deprecated.`,[Wt(n.astNode),null===(o=n.astNode)||void 0===o?void 0:o.type])}}}function Bt(e,t){const n=Object.create(null);for(const r of t.getInterfaces())Le(r)?t!==r?n[r.name]?e.reportError(`Type ${t.name} can only implement ${r.name} once.`,zt(t,r)):(n[r.name]=!0,Jt(e,t,r),Yt(e,t,r)):e.reportError(`Type ${t.name} cannot implement itself because it would create a circular reference.`,zt(t,r)):e.reportError(`Type ${P(t)} must only implement Interface types, it cannot implement ${P(r)}.`,zt(t,r))}function Yt(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(!rt(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(!nt(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))&&He(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 Jt(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}.`,[...zt(n,i),...zt(t,n)])}function qt(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.`,Ht(t,i.name)):(r[i.name]=!0,be(i)||e.reportError(`Union type ${t.name} can only include Object types, it cannot include ${P(i)}.`,Ht(t,String(i))))}function Kt(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)Mt(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(Mt(e,o),!Re(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(tt(o)&&null!=o.deprecationReason)e.reportError(`Required input field ${t.name}.${o.name} cannot be deprecated.`,[Wt(o.astNode),null===(i=o.astNode)||void 0===i?void 0:i.type])}}function zt(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 Ht(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 Wt(e){var t;return null==e||null===(t=e.directives)||void 0===t?void 0:t.find((e=>e.name.value===Tt.name))}function Zt(e,t){switch(t.kind){case m.LIST_TYPE:{const n=Zt(e,t.type);return n&&new GraphQLList(n)}case m.NON_NULL_TYPE:{const n=Zt(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:en,t&&(Re(t)&&this._inputTypeStack.push(t),Ge(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=Me(this.getType());this._parentTypeStack.push(Ge(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(be(n)?n:void 0);break}case m.INLINE_FRAGMENT:case m.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?Zt(t,n):Me(this.getType());this._typeStack.push(Fe(r)?r:void 0);break}case m.VARIABLE_DEFINITION:{const n=Zt(t,e.type);this._inputTypeStack.push(Re(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(Re(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(Re(t)?t:void 0);break}case m.OBJECT_FIELD:{const t=Me(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(Re(n)?n:void 0);break}case m.ENUM:{const t=Me(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 en(e,t,n){const r=n.name.value;return r===Rt.name&&e.getQueryType()===t?Rt:r===Ft.name&&e.getQueryType()===t?Ft:r===Ct.name&&Ge(t)?Ct:be(t)||Le(t)?t.getFields()[r]:void 0}function tn(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 nn(e){return e.kind===m.OPERATION_DEFINITION||e.kind===m.FRAGMENT_DEFINITION}function rn(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 on(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 sn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():It;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}".`+X(o),t))}}return!1}}}function an(e){const t=Object.create(null),n=e.getSchema(),i=n?n.getDirectives():It;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 cn(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),r=Object.create(null);for(const t of e.getDocument().definitions)rn(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||rn(e)||e.kind===m.DIRECTIVE_DEFINITION}(p)||function(e){return e.kind===m.SCHEMA_EXTENSION||on(e)}(p)));if(r&&un.includes(u))return;const o=re(u,r?un.concat(i):i);e.reportError(new GraphQLError(`Unknown type "${u}".`+X(o),t))}var p}}}const un=[...dt,...Gt].map((e=>e.name));function ln(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 pn(e,t){const n=[e];for(;we(je(n[n.length-1]));){const e=ke(je(n[n.length-1])).ofType;n.push(e)}if(t){const e=le(t,{RequiredDesignator:{leave({element:e}){if(e)return new GraphQLNonNull(je(e));const t=n.pop();return new GraphQLNonNull(je(t))}},OptionalDesignator:{leave({element:e}){if(e)return je(e);return je(n.pop())}},ListNullability:{leave({element:e}){let r=n.pop();if(we(je(r))||(r=n.pop()),!r)throw new GraphQLError("List nullability modifier is too deep.",t);const i=xe(r);return e?i?new GraphQLNonNull(new GraphQLList(e)):new GraphQLList(e):r}}});if(n.length>0)throw new GraphQLError("List nullability modifier is too shallow.",t);return e}return e}function dn(e){switch(e.kind){case m.OBJECT:return{...e,fields:(t=e.fields,t.map((e=>({...e,value:dn(e.value)}))).sort(((e,t)=>ee(e.name.value,t.name.value))))};case m.LIST:return{...e,values:e.values.map(dn)};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 fn(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+fn(t))).join(" and "):e}function hn(e,t,n,r,i,o,s){const a=e.getFragment(s);if(!a)return;const[c,u]=In(e,n,a);if(o!==c){vn(e,t,n,r,i,o,c);for(const a of u)r.has(a,s,i)||(r.add(a,s,i),hn(e,t,n,r,i,o,a))}}function mn(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]=In(e,n,a),[p,d]=In(e,n,c);vn(e,t,n,r,i,u,p);for(const s of d)mn(e,t,n,r,i,o,s);for(const o of l)mn(e,t,n,r,i,o,s)}function vn(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=yn(e,n,r,i,a,s,c);o&&t.push(o)}}}function yn(e,t,n,r,i,o,s){const[a,c,u]=o,[l,p,d]=s,f=r||a!==l&&be(a)&&be(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(En(c)!==En(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){const e=pn(h,c.required),t=pn(m,p.required);if(Tn(e,t))return[[i,`they return conflicting types "${P(e)}" and "${P(t)}"`],[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]=Nn(e,t,i,o),[p,d]=Nn(e,t,s,a);vn(e,c,t,n,r,u,p);for(const i of d)hn(e,c,t,n,r,u,i);for(const i of l)hn(e,c,t,n,r,p,i);for(const i of l)for(const o of d)mn(e,c,t,n,r,i,o);return c}(e,t,n,f,Me(h),v,Me(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 En(e){var t;const n=null!==(t=e.arguments)&&void 0!==t?t:[];return fe(dn({kind:m.OBJECT,fields:n.map((e=>({kind:m.OBJECT_FIELD,name:e.name,value:e.value})))}))}function Tn(e,t){return we(e)?!we(t)||Tn(e.ofType,t.ofType):!!we(t)||(xe(e)?!xe(t)||Tn(e.ofType,t.ofType):!!xe(t)||!(!Ce(e)&&!Ce(t))&&e!==t)}function Nn(e,t,n,r){const i=t.get(r);if(i)return i;const o=Object.create(null),s=Object.create(null);gn(e,n,r,o,s);const a=[o,Object.keys(s)];return t.set(r,a),a}function In(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const i=Zt(e.getSchema(),n.typeCondition);return Nn(e,t,i,n.selectionSet)}function gn(e,t,n,r,i){for(const o of n.selections)switch(o.kind){case m.FIELD:{const e=o.name.value;let n;(be(t)||Le(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?Zt(e.getSchema(),n):t;gn(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(bn),(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 bn(e){return e.type.kind===m.NON_NULL_TYPE&&null==e.defaultValue}function Ln(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 Ln(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(Sn(i,n)){if(xe(r))return;t.push(null)}else{const e=Ln(i,r,n);if(void 0===e)return;t.push(e)}return t}const i=Ln(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||Sn(t.value,n)){if(void 0!==e.defaultValue)r[e.name]=e.defaultValue;else if(xe(e.type))return;continue}const o=Ln(t.value,e.type,n);if(void 0===o)return;r[e.name]=o}return r}if(Ce(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 Sn(e,t){return e.kind===m.VARIABLE&&(null==t||void 0===t[e.name.value])}function An(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=Ln(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 Dn(e,t,n,r,i){const o=new Map;return wn(e,t,n,r,i,o,new Set),o}function wn(e,t,n,r,i,o,s){for(const c of i.selections)switch(c.kind){case m.FIELD:{if(!kn(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(!kn(n,c)||!xn(e,c,r))continue;wn(e,t,n,r,c.selectionSet,o,s);break;case m.FRAGMENT_SPREAD:{const i=c.name.value;if(s.has(i)||!kn(n,c))continue;s.add(i);const a=t[i];if(!a||!xn(e,a,r))continue;wn(e,t,n,r,a.selectionSet,o,s);break}}var a}function kn(e,t){const n=An(yt,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=An(vt,t,e);return!1!==(null==r?void 0:r.if)}function xn(e,t,n){const r=t.typeCondition;if(!r)return!0;const i=Zt(e,r);return i===n||!!$e(i)&&e.isSubType(i,n)}function Rn(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 Fn(e){return{Field:t,Directive:t};function t(t){var n;const r=Rn(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 Cn(e){const t=Object.create(null),n=e.getSchema(),r=n?n.getDirectives():It;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(rn(n)||on(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 Gn(e,t){return!!(be(e)||Le(e)||De(e))&&null!=e.getFields()[t]}function $n(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 Qn(e,t){const n=e.getInputType();if(!n)return;const r=Me(n);if(Ce(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 Un(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 rt(e,t,r.ofType)}return rt(e,t,r)}const jn=Object.freeze([function(e){return{Document(t){for(const n of t.definitions)if(!nn(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=Dn(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))}}}}}},cn,function(e){return{InlineFragment(t){const n=t.typeCondition;if(n){const t=Zt(e.getSchema(),n);if(t&&!Ge(t)){const t=fe(n);e.reportError(new GraphQLError(`Fragment cannot condition on non composite type "${t}".`,n))}}},FragmentDefinition(t){const n=Zt(e.getSchema(),t.typeCondition);if(n&&!Ge(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=Zt(e.getSchema(),t.type);if(void 0!==n&&!Re(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(Ce(Me(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=X("to use an inline fragment on",function(e,t,n){if(!$e(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:Le(t)&&e.isSubType(t,n)?-1:Le(n)&&e.isSubType(n,t)?1:ee(t.name,n.name)})).map((e=>e.name))}(r,n,i));""===o&&(o=X(function(e,t){if(be(e)||Le(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))}}},ln,function(e){return{InlineFragment(t){const n=e.getType(),r=e.getParentType();if(Ge(n)&&Ge(r)&&!it(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=Zt(e.getSchema(),n.typeCondition);if(Ge(t))return t}}(e,n),i=e.getParentType();if(r&&i&&!it(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=Rn(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)}}},an,Cn,function(e){return{...sn(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}".`+X(o),t))}}}},Fn,function(e){return{ListValue(t){if(!we(je(e.getParentInputType())))return Qn(e,t),!1},ObjectValue(t){const n=Me(e.getInputType());if(!De(n))return Qn(e,t),!1;const r=H(t.fields,(e=>e.name.value));for(const i of Object.values(n.getFields())){if(!r[i.name]&&tt(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=Me(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}".`+X(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=>Qn(e,t),IntValue:t=>Qn(e,t),FloatValue:t=>Qn(e,t),StringValue:t=>Qn(e,t),BooleanValue:t=>Qn(e,t)}},function(e){return{...On(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)&&He(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=Zt(t,s.type);if(a&&!Un(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){return{Field(t){const n=e.getFieldDef(),r=t.required;if(n&&r){const i=function(e){let t=e,n=0;for(;we(je(t));){t=ke(je(t)).ofType,n+=1}return n}(n.type),o=le(r,{RequiredDesignator:{leave:({element:e})=>null!=e?e:0},OptionalDesignator:{leave:({element:e})=>null!=e?e:0},ListNullability:{leave:({element:e})=>(null!=e?e:0)+1}});i>o?e.reportError(new GraphQLError("List nullability modifier is too shallow.",t.required)):i1)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;Gn(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=Rn(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))}}},cn,an,Cn,function(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)rn(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=_n[s.kind]:a&&(c=function(e){if(Oe(e))return m.SCALAR_TYPE_EXTENSION;if(be(e))return m.OBJECT_TYPE_EXTENSION;if(Le(e))return m.INTERFACE_TYPE_EXTENSION;if(Se(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.`+X(r),i.name))}}},sn,Fn,$n,On]);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,tn(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 Mn(e,n,r=jn,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,tn(o,p))}catch(e){if(e!==c)throw e}return u}function Pn(e,t,n=Vn){const r=[],i=new SDLValidationContext(e,t,(e=>{r.push(e)}));return le(e,pe(n.map((e=>e(i))))),r}function Bn(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 kt.SCALAR:return new GraphQLScalarType({name:(r=e).name,description:r.description,specifiedByURL:r.specifiedByURL});case kt.OBJECT:return new GraphQLObjectType({name:(n=e).name,description:n.description,interfaces:()=>h(n),fields:()=>m(n)});case kt.INTERFACE:return new GraphQLInterfaceType({name:(t=e).name,description:t.description,interfaces:()=>h(t),fields:()=>m(t)});case kt.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 kt.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 kt.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[...dt,...Gt])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===kt.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new GraphQLList(l(t))}if(e.kind===kt.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(!Ue(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(!be(e))throw new Error(`Expected ${P(e)} to be a GraphQL Object type.`);return e}(p(e))}function f(e){return function(e){if(!Le(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===kt.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(!Re(t)){const e=P(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?Ln(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 Yn(e,n,r){Qt(e),null!=n&&n.kind===m.DOCUMENT||t(!1,"Must provide valid Document AST."),!0!==(null==r?void 0:r.assumeValid)&&!0!==(null==r?void 0:r.assumeValidSDL)&&function(e,t){const n=Pn(e,t);if(0!==n.length)throw new Error(n.map((e=>e.message)).join("\n\n"))}(n,e);const i=e.toConfig(),o=Jn(i,n,r);return i===o?e:new GraphQLSchema(o)}function Jn(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(rn(e))c.push(e);else if(on(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=qn[t])&&void 0!==h?h:k(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:L(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 $t(e)||ft(e)?e:Oe(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=Xn(e))&&void 0!==o?o:i}return new GraphQLScalarType({...n,specifiedByURL:i,extensionASTNodes:n.extensionASTNodes.concat(r)})}(e):be(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),...b(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 GraphQLInterfaceType({...n,interfaces:()=>[...e.getInterfaces().map(E),...D(r)],fields:()=>({...Z(n.fields,N),...b(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 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)}))),...S(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=qn[n])&&void 0!==t?t:f[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function O(e){return e.kind===m.LIST_TYPE?new GraphQLList(O(e.type)):e.kind===m.NON_NULL_TYPE?new GraphQLNonNull(O(e.type)):_(e)}function b(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:O(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:L(n.arguments),deprecationReason:Kn(n),astNode:n}}}return t}function L(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=O(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:Ln(e.defaultValue,t),deprecationReason:Kn(e),astNode:e}}return n}function S(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=O(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:Ln(n.defaultValue,e),deprecationReason:Kn(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:Kn(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 k(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:()=>b(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:()=>b(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:Xn(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:()=>S(t),astNode:e,extensionASTNodes:r})}}}}const qn=H([...dt,...Gt],(e=>e.name));function Kn(e){const t=An(Tt,e);return null==t?void 0:t.reason}function Xn(e){const t=An(Nt,e);return null==t?void 0:t.url}function zn(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=Pn(e);if(0!==t.length)throw new Error(t.map((e=>e.message)).join("\n\n"))}(e);const r=Jn({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,...It.filter((e=>r.directives.every((t=>t.name!==e.name))))];return new GraphQLSchema({...r,directives:i})}function Hn(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 sr(e)+"directive @"+e.name+rr(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>function(e){if(Oe(e))return function(e){return sr(e)+`scalar ${e.name}`+function(e){if(null==e.specifiedByURL)return"";return` @specifiedBy(url: ${fe({kind:m.STRING,value:e.specifiedByURL})})`}(e)}(e);if(be(e))return function(e){return sr(e)+`type ${e.name}`+er(e)+tr(e)}(e);if(Le(e))return function(e){return sr(e)+`interface ${e.name}`+er(e)+tr(e)}(e);if(Se(e))return function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return sr(e)+"union "+e.name+n}(e);if(Ae(e))return function(e){const t=e.getValues().map(((e,t)=>sr(e," ",!t)+" "+e.name+or(e.deprecationReason)));return sr(e)+`enum ${e.name}`+nr(t)}(e);if(De(e))return function(e){const t=Object.values(e.getFields()).map(((e,t)=>sr(e," ",!t)+" "+ir(e)));return sr(e)+`input ${e.name}`+nr(t)}(e);r(!1,"Unexpected type: "+P(e))}(e)))].filter(Boolean).join("\n\n")}(e,(e=>{return t=e,!It.some((({name:e})=>e===t.name));var t}),Wn)}function Wn(e){return!ft(e)&&!$t(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}`),sr(e)+`schema {\n${t.join("\n")}\n}`}function er(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function tr(e){return nr(Object.values(e.getFields()).map(((e,t)=>sr(e," ",!t)+" "+e.name+rr(e.args," ")+": "+String(e.type)+or(e.deprecationReason))))}function nr(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function rr(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(ir).join(", ")+")":"(\n"+e.map(((e,n)=>sr(e," "+t,!n)+" "+t+ir(e))).join("\n")+"\n"+t+")"}function ir(e){const t=gt(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${fe(t)}`),n+or(e.deprecationReason)}function or(e){if(null==e)return"";if(e!==Et){return` @deprecated(reason: ${fe({kind:m.STRING,value:e})})`}return" @deprecated"}function sr(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:O(r)}).replace(/\n/g,"\n"+t)+"\n"}const ar=[ln],cr=[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))}}},...jn.filter((e=>!ar.includes(e)))];const ur={kind:m.DIRECTIVE_DEFINITION,description:(lr="A directive used by the Apollo iOS client to annotate operations or fragments that should be used exclusively for generating local cache mutations instead of as standard operations.",{kind:m.STRING,value:lr}),name:pr("apollo_client_ios_localCacheMutation"),repeatable:!1,locations:[pr("QUERY"),pr("MUTATION"),pr("SUBSCRIPTION"),pr("FRAGMENT_DEFINITION")]};var lr;function pr(e){return{kind:m.NAME,value:e}}const dr={kind:m.DOCUMENT,definitions:[ur]};class GraphQLSchemaValidationError extends Error{constructor(e){super(e.map((e=>e.message)).join("\n\n")),this.validationErrors=e,this.name="GraphQLSchemaValidationError"}}function fr(e){const t=jt(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}function hr(e){return e.startsWith("__")}const mr={kind:m.FIELD,name:{kind:m.NAME,value:"__typename"}};function vr(e){return le(e,{SelectionSet:{leave:(e,t,n)=>d(n)&&![m.FIELD,m.FRAGMENT_DEFINITION].includes(n.kind)?e:function(e){return e.selections.find((e=>e.kind==mr.kind&&e.name.value==mr.name.value))?e:{...e,selections:[mr,...e.selections]}}(e)},Field:{enter:e=>function(e){return e.name.value==mr.name.value?{...e,alias:void 0,directives:void 0}:e}(e)},Directive:{enter:e=>function(e){return e.name.value==ur.name.value?null:e}(e)}})}function yr(e){return null!=e}function Er(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(Er)};case m.OBJECT:return{kind:e.kind,value:e.fields.reduce(((e,t)=>(e[t.name.value]=Er(t.value),e)),{})};default:return e}}function Tr(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 Nr(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.has(t)){if(o.add(t),Le(t))for(const n of e.getPossibleTypes(t))s(Me(n));if(Se(t)){const e=t.getTypes();for(t of e)s(Me(t))}if(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(Me(Zt(e,t.type)))}}(t),be(t))for(const e of t.getInterfaces())s(Me(e))}}function a(t){var n;if(!t.name)throw new GraphQLError("Operations should be named",{nodes:t});const r=Tr(t),i=t.name.value,a=t.operation,c=(t.variableDefinitions||[]).map((t=>{const n=t.variable.name.value,r=t.defaultValue?Er(t.defaultValue):void 0,i=Zt(e,t.type);if(!i)throw new GraphQLError(`Couldn't get type from type node "${t.type}"`,{nodes:t});return s(Me(i)),{name:n,type:i,defaultValue:r}})),l=fe(vr(t)),d=e.getRootType(a),[f]=null!==(n=p(t.directives))&&void 0!==n?n:[void 0,void 0];return o.add(Me(d)),{name:i,operationType:a,variables:c,rootType:d,selectionSet:u(t.selectionSet,d),directives:f,source:l,filePath:r}}function c(t){var n;const r=t.name.value,i=Tr(t),o=fe(vr(t)),a=Zt(e,t.typeCondition),[c]=null!==(n=p(t.directives))&&void 0!==n?n:[void 0,void 0];return s(Me(a)),{name:r,filePath:i,source:o,typeCondition:a,selectionSet:u(t.selectionSet,a),directives:c}}function u(t,r){return{parentType:r,selections:t.selections.map((t=>function(t,r){var o,a;const[d,f]=null!==(o=p(t.directives))&&void 0!==o?o:[void 0,void 0];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===Rt.name&&e.getQueryType()===t?Rt:n===Ft.name&&e.getQueryType()===t?Ft:n===Ct.name&&(be(t)||Le(t)||Se(t))?Ct:be(t)||Le(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=pn(o.type,t.required),p=Me(c);s(Me(p));const{description:h,deprecationReason:m}=o;let v={kind:"Field",name:n,alias:i,type:c,arguments:l(o,t.arguments),inclusionConditions:f,description:!hr(n)&&h?h:void 0,deprecationReason:m||void 0,directives:d};if(Ge(p)){const e=t.selectionSet;if(!e)throw new GraphQLError(`Composite field "${n}" on type "${String(r)}" requires selection set`,{nodes:t});v.selectionSet=u(e,p)}return v}case m.INLINE_FRAGMENT:{const n=t.typeCondition,i=n?Zt(e,n):r;return s(i),{kind:"InlineFragment",selectionSet:u(t.selectionSet,i),inclusionConditions:f,directives:d}}case m.FRAGMENT_SPREAD:{const e=t.name.value,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}".`,{nodes:t.name});return{kind:"FragmentSpread",fragment:r,inclusionConditions:f,directives:d}}}}(t,r))).filter(yr)}}function l(...e){const t=e[0].args;return e[1]&&e[1].length>0?e[1].map((e=>{const n=e.name.value,r=t.find((t=>t.name===e.name.value)),i=null==r?void 0:r.type;if(!i)throw new GraphQLError(`Cannot find directive argument type for argument "${n}".`,{nodes:[e]});return{name:n,value:Er(e.value),type:i}})):void 0}function p(t){if(t&&t.length>0){const n=[],r=[];for(const i of t){const t=i.name.value,o=e.getDirective(t);if(!o)throw new GraphQLError(`Cannot find directive "${t}".`,{nodes:i});n.push({name:t,arguments:l(o,i.arguments)});const s=d(i,o);s&&r.push(s)}return[n,r.length>0?r:void 0]}}function d(e,t){var n;if("include"==t.name||"skip"==t.name){const r=null===(n=e.arguments)||void 0===n?void 0:n[0].value,i="skip"==t.name;switch(null==r?void 0:r.kind){case m.BOOLEAN:return i?r.value?"SKIPPED":"INCLUDED":r.value?"INCLUDED":"SKIPPED";case m.VARIABLE:return{variable:r.name.value,isInverted:i};default:throw new GraphQLError('Conditional inclusion directive has invalid "if" argument.',{nodes:e})}}}}function Ir(e){return function(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:m.DOCUMENT,definitions:t}}(e)}function gr(e){let t=[dr];return e&&(t=t.concat(e)),Ir(t)}function _r(e,t){return Yn(t,e)}return e.GraphQLEnumType=GraphQLEnumType,e.GraphQLError=GraphQLError,e.GraphQLInputObjectType=GraphQLInputObjectType,e.GraphQLInterfaceType=GraphQLInterfaceType,e.GraphQLObjectType=GraphQLObjectType,e.GraphQLScalarType=GraphQLScalarType,e.GraphQLSchema=GraphQLSchema,e.GraphQLSchemaValidationError=GraphQLSchemaValidationError,e.GraphQLUnionType=GraphQLUnionType,e.Source=Source,e.compileDocument=function(e,t){return Nr(_r(gr(),e),t)},e.loadSchemaFromIntrospectionResult=function(e){let t=JSON.parse(e);t.data&&(t=t.data);const n=Bn(t);return fr(n),n},e.loadSchemaFromSDL=function(e){const t=J(e);!function(e){const t=Pn(e);if(0!==t.length)throw new GraphQLSchemaValidationError(t)}(t);const n=zn(t,{assumeValidSDL:!0});return fr(n),n},e.mergeDocuments=Ir,e.parseDocument=function(e,t){return J(e,{experimentalClientControlledNullability:t})},e.printSchemaToSDL=function(e){return Hn(e)},e.validateDocument=function(e,t){return Mn(_r(gr(),e),t,cr)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); diff --git a/Sources/ApolloCodegenLib/TemplateString.swift b/Sources/ApolloCodegenLib/TemplateString.swift index a230d251fc..22e98a21a4 100644 --- a/Sources/ApolloCodegenLib/TemplateString.swift +++ b/Sources/ApolloCodegenLib/TemplateString.swift @@ -159,6 +159,20 @@ struct TemplateString: ExpressibleByStringInterpolation, CustomStringConvertible } } + mutating func appendInterpolation( + ifLet optional: Optional, + where whereBlock: ((T) -> Bool)? = nil, + _ includeBlock: @autoclosure () -> TemplateString, + else: @autoclosure () -> TemplateString? = nil + ) { + appendInterpolation( + ifLet: optional, + where: whereBlock, + { _ in includeBlock() }, + else: `else`() + ) + } + private mutating func removeLineIfEmpty() { let slice = substringToStartOfLine() if slice.allSatisfy(\.isWhitespace) { diff --git a/Sources/ApolloCodegenLib/Templates/FragmentTemplate.swift b/Sources/ApolloCodegenLib/Templates/FragmentTemplate.swift index bfce890c35..e93c1cac25 100644 --- a/Sources/ApolloCodegenLib/Templates/FragmentTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/FragmentTemplate.swift @@ -13,13 +13,21 @@ struct FragmentTemplate: TemplateRenderer { var template: TemplateString { TemplateString( """ - public struct \(fragment.name.firstUppercased): \(schema.name).SelectionSet, Fragment { + public struct \(fragment.name.firstUppercased): \(schema.name)\ + .\(if: isMutable, "Mutable")SelectionSet, Fragment { public static var fragmentDefinition: StaticString { ""\" \(fragment.definition.source) ""\" } - \(SelectionSetTemplate(schema: schema).BodyTemplate(fragment.rootField.selectionSet)) + \(SelectionSetTemplate( + schema: schema, + mutable: isMutable + ).BodyTemplate(fragment.rootField.selectionSet)) } """) } + + private var isMutable: Bool { + fragment.definition.isLocalCacheMutation + } } diff --git a/Sources/ApolloCodegenLib/Templates/LocalCacheMutationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/LocalCacheMutationDefinitionTemplate.swift new file mode 100644 index 0000000000..e0065015c1 --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/LocalCacheMutationDefinitionTemplate.swift @@ -0,0 +1,31 @@ +import OrderedCollections +import ApolloUtils + +struct LocalCacheMutationDefinitionTemplate: OperationTemplateRenderer { + /// IR representation of source [GraphQL Operation](https://spec.graphql.org/draft/#sec-Language.Operations). + let operation: IR.Operation + /// IR representation of source GraphQL schema. + let schema: IR.Schema + /// Shared codegen configuration. + let config: ReferenceWrapped + + let target: TemplateTarget = .operationFile + + var template: TemplateString { + TemplateString( + """ + public class \(operation.definition.nameWithSuffix.firstUppercased): LocalCacheMutation { + public static let operationType: GraphQLOperationType = .\(operation.definition.operationType.rawValue) + + \(section: VariableProperties(operation.definition.variables)) + + \(Initializer(operation.definition.variables)) + + \(section: VariableAccessors(operation.definition.variables)) + + \(SelectionSetTemplate(schema: schema).render(for: operation)) + } + """) + } + +} diff --git a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift index a6e7bf6c08..e6e7beeebf 100644 --- a/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/OperationDefinitionTemplate.swift @@ -3,7 +3,7 @@ import ApolloUtils /// Provides the format to convert a [GraphQL Operation](https://spec.graphql.org/draft/#sec-Language.Operations) /// into Swift code. -struct OperationDefinitionTemplate: TemplateRenderer { +struct OperationDefinitionTemplate: OperationTemplateRenderer { /// IR representation of source [GraphQL Operation](https://spec.graphql.org/draft/#sec-Language.Operations). let operation: IR.Operation /// IR representation of source GraphQL schema. @@ -72,51 +72,6 @@ struct OperationDefinitionTemplate: TemplateRenderer { } } - private func Initializer( - _ variables: [CompilationResult.VariableDefinition] - ) -> TemplateString { - let `init` = "public init" - if variables.isEmpty { - return "\(`init`)() {}" - } - - return """ - \(`init`)(\(list: variables.map(VariableParameter))) { - \(variables.map { "self.\($0.name) = \($0.name)" }, separator: "\n") - } - """ - } - - - func VariableProperties( - _ variables: [CompilationResult.VariableDefinition] - ) -> TemplateString { - """ - \(variables.map { "public var \($0.name): \($0.type.renderAsInputValue(inSchemaNamed: schema.name))"}, separator: "\n") - """ - } - - func VariableParameter(_ variable: CompilationResult.VariableDefinition) -> TemplateString { - """ - \(variable.name): \(variable.type.renderAsInputValue(inSchemaNamed: schema.name))\ - \(if: variable.defaultValue != nil, " = " + variable.renderVariableDefaultValue()) - """ - } - - func VariableAccessors( - _ variables: [CompilationResult.VariableDefinition] - ) -> TemplateString { - guard !variables.isEmpty else { - return "" - } - - return """ - public var variables: Variables? { - [\(variables.map { "\"\($0.name)\": \($0.name)"}, separator: ",\n ")] - } - """ - } - } fileprivate extension ApolloCodegenConfiguration.APQConfig { diff --git a/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationTemplateRenderer.swift b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationTemplateRenderer.swift new file mode 100644 index 0000000000..19a99f5b9a --- /dev/null +++ b/Sources/ApolloCodegenLib/Templates/RenderingHelpers/OperationTemplateRenderer.swift @@ -0,0 +1,54 @@ +/// Protocol for a `TemplateRenderer` that renders an operation definition template. +/// This protocol provides rendering helper functions for common template elements. +protocol OperationTemplateRenderer: TemplateRenderer { + var schema: IR.Schema { get } +} + +extension OperationTemplateRenderer { + func Initializer( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + let `init` = "public init" + if variables.isEmpty { + return "\(`init`)() {}" + } + + return """ + \(`init`)(\(list: variables.map(VariableParameter))) { + \(variables.map { "self.\($0.name) = \($0.name)" }, separator: "\n") + } + """ + } + + func VariableProperties( + _ variables: [CompilationResult.VariableDefinition] + ) -> TemplateString { + """ + \(variables.map { "public var \($0.name): \($0.type.renderAsInputValue(inSchemaNamed: schema.name))"}, separator: "\n") + """ + } + + func VariableParameter( + _ variable: CompilationResult.VariableDefinition + ) -> TemplateString { + """ + \(variable.name): \(variable.type.renderAsInputValue(inSchemaNamed: schema.name))\ + \(if: variable.defaultValue != nil, " = " + variable.renderVariableDefaultValue()) + """ + } + + func VariableAccessors( + _ 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/SchemaTemplate.swift b/Sources/ApolloCodegenLib/Templates/SchemaTemplate.swift index 01add3eeac..910fb57a28 100644 --- a/Sources/ApolloCodegenLib/Templates/SchemaTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/SchemaTemplate.swift @@ -64,6 +64,12 @@ struct SchemaTemplate: TemplateRenderer { public protocol \(prefix ?? "")InlineFragment: ApolloAPI.SelectionSet & ApolloAPI.InlineFragment where Schema == \(schemaName).Schema {} + + public protocol \(prefix ?? "")MutableSelectionSet: ApolloAPI.MutableRootSelectionSet + where Schema == \(schemaName).Schema {} + + public protocol \(prefix ?? "")MutableInlineFragment: ApolloAPI.MutableSelectionSet & ApolloAPI.InlineFragment + where Schema == \(schemaName).Schema {} """ ) } diff --git a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift index fc2b91a18e..c6e741d18c 100644 --- a/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift @@ -4,10 +4,12 @@ import InflectorKit struct SelectionSetTemplate { let schema: IR.Schema + let isMutable: Bool private let nameCache: SelectionSetNameCache - init(schema: IR.Schema) { + init(schema: IR.Schema, mutable: Bool = false) { self.schema = schema + self.isMutable = mutable self.nameCache = SelectionSetNameCache(schema: schema) } @@ -15,7 +17,7 @@ struct SelectionSetTemplate { func render(for operation: IR.Operation) -> String { TemplateString( """ - public struct Data: \(schema.name.firstUppercased).SelectionSet { + public struct Data: \(SelectionSetType()) { \(BodyTemplate(operation.rootField.selectionSet)) } """ @@ -27,7 +29,7 @@ struct SelectionSetTemplate { TemplateString( """ \(SelectionSetNameDocumentation(field.selectionSet)) - public struct \(field.formattedFieldName): \(schema.name.firstUppercased).SelectionSet { + public struct \(field.formattedFieldName): \(SelectionSetType()) { \(BodyTemplate(field.selectionSet)) } """ @@ -39,13 +41,30 @@ struct SelectionSetTemplate { TemplateString( """ \(SelectionSetNameDocumentation(inlineFragment)) - public struct \(inlineFragment.renderedTypeName): \(schema.name.firstUppercased).InlineFragment { + public struct \(inlineFragment.renderedTypeName): \(SelectionSetType(asInlineFragment: true)) { \(BodyTemplate(inlineFragment)) } """ ).description } + // MARK: - Selection Set Type + private func SelectionSetType(asInlineFragment: Bool = false) -> TemplateString { + let selectionSetTypeName: String + switch (isMutable, asInlineFragment) { + case (false, false): + selectionSetTypeName = "SelectionSet" + case (false, true): + selectionSetTypeName = "InlineFragment" + case (true, false): + selectionSetTypeName = "MutableSelectionSet" + case (true, true): + selectionSetTypeName = "MutableInlineFragment" + } + + return "\(schema.name.firstUppercased).\(selectionSetTypeName)" + } + // MARK: - Selection Set Name Documentation func SelectionSetNameDocumentation(_ selectionSet: IR.SelectionSet) -> TemplateString { """ @@ -61,7 +80,7 @@ struct SelectionSetTemplate { let selections = selectionSet.selections let scope = selectionSet.typeInfo.scope return """ - \(Self.DataFieldAndInitializerTemplate) + \(DataFieldAndInitializerTemplate()) \(ParentTypeTemplate(selectionSet.parentType)) \(ifLet: selections.direct?.groupedByInclusionCondition, { SelectionsTemplate($0, in: scope) }) @@ -78,10 +97,12 @@ struct SelectionSetTemplate { """ } - private static let DataFieldAndInitializerTemplate = """ - public let data: DataDict + private func DataFieldAndInitializerTemplate() -> String { + """ + public \(isMutable ? "var" : "let") data: DataDict public init(data: DataDict) { self.data = data } """ + } private func ParentTypeTemplate(_ type: GraphQLCompositeType) -> String { "public static var __parentType: ParentType { .\(type.parentTypeEnumType)(\(schema.name.firstUppercased).\(type.name.firstUppercased).self) }" @@ -199,8 +220,17 @@ struct SelectionSetTemplate { }() return """ public var \(field.responseKey.firstLowercased): \ - \(typeName(for: field, forceOptional: isConditionallyIncluded)) \ - { data["\(field.responseKey)"] } + \(typeName(for: field, forceOptional: isConditionallyIncluded)) {\ + \(if: isMutable, + """ + + get { data["\(field.responseKey)"] } + set { data["\(field.responseKey)"] = newValue } + } + """, else: + """ + data["\(field.responseKey)"] } + """) """ } @@ -218,10 +248,25 @@ struct SelectionSetTemplate { private func InlineFragmentAccessorTemplate(_ inlineFragment: IR.SelectionSet) -> TemplateString { let typeName = inlineFragment.renderedTypeName return """ - public var \(typeName.firstLowercased): \(typeName)? { _asInlineFragment\ + public var \(typeName.firstLowercased): \(typeName)? {\ + \(if: isMutable, + """ + + get { \(InlineFragmentGetter(inlineFragment)) } + set { if let newData = newValue?.data._data { data._data = newData }} + } + """, + else: " \(InlineFragmentGetter(inlineFragment)) }" + ) + """ + } + + private func InlineFragmentGetter(_ inlineFragment: IR.SelectionSet) -> TemplateString { + """ + _asInlineFragment\ (\(ifLet: inlineFragment.inclusionConditions, { - "if: \($0.conditionVariableExpression())" - })) } + "if: \($0.conditionVariableExpression())" + })) """ } @@ -236,7 +281,7 @@ struct SelectionSetTemplate { return """ public struct Fragments: FragmentContainer { - \(Self.DataFieldAndInitializerTemplate) + \(DataFieldAndInitializerTemplate()) \(ifLet: selections.direct?.fragments.values, { "\($0.map { FragmentAccessorTemplate($0, in: scope) }, separator: "\n")" @@ -251,10 +296,46 @@ struct SelectionSetTemplate { in scope: IR.ScopeDescriptor ) -> TemplateString { let name = fragment.definition.name + let propertyName = name.firstLowercased + let typeName = name.firstUppercased + let isOptional = fragment.inclusionConditions != nil && + !scope.matches(fragment.inclusionConditions.unsafelyUnwrapped) + + let getter = FragmentGetter( + fragment, + if: isOptional ? fragment.inclusionConditions.unsafelyUnwrapped : nil + ) + return """ - public var \(name.firstLowercased): \(name.firstUppercased)\ - \(ifLet: fragment.inclusionConditions, where: { !scope.matches($0) }, { _ in "?" }) \ - { _toFragment() } + public var \(propertyName): \(typeName)\ + \(if: isOptional, "?") {\ + \(if: isMutable, + """ + + get { \(getter) } + _modify { var f = \(propertyName); yield &f; \( + if: isOptional, + "if let newData = f?.data { data = newData }", + else: "data = f.data" + ) } + @available(*, unavailable, message: "mutate properties of the fragment instead.") + set { preconditionFailure() } + } + """, + else: " \(getter) }" + ) + """ + } + + private func FragmentGetter( + _ fragment: IR.FragmentSpread, + if inclusionConditions: AnyOf? + ) -> TemplateString { + """ + _toFragment(\ + \(ifLet: inclusionConditions, { + "if: \($0.conditionVariableExpression)" + })) """ } diff --git a/Sources/StarWarsAPI/Package.swift b/Sources/StarWarsAPI/Package.swift deleted file mode 100644 index 355c6b3310..0000000000 --- a/Sources/StarWarsAPI/Package.swift +++ /dev/null @@ -1,28 +0,0 @@ -// swift-tools-version:5.3 - -import PackageDescription - -let package = Package( - name: "StarWarsAPI", - platforms: [ - .iOS(.v12), - .macOS(.v10_14), - .tvOS(.v12), - .watchOS(.v5), - ], - products: [ - .library(name: "StarWarsAPI", targets: ["StarWarsAPI"]), - ], - dependencies: [ - .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0-alpha.2"), - ], - targets: [ - .target( - name: "StarWarsAPI", - dependencies: [ - .product(name: "ApolloAPI", package: "apollo-ios"), - ], - path: "." - ), - ] -) \ No newline at end of file diff --git a/Sources/StarWarsAPI/StarWarsAPI/Package.swift b/Sources/StarWarsAPI/StarWarsAPI/Package.swift index 70a57e9806..2d60c3c646 100644 --- a/Sources/StarWarsAPI/StarWarsAPI/Package.swift +++ b/Sources/StarWarsAPI/StarWarsAPI/Package.swift @@ -14,7 +14,7 @@ let package = Package( .library(name: "StarWarsAPI", targets: ["StarWarsAPI"]), ], dependencies: [ - .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0-alpha.5"), + .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0-alpha.6"), ], targets: [ .target( diff --git a/Sources/StarWarsAPI/StarWarsAPI/Sources/Operations/HeroDetailsFragmentConditionalInclusionQuery.swift b/Sources/StarWarsAPI/StarWarsAPI/Sources/Operations/HeroDetailsFragmentConditionalInclusionQuery.swift index ff186f4e2e..14837d068e 100644 --- a/Sources/StarWarsAPI/StarWarsAPI/Sources/Operations/HeroDetailsFragmentConditionalInclusionQuery.swift +++ b/Sources/StarWarsAPI/StarWarsAPI/Sources/Operations/HeroDetailsFragmentConditionalInclusionQuery.swift @@ -57,7 +57,7 @@ public class HeroDetailsFragmentConditionalInclusionQuery: GraphQLQuery { public let data: DataDict public init(data: DataDict) { self.data = data } - public var heroDetails: HeroDetails? { _toFragment() } + public var heroDetails: HeroDetails? { _toFragment(if: "includeDetails") } } /// Hero.IfIncludeDetails diff --git a/Sources/UploadAPI/UploadAPI/Package.swift b/Sources/UploadAPI/UploadAPI/Package.swift index 9b167fd380..640e4c9680 100644 --- a/Sources/UploadAPI/UploadAPI/Package.swift +++ b/Sources/UploadAPI/UploadAPI/Package.swift @@ -14,7 +14,7 @@ let package = Package( .library(name: "UploadAPI", targets: ["UploadAPI"]), ], dependencies: [ - .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0-alpha.5"), + .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0-alpha.6"), ], targets: [ .target( diff --git a/SwiftScripts/.swiftpm/xcode/xcshareddata/xcschemes/Codegen-Package.xcscheme b/SwiftScripts/.swiftpm/xcode/xcshareddata/xcschemes/Codegen-Package.xcscheme index 2933a1330e..662e41e7c1 100644 --- a/SwiftScripts/.swiftpm/xcode/xcshareddata/xcschemes/Codegen-Package.xcscheme +++ b/SwiftScripts/.swiftpm/xcode/xcshareddata/xcschemes/Codegen-Package.xcscheme @@ -1,6 +1,6 @@ - - - - - - - - - - String { + subject.template.description + } + + // MARK: - Operation Definition + + func test__generate__givenQuery_generatesLocalCacheMutation() throws { + // given + let expected = + """ + public class TestOperationLocalCacheMutation: LocalCacheMutation { + public static let operationType: GraphQLOperationType = .query + + """ + + // when + try buildSubjectAndOperation() + + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) + } + + func test__generate__givenQueryWithLowercasing_generatesCorrectlyCasedLocalCacheMutation() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + species: String! + } + """ + + document = """ + query lowercaseOperation($variable: String = "TestVar") @apollo_client_ios_localCacheMutation { + allAnimals { + species + } + } + """ + + let expected = + """ + public class LowercaseOperationLocalCacheMutation: LocalCacheMutation { + public static let operationType: GraphQLOperationType = .query + + """ + + // when + try buildSubjectAndOperation(named: "lowercaseOperation") + + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) + } + + func test__generate__givenQueryWithNameEndingInLocalCacheMutation_generatesLocalCacheMutationWithoutDoubledTypeSuffix() throws { + // given + document = """ + query TestOperationLocalCacheMutation @apollo_client_ios_localCacheMutation { + allAnimals { + species + } + } + """ + + let expected = + """ + public class TestOperationLocalCacheMutation: LocalCacheMutation { + public static let operationType: GraphQLOperationType = .query + + """ + + // when + try buildSubjectAndOperation(named: "TestOperationLocalCacheMutation") + + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) + } + + func test__generate__givenMutation_generatesLocalCacheMutation() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Mutation { + addAnimal: Animal! + } + + type Animal { + species: String! + } + """ + + document = """ + mutation TestOperation @apollo_client_ios_localCacheMutation { + addAnimal { + species + } + } + """ + + let expected = + """ + public class TestOperationLocalCacheMutation: LocalCacheMutation { + public static let operationType: GraphQLOperationType = .mutation + + """ + + // when + try buildSubjectAndOperation() + + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) + } + + func test__generate__givenSubscription_generatesSubscriptionOperation() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Subscription { + streamAnimals: [Animal!] + } + + type Animal { + species: String! + } + """ + + document = """ + subscription TestOperation @apollo_client_ios_localCacheMutation { + streamAnimals { + species + } + } + """ + + let expected = + """ + public class TestOperationLocalCacheMutation: LocalCacheMutation { + public static let operationType: GraphQLOperationType = .subscription + + """ + + // when + try buildSubjectAndOperation() + + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) + } + + // MARK: - Variables + + func test__generate__givenQueryWithScalarVariable_generatesQueryOperationWithVariable() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + species: String! + } + """ + + document = """ + query TestOperation($variable: String!) @apollo_client_ios_localCacheMutation { + 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 = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 4, 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!) @apollo_client_ios_localCacheMutation { + 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 = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 4, ignoringExtraLines: true)) + } + + func test__generate__givenQueryWithNullableScalarVariable_generatesQueryOperationWithVariable() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + species: String! + } + """ + + document = """ + query TestOperation($variable: String = "TestVar") @apollo_client_ios_localCacheMutation { + allAnimals { + species + } + } + """ + + let expected = + """ + public var variable: GraphQLNullable + + public init(variable: GraphQLNullable = "TestVar") { + self.variable = variable + } + + public var variables: Variables? { + ["variable": variable] + } + """ + + // when + try buildSubjectAndOperation() + + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine(expected, atLine: 4, ignoringExtraLines: true)) + } + +} diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift index 4d8f622a54..81e9755102 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/OperationDefinitionTemplateTests.swift @@ -399,8 +399,6 @@ class OperationDefinitionTemplateTests: XCTestCase { let actual = renderSubject() -// print(actual) - // then expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SchemaTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SchemaTemplateTests.swift index b9f76dd4d6..34af446555 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SchemaTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SchemaTemplateTests.swift @@ -104,6 +104,12 @@ class SchemaTemplateTests: XCTestCase { public protocol AName_InlineFragment: ApolloAPI.SelectionSet & ApolloAPI.InlineFragment where Schema == AName.Schema {} + + public protocol AName_MutableSelectionSet: ApolloAPI.MutableRootSelectionSet + where Schema == AName.Schema {} + + public protocol AName_MutableInlineFragment: ApolloAPI.MutableSelectionSet & ApolloAPI.InlineFragment + where Schema == AName.Schema {} """ // when @@ -130,6 +136,12 @@ class SchemaTemplateTests: XCTestCase { public protocol InlineFragment: ApolloAPI.SelectionSet & ApolloAPI.InlineFragment where Schema == AName.Schema {} + + public protocol MutableSelectionSet: ApolloAPI.MutableRootSelectionSet + where Schema == AName.Schema {} + + public protocol MutableInlineFragment: ApolloAPI.MutableSelectionSet & ApolloAPI.InlineFragment + where Schema == AName.Schema {} """ // when @@ -156,6 +168,12 @@ class SchemaTemplateTests: XCTestCase { public protocol InlineFragment: ApolloAPI.SelectionSet & ApolloAPI.InlineFragment where Schema == AName.Schema {} + + public protocol MutableSelectionSet: ApolloAPI.MutableRootSelectionSet + where Schema == AName.Schema {} + + public protocol MutableInlineFragment: ApolloAPI.MutableSelectionSet & ApolloAPI.InlineFragment + where Schema == AName.Schema {} """ // when diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift index e930457782..38507c7057 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplateTests.swift @@ -3080,7 +3080,9 @@ class SelectionSetTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 14, ignoringExtraLines: true)) } - func test__render_fragmentAccessor__givenFragmentOnSameTypeWithInclusionCondition_rendersFragmentAccessorAsOptional() throws { + // MARK: - Fragment Accessors - Include Skip + + func test__render_fragmentAccessor__givenFragmentOnSameTypeWithInclusionCondition_rendersFragmentAccessorAsOptionalWithInclusionCondition() throws { // given schemaSDL = """ type Query { @@ -3115,7 +3117,7 @@ class SelectionSetTemplateTests: XCTestCase { public let data: DataDict public init(data: DataDict) { self.data = data } - public var fragmentA: FragmentA? { _toFragment() } + public var fragmentA: FragmentA? { _toFragment(if: "a") } public var lowercaseFragment: LowercaseFragment { _toFragment() } } """ @@ -3132,7 +3134,7 @@ class SelectionSetTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 16, ignoringExtraLines: true)) } - func test__render_fragmentAccessor__givenFragmentWithInclusionConditionThatMatchesScope_rendersFragmentAccessorAsNotOptional() throws { + func test__render_fragmentAccessor__givenFragmentOnSameTypeWithInclusionConditionThatMatchesScope_rendersFragmentAccessorAsNotOptional() throws { // given schemaSDL = """ type Query { @@ -3178,6 +3180,52 @@ class SelectionSetTemplateTests: XCTestCase { expect(actual).to(equalLineByLine(expected, atLine: 15, ignoringExtraLines: true)) } + func test__render_fragmentAccessor__givenFragmentOnSameTypeWithInclusionConditionThatPartiallyMatchesScope_rendersFragmentAccessorAsOptionalWithConditions() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + string: String! + int: Int! + } + """ + + document = """ + query TestOperation($a: Boolean!, $b: Boolean!) { + allAnimals @include(if: $a) { + ...FragmentA @include(if: $a) @include(if: $b) + } + } + + fragment FragmentA on Animal { + int + } + """ + + let expected = """ + public struct Fragments: FragmentContainer { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public var fragmentA: FragmentA? { _toFragment(if: "a" && "b") } + } + """ + + // 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: 13, ignoringExtraLines: true)) + } + func test__render_fragmentAccessor__givenFragmentMergedFromParent_withInclusionConditionThatMatchesScope_rendersFragmentAccessorAsNotOptional() throws { // given schemaSDL = """ diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_LocalCacheMutation_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_LocalCacheMutation_Tests.swift new file mode 100644 index 0000000000..a56c0438eb --- /dev/null +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_LocalCacheMutation_Tests.swift @@ -0,0 +1,407 @@ +import XCTest +import Nimble +@testable import ApolloCodegenLib +import ApolloCodegenInternalTestHelpers + +class SelectionSetTemplate_LocalCacheMutationTests: XCTestCase { + + var schemaSDL: String! + var document: String! + var ir: IR! + var operation: IR.Operation! + var subject: SelectionSetTemplate! + + override func setUp() { + super.setUp() + } + + override func tearDown() { + schemaSDL = nil + document = nil + ir = nil + operation = nil + subject = nil + super.tearDown() + } + + // MARK: - Helpers + + func buildSubjectAndOperation(named operationName: String = "TestOperation") throws { + ir = try .mock(schema: schemaSDL, document: document) + let operationDefinition = try XCTUnwrap(ir.compilationResult[operation: operationName]) + operation = ir.build(operation: operationDefinition) + subject = SelectionSetTemplate(schema: ir.schema, mutable: true) + } + + // MARK: - Tests + + func test__renderForOperation__rendersDeclarationAsMutableSelectionSet() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + """ + + document = """ + query TestOperation @apollo_client_ios_localCacheMutation { + allAnimals { + species + } + } + """ + + let expected = """ + public struct Data: TestSchema.MutableSelectionSet { + """ + + // when + try buildSubjectAndOperation() + let actual = subject.render(for: operation) + + // then + expect(actual).to(equalLineByLine(expected, ignoringExtraLines: true)) + } + + func test__renderForEntityField__rendersDeclarationAsMutableSelectionSet() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + + type Dog { + name: String! + } + """ + + document = """ + query TestOperation @apollo_client_ios_localCacheMutation { + allAnimals { + ... on Dog { + name + } + } + } + """ + + let expected = """ + public struct AllAnimal: TestSchema.MutableSelectionSet { + """ + + // 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: 2, ignoringExtraLines: true)) + } + + func test__renderForInlineFragment__rendersDeclarationAsMutableInlineFragment() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + + type Dog { + name: String! + } + """ + + document = """ + query TestOperation @apollo_client_ios_localCacheMutation { + allAnimals { + ... on Dog { + name + } + } + } + """ + + let expected = """ + public struct AsDog: TestSchema.MutableInlineFragment { + """ + + // 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: 17, ignoringExtraLines: true)) + } + + func test__render_dataDict__rendersDataDictAsVar() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + """ + + document = """ + query TestOperation @apollo_client_ios_localCacheMutation { + allAnimals { + species + } + } + """ + + let expected = """ + public var data: DataDict + public init(data: DataDict) { self.data = data } + """ + + // 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: 3, ignoringExtraLines: true)) + } + + func test__render_fragmentContainer_dataDict__rendersDataDictAsVar() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + string: String! + int: Int! + } + """ + + document = """ + query TestOperation { + allAnimals { + ...FragmentA + } + } + + fragment FragmentA on Animal { + int + } + """ + + let expected = """ + public struct Fragments: FragmentContainer { + public var data: DataDict + public init(data: DataDict) { self.data = data } + """ + + // 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: 16, ignoringExtraLines: true)) + } + + func test__render_fieldAccessors__rendersFieldAccessorWithGetterAndSetter() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + type Animal { + fieldName: String! + } + """ + + document = """ + query TestOperation { + allAnimals { + fieldName + } + } + """ + + let expected = """ + public var fieldName: String { + get { data["fieldName"] } + set { data["fieldName"] = newValue } + } + """ + + // 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: 11, ignoringExtraLines: true)) + } + + func test__render_inlineFragmentAccessors__rendersAccessorWithGetterAndSetter() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + + type Dog { + name: String! + } + """ + + document = """ + query TestOperation @apollo_client_ios_localCacheMutation { + allAnimals { + ... on Dog { + name + } + } + } + """ + + let expected = """ + public var asDog: AsDog? { + get { _asInlineFragment() } + set { if let newData = newValue?.data._data { data._data = newData }} + } + """ + + // 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: 11, ignoringExtraLines: true)) + } + + func test__render_namedFragmentAccessors__givenFragmentWithNoConditions_rendersAccessorWithGetterModifierAndSetterUnavailable() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + """ + + document = """ + query TestOperation @apollo_client_ios_localCacheMutation { + allAnimals { + ...AnimalDetails + } + } + + fragment AnimalDetails on Animal { + species + } + """ + + let expected = """ + public var animalDetails: AnimalDetails { + get { _toFragment() } + _modify { var f = animalDetails; yield &f; data = f.data } + @available(*, unavailable, message: "mutate properties of the fragment instead.") + set { preconditionFailure() } + } + """ + + // 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: 20, ignoringExtraLines: true)) + } + + func test__render_namedFragmentAccessors__givenFragmentWithConditions_rendersAccessorWithGetterAndSetter() throws { + // given + schemaSDL = """ + type Query { + allAnimals: [Animal!] + } + + interface Animal { + species: String! + } + """ + + document = """ + query TestOperation($a: Boolean!) @apollo_client_ios_localCacheMutation { + allAnimals { + ...AnimalDetails @include(if: $a) + } + } + + fragment AnimalDetails on Animal { + species + } + """ + + let expected = """ + public var animalDetails: AnimalDetails? { + get { _toFragment(if: "a") } + _modify { var f = animalDetails; yield &f; if let newData = f?.data { data = newData } } + @available(*, unavailable, message: "mutate properties of the fragment instead.") + set { preconditionFailure() } + } + """ + + // 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: 20, ignoringExtraLines: true)) + } +} diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_RenderOperation_Tests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_RenderOperation_Tests.swift index 53bac2302f..1e69819827 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_RenderOperation_Tests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/SelectionSet/SelectionSetTemplate_RenderOperation_Tests.swift @@ -35,7 +35,7 @@ class SelectionSetTemplate_RenderOperation_Tests: XCTestCase { // MARK: - Tests - func test__render__givenOperationWithName_rendersDeclarationWithName() throws { + func test__render__givenOperationWithName_rendersDeclaration() throws { // given schemaSDL = """ type Query { diff --git a/Tests/ApolloCodegenTests/TestHelpers/LineByLineComparison.swift b/Tests/ApolloCodegenTests/TestHelpers/LineByLineComparison.swift index 866f361eb1..74eebf3fb7 100644 --- a/Tests/ApolloCodegenTests/TestHelpers/LineByLineComparison.swift +++ b/Tests/ApolloCodegenTests/TestHelpers/LineByLineComparison.swift @@ -17,9 +17,11 @@ public func equalLineByLine( ignoringExtraLines: Bool = false ) -> Predicate { return Predicate.define() { actual in - guard let actualLines = try actual.evaluate()?.lines(startingAt: startLine) else { - return PredicateResult( - status: .fail, + let actualString = try actual.evaluate() + + guard let actualLines = actualString?.lines(startingAt: startLine) else { + return PrettyPrintedFailureResult( + actual: actualString, message: .fail("Insufficient Lines. Check `atLine` value.") ) } @@ -37,16 +39,16 @@ public func equalLineByLine( message: .expectedTo("be equal") ) } else { - return PredicateResult( - status: .fail, + return PrettyPrintedFailureResult( + actual: actualString, message: .fail("Expected \(expectedLines.count), actual ended at line \(actualLines.count)") ) } } if actualLine != expectedLine { - return PredicateResult( - status: .fail, + return PrettyPrintedFailureResult( + actual: actualString, message: .fail("Line \(index + 1) did not match. Expected \"\(expectedLine)\", got \"\(actualLine)\".") ) } @@ -66,6 +68,20 @@ public func equalLineByLine( } } +fileprivate func PrettyPrintedFailureResult( + actual: String?, + message: ExpectationMessage +) -> PredicateResult { + if let actual = actual { + print ("Actual Document:") + print(actual) + } + return PredicateResult( + status: .fail, + message: message + ) +} + extension String { fileprivate func lines(startingAt startLine: Int) -> ArraySlice? { let allLines = self.components(separatedBy: "\n") diff --git a/Tests/ApolloTests/Cache/ReadWriteFromStoreTests.swift b/Tests/ApolloTests/Cache/ReadWriteFromStoreTests.swift index c7e0c5f899..a4b28129ba 100644 --- a/Tests/ApolloTests/Cache/ReadWriteFromStoreTests.swift +++ b/Tests/ApolloTests/Cache/ReadWriteFromStoreTests.swift @@ -755,7 +755,9 @@ class ReadWriteFromStoreTests: XCTestCase, CacheDependentTesting, StoreLoading { var givenFragment: GivenFragment { get { _toFragment() } - set { data._data = newValue.data._data } + _modify { var f = givenFragment; yield &f; data = f.data } + @available(*, unavailable, message: "mutate properties of the fragment instead.") + set { preconditionFailure() } } } } @@ -871,13 +873,34 @@ class ReadWriteFromStoreTests: XCTestCase, CacheDependentTesting, StoreLoading { set { data["name"] = newValue } } + var asDroid: AsDroid? { + get { _asInlineFragment() } + set { if let newData = newValue?.data._data { data._data = newData }} + } + + struct AsDroid: MockMutableInlineFragment { + public var data: DataDict = DataDict([:], variables: nil) + static let __parentType: ParentType = .Object(Droid.self) + + static var selections: [Selection] { [ + .field("primaryFunction", String.self), + ]} + + var primaryFunction: String { + get { data["primaryFunction"] } + set { data["primaryFunction"] = newValue } + } + } + struct Fragments: FragmentContainer { var data: DataDict init(data: DataDict) { self.data = data } var givenFragment: GivenFragment? { get { _toFragment() } - set { if let newData = newValue?.data._data { data._data = newData } } + _modify { var f = givenFragment; yield &f; if let newData = f?.data { data = newData } } + @available(*, unavailable, message: "mutate properties of the fragment instead.") + set { preconditionFailure() } } } } diff --git a/Tests/ApolloTests/SelectionSetTests.swift b/Tests/ApolloTests/SelectionSetTests.swift index d41de84566..8526d7cc1d 100644 --- a/Tests/ApolloTests/SelectionSetTests.swift +++ b/Tests/ApolloTests/SelectionSetTests.swift @@ -812,4 +812,70 @@ class SelectionSetTests: XCTestCase { expect(actual.asCharacter).to(beNil()) } + // MARK: - To Fragment Conversion Tests + + func test__toFragment_givenInclusionCondition_true_returnsFragment() { + // given + class GivenFragment: MockFragment { } + + class Hero: MockSelectionSet, SelectionSet { + typealias Schema = MockSchemaConfiguration + + override class var selections: [Selection] {[ + .field("__typename", String.self), + .include(if: "includeFragment", .fragment(GivenFragment.self)) + ]} + + public struct Fragments: FragmentContainer { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public var givenFragment: GivenFragment? { _toFragment(if: "includeFragment") } + } + } + + let object: JSONObject = [ + "__typename": "Human", + "name": "Han Solo" + ] + + // when + let actual = Hero(data: DataDict(object, variables: ["includeFragment": true])) + + // then + expect(actual.fragments.givenFragment).toNot(beNil()) + } + + func test__toFragment_givenInclusionCondition_false_returnsNil() { + // given + class GivenFragment: MockFragment { } + + class Hero: MockSelectionSet, SelectionSet { + typealias Schema = MockSchemaConfiguration + + override class var selections: [Selection] {[ + .field("__typename", String.self), + .include(if: "includeFragment", .fragment(GivenFragment.self)) + ]} + + public struct Fragments: FragmentContainer { + public let data: DataDict + public init(data: DataDict) { self.data = data } + + public var givenFragment: GivenFragment? { _toFragment(if: "includeFragment") } + } + } + + let object: JSONObject = [ + "__typename": "Human", + "name": "Han Solo" + ] + + // when + let actual = Hero(data: DataDict(object, variables: ["includeFragment": false])) + + // then + expect(actual.fragments.givenFragment).to(beNil()) + } + } diff --git a/Tests/TestPlans/Apollo-CodegenTestPlan.xctestplan b/Tests/TestPlans/Apollo-CodegenTestPlan.xctestplan index 2a117aa0f2..01f3139057 100644 --- a/Tests/TestPlans/Apollo-CodegenTestPlan.xctestplan +++ b/Tests/TestPlans/Apollo-CodegenTestPlan.xctestplan @@ -13,6 +13,7 @@ }, "testTargets" : [ { + "parallelizable" : true, "target" : { "containerPath" : "container:Apollo.xcodeproj", "identifier" : "9BAEEBFB234BB8FD00808306",