@conduit-client/generator-ts 5.67.0-dev1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/main/index.js +6 -0
  2. package/dist/main/index.js.map +1 -0
  3. package/dist/types/index.d.ts +0 -0
  4. package/dist/types/v1/__tests__/api-module-generator-service.spec.d.ts +1 -0
  5. package/dist/types/v1/__tests__/test-utils/additional-properties-api.d.ts +8 -0
  6. package/dist/types/v1/__tests__/test-utils/all-of-api.d.ts +8 -0
  7. package/dist/types/v1/__tests__/test-utils/any-api.d.ts +8 -0
  8. package/dist/types/v1/__tests__/test-utils/array-api.d.ts +8 -0
  9. package/dist/types/v1/__tests__/test-utils/base-api.d.ts +9 -0
  10. package/dist/types/v1/__tests__/test-utils/datetime-api.d.ts +8 -0
  11. package/dist/types/v1/__tests__/test-utils/discriminator-api.d.ts +9 -0
  12. package/dist/types/v1/__tests__/test-utils/enum-api.d.ts +8 -0
  13. package/dist/types/v1/__tests__/test-utils/index.d.ts +31 -0
  14. package/dist/types/v1/__tests__/test-utils/object-api.d.ts +8 -0
  15. package/dist/types/v1/__tests__/test-utils/oneof-api.d.ts +8 -0
  16. package/dist/types/v1/__tests__/test-utils/scalar-api.d.ts +9 -0
  17. package/dist/types/v1/__tests__/utils.spec.d.ts +1 -0
  18. package/dist/types/v1/api-module-generator-service.d.ts +18 -0
  19. package/dist/types/v1/files/__tests__/code.spec.d.ts +1 -0
  20. package/dist/types/v1/files/__tests__/file.spec.d.ts +1 -0
  21. package/dist/types/v1/files/__tests__/write-files.spec.d.ts +1 -0
  22. package/dist/types/v1/files/code.d.ts +86 -0
  23. package/dist/types/v1/files/file.d.ts +79 -0
  24. package/dist/types/v1/files/index.d.ts +3 -0
  25. package/dist/types/v1/files/write-files.d.ts +12 -0
  26. package/dist/types/v1/generators/__tests__/api-family-module-generator.spec.d.ts +1 -0
  27. package/dist/types/v1/generators/__tests__/aura-command-generator.spec.d.ts +1 -0
  28. package/dist/types/v1/generators/__tests__/aura-graphql-normalized-cache-control-command-generator.spec.d.ts +1 -0
  29. package/dist/types/v1/generators/__tests__/aura-normalized-cache-control-command-generator.spec.d.ts +1 -0
  30. package/dist/types/v1/generators/__tests__/aura-resource-cache-control-command-generator.spec.d.ts +1 -0
  31. package/dist/types/v1/generators/__tests__/base-command-generator.spec.d.ts +1 -0
  32. package/dist/types/v1/generators/__tests__/bindings-generator.spec.d.ts +1 -0
  33. package/dist/types/v1/generators/__tests__/built-test-model.d.ts +10 -0
  34. package/dist/types/v1/generators/__tests__/cache-control-generator.spec.d.ts +1 -0
  35. package/dist/types/v1/generators/__tests__/command-config-builder.spec.d.ts +1 -0
  36. package/dist/types/v1/generators/__tests__/http-command-generator.spec.d.ts +1 -0
  37. package/dist/types/v1/generators/__tests__/http-normalized-cache-control-command-generator.spec.d.ts +1 -0
  38. package/dist/types/v1/generators/__tests__/imperative-binding-generator.spec.d.ts +1 -0
  39. package/dist/types/v1/generators/__tests__/imperative-legacy-binding-generator.spec.d.ts +1 -0
  40. package/dist/types/v1/generators/__tests__/normalized-cache-control-generator-mixin.spec.d.ts +1 -0
  41. package/dist/types/v1/generators/__tests__/utils.spec.d.ts +1 -0
  42. package/dist/types/v1/generators/__tests__/wire-binding-generator.spec.d.ts +1 -0
  43. package/dist/types/v1/generators/api-family-module-generator.d.ts +54 -0
  44. package/dist/types/v1/generators/aura-command-generator.d.ts +46 -0
  45. package/dist/types/v1/generators/aura-graphql-normalized-cache-control-command-generator.d.ts +1 -0
  46. package/dist/types/v1/generators/aura-normalized-cache-control-command-generator.d.ts +1 -0
  47. package/dist/types/v1/generators/aura-resource-cache-control-command-generator.d.ts +39 -0
  48. package/dist/types/v1/generators/base-command-generator.d.ts +88 -0
  49. package/dist/types/v1/generators/bindings-generator.d.ts +69 -0
  50. package/dist/types/v1/generators/cache-control-generator.d.ts +2 -0
  51. package/dist/types/v1/generators/command-config-builder.d.ts +28 -0
  52. package/dist/types/v1/generators/graphql-imperative-binding-generator.d.ts +23 -0
  53. package/dist/types/v1/generators/graphql-imperative-legacy-binding-generator.d.ts +18 -0
  54. package/dist/types/v1/generators/graphql-mutation-binding-generator.d.ts +21 -0
  55. package/dist/types/v1/generators/graphql-normalized-cache-control-generator-mixin.d.ts +13 -0
  56. package/dist/types/v1/generators/graphql-root-variable-names.d.ts +2 -0
  57. package/dist/types/v1/generators/graphql-wire-binding-generator.d.ts +18 -0
  58. package/dist/types/v1/generators/http-command-generator.d.ts +67 -0
  59. package/dist/types/v1/generators/http-graphql-normalized-cache-control-command-generator.d.ts +1 -0
  60. package/dist/types/v1/generators/http-normalized-cache-control-command-generator.d.ts +1 -0
  61. package/dist/types/v1/generators/imperative-binding-generator.d.ts +24 -0
  62. package/dist/types/v1/generators/imperative-legacy-binding-generator.d.ts +18 -0
  63. package/dist/types/v1/generators/index.d.ts +9 -0
  64. package/dist/types/v1/generators/normalized-cache-control-generator-mixin.d.ts +15 -0
  65. package/dist/types/v1/generators/utils.d.ts +17 -0
  66. package/dist/types/v1/generators/wire-binding-generator.d.ts +19 -0
  67. package/dist/types/v1/index.d.ts +4 -0
  68. package/dist/types/v1/model/__tests__/aura-command-model.spec.d.ts +1 -0
  69. package/dist/types/v1/model/__tests__/aura-graphql-command-model.spec.d.ts +1 -0
  70. package/dist/types/v1/model/__tests__/aura-normalized-caching-command-model.spec.d.ts +1 -0
  71. package/dist/types/v1/model/__tests__/aura-resource-caching-command-model.spec.d.ts +1 -0
  72. package/dist/types/v1/model/__tests__/base-command-model.spec.d.ts +1 -0
  73. package/dist/types/v1/model/__tests__/graphql-schema-model.spec.d.ts +1 -0
  74. package/dist/types/v1/model/__tests__/graphql-utils.d.ts +17 -0
  75. package/dist/types/v1/model/__tests__/http-command-model.spec.d.ts +1 -0
  76. package/dist/types/v1/model/__tests__/http-normalized-caching-command-model.spec.d.ts +1 -0
  77. package/dist/types/v1/model/aura-command-model.d.ts +34 -0
  78. package/dist/types/v1/model/aura-graphql-command-model.d.ts +10 -0
  79. package/dist/types/v1/model/aura-normalized-caching-command-model.d.ts +8 -0
  80. package/dist/types/v1/model/aura-resource-caching-command-model.d.ts +13 -0
  81. package/dist/types/v1/model/base-command-model.d.ts +186 -0
  82. package/dist/types/v1/model/graphql-command-model-interface.d.ts +12 -0
  83. package/dist/types/v1/model/graphql-schema-model.d.ts +104 -0
  84. package/dist/types/v1/model/http-command-model.d.ts +32 -0
  85. package/dist/types/v1/model/http-graphql-command-model.d.ts +16 -0
  86. package/dist/types/v1/model/http-normalized-caching-command-model.d.ts +14 -0
  87. package/dist/types/v1/normalization/__tests__/graphql-type-generator.spec.d.ts +1 -0
  88. package/dist/types/v1/normalization/__tests__/graphql-type-registry-generator.spec.d.ts +1 -0
  89. package/dist/types/v1/normalization/__tests__/identifiable-type-generator.spec.d.ts +1 -0
  90. package/dist/types/v1/normalization/__tests__/integration.spec.d.ts +1 -0
  91. package/dist/types/v1/normalization/__tests__/normalized-type-generator.spec.d.ts +1 -0
  92. package/dist/types/v1/normalization/__tests__/type-registry-generator.spec.d.ts +1 -0
  93. package/dist/types/v1/normalization/__tests__/unidentifiable-type-generator.spec.d.ts +1 -0
  94. package/dist/types/v1/normalization/__tests__/utils.d.ts +3 -0
  95. package/dist/types/v1/normalization/graphql/__tests__/cursor-connection-type-generator.spec.d.ts +1 -0
  96. package/dist/types/v1/normalization/graphql/__tests__/identifiable-type-generator.spec.d.ts +1 -0
  97. package/dist/types/v1/normalization/graphql/__tests__/interface-type-generator.spec.d.ts +1 -0
  98. package/dist/types/v1/normalization/graphql/__tests__/unidentifiable-type-generator.spec.d.ts +1 -0
  99. package/dist/types/v1/normalization/graphql/base-type-generator.d.ts +76 -0
  100. package/dist/types/v1/normalization/graphql/cursor-connection-type-generator.d.ts +17 -0
  101. package/dist/types/v1/normalization/graphql/document-root-type-generator.d.ts +13 -0
  102. package/dist/types/v1/normalization/graphql/identifiable-type-generator.d.ts +13 -0
  103. package/dist/types/v1/normalization/graphql/interface-type-generator.d.ts +10 -0
  104. package/dist/types/v1/normalization/graphql/unidentifiable-type-generator.d.ts +13 -0
  105. package/dist/types/v1/normalization/graphql/union-type-generator.d.ts +10 -0
  106. package/dist/types/v1/normalization/graphql-type-generator.d.ts +47 -0
  107. package/dist/types/v1/normalization/graphql-type-registry-generator.d.ts +59 -0
  108. package/dist/types/v1/normalization/identifiable-type-generator.d.ts +19 -0
  109. package/dist/types/v1/normalization/index.d.ts +28 -0
  110. package/dist/types/v1/normalization/normalize-code-gen/__tests__/normalize-generator-service.spec.d.ts +1 -0
  111. package/dist/types/v1/normalization/normalize-code-gen/__tests__/utils.d.ts +15 -0
  112. package/dist/types/v1/normalization/normalize-code-gen/normalize-generator-service.d.ts +65 -0
  113. package/dist/types/v1/normalization/normalized-type-generator.d.ts +52 -0
  114. package/dist/types/v1/normalization/type-registry-generator.d.ts +68 -0
  115. package/dist/types/v1/normalization/unidentifiable-type-generator.d.ts +17 -0
  116. package/dist/types/v1/normalization/utils.d.ts +23 -0
  117. package/dist/types/v1/types/__tests__/json-schema-declarations.spec.d.ts +1 -0
  118. package/dist/types/v1/types/__tests__/json-schema.spec.d.ts +3 -0
  119. package/dist/types/v1/types/__tests__/normalized-type-definition.spec.d.ts +1 -0
  120. package/dist/types/v1/types/__tests__/resolve-all-of-type.spec.d.ts +1 -0
  121. package/dist/types/v1/types/__tests__/type-definition.spec.d.ts +1 -0
  122. package/dist/types/v1/types/index.d.ts +4 -0
  123. package/dist/types/v1/types/json-schema-declarations.d.ts +29 -0
  124. package/dist/types/v1/types/json-schema.d.ts +15 -0
  125. package/dist/types/v1/types/normalized-type-definition.d.ts +25 -0
  126. package/dist/types/v1/types/resolve-all-of-type.d.ts +16 -0
  127. package/dist/types/v1/types/type-definition.d.ts +35 -0
  128. package/dist/types/v1/utils.d.ts +30 -0
  129. package/dist/v1/index.js +11074 -0
  130. package/dist/v1/index.js.map +1 -0
  131. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/v1/files/code.ts","../../src/v1/files/file.ts","../../src/v1/files/write-files.ts","../../src/v1/types/json-schema.ts","../../src/v1/types/type-definition.ts","../../src/v1/types/json-schema-declarations.ts","../../src/v1/types/resolve-all-of-type.ts","../../src/v1/types/normalized-type-definition.ts","../../src/v1/normalization/utils.ts","../../src/v1/generators/cache-control-generator.ts","../../src/v1/normalization/identifiable-type-generator.ts","../../src/v1/normalization/unidentifiable-type-generator.ts","../../src/v1/normalization/normalized-type-generator.ts","../../src/v1/normalization/normalize-code-gen/normalize-generator-service.ts","../../src/v1/normalization/type-registry-generator.ts","../../src/v1/normalization/graphql/base-type-generator.ts","../../src/v1/normalization/graphql/identifiable-type-generator.ts","../../src/v1/normalization/graphql/unidentifiable-type-generator.ts","../../src/v1/normalization/graphql/cursor-connection-type-generator.ts","../../src/v1/normalization/graphql/interface-type-generator.ts","../../src/v1/normalization/graphql/union-type-generator.ts","../../src/v1/normalization/graphql/document-root-type-generator.ts","../../src/v1/normalization/graphql-type-generator.ts","../../src/v1/normalization/graphql-type-registry-generator.ts","../../src/v1/generators/base-command-generator.ts","../../src/v1/generators/utils.ts","../../src/v1/generators/http-command-generator.ts","../../src/v1/generators/aura-command-generator.ts","../../src/v1/generators/aura-resource-cache-control-command-generator.ts","../../src/v1/generators/imperative-binding-generator.ts","../../src/v1/generators/imperative-legacy-binding-generator.ts","../../src/v1/generators/graphql-root-variable-names.ts","../../src/v1/generators/graphql-imperative-legacy-binding-generator.ts","../../src/v1/generators/wire-binding-generator.ts","../../src/v1/generators/graphql-imperative-binding-generator.ts","../../src/v1/generators/graphql-wire-binding-generator.ts","../../src/v1/generators/graphql-mutation-binding-generator.ts","../../src/v1/generators/bindings-generator.ts","../../src/v1/utils.ts","../../src/v1/generators/command-config-builder.ts","../../src/v1/generators/normalized-cache-control-generator-mixin.ts","../../src/v1/generators/graphql-normalized-cache-control-generator-mixin.ts","../../src/v1/generators/http-graphql-normalized-cache-control-command-generator.ts","../../src/v1/model/base-command-model.ts","../../src/v1/model/aura-command-model.ts","../../src/v1/model/http-command-model.ts","../../src/v1/model/aura-normalized-caching-command-model.ts","../../src/v1/model/aura-resource-caching-command-model.ts","../../src/v1/generators/aura-normalized-cache-control-command-generator.ts","../../src/v1/generators/http-normalized-cache-control-command-generator.ts","../../src/v1/model/http-normalized-caching-command-model.ts","../../../../../../node_modules/graphql/jsutils/devAssert.mjs","../../../../../../node_modules/graphql/jsutils/isObjectLike.mjs","../../../../../../node_modules/graphql/polyfills/symbols.mjs","../../../../../../node_modules/graphql/language/location.mjs","../../../../../../node_modules/graphql/language/printLocation.mjs","../../../../../../node_modules/graphql/error/GraphQLError.mjs","../../../../../../node_modules/graphql/error/syntaxError.mjs","../../../../../../node_modules/graphql/language/kinds.mjs","../../../../../../node_modules/graphql/jsutils/invariant.mjs","../../../../../../node_modules/graphql/jsutils/nodejsCustomInspectSymbol.mjs","../../../../../../node_modules/graphql/jsutils/defineInspect.mjs","../../../../../../node_modules/graphql/language/ast.mjs","../../../../../../node_modules/graphql/language/tokenKind.mjs","../../../../../../node_modules/graphql/jsutils/inspect.mjs","../../../../../../node_modules/graphql/jsutils/instanceOf.mjs","../../../../../../node_modules/graphql/language/source.mjs","../../../../../../node_modules/graphql/language/directiveLocation.mjs","../../../../../../node_modules/graphql/language/blockString.mjs","../../../../../../node_modules/graphql/language/lexer.mjs","../../../../../../node_modules/graphql/language/parser.mjs","../../../../../../node_modules/graphql/language/visitor.mjs","../../../../../../node_modules/graphql/polyfills/find.mjs","../../../../../../node_modules/graphql/polyfills/objectValues.mjs","../../../../../../node_modules/graphql/polyfills/objectEntries.mjs","../../../../../../node_modules/graphql/jsutils/keyMap.mjs","../../../../../../node_modules/graphql/jsutils/mapValue.mjs","../../../../../../node_modules/graphql/jsutils/toObjMap.mjs","../../../../../../node_modules/graphql/jsutils/keyValMap.mjs","../../../../../../node_modules/graphql/jsutils/didYouMean.mjs","../../../../../../node_modules/graphql/jsutils/identityFunc.mjs","../../../../../../node_modules/graphql/jsutils/naturalCompare.mjs","../../../../../../node_modules/graphql/jsutils/suggestionList.mjs","../../../../../../node_modules/graphql/language/printer.mjs","../../../../../../node_modules/graphql/utilities/valueFromASTUntyped.mjs","../../../../../../node_modules/graphql/type/definition.mjs","../../../../../../node_modules/graphql/polyfills/arrayFrom.mjs","../../../../../../node_modules/graphql/polyfills/isFinite.mjs","../../../../../../node_modules/graphql/jsutils/safeArrayFrom.mjs","../../../../../../node_modules/graphql/polyfills/isInteger.mjs","../../../../../../node_modules/graphql/type/scalars.mjs","../../../../../../node_modules/graphql/utilities/astFromValue.mjs","../../../../../../node_modules/graphql/type/introspection.mjs","../../../../../../node_modules/graphql/type/directives.mjs","../../../../../../node_modules/graphql/type/schema.mjs","../../../../../../node_modules/graphql/language/predicates.mjs","../../../../../../node_modules/graphql/validation/rules/KnownTypeNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/KnownDirectivesRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.mjs","../../../../../../node_modules/graphql/validation/rules/KnownArgumentNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/LoneSchemaDefinitionRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueOperationTypesRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueTypeNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueFieldDefinitionNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/UniqueDirectiveNamesRule.mjs","../../../../../../node_modules/graphql/validation/rules/PossibleTypeExtensionsRule.mjs","../../../../../../node_modules/graphql/validation/specifiedRules.mjs","../../../../../../node_modules/graphql/validation/ValidationContext.mjs","../../../../../../node_modules/graphql/validation/validate.mjs","../../../../../../node_modules/graphql/utilities/valueFromAST.mjs","../../../../../../node_modules/graphql/execution/values.mjs","../../../../../../node_modules/graphql/utilities/extendSchema.mjs","../../../../../../node_modules/graphql/utilities/buildASTSchema.mjs","../../src/v1/model/graphql-schema-model.ts","../../src/v1/model/aura-graphql-command-model.ts","../../src/v1/model/http-graphql-command-model.ts","../../src/v1/generators/aura-graphql-normalized-cache-control-command-generator.ts","../../src/v1/generators/api-family-module-generator.ts","../../src/v1/api-module-generator-service.ts"],"sourcesContent":["export type ImportableReference = (\n | {\n filename: string;\n }\n | {\n module: string;\n }\n) & {\n exportedSymbol?: string;\n isType: boolean;\n};\n\nexport type ImportableTypeReference = ImportableReference & { isType: true };\nexport type ImportableValueReference = ImportableReference & { isType: false };\n\n/**\n * Indicates if a value is an ImportableReference.\n *\n * @param x value to test\n * @returns true if x is an ImportableReference; false if not\n */\nexport function isImportableReference(x: any): x is ImportableReference {\n return (\n typeof x === 'object' &&\n x !== null &&\n (('filename' in x && typeof x.filename === 'string') ||\n ('module' in x && typeof x.module === 'string')) &&\n 'isType' in x &&\n typeof x.isType === 'boolean'\n );\n}\n\n// default importStringifier implementation\nfunction defaultImportStringifier(ir: ImportableReference): string {\n const source = 'filename' in ir ? `file:${ir.filename}` : `module:${ir.module}`;\n return `<<${source}:${ir.exportedSymbol}:${ir.isType})>>`;\n}\n\n/**\n * A Code instance holds a collection of TypeScript code.\n */\nexport class Code {\n // code can be strings or references that we need to import\n chunks: Array<string | ImportableReference> = [];\n\n /**\n * Constructor.\n *\n * @param chunks initial bits of code to include\n */\n constructor(...chunks: Array<string | ImportableReference>) {\n this.push(...chunks);\n }\n\n /**\n * Concatenates a set of Codes with an optional separator between them.\n *\n * @param codes Codes to be concatenated\n * @param separator separator to be inserted between the Codes\n * @returns concatenated Codes/separators\n */\n static join(codes: any[], separator: string = ''): Code {\n return codes.reduce(\n (joined: Code, code: any, i: number) => joined.push(i > 0 ? separator : '', code),\n new Code()\n );\n }\n\n /**\n * Appends new chunks of code to this list. Parameters are handled as follows:\n *\n * - undefined, null, '' - ignored\n * - string, ImportableReference - appended to this.chunks\n * - Code - chunks from the other Code are appended to this Code\n * - [] - desructured & individual elements processed\n * - al others - converted to a string & appended to this.chunks\n *\n * In the case of recursive values (Code & arrays), processing is done\n * depth-first.\n *\n * @param newChunks code to be appended\n * @returns this\n */\n push(...newChunks: any[]): this {\n for (const chunk of newChunks) {\n if (chunk === undefined || chunk === null || chunk === '') {\n continue;\n } else if (typeof chunk === 'string' || isImportableReference(chunk)) {\n this.chunks.push(chunk);\n } else if (chunk instanceof Code) {\n this.push(...chunk.chunks);\n } else if (Array.isArray(chunk)) {\n this.push(...chunk);\n } else {\n this.chunks.push('' + chunk);\n }\n }\n\n return this;\n }\n\n /**\n * Compares to another Code object to check\n * equivalence (i.e., chunks properties are identical)\n *\n * @param Code\n * @returns boolean\n */\n equals(comparison: Code): boolean {\n return this.toString() === comparison.toString();\n }\n\n /**\n * Returns the Code as a single string.\n *\n * @param options\n * importStringifier - function to convert ImportableReferences to strings.\n * Defaults to an internal function whose only guarantee is that equivalent\n * ImportableReferencesit will result in equivalent strings.\n * @returns string representation of the code\n */\n toString(\n options: {\n importStringifier?: (reference: ImportableReference) => string;\n } = {}\n ): string {\n const irToString = options.importStringifier || defaultImportStringifier;\n\n return this.chunks\n .map((chunk) => (isImportableReference(chunk) ? irToString(chunk) : chunk))\n .join('');\n }\n}\n\n/**\n * A tagged template literal wrapper for Code. Strings & parameters are\n * interleaved as chunks in the returned Code.\n *\n * @param strings strings from the tagged template literal\n * @param params expressions from the tagged template literal\n * @returns Code\n */\nexport function code(strings: TemplateStringsArray, ...params: any[]): Code {\n return strings.reduce(\n (result: Code, _: any, i: number) =>\n result.push(strings[i], i < params.length ? params[i] : undefined),\n new Code()\n );\n}\n","import * as path from 'path';\nimport * as prettier from 'prettier';\nimport {\n toTypeScriptSafeIdentifier,\n type NamedService,\n type ServiceDescriptor,\n} from '@conduit-client/utils';\nimport { Code } from './code';\nimport type { ImportableReference } from './code';\n\n/**\n * Service that builds TypeScript source files.\n */\nexport type FileService = {\n /**\n * Convenience method that creates a File if one with the\n * specified name does not already exist.\n *\n * @param filename filename\n * @returns File with the given filename\n */\n build(filename: string): File;\n\n /**\n * Files that have been created. Key is filename.\n */\n cache: ReadonlyMap<string, File>;\n};\n\nexport type NamedFileService<Name extends string = 'file'> = NamedService<Name, FileService>;\n\nexport type FileServiceDescriptor = ServiceDescriptor<FileService, '1.0'>;\n\n/**\n * A simple FileService implementation.\n */\nclass Files implements FileService {\n cache = new Map<string, File>();\n\n build(filename: string) {\n let file = this.cache.get(filename);\n\n if (!file) {\n this.cache.set(filename, (file = new File(filename)));\n }\n\n return file;\n }\n}\n\n/**\n * Constructs a new FileService.\n */\nexport function fileService(): FileService {\n return new Files();\n}\n\n/**\n * A class used to track and resolve the ImportableReferences used within a File.\n */\nclass Imports {\n // local symbols assigned to imports; used to ensure imports have unique names\n private localSymbols: Set<string> = new Set();\n\n // to keep track of the ImportableReferences we've already resolved\n private imports: {\n [relativeFilename: string]: {\n exportedSymbol?: string;\n localSymbol: string;\n isType: boolean;\n }[];\n } = {};\n\n /**\n * Constructor\n *\n * @param filename name of the importing file\n */\n constructor(private filename: string) {}\n\n /**\n * Computes a unique local symbol to use for an import.\n *\n * @param exportedSymbol symbol used on the export\n * @returns local symbol to be used\n */\n private uniqueSymbolFor(exportedSymbol: string): string {\n // use the exported name if it's not already taken; otherwise start\n // adding numeric suffixes until we find a unique local symbol\n let result = exportedSymbol,\n suffix = 1;\n\n while (this.localSymbols.has(result)) {\n result = `${exportedSymbol}$${suffix++}`;\n }\n\n // remember we've used this local symbol\n this.localSymbols.add(result);\n\n return result;\n }\n\n /**\n * Returns the local symbol to be used for an ImportableReference.\n *\n * @param filename file that defines the thing being imported\n * @param exportedSymbol symbol exported from file\n * @param isType true if the import is for a TypeScript type; false if it is for a value\n * @returns local symbol to use for the import\n */\n localSymbolFor(ref: ImportableReference): string {\n // if the import is from this file then just use exportedSymbol as the localSymbol\n if (ref.exportedSymbol && 'filename' in ref && ref.filename === this.filename) {\n return ref.exportedSymbol;\n }\n\n let from;\n if ('filename' in ref) {\n // compute relative path from this file to the file being imported from\n from = path\n .relative(path.dirname(this.filename), ref.filename)\n .replace(/\\.(js|ts)$/, '');\n\n // imports from files must always be relative\n if (!from.startsWith('.')) {\n from = './' + from;\n }\n } else {\n // use module name\n from = ref.module;\n }\n\n // see if we've already got a local symbol for this reference\n let imports = this.imports[from];\n if (!imports) {\n imports = this.imports[from] = [];\n }\n\n let result = imports.find(\n ({ exportedSymbol, isType }) =>\n exportedSymbol === ref.exportedSymbol && isType === ref.isType\n )?.localSymbol;\n if (result) {\n return result;\n }\n\n // no symbol yet, generate a new one\n result = this.uniqueSymbolFor(ref.exportedSymbol || toTypeScriptSafeIdentifier(from));\n imports.push({\n exportedSymbol: ref.exportedSymbol,\n localSymbol: result,\n isType: ref.isType,\n });\n\n return result;\n }\n\n /**\n * Generates the TypeScript import statements for the imported symbols.\n *\n * @param isType generate import statements for types (true) or values (false)\n * @returns TypeScript code for the import statements\n */\n toString(): string {\n let typeAbsoluteImportStatements: string[] = [];\n let nonTypeAbsoluteImportStatements: string[] = [];\n let typeRelativeImportStatements: string[] = [];\n let nonTypeRelativeImportStatements: string[] = [];\n\n Object.keys(this.imports).map((importFrom) => {\n const imports = this.imports[importFrom];\n\n // build imports\n [true, false].forEach((typeImports) => {\n const importClauses = imports\n .filter(({ isType }) => isType === typeImports)\n .map(\n ({ exportedSymbol, localSymbol }) =>\n `${exportedSymbol || 'default'}${\n localSymbol === exportedSymbol ? '' : ' as ' + localSymbol\n }`\n )\n .join(',');\n if (importClauses !== '') {\n let resultArray: string[];\n const isRelative = importFrom.startsWith('.');\n if (typeImports && isRelative) {\n resultArray = typeRelativeImportStatements;\n } else if (typeImports && !isRelative) {\n resultArray = typeAbsoluteImportStatements;\n } else if (!typeImports && isRelative) {\n resultArray = nonTypeRelativeImportStatements;\n } else {\n resultArray = nonTypeAbsoluteImportStatements;\n }\n\n resultArray.push(\n `import ${\n typeImports ? 'type ' : ''\n }{${importClauses}} from '${importFrom}';`\n );\n }\n });\n });\n\n // imports should be ordered with type imports last, absolute imports first, relative last\n return [\n ...nonTypeAbsoluteImportStatements.sort(),\n ...nonTypeRelativeImportStatements.sort(),\n ...typeAbsoluteImportStatements.sort(),\n ...typeRelativeImportStatements.sort(),\n ].join('');\n }\n}\n\n/**\n * A TypeScript source file.\n *\n * A File consists of arbirtrarily many appendable blocks of code, each\n * identified by a Symbol. A template determines how the blocks of code\n * are concatenated along with other code to create the final contents\n * of the file.\n */\nexport class File {\n /**\n * Symbol used to add code to the default block.\n */\n static DEFAULT_BLOCK = Symbol();\n\n /**\n * Code blocks for this file.\n */\n blocks = new Map<Symbol, Code>();\n\n /**\n * Template to use when assembling code blocks. Each entry in the array\n * specifies either literal code or the symbol associated with an entry\n * in blocks. The resulting Code objects are concatenated to create the\n * contents of the file.\n */\n template: Array<Code | Symbol> = [File.DEFAULT_BLOCK];\n\n constructor(readonly filename: string) {}\n\n /**\n * Appends new chunks of code to the default code block. Chunks are handled\n * as in Code.push().\n *\n * @param chunks code to be appended to the default code block\n * @returns this\n */\n push(...chunks: any[]): this {\n return this.pushTo(File.DEFAULT_BLOCK, ...chunks);\n }\n\n /**\n * Appends code to the specified code block within this file. Code chunks are\n * handled as in Code.push().\n *\n * @param block block to append code to\n * @param chunks code to be appended\n * @returns this\n */\n pushTo(block: Symbol, ...chunks: any[]): this {\n let code = this.blocks.get(block);\n\n if (!code) {\n this.blocks.set(block, (code = new Code()));\n }\n\n code.push(...chunks);\n\n return this;\n }\n\n /**\n * Returns the code for this File, with ImportableReferences resolved.\n *\n * @param options\n * prettififed - true to run the code through prettier\n * @returns TypeScript source code for this File\n */\n async toString(\n options: {\n prettified?: boolean;\n } = {}\n ): Promise<string> {\n const finalCode = new Code();\n for (const item of this.template) {\n finalCode.push(typeof item === 'symbol' ? this.blocks.get(item) : item);\n }\n\n const imports = new Imports(this.filename);\n const executableCode = finalCode.toString({\n importStringifier: (ir: ImportableReference) => imports.localSymbolFor(ir),\n });\n const code = imports.toString() + executableCode;\n\n if (options.prettified) {\n try {\n return prettier.format(code, { parser: 'typescript' });\n } catch (e) {\n return code;\n }\n }\n return code;\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport type { NamedFileService } from './file';\n\n/**\n * Writes the files collected in a FileService to the filesystem.\n *\n * @param services files to be written\n * @param outputDir directory against which to resolve filenames\n * @param options\n * prettififed - true to run the code through prettier\n */\nexport async function writeFiles(\n services: NamedFileService,\n outputDir: string,\n options: {\n prettified?: boolean;\n } = {}\n): Promise<void> {\n const promises: Promise<any>[] = [];\n\n for (const file of services.file.cache.values()) {\n const filename = path.join(outputDir, file.filename);\n\n promises.push(\n fs.promises\n .mkdir(path.dirname(filename), { recursive: true })\n .then(async () => fs.promises.writeFile(filename, await file.toString(options)))\n );\n }\n\n await Promise.all(promises);\n}\n","import { type ObjectType, type Type } from '@conduit-client/model/v1';\nimport type {\n JSONSchema,\n ObjectType as ObjectJsonSchema,\n RefType,\n} from '@conduit-client/jsonschema-validate';\n\ntype JsonSchemaForOptions = {\n referenceFor?: (t: Type) => RefType | undefined;\n useReferences?: boolean;\n};\n\n/**\n * Returns the JSON schema for a specified type.\n *\n * @param type the type\n * @param options Options\n * @returns JSON schema for type\n */\nexport function jsonSchemaFor(type: Type, options: JsonSchemaForOptions = {}): JSONSchema {\n if (options.useReferences) {\n const existingRef = options.referenceFor?.(type);\n if (existingRef !== undefined) {\n return existingRef;\n }\n }\n\n if (type.type === 'any') {\n return true;\n }\n // arbitrary type with inheritance => allOf(the inherited types + the type w/o inheritance)\n else if (type.type === 'allOf') {\n return {\n allOf: schemasFor({ ...options, useReferences: true }, ...type.allOf),\n };\n } else if (type.type === 'oneOf') {\n return {\n oneOf: schemasFor({ ...options, useReferences: true }, ...type.oneOf),\n };\n } else if (type.type === 'object') {\n return buildObjectSchema(type, { ...options, useReferences: true });\n } else if (type.type === 'discriminatedObject') {\n // discriminated object => oneOf the discriminated types\n return {\n oneOf: schemasFor({ ...options, useReferences: true }, ...Object.values(type.mapping)),\n };\n } else if (type.type === 'array') {\n return {\n type: 'array',\n items: jsonSchemaFor(type.items!, {\n ...options,\n useReferences: true,\n }),\n };\n } else if (\n ['string', 'date', 'time', 'datetime', 'datetime-only'].some((t) => t === type.type)\n ) {\n return { type: 'string' };\n } else if (['double', 'number'].some((t) => t === type.type)) {\n return { type: 'number' };\n } else if (type.type === 'boolean') {\n return { type: 'boolean' };\n } else if (type.type === 'integer') {\n return { type: 'integer' };\n } else if (type.type === 'nil') {\n return { type: 'null' };\n } else if (type.type === 'not') {\n // short-circuit not-any => false\n if (type.not.type === 'any') {\n return false;\n }\n return {\n not: jsonSchemaFor(type.not, {\n ...options,\n useReferences: true,\n }),\n };\n } else if (type.type === 'enum') {\n // TODO: we need to update our jsonschema library to validate on enums\n return true;\n } else if (type.type === 'ref') {\n return jsonSchemaFor(type.$ref, {\n ...options,\n useReferences: true,\n });\n } else {\n throw new Error(`Found unsupported type generating JSONSchema: ${type.type}`);\n }\n}\n\n/**\n * Translates a set of Types to the corresponding JSON schemas, removing duplicates.\n *\n * @param options Options\n * @param types Types\n * @returns JSON schemas for the specified types, deduped\n */\nfunction schemasFor(options: JsonSchemaForOptions = {}, ...types: Type[]): JSONSchema[] {\n return types.reduce((schemas, type) => {\n const schema = jsonSchemaFor(type, { ...options, useReferences: true });\n if (!schemas.find((existing) => existing === schema)) {\n schemas.push(schema);\n }\n return schemas;\n }, [] as JSONSchema[]);\n}\n\n// constructs the JSON schema for a non-discriminated object type\nfunction buildObjectSchema(type: ObjectType, options: JsonSchemaForOptions = {}): ObjectJsonSchema {\n const required: string[] = [];\n const properties: Record<string, JSONSchema> = {};\n\n Object.entries(type.properties).forEach(([propName, propType]) => {\n if (propType.required) {\n required.push(propName);\n }\n properties[propName] = jsonSchemaFor(propType.type, {\n ...options,\n useReferences: true,\n });\n });\n\n return {\n type: 'object',\n properties,\n required,\n additionalProperties: jsonSchemaFor(type.additionalProperties, {\n ...options,\n useReferences: true,\n }),\n };\n}\n","import { type NamedService, toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { Code, code } from '../files';\nimport type { ImportableReference, NamedFileService } from '../files';\nimport type {\n DiscriminatedObjectType,\n ObjectType,\n Type,\n RefType,\n AllOfType,\n OneOf,\n} from '@conduit-client/model/v1';\nimport type { NamedAPIService } from '@conduit-client/model/v1';\n\nexport type TypeDefinitionForOptions = {\n referenceFor?: (t: Type) => ImportableReference | undefined;\n useReferences?: boolean;\n};\n\nexport type ITypeDefinitionService = {\n build(type: Type | undefined): Code;\n};\n\nexport type NamedTypeDefinitionService = NamedService<'typeDefinition', ITypeDefinitionService>;\n\nexport class TypeDefinitionService implements ITypeDefinitionService {\n constructor(\n protected services: NamedAPIService & NamedFileService,\n private fileFor: (typename: string) => string = SINGLE_FILE\n ) {}\n\n cache = new Map<string, ImportableReference>();\n\n build(type: Type | undefined, useReferences = true) {\n return type\n ? this.buildTypeCode(type, {\n referenceFor: (t) => {\n const typename = this.services.api.api.types.nameOf(t);\n return typename ? this.buildTypeDeclaration(typename) : undefined;\n },\n useReferences,\n })\n : code`void`;\n }\n\n buildTypeCode(t: Type, options: TypeDefinitionForOptions): Code {\n // if we're allowed to use references, see if one exists for this type\n if (options.useReferences) {\n const reference = options.referenceFor?.(t);\n if (reference) {\n return code`${reference}`;\n }\n }\n\n // construct the definition for this type\n switch (t.type) {\n case 'allOf': {\n return this.buildAllOfCode(t, options);\n }\n case 'enum': {\n return Code.join(\n t.values.map((enumValue) => {\n if (typeof enumValue === 'string') {\n return `'${enumValue}'`;\n }\n\n return enumValue;\n }),\n '|'\n );\n }\n case 'boolean': {\n return code`boolean`;\n }\n\n case 'double':\n case 'integer': // treat as number for now, but need to check length & use bigint if needed\n case 'number': {\n return code`number`;\n }\n\n case 'nil': {\n return code`null`;\n }\n\n case 'object': {\n return this.buildObjectCode(t, options);\n }\n\n case 'discriminatedObject':\n return this.buildDiscriminatedObjectCode(t, options);\n\n case 'array': {\n return code`Array<${this.buildTypeCode(t.items, {\n ...options,\n useReferences: true,\n })}>`;\n }\n\n case 'oneOf': {\n return this.buildOneOfCode(t, options);\n }\n case 'time':\n case 'date':\n case 'datetime-only':\n case 'datetime':\n case 'string': {\n return code`string`;\n }\n\n case 'any': {\n return code`unknown`;\n }\n case 'not': {\n // no good way to express \"not something\" in typescript at the moment, defer until someone asks for it\n return code`any`;\n }\n case 'ref': {\n return this.buildReferenceCode(t, options);\n }\n }\n\n throw new Error(`unknown type: ${(t as any).type}`);\n }\n\n buildReferenceCode(refType: RefType, options: TypeDefinitionForOptions): Code {\n return this.buildTypeCode(refType.$ref, { ...options, useReferences: true });\n }\n\n buildObjectCode(t: ObjectType, options: TypeDefinitionForOptions): Code {\n const result: Code[] = [];\n result.push(...this.buildObjectProperties(t, options));\n result.push(...this.buildAdditionalProperties(t, options));\n\n return Code.join(result, '&');\n }\n\n buildDiscriminatedObjectCode(\n t: DiscriminatedObjectType,\n options: TypeDefinitionForOptions\n ): Code {\n const result: Code[] = [];\n\n if (Object.keys(t.mapping).length === 0) {\n // default to vanilla object type if no discriminated children are found\n return this.buildObjectCode(t.baseType, options);\n }\n\n Object.entries(t.mapping).forEach(([value, type]) => {\n result.push(\n code`(${this.buildTypeCode(type, {\n ...options,\n useReferences: true,\n })}&{${t.discriminator}:'${value}'})`\n );\n });\n\n return Code.join(result, '|');\n }\n\n buildObjectProperties(t: ObjectType, options: TypeDefinitionForOptions): Code[] {\n const result: Code[] = [];\n // recurse to get definitions for each property\n const propertyDefinitions = Object.entries(t.properties).map(\n ([name, { type, required }]) =>\n // ok to reference type names once we're inside a type\n code`${toTypeScriptSafeIdentifier(name) === name ? name : `'${name}'`}${required ? '' : '?'}:${this.buildTypeCode(\n type,\n {\n ...options,\n useReferences: true,\n }\n )}`\n );\n\n if (propertyDefinitions.length > 0) {\n result.push(code`{${Code.join(propertyDefinitions, ',')}}`);\n } else {\n result.push(code`object`);\n }\n\n return result;\n }\n\n buildAdditionalProperties(t: ObjectType, options: TypeDefinitionForOptions): Code[] {\n const result: Code[] = [];\n\n // No additional properties allowed, default to other parts of the type\n if (t.additionalProperties.type === 'not' && t.additionalProperties.not.type === 'any') {\n return result;\n }\n\n // Additional properties allowed, no schema specified, which means any value is allowed\n // but the type is not known\n if (t.additionalProperties.type === 'any') {\n result.push(code`Record<string,unknown>`);\n return result;\n }\n\n // Additional properties allowed and we have a schema\n result.push(\n code`Record<string,${this.buildTypeCode(t.additionalProperties, {\n ...options,\n useReferences: true,\n })}>`\n );\n\n return result;\n }\n\n buildAllOfCode(t: AllOfType, options: TypeDefinitionForOptions) {\n const allOfCode = t.allOf\n .filter((allOfType) => allOfType.type !== 'any')\n .map((allOfType) => {\n let canonicalType: Type = allOfType;\n while (canonicalType.type === 'ref') {\n canonicalType = canonicalType.$ref;\n }\n\n const type =\n canonicalType.type === 'discriminatedObject'\n ? canonicalType.baseType\n : canonicalType;\n return this.buildTypeCode(type, { ...options, useReferences: true });\n });\n\n if (allOfCode.length === 0) {\n return code`unknown`;\n }\n\n return Code.join(\n allOfCode.map((c) => code`(${c})`),\n '&'\n );\n }\n\n buildOneOfCode(t: OneOf, options: TypeDefinitionForOptions) {\n const oneofCodes = t.oneOf.map((oneOfType) =>\n this.buildTypeCode(oneOfType, { ...options, useReferences: true })\n );\n\n // Note: prettier will remove the parenthesis when not needed.\n return code`(${Code.join(oneofCodes, '|')})`;\n }\n\n getExportedSymbol(typename: string): string {\n return toTypeScriptSafeIdentifier(typename);\n }\n\n // as defined in TypeDeclarationService\n buildTypeDeclaration(typename: string): ImportableReference {\n // see if we've already built this type\n const cacheResult = this.cache.get(typename);\n if (cacheResult) {\n return cacheResult;\n }\n\n // find the type in the API's TypeRegistry\n const typeRegistry = this.services.api.api.types;\n const type = typeRegistry.get(typename);\n if (!type) {\n throw new Error(`type ${typename} is not defined in the model`);\n }\n\n const filename = this.fileFor(typename);\n\n // in cases of types with unsafe characters in the type name, convert\n // to underscores for the exported symbol\n const exportedSymbol = this.getExportedSymbol(typename);\n const result = {\n filename,\n exportedSymbol,\n isType: true,\n };\n // pre-register the declaration; this is done to prevent loops for\n // recursive types\n this.cache.set(typename, result);\n // build the type declaration\n const declaration = code`export type ${exportedSymbol}=${this.build(type, false)};`;\n this.services.file.build(filename).push(declaration);\n\n return result;\n }\n}\n\nexport function typeDefinitions(\n services: NamedAPIService & NamedFileService,\n options: {\n fileFor?: (typename: string) => string;\n } = {}\n) {\n return new TypeDefinitionService(services, options.fileFor || SINGLE_FILE);\n}\n\n// fileFor function that places each type in its own file under the types/ directory\nexport const FILE_PER_TYPE = (typename: string) => `types/${typename}.ts`;\n\n// fileFor function that places all types in a types/types.ts file\nexport const SINGLE_FILE = (_: string) => 'types/types.ts';\n","import { JSONStringify, type NamedService } from '@conduit-client/utils';\nimport { code } from '../files';\nimport { jsonSchemaFor } from './json-schema';\nimport type { Type } from '@conduit-client/model/v1';\nimport type { APIService, NamedAPIService } from '@conduit-client/model/v1';\nimport type { Code, File, FileService, ImportableReference, NamedFileService } from '../files';\nimport type { RefType } from '@conduit-client/jsonschema-validate';\n\n/**\n * A JsonSchemaDeclarationService constructs & tracks JSONSchema definitions for types.\n */\nexport type JsonSchemaDeclarationService = {\n /**\n * Returns a JSONSchema for a specified Type.\n *\n * @param type type to build JSON Schema for. The specified type can be a type in the TypeRegistry\n * associated with this service, contain references to a type in the TypeRegistry, or be a standalone\n * type with no connection to the TypeRegistry.\n * @returns Code containing a TypeScript expression of the JSON schema for the type, eg \"{type:'string'}\"\n * or \"{type:'object',properties:{foo:{$ref:'#/$defs/bar'}},...<ImportableReference>}\". The Code will contain\n * ImportableReferences if the input type references any Types in the service's TypeRegistry.\n */\n build(type: Type): Code;\n};\n\nexport type NamedJSONSchemaDeclarationService<Name extends string = 'jsonSchema'> = NamedService<\n Name,\n JsonSchemaDeclarationService\n>;\n\n// fileFor function that places all named type schemas in a json-schema/schema.ts file\nconst SCHEMA_FILE_PATH = 'json-schema/index.ts';\nconst COMBINED_SCHEMA: ImportableReference = {\n filename: SCHEMA_FILE_PATH,\n exportedSymbol: 'DECLARED_TYPE_DEFINITIONS',\n isType: false,\n};\n\n// identifier for block of $defs code in SCHEMA_FILE_PATH\nconst DEFS_BLOCK = Symbol();\n\n/**\n * An implementation of JsonSchemaDeclarationService that consumes Types from an APIService\n * and generates JSONSchema in Files from a FileService.\n */\nclass JSONSchemas implements JsonSchemaDeclarationService {\n private generated = new Set<Type>();\n private file?: File;\n\n constructor(private services: NamedAPIService & NamedFileService) {}\n\n build(type: Type): Code {\n let usedRef = false;\n const jsonSchemaDef = jsonSchemaFor(type, {\n referenceFor: (t: Type) => {\n const ref = this.getReferenceFor(t);\n if (ref) {\n usedRef = true;\n }\n return ref;\n },\n useReferences: true,\n });\n\n const defCodeString = JSON.stringify(jsonSchemaDef);\n if (usedRef) {\n return code`{...${COMBINED_SCHEMA},${defCodeString.replace('{', '')}`;\n } else {\n return code`${defCodeString}`;\n }\n }\n\n // Logic pulled out to util function to support deeply nested references to defined types.\n private getReferenceFor(type: Type): RefType | undefined {\n const typename = this.services.api.api.types.nameOf(type);\n if (typename === undefined) {\n return undefined;\n }\n\n if (!this.generated.has(type)) {\n // short-circuit recursive type definitions\n this.generated.add(type);\n\n // we'll need the shared schema file\n if (!this.file) {\n this.file = this.services.file.build(SCHEMA_FILE_PATH);\n this.file.template = [\n code`export const ${COMBINED_SCHEMA.exportedSymbol}={$defs:{`,\n DEFS_BLOCK,\n code`}}`,\n ];\n }\n\n // add schema to the combined schema file\n this.file.pushTo(\n DEFS_BLOCK,\n code`\"${typename}\":${JSONStringify(\n jsonSchemaFor(type, { referenceFor: this.getReferenceFor.bind(this) })\n )},`\n );\n }\n\n return { $ref: `#/$defs/${typename}` };\n }\n}\n\n/**\n * Creates a JsonSchemaDeclarationService.\n *\n **/\nexport function jsonSchemaDeclarationService(services: {\n api: APIService;\n file: FileService;\n}): JsonSchemaDeclarationService {\n return new JSONSchemas(services);\n}\n","import {\n AllOfType,\n EnumType,\n isAllOfType,\n isAnyType,\n isArrayType,\n isBooleanType,\n isCanonicalNumberType,\n isCanonicalStringType,\n isDiscriminatedObjectType,\n isEnumType,\n isNotType,\n isObjectType,\n isOneOfType,\n isRefType,\n isScalar,\n isNilType,\n ObjectType,\n OneOf,\n Property,\n ScalarType,\n Type,\n typesEqual,\n NilType,\n} from '@conduit-client/model/v1';\nimport { err, ok, Result } from '@conduit-client/utils';\n\n/**\n * This function is intended to collapse an allOf type into it's concrete type\n * This is allows code generation to operate on a single, canonical type definition\n * that has had any composition resolved. This process occurs by recursively applying\n * intersection between all the members of the allof. If at any point an intersection\n * results in an \"impossible\" type, e.g. string & number, an error is thrown.\n *\n * Please reference the OpenAPI spec to see the intention of composed allOfs:\n * https://spec.openapis.org/oas/v3.1.0.html#composition-and-inheritance-polymorphism\n * @param type The all of type to resolve\n * @returns a resolved type\n */\nexport function resolveAllOfType(type: AllOfType): Type {\n const result = type.allOf.reduce<Result<Type, Error>>(\n (prev, curr) => {\n if (prev.isErr()) {\n return prev;\n }\n // allOf inherently is a composition, so should ignore the top level\n // extensions since extensions aren't inherited\n return intersectTypes(prev.value, { ...curr, extensions: undefined });\n },\n ok({ type: 'any' })\n );\n\n if (result.isErr()) {\n throw result.error;\n }\n\n return result.value;\n}\n\nexport function intersectTypes(a: Type, b: Type): Result<Type, Error> {\n let result: Result<Type, Error> | undefined = undefined;\n\n if (isAnyType(a)) {\n result = ok(b);\n } else if (isAnyType(b)) {\n result = ok(a);\n } else if (isRefType(a)) {\n result = intersectTypes(a.$ref, b);\n } else if (isRefType(b)) {\n result = intersectTypes(a, b.$ref);\n } else if (isAllOfType(a)) {\n result = intersectTypes(resolveAllOfType(a), b);\n } else if (isAllOfType(b)) {\n result = intersectTypes(a, resolveAllOfType(b));\n } else if (isOneOfType(a)) {\n result = intersectOneOf(a, b);\n } else if (isOneOfType(b)) {\n result = intersectOneOf(b, a);\n } else if (isNotType(a)) {\n // We're not going to handle not types, so just defer to the other type\n result = ok(b);\n } else if (isNotType(b)) {\n result = ok(a);\n } else if (isObjectType(a) && isObjectType(b)) {\n result = intersectObjects(a, b);\n } else if (\n (isObjectType(a) && !isObjectType(b) && !isDiscriminatedObjectType(b)) ||\n (isObjectType(b) && !isObjectType(a) && !isDiscriminatedObjectType(a))\n ) {\n result = err(new Error('Object type and non object type cannot be combined'));\n } else if (isObjectType(a) && isDiscriminatedObjectType(b)) {\n result = intersectObjects(a, b.baseType);\n } else if (isDiscriminatedObjectType(a) && isObjectType(b)) {\n result = intersectObjects(a.baseType, b);\n } else if (isDiscriminatedObjectType(a) && isDiscriminatedObjectType(b)) {\n result = err(new Error('Cannot intersect two discriminated objects'));\n } else if (isArrayType(a) && isArrayType(b)) {\n const combinedItemsResult = intersectTypes(a.items, b.items);\n if (combinedItemsResult.isErr()) {\n result = combinedItemsResult;\n } else {\n result = ok({ type: 'array' as const, items: combinedItemsResult.value });\n }\n } else if ((isArrayType(a) && !isArrayType(b)) || (isArrayType(b) && !isArrayType(a))) {\n result = err(new Error('Array type and non array type cannot be combined'));\n } else if (isScalar(a) && isScalar(b)) {\n if (a.type !== b.type) {\n result = err(new Error(`Type mismatch during allOf resolution`));\n } else {\n // We assume here that all scalars types of the same type are the same. This may not\n // be true in the future if we handle date time formats independently\n result = ok(b);\n }\n } else if (isScalar(a) && isEnumType(b)) {\n result = combineScalarAndEnum(a, b);\n } else if (isEnumType(a) && isScalar(b)) {\n result = combineScalarAndEnum(b, a);\n } else if (\n (isScalar(a) && !isScalar(b) && !isEnumType(b)) ||\n (isScalar(b) && !isScalar(a) && !isEnumType(a))\n ) {\n result = err(new Error(`Cannot combine types ${a.type} and ${b.type}`));\n } else if (isNilType(a) && isNilType(b)) {\n result = ok(a);\n } else if (isNilType(a) && isEnumType(b)) {\n result = combineNilAndEnum(a, b);\n } else if (isEnumType(a) && isNilType(b)) {\n result = combineNilAndEnum(b, a);\n }\n\n if (result === undefined) {\n return err(new Error(`Unhandled intersection scenario for types ${a.type} and ${b.type}`));\n }\n\n if (result.isErr()) {\n return result;\n }\n\n return ok(resolveCanonicalIntersectedType(a, b, result.value));\n}\n\nfunction combineScalarAndEnum(a: ScalarType, b: EnumType) {\n // Enum is more specific than scalar, but the values of the\n // enum should be filtered to only those assignable to the scalar\n\n const values = b.values.filter((v) => {\n if (isCanonicalStringType(a) && typeof v === 'string') {\n return true;\n }\n\n if (isCanonicalNumberType(a) && typeof v === 'number') {\n return true;\n }\n\n if (isBooleanType(a) && typeof v === 'boolean') {\n return true;\n }\n\n return false;\n });\n\n if (values.length === 0) {\n return err(new Error('No enum values valid after intersection'));\n }\n\n return ok({\n type: 'enum' as const,\n values,\n });\n}\n\nfunction combineNilAndEnum(a: NilType, b: EnumType) {\n if (b.values.includes(null)) {\n return ok(a);\n }\n\n return err(new Error('Cannot combine nil type and enum type that does not include null'));\n}\n\nfunction intersectObjects(a: ObjectType, b: ObjectType) {\n let errs: Error[] = [];\n const intersectedProps = Object.entries(a.properties).reduce(\n (prev, [propName, prop]) => {\n if (propName in b.properties) {\n const bProp = b.properties[propName];\n const newPropTypeResult = intersectTypes(prop.type, bProp.type);\n if (newPropTypeResult.isOk()) {\n prev[propName] = {\n type: newPropTypeResult.value,\n required: prop.required || bProp.required,\n };\n return prev;\n }\n\n errs.push(newPropTypeResult.error);\n return prev;\n } else {\n const newPropTypeResult = intersectTypes(prop.type, b.additionalProperties);\n if (newPropTypeResult.isOk()) {\n prev[propName] = { ...prop, type: newPropTypeResult.value };\n return prev;\n }\n\n errs.push(newPropTypeResult.error);\n return prev;\n }\n },\n {} as Record<string, Property>\n );\n\n Object.entries(b.properties).reduce((prev, [propName, prop]) => {\n if (propName in intersectedProps) {\n // already resolved\n return prev;\n }\n\n const newPropTypeResult = intersectTypes(prop.type, a.additionalProperties);\n if (newPropTypeResult.isOk()) {\n prev[propName] = { ...prop, type: newPropTypeResult.value };\n return prev;\n }\n errs.push(newPropTypeResult.error);\n\n return prev;\n }, intersectedProps);\n\n if (errs.length > 0) {\n return err(\n new Error(\n `Errors encountered during object resolution:\\n${errs.map((e) => `- ${e.message}`).join('\\n')}`\n )\n );\n }\n\n const intersectedAdditionalPropsResult = intersectTypes(\n a.additionalProperties,\n b.additionalProperties\n );\n if (intersectedAdditionalPropsResult.isErr()) {\n return intersectedAdditionalPropsResult;\n }\n\n return ok({\n type: 'object' as const,\n properties: intersectedProps,\n additionalProperties: intersectedAdditionalPropsResult.value,\n });\n}\n\nfunction intersectOneOf(a: OneOf, b: Type) {\n const intersectedOneOf = a.oneOf.reduce((prev, curr) => {\n const intersectResult = intersectTypes(curr, b);\n if (intersectResult.isErr()) {\n // Exclude this member of the one of from the result\n return prev;\n }\n\n if (intersectResult.value.type === 'oneOf') {\n prev.push(...intersectResult.value.oneOf);\n } else {\n prev.push(intersectResult.value);\n }\n return prev;\n }, [] as Type[]);\n\n if (intersectedOneOf.length === 0) {\n return err(new Error('Intersected union resulted in no possible values'));\n }\n\n return ok({ type: 'oneOf' as const, oneOf: intersectedOneOf });\n}\n\nfunction resolveCanonicalIntersectedType(a: Type, b: Type, result: Type) {\n if (typesEqual(a, result)) {\n return a;\n }\n\n if (typesEqual(b, result)) {\n return b;\n }\n\n return result;\n}\n","import { isIdentifiableType, isRefType, Type } from '@conduit-client/model/v1';\nimport { Code, code } from '../files';\nimport {\n ITypeDefinitionService,\n TypeDefinitionForOptions,\n TypeDefinitionService,\n} from './type-definition';\nimport { ImportableReference } from '../files';\nimport { toTypeScriptSafeIdentifier, type NamedService } from '@conduit-client/utils';\nimport type {\n AllOfType,\n DiscriminatedObjectType,\n NamedAPIService,\n OneOf,\n RefType,\n} from '@conduit-client/model/v1';\nimport type { NamedFileService } from '../files';\nimport { resolveAllOfType } from './resolve-all-of-type';\n\nconst NORMALIZED_LINK: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'NormalizedLink',\n isType: true,\n};\n\nexport type INormalizedTypeDefinitionService = {\n buildReference(type: Type): Code;\n buildRepresentation(type: Type): Code;\n};\n\nexport const SINGLE_FILE_NORMALIZED = (_: string) => 'normalization/types.ts';\n\nexport class NormalizedTypeDefinitionService\n extends TypeDefinitionService\n implements INormalizedTypeDefinitionService\n{\n constructor(\n services: NamedAPIService & NamedFileService,\n fileFor: (typename: string) => string = SINGLE_FILE_NORMALIZED\n ) {\n super(services, fileFor);\n }\n\n buildReference(t: Type): Code {\n return this.build(t);\n }\n\n buildRepresentation(t: Type): Code {\n let typeToBuild: Type = { ...t, extensions: undefined };\n if (t.type === 'discriminatedObject') {\n // TODO: there's an issue with copying the mapping from the discriminator since it's a getter, manually copying for now\n typeToBuild = { ...t, mapping: t.mapping, extensions: undefined };\n }\n return this.build(typeToBuild);\n }\n\n build(type: Type | undefined, useReferences = true) {\n if (!useReferences && type) {\n if (isIdentifiableType(type)) {\n // The referencing type will just get a NormalizedLink\n return new Code(NORMALIZED_LINK);\n }\n }\n\n return super.build(type, useReferences);\n }\n\n buildAllOfCode(allOfType: AllOfType, options: TypeDefinitionForOptions): Code {\n const resolved = resolveAllOfType(allOfType);\n return this.buildTypeCode(resolved, options);\n }\n\n buildOneOfCode(t: OneOf, options: TypeDefinitionForOptions): Code {\n const oneofCodes = t.oneOf.map((oneOfType, index) => {\n const normalizedTypeCode = this.buildTypeCode(oneOfType, {\n ...options,\n useReferences: true,\n });\n return code`{discriminator: '${index}', data: ${normalizedTypeCode}}`;\n });\n\n // Note: prettier will remove the parenthesis when not needed.\n return code`(${Code.join(oneofCodes, '|')})`;\n }\n\n buildDiscriminatedObjectCode(\n t: DiscriminatedObjectType,\n options: TypeDefinitionForOptions\n ): Code {\n const result: Code[] = [];\n\n if (Object.keys(t.mapping).length === 0) {\n // default to vanilla object type if no discriminated children are found\n return this.buildObjectCode(t.baseType, options);\n }\n\n Object.entries(t.mapping).forEach(([value, type]) => {\n result.push(\n code`({discriminator: '${value}', data: ${this.buildTypeCode(type, {\n ...options,\n useReferences: true,\n })}})`\n );\n });\n\n return Code.join(result, '|');\n }\n\n getExportedSymbol(typename: string): string {\n const normalizedTypename = `${typename}NormalizedReference`;\n return toTypeScriptSafeIdentifier(normalizedTypename);\n }\n}\n\nexport type NamedNormalizedTypeDefinitionService = NamedService<\n 'normalizedTypeDefinition',\n INormalizedTypeDefinitionService\n>;\n\nexport function normalizedTypeDefinitions(\n services: NamedAPIService & NamedFileService,\n options: {\n fileFor?: (typename: string) => string;\n } = {}\n): NormalizedTypeDefinitionService {\n return new NormalizedTypeDefinitionService(services, options.fileFor);\n}\n","import { code, type ImportableReference } from '../files';\n\nexport const CACHE: ImportableReference = {\n module: '@conduit-client/service-cache/v1',\n exportedSymbol: 'Cache',\n isType: true,\n};\n\nexport const READONLY_CACHE: ImportableReference = {\n module: '@conduit-client/service-cache/v1',\n exportedSymbol: 'ReadonlyCache',\n isType: true,\n};\n\nexport const NORMALIZED_LINK: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'NormalizedLink',\n isType: true,\n};\n\nexport const READ_ERRORS: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'ReadErrors',\n isType: true,\n};\n\nexport const WRITE_ERRORS: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'WriteErrors',\n isType: true,\n};\n\nexport const READ_INPUT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'ReadInput',\n isType: true,\n};\nexport const WRITE_INPUT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'WriteInput',\n isType: true,\n};\n\nexport const NORMALIZE_DATA_INPUT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'NormalizeDataInput',\n isType: true,\n};\n\nexport const DENORMALIZE_DATA_INPUT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'DenormalizeDataInput',\n isType: true,\n};\n\nexport const EXTRACT_READ_WRITE_DATA: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'extractReadWriteData',\n isType: false,\n};\n\nexport const BUILD_READ_WRITE_RESULT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'buildReadWriteResult',\n isType: false,\n};\n\nexport const OK: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'ok',\n isType: false,\n};\n\nexport const RESULT: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'Result',\n isType: true,\n};\n\nexport const READ_RESULT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'ReadResult',\n isType: true,\n};\n\nexport const WRITE_RESULT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'WriteResult',\n isType: true,\n};\n\nexport const DEEP_EQUALS: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'deepEquals',\n isType: false,\n};\n\nexport const NAMED_CACHE_CONTROLLER_SERVICE: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nexport const NAMED_PUB_SUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nexport const TYPE_SERVICES = code`${NAMED_CACHE_CONTROLLER_SERVICE} & ${NAMED_PUB_SUB_SERVICE}`;\n\nexport const NORMALIZE_UNION_REPRESENTATION: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'normalizeUnionRepresentation',\n isType: false,\n};\n\nexport const DENORMALIZE_UNION_REPRESENTATION: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'denormalizeUnionRepresentation',\n isType: false,\n};\n\nexport const VALIDATE_JSON_SCHEMA: ImportableReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'validateJsonSchema',\n isType: false,\n};\n","import { TypeCacheControlExtension } from '@conduit-client/model/v1';\nimport { code } from '../files';\n\nexport function generateCacheControl(cacheControl: TypeCacheControlExtension) {\n return code`get cacheControl() {return ${getCacheControlValue(cacheControl)} as const}`;\n}\n\nfunction getCacheControlValue(cacheControl: TypeCacheControlExtension) {\n if (cacheControl.type === 'no-cache') {\n return code`{type: 'no-cache'}`;\n }\n return code`{type: 'max-age',maxAge: ${cacheControl['max-age']}}`;\n}\n","import { code } from '../files';\nimport { Code } from '../files';\nimport {\n BUILD_READ_WRITE_RESULT,\n CACHE,\n DENORMALIZE_DATA_INPUT,\n NORMALIZE_DATA_INPUT,\n READ_ERRORS,\n READ_INPUT,\n READ_RESULT,\n READONLY_CACHE,\n TYPE_SERVICES,\n WRITE_ERRORS,\n WRITE_INPUT,\n WRITE_RESULT,\n} from './utils';\nimport type { ImportableReference } from '../files';\nimport type { IdentifiableType, Type } from '@conduit-client/model/v1';\nimport type { NamedNormalizedTypeDefinitionService, NamedTypeDefinitionService } from '../types';\nimport type { NamedTypeRegistryGeneratorService } from './type-registry-generator';\nimport { generateCacheControl } from '../generators/cache-control-generator';\nimport { NamedNormalizeGeneratorService } from './normalize-code-gen/normalize-generator-service';\nimport { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\n\nconst IDENTIFIABLE_TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'IdentifiableTypeRepository',\n isType: false,\n};\n\nconst FLATTENED_KEY_SELF_IDENTIFIABLE_TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'FlattenedKeySelfIdentifiableTypeRepository',\n isType: false,\n};\n\nconst RESULT: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'Result',\n isType: true,\n};\n\n/**\n * Generates the normalizer class for an identifiable type\n * @param services The services required for this function. TypeDefinitionService is used to generate utility types.\n * TypeRegistryGeneratorService is used to build references to child types\n * @param type The type to generate the normalizer for\n * @param options Options for generating the type, including the type name, namespace, and an optional key param override\n * @returns Class name and code for the build type class\n */\nexport function generateIdentifiableType(\n services: NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedNormalizeGeneratorService &\n NamedNormalizedTypeDefinitionService,\n type: IdentifiableType,\n options: {\n className: string;\n namespace: string;\n name: string;\n keyParamType?: Type;\n }\n) {\n const dataType = services.typeDefinition.build(type);\n const normalizedRepType = services.normalizedTypeDefinition.buildRepresentation(type);\n\n const isSelfIdentifying = options.keyParamType === undefined;\n const normalizationCode = services.normalizeGenerator.build(type, {\n namespace: options.namespace,\n typeRegistryRef: code`this.typeRegistry`,\n cacheRef: code`cache`,\n denormalizeDataRef: code`input.normalizedData`,\n normalizeDataRef: code`input.data`,\n errorsRef: code`errors`,\n existingNormalizedDataRef: code`input.existingNormalizedData`,\n });\n\n const typescriptSafeName = toTypeScriptSafeIdentifier(options.name);\n const readInput = code`${typescriptSafeName}ReadInput`;\n const writeInput = code`${typescriptSafeName}WriteInput`;\n const normalizeDataInput = code`${typescriptSafeName}NormalizeDataInput`;\n const denormalizeDataInput = code`${typescriptSafeName}DenormalizeDataInput`;\n return code`\n type NormalizedRepresentation = ${normalizedRepType};\n type Data = ${dataType};\n type KeyParams = ${buildMappedKey(type, dataType)};\n type ${readInput} = ${READ_INPUT}\n type ${writeInput} = ${WRITE_INPUT}<Data${isSelfIdentifying ? '' : ',{keyParams:KeyParams}'}>\n type ${normalizeDataInput} = ${NORMALIZE_DATA_INPUT}<Data, NormalizedRepresentation>\n type ${denormalizeDataInput} = ${DENORMALIZE_DATA_INPUT}<NormalizedRepresentation>\n export class ${options.className} extends ${isSelfIdentifying ? FLATTENED_KEY_SELF_IDENTIFIABLE_TYPE_REPOSITORY : IDENTIFIABLE_TYPE_REPOSITORY}<Data, NormalizedRepresentation, KeyParams, ${readInput}, ${writeInput}> {\n namespace = '${options.namespace}'\n typeName = '${options.name}'\n ${generateCacheControl(type.extensions['cache-control'])}\n keySchema = ${JSON.stringify(Object.keys(type.extensions.key.fields).sort())};\n \n constructor(protected typeRegistry: ${{ ...services.typeRegistryGenerator.build(), isType: true }}, services: ${TYPE_SERVICES}){super(services)}\n \n buildKeyParams(input: ${writeInput}){\n return ${isSelfIdentifying ? buildMappedKey(type, code`input.data`) : code`input.keyParams`}\n }\n denormalizeData(cache: ${READONLY_CACHE}, input: ${denormalizeDataInput}): ${RESULT}<${dataType},${READ_ERRORS}> {\n const errors: ${READ_ERRORS} = []\n const denormalized = ${normalizationCode.denormalize}\n return ${BUILD_READ_WRITE_RESULT}<Data, ${READ_ERRORS}>(denormalized, errors)\n }\n normalizeData(cache: ${CACHE}, input: ${normalizeDataInput}): ${RESULT}<${normalizedRepType}, ${WRITE_ERRORS}> {\n const errors: ${WRITE_ERRORS} = []\n const normalized = ${normalizationCode.normalize}\n return ${BUILD_READ_WRITE_RESULT}<NormalizedRepresentation, ${WRITE_ERRORS}>(normalized, errors)\n }\n }`;\n}\n\nfunction buildMappedKey(type: IdentifiableType, typeCode: Code): Code {\n return code`{${Code.join(\n Object.entries(type.extensions.key.fields).map(([keyParamName, typePath]) => {\n const typePathParts = typePath.split('.');\n const accessor = typePathParts.reduce((prev, curr) => {\n return code`${prev}['${curr}']`;\n }, new Code());\n return code`${keyParamName}:${typeCode}${accessor}`;\n }),\n ','\n )}}`;\n}\n","import { code } from '../files';\nimport {\n BUILD_READ_WRITE_RESULT,\n CACHE,\n DEEP_EQUALS,\n DENORMALIZE_DATA_INPUT,\n NORMALIZE_DATA_INPUT,\n READ_ERRORS,\n READONLY_CACHE,\n TYPE_SERVICES,\n WRITE_ERRORS,\n} from './utils';\nimport type { UnidentifiableType } from '@conduit-client/model/v1';\nimport type { ImportableReference } from '../files';\nimport type { NamedNormalizedTypeDefinitionService, NamedTypeDefinitionService } from '../types';\nimport type { NamedTypeRegistryGeneratorService } from './type-registry-generator';\nimport { NamedNormalizeGeneratorService } from './normalize-code-gen/normalize-generator-service';\nimport { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\n\nconst TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'TypeRepository',\n isType: true,\n};\n\nconst WRITE_RESULT: ImportableReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'WriteResult',\n isType: true,\n};\n\n/**\n * Generates the normalizer class for an unidentifiable type\n * @param services The services required for this function. TypeDefinitionService is used to generate utility types.\n * TypeRegistryGeneratorService is used to build references to child types\n * @param type The type to generate the normalizer for\n * @param options Options for generating the type, including the type name and namespace\n * @returns Class name and code for the build type class\n */\nexport function generateUnidentifiableType(\n services: NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedNormalizeGeneratorService &\n NamedNormalizedTypeDefinitionService,\n type: UnidentifiableType,\n options: {\n namespace: string;\n name: string;\n className: string;\n }\n) {\n const dataType = services.typeDefinition.build(type);\n const normalizedRefType = services.normalizedTypeDefinition.buildReference(type);\n\n const normalizationCode = services.normalizeGenerator.build(type, {\n namespace: options.namespace,\n typeRegistryRef: code`this.typeRegistry`,\n cacheRef: code`cache`,\n denormalizeDataRef: code`input.normalizedData`,\n normalizeDataRef: code`input.data`,\n existingNormalizedDataRef: code`input.existingNormalizedData`,\n errorsRef: code`errors`,\n });\n const typescriptSafeName = toTypeScriptSafeIdentifier(options.name);\n\n const writeInput = code`${typescriptSafeName}WriteInput`;\n const readInput = code`${typescriptSafeName}ReadInput`;\n\n return code`\n type Data = ${dataType}\n type NormalizedReference = ${normalizedRefType};\n\n type ${writeInput} = ${NORMALIZE_DATA_INPUT}<Data, NormalizedReference>\n type ${readInput} = ${DENORMALIZE_DATA_INPUT}<NormalizedReference>\n export class ${options.className} implements ${TYPE_REPOSITORY}<Data, ${readInput}, NormalizedReference, ${writeInput}> {\n namespace = '${options.namespace}'\n typeName = '${options.name}'\n\n constructor(protected typeRegistry: ${{ ...services.typeRegistryGenerator.build(), isType: true }}, services: ${TYPE_SERVICES}){}\n\n write(cache: ${CACHE}, input: ${writeInput}): ${WRITE_RESULT}<NormalizedReference> {\n const errors: ${WRITE_ERRORS} = []\n const normalized = ${normalizationCode.normalize}\n return ${BUILD_READ_WRITE_RESULT}<NormalizedReference, ${WRITE_ERRORS}>(normalized, errors)\n }\n\n read(cache: ${READONLY_CACHE}, input: ${readInput}){\n const errors: ${READ_ERRORS} = []\n const denormalized = ${normalizationCode.denormalize}\n return ${BUILD_READ_WRITE_RESULT}<Data, ${READ_ERRORS}>(denormalized, errors)\n }\n\n equals(a: Data, b: Data){return ${DEEP_EQUALS}(a,b)}\n }`;\n}\n","import { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { generateIdentifiableType } from './identifiable-type-generator';\nimport { generateUnidentifiableType } from './unidentifiable-type-generator';\nimport type { ImportableValueReference, NamedFileService } from '../files';\nimport { isIdentifiableType, UnidentifiableType, type Type } from '@conduit-client/model/v1';\nimport type { NamedNormalizedTypeDefinitionService, NamedTypeDefinitionService } from '../types';\nimport type { NamedTypeRegistryGeneratorService } from './type-registry-generator';\nimport { NamedNormalizeGeneratorService } from './normalize-code-gen/normalize-generator-service';\n\nexport type INormalizedTypeGenerator = {\n build(options: {\n namespace: string;\n name: string;\n type: Type;\n keyParamType?: Type;\n }): ImportableValueReference;\n\n buildRef(options: {\n namespace: string;\n name: string;\n type: Type;\n keyParamType?: Type;\n }): ImportableValueReference;\n};\n\ntype Options = { namespace: string; name: string; type: Type; keyParamsType?: Type };\n\nexport const FILE_PER_NORMALIZED_TYPE = (typename: string) =>\n `normalization/${toTypeScriptSafeIdentifier(typename)}.ts`;\n\n/**\n * A class for building normalized type class implementations\n */\nexport class NormalizedTypeGenerator implements INormalizedTypeGenerator {\n constructor(\n protected services: NamedFileService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedNormalizeGeneratorService &\n NamedNormalizedTypeDefinitionService,\n private fileFor: (typename: string) => string = FILE_PER_NORMALIZED_TYPE,\n private generateType: typeof defaultGenerateType = defaultGenerateType\n ) {}\n\n cache = new Map<string, ImportableValueReference>();\n\n protected typeBuildersSymbol = Symbol.for('typeBuilders');\n\n /**\n *\n * @param options The options for building the type normalizer, inclduing the namespace, the name, the type, and key param overrides\n * @returns An importable reference for the type class\n */\n build(options: Options): ImportableValueReference {\n const cacheKey = `${options.namespace}:${options.name}`;\n const cachedRef = this.cache.get(cacheKey);\n if (cachedRef) {\n return cachedRef;\n }\n\n const ref = this.buildRef(options);\n const className = ref.exportedSymbol;\n\n const file = this.services.file.build(ref.filename);\n this.cache.set(cacheKey, ref);\n\n const code = this.generateType(this.services, options.type, { ...options, className });\n\n file.push(code);\n\n return ref;\n }\n\n buildRef(options: Options) {\n const filename = this.fileFor(options.name!);\n const className = toTypeScriptSafeIdentifier(`${options.name}Repository`);\n const ref = { filename, exportedSymbol: className, isType: false } as const;\n return ref;\n }\n}\n\nfunction defaultGenerateType(\n services: NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedNormalizeGeneratorService &\n NamedNormalizedTypeDefinitionService,\n type: Type,\n options: Options & { className: string }\n) {\n return isIdentifiableType(type)\n ? generateIdentifiableType(services, type, options)\n : generateUnidentifiableType(services, type as UnidentifiableType, options);\n}\n","import { type NamedService } from '@conduit-client/utils';\nimport { Code, code } from '../../files';\nimport { type ObjectType, type Type } from '@conduit-client/model/v1';\nimport type { DiscriminatedObjectType, NamedAPIService, OneOf } from '@conduit-client/model/v1';\nimport { NamedTypeRegistryGeneratorService } from '../type-registry-generator';\nimport {\n DENORMALIZE_UNION_REPRESENTATION,\n EXTRACT_READ_WRITE_DATA,\n NORMALIZE_UNION_REPRESENTATION,\n VALIDATE_JSON_SCHEMA,\n} from '../utils';\nimport {\n NamedJSONSchemaDeclarationService,\n NamedNormalizedTypeDefinitionService,\n NamedTypeDefinitionService,\n} from '../../types';\nimport { resolveAllOfType } from '../../types/resolve-all-of-type';\n\n/**\n * The input options for the normalize generator service. Includes all the\n * data and code references required to build an implementation of normalize & denormalize method bodies\n */\ntype Options = {\n namespace: string;\n typeRegistryRef: Code;\n cacheRef: Code;\n denormalizeDataRef: Code;\n normalizeDataRef: Code;\n existingNormalizedDataRef: Code;\n errorsRef: Code;\n useReferences?: boolean;\n};\n\n/**\n * The result type of the normalize generator service\n */\ntype NormalizationCode = {\n normalize: Code;\n denormalize: Code;\n};\n\n/**\n * An interface for a service that builds the normalization and denormalization code\n * for a given type, given a set of code references for required variables, e.g.\n * a type registry, the data to normalized/denormalize, etc.\n */\nexport type INormalizeGeneratorService = {\n build(type: Type, options: Options): NormalizationCode;\n};\n\n/**\n * The named service definition for the normalize generator\n */\nexport type NamedNormalizeGeneratorService = NamedService<\n 'normalizeGenerator',\n INormalizeGeneratorService\n>;\n\n/**\n * The implementation of the normalize generator service.\n */\nexport class NormalizeGeneratorService implements INormalizeGeneratorService {\n constructor(\n protected services: NamedAPIService &\n NamedTypeRegistryGeneratorService &\n NamedTypeDefinitionService &\n NamedNormalizedTypeDefinitionService &\n NamedJSONSchemaDeclarationService\n ) {}\n\n /**\n * The public interface method for the normalize generator service, used\n * to build the body of denormalize/normalize methods.\n * @param type The type to generate normalization/denormalization code for\n * @param options The set of required input options to generate the code\n * @returns The normalize and denormalize code\n */\n build(type: Type, options: Options): NormalizationCode {\n const c = this.buildNormalizeCode(type, options);\n if (c === undefined) {\n return {\n normalize: code`${options.normalizeDataRef}`,\n denormalize: code`${options.denormalizeDataRef}`,\n };\n }\n\n return c;\n }\n\n buildNormalizeCode(type: Type, options: Options): NormalizationCode | undefined {\n const { namespace, typeRegistryRef, cacheRef, denormalizeDataRef, normalizeDataRef } =\n options;\n const typeName = this.services.api.api.types.nameOf(type);\n\n if (typeName !== undefined && options.useReferences) {\n const build = (dataRef: Code, method: 'write' | 'read') =>\n code`${EXTRACT_READ_WRITE_DATA}(${typeRegistryRef}.${this.services.typeRegistryGenerator.buildType(type, { name: typeName, namespace }).propertyName}.${method}(${cacheRef},${method === 'read' ? `{normalizedData:${dataRef}}` : `{data:${dataRef}, existingNormalizedData:${options.existingNormalizedDataRef}}`}), ${options.errorsRef})`;\n return {\n normalize: build(normalizeDataRef, 'write'),\n denormalize: build(denormalizeDataRef, 'read'),\n };\n }\n\n // otherwise, we need to traverse the type\n switch (type.type) {\n case 'allOf': {\n return this.buildNormalizeCode(resolveAllOfType(type), options);\n }\n case 'object': {\n return this.buildObjectCode(type, options);\n }\n\n case 'discriminatedObject':\n return this.buildDiscriminatedObjectCode(type, options);\n\n case 'array': {\n const itemsNormalizationCode = this.buildNormalizeCode(type.items, {\n ...options,\n normalizeDataRef: code`el`,\n denormalizeDataRef: code`el`,\n useReferences: true,\n existingNormalizedDataRef: code`${options.existingNormalizedDataRef}?.[idx]`,\n });\n if (itemsNormalizationCode === undefined) {\n return undefined;\n }\n const itemType = this.services.typeDefinition.build(type.items);\n const normalizedItemType = this.services.normalizedTypeDefinition.buildReference(\n type.items\n );\n\n const build = (dataRef: Code, itemTransform: Code, itemType: Code) =>\n code`${dataRef}.map((el: ${itemType}, idx: number) => {return ${itemTransform}})`;\n return {\n normalize: build(normalizeDataRef, itemsNormalizationCode.normalize, itemType),\n denormalize: build(\n denormalizeDataRef,\n itemsNormalizationCode.denormalize,\n normalizedItemType\n ),\n };\n }\n\n case 'oneOf': {\n return this.buildOneOfCode(type, options);\n }\n\n case 'ref': {\n return this.buildNormalizeCode(type.$ref, { ...options, useReferences: true });\n }\n case 'enum':\n case 'boolean':\n case 'double':\n case 'integer':\n case 'number':\n case 'nil':\n case 'time':\n case 'date':\n case 'datetime-only':\n case 'datetime':\n case 'string':\n case 'any':\n case 'not': {\n return undefined;\n }\n }\n\n throw new Error(`unknown type: ${(type as any).type}`);\n }\n\n buildObjectCode(t: ObjectType, options: Options): NormalizationCode | undefined {\n const propCodes = this.buildPropCodes(t, options);\n const additionalPropsCode = this.buildAdditionalPropsCode(t, propCodes.length > 0, options);\n\n if (propCodes.length === 0 && additionalPropsCode === undefined) {\n return undefined;\n }\n\n const build = (\n dataRef: Code,\n propsCodes: Code[],\n additionalPropsCode: Code | undefined\n ) => {\n return code`{...${dataRef},${propsCodes.length > 0 ? code`${Code.join(propsCodes, ',')},` : code``}${additionalPropsCode ? code`...${additionalPropsCode}` : code``}}`;\n };\n\n return {\n normalize: build(\n options.normalizeDataRef,\n propCodes.map((c) => c.normalize),\n additionalPropsCode?.normalize\n ),\n denormalize: build(\n options.denormalizeDataRef,\n propCodes.map((c) => c.denormalize),\n additionalPropsCode?.denormalize\n ),\n };\n }\n\n buildPropCodes(t: ObjectType, options: Options): NormalizationCode[] {\n return Object.entries(t.properties)\n .map(([propName, prop]) => {\n const propAccessor = code`['${propName}']`;\n const normalizedPropRef = code`${options.normalizeDataRef}${propAccessor}`;\n const denormalizePropRef = code`${options.denormalizeDataRef}${propAccessor}`;\n const propTypeCode = this.buildNormalizeCode(prop.type, {\n ...options,\n normalizeDataRef: normalizedPropRef,\n denormalizeDataRef: denormalizePropRef,\n useReferences: true,\n existingNormalizedDataRef: code`input.existingNormalizedData?.${propAccessor}`,\n });\n if (propTypeCode === undefined) {\n return undefined;\n }\n if (prop.required) {\n const build = (propCode: Code) => code`${propName}: ${propCode}`;\n return {\n normalize: build(propTypeCode.normalize),\n denormalize: build(propTypeCode.denormalize),\n };\n } else {\n const build = (dataRef: Code, propCode: Code) =>\n code`${propName}: ${dataRef} ? ${propCode} : undefined`;\n return {\n normalize: build(normalizedPropRef, propTypeCode.normalize),\n denormalize: build(denormalizePropRef, propTypeCode.denormalize),\n };\n }\n })\n .filter((c) => c !== undefined) as NormalizationCode[];\n }\n\n buildAdditionalPropsCode(\n t: ObjectType,\n hasExplicitPropertiesDefined: boolean,\n options: Options\n ): NormalizationCode | undefined {\n let additionalPropertiesCode: NormalizationCode | undefined = undefined;\n\n const hasAdditionalProperties =\n t.additionalProperties.type !== 'not' || t.additionalProperties.not.type !== 'any';\n if (hasAdditionalProperties) {\n const additionalPropertiesTypeCode = this.buildNormalizeCode(t.additionalProperties, {\n ...options,\n useReferences: true,\n denormalizeDataRef: code`${options.denormalizeDataRef}![curr]`,\n normalizeDataRef: code`${options.normalizeDataRef}![curr]`,\n existingNormalizedDataRef: code`${options.existingNormalizedDataRef}?.[curr]`,\n });\n if (additionalPropertiesTypeCode !== undefined) {\n const build = (dataRef: Code, additionalPropsCode: Code) => {\n const filterAdditionalPropsByDefinedProps = hasExplicitPropertiesDefined\n ? code`.filter(key => ![${Code.join(\n Object.keys(t.properties).map((propName) => code`'${propName}'`),\n ','\n )}].includes(key))`\n : code``;\n return code`Object.keys(${dataRef})${filterAdditionalPropsByDefinedProps}.reduce((prev, curr) => {prev[curr]=${additionalPropsCode};return prev;}, {} as Record<string, unknown>)`;\n };\n additionalPropertiesCode = {\n normalize: build(\n options.normalizeDataRef,\n additionalPropertiesTypeCode.normalize\n ),\n denormalize: build(\n options.denormalizeDataRef,\n additionalPropertiesTypeCode.denormalize\n ),\n };\n }\n }\n\n return additionalPropertiesCode;\n }\n\n buildOneOfCode(type: OneOf, options: Options): NormalizationCode | undefined {\n const results = type.oneOf.map((oneOfType, index) => {\n const discriminator = `'${index}'`;\n const normalizeCode = this.buildNormalizeCode(oneOfType, {\n ...options,\n useReferences: true,\n denormalizeDataRef: code`data`,\n normalizeDataRef: code`data`,\n existingNormalizedDataRef: code`(${options.existingNormalizedDataRef})?.discriminator === ${discriminator} ? (${options.existingNormalizedDataRef})?.data : undefined`,\n });\n const jsonSchema = this.services.jsonSchema.build(oneOfType);\n\n return {\n discriminator,\n normalizeCode,\n jsonSchema,\n discriminatedType: oneOfType,\n };\n });\n\n if (results.every((r) => r.normalizeCode === undefined)) {\n return undefined;\n }\n\n const unionMap = code`{\n ${Code.join(\n results.map((r) => {\n return code`${r.discriminator}: {data: ${this.services.typeDefinition.build(r.discriminatedType)}, normalized: ${this.services.normalizedTypeDefinition.buildReference(r.discriminatedType)}}`;\n }),\n ','\n )}\n }`;\n\n return {\n normalize: code`${NORMALIZE_UNION_REPRESENTATION}<${unionMap}>(${options.normalizeDataRef}, {${Code.join(\n results.map((r) => {\n return code`${r.discriminator}: {test: (data) => ${VALIDATE_JSON_SCHEMA}(data, ${r.jsonSchema}).isOk(), normalize: (data) => ${r.normalizeCode === undefined ? 'data' : code`${r.normalizeCode?.normalize} as ${this.services.normalizedTypeDefinition.buildReference(r.discriminatedType)}`}}`;\n }),\n ','\n )}})`,\n denormalize: code`${DENORMALIZE_UNION_REPRESENTATION}<${unionMap}>(${options.denormalizeDataRef}, {${Code.join(\n results.map((r) => {\n return code`${r.discriminator}: (data: any) => ${r.normalizeCode === undefined ? 'data' : code`${r.normalizeCode?.denormalize} as ${this.services.typeDefinition.build(r.discriminatedType)}`}`;\n }),\n ','\n )}})`,\n };\n }\n\n buildDiscriminatedObjectCode(t: DiscriminatedObjectType, options: Options) {\n const results = Object.entries(t.mapping).map(([discriminator, discriminatedType]) => {\n const normalizeCode = this.buildNormalizeCode(discriminatedType, {\n ...options,\n useReferences: true,\n denormalizeDataRef: code`data`,\n normalizeDataRef: code`data`,\n existingNormalizedDataRef: code`(${options.existingNormalizedDataRef})?.discriminator === '${discriminator}' ? (${options.existingNormalizedDataRef})?.data : undefined`,\n });\n\n return {\n discriminator,\n normalizeCode,\n discriminatedType,\n };\n });\n\n if (results.every((r) => r.normalizeCode === undefined)) {\n return undefined;\n }\n\n const unionMap = code`{\n ${Code.join(\n results.map((r) => {\n return code`${r.discriminator}: {data: ${this.services.typeDefinition.build(r.discriminatedType)}, normalized: ${this.services.normalizedTypeDefinition.buildReference(r.discriminatedType)}}`;\n }),\n ','\n )}\n }`;\n\n return {\n normalize: code`${NORMALIZE_UNION_REPRESENTATION}<${unionMap}>(${options.normalizeDataRef}, {${Code.join(\n results.map((r) => {\n return code`${r.discriminator}: {test: (data) => data['${t.discriminator}'] === '${r.discriminator}', normalize: (data) => ${r.normalizeCode === undefined ? 'data' : code`${r.normalizeCode?.normalize} as ${this.services.normalizedTypeDefinition.buildReference(r.discriminatedType)}`}}`;\n }),\n ','\n )}})`,\n denormalize: code`${DENORMALIZE_UNION_REPRESENTATION}<${unionMap}>(${options.denormalizeDataRef}, {${Code.join(\n results.map((r) => {\n return code`${r.discriminator}: (data) => ${r.normalizeCode === undefined ? 'data' : code`${r.normalizeCode?.denormalize} as ${this.services.typeDefinition.build(r.discriminatedType)}`}`;\n }),\n ','\n )}})`,\n };\n }\n}\n\nexport function normalizeGenerator(\n services: NamedTypeDefinitionService &\n NamedAPIService &\n NamedTypeRegistryGeneratorService &\n NamedJSONSchemaDeclarationService &\n NamedNormalizedTypeDefinitionService\n) {\n return new NormalizeGeneratorService(services);\n}\n","import { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { Code, code } from '../files';\nimport { NormalizedTypeGenerator } from './normalized-type-generator';\nimport type {\n NamedJSONSchemaDeclarationService,\n NamedNormalizedTypeDefinitionService,\n NamedTypeDefinitionService,\n} from '../types';\nimport type { INormalizedTypeGenerator } from './normalized-type-generator';\nimport type { NamedService } from '@conduit-client/utils';\nimport type { File, ImportableValueReference, NamedFileService } from '../files';\nimport { NamedAPIService, isIdentifiableType, type Type } from '@conduit-client/model/v1';\nimport { TYPE_SERVICES } from './utils';\nimport {\n INormalizeGeneratorService,\n NamedNormalizeGeneratorService,\n NormalizeGeneratorService,\n} from './normalize-code-gen/normalize-generator-service';\n\ntype TypeRepositoryReference = { propertyName: string; typeClassRef: ImportableValueReference };\ntype Options = { name: string; namespace: string; keyParamType?: Type; isInvalidatable?: boolean };\n\nexport type ITypeRegistryGeneratorService = {\n build(): ImportableValueReference;\n buildType(type: Type, options: Options): TypeRepositoryReference;\n\n invalidatableTypes: TypeRepositoryReference[];\n};\n\nexport type NamedTypeRegistryGeneratorService<Name extends string = 'typeRegistryGenerator'> =\n NamedService<Name, ITypeRegistryGeneratorService>;\n\nconst TYPE_REGISTRY_CLASS = 'TypeRegistry';\n\n/**\n * A class for building the type registry for a given module\n */\nexport class TypeRegistryGenerator implements ITypeRegistryGeneratorService {\n constructor(\n protected services: NamedFileService &\n NamedTypeDefinitionService &\n NamedNormalizedTypeDefinitionService,\n protected typeGenerator: INormalizedTypeGenerator,\n protected filename: string = TYPE_REGISTRY_FILE\n ) {}\n\n _file: File | undefined = undefined;\n\n protected typeDeclarationsSymbol = Symbol.for('typeDeclarations');\n protected typeInstantiationsSymbol = Symbol.for('typeInstantiations');\n protected typeGettersSymbol = Symbol.for('typeGetters');\n cache = new Map<string, TypeRepositoryReference>();\n\n /**\n * Note: Use with caution, it is only guaranteed to have the types with normalization\n * after all operations precessing is complete.\n */\n invalidatableTypes: TypeRepositoryReference[] = [];\n\n private get file() {\n return this.buildFile();\n }\n\n private buildFile(): File {\n if (this._file) {\n return this._file;\n }\n\n const file = this.services.file.build(this.filename);\n file.template = this.template;\n this._file = file;\n return file;\n }\n\n get template() {\n return [\n code`export class ${TYPE_REGISTRY_CLASS} {`,\n this.typeDeclarationsSymbol,\n code`constructor(protected services: ${TYPE_SERVICES}) {`,\n this.typeInstantiationsSymbol,\n code`}`,\n this.typeGettersSymbol,\n code`}`,\n ];\n }\n\n /**\n * A method for building the base type registry code, without any classes populated\n * @returns\n */\n build() {\n this.buildFile();\n return {\n filename: this.filename,\n exportedSymbol: TYPE_REGISTRY_CLASS,\n isType: false,\n } as const;\n }\n\n /**\n * A method for building/adding a specific type to the registry\n * @param type The type to add to the registry\n * @param options Options including namespace, name, and key overrides\n * @returns The name of the method on the registry used to build the type, and an importable reference to the type class\n */\n buildType(type: Type, options: Options) {\n const cacheKey = `${options.namespace}:${options.name}`;\n let cachedResult = this.cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n\n const propertyName = `${toTypeScriptSafeIdentifier(options.name)}`;\n const ref = this.typeGenerator.buildRef({ type, ...options });\n const result = { propertyName, typeClassRef: ref };\n this.cache.set(cacheKey, result);\n\n this.typeGenerator.build({ type, ...options });\n\n const privateName = code`_${propertyName}`;\n\n this.file.pushTo(this.typeDeclarationsSymbol, code`${privateName}: ${ref};`);\n this.file.pushTo(\n this.typeInstantiationsSymbol,\n code`this.${privateName} = new ${ref}(this, this.services);`\n );\n this.file.pushTo(\n this.typeGettersSymbol,\n code`get ${propertyName}(){return this.${privateName}}`\n );\n\n const builderMethodCode = new Code();\n builderMethodCode.push(\n code`${propertyName}(){ return new `,\n ref,\n code`(this, this.services) }`\n );\n\n if (\n isIdentifiableType(type) &&\n (options.isInvalidatable === undefined || options.isInvalidatable)\n ) {\n this.invalidatableTypes.push(result);\n }\n\n return result;\n }\n}\n\nexport const TYPE_REGISTRY_FILE = 'normalization/type-registry.ts';\n\n/**\n * Creates a TypeRegistryGeneratorService.\n *\n **/\nexport function typeRegistryGeneratorService(\n services: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedNormalizedTypeDefinitionService &\n NamedJSONSchemaDeclarationService &\n Partial<NamedNormalizeGeneratorService>,\n typeGenerator?: INormalizedTypeGenerator\n): ITypeRegistryGeneratorService {\n const typeGeneratorServices: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedNormalizeGeneratorService &\n NamedJSONSchemaDeclarationService &\n NamedNormalizedTypeDefinitionService = {\n ...services,\n typeRegistryGenerator: undefined as any,\n normalizeGenerator: undefined as any,\n };\n typeGeneratorServices.normalizeGenerator =\n services.normalizeGenerator || new NormalizeGeneratorService(typeGeneratorServices);\n\n const tg = typeGenerator || new NormalizedTypeGenerator(typeGeneratorServices);\n const typeRegistryGenerator = new TypeRegistryGenerator(services, tg);\n typeGeneratorServices.typeRegistryGenerator = typeRegistryGenerator;\n return typeRegistryGenerator;\n}\n","import { code } from '../../files';\nimport { Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport type {\n GraphQLFieldType,\n GraphQLListFieldType,\n GraphQLSchemaModel,\n GraphQLSingleFieldType,\n GraphQLTypeModel,\n} from '../../model/graphql-schema-model';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\n\nexport const BASE_SCALAR_FIELD_DEF: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'BaseScalarFieldDef',\n isType: false,\n};\n\nexport const BASE_OBJECT_FIELD_DEF: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'BaseObjectFieldDef',\n isType: false,\n};\n\nexport const BASE_ARRAY_FIELD_DEF: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'BaseArrayFieldDef',\n isType: false,\n};\n\nexport const FIELD_DEFS: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'FieldDefs',\n isType: true,\n};\n\nexport const GRAPHQL_INPUT_EXTENSION: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLInputExtension',\n isType: true,\n};\n\nexport const GRAPHQL_DATA: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLData',\n isType: true,\n};\n\nexport const GRAPHQL_TYPE_SERVICES: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nexport const GRAPHQL_PUBSUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nexport type GenerationOptions = {\n namespace: string;\n name: string;\n className: string;\n};\n\nexport abstract class BaseGraphQLTypeGenerator<\n T extends GraphQLTypeModel & {\n fields?: Record<string, GraphQLFieldType>;\n interfaces?: string[];\n },\n> {\n constructor(protected services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService) {}\n\n /**\n * Determine if a GraphQL type should be treated as an object-like type\n * that needs a repository in the type registry\n */\n private isObjectLikeType(type: GraphQLTypeModel): boolean {\n return type.kind === 'object' || type.kind === 'interface' || type.kind === 'union';\n }\n\n /**\n * Ensure a referenced type is built and return the appropriate registry reference\n */\n protected ensureTypeBuiltAndGetReference(\n referencedType: GraphQLTypeModel,\n schemaModel: GraphQLSchemaModel\n ): Code {\n if (this.isObjectLikeType(referencedType)) {\n // Object-like type: ensure it's built and reference through typeRegistry\n const ref = this.services.graphqlTypeRegistryGenerator.buildGraphQLType({\n type: referencedType as any,\n schemaModel,\n });\n return code`this.typeRegistry.${ref.propertyName}`;\n } else {\n // For scalar/enum types, we might need different handling\n // For now, assume they don't need registry references\n throw new Error(\n `Type ${referencedType.name} is not an object-like type and cannot be referenced in possibleTypes`\n );\n }\n }\n\n /**\n * Generate a field definition for a single field type (recursive helper)\n */\n private generateSingleFieldDef(\n fieldType: GraphQLSingleFieldType | GraphQLListFieldType,\n dataTypeAnnotation: string | ImportableReference,\n normalizedDataTypeAnnotation: string | ImportableReference,\n schemaModel: GraphQLSchemaModel\n ): Code {\n if (fieldType.kind === 'single') {\n const { name: typeName, nullable } = fieldType;\n const referencedType = schemaModel.types.find((t) => t.name === typeName);\n\n if (referencedType && this.isObjectLikeType(referencedType)) {\n // Object field: User, Post, etc. - ensure it's built and reference through typeRegistry\n const ref = this.ensureTypeBuiltAndGetReference(referencedType, schemaModel);\n return code`new ${BASE_OBJECT_FIELD_DEF}<${dataTypeAnnotation}, ${normalizedDataTypeAnnotation}, ExtraInputExtension>(${ref}, ${nullable})`;\n } else {\n // Scalar field: String, Int, ID, enum types, custom scalars, etc.\n // This covers built-in scalars, custom scalars, enums, and any unknown types\n return code`new ${BASE_SCALAR_FIELD_DEF}<${dataTypeAnnotation}, ${normalizedDataTypeAnnotation}, ExtraInputExtension>(${nullable})`;\n }\n } else if (fieldType.kind === 'list') {\n const { nullable: arrayNullable, items } = fieldType;\n\n // Generate the item field definition recursively\n const itemFieldDef = this.generateSingleFieldDef(\n items,\n dataTypeAnnotation,\n normalizedDataTypeAnnotation,\n schemaModel\n );\n\n // Wrap in array field definition\n return code`new ${BASE_ARRAY_FIELD_DEF}<${dataTypeAnnotation}, ${normalizedDataTypeAnnotation}, ExtraInputExtension>(\n ${itemFieldDef},\n ${arrayNullable}\n )`;\n } else {\n throw new Error(`Unexpected field type in field definition.`);\n }\n }\n\n /**\n * Generate field definitions for a GraphQL type\n */\n protected generateFieldDefinitions(\n type: T,\n dataTypeAnnotation: string | ImportableReference,\n normalizedDataTypeAnnotation: string | ImportableReference,\n schemaModel: GraphQLSchemaModel,\n namespace: string\n ): Code[] {\n if (!type.fields) {\n return [];\n }\n\n return Object.entries(type.fields).map(([fieldName, fieldType]) => {\n const fieldDef = this.generateSingleFieldDef(\n fieldType.type,\n dataTypeAnnotation,\n normalizedDataTypeAnnotation,\n schemaModel\n );\n\n return code`${fieldName}: ${fieldDef}`;\n });\n }\n\n /**\n * Generate complete fields property as a getter method to avoid circular dependencies\n */\n protected generateFieldsProperty(\n type: T,\n dataTypeAnnotation: string | ImportableReference,\n normalizedDataTypeAnnotation: string | ImportableReference,\n schemaModel: GraphQLSchemaModel,\n namespace: string\n ): Code {\n const fieldDefs = this.generateFieldDefinitions(\n type,\n dataTypeAnnotation,\n normalizedDataTypeAnnotation,\n schemaModel,\n namespace\n );\n\n const fieldsCode = Code.join(fieldDefs, ',\\n ');\n\n return code`get fields() {\n return {\n ${fieldsCode}\n } satisfies ${FIELD_DEFS}<${dataTypeAnnotation}, ${normalizedDataTypeAnnotation}, ExtraInputExtension>;\n }`;\n }\n\n /**\n * Get the ImportableReference for the GraphQLTypeRegistry\n */\n protected getGraphQLTypeRegistryReference(): {\n filename: string;\n exportedSymbol: string;\n isType: false;\n } {\n return {\n filename: 'normalization/graphql-type-registry.ts',\n exportedSymbol: 'GraphQLTypeRegistry',\n isType: false,\n };\n }\n\n /**\n * Generate constructor that accepts services and type registry\n */\n protected generateConstructor(): Code {\n const typeRegistryRef = this.getGraphQLTypeRegistryReference();\n return code`constructor(\n protected services: ${GRAPHQL_TYPE_SERVICES} & ${GRAPHQL_PUBSUB_SERVICE},\n protected typeRegistry: ${typeRegistryRef}<ExtraInputExtension>\n ) {\n super(services);\n }`;\n }\n\n /**\n * Generate common properties shared by all GraphQL type repositories\n */\n protected generateCommonProperties(type: T, options: GenerationOptions): Code {\n return code`namespace = '${options.namespace}';\n typeName = '${type.name}';\n implementedInterfaces = ${JSON.stringify(type.interfaces || [])};\n `;\n }\n\n /**\n * Generate a standard GraphQL type class with common structure\n */\n protected generateStandardClass(\n type: T,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions,\n baseClass: ImportableReference,\n genericTypes: {\n data: string | ImportableReference;\n normalized: string | ImportableReference;\n },\n additionalMethods: Code[] = []\n ): Code {\n const constructor = this.generateConstructor();\n const commonProperties = this.generateCommonProperties(type, options);\n\n // Generate fields property if the type has fields (for types that need field definitions)\n const fieldsProperty = this.generateFieldsProperty(\n type,\n genericTypes?.data || GRAPHQL_DATA,\n genericTypes?.normalized || 'any',\n schemaModel,\n options.namespace\n );\n\n const additionalMethodsCode =\n additionalMethods.length > 0 ? Code.join(additionalMethods, '\\n\\n ') : code``;\n\n // Conditionally include generic type parameters\n const baseClassWithGenerics = code`${baseClass}<${genericTypes.data}, ${genericTypes.normalized}, ExtraInputExtension>`;\n\n return code`\nexport class ${options.className}<ExtraInputExtension extends Record<string, any> = Record<string, unknown>> extends ${baseClassWithGenerics} {\n ${commonProperties}\n\n ${constructor}${\n fieldsProperty\n ? code`\n\n ${fieldsProperty}`\n : code``\n }${\n additionalMethods.length > 0\n ? code`\n\n ${additionalMethodsCode}`\n : code``\n }\n}`;\n }\n\n /**\n * Generate a standard GraphQL type class for identifiable types with key params\n */\n protected generateIdentifiableClass(\n type: T,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions,\n baseClass: ImportableReference,\n dataTypeAnnotation: string | ImportableReference,\n normalizedDataTypeAnnotation: string | ImportableReference,\n keyParamsType: string,\n additionalMethods: Code[] = []\n ): Code {\n const constructor = this.generateConstructor();\n const commonProperties = this.generateCommonProperties(type, options);\n const fieldsProperty = this.generateFieldsProperty(\n type,\n dataTypeAnnotation,\n normalizedDataTypeAnnotation,\n schemaModel,\n options.namespace\n );\n\n const additionalMethodsCode =\n additionalMethods.length > 0 ? Code.join(additionalMethods, '\\n\\n ') : code``;\n\n return code`\nexport class ${options.className}<ExtraInputExtension extends Record<string, any> = Record<string, unknown>> extends ${baseClass}<${dataTypeAnnotation}, ${normalizedDataTypeAnnotation}, ${keyParamsType}, ExtraInputExtension> {\n ${commonProperties}\n\n ${constructor}\n\n ${fieldsProperty}${\n additionalMethods.length > 0\n ? code`\n\n ${additionalMethodsCode}`\n : code``\n }\n}`;\n }\n\n /**\n * Abstract method to be implemented by specific type generators\n */\n abstract generate(type: T, schemaModel: GraphQLSchemaModel, options: GenerationOptions): Code;\n}\n","import { code } from '../../files';\nimport { Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport { generateCacheControl } from '../../generators/cache-control-generator';\nimport type { GraphQLObjectTypeModel, GraphQLSchemaModel } from '../../model/graphql-schema-model';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\nimport { BaseGraphQLTypeGenerator, GenerationOptions, GRAPHQL_DATA } from './base-type-generator';\n\nconst IDENTIFIABLE_GRAPHQL_TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'IdentifiableGraphQLTypeRepository',\n isType: false,\n};\n\nexport type IdentifiableGraphQLObjectType = GraphQLObjectTypeModel & {\n category: 'identifiable';\n idField: string;\n};\n\nexport class IdentifiableGraphQLTypeGenerator extends BaseGraphQLTypeGenerator<IdentifiableGraphQLObjectType> {\n generate(\n type: IdentifiableGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n ): Code {\n const keyParamsType = `{ ${type.idField}: string }`;\n const idField = code`idField = '${type.idField}'`;\n const cacheControl = generateCacheControl(type.metadata['cache-control']);\n\n return this.generateIdentifiableClass(\n type,\n schemaModel,\n options,\n IDENTIFIABLE_GRAPHQL_TYPE_REPOSITORY,\n GRAPHQL_DATA,\n 'any',\n keyParamsType,\n [cacheControl, idField]\n );\n }\n}\n\nexport function generateIdentifiableGraphQLType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: IdentifiableGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n const generator = new IdentifiableGraphQLTypeGenerator(services);\n return generator.generate(type, schemaModel, options);\n}\n","import { Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport type { GraphQLSchemaModel, GraphQLTypeModel } from '../../model/graphql-schema-model';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\nimport { BaseGraphQLTypeGenerator, GenerationOptions, GRAPHQL_DATA } from './base-type-generator';\n\nconst UNIDENTIFIABLE_GRAPHQL_TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'UnidentifiableGraphQLTypeRepository',\n isType: false,\n};\n\nexport type UnidentifiableGraphQLObjectType = GraphQLTypeModel & {\n kind: 'object';\n category: 'unidentifiable';\n};\n\nexport class UnidentifiableGraphQLTypeGenerator extends BaseGraphQLTypeGenerator<UnidentifiableGraphQLObjectType> {\n generate(\n type: UnidentifiableGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n ): Code {\n return this.generateStandardClass(\n type,\n schemaModel,\n options,\n UNIDENTIFIABLE_GRAPHQL_TYPE_REPOSITORY,\n { data: GRAPHQL_DATA, normalized: 'any' } // For unidentifiable types, data use GraphQLData\n );\n }\n}\n\nexport function generateUnidentifiableGraphQLType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: UnidentifiableGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n const generator = new UnidentifiableGraphQLTypeGenerator(services);\n return generator.generate(type, schemaModel, options);\n}\n","import { code } from '../../files';\nimport { Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport type {\n GraphQLObjectTypeModel,\n GraphQLSchemaModel,\n GraphQLTypeModel,\n} from '../../model/graphql-schema-model';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\nimport { BaseGraphQLTypeGenerator, GenerationOptions } from './base-type-generator';\n\nconst CURSOR_CONNECTION_GRAPHQL_TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'CursorConnectionGraphQLTypeRepository',\n isType: false,\n};\n\nconst PAGINATED_RESPONSE: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'PaginatedResponse',\n isType: true,\n};\n\nconst CONNECTION_NORMALIZED_DATA: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'ConnectionNormalizedData',\n isType: true,\n};\n\nconst GRAPHQL_INPUT_EXTENSION: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLInputExtension',\n isType: true,\n};\n\nexport type CursorConnectionGraphQLObjectType = GraphQLObjectTypeModel & {\n category: 'cursor-connection';\n defaultPageSize?: number;\n};\n\n/**\n * Cursor Connection Type MUST be an Object Type according to the Cursor Connection spec.\n * https://relay.dev/graphql/connections.htm#sec-Connection-Types\n */\nexport class CursorConnectionGraphQLTypeGenerator extends BaseGraphQLTypeGenerator<CursorConnectionGraphQLObjectType> {\n generate(\n type: CursorConnectionGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n ): Code {\n const defaultPageSize = type.defaultPageSize || 10;\n\n const defaultPageSizeProperty = code`defaultPageSize = ${defaultPageSize};`;\n\n // Need special handling for cursor connection with 3 type parameters\n const constructor = this.generateConstructor();\n const commonProperties = this.generateCommonProperties(type, options);\n const fieldsProperty = this.generateFieldsProperty(\n type,\n PAGINATED_RESPONSE,\n CONNECTION_NORMALIZED_DATA,\n schemaModel,\n options.namespace\n );\n\n return code`\nexport class ${options.className} extends ${CURSOR_CONNECTION_GRAPHQL_TYPE_REPOSITORY}<${PAGINATED_RESPONSE}, ${CONNECTION_NORMALIZED_DATA}, ${GRAPHQL_INPUT_EXTENSION}> {\n ${commonProperties}\n\n ${constructor}\n\n ${fieldsProperty}\n\n ${defaultPageSizeProperty}\n}`;\n }\n}\n\nexport function generateCursorConnectionGraphQLType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: CursorConnectionGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n const generator = new CursorConnectionGraphQLTypeGenerator(services);\n return generator.generate(type, schemaModel, options);\n}\n","import { code } from '../../files';\nimport { Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport type {\n GraphQLSchemaModel,\n GraphQLInterfaceTypeModel,\n} from '../../model/graphql-schema-model';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\nimport { BaseGraphQLTypeGenerator, GenerationOptions, GRAPHQL_DATA } from './base-type-generator';\n\nconst BASE_INTERFACE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'BaseInterfaceRepository',\n isType: false,\n};\n\nexport type InterfaceGraphQLObjectType = GraphQLInterfaceTypeModel;\n\nexport class InterfaceGraphQLTypeGenerator extends BaseGraphQLTypeGenerator<InterfaceGraphQLObjectType> {\n generate(\n type: InterfaceGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n ): Code {\n // Generate possibleTypes mapping using this.typeRegistry\n const possibleTypesEntries = type.possibleTypes.map((possibleType) => {\n const typeReference = this.ensureTypeBuiltAndGetReference(possibleType, schemaModel);\n return code`'${possibleType.name}': ${typeReference}`;\n });\n const possibleTypesCode = Code.join(possibleTypesEntries, ',\\n ');\n\n const possibleTypesProperty = code`get possibleTypes() {\n return {\n ${possibleTypesCode}\n };\n }`;\n\n return this.generateStandardClass(\n type,\n schemaModel,\n options,\n BASE_INTERFACE_REPOSITORY,\n {\n data: GRAPHQL_DATA,\n normalized: 'any',\n },\n [possibleTypesProperty]\n );\n }\n}\n\nexport function generateInterfaceGraphQLType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: InterfaceGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n const generator = new InterfaceGraphQLTypeGenerator(services);\n return generator.generate(type, schemaModel, options);\n}\n","import { code } from '../../files';\nimport { Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport type { GraphQLSchemaModel, GraphQLUnionTypeModel } from '../../model/graphql-schema-model';\nimport { BaseGraphQLTypeGenerator, GenerationOptions, GRAPHQL_DATA } from './base-type-generator';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\n\nconst BASE_UNION_REPOSITORY: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'BaseUnionRepository',\n isType: false,\n};\n\nexport type UnionGraphQLObjectType = GraphQLUnionTypeModel;\n\nexport class UnionGraphQLTypeGenerator extends BaseGraphQLTypeGenerator<UnionGraphQLObjectType> {\n generate(\n type: UnionGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n ): Code {\n // Generate possibleTypes mapping using this.typeRegistry\n const possibleTypesEntries = type.possibleTypes.map((possibleType) => {\n const typeReference = this.ensureTypeBuiltAndGetReference(possibleType, schemaModel);\n return code`'${possibleType.name}': ${typeReference}`;\n });\n const possibleTypesCode = Code.join(possibleTypesEntries, ',\\n ');\n\n const possibleTypesProperty = code`get possibleTypes() {\n return {\n ${possibleTypesCode}\n };\n }`;\n\n return this.generateStandardClass(\n type,\n schemaModel,\n options,\n BASE_UNION_REPOSITORY,\n {\n data: GRAPHQL_DATA,\n normalized: 'any',\n },\n [possibleTypesProperty]\n );\n }\n}\n\nexport function generateUnionGraphQLType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: UnionGraphQLObjectType,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n const generator = new UnionGraphQLTypeGenerator(services);\n return generator.generate(type, schemaModel, options);\n}\n","import { code, Code } from '../../files';\nimport type { ImportableReference, NamedFileService } from '../../files';\nimport { generateCacheControl } from '../../generators/cache-control-generator';\nimport type {\n GraphQLObjectTypeModel,\n GraphQLSchemaModel,\n IdentifiableGraphQLTypeMetadata,\n} from '../../model/graphql-schema-model';\nimport { NamedGraphQLTypeRegistryGeneratorService } from '../graphql-type-registry-generator';\nimport type { TypeCacheControlExtension } from '@conduit-client/model/v1';\nimport { BaseGraphQLTypeGenerator, GenerationOptions } from './base-type-generator';\n\nconst GRAPHQL_DOCUMENT_ROOT_TYPE_REPOSITORY: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLDocumentRootTypeRepository',\n isType: false,\n};\n\nconst GRAPHQL_DATA: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLData',\n isType: true,\n};\n\n/**\n * Query Type MUST be an Object Type according to the GraphQL spec.\n * https://spec.graphql.org/October2021/#sec-Query\n */\nexport class DocumentRootTypeGenerator extends BaseGraphQLTypeGenerator<GraphQLObjectTypeModel> {\n generate(\n type: GraphQLObjectTypeModel,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n ): Code {\n return this.generateStandardClass(\n type,\n schemaModel,\n options,\n GRAPHQL_DOCUMENT_ROOT_TYPE_REPOSITORY,\n { data: GRAPHQL_DATA, normalized: 'any' },\n [\n code`${generateCacheControl((type.metadata as IdentifiableGraphQLTypeMetadata)['cache-control'])}`,\n ] // We force the Root Query Type to have identifiable metadata\n );\n }\n}\n\nexport function generateDocumentRootGraphQLType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: GraphQLObjectTypeModel,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n const generator = new DocumentRootTypeGenerator(services);\n return generator.generate(type, schemaModel, options);\n}\n","import {\n generateIdentifiableGraphQLType,\n IdentifiableGraphQLObjectType,\n} from './graphql/identifiable-type-generator';\nimport {\n generateUnidentifiableGraphQLType,\n UnidentifiableGraphQLObjectType,\n} from './graphql/unidentifiable-type-generator';\nimport {\n generateCursorConnectionGraphQLType,\n CursorConnectionGraphQLObjectType,\n} from './graphql/cursor-connection-type-generator';\nimport {\n generateInterfaceGraphQLType,\n InterfaceGraphQLObjectType,\n} from './graphql/interface-type-generator';\nimport { generateUnionGraphQLType, UnionGraphQLObjectType } from './graphql/union-type-generator';\nimport { generateDocumentRootGraphQLType } from './graphql/document-root-type-generator';\nimport type { ImportableValueReference, NamedFileService, Code } from '../files';\nimport type {\n GraphQLEnumTypeModel,\n GraphQLInterfaceTypeModel,\n GraphQLObjectTypeModel,\n GraphQLSchemaModel,\n GraphQLTypeModel,\n GraphQLUnionTypeModel,\n} from '../model/graphql-schema-model';\nimport type { GenerationOptions } from './graphql/base-type-generator';\nimport { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { NamedGraphQLTypeRegistryGeneratorService } from './graphql-type-registry-generator';\n\nexport const FILE_PER_GRAPHQL_TYPE = (typename: string) =>\n `graphql/${typename.toLowerCase()}-repository.ts`;\n\nexport interface IGraphQLTypeGenerator {\n build(options: {\n namespace: string;\n name: string;\n schemaModel: GraphQLSchemaModel;\n }): ImportableValueReference;\n\n buildRef(options: { namespace: string; name: string }): ImportableValueReference;\n}\n\nfunction defaultGenerateType(\n services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n type: GraphQLTypeModel,\n schemaModel: GraphQLSchemaModel,\n options: GenerationOptions\n): Code {\n // Check if this is a document root type (Query, Mutation, Subscription)\n if (isObjectType(type)) {\n if (type.name === schemaModel.queryTypeName || type.name === schemaModel.mutationTypeName) {\n return generateDocumentRootGraphQLType(services, type, schemaModel, options);\n } else if (isIdentifiableType(type)) {\n return generateIdentifiableGraphQLType(services, type, schemaModel, options);\n } else if (isUnidentifiableType(type)) {\n return generateUnidentifiableGraphQLType(services, type, schemaModel, options);\n } else if (isCursorConnectionType(type)) {\n return generateCursorConnectionGraphQLType(services, type, schemaModel, options);\n }\n } else if (isInterfaceType(type)) {\n return generateInterfaceGraphQLType(services, type, schemaModel, options);\n } else if (isUnionType(type)) {\n return generateUnionGraphQLType(services, type, schemaModel, options);\n }\n throw new Error(\n `Unsupported GraphQL type category: ${(type as any).category || (type as any).kind}`\n );\n}\n\nexport type GraphQLObjectType =\n | IdentifiableGraphQLObjectType\n | UnidentifiableGraphQLObjectType\n | CursorConnectionGraphQLObjectType\n | InterfaceGraphQLObjectType\n | UnionGraphQLObjectType;\n\n/**\n * A class for building GraphQL type repository implementations\n */\nexport class GraphQLTypeGenerator implements IGraphQLTypeGenerator {\n private cache = new Map<string, ImportableValueReference>();\n\n constructor(\n protected services: NamedFileService & NamedGraphQLTypeRegistryGeneratorService,\n private fileFor: (typename: string) => string = FILE_PER_GRAPHQL_TYPE,\n private generateType: typeof defaultGenerateType = defaultGenerateType\n ) {}\n\n /**\n * Build a GraphQL type repository class, starting from the specified type name\n * and spidering out to referenced types as needed\n */\n build(options: {\n namespace: string;\n name: string;\n schemaModel: GraphQLSchemaModel;\n }): ImportableValueReference {\n const { namespace, name, schemaModel } = options;\n const cacheKey = `${namespace}:${name}`;\n\n const cachedRef = this.cache.get(cacheKey);\n if (cachedRef) {\n return cachedRef;\n }\n\n const ref = this.buildRef({ namespace, name });\n const className = ref.exportedSymbol!;\n\n // Find the type in the schema model\n const type = schemaModel.types.find((t) => t.name === name);\n if (!type) {\n throw new Error(`GraphQL type '${name}' not found in schema model`);\n }\n this.cache.set(cacheKey, ref); // Must avoid infinite looping\n\n // Generate the code for this type\n const code = this.generateType(this.services, type, schemaModel, {\n namespace,\n name,\n className,\n });\n\n const file = this.services.file.build('filename' in ref ? ref.filename : ref.module);\n file.push(code);\n\n return ref;\n }\n\n buildRef(options: { namespace: string; name: string }): ImportableValueReference {\n const filename = this.fileFor(options.name);\n const className = toTypeScriptSafeIdentifier(`${options.name}Repository`);\n const ref = { filename, exportedSymbol: className, isType: false } as const;\n return ref;\n }\n}\n\nfunction isObjectType(type: GraphQLTypeModel): type is GraphQLObjectTypeModel {\n return type.kind === 'object';\n}\n\nfunction isUnionType(type: GraphQLTypeModel): type is GraphQLUnionTypeModel {\n return type.kind === 'union';\n}\n\nfunction isEnumType(type: GraphQLTypeModel): type is GraphQLEnumTypeModel {\n return type.kind === 'enum';\n}\n\nfunction isInterfaceType(type: GraphQLTypeModel): type is GraphQLInterfaceTypeModel {\n return type.kind === 'interface';\n}\n\nfunction isIdentifiableType(\n type: GraphQLTypeModel\n): type is GraphQLObjectTypeModel & { category: 'identifiable' } {\n return type.kind === 'object' && type.category === 'identifiable';\n}\n\nfunction isUnidentifiableType(type: GraphQLTypeModel): type is (\n | GraphQLObjectTypeModel\n | GraphQLInterfaceTypeModel\n | GraphQLUnionTypeModel\n) & {\n category: 'unidentifiable';\n} {\n return type.category === 'unidentifiable';\n}\n\nfunction isCursorConnectionType(type: GraphQLTypeModel): type is GraphQLObjectTypeModel & {\n category: 'cursor-connection';\n} {\n return type.kind === 'object' && type.category === 'cursor-connection';\n}\n","import { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { code } from '../files';\nimport { GraphQLTypeGenerator } from './graphql-type-generator';\nimport type {\n NamedFileService,\n File,\n ImportableValueReference,\n ImportableReference,\n} from '../files';\nimport type { NamedService } from '@conduit-client/utils';\nimport type { GraphQLSchemaModel } from '../model/graphql-schema-model';\nimport type { GraphQLObjectType } from './graphql-type-generator';\nimport { NamedAPIService } from '@conduit-client/model/v1';\n\ntype GraphQLTypeRepositoryReference = {\n propertyName: string;\n typeClassRef: ImportableValueReference;\n typeName: string;\n};\n\ntype Options = {\n type: GraphQLObjectType;\n schemaModel: GraphQLSchemaModel;\n};\n\nexport type IGraphQLTypeRegistryGeneratorService = {\n build(): ImportableValueReference;\n buildGraphQLType(options: Options): GraphQLTypeRepositoryReference;\n};\n\nexport type NamedGraphQLTypeRegistryGeneratorService<\n Name extends string = 'graphqlTypeRegistryGenerator',\n> = NamedService<Name, IGraphQLTypeRegistryGeneratorService>;\n\nconst GRAPHQL_TYPE_REGISTRY_CLASS = 'GraphQLTypeRegistry';\nconst GRAPHQL_TYPE_REGISTRY_FILE = 'normalization/graphql-type-registry.ts';\n\nexport const NAMED_CACHE_CONTROLLER_SERVICE: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nexport const NAMED_PUB_SUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nexport const TYPE_SERVICES = code`${NAMED_CACHE_CONTROLLER_SERVICE} & ${NAMED_PUB_SUB_SERVICE}`;\n\n/**\n * A class for building the GraphQL type registry for a given module\n */\nexport class GraphQLTypeRegistryGenerator implements IGraphQLTypeRegistryGeneratorService {\n protected graphqlTypeGenerator!: GraphQLTypeGenerator;\n\n constructor(\n protected services: NamedFileService & NamedAPIService,\n protected filename: string = GRAPHQL_TYPE_REGISTRY_FILE\n ) {}\n\n setGraphQLTypeGenerator(generator: GraphQLTypeGenerator) {\n this.graphqlTypeGenerator = generator;\n }\n\n _file: File | undefined = undefined;\n\n protected typeDeclarationsSymbol = Symbol.for('graphqlTypeDeclarations');\n protected typeInstantiationsSymbol = Symbol.for('graphqlTypeInstantiations');\n protected typeGettersSymbol = Symbol.for('graphqlTypeGetters');\n cache = new Map<string, GraphQLTypeRepositoryReference>();\n\n private get file() {\n if (this._file) {\n return this._file;\n }\n return this.buildFile();\n }\n\n private buildFile(): File {\n const file = this.services.file.build(this.filename);\n file.template = this.template;\n this._file = file;\n return file;\n }\n\n get template() {\n return [\n code`export class ${GRAPHQL_TYPE_REGISTRY_CLASS}<ExtraInputExtension extends Record<string, any> = Record<string, unknown>, ExtraServices extends object = object > {`,\n this.typeDeclarationsSymbol,\n code`constructor(protected services: ${TYPE_SERVICES} & ExtraServices) {`,\n this.typeInstantiationsSymbol,\n code`}`,\n this.typeGettersSymbol,\n code`}`,\n ];\n }\n\n /**\n * A method for building the base GraphQL type registry code, without any classes populated\n */\n build() {\n this.buildFile();\n return {\n filename: this.filename,\n exportedSymbol: GRAPHQL_TYPE_REGISTRY_CLASS,\n isType: false,\n } as const;\n }\n\n get namespace() {\n return this.services.api.api.namespace;\n }\n\n /**\n * A method for building/adding a specific GraphQL type to the registry\n */\n buildGraphQLType(options: Options): GraphQLTypeRepositoryReference {\n const { type, schemaModel } = options;\n const cacheKey = `${this.namespace}:${type.name}`;\n\n let cachedResult = this.cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n\n const propertyName = toTypeScriptSafeIdentifier(type.name);\n\n // Create a placeholder result and cache it immediately to prevent recursive calls\n // from modifying the template multiple times during field processing\n const result: GraphQLTypeRepositoryReference = {\n propertyName,\n typeClassRef: { filename: '', exportedSymbol: '', isType: false }, // placeholder\n typeName: type.name,\n };\n this.cache.set(cacheKey, result);\n\n // Build the GraphQL type repository class\n const typeClassRef = this.graphqlTypeGenerator.build({\n name: type.name,\n schemaModel,\n namespace: this.namespace,\n });\n\n // Update the cached result with the actual typeClassRef\n result.typeClassRef = typeClassRef;\n\n // Add to registry template (only for new types)\n const privateName = code`_${propertyName}`;\n\n this.file.pushTo(this.typeDeclarationsSymbol, code`${privateName}: ${typeClassRef};`);\n this.file.pushTo(\n this.typeInstantiationsSymbol,\n code`this.${privateName} = new ${typeClassRef}<ExtraInputExtension>(this.services, this);`\n );\n this.file.pushTo(\n this.typeGettersSymbol,\n code`get ${propertyName}() { return this.${privateName}; }`\n );\n\n return result;\n }\n}\n\n/**\n * Creates a GraphQLTypeRegistryGeneratorService.\n */\nexport function graphqlTypeRegistryGeneratorService(\n services: NamedFileService & NamedAPIService,\n graphqlTypeGenerator?: GraphQLTypeGenerator\n): IGraphQLTypeRegistryGeneratorService {\n const registry = new GraphQLTypeRegistryGenerator(services);\n const gtg =\n graphqlTypeGenerator ||\n new GraphQLTypeGenerator(\n { ...services, graphqlTypeRegistryGenerator: registry },\n undefined,\n undefined\n );\n registry.setGraphQLTypeGenerator(gtg);\n return registry;\n}\n","import { type Code, type ImportableTypeReference, type NamedFileService, code } from '../files';\nimport type { NamedAPIService } from '@conduit-client/model/v1';\nimport type { NamedTypeRegistryGeneratorService } from '../normalization/type-registry-generator';\nimport type { NamedJSONSchemaDeclarationService, NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel, InvalidationConfig } from '../model/base-command-model';\n\nconst JSON_SCHEMA: ImportableTypeReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'JSONSchema',\n isType: true,\n};\n\nconst ABORTABLE_COMMAND_OPTIONS: ImportableTypeReference = {\n module: '@conduit-client/command-fetch-network/v1',\n exportedSymbol: 'AbortableCommandOptions',\n isType: true,\n};\n\nexport type ICommandGenerator = {\n build(): void;\n};\n\n/**\n * Abstract base class for generating command files based on a command model and associated services.\n *\n * This class provides a framework for generating files associated with commands, including type definitions,\n * JSON schemas, and class templates. It leverages protected symbols to encapsulate template pieces,\n * facilitating the extension and customization in subclasses.\n *\n * The commandBaseClass abstract property must reference a type only, importable reference that references the base class that the generated command\n * will reference. For example, the HTTP concretion of this class would reference:\n * ```\n * {\n * module: '@conduit-client/command-fetch-network/v1',\n * exportedSymbol: 'FetchNetworkCommand',\n * isType: true,\n * }\n * ```\n * which corresponds to the import: `import {type FetchNetworkCommand} from '@conduit-client/command-fetch-network/v1'`.\n *\n * The class body abstract command provides a hook for concretions to implement whatever contract is required\n * by their base class. By convention, the concrete implementations of `classBody` should delegate to a method for\n * each property & class method that is implemented.\n *\n * None of the other properties are expected to be overridden in subclasses.\n *\n * @abstract\n * @property {ICommandModel} commandModel - The command model that provides metadata and configuration for generating command files.\n * @property {NamedFileService & NamedJSONSchemaDeclarationService & NamedTypeDefinitionService} services - Services required for file generation, type definition, and JSON schema generation.\n */\nexport abstract class CommandGenerator {\n constructor(\n protected commandModel: ICommandModel,\n protected services: NamedAPIService &\n NamedFileService &\n NamedJSONSchemaDeclarationService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService\n ) {}\n\n protected commandTypeGenericsSymbol = Symbol.for('commandType');\n protected commandConfigSchemaSymbol = Symbol.for('commandConfigSchema');\n protected commandConfigTypeSymbol = Symbol.for('commandConfigType');\n protected commandClassBodySymbol = Symbol.for('commandClassBody');\n protected commandOptionsTypeSymbol = Symbol.for('commandOptionsType');\n\n abstract get commandBaseClass(): ImportableTypeReference;\n\n get classBody(): Code[] {\n return [];\n }\n\n get commandTypeConstructorArgs() {\n if (this.commandModel.invalidationConfigs.length > 0) {\n return code`config: Config, typeRegistry: ${this.services.typeRegistryGenerator.build()}`;\n }\n return code`config: Config`;\n }\n\n get commandConstructorArgs() {\n if (this.commandModel.invalidationConfigs.length > 0) {\n return code`private config: Config, private typeRegistry: ${this.services.typeRegistryGenerator.build()}`;\n }\n\n return code`private config: Config`;\n }\n\n get exposeSubscribeAndRefresh() {\n // Currently only checks this flag on network commands\n if (this.commandModel.exposeRefresh && this.commandModel.cacheStrategy.type === 'none') {\n return code`exposeSubscribeAndRefresh = true;`;\n }\n return code``;\n }\n\n /**\n * Generates the Command type definition.\n * Can be overridden by subclasses to customize the Command type signature.\n */\n protected generateCommandType(): Code {\n return code`export type Command=new (${this.commandTypeConstructorArgs},...args: CommandConstructorParams) => CommandType;`;\n }\n\n /**\n * Generates the constructor for the command class.\n * Can be overridden by subclasses to customize constructor behavior.\n */\n protected generateConstructor(): Code {\n return code`constructor(${this.commandConstructorArgs}, ...args: CommandConstructorParams){super(...args)}`;\n }\n\n /**\n * Generates the operationType getter for the concrete command class.\n * Subclasses (e.g., GraphQL mixins) can override to emit nothing.\n */\n protected generateOperationType(): Code {\n return code`get operationType() {\n return '${this.commandModel.operationType}' as const;\n }`;\n }\n\n /**\n * Template for generating the command file content.\n * This getter constructs the full template array incorporating various symbols for later replacement in the build process.\n * @returns {Code[]} An array of code blocks forming the complete command file template.\n */\n get template() {\n return [\n code`export type Config=`,\n this.commandConfigTypeSymbol,\n code`;`,\n code`export const CONFIG_SCHEMA:${JSON_SCHEMA}=`,\n this.commandConfigSchemaSymbol,\n code`;`,\n this.commandOptionsTypeSymbol,\n code`export type CommandType=${this.commandBaseClass}<`,\n this.commandTypeGenericsSymbol,\n code`>;`,\n code`export type CommandConstructorType=typeof ${this.commandBaseClass}<`,\n this.commandTypeGenericsSymbol,\n code`>;`,\n code`export type CommandConstructorParams=ConstructorParameters<CommandConstructorType>;`,\n this.generateCommandType(),\n code`export function buildCommandClass(baseClass: CommandConstructorType): Command{`,\n code`return class extends baseClass{`,\n this.generateConstructor(),\n ...this.classBody,\n this.exposeSubscribeAndRefresh,\n this.generateOperationType(),\n this.generateAfterRequestHooks(),\n code`}};`,\n ];\n }\n\n /**\n * Builds the command file by assembling various components into a file structure and saving it.\n * This method orchestrates the generation of necessary types, configurations, and class bodies.\n */\n build() {\n const file = this.services.file.build(this.commandModel.filePath);\n file.template = this.template;\n\n file.pushTo(this.commandConfigTypeSymbol, this.buildCommandConfigType());\n file.pushTo(this.commandConfigSchemaSymbol, this.buildCommandConfigSchema());\n\n file.pushTo(this.commandOptionsTypeSymbol, this.buildCommandOptionsType());\n\n file.pushTo(this.commandTypeGenericsSymbol, this.buildCommandTypeGenerics());\n file.pushTo(this.commandClassBodySymbol, ...this.classBody);\n }\n\n protected buildCommandConfigType() {\n return this.services.typeDefinition.build(this.commandModel.configType);\n }\n\n protected buildCommandConfigSchema() {\n return this.services.jsonSchema.build(this.commandModel.configType);\n }\n\n protected buildCommandOptionsType() {\n const commandName = this.commandModel.className;\n return code`export type ${commandName}Options = ${ABORTABLE_COMMAND_OPTIONS};`;\n }\n\n protected buildCommandTypeGenerics() {\n const extraServicesCode = this.buildExtraServices();\n return code`${this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n )}${extraServicesCode ? code`, ${extraServicesCode}` : ''}`;\n }\n\n protected buildExtraServices(): Code | undefined {\n if (this.commandModel.serviceDependencies.extra.length === 0) {\n return undefined;\n }\n\n return this.commandModel.serviceDependencies.extra.reduce(\n (previous, current, idx) => {\n return code`${previous}${idx > 0 ? '&' : ''}${current.namedService}`;\n },\n code``\n );\n }\n\n protected generateAfterRequestHooks() {\n if (this.commandModel.invalidationConfigs.length > 0) {\n return code`async afterRequestHooks(options: { statusCode: number }){\n ${this.generateInvalidationSwitch()}\n }`;\n }\n return code``;\n }\n\n private getInvalidationStatements(responses: InvalidationConfig[]): (Code[] | undefined)[] {\n return responses.map((resp) => {\n return resp.invalidation?.map((invalidate) => {\n const split = invalidate.ref.split('/');\n const typeName = split[split.length - 1];\n return code`this.typeRegistry.${typeName}.invalidate([${this.buildMappedKeyConfig(invalidate.key)}])`;\n });\n });\n }\n\n private generateInvalidationSwitch(): Code {\n return code`switch(options.statusCode) {\n ${this.generateInvalidationCasesByStatusCode()}\n }`;\n }\n\n private generateInvalidationCasesByStatusCode(): Code[] {\n return this.commandModel.invalidationConfigs.map((resp) => {\n return code`case ${resp.statusCode}:\n ${this.getInvalidationStatements([resp])}\n break;\n `;\n });\n }\n\n protected buildMappedKeyConfig(operationKey: Record<string, string>) {\n return code`{${Object.entries(operationKey).map(([keyName, keyPath], index, array) => {\n const [paramType, ...pathElements] = keyPath.split('.');\n\n if (pathElements.length === 0) {\n throw Error('no path specified');\n }\n\n const delimiter = index < array.length ? ', ' : '';\n\n const path = pathElements.join('.');\n if (paramType === 'body' && this.commandModel.configSchemaType === 'default') {\n return `${keyName}: this.config['${this.commandModel.body?.parameterName}']${this.pathToAccessor(path)}${delimiter}`;\n } else {\n return `${keyName}: this.config${this.pathToAccessor(path)}${delimiter}`;\n }\n })}}`;\n }\n\n private pathToAccessor(path: string) {\n return path\n .split('.')\n .map((element) => `['${element}']`)\n .join('');\n }\n}\n","import { toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { type Code, code } from '../files';\nimport { ICommandModel } from '../model/base-command-model';\n\n/**\n * Generates a destructuring assignment code block for a given property name, ensuring that the variable names are valid TypeScript identifiers.\n * This function is particularly useful when dealing with property names that may not directly translate into valid TypeScript variable names,\n * such as names containing special characters.\n *\n * @param propertyName - The original property name to be destructured from an object.\n * @returns An object containing:\n * - `code`: a `Code` type representing the TypeScript code for destructuring the property.\n * - `variableName`: a string that represents the valid TypeScript identifier to which the property value is assigned.\n */\nexport function buildPropertyDestructureDeclaration(propertyName: string): {\n code: Code;\n variableName: string;\n} {\n const typescriptSafeName = toTypeScriptSafeIdentifier(propertyName);\n if (propertyName !== typescriptSafeName) {\n return {\n code: code`'${propertyName}':${typescriptSafeName}`,\n variableName: typescriptSafeName,\n };\n } else {\n return { code: code`${propertyName}`, variableName: propertyName };\n }\n}\n\nexport function buildServiceProjection(model: ICommandModel) {\n let name = 'services';\n let overrides = '';\n if (\n model.serviceDependencies?.overrides &&\n Object.keys(model.serviceDependencies.overrides).length !== 0\n ) {\n let commandName = toTypeScriptSafeIdentifier(model.commandName);\n name = `servicesProjection_for_${commandName}`;\n overrides = `const ${name} = {\n ...services,`;\n for (const [alias, entry] of Object.entries(model.serviceDependencies.overrides)) {\n overrides += `${alias}: services.${entry.type}_${commandName},`;\n }\n overrides += `};`;\n }\n return [name, overrides];\n}\n","import { code, Code } from '../files';\nimport { CommandGenerator } from './base-command-generator';\nimport { buildPropertyDestructureDeclaration } from './utils';\nimport type { ImportableReference, ImportableTypeReference } from '../files';\nimport {\n type Type,\n type ArrayType,\n type Parameter,\n isCanonicalStringType,\n isCanonicalNumberType,\n canonicalizeType,\n} from '@conduit-client/model/v1';\n\nconst HEADER_CONTENT_TYPE = 'Content-Type';\n\nconst FETCH_SERVICE: ImportableReference = {\n module: '@conduit-client/service-fetch-network/v1',\n exportedSymbol: 'FetchService',\n isType: true,\n};\n\nconst FETCH_COMMAND_BASE_CLASS = {\n module: '@conduit-client/command-fetch-network/v1',\n exportedSymbol: 'FetchNetworkCommand',\n isType: true,\n} as const satisfies ImportableReference;\n\nconst FETCH_RESPONSE: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'FetchResponse',\n isType: true,\n};\n\nconst COERCE_RESPONSE_TO_FETCH_RESPONSE: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'coerceResponseToFetchResponse',\n isType: false,\n};\n\nconst ENCODE_QUERY_PARAM: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'encodeQueryParam',\n isType: false,\n};\n\nexport const MEDIATYPE_APP_JSON = 'application/json';\n\n/**\n * Extends CommandGenerator to provide functionality for generating command files specifically designed for HTTP operations.\n *\n * This class specializes in creating files that include detailed HTTP-specific configurations such as fetch parameters,\n * header construction, query parameters, and error handling, tailored to interact with web APIs using the fetch API.\n *\n * @extends CommandGenerator\n */\nexport class HttpCommandGenerator extends CommandGenerator {\n commandBaseClass: ImportableTypeReference = FETCH_COMMAND_BASE_CLASS;\n\n /**\n * Constructs and returns an array of code blocks that form the body of the HTTP command class.\n * Includes methods for generating fetch parameters and error coercion logic.\n * @returns {Code[]} An array of code snippets that define the command class body for HTTP operations.\n */\n get classBody(): Code[] {\n return [code`${this.generateFetchParams()}`, this.generateCoerceError()];\n }\n\n /**\n * Generates a code block for fetch parameters based on the command model's configuration.\n * Constructs a detailed setup for fetch operations including method, headers, body, and cache settings.\n * @returns {Code} A comprehensive code snippet that defines all necessary fetch parameters.\n */\n generateFetchParams(): Code {\n const headers = this.generateHeaders();\n const result = new Code().push(\n code`get fetchParams(): Parameters<${FETCH_SERVICE}>{`,\n code`${this.generateAllParams()}`,\n code`${this.generateUrl()}${this.generateQueryParameters()}${headers}`\n );\n\n const hasRequestBody = this.commandModel.body!!;\n const hasHeaders = headers !== undefined;\n result.push(\n code`const params:Parameters<${FETCH_SERVICE}>[1]={`,\n code`method:'${this.commandModel.method}',`,\n code`cache:'no-cache',`\n );\n if (hasHeaders) {\n result.push(`headers,`);\n }\n if (hasRequestBody) {\n result.push(`body:JSON.stringify(body)`);\n }\n result.push(`};`);\n\n result.push(code`return [url, params]}`);\n return result;\n }\n\n /**\n * Constructs the base URL for the fetch command.\n * @returns {Code} A code snippet that defines the URL to be used in fetch operations.\n */\n generateUrl(): Code {\n return code`let url:Parameters<${FETCH_SERVICE}>[0]=\\`${this.processUrl()}\\`;`;\n }\n\n /**\n * Generates headers necessary for the HTTP fetch based on the command model's requirements.\n * Handles conditional inclusion of headers based on their defined necessity and request body presence.\n * @returns {object} An object containing the header names and the corresponding code to create them.\n */\n generateHeaders() {\n let result = undefined;\n const hasRequestBody = this.commandModel.body!!;\n if (this.commandModel.headers.length > 0 || hasRequestBody) {\n result = code`const headers:Record<string,any>={`;\n if (hasRequestBody) {\n result.push(`'${HEADER_CONTENT_TYPE}':'${MEDIATYPE_APP_JSON}',`);\n }\n const headers = this.commandModel.headers.filter(\n (hdr) => hdr.name.toLowerCase() !== HEADER_CONTENT_TYPE.toLowerCase()\n );\n\n const headerVariables: Record<string, string> = {};\n const headerDefaults: Record<string, unknown> = {};\n headers.forEach((hdr) => {\n const destructure = buildPropertyDestructureDeclaration(hdr.name);\n result.push(code`${destructure.code},`);\n headerVariables[hdr.name] = destructure.variableName;\n if (hdr.defaultValue) {\n headerDefaults[hdr.name] = hdr.defaultValue;\n }\n });\n result.push(`};`);\n Object.entries(headerVariables).forEach(([hdrName, hdrVariableName]) => {\n result.push(\n `if(${hdrVariableName}!==undefined){headers['${hdrName}']=${hdrVariableName};}`\n );\n if (headerDefaults[hdrName]) {\n result.push(`else{headers['${hdrName}']='${headerDefaults[hdrName]}';}`);\n }\n });\n }\n return result;\n }\n\n /**\n * Constructs a setup for handling query parameters within the URL for the fetch operation.\n * @returns {object} An object containing the parameter names and the corresponding code to handle them.\n */\n generateQueryParameters() {\n // resolve query params\n let result = undefined;\n if (this.commandModel.queryParameters.length > 0) {\n result = code`let queryParams:string[]=[];`;\n this.commandModel.queryParameters.forEach((param) => {\n const variableName = buildPropertyDestructureDeclaration(param.name).variableName;\n result.push(\n param.required ? '' : `if(${variableName}!==undefined){`,\n code`queryParams.push(...${ENCODE_QUERY_PARAM}('${param.name}', ${variableName}, ${param.explode}));`,\n param.required ? '' : `}`\n );\n });\n result.push(`if(queryParams.length>0){url+='?'+queryParams.join('&');}`);\n }\n return result;\n }\n\n /**\n * Generates a consolidated list of all parameters involved in the fetch operation.\n * @returns {Code} A code block that consolidates all necessary parameters from headers, query, and URI.\n */\n generateAllParams(): Code {\n const result = new Code();\n const paramDestructuring = this.commandModel.getAllParams().map((param) => {\n const destructure = buildPropertyDestructureDeclaration(param.name);\n return destructure.code;\n });\n if (this.commandModel.body || paramDestructuring.length) {\n result.push(\n code`const {\n ${paramDestructuring.join(',')}\n ${paramDestructuring.length && this.commandModel.body ? ',' : ''}\n ${this.generateInputPayloadParameter()}\n } = this.config;`\n );\n }\n return result;\n }\n\n /**\n * Determines the code snippet for destructuring the input payload based on the configuration schema type.\n * @returns {Code | undefined} A code snippet for the input payload parameter, if applicable.\n */\n generateInputPayloadParameter(): Code | undefined {\n if (this.commandModel.body) {\n if (this.commandModel.configSchemaType === 'flattened') {\n // Use rest operator when flattening,\n // e.g. const { ...body } = this.config\n return code`...body`;\n } else {\n // Extract using input payload name otherwise,\n // e.g. const { inputPayload: body } = this.config\n return code`${this.commandModel.body.parameterName}: body`;\n }\n }\n }\n\n /**\n * Encodes a parameter based on its type.\n * @param {string} name The name of the parameter to encode.\n * @param {Type} type The type descriptor of the parameter.\n * @returns {string | undefined} The encoded parameter value as a string, or undefined if the type is unsupported.\n */\n encodeParam(name: string, type: Type, required: boolean): string | undefined {\n const isScalarArrayType = (t: Type): t is ArrayType => {\n const canonicalizedType = canonicalizeType(t);\n if (canonicalizedType.type !== 'array') {\n return false;\n }\n\n const canonicalizedItems = canonicalizeType(canonicalizedType.items);\n return (\n isCanonicalStringType(canonicalizedItems) ||\n isCanonicalNumberType(canonicalizedItems)\n );\n };\n\n const canonicalType = canonicalizeType(type);\n return isCanonicalNumberType(canonicalType)\n ? `${name}`\n : isCanonicalStringType(canonicalType)\n ? required\n ? `encodeURIComponent(${name})`\n : `encodeURIComponent(${name} ? ${name} : '')`\n : isScalarArrayType(canonicalType)\n ? isCanonicalStringType(canonicalType.items)\n ? `${name}.map(item=>encodeURIComponent(item)).join(',')`\n : `${name}.join(',')`\n : undefined;\n }\n\n /**\n * Processes the URL with replacements for URI parameters based on their values specified in the command model.\n * @returns {string} The fully constructed URL with all necessary URI parameter substitutions.\n */\n processUrl(): string {\n const uriParams: Record<string, Parameter> = this.commandModel.uriParameters.reduce(\n (result, param) => {\n result[param.name] = param;\n return result;\n },\n {} as Record<string, Parameter>\n );\n\n // resolve URL against server\n let url = [\n this.commandModel.serverUrlPath.replace(/\\/$/, ''),\n this.commandModel.endpointUrlPath.replace(/^\\//, ''),\n ].join('/');\n\n // resolve uri/path params\n url = url.replace(/\\{(.+?)\\}/g, (_, uriParameter) => {\n const uriParam = uriParams[uriParameter];\n if (!uriParam) {\n throw new Error(\n `unknown uri parameter ${uriParameter} in ${url} for ${this.commandModel.method} ${this.commandModel.endpointUrlPath} operation`\n );\n }\n const paramName = buildPropertyDestructureDeclaration(uriParameter).variableName;\n const value: string | undefined = this.encodeParam(\n paramName,\n uriParam.type,\n uriParam.required\n );\n return `\\${${value}}`;\n });\n\n return url;\n }\n\n generateCoerceError() {\n if (this.commandModel.errorStrategy.type === 'fetchResponse') {\n return code`async coerceError(errorResponse: Response):Promise<${FETCH_RESPONSE}<unknown>>{\n return ${COERCE_RESPONSE_TO_FETCH_RESPONSE}(errorResponse)\n }`;\n }\n return code``;\n }\n}\n","import { Code, type ImportableValueReference, type ImportableTypeReference, code } from '../files';\nimport { HttpCommandGenerator } from './http-command-generator';\nimport { buildPropertyDestructureDeclaration } from './utils';\n\nconst FETCH_RESPONSE: ImportableTypeReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'FetchResponse',\n isType: true,\n};\n\nconst CONVERT_AURA_ERRORS_TO_FETCH_RESPONSE: ImportableValueReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'getFetchResponseFromAuraError',\n isType: false,\n};\n\nconst AURA_COMMAND_BASE_CLASS: ImportableTypeReference = {\n module: '@conduit-client/command-aura-network/v1',\n exportedSymbol: 'AuraNetworkCommand',\n isType: true,\n};\n/**\n * An extension of the CommandGenerator for generating command files specifically tailored for Salesforce Aura components.\n *\n * This class specializes in handling Aura-specific functionalities such as defining endpoints, generating Aura-compatible\n * parameters, and handling errors in a manner compatible with Aura's handling mechanisms. It leverages the structure and\n * behavior of the parent CommandGenerator class to create command files optimized for Aura component interactions.\n *\n * @extends CommandGenerator\n */\nexport class AuraCommandGenerator extends HttpCommandGenerator {\n commandBaseClass = AURA_COMMAND_BASE_CLASS;\n\n /**\n * Constructs and returns an array of code blocks that form the body of the Aura-specific command class.\n * @returns {Code[]} An array of code snippets that define the command class body, tailored for Aura components.\n */\n get classBody(): Code[] {\n return [\n ...super.classBody,\n this.generateNetworkPreference(),\n this.generateEndpoint(),\n this.generateAuraParams(),\n ];\n }\n\n generateNetworkPreference(): Code {\n return code`protected networkPreference='${this.commandModel.networkPreference}' as const;`;\n }\n\n /**\n * Generates a code snippet that sets the command endpoint based on the controller and method defined in the command model.\n * @returns {Code} A code snippet that statically sets the endpoint for the command.\n */\n generateEndpoint(): Code {\n return code`endpoint='${this.commandModel.aura!.controller}.${this.commandModel.aura!.method}';`;\n }\n\n /**\n * Generates a getter method that constructs and returns a record of parameters required by the Aura command.\n * @returns {Code} A code snippet defining a getter for the Aura parameters, structured as a record.\n */\n generateAuraParams(): Code {\n return code`get auraParams():Record<string,unknown>{${this.generateAuraParamsCode()}}`;\n }\n\n /**\n * Helper method that aggregates all parameters (query and URI) and formats them into a structured record,\n * possibly including the command body if specified.\n * @returns {Code} A code block that constructs the parameters object for the Aura command.\n */\n generateAuraParamsCode(): Code {\n const result = new Code();\n const paramDestructuring = this.commandModel\n .getAllParams()\n .map(({ name }) => {\n return buildPropertyDestructureDeclaration(name).code;\n })\n .join(',');\n\n const inputPayloadDelimiter =\n paramDestructuring.length && this.commandModel.body ? ',' : '';\n if (paramDestructuring.length || this.commandModel.body) {\n result.push(\n code`const {\n ${paramDestructuring}\n ${inputPayloadDelimiter}\n ${this.generateInputPayloadParameter()}\n } = this.config;`\n );\n }\n\n result.push(code`return { ${paramDestructuring}`);\n if (this.commandModel.body) {\n if (this.commandModel.aura === undefined) {\n throw new Error('Aura command model information missing');\n }\n const inputPayload = this.commandModel.aura.bodyParam;\n\n if (inputPayload === undefined) {\n throw new Error('Aura body param missing');\n }\n result.push(code`${inputPayloadDelimiter}${inputPayload}:body`);\n }\n result.push(`};`);\n return result;\n }\n\n /**\n * Determines how to destructure the input payload from the command configuration, adjusting based on schema type.\n * @returns {Code | undefined} A code snippet for destructuring the input payload, if a body type is specified.\n */\n generateInputPayloadParameter(): Code | undefined {\n if (this.commandModel.body) {\n if (this.commandModel.configSchemaType === 'flattened') {\n return code`...body`;\n } else {\n return code`${this.commandModel.body.parameterName}: body`;\n }\n }\n }\n\n /**\n * Generates a method for transforming Aura-specific errors into a standard format, based on the defined error strategy.\n * @returns {Code} A code snippet for a method that coverts Aura errors into a fetch-compatible response.\n */\n generateCoerceError(): Code {\n if (this.commandModel.errorStrategy.type === 'fetchResponse') {\n return code`protected override coerceAuraErrors(auraErrors: any[]):${FETCH_RESPONSE}<unknown>{return ${CONVERT_AURA_ERRORS_TO_FETCH_RESPONSE}(auraErrors[0])}`;\n }\n\n return code``;\n }\n}\n","import { code } from '../files';\nimport { AuraCommandGenerator } from './aura-command-generator';\nimport type { Code, ImportableReference } from '../files';\n\nconst AURA_CACHE_CONTROL_COMMAND_BASE_CLASS = {\n module: '@conduit-client/command-aura-resource-cache-control/v1',\n exportedSymbol: 'AuraResourceCacheControlCommand',\n isType: true,\n} as const satisfies ImportableReference;\n\n/**\n * Extends AuraCommandGenerator to add cache control strategies specific to resource caching in Aura components.\n *\n * This class further specializes the command generation process by including methods that handle cache control metadata and configuration,\n * ensuring that resources are cached according to the specified strategy in the command model.\n *\n * @extends AuraCommandGenerator\n */\nexport class AuraResourceCacheControlCommandGenerator extends AuraCommandGenerator {\n commandBaseClass = AURA_CACHE_CONTROL_COMMAND_BASE_CLASS;\n\n /**\n * Generates a method to build cache control metadata based on the response type and cache strategy defined in the command model.\n * Throws an error if the cache strategy is set to 'none'.\n *\n * @returns {Code} A code snippet that constructs cache control metadata for the command.\n * @throws {Error} Throws an error if the cache strategy is 'none'.\n */\n generateBuildCacheControlMetadata(): Code {\n if (this.commandModel.cacheStrategy.type !== 'resource') {\n throw new Error('incorrect cache strategy');\n }\n\n return code`buildCacheControlMetadata(_networkResult:${this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n )}){return{type:'max-age',maxAge:${\n this.commandModel.cacheStrategy.config['max-age']\n },generatedTime:Date.now()/1000}as const;}`;\n }\n\n /**\n * Generates a getter method that provides configuration for cache control strategies based on the command model settings.\n * Throws an error if the cache strategy is set to 'none'.\n *\n * @returns {Code} A code snippet that provides cache control strategy configuration.\n * @throws {Error} Throws an error if the cache strategy is 'none'.\n */\n generateCacheControlStrategyConfig(): Code {\n if (this.commandModel.cacheStrategy.type !== 'resource') {\n throw new Error('incorrect cache strategy');\n }\n return code`get cacheControlStrategyConfig(){return{type:'max-age',requestMaxAge:${this.commandModel.cacheStrategy.config['max-age']},now:Date.now()/1000}as const;}`;\n }\n\n /**\n * Overrides the base classBody method to include methods for cache control alongside the standard Aura command class body.\n *\n * @returns {Code[]} An array of code blocks that form the complete class body for the cache-controlled Aura command.\n */\n get classBody(): Code[] {\n return [\n code`\n ${super.classBody}\n ${this.generateCacheControlStrategyConfig()}\n ${this.generateBuildCacheControlMetadata()}\n `,\n ];\n }\n}\n","import { code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\n\nconst BUILD_ASYNC_IMPERATIVE_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncImperativeInvoker',\n isType: false,\n};\n\nconst DEFAULT_IMPERATIVE_RETURN_SHAPE: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'DefaultImperativeResult',\n isType: true,\n};\n\nconst QUERY_IMPERATIVE_RETURN_SHAPE: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'QueryImperativeResult',\n isType: true,\n};\n\nconst BUILD_ASYNC_IMPERATIVE_SUBSCRIBABLE_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncImperativeSubscribableInvoker',\n isType: false,\n};\n\nconst BUILD_ASYNC_QUERY_IMPERATIVE_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncQueryImperativeInvoker',\n isType: false,\n};\n\nconst SUBSCRIBABLE_IMPERATIVE_RESULT: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'SubscribableImperativeResult',\n isType: true,\n};\n\nconst SUBSCRIBABLE_REFRESHABLE_IMPERATIVE_RESULT: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'SubscribableRefreshableImperativeResult',\n isType: true,\n};\n\nconst JSON_SCHEMA_TYPE: ImportableReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'JSONSchema',\n isType: true,\n};\n\nconst APPLY_DECORATORS: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'applyDecorators',\n isType: false,\n};\n\nexport class ImperativeAdapterBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n protected commandOptionsTypeImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n this.commandOptionsTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: `${this.commandModel.className}Options`,\n isType: true,\n };\n }\n\n buildDeclaration() {\n return code`export let ${this.binding.identifier}:${this.bindingTypeCode};`;\n }\n\n get bindingTypeCode() {\n return code`(config:${this.commandConfigTypeImport}, options?: ${this.commandOptionsTypeImport})=>${this.returnShape}<${this.responseTypeCode}>`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n get returnShape() {\n if (this.isSubscribable()) {\n if (this.commandModel.exposeRefresh) {\n return code`${SUBSCRIBABLE_REFRESHABLE_IMPERATIVE_RESULT}`;\n }\n return code`${SUBSCRIBABLE_IMPERATIVE_RESULT}`;\n }\n\n if (this.commandModel.operationType === 'query') {\n return code`${QUERY_IMPERATIVE_RETURN_SHAPE}`;\n }\n return code`${DEFAULT_IMPERATIVE_RETURN_SHAPE}`;\n }\n\n get responseTypeCode() {\n return this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n );\n }\n\n get invoker() {\n if (this.isSubscribable()) {\n return code`${BUILD_ASYNC_IMPERATIVE_SUBSCRIBABLE_INVOKER}`;\n }\n\n if (this.commandModel.operationType === 'query') {\n return code`${BUILD_ASYNC_QUERY_IMPERATIVE_INVOKER}`;\n }\n return code`${BUILD_ASYNC_IMPERATIVE_INVOKER}`;\n }\n\n get exposeRefresh() {\n if (this.isSubscribable()) {\n return code`${this.commandModel.exposeRefresh}`;\n }\n return code``;\n }\n\n isSubscribable() {\n return (\n this.binding.type === 'imperative' &&\n this.commandModel.operationType === 'query' &&\n this.commandModel.cacheStrategy.type !== 'none'\n );\n }\n\n buildInvocation(servicesName = 'services') {\n const requiresTypeRegistry =\n this.commandModel.cacheStrategy.type === 'normalized' ||\n this.commandModel.invalidationConfigs.length > 0;\n\n const typeRegistry = requiresTypeRegistry ? 'typeRegistry,' : '';\n\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=${this.invoker}<Parameters<typeof ${this.binding.identifier}>,${this.responseTypeCode}>(\n ({params,assertIsValid})=>{\n const config=params[0];\n const options=params[1];\n const _:<T>(data:unknown,_:${JSON_SCHEMA_TYPE})=>asserts data is T=assertIsValid;\n _<${this.commandConfigTypeImport}>(config,${this.commandConfigSchemaImport});\n \n const baseCommand = new ${this.localCommandConstructorName}(config,${typeRegistry}${servicesName});\n return ${APPLY_DECORATORS}(baseCommand, [${servicesName}.fetchNetworkCommandBaseClass.availableDecorators.abortable], options);\n },${this.exposeRefresh}) as ${this.bindingTypeCode};`;\n }\n}\n","import { code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\n\nconst BUILD_ASYNC_IMPERATIVE_LEGACY_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncImperativeLegacyInvoker',\n isType: false,\n};\n\nconst LEGACY_IMPERATIVE_RETURN_SHAPE: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'LegacyImperativeShape',\n isType: true,\n};\n\nconst JSON_SCHEMA_TYPE: ImportableReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'JSONSchema',\n isType: true,\n};\n\nexport class ImperativeAdapterLegacyBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n }\n\n get responseTypeCode() {\n return this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n );\n }\n\n buildDeclaration() {\n return code`export let ${this.binding.identifier}:${LEGACY_IMPERATIVE_RETURN_SHAPE}<${this.commandConfigTypeImport},${this.responseTypeCode}>;`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n buildInvocation(servicesName = 'services') {\n const requiresTypeRegistry =\n this.commandModel.cacheStrategy.type === 'normalized' ||\n this.commandModel.invalidationConfigs.length > 0;\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=${BUILD_ASYNC_IMPERATIVE_LEGACY_INVOKER}<${this.commandConfigTypeImport},${this.responseTypeCode}>(\n ({config,assertIsValid})=>{\n const _:<T>(data:unknown,_:${JSON_SCHEMA_TYPE})=>asserts data is T=assertIsValid;\n _<${this.commandConfigTypeImport}>(config,${this.commandConfigSchemaImport});\n return new ${this.localCommandConstructorName}(config,${requiresTypeRegistry ? 'typeRegistry,' : ''}${servicesName});\n });`;\n }\n}\n","export const QUERY_TYPE_VARIABLE_NAME = 'queryType' as const;\nexport const MUTATION_TYPE_VARIABLE_NAME = 'mutationType' as const;\n","import { code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\nimport { QUERY_TYPE_VARIABLE_NAME } from './graphql-root-variable-names';\n\nconst BUILD_ASYNC_GRAPHQL_IMPERATIVE_LEGACY_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncGraphQLImperativeLegacyInvoker',\n isType: false,\n};\n\nconst LEGACY_GRAPHQL_IMPERATIVE_RETURN_SHAPE: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'LegacyGraphQLImperativeShape',\n isType: true,\n};\n\nconst JSON_SCHEMA_TYPE: ImportableReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'JSONSchema',\n isType: true,\n};\n\nexport class GraphQLImperativeAdapterLegacyBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n }\n\n get responseTypeCode() {\n return this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n );\n }\n\n buildDeclaration() {\n return code`export let ${this.binding.identifier}:${LEGACY_GRAPHQL_IMPERATIVE_RETURN_SHAPE}<${this.commandConfigTypeImport}>;`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n buildInvocation(servicesName = 'services') {\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=${BUILD_ASYNC_GRAPHQL_IMPERATIVE_LEGACY_INVOKER}<${this.commandConfigTypeImport}>(\n ({config,assertIsValid})=>{\n const _:<T>(data:unknown,_:${JSON_SCHEMA_TYPE})=>asserts data is T=assertIsValid;\n _<${this.commandConfigTypeImport}>(config,${this.commandConfigSchemaImport});\n return new ${this.localCommandConstructorName}(config,${QUERY_TYPE_VARIABLE_NAME},${servicesName});\n });`;\n }\n}\n","import { code, type Code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\n\nconst WIRE_ADAPTER_CONSTRUCTOR: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'WireAdapterConstructor',\n isType: true,\n};\n\nconst COMMAND_WIRE_ADAPTER_CONSTRUCTOR: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'CommandWireAdapterConstructor',\n isType: false,\n};\n\nexport class WireAdapterBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n }\n\n get responseTypeCode() {\n return this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n );\n }\n\n buildDeclaration(): Code {\n return code`export let ${this.binding.identifier}:${WIRE_ADAPTER_CONSTRUCTOR}<${this.commandConfigTypeImport}, ${this.responseTypeCode}, {}>;`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n buildInvocation(servicesName = 'services'): Code {\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=class extends ${COMMAND_WIRE_ADAPTER_CONSTRUCTOR}<${this.responseTypeCode}, ${this.commandConfigTypeImport}>{\n configSchema=${this.commandConfigSchemaImport};\n exposeRefresh=${this.commandModel.exposeRefresh};\n getCommand(){return new ${this.localCommandConstructorName}(this.config!,${this.getTypeRegistryArgument()}${servicesName});}};`;\n }\n\n getTypeRegistryArgument(): Code {\n if (\n this.commandModel.cacheStrategy.type === 'normalized' ||\n this.commandModel.invalidationConfigs.length > 0\n ) {\n return code`typeRegistry,`;\n }\n\n return code``;\n }\n}\n","import { code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\nimport { QUERY_TYPE_VARIABLE_NAME } from './graphql-root-variable-names';\n\nconst BUILD_ASYNC_GRAPHQL_IMPERATIVE_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncGraphQLImperativeInvoker',\n isType: false,\n};\n\nconst SUBSCRIBABLE_REFRESHABLE_GRAPHQL_IMPERATIVE_RESULT: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'SubscribableRefreshableGraphQLImperativeResult',\n isType: true,\n};\n\nconst JSON_SCHEMA_TYPE: ImportableReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'JSONSchema',\n isType: true,\n};\n\nconst APPLY_DECORATORS: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'applyDecorators',\n isType: false,\n};\n\nexport class GraphQLImperativeAdapterBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n protected commandOptionsTypeImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n this.commandOptionsTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: `${this.commandModel.commandName}CommandOptions`,\n isType: true,\n };\n }\n\n buildDeclaration() {\n return code`export let ${this.binding.identifier}:${this.bindingTypeCode};`;\n }\n\n get bindingTypeCode() {\n return code`(config:${this.commandConfigTypeImport}, options?: ${this.commandOptionsTypeImport})=>${this.returnShape}`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n get returnShape() {\n return code`${SUBSCRIBABLE_REFRESHABLE_GRAPHQL_IMPERATIVE_RESULT}`;\n }\n\n get invoker() {\n return code`${BUILD_ASYNC_GRAPHQL_IMPERATIVE_INVOKER}`;\n }\n\n get exposeRefresh() {\n if (this.isSubscribable()) {\n return code`${this.commandModel.exposeRefresh}`;\n }\n return code``;\n }\n\n isSubscribable() {\n return true;\n }\n\n buildInvocation(servicesName = 'services') {\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=${this.invoker}<Parameters<typeof ${this.binding.identifier}>>(\n ({params,assertIsValid})=>{\n const config=params[0];\n const options=params[1];\n const _:<T>(data:unknown,_:${JSON_SCHEMA_TYPE})=>asserts data is T=assertIsValid;\n _<${this.commandConfigTypeImport}>(config,${this.commandConfigSchemaImport});\n \n const baseCommand = new ${this.localCommandConstructorName}(config,${QUERY_TYPE_VARIABLE_NAME},${servicesName});\n return ${APPLY_DECORATORS}(baseCommand, [${servicesName}.fetchNetworkCommandBaseClass.availableDecorators.abortable], options);\n },${this.exposeRefresh}) as ${this.bindingTypeCode};`;\n }\n}\n","import { code, type Code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\nimport { QUERY_TYPE_VARIABLE_NAME } from './graphql-root-variable-names';\n\nconst WIRE_ADAPTER_CONSTRUCTOR: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'WireAdapterConstructor',\n isType: true,\n};\n\nconst GRAPHQL_COMMAND_WIRE_ADAPTER_CONSTRUCTOR: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'GraphQLCommandWireAdapterConstructor',\n isType: false,\n};\n\nexport class GraphQLWireAdapterBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n }\n\n get responseTypeCode() {\n return this.services.typeDefinition.build(\n this.commandModel.responseType?.default['application/json']\n );\n }\n\n buildDeclaration(): Code {\n return code`export let ${this.binding.identifier}:${WIRE_ADAPTER_CONSTRUCTOR}<${this.commandConfigTypeImport}, ${this.responseTypeCode}, {}>;`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n buildInvocation(servicesName = 'services'): Code {\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=class extends ${GRAPHQL_COMMAND_WIRE_ADAPTER_CONSTRUCTOR}<${this.commandConfigTypeImport}>{\n configSchema=${this.commandConfigSchemaImport};\n exposeRefresh=${this.commandModel.exposeRefresh};\n getCommand(){return new ${this.localCommandConstructorName}(this.config as any,${QUERY_TYPE_VARIABLE_NAME},${servicesName});}};`;\n }\n}\n","import { code, type ImportableReference } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport { Binding } from '@conduit-client/model/v1';\nimport { MUTATION_TYPE_VARIABLE_NAME } from './graphql-root-variable-names';\n\nconst BUILD_ASYNC_GRAPHQL_MUTATION_INVOKER: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'buildAsyncGraphQLMutationInvoker',\n isType: false,\n};\n\nconst GRAPHQL_MUTATION_RESULT: ImportableReference = {\n module: '@conduit-client/lwc-bindings',\n exportedSymbol: 'GraphQLMutationResult',\n isType: true,\n};\n\nconst JSON_SCHEMA_TYPE: ImportableReference = {\n module: '@conduit-client/jsonschema-validate',\n exportedSymbol: 'JSONSchema',\n isType: true,\n};\n\nconst APPLY_DECORATORS: ImportableReference = {\n module: '@conduit-client/utils',\n exportedSymbol: 'applyDecorators',\n isType: false,\n};\n\nexport class GraphQLMutationAdapterBindingGenerator {\n protected commandConfigTypeImport: ImportableReference;\n protected commandConfigSchemaImport: ImportableReference;\n protected classBuilderImport: ImportableReference;\n protected commandOptionsTypeImport: ImportableReference;\n\n constructor(\n protected services: NamedTypeDefinitionService,\n protected commandModel: ICommandModel,\n protected binding: Binding\n ) {\n this.commandConfigTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'Config',\n isType: true,\n };\n this.commandConfigSchemaImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'CONFIG_SCHEMA',\n isType: false,\n };\n this.classBuilderImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: 'buildCommandClass',\n isType: false,\n };\n this.commandOptionsTypeImport = {\n filename: this.commandModel.filePath,\n exportedSymbol: `${this.commandModel.commandName}CommandOptions`,\n isType: true,\n };\n }\n\n buildDeclaration() {\n return code`export let ${this.binding.identifier}:${this.bindingTypeCode};`;\n }\n\n get bindingTypeCode() {\n return code`(config:${this.commandConfigTypeImport}, options?: ${this.commandOptionsTypeImport})=>${this.returnShape}`;\n }\n\n get localCommandConstructorName() {\n return `${this.binding.identifier}_ctor`;\n }\n\n get localCommandModel() {\n return this.commandModel;\n }\n\n get returnShape() {\n return code`${GRAPHQL_MUTATION_RESULT}`;\n }\n\n get invoker() {\n return code`${BUILD_ASYNC_GRAPHQL_MUTATION_INVOKER}`;\n }\n\n buildInvocation(servicesName = 'services') {\n return code`const ${this.localCommandConstructorName} = services.instrumentCommand(${this.classBuilderImport}(${servicesName}.${this.commandModel.serviceDependencies.baseClass.localName}), '${this.commandModel.className}');\n ${this.binding.identifier}=${this.invoker}<Parameters<typeof ${this.binding.identifier}>>(\n ({params,assertIsValid})=>{\n const config=params[0];\n const options=params[1];\n const _:<T>(data:unknown,_:${JSON_SCHEMA_TYPE})=>asserts data is T=assertIsValid;\n _<${this.commandConfigTypeImport}>(config,${this.commandConfigSchemaImport});\n \n const baseCommand = new ${this.localCommandConstructorName}(config,${MUTATION_TYPE_VARIABLE_NAME},${servicesName});\n return ${APPLY_DECORATORS}(baseCommand, [${servicesName}.fetchNetworkCommandBaseClass.availableDecorators.abortable], options);\n }) as ${this.bindingTypeCode};`;\n }\n}\n","import {\n stableJSONStringify,\n stringIsVersion,\n toTypeScriptSafeIdentifier,\n Version,\n} from '@conduit-client/utils';\nimport { code, Code, type ImportableReference, type NamedFileService } from '../files';\nimport { type NamedTypeDefinitionService } from '../types';\nimport { ImperativeAdapterBindingGenerator } from './imperative-binding-generator';\nimport { ImperativeAdapterLegacyBindingGenerator } from './imperative-legacy-binding-generator';\nimport { GraphQLImperativeAdapterLegacyBindingGenerator } from './graphql-imperative-legacy-binding-generator';\nimport { WireAdapterBindingGenerator } from './wire-binding-generator';\nimport type { ICommandModel, ServiceDependency } from '../model/base-command-model';\nimport type { IGraphQLCommandModel } from '../model/graphql-command-model-interface';\nimport type {\n NamedTypeRegistryGeneratorService,\n TypeRegistryGenerator,\n} from '../normalization/type-registry-generator';\nimport type { NamedGraphQLTypeRegistryGeneratorService } from '../normalization/graphql-type-registry-generator';\nimport { Binding, NamedAPIService } from '@conduit-client/model/v1';\nimport { GraphQLObjectType } from '../normalization/graphql-type-generator';\nimport { GraphQLImperativeAdapterBindingGenerator } from './graphql-imperative-binding-generator';\nimport { GraphQLWireAdapterBindingGenerator } from './graphql-wire-binding-generator';\nimport { GraphQLMutationAdapterBindingGenerator } from './graphql-mutation-binding-generator';\nimport {\n QUERY_TYPE_VARIABLE_NAME,\n MUTATION_TYPE_VARIABLE_NAME,\n} from './graphql-root-variable-names';\nimport type {\n ResolvedOperationServices,\n ResolvedServiceDescriptor,\n} from '@conduit-client/model/v1';\nimport { buildServiceProjection } from './utils';\n\nconst SERVICE_REQUEST_TYPE: ImportableReference = {\n module: '@conduit-client/service-provisioner/v1',\n exportedSymbol: 'ServiceRequest',\n isType: true,\n};\n\nconst OPTIONAL_SERVICE_REQUEST_TYPE: ImportableReference = {\n module: '@conduit-client/service-provisioner/v1',\n exportedSymbol: 'OptionalServiceRequest',\n isType: true,\n};\n\nconst GET_SERVICES: ImportableReference = {\n module: '@conduit-client/service-provisioner/v1',\n isType: false,\n};\n\nconst INSTRUMENT_COMMAND_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-instrument-command/v1',\n exportedSymbol: 'InstrumentCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_INSTRUMENT_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/service-instrument-command/v1',\n exportedSymbol: 'NamedInstrumentCommandService',\n isType: true,\n};\n\nconst NAMED_CACHE_CONTROL_SERVICE: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nconst CACHE_CONTROL_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'CacheControllerServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_PUBSUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nconst PUBSUB_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'PubSubServiceDescriptor',\n isType: true,\n};\n\nconst FETCH_NETWORK_COMMAND_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-fetch-network/v1',\n exportedSymbol: 'FetchNetworkCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_FETCH_NETWORK_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-fetch-network/v1',\n exportedSymbol: 'NamedFetchNetworkCommandService',\n isType: true,\n};\n\nexport type IBindingsGenerator = {\n build(): void;\n};\n\nexport function defaultAdapterBindingsGeneratorFactory(\n services: NamedTypeDefinitionService,\n model: ICommandModel,\n binding: Binding\n):\n | ImperativeAdapterBindingGenerator\n | ImperativeAdapterLegacyBindingGenerator\n | WireAdapterBindingGenerator\n | GraphQLImperativeAdapterBindingGenerator\n | GraphQLImperativeAdapterLegacyBindingGenerator\n | GraphQLWireAdapterBindingGenerator\n | GraphQLMutationAdapterBindingGenerator {\n const restBindingGenerators = {\n imperative: ImperativeAdapterBindingGenerator,\n 'imperative-legacy': ImperativeAdapterLegacyBindingGenerator,\n wire: WireAdapterBindingGenerator,\n };\n\n const graphqlBindingGenerators = {\n imperative: GraphQLImperativeAdapterBindingGenerator,\n 'imperative-legacy': GraphQLImperativeAdapterLegacyBindingGenerator,\n wire: GraphQLWireAdapterBindingGenerator,\n mutation: GraphQLMutationAdapterBindingGenerator,\n };\n\n let GeneratorClass:\n | typeof ImperativeAdapterBindingGenerator\n | typeof ImperativeAdapterLegacyBindingGenerator\n | typeof WireAdapterBindingGenerator\n | typeof GraphQLImperativeAdapterBindingGenerator\n | typeof GraphQLImperativeAdapterLegacyBindingGenerator\n | typeof GraphQLWireAdapterBindingGenerator\n | typeof GraphQLMutationAdapterBindingGenerator\n | undefined;\n\n if (model.operationType === 'graphql') {\n const key = binding.type as keyof typeof graphqlBindingGenerators;\n GeneratorClass = graphqlBindingGenerators[key];\n } else {\n const key = binding.type as keyof typeof restBindingGenerators;\n GeneratorClass = restBindingGenerators[key];\n }\n\n if (!GeneratorClass) {\n throw new Error(`Unknown binding type: ${binding.type}`);\n }\n\n return new GeneratorClass(services, model, binding);\n}\n\n/**\n * Class responsible for generating binding files based on command models and service dependencies.\n *\n * The `BindingsGenerator` class orchestrates the creation of files that manage service dependencies,\n * adapters, and invocation logic for a given set of command models. It provides a template for the binding\n * structure and manages the generation and integration of individual adapter bindings.\n *\n * The expectation for new bindings is that new *BindingGenerator classes are used inside of the build method.\n *\n * @property {NamedFileService & NamedTypeDefinitionService} services - Services required for file handling and type definitions.\n * @property {ICommandModel[]} commandModels - Array of command models to generate bindings for.\n */\nexport class BindingsGenerator {\n constructor(\n protected services: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService,\n protected commandModels: ICommandModel[],\n protected adapterBindingsGeneratorFactory = defaultAdapterBindingsGeneratorFactory\n ) {}\n\n protected adapterDeclarationSymbol = Symbol.for('adapterDeclarations');\n protected serviceRequirementsSymbol = Symbol.for('serviceRequirements');\n protected adapterInvocationSymbol = Symbol.for('adapterInvocation');\n protected typeRegistryInstantiationSymbol = Symbol.for('typeRegistryInstantiation');\n protected typeInvalidationDeclarationSymbol = Symbol.for('typeInvalidationDeclaration');\n protected typeInvalidationDefinitionSymbol = Symbol.for('typeInvalidationDefinition');\n protected rootTypesInstantiationSymbol = Symbol.for('rootTypesInstantiation');\n\n /**\n * Template for generating the binding structure in the output file.\n * Includes placeholders for adapter declarations, service requirements, and adapter invocations.\n *\n * Bindings files are structured as:\n * 1. Adapter declarations -> an export of the wire or imperative adapter that is initially undefined, but has proper typescript typing\n * 2. Service requirements -> a declaration of what services this module depends on from the service provisioner\n * 3. Adapter instantiation/invocation -> Creation and population of the declaration with a real adapter implementation, after\n * all the required services have been received.\n *\n * @returns {Code[]} An array of code blocks forming the template for the binding output file.\n */\n get template() {\n return [\n this.adapterDeclarationSymbol,\n this.typeInvalidationDeclarationSymbol,\n code`const serviceRequirements=`,\n this.serviceRequirementsSymbol,\n code`;`,\n code`${GET_SERVICES}(serviceRequirements).then(\n (services) => {`,\n this.typeRegistryInstantiationSymbol,\n this.rootTypesInstantiationSymbol,\n this.typeInvalidationDefinitionSymbol,\n this.adapterInvocationSymbol,\n code`},(_err) => {});`,\n ];\n }\n\n protected get serviceDependencies(): ServiceDependency[] {\n const deps = [\n {\n version: '1.0' as const,\n descriptor: INSTRUMENT_COMMAND_DESCRIPTOR,\n namedService: NAMED_INSTRUMENT_COMMAND_SERVICE,\n localName: 'instrumentCommand',\n serviceName: 'instrumentCommand',\n },\n ];\n\n if (this.hasRESTNormalization || this.hasGraphQL) {\n deps.push(\n {\n version: '1.0' as const,\n descriptor: CACHE_CONTROL_SERVICE_DESCRIPTOR,\n namedService: NAMED_CACHE_CONTROL_SERVICE,\n localName: 'cacheController',\n serviceName: 'cacheController',\n },\n {\n version: '1.0' as const,\n descriptor: PUBSUB_SERVICE_DESCRIPTOR,\n namedService: NAMED_PUBSUB_SERVICE,\n localName: 'pubSub',\n serviceName: 'pubSub',\n }\n );\n }\n\n if (this.hasImperativeBindings) {\n deps.push({\n version: '1.0' as const,\n descriptor: FETCH_NETWORK_COMMAND_SERVICE_DESCRIPTOR,\n namedService: NAMED_FETCH_NETWORK_COMMAND_SERVICE,\n localName: 'fetchNetworkCommandBaseClass',\n serviceName: 'fetchNetworkCommandBaseClass',\n });\n }\n\n return deps;\n }\n\n /**\n * Builds the binding file, generating declarations, requirements, and invocations for each command model.\n * This method coordinates with individual binding generators to compile the necessary elements into a single file.\n */\n build() {\n const filename = 'artifacts/lwc-bindings.ts';\n const file = this.services.file.build(filename);\n file.template = this.template;\n\n if (this.hasRESTNormalization) {\n const { typeRegistryGenerator } = this.services;\n file.pushTo(\n this.typeRegistryInstantiationSymbol,\n code`const typeRegistry = new ${typeRegistryGenerator.build()}(services);`\n );\n\n // needs to be called after all the (normalizer) types are built, which is guaranteed for bindings.\n const { declarations, definitions } = this.buildTypeInvalidation(\n typeRegistryGenerator.invalidatableTypes\n );\n\n file.pushTo(this.typeInvalidationDeclarationSymbol, declarations);\n file.pushTo(this.typeInvalidationDefinitionSymbol, definitions);\n }\n\n if (this.hasGraphQL) {\n const { graphqlTypeRegistryGenerator } = this.services;\n const graphqlTypeRegistry = graphqlTypeRegistryGenerator.build();\n const firstGraphQLCommand = this.commandModels.find(\n (model) => model.operationType === 'graphql'\n ) as IGraphQLCommandModel;\n const queryTypeModel: GraphQLObjectType = firstGraphQLCommand?.schema.types.find(\n (type: any) => type.name === firstGraphQLCommand.schema.queryTypeName\n )! as GraphQLObjectType;\n const queryType = graphqlTypeRegistryGenerator.buildGraphQLType({\n schemaModel: firstGraphQLCommand.schema,\n type: queryTypeModel,\n });\n const mutationTypeModel: GraphQLObjectType | undefined = firstGraphQLCommand?.schema\n .mutationTypeName\n ? (firstGraphQLCommand.schema.types.find(\n (type: any) => type.name === firstGraphQLCommand.schema.mutationTypeName\n ) as GraphQLObjectType | undefined)\n : undefined;\n const mutationType = mutationTypeModel\n ? graphqlTypeRegistryGenerator.buildGraphQLType({\n schemaModel: firstGraphQLCommand.schema,\n type: mutationTypeModel,\n })\n : undefined;\n\n file.pushTo(\n this.rootTypesInstantiationSymbol,\n code`const graphqlTypeRegistry = new ${graphqlTypeRegistry}(services);\n const ${QUERY_TYPE_VARIABLE_NAME} = graphqlTypeRegistry.${queryType.propertyName};`\n );\n if (mutationType) {\n file.pushTo(\n this.rootTypesInstantiationSymbol,\n code`const ${MUTATION_TYPE_VARIABLE_NAME} = graphqlTypeRegistry.${mutationType.propertyName};`\n );\n }\n }\n\n const bindingGenerators = this.commandModels.flatMap((model) =>\n model.bindings.map((binding) => {\n return this.adapterBindingsGeneratorFactory(this.services, model, binding);\n })\n );\n\n // adapter declaration\n bindingGenerators.forEach((generator) => {\n file.pushTo(this.adapterDeclarationSymbol, generator.buildDeclaration());\n });\n\n file.pushTo(this.serviceRequirementsSymbol, this.buildRequirements());\n\n file.pushTo(\n this.adapterInvocationSymbol,\n Code.join(\n bindingGenerators.flatMap((generator) => {\n const [servicesName, serviceOverrides] = buildServiceProjection(\n generator.localCommandModel\n );\n const invocation = generator.buildInvocation(servicesName);\n if (serviceOverrides) {\n return [serviceOverrides, invocation];\n }\n return invocation;\n }),\n ''\n )\n );\n }\n\n buildTypeInvalidation(typesWithNormalization: TypeRegistryGenerator['invalidatableTypes']) {\n return typesWithNormalization.reduce<{ definitions: Code[]; declarations: Code[] }>(\n (acc, { propertyName, typeClassRef }) => {\n const invalidateFunctionName = code`invalidate${toTypeScriptSafeIdentifier(propertyName)}`;\n acc.declarations.push(\n code`export let ${invalidateFunctionName}: ${typeClassRef}[\"invalidate\"];`\n );\n acc.definitions.push(\n code`${invalidateFunctionName} = (configs) => typeRegistry.${toTypeScriptSafeIdentifier(propertyName)}.invalidate(configs);`\n );\n return acc;\n },\n { declarations: [], definitions: [] }\n );\n }\n\n protected buildRequirements() {\n const serviceDependencies: ServiceDependency[] = [...this.serviceDependencies];\n\n const depsEqual = (a: ServiceDependency, b: ServiceDependency) => {\n return (\n a.localName === b.localName &&\n a.serviceName === b.serviceName &&\n a.version === b.version &&\n stableJSONStringify(a.tags) === stableJSONStringify(b.tags)\n );\n };\n const findMatchingDeps = (collection: ServiceDependency[], newDep: ServiceDependency) => {\n return collection.filter((existingDep) => depsEqual(existingDep, newDep));\n };\n const pushDep = (collection: ServiceDependency[], newDep: ServiceDependency) => {\n const matchingExistingDeps = findMatchingDeps(collection, newDep);\n const collectionContainsDep = matchingExistingDeps.length > 0;\n\n if (!collectionContainsDep) {\n const existingServicesWithMatchingName = collection.filter(\n (dep) => dep.localName === newDep.localName\n );\n if (existingServicesWithMatchingName.length > 0) {\n throw new Error(\n `Conflicting dependencies for service name ${newDep.localName}: ${JSON.stringify(newDep)}, ${JSON.stringify(existingServicesWithMatchingName)}`\n );\n }\n collection.push(newDep);\n } else {\n // Dep already exists, but may have different requiredness\n const dep = matchingExistingDeps[0];\n dep.optional &&= newDep.optional;\n }\n };\n\n const matchServiceWithOverride = (\n collection: ServiceDependency[],\n alias: string,\n entry: ResolvedServiceDescriptor\n ) => {\n return collection.find((service) => {\n if (service.localName === alias) {\n if (\n !(\n service.version === entry.version &&\n service.tags === entry.tags &&\n service.serviceName === entry.type\n )\n ) {\n return service;\n } else {\n throw new Error(\n `Tried to override service ${alias} but it already existed with the same parameters`\n );\n }\n }\n });\n };\n\n const overrideServices = (\n collection: ServiceDependency[],\n overrides: ResolvedOperationServices,\n model: ICommandModel\n ) => {\n for (const [alias, entry] of Object.entries(overrides)) {\n let existingService = matchServiceWithOverride(collection, alias, entry);\n if (existingService && stringIsVersion(entry.version)) {\n const serviceOverride: ServiceDependency = {\n version: entry.version,\n descriptor: existingService.descriptor,\n namedService: existingService.namedService,\n localName: [entry.type, toTypeScriptSafeIdentifier(model.commandName)].join(\n '_'\n ),\n serviceName: entry.type,\n tags: entry.tags,\n };\n collection.push(serviceOverride);\n } else {\n throw new Error(\n `Tried to override service ${alias} but it did not exist already`\n );\n }\n }\n };\n\n const overrideDefaultServices = (\n collection: ServiceDependency[],\n overrides: ResolvedOperationServices\n ) => {\n for (const [alias, entry] of Object.entries(overrides)) {\n let existingService = matchServiceWithOverride(collection, alias, entry);\n if (existingService && stringIsVersion(entry.version)) {\n // override existing service, but don't change local name, since this now replacing the base version of the service\n existingService.version = entry.version;\n existingService.serviceName = entry.type;\n existingService.tags = entry.tags;\n } else {\n throw new Error(\n `Tried to override service ${alias} but it did not exist already`\n );\n }\n }\n };\n\n this.commandModels.forEach((model) => {\n pushDep(serviceDependencies, model.serviceDependencies.baseClass);\n model.serviceDependencies.inherited.forEach((dep) => pushDep(serviceDependencies, dep));\n model.serviceDependencies.extra.forEach((dep) => pushDep(serviceDependencies, dep));\n overrideServices(serviceDependencies, model.serviceDependencies.overrides, model);\n });\n\n if (this.commandModels.length) {\n // all the models should have the same defaultOverrides so can just pick the first\n overrideDefaultServices(\n serviceDependencies,\n this.commandModels[0].serviceDependencies.defaultOverrides\n );\n }\n\n return code`{${Code.join(\n serviceDependencies.map((dep) => {\n return code`${dep.localName}:{type:'${dep.serviceName}',version:'${dep.version}'${dep.tags ? `,tags:${JSON.stringify(dep.tags)}` : ''}${dep.optional ? `,optional:true` : ''}} as ${dep.optional ? OPTIONAL_SERVICE_REQUEST_TYPE : SERVICE_REQUEST_TYPE}<${dep.descriptor}>`;\n }),\n ','\n )}}`;\n }\n\n protected get hasRESTNormalization() {\n return this.commandModels.some((model) => {\n return model.cacheStrategy.type === 'normalized' && model.operationType !== 'graphql';\n });\n }\n\n protected get hasGraphQL() {\n return this.commandModels.some((model) => model.operationType === 'graphql');\n }\n\n protected get hasImperativeBindings() {\n return this.commandModels.some((model) =>\n model.bindings.some(\n (binding) => binding.type === 'imperative' || binding.type == 'mutation'\n )\n );\n }\n}\n","import type { Parameter, Type, QueryParameter, TypeOfParameter } from '@conduit-client/model/v1';\n\n/**\n * Converts a set of parameter specification from Record<string, Parameter> to a list of named parameters info.\n * Performs dupe parameters detection.\n *\n * @param records the parameter specifications to convert\n * @returns a list of parameters info\n */\nexport function getParameterMembers<T extends Type = TypeOfParameter<Parameter>>(\n ...records: Record<string, Parameter<T>>[]\n): { name: string; type: T; required: boolean; explode?: boolean }[] {\n let dupes: string[] = [];\n const members = records.filter(Boolean).reduce(\n (result, record) => {\n const current = result.map((m) => m.name);\n const members = Object.entries(record).map(([name, param]) => {\n return { name, ...param };\n });\n dupes = dupes.concat(\n members.filter((m) => current.includes(m.name)).map((m) => m.name)\n );\n return result.concat(members);\n },\n [] as { name: string; type: T; required: boolean; explode?: boolean }[]\n );\n if (dupes.length > 0) {\n throw new Error(`duplicate parameters found: ${dupes.join(', ')}`);\n }\n return members;\n}\n\nexport const getQueryParameterMembers = getParameterMembers<TypeOfParameter<QueryParameter>>;\n","import { getParameterMembers, getQueryParameterMembers } from '../utils';\nimport {\n type Operation,\n type AllOfType,\n type ObjectType,\n type Type,\n canonicalizeType,\n} from '@conduit-client/model/v1';\nimport type { ContentModel } from '../model/base-command-model';\n\n/**\n * Class for building command configurations based on an operation and its associated parameters.\n * This builder handles the construction of an object type structure that encapsulates various parameters\n * from an operation, including query parameters, headers, URI parameters, and potentially a payload.\n *\n * @property {Operation} operation - The operation object that provides context for the command configuration.\n * @property {{ type: Type; name: string } | undefined} payload - Optional payload definition that specifies the type and name of the main data structure if needed.\n */\nexport class CommandConfigBuilder {\n constructor(\n protected operation: Operation,\n protected payload?: { content: ContentModel; parameterName: string }\n ) {}\n\n /**\n * Builds and returns an object type configuration based on the initial operation and the optional payload.\n * This method organizes various request parameters into a structured type definition, suitable for generating type-safe command configurations.\n *\n * @returns {ObjectType} The complete configuration type for the command, encapsulating all necessary parameters and payload definitions.\n */\n build(): Type {\n const request = this.operation.requests[0];\n\n const queryParams = [request?.queryParameters];\n const otherParams = [\n // request?.cookies,\n request?.headers,\n request?.uriParameters,\n this.operation.endpoint.uriParameters,\n this.operation.server.uriParameters,\n ];\n\n const configType = {\n type: 'allOf',\n allOf: [\n {\n type: 'object',\n properties: {},\n additionalProperties: {\n type: 'not',\n\n not: { type: 'any' },\n },\n },\n ],\n includes: (_t: Type) => false,\n } as AllOfType;\n\n [\n ...getQueryParameterMembers(...queryParams),\n ...getParameterMembers(...otherParams),\n ].forEach((param) => {\n (configType.allOf[0] as ObjectType).properties[param.name] = {\n type: param.type,\n required: param.required,\n };\n });\n\n if (this.payload) {\n if (this.operation.configSchemaType === 'flattened') {\n // Input payload needs to be flattened for backwards compatibility with\n // older versions of Luvio.\n let payloadType = this.payload.content['application/json']!;\n let canonicalPayloadType = canonicalizeType(payloadType);\n\n // when flattening, we use `allOf`, which means all members of the `allOf` must allow `additionalProperties`\n if (canonicalPayloadType.type === 'object') {\n canonicalPayloadType = {\n ...canonicalPayloadType,\n additionalProperties: {\n type: 'any',\n },\n };\n }\n configType.allOf.push(canonicalPayloadType);\n (configType.allOf[0] as ObjectType).additionalProperties = {\n type: 'any',\n };\n } else {\n (configType.allOf[0] as ObjectType).properties[this.payload.parameterName] = {\n type: this.payload.content['application/json']!,\n required: true,\n };\n }\n }\n return configType;\n }\n}\n","import { canonicalizeType, Type } from '@conduit-client/model/v1';\nimport { Code, code, ImportableTypeReference, ImportableValueReference } from '../files';\nimport type { CommandGenerator } from './base-command-generator';\n\n// Interface to define the methods provided by the normalized cache control mixin\nexport interface NormalizedCacheControlGenerator {\n generateCacheControlStrategyConfig(): Code;\n}\n\ntype Constructor = new (...args: any[]) => CommandGenerator;\ntype NormalizedCacheControlConstructor = new (\n ...args: any[]\n) => CommandGenerator & NormalizedCacheControlGenerator;\n\nconst DATA_OF: ImportableTypeReference = {\n module: '@conduit-client/type-normalization/v1',\n exportedSymbol: 'DataOf',\n isType: true,\n};\n\n/**\n *\n * @param Base The base class to mix in the normalized code generation logic to\n * @param commandBaseClass An importable refernce to the command base class to use in the generated code\n * @returns A new class with the normalized generation behavior mixed in\n */\nexport function NormalizedCacheControlGeneratorMixin(\n Base: Constructor,\n commandBaseClass: ImportableTypeReference\n): NormalizedCacheControlConstructor {\n return class NormalizedCacheControl extends Base implements NormalizedCacheControlGenerator {\n commandBaseClass = commandBaseClass;\n get commandTypeConstructorArgs() {\n return code`config: Config, typeRegistry: ${this.services.typeRegistryGenerator.build()}`;\n }\n\n get commandConstructorArgs() {\n return code`private config: Config, private typeRegistry: ${this.services.typeRegistryGenerator.build()}`;\n }\n\n protected buildCommandTypeGenerics() {\n const extraServicesCode = this.buildExtraServices();\n const builtType = this.buildResponseType();\n return code`${builtType.typeClassRef}${extraServicesCode ? code`, ${extraServicesCode}` : ''}`;\n }\n\n get classBody(): Code[] {\n return [\n ...super.classBody,\n // TODO: this is a stub for the real data\n this.generateCacheControlStrategyConfig(),\n this.generateBuildResultType(),\n this.generateBuildReadInput(),\n this.generateBuildWriteInput(),\n ];\n }\n\n generateCacheControlStrategyConfig(): Code {\n if (this.commandModel.cacheStrategy.type !== 'normalized') {\n throw new Error('incorrect cache strategy');\n }\n\n const cacheControl = this.commandModel.cacheStrategy['cache-control'];\n\n function getCacheControlValue() {\n if (cacheControl.type === 'no-cache') {\n return code`{type: 'no-cache', now:Date.now()/1000}`;\n }\n return code`{type: 'max-age',requestMaxAge: ${cacheControl['max-age']},now:Date.now()/1000}`;\n }\n\n return code`get cacheControlStrategyConfig(){return ${getCacheControlValue()} as const;}`;\n }\n\n protected generateBuildResultType() {\n const builtType = this.buildResponseType();\n return code`buildResultType(){return this.typeRegistry.${builtType.propertyName}}`;\n }\n\n protected generateBuildReadInput() {\n return code`buildQuery(){\n return {type: 'keyParams', keyParams: ${this.buildKeyConfig()} } as const;\n }`;\n }\n\n protected generateBuildWriteInput() {\n return code`buildWriteInput(data: ${DATA_OF}<${this.buildResponseType().typeClassRef}>){return ${this.needsResourceWrapperType ? '{data, keyParams: this.config}' : '{data}'};}`;\n }\n\n private get responseType() {\n const responseType = this.commandModel.responseType?.default['application/json'];\n if (!responseType) {\n throw new Error('Could not find a response for operation');\n }\n return canonicalizeType(responseType);\n }\n\n private get cacheStrategy() {\n const cacheStrategy = this.commandModel.cacheStrategy;\n if (cacheStrategy.type !== 'normalized') {\n throw new Error('Got an unnormalized operation');\n }\n return cacheStrategy;\n }\n\n private get needsResourceWrapperType() {\n const isOperationMappedToIdentifiableType =\n this.cacheStrategy.key && this.responseType.extensions?.type === 'identifiable';\n\n return !isOperationMappedToIdentifiableType;\n }\n\n private buildResponseType(): {\n propertyName: string;\n typeClassRef: ImportableValueReference;\n } {\n const responseType = this.responseType;\n\n if (this.needsResourceWrapperType) {\n const wrappedResponseType = {\n type: 'ref',\n $ref: responseType,\n extensions: {\n type: 'identifiable',\n key: { fields: {} },\n 'cache-control': this.cacheStrategy['cache-control'],\n },\n } as const satisfies Type;\n return this.services.typeRegistryGenerator.buildType(wrappedResponseType, {\n namespace: this.services.api.api.namespace,\n name: `${this.commandModel.commandName}Response`,\n keyParamType: { ...this.commandModel.configType },\n isInvalidatable: false,\n });\n }\n\n const typename = this.services.api.api.types.nameOf(responseType);\n\n if (typename === undefined) {\n throw new Error('cannot find name for response type');\n }\n\n return this.services.typeRegistryGenerator.buildType(responseType, {\n namespace: this.services.api.api.namespace,\n name: typename,\n });\n }\n\n private buildKeyConfig() {\n if (this.needsResourceWrapperType) {\n return this.buildResourceKeyConfig();\n }\n const operationKey = this.cacheStrategy.key!;\n\n return this.buildMappedKeyConfig(operationKey);\n }\n\n private buildResourceKeyConfig() {\n return code`this.config`;\n }\n };\n}\n","import { code, type ImportableTypeReference, type Code } from '../files';\nimport type { NamedAPIService } from '@conduit-client/model/v1';\nimport type { ImportableReference, NamedFileService } from '../files';\nimport type { NamedJSONSchemaDeclarationService, NamedTypeDefinitionService } from '../types';\nimport type { NamedTypeRegistryGeneratorService } from '../normalization/type-registry-generator';\nimport type { NamedGraphQLTypeRegistryGeneratorService } from '../normalization/graphql-type-registry-generator';\nimport { GraphQLSchemaModel } from '../model/graphql-schema-model';\nimport type { CommandGenerator } from './base-command-generator';\nimport type { NormalizedCacheControlGenerator } from './normalized-cache-control-generator-mixin';\nimport { GRAPHQL_DATA } from '../normalization/graphql/base-type-generator';\n\nconst GRAPHQL_DOCUMENT_ROOT_TYPE_REPOSITORY: ImportableTypeReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLDocumentRootTypeRepository',\n isType: true,\n};\n\nconst DOCUMENT_NODE: ImportableTypeReference = {\n module: '@conduit-client/onestore-graphql-parser/v1',\n exportedSymbol: 'DocumentNode',\n isType: true,\n};\n\nconst GRAPHQL_QUERY_JSON_SCHEMA: ImportableReference = {\n module: '@conduit-client/graphql-normalization/v1',\n exportedSymbol: 'GraphQLQueryJsonSchema',\n isType: false,\n};\n\nconst NAMED_CACHE_CONTROLLER_SERVICE: ImportableTypeReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nconst NAMED_PUBSUB_SERVICE: ImportableTypeReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nconst NAMED_AURA_NETWORK_SERVICE: ImportableTypeReference = {\n module: '@conduit-client/service-aura-network/v1',\n exportedSymbol: 'NamedAuraNetworkService',\n isType: true,\n};\n\nconst NAMED_FETCH_SERVICE: ImportableTypeReference = {\n module: '@conduit-client/service-fetch-network/v1',\n exportedSymbol: 'NamedFetchService',\n isType: true,\n};\n\ntype Constructor = new (...args: any[]) => CommandGenerator & NormalizedCacheControlGenerator;\n\ntype GraphQLCommandGeneratorServices = NamedAPIService &\n NamedFileService &\n NamedJSONSchemaDeclarationService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService;\n\n/**\n * Mixin that adds GraphQL-specific functionality to command generators.\n * This mixin modifies command generators to work with GraphQL operations by:\n * 1. Using DocumentNode for the query config type instead of string\n * 2. Adding documentRootType parameter to constructor\n * 3. Generating GraphQL-specific methods like buildRequestQuery\n */\nexport function GraphQLNormalizedCacheControlGeneratorMixin(\n Base: Constructor,\n commandBaseClass: ImportableTypeReference\n): Constructor {\n return class GraphQLNormalizedCacheControl extends Base {\n // Type assertion to ensure services has GraphQL type registry\n declare services: GraphQLCommandGeneratorServices;\n\n commandBaseClass = commandBaseClass;\n\n protected documentRootTypeSymbol = Symbol.for('documentRootType');\n\n get template() {\n return [\n code`export type DocumentRootType = ${GRAPHQL_DOCUMENT_ROOT_TYPE_REPOSITORY}<${GRAPHQL_DATA}, ${GRAPHQL_DATA}>;`,\n ...super.template,\n ];\n }\n\n protected buildNetworkServicesCode(): Code {\n return this.commandModel.aura\n ? code`Partial<${NAMED_AURA_NETWORK_SERVICE}> & Partial<${NAMED_FETCH_SERVICE}>`\n : code`${NAMED_FETCH_SERVICE}`;\n }\n\n protected generateCommandType(): Code {\n return code`export type Command = new (config: Config, documentRootType: DocumentRootType, services: ${NAMED_CACHE_CONTROLLER_SERVICE} & ${NAMED_PUBSUB_SERVICE} & ${this.buildNetworkServicesCode()} & object) => CommandType;`;\n }\n\n get commandTypeConstructorArgs() {\n return code`config: Config, documentRootType: DocumentRootType, services: ${NAMED_CACHE_CONTROLLER_SERVICE} & ${NAMED_PUBSUB_SERVICE} & ${this.buildNetworkServicesCode()} & object`;\n }\n\n get commandConstructorArgs() {\n return code`protected config: Config, protected documentRootType: DocumentRootType, protected services: ${NAMED_CACHE_CONTROLLER_SERVICE} & ${NAMED_PUBSUB_SERVICE} & ${this.buildNetworkServicesCode()} & object`;\n }\n\n get commandConstructorBody() {\n return code`super(config, documentRootType, services);`;\n }\n\n get classBody(): Code[] {\n // For GraphQL commands, we only need to override specific methods\n // The base class already provides most GraphQL functionality\n return [\n this.generateCacheControlStrategyConfig(),\n this.generateUrl(),\n this.generateEndpoint(),\n this.generateAuraBodyWrapperName(),\n ];\n }\n\n // Override to avoid generating an operationType getter on GraphQL commands\n protected generateOperationType(): Code {\n return code``;\n }\n\n /**\n * Generate the URL getter for the GraphQL endpoint\n */\n protected generateUrl(): Code {\n // Use the endpoint path from the command model\n const path = this.commandModel.endpointUrlPath;\n return code`\n get url() { \n return '${path}'; \n }\n `;\n }\n\n /**\n * Generate the endpoint property for GraphQL commands\n */\n protected generateEndpoint(): Code {\n const aura = this.commandModel.aura;\n if (aura) {\n return code`endpoint = '${aura.controller}.${aura.method}';`;\n }\n return code``;\n }\n\n /**\n * Generate the auraBodyWrapperName getter\n */\n protected generateAuraBodyWrapperName(): Code {\n // Use the aura body param if available\n const bodyParam = this.commandModel.aura?.bodyParam;\n if (bodyParam) {\n return code`\n protected get auraBodyWrapperName() { \n return '${bodyParam}'; \n }\n `;\n }\n return code``;\n }\n\n protected buildCommandConfigType() {\n // Override to use DocumentNode for query field instead of merging with base type\n return code`{\n query: ${DOCUMENT_NODE};\n variables?: Record<string, unknown>;\n operationName?: string;\n } & Record<string, unknown>`;\n }\n\n protected buildCommandConfigSchema() {\n return code`${GRAPHQL_QUERY_JSON_SCHEMA}`;\n }\n\n protected generateConstructor(): Code {\n return code`constructor(${this.commandConstructorArgs}){${this.commandConstructorBody}}`;\n }\n\n protected buildCommandTypeGenerics() {\n const extraServicesCode = this.buildExtraServices();\n return code`${extraServicesCode ? code`, ${extraServicesCode}` : 'object'}`;\n }\n };\n}\n","import { type ImportableReference } from '../files';\nimport { HttpCommandGenerator } from './http-command-generator';\nimport { NormalizedCacheControlGeneratorMixin } from './normalized-cache-control-generator-mixin';\nimport { GraphQLNormalizedCacheControlGeneratorMixin } from './graphql-normalized-cache-control-generator-mixin';\n\nconst HTTP_GRAPHQL_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS = {\n module: '@conduit-client/command-http-graphql-normalized-cache-control/v1',\n exportedSymbol: 'HttpGraphQLNormalizedCacheControlCommand',\n isType: true,\n} as const satisfies ImportableReference;\n\n// First apply the normalized cache control mixin to HttpCommandGenerator\nconst HttpNormalizedCacheControlCommandGenerator = NormalizedCacheControlGeneratorMixin(\n HttpCommandGenerator,\n HTTP_GRAPHQL_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS\n);\n\n// Then apply the GraphQL mixin to the normalized cache control generator\nexport const HttpGraphQLNormalizedCacheControlCommandGenerator =\n GraphQLNormalizedCacheControlGeneratorMixin(\n HttpNormalizedCacheControlCommandGenerator,\n HTTP_GRAPHQL_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS\n );\n","import { type ServiceVersion, toTypeScriptSafeIdentifier } from '@conduit-client/utils';\nimport { CommandConfigBuilder } from '../generators/command-config-builder';\nimport { getParameterMembers, getQueryParameterMembers } from '../utils';\nimport type { ImportableReference } from '../files';\nimport type {\n Operation,\n Parameter,\n Payload,\n Type,\n QueryParameter,\n TypeOfParameter,\n HttpMethod,\n Binding,\n ResolvedOperationServices,\n} from '@conduit-client/model/v1';\nimport type { InvalidateConfig } from '@conduit-client/utils';\n\nexport type ServiceDependency = {\n version: ServiceVersion;\n descriptor: ImportableReference;\n namedService: ImportableReference;\n localName: string;\n serviceName: string;\n tags?: Record<string, string>;\n optional?: boolean;\n};\n\nexport type CommandServiceDependencies = {\n baseClass: ServiceDependency;\n inherited: ServiceDependency[];\n extra: ServiceDependency[];\n overrides: ResolvedOperationServices;\n defaultOverrides: ResolvedOperationServices;\n};\n\nexport type OperationType = 'query' | 'mutation' | 'graphql';\nexport type ContentModel = {\n 'application/json'?: Type;\n};\n\nexport type CacheStrategy =\n | {\n type: 'none';\n }\n | {\n type: 'resource';\n config: {\n 'max-age': number;\n };\n }\n | {\n type: 'normalized';\n 'cache-control':\n | { type: 'no-cache' }\n | {\n type: 'max-age';\n 'max-age': number;\n };\n key?: Record<string, string>;\n };\n\nexport type ErrorStrategy =\n | {\n type: 'stringified';\n }\n | {\n type: 'fetchResponse';\n };\nexport type ConfigSchemaType = 'default' | 'flattened';\n\nexport type InvalidationConfig = {\n statusCode: string;\n invalidation: InvalidateConfig[];\n};\n\nexport type NetworkPreference = 'aura' | 'http';\n\nexport type ICommandModel = {\n readonly transportType: 'aura' | 'http';\n readonly className: string;\n readonly commandName: string;\n readonly filePath: string;\n readonly bindings: Binding[];\n readonly configType: Type;\n readonly responseType:\n | ({\n default: ContentModel;\n } & {\n [statusCode: number]: ContentModel;\n })\n | undefined;\n readonly uriParameters: {\n name: string;\n type: TypeOfParameter<Parameter>;\n required: boolean;\n explode?: boolean;\n }[];\n readonly queryParameters: {\n name: string;\n type: TypeOfParameter<QueryParameter>;\n required: boolean;\n explode?: boolean;\n }[];\n readonly headers: {\n name: string;\n type: TypeOfParameter<Parameter>;\n required: boolean;\n explode?: boolean;\n defaultValue?: TypeOfParameter<Parameter>;\n }[];\n readonly body?: {\n content: ContentModel;\n parameterName: string;\n };\n getAllParams(): {\n name: string;\n type: TypeOfParameter<Parameter<Type>>;\n required: boolean;\n explode?: boolean;\n defaultValue?: TypeOfParameter<Parameter<Type>>;\n }[];\n\n readonly serviceDependencies: CommandServiceDependencies;\n readonly configSchemaType: ConfigSchemaType;\n readonly exposeRefresh: boolean;\n readonly operationType: OperationType;\n\n aura?: { controller: string; method: string; bodyParam?: string };\n networkPreference?: NetworkPreference;\n errorStrategy: ErrorStrategy;\n cacheStrategy: CacheStrategy;\n method: HttpMethod;\n serverUrlPath: string;\n endpointUrlPath: string;\n invalidationConfigs: InvalidationConfig[];\n};\n\n/**\n * Base abstract class for command models that encapsulates the common functionality required by all command models.\n * It provides a structure for mapping API operations to the necessary command-specific metadata to be used for code generation.\n */\nexport abstract class BaseCommandModel implements ICommandModel {\n constructor(protected operation: Operation) {}\n\n abstract get serviceDependencies(): CommandServiceDependencies;\n getAllParams(): {\n name: string;\n type: TypeOfParameter<Parameter<Type>>;\n required: boolean;\n explode?: boolean;\n }[] {\n return [...this.queryParameters, ...this.uriParameters, ...this.headers];\n }\n\n get transportType() {\n return this.operation.endpoint.type;\n }\n\n /**\n * Defaulted in {@link ../../../../model/src/v1/amf/endpoints/amf-operation.ts#L54}\n * */\n get bindings(): Binding[] {\n return this.operation.bindings;\n }\n\n get body() {\n return this.buildBody();\n }\n\n get configType() {\n return new CommandConfigBuilder(this.operation, this.buildBody()).build();\n }\n\n get responseType() {\n return this.buildResponseType();\n }\n\n get uriParameters() {\n return getParameterMembers(\n this.operation.server.uriParameters,\n this.operation.endpoint.uriParameters,\n this.request?.uriParameters || {}\n );\n }\n\n get queryParameters() {\n return getQueryParameterMembers(this.request?.queryParameters || {});\n }\n\n get headers() {\n return getParameterMembers(this.request?.headers || {});\n }\n\n get commandName() {\n return toTypeScriptSafeIdentifier(\n this.operation.operationId || this.operation.bindings[0].identifier\n );\n }\n\n get className() {\n return `${this.commandName}Command`;\n }\n\n get filePath() {\n return `commands/${this.className}.ts`;\n }\n\n get configSchemaType() {\n return this.operation.configSchemaType;\n }\n\n get exposeRefresh() {\n return this.operation.exposeRefresh;\n }\n\n get operationType() {\n return this.operation.operationType;\n }\n\n get errorStrategy() {\n return this.operation.errorStrategy;\n }\n\n get cacheStrategy() {\n return this.operation.cacheStrategy;\n }\n\n get method() {\n return this.operation.method;\n }\n\n get serverUrlPath() {\n return this.operation.server.url;\n }\n\n get endpointUrlPath() {\n return this.operation.endpoint.path;\n }\n\n get request() {\n return this.operation.requests[0];\n }\n\n get invalidationConfigs(): InvalidationConfig[] {\n return this.operation.responses\n .filter((res) => {\n return res.invalidation !== undefined;\n })\n .map((invalidationResponse) => {\n return {\n statusCode: invalidationResponse.statusCode.toString(),\n invalidation: invalidationResponse.invalidation!,\n };\n });\n }\n\n protected buildBody(): { content: ContentModel; parameterName: string } | undefined {\n let payload = undefined;\n // We currently only look at the first request defined to define the config, something to expand on in the future...\n if (\n this.request !== undefined &&\n (this.request.payloads?.length || 0) > 0 &&\n 'configBodyParam' in this.operation\n ) {\n // We currently only support application/json requests\n let inputPayloadType = getPayloadForMediaType(this.request.payloads);\n if (!inputPayloadType) {\n throw new Error(\n `unsupported input payload type in ${this.operation.method} ${this.operation.endpoint.path} operation. Only application/json is supported`\n );\n }\n\n payload = {\n parameterName: this.operation.configBodyParam,\n content: { 'application/json': inputPayloadType },\n };\n }\n return payload;\n }\n\n protected buildResponseType() {\n const jsonType = getPayloadForMediaType(\n this.operation.responses[0]?.payloads,\n 'application/json'\n );\n return jsonType\n ? {\n default: { 'application/json': jsonType },\n }\n : undefined;\n }\n}\n\n/**\n * Gets the payload with the specified media type.\n *\n * @param payloads\n * @param mediaType\n * @returns\n */\nfunction getPayloadForMediaType(\n payloads: Array<Payload>,\n mediaType: string = 'application/json'\n): Type | undefined {\n let inputPayloadType = undefined;\n if (payloads?.length > 0) {\n const requestPayload = payloads.find((payload) => payload.mediaType === mediaType);\n inputPayloadType = requestPayload ? requestPayload.data : undefined;\n }\n return inputPayloadType;\n}\n","import { BaseCommandModel, type CommandServiceDependencies } from './base-command-model';\nimport type { ImportableReference } from '../files';\nimport type {\n AuraEndPoint,\n AuraOperation,\n AuraOperationWithRequestBody,\n} from '@conduit-client/model/v1';\n\nconst NAMED_AURA_NETWORK_SERVICE: ImportableReference = {\n module: '@conduit-client/service-aura-network/v1',\n exportedSymbol: 'NamedAuraNetworkService',\n isType: true,\n};\n\nconst AURA_NETWORK_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-aura-network/v1',\n exportedSymbol: 'AuraNetworkServiceDescriptor',\n isType: true,\n};\n\nconst AURA_NETWORK_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-aura-network/v1',\n exportedSymbol: 'AuraNetworkCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_AURA_NETWORK_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command/aura-network/v1',\n exportedSymbol: 'NamedAuraNetworkCommandService',\n isType: true,\n};\n\nconst NAMED_FETCH_SERVICE: ImportableReference = {\n module: '@conduit-client/service-fetch-network/v1',\n exportedSymbol: 'NamedFetchService',\n isType: true,\n};\n\nconst FETCH_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-fetch-network/v1',\n exportedSymbol: 'FetchServiceDescriptor',\n isType: true,\n};\n\n/**\n * Represents a command model for Aura-specific operations, extending the functionalities of the BaseCommandModel.\n * This class is used to model Aura specific code metadata from the API model.\n */\nexport class AuraCommandModel extends BaseCommandModel {\n getAllParams() {\n return [...this.queryParameters, ...this.uriParameters];\n }\n\n get networkPreference() {\n return (this.operation.endpoint as AuraEndPoint).networkPreference;\n }\n\n /**\n * Gets the Aura controller and method associated with the operation.\n * @returns {object} An object containing the `controller` and `method` names.\n */\n get aura() {\n const auraOperation = this.operation as AuraOperation;\n return {\n controller: (this.operation.endpoint as AuraEndPoint).auraController.name,\n method: auraOperation.aura.methodName,\n bodyParam: 'bodyParam' in auraOperation.aura ? auraOperation.aura.bodyParam : undefined,\n };\n }\n\n /**\n * Provides the service dependencies required by this AuraCommandModel.\n * Includes information about the base class and inherited services, as well as any extra dependencies.\n * @returns {object} An object detailing the service dependencies for the Aura command.\n */\n get serviceDependencies(): CommandServiceDependencies {\n return {\n baseClass: {\n version: '1.0' as const,\n descriptor: AURA_NETWORK_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_AURA_NETWORK_COMMAND_SERVICE,\n localName: 'auraNetworkCommandBaseClass',\n serviceName: 'auraNetworkCommandBaseClass',\n },\n inherited: [\n {\n version: '1.0' as const,\n descriptor: AURA_NETWORK_SERVICE_DESCRIPTOR,\n namedService: NAMED_AURA_NETWORK_SERVICE,\n localName: 'auraNetwork',\n serviceName: 'auraNetwork',\n optional: true,\n },\n {\n version: '1.0' as const,\n descriptor: FETCH_SERVICE_DESCRIPTOR,\n namedService: NAMED_FETCH_SERVICE,\n localName: 'fetch',\n serviceName: 'fetch',\n optional: true,\n },\n ],\n extra: [],\n overrides: this.operation.serviceOverrides || {},\n defaultOverrides: this.operation.defaults?.services || {},\n };\n }\n}\n","import { BaseCommandModel, type ServiceDependency } from './base-command-model';\nimport type { ImportableReference } from '../files';\n\nexport const INPUT_PAYLOAD_MEMBER_NAME = 'inputPayload';\n\nconst NAMED_FETCH_SERVICE: ImportableReference = {\n module: '@conduit-client/service-fetch-network/v1',\n exportedSymbol: 'NamedFetchService',\n isType: true,\n};\n\nconst FETCH_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-fetch-network/v1',\n exportedSymbol: 'FetchServiceDescriptor',\n isType: true,\n};\nconst FETCH_NETWORK_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-fetch-network/v1',\n exportedSymbol: 'FetchNetworkCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_FETCH_NETWORK_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-fetch-network/v1',\n exportedSymbol: 'NamedFetchNetworkCommandService',\n isType: true,\n};\n\n/**\n * Represents an HTTP command model that extends BaseCommandModel to handle HTTP-specific commands.\n * This model specifically manages the input payload and service dependencies for HTTP operations.\n */\nexport class HttpCommandModel extends BaseCommandModel {\n getInputPayloadParameterName(): string {\n return INPUT_PAYLOAD_MEMBER_NAME;\n }\n\n getAllParams() {\n return [...this.queryParameters, ...this.uriParameters, ...this.headers];\n }\n\n /**\n * Defines and retrieves the service dependencies for the HTTP command model,\n * including any adjustments based on the server URL indicating specific service requirements.\n * @returns {CommandServiceDependencies} An object detailing the service dependencies.\n */\n get serviceDependencies() {\n const baseClass: ServiceDependency = {\n version: '1.0' as const,\n descriptor: FETCH_NETWORK_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_FETCH_NETWORK_COMMAND_SERVICE,\n localName: 'fetchNetworkCommandBaseClass',\n serviceName: 'fetchNetworkCommandBaseClass',\n };\n const SFAP_BASE_URL = 'api.salesforce.com';\n const isSfapServer = [this.operation.server].some((server) => {\n try {\n const url = new URL(server.url);\n return url.host.includes(SFAP_BASE_URL);\n } catch (_e) {\n return server.url.startsWith(SFAP_BASE_URL);\n }\n });\n\n const fetchServiceDependency: ServiceDependency = {\n version: '1.0' as const,\n descriptor: FETCH_SERVICE_DESCRIPTOR,\n namedService: NAMED_FETCH_SERVICE,\n localName: 'fetch',\n serviceName: 'fetch',\n };\n\n if (isSfapServer) {\n fetchServiceDependency.tags = { authenticationScopes: 'sfap_api' };\n }\n\n return {\n baseClass,\n inherited: [fetchServiceDependency],\n extra: [],\n overrides: this.operation.serviceOverrides || {},\n defaultOverrides: this.operation.defaults?.services || {},\n };\n }\n}\n","import { AuraCommandModel } from './aura-command-model';\nimport type { ImportableReference } from '../files';\n\nconst AURA_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-aura-normalized-cache-control/v1',\n exportedSymbol: 'AuraNormalizedCacheControlCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_AURA_CACHE_CONTROL_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-aura-normalized-cache-control/v1',\n exportedSymbol: 'NamedAuraNormalizedCacheControlCommand',\n isType: true,\n};\n\nconst NAMED_CACHE_CONTROL_SERVICE: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nconst CACHE_CONTROL_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'CacheControllerServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_PUBSUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nconst PUBSUB_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'PubSubServiceDescriptor',\n isType: true,\n};\n\n/**\n * Represents a command model specifically designed for handling normalized caching in Aura applications.\n * This model extends `AuraCommandModel` and overrides the service dependencies to include cache control services.\n */\nexport class AuraNormalizedCachingCommandModel extends AuraCommandModel {\n get serviceDependencies() {\n const deps = super.serviceDependencies;\n\n deps.baseClass = {\n version: '1.0' as const,\n descriptor: AURA_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_AURA_CACHE_CONTROL_COMMAND_SERVICE,\n localName: 'auraNormalizedCacheControlCommand',\n serviceName: 'auraNormalizedCacheControlCommand',\n };\n\n deps.inherited.push({\n version: '1.0' as const,\n descriptor: CACHE_CONTROL_SERVICE_DESCRIPTOR,\n namedService: NAMED_CACHE_CONTROL_SERVICE,\n localName: 'cacheController',\n serviceName: 'cacheController',\n });\n\n deps.inherited.push({\n version: '1.0' as const,\n descriptor: PUBSUB_SERVICE_DESCRIPTOR,\n namedService: NAMED_PUBSUB_SERVICE,\n localName: 'pubSub',\n serviceName: 'pubSub',\n optional: true,\n });\n\n return deps;\n }\n}\n","import { AuraCommandModel } from './aura-command-model';\nimport type { ImportableReference } from '../files';\n\nconst AURA_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-aura-resource-cache-control/v1',\n exportedSymbol: 'AuraResourceCacheControlCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_AURA_CACHE_CONTROL_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-aura-resource-cache-control/v1',\n exportedSymbol: 'NamedAuraResourceCacheControlCommand',\n isType: true,\n};\n\nconst NAMED_CACHE_CONTROL_SERVICE: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nconst CACHE_CONTROL_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'CacheControllerServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_PUBSUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nconst PUBSUB_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'PubSubServiceDescriptor',\n isType: true,\n};\n\n/**\n * Represents a command model specifically designed for handling resource caching in Aura applications.\n * This model extends `AuraCommandModel` and overrides the service dependencies to include cache control services.\n */\nexport class AuraResourceCachingCommandModel extends AuraCommandModel {\n /**\n * Overrides the serviceDependencies getter to customize dependencies for caching.\n * Adds specific dependencies related to cache control, while preserving the base dependencies from `AuraCommandModel`.\n * @returns {CommandServiceDependencies} An object detailing the service dependencies for caching.\n */\n\n get serviceDependencies() {\n const deps = super.serviceDependencies;\n\n deps.baseClass = {\n version: '1.0' as const,\n descriptor: AURA_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_AURA_CACHE_CONTROL_COMMAND_SERVICE,\n localName: 'auraResourceCacheControlCommand',\n serviceName: 'auraResourceCacheControlCommand',\n };\n\n deps.inherited.push({\n version: '1.0' as const,\n descriptor: CACHE_CONTROL_SERVICE_DESCRIPTOR,\n namedService: NAMED_CACHE_CONTROL_SERVICE,\n localName: 'cacheController',\n serviceName: 'cacheController',\n });\n\n deps.inherited.push({\n version: '1.0' as const,\n descriptor: PUBSUB_SERVICE_DESCRIPTOR,\n namedService: NAMED_PUBSUB_SERVICE,\n localName: 'pubSub',\n serviceName: 'pubSub',\n optional: true,\n });\n\n return deps;\n }\n}\n","import { type ImportableReference } from '../files';\nimport { AuraCommandGenerator } from './aura-command-generator';\nimport { NormalizedCacheControlGeneratorMixin } from './normalized-cache-control-generator-mixin';\n\nconst AURA_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS = {\n module: '@conduit-client/command-aura-normalized-cache-control/v1',\n exportedSymbol: 'AuraNormalizedCacheControlCommand',\n isType: true,\n} as const satisfies ImportableReference;\n\nexport const AuraNormalizedCacheControlCommandGenerator = NormalizedCacheControlGeneratorMixin(\n AuraCommandGenerator,\n AURA_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS\n);\n","import { type ImportableReference } from '../files';\nimport { HttpCommandGenerator } from './http-command-generator';\nimport { NormalizedCacheControlGeneratorMixin } from './normalized-cache-control-generator-mixin';\n\nconst HTTP_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS = {\n module: '@conduit-client/command-http-normalized-cache-control/v1',\n exportedSymbol: 'HttpNormalizedCacheControlCommand',\n isType: true,\n} as const satisfies ImportableReference;\n\nexport const HttpNormalizedCacheControlCommandGenerator = NormalizedCacheControlGeneratorMixin(\n HttpCommandGenerator,\n HTTP_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS\n);\n","import { HttpCommandModel } from './http-command-model';\nimport type { ImportableReference } from '../files';\n\nconst HTTP_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-http-normalized-cache-control/v1',\n exportedSymbol: 'HttpNormalizedCacheControlCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_HTTP_CACHE_CONTROL_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-http-normalized-cache-control/v1',\n exportedSymbol: 'NamedHttpNormalizedCacheControlCommand',\n isType: true,\n};\n\nconst NAMED_CACHE_CONTROL_SERVICE: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'NamedCacheControllerService',\n isType: true,\n};\n\nconst CACHE_CONTROL_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-cache-control/v1',\n exportedSymbol: 'CacheControllerServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_PUBSUB_SERVICE: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'NamedPubSubService',\n isType: true,\n};\n\nconst PUBSUB_SERVICE_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/service-pubsub/v1',\n exportedSymbol: 'PubSubServiceDescriptor',\n isType: true,\n};\n\n/**\n * Represents a command model specifically designed for handling normalized caching for HTTP transport adapters.\n * This model extends `HttpCommandModel` and overrides the service dependencies to include cache control services.\n */\nexport class HttpNormalizedCachingCommandModel extends HttpCommandModel {\n get serviceDependencies() {\n const deps = super.serviceDependencies;\n\n deps.baseClass = {\n version: '1.0' as const,\n descriptor: HTTP_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_HTTP_CACHE_CONTROL_COMMAND_SERVICE,\n localName: 'httpNormalizedCacheControlCommand',\n serviceName: 'httpNormalizedCacheControlCommand',\n };\n\n deps.inherited.push({\n version: '1.0' as const,\n descriptor: CACHE_CONTROL_SERVICE_DESCRIPTOR,\n namedService: NAMED_CACHE_CONTROL_SERVICE,\n localName: 'cacheController',\n serviceName: 'cacheController',\n });\n\n deps.inherited.push({\n version: '1.0' as const,\n descriptor: PUBSUB_SERVICE_DESCRIPTOR,\n namedService: NAMED_PUBSUB_SERVICE,\n localName: 'pubSub',\n serviceName: 'pubSub',\n optional: true,\n });\n\n return deps;\n }\n}\n","export default function devAssert(condition, message) {\n var booleanCondition = Boolean(condition); // istanbul ignore else (See transformation done in './resources/inlineInvariant.js')\n\n if (!booleanCondition) {\n throw new Error(message);\n }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport default function isObjectLike(value) {\n return _typeof(value) == 'object' && value !== null;\n}\n","// In ES2015 (or a polyfilled) environment, this will be Symbol.iterator\n// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\nexport var SYMBOL_ITERATOR = typeof Symbol === 'function' && Symbol.iterator != null ? Symbol.iterator : '@@iterator'; // In ES2017 (or a polyfilled) environment, this will be Symbol.asyncIterator\n// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\nexport var SYMBOL_ASYNC_ITERATOR = typeof Symbol === 'function' && Symbol.asyncIterator != null ? Symbol.asyncIterator : '@@asyncIterator'; // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\nexport var SYMBOL_TO_STRING_TAG = typeof Symbol === 'function' && Symbol.toStringTag != null ? Symbol.toStringTag : '@@toStringTag';\n","/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n var lineRegexp = /\\r\\n|[\\n\\r]/g;\n var line = 1;\n var column = position + 1;\n var match;\n\n while ((match = lineRegexp.exec(source.body)) && match.index < position) {\n line += 1;\n column = position + 1 - (match.index + match[0].length);\n }\n\n return {\n line: line,\n column: column\n };\n}\n","import { getLocation } from \"./location.mjs\";\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printLocation(location) {\n return printSourceLocation(location.source, getLocation(location.source, location.start));\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printSourceLocation(source, sourceLocation) {\n var firstLineColumnOffset = source.locationOffset.column - 1;\n var body = whitespace(firstLineColumnOffset) + source.body;\n var lineIndex = sourceLocation.line - 1;\n var lineOffset = source.locationOffset.line - 1;\n var lineNum = sourceLocation.line + lineOffset;\n var columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n var columnNum = sourceLocation.column + columnOffset;\n var locationStr = \"\".concat(source.name, \":\").concat(lineNum, \":\").concat(columnNum, \"\\n\");\n var lines = body.split(/\\r\\n|[\\n\\r]/g);\n var locationLine = lines[lineIndex]; // Special case for minified documents\n\n if (locationLine.length > 120) {\n var subLineIndex = Math.floor(columnNum / 80);\n var subLineColumnNum = columnNum % 80;\n var subLines = [];\n\n for (var i = 0; i < locationLine.length; i += 80) {\n subLines.push(locationLine.slice(i, i + 80));\n }\n\n return locationStr + printPrefixedLines([[\"\".concat(lineNum), subLines[0]]].concat(subLines.slice(1, subLineIndex + 1).map(function (subLine) {\n return ['', subLine];\n }), [[' ', whitespace(subLineColumnNum - 1) + '^'], ['', subLines[subLineIndex + 1]]]));\n }\n\n return locationStr + printPrefixedLines([// Lines specified like this: [\"prefix\", \"string\"],\n [\"\".concat(lineNum - 1), lines[lineIndex - 1]], [\"\".concat(lineNum), locationLine], ['', whitespace(columnNum - 1) + '^'], [\"\".concat(lineNum + 1), lines[lineIndex + 1]]]);\n}\n\nfunction printPrefixedLines(lines) {\n var existingLines = lines.filter(function (_ref) {\n var _ = _ref[0],\n line = _ref[1];\n return line !== undefined;\n });\n var padLen = Math.max.apply(Math, existingLines.map(function (_ref2) {\n var prefix = _ref2[0];\n return prefix.length;\n }));\n return existingLines.map(function (_ref3) {\n var prefix = _ref3[0],\n line = _ref3[1];\n return leftPad(padLen, prefix) + (line ? ' | ' + line : ' |');\n }).join('\\n');\n}\n\nfunction whitespace(len) {\n return Array(len + 1).join(' ');\n}\n\nfunction leftPad(len, str) {\n return whitespace(len - str.length) + str;\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport devAssert from \"../jsutils/devAssert.mjs\";\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport { SYMBOL_TO_STRING_TAG } from \"../polyfills/symbols.mjs\";\nimport { getLocation } from \"../language/location.mjs\";\nimport { printLocation, printSourceLocation } from \"../language/printLocation.mjs\";\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nexport var GraphQLError = /*#__PURE__*/function (_Error) {\n _inherits(GraphQLError, _Error);\n\n var _super = _createSuper(GraphQLError);\n\n /**\n * An array of { line, column } locations within the source GraphQL document\n * which correspond to this error.\n *\n * Errors during validation often contain multiple locations, for example to\n * point out two things with the same name. Errors during execution include a\n * single location, the field which produced the error.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array describing the JSON-path into the execution response which\n * corresponds to this error. Only included for errors during execution.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array of GraphQL AST Nodes corresponding to this error.\n */\n\n /**\n * The source GraphQL document for the first location of this error.\n *\n * Note that if this Error represents more than one node, the source may not\n * represent nodes after the first node.\n */\n\n /**\n * An array of character offsets within the source GraphQL document\n * which correspond to this error.\n */\n\n /**\n * The original error thrown from a field resolver during execution.\n */\n\n /**\n * Extension fields to add to the formatted error.\n */\n function GraphQLError(message, nodes, source, positions, path, originalError, extensions) {\n var _nodeLocations, _nodeLocations2, _nodeLocations3;\n\n var _this;\n\n _classCallCheck(this, GraphQLError);\n\n _this = _super.call(this, message);\n _this.name = 'GraphQLError';\n _this.originalError = originalError !== null && originalError !== void 0 ? originalError : undefined; // Compute list of blame nodes.\n\n _this.nodes = undefinedIfEmpty(Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined);\n var nodeLocations = [];\n\n for (var _i2 = 0, _ref3 = (_this$nodes = _this.nodes) !== null && _this$nodes !== void 0 ? _this$nodes : []; _i2 < _ref3.length; _i2++) {\n var _this$nodes;\n\n var _ref4 = _ref3[_i2];\n var loc = _ref4.loc;\n\n if (loc != null) {\n nodeLocations.push(loc);\n }\n }\n\n nodeLocations = undefinedIfEmpty(nodeLocations); // Compute locations in the source for the given nodes/positions.\n\n _this.source = source !== null && source !== void 0 ? source : (_nodeLocations = nodeLocations) === null || _nodeLocations === void 0 ? void 0 : _nodeLocations[0].source;\n _this.positions = positions !== null && positions !== void 0 ? positions : (_nodeLocations2 = nodeLocations) === null || _nodeLocations2 === void 0 ? void 0 : _nodeLocations2.map(function (loc) {\n return loc.start;\n });\n _this.locations = positions && source ? positions.map(function (pos) {\n return getLocation(source, pos);\n }) : (_nodeLocations3 = nodeLocations) === null || _nodeLocations3 === void 0 ? void 0 : _nodeLocations3.map(function (loc) {\n return getLocation(loc.source, loc.start);\n });\n _this.path = path !== null && path !== void 0 ? path : undefined;\n var originalExtensions = originalError === null || originalError === void 0 ? void 0 : originalError.extensions;\n\n if (extensions == null && isObjectLike(originalExtensions)) {\n _this.extensions = _objectSpread({}, originalExtensions);\n } else {\n _this.extensions = extensions !== null && extensions !== void 0 ? extensions : {};\n } // By being enumerable, JSON.stringify will include bellow properties in the resulting output.\n // This ensures that the simplest possible GraphQL service adheres to the spec.\n\n\n Object.defineProperties(_assertThisInitialized(_this), {\n message: {\n enumerable: true\n },\n locations: {\n enumerable: _this.locations != null\n },\n path: {\n enumerable: _this.path != null\n },\n extensions: {\n enumerable: _this.extensions != null && Object.keys(_this.extensions).length > 0\n },\n name: {\n enumerable: false\n },\n nodes: {\n enumerable: false\n },\n source: {\n enumerable: false\n },\n positions: {\n enumerable: false\n },\n originalError: {\n enumerable: false\n }\n }); // Include (non-enumerable) stack trace.\n\n if (originalError !== null && originalError !== void 0 && originalError.stack) {\n Object.defineProperty(_assertThisInitialized(_this), 'stack', {\n value: originalError.stack,\n writable: true,\n configurable: true\n });\n return _possibleConstructorReturn(_this);\n } // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_assertThisInitialized(_this), GraphQLError);\n } else {\n Object.defineProperty(_assertThisInitialized(_this), 'stack', {\n value: Error().stack,\n writable: true,\n configurable: true\n });\n }\n\n return _this;\n }\n\n _createClass(GraphQLError, [{\n key: \"toString\",\n value: function toString() {\n return printError(this);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return formatError(this);\n } // FIXME: workaround to not break chai comparisons, should be remove in v16\n // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n\n }, {\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'Object';\n }\n }]);\n\n return GraphQLError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nfunction undefinedIfEmpty(array) {\n return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n */\n\n\nexport function printError(error) {\n var output = error.message;\n\n if (error.nodes) {\n for (var _i4 = 0, _error$nodes2 = error.nodes; _i4 < _error$nodes2.length; _i4++) {\n var node = _error$nodes2[_i4];\n\n if (node.loc) {\n output += '\\n\\n' + printLocation(node.loc);\n }\n }\n } else if (error.source && error.locations) {\n for (var _i6 = 0, _error$locations2 = error.locations; _i6 < _error$locations2.length; _i6++) {\n var location = _error$locations2[_i6];\n output += '\\n\\n' + printSourceLocation(error.source, location);\n }\n }\n\n return output;\n}\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n */\n\nexport function formatError(error) {\n var _error$message;\n\n error || devAssert(0, 'Received null or undefined error.');\n var message = (_error$message = error.message) !== null && _error$message !== void 0 ? _error$message : 'An unknown error occurred.';\n var locations = error.locations;\n var path = error.path;\n var extensions = error.extensions;\n return extensions && Object.keys(extensions).length > 0 ? {\n message: message,\n locations: locations,\n path: path,\n extensions: extensions\n } : {\n message: message,\n locations: locations,\n path: path\n };\n}\n/**\n * @see https://github.com/graphql/graphql-spec/blob/master/spec/Section%207%20--%20Response.md#errors\n */\n","import { GraphQLError } from \"./GraphQLError.mjs\";\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n\nexport function syntaxError(source, position, description) {\n return new GraphQLError(\"Syntax Error: \".concat(description), undefined, source, [position]);\n}\n","/**\n * The set of allowed kind values for AST nodes.\n */\nexport var Kind = Object.freeze({\n // Name\n NAME: 'Name',\n // Document\n DOCUMENT: 'Document',\n OPERATION_DEFINITION: 'OperationDefinition',\n VARIABLE_DEFINITION: 'VariableDefinition',\n SELECTION_SET: 'SelectionSet',\n FIELD: 'Field',\n ARGUMENT: 'Argument',\n // Fragments\n FRAGMENT_SPREAD: 'FragmentSpread',\n INLINE_FRAGMENT: 'InlineFragment',\n FRAGMENT_DEFINITION: 'FragmentDefinition',\n // Values\n VARIABLE: 'Variable',\n INT: 'IntValue',\n FLOAT: 'FloatValue',\n STRING: 'StringValue',\n BOOLEAN: 'BooleanValue',\n NULL: 'NullValue',\n ENUM: 'EnumValue',\n LIST: 'ListValue',\n OBJECT: 'ObjectValue',\n OBJECT_FIELD: 'ObjectField',\n // Directives\n DIRECTIVE: 'Directive',\n // Types\n NAMED_TYPE: 'NamedType',\n LIST_TYPE: 'ListType',\n NON_NULL_TYPE: 'NonNullType',\n // Type System Definitions\n SCHEMA_DEFINITION: 'SchemaDefinition',\n OPERATION_TYPE_DEFINITION: 'OperationTypeDefinition',\n // Type Definitions\n SCALAR_TYPE_DEFINITION: 'ScalarTypeDefinition',\n OBJECT_TYPE_DEFINITION: 'ObjectTypeDefinition',\n FIELD_DEFINITION: 'FieldDefinition',\n INPUT_VALUE_DEFINITION: 'InputValueDefinition',\n INTERFACE_TYPE_DEFINITION: 'InterfaceTypeDefinition',\n UNION_TYPE_DEFINITION: 'UnionTypeDefinition',\n ENUM_TYPE_DEFINITION: 'EnumTypeDefinition',\n ENUM_VALUE_DEFINITION: 'EnumValueDefinition',\n INPUT_OBJECT_TYPE_DEFINITION: 'InputObjectTypeDefinition',\n // Directive Definitions\n DIRECTIVE_DEFINITION: 'DirectiveDefinition',\n // Type System Extensions\n SCHEMA_EXTENSION: 'SchemaExtension',\n // Type Extensions\n SCALAR_TYPE_EXTENSION: 'ScalarTypeExtension',\n OBJECT_TYPE_EXTENSION: 'ObjectTypeExtension',\n INTERFACE_TYPE_EXTENSION: 'InterfaceTypeExtension',\n UNION_TYPE_EXTENSION: 'UnionTypeExtension',\n ENUM_TYPE_EXTENSION: 'EnumTypeExtension',\n INPUT_OBJECT_TYPE_EXTENSION: 'InputObjectTypeExtension'\n});\n/**\n * The enum type representing the possible kind values of AST nodes.\n */\n","export default function invariant(condition, message) {\n var booleanCondition = Boolean(condition); // istanbul ignore else (See transformation done in './resources/inlineInvariant.js')\n\n if (!booleanCondition) {\n throw new Error(message != null ? message : 'Unexpected invariant triggered.');\n }\n}\n","// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\nvar nodejsCustomInspectSymbol = typeof Symbol === 'function' && typeof Symbol.for === 'function' ? Symbol.for('nodejs.util.inspect.custom') : undefined;\nexport default nodejsCustomInspectSymbol;\n","import invariant from \"./invariant.mjs\";\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\n/**\n * The `defineInspect()` function defines `inspect()` prototype method as alias of `toJSON`\n */\n\nexport default function defineInspect(classObject) {\n var fn = classObject.prototype.toJSON;\n typeof fn === 'function' || invariant(0);\n classObject.prototype.inspect = fn; // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\n if (nodejsCustomInspectSymbol) {\n classObject.prototype[nodejsCustomInspectSymbol] = fn;\n }\n}\n","import defineInspect from \"../jsutils/defineInspect.mjs\";\n\n/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport var Location = /*#__PURE__*/function () {\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The Token at which this Node begins.\n */\n\n /**\n * The Token at which this Node ends.\n */\n\n /**\n * The Source document the AST represents.\n */\n function Location(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n }\n\n var _proto = Location.prototype;\n\n _proto.toJSON = function toJSON() {\n return {\n start: this.start,\n end: this.end\n };\n };\n\n return Location;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Location);\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport var Token = /*#__PURE__*/function () {\n /**\n * The kind of Token.\n */\n\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The 1-indexed line number on which this Token appears.\n */\n\n /**\n * The 1-indexed column number at which this Token begins.\n */\n\n /**\n * For non-punctuation tokens, represents the interpreted value of the token.\n */\n\n /**\n * Tokens exist as nodes in a double-linked-list amongst all tokens\n * including ignored tokens. <SOF> is always the first node and <EOF>\n * the last.\n */\n function Token(kind, start, end, line, column, prev, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column;\n this.value = value;\n this.prev = prev;\n this.next = null;\n }\n\n var _proto2 = Token.prototype;\n\n _proto2.toJSON = function toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column\n };\n };\n\n return Token;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Token);\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n return maybeNode != null && typeof maybeNode.kind === 'string';\n}\n/**\n * The list of all possible AST node types.\n */\n","/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nexport var TokenKind = Object.freeze({\n SOF: '<SOF>',\n EOF: '<EOF>',\n BANG: '!',\n DOLLAR: '$',\n AMP: '&',\n PAREN_L: '(',\n PAREN_R: ')',\n SPREAD: '...',\n COLON: ':',\n EQUALS: '=',\n AT: '@',\n BRACKET_L: '[',\n BRACKET_R: ']',\n BRACE_L: '{',\n PIPE: '|',\n BRACE_R: '}',\n NAME: 'Name',\n INT: 'Int',\n FLOAT: 'Float',\n STRING: 'String',\n BLOCK_STRING: 'BlockString',\n COMMENT: 'Comment'\n});\n/**\n * The enum type representing the token kinds values.\n */\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-disable flowtype/no-weak-types */\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\nvar MAX_ARRAY_LENGTH = 10;\nvar MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport default function inspect(value) {\n return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n switch (_typeof(value)) {\n case 'string':\n return JSON.stringify(value);\n\n case 'function':\n return value.name ? \"[function \".concat(value.name, \"]\") : '[function]';\n\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n return formatObjectValue(value, seenValues);\n\n default:\n return String(value);\n }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n if (previouslySeenValues.indexOf(value) !== -1) {\n return '[Circular]';\n }\n\n var seenValues = [].concat(previouslySeenValues, [value]);\n var customInspectFn = getCustomFn(value);\n\n if (customInspectFn !== undefined) {\n var customValue = customInspectFn.call(value); // check for infinite recursion\n\n if (customValue !== value) {\n return typeof customValue === 'string' ? customValue : formatValue(customValue, seenValues);\n }\n } else if (Array.isArray(value)) {\n return formatArray(value, seenValues);\n }\n\n return formatObject(value, seenValues);\n}\n\nfunction formatObject(object, seenValues) {\n var keys = Object.keys(object);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[' + getObjectTag(object) + ']';\n }\n\n var properties = keys.map(function (key) {\n var value = formatValue(object[key], seenValues);\n return key + ': ' + value;\n });\n return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n if (array.length === 0) {\n return '[]';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[Array]';\n }\n\n var len = Math.min(MAX_ARRAY_LENGTH, array.length);\n var remaining = array.length - len;\n var items = [];\n\n for (var i = 0; i < len; ++i) {\n items.push(formatValue(array[i], seenValues));\n }\n\n if (remaining === 1) {\n items.push('... 1 more item');\n } else if (remaining > 1) {\n items.push(\"... \".concat(remaining, \" more items\"));\n }\n\n return '[' + items.join(', ') + ']';\n}\n\nfunction getCustomFn(object) {\n var customInspectFn = object[String(nodejsCustomInspectSymbol)];\n\n if (typeof customInspectFn === 'function') {\n return customInspectFn;\n }\n\n if (typeof object.inspect === 'function') {\n return object.inspect;\n }\n}\n\nfunction getObjectTag(object) {\n var tag = Object.prototype.toString.call(object).replace(/^\\[object /, '').replace(/]$/, '');\n\n if (tag === 'Object' && typeof object.constructor === 'function') {\n var name = object.constructor.name;\n\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n }\n\n return tag;\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport inspect from \"./inspect.mjs\";\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n */\n\n// See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n// See: https://webpack.js.org/guides/production/\nexport default process.env.NODE_ENV === 'production' ? // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n// eslint-disable-next-line no-shadow\nfunction instanceOf(value, constructor) {\n return value instanceof constructor;\n} : // eslint-disable-next-line no-shadow\nfunction instanceOf(value, constructor) {\n if (value instanceof constructor) {\n return true;\n }\n\n if (_typeof(value) === 'object' && value !== null) {\n var _value$constructor;\n\n var className = constructor.prototype[Symbol.toStringTag];\n var valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.\n Symbol.toStringTag in value ? value[Symbol.toStringTag] : (_value$constructor = value.constructor) === null || _value$constructor === void 0 ? void 0 : _value$constructor.name;\n\n if (className === valueClassName) {\n var stringifiedValue = inspect(value);\n throw new Error(\"Cannot use \".concat(className, \" \\\"\").concat(stringifiedValue, \"\\\" from another module or realm.\\n\\nEnsure that there is only one instance of \\\"graphql\\\" in the node_modules\\ndirectory. If different versions of \\\"graphql\\\" are the dependencies of other\\nrelied on modules, use \\\"resolutions\\\" to ensure only one version is installed.\\n\\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\\n\\nDuplicate \\\"graphql\\\" modules cannot be used at the same time since different\\nversions may have different capabilities and behavior. The data from one\\nversion used in the function from another could produce confusing and\\nspurious results.\"));\n }\n }\n\n return false;\n};\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { SYMBOL_TO_STRING_TAG } from \"../polyfills/symbols.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport devAssert from \"../jsutils/devAssert.mjs\";\nimport instanceOf from \"../jsutils/instanceOf.mjs\";\n\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nexport var Source = /*#__PURE__*/function () {\n function Source(body) {\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'GraphQL request';\n var locationOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n line: 1,\n column: 1\n };\n typeof body === 'string' || devAssert(0, \"Body must be a string. Received: \".concat(inspect(body), \".\"));\n this.body = body;\n this.name = name;\n this.locationOffset = locationOffset;\n this.locationOffset.line > 0 || devAssert(0, 'line in locationOffset is 1-indexed and must be positive.');\n this.locationOffset.column > 0 || devAssert(0, 'column in locationOffset is 1-indexed and must be positive.');\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n\n\n _createClass(Source, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'Source';\n }\n }]);\n\n return Source;\n}();\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isSource(source) {\n return instanceOf(source, Source);\n}\n","/**\n * The set of allowed directive location values.\n */\nexport var DirectiveLocation = Object.freeze({\n // Request Definitions\n QUERY: 'QUERY',\n MUTATION: 'MUTATION',\n SUBSCRIPTION: 'SUBSCRIPTION',\n FIELD: 'FIELD',\n FRAGMENT_DEFINITION: 'FRAGMENT_DEFINITION',\n FRAGMENT_SPREAD: 'FRAGMENT_SPREAD',\n INLINE_FRAGMENT: 'INLINE_FRAGMENT',\n VARIABLE_DEFINITION: 'VARIABLE_DEFINITION',\n // Type System Definitions\n SCHEMA: 'SCHEMA',\n SCALAR: 'SCALAR',\n OBJECT: 'OBJECT',\n FIELD_DEFINITION: 'FIELD_DEFINITION',\n ARGUMENT_DEFINITION: 'ARGUMENT_DEFINITION',\n INTERFACE: 'INTERFACE',\n UNION: 'UNION',\n ENUM: 'ENUM',\n ENUM_VALUE: 'ENUM_VALUE',\n INPUT_OBJECT: 'INPUT_OBJECT',\n INPUT_FIELD_DEFINITION: 'INPUT_FIELD_DEFINITION'\n});\n/**\n * The enum type representing the directive location values.\n */\n","/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\nexport function dedentBlockStringValue(rawString) {\n // Expand a block string's raw value into independent lines.\n var lines = rawString.split(/\\r\\n|[\\n\\r]/g); // Remove common indentation from all lines but first.\n\n var commonIndent = getBlockStringIndentation(rawString);\n\n if (commonIndent !== 0) {\n for (var i = 1; i < lines.length; i++) {\n lines[i] = lines[i].slice(commonIndent);\n }\n } // Remove leading and trailing blank lines.\n\n\n var startLine = 0;\n\n while (startLine < lines.length && isBlank(lines[startLine])) {\n ++startLine;\n }\n\n var endLine = lines.length;\n\n while (endLine > startLine && isBlank(lines[endLine - 1])) {\n --endLine;\n } // Return a string of the lines joined with U+000A.\n\n\n return lines.slice(startLine, endLine).join('\\n');\n}\n\nfunction isBlank(str) {\n for (var i = 0; i < str.length; ++i) {\n if (str[i] !== ' ' && str[i] !== '\\t') {\n return false;\n }\n }\n\n return true;\n}\n/**\n * @internal\n */\n\n\nexport function getBlockStringIndentation(value) {\n var _commonIndent;\n\n var isFirstLine = true;\n var isEmptyLine = true;\n var indent = 0;\n var commonIndent = null;\n\n for (var i = 0; i < value.length; ++i) {\n switch (value.charCodeAt(i)) {\n case 13:\n // \\r\n if (value.charCodeAt(i + 1) === 10) {\n ++i; // skip \\r\\n as one symbol\n }\n\n // falls through\n\n case 10:\n // \\n\n isFirstLine = false;\n isEmptyLine = true;\n indent = 0;\n break;\n\n case 9: // \\t\n\n case 32:\n // <space>\n ++indent;\n break;\n\n default:\n if (isEmptyLine && !isFirstLine && (commonIndent === null || indent < commonIndent)) {\n commonIndent = indent;\n }\n\n isEmptyLine = false;\n }\n }\n\n return (_commonIndent = commonIndent) !== null && _commonIndent !== void 0 ? _commonIndent : 0;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value) {\n var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var preferMultipleLines = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var isSingleLine = value.indexOf('\\n') === -1;\n var hasLeadingSpace = value[0] === ' ' || value[0] === '\\t';\n var hasTrailingQuote = value[value.length - 1] === '\"';\n var hasTrailingSlash = value[value.length - 1] === '\\\\';\n var printAsMultipleLines = !isSingleLine || hasTrailingQuote || hasTrailingSlash || preferMultipleLines;\n var result = ''; // Format a multi-line block quote to account for leading space.\n\n if (printAsMultipleLines && !(isSingleLine && hasLeadingSpace)) {\n result += '\\n' + indentation;\n }\n\n result += indentation ? value.replace(/\\n/g, '\\n' + indentation) : value;\n\n if (printAsMultipleLines) {\n result += '\\n';\n }\n\n return '\"\"\"' + result.replace(/\"\"\"/g, '\\\\\"\"\"') + '\"\"\"';\n}\n","import { syntaxError } from \"../error/syntaxError.mjs\";\nimport { Token } from \"./ast.mjs\";\nimport { TokenKind } from \"./tokenKind.mjs\";\nimport { dedentBlockStringValue } from \"./blockString.mjs\";\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\n\nexport var Lexer = /*#__PURE__*/function () {\n /**\n * The previously focused non-ignored token.\n */\n\n /**\n * The currently focused non-ignored token.\n */\n\n /**\n * The (1-indexed) line containing the current token.\n */\n\n /**\n * The character offset at which the current line begins.\n */\n function Lexer(source) {\n var startOfFileToken = new Token(TokenKind.SOF, 0, 0, 0, 0, null);\n this.source = source;\n this.lastToken = startOfFileToken;\n this.token = startOfFileToken;\n this.line = 1;\n this.lineStart = 0;\n }\n /**\n * Advances the token stream to the next non-ignored token.\n */\n\n\n var _proto = Lexer.prototype;\n\n _proto.advance = function advance() {\n this.lastToken = this.token;\n var token = this.token = this.lookahead();\n return token;\n }\n /**\n * Looks ahead and returns the next non-ignored token, but does not change\n * the state of Lexer.\n */\n ;\n\n _proto.lookahead = function lookahead() {\n var token = this.token;\n\n if (token.kind !== TokenKind.EOF) {\n do {\n var _token$next;\n\n // Note: next is only mutable during parsing, so we cast to allow this.\n token = (_token$next = token.next) !== null && _token$next !== void 0 ? _token$next : token.next = readToken(this, token);\n } while (token.kind === TokenKind.COMMENT);\n }\n\n return token;\n };\n\n return Lexer;\n}();\n/**\n * @internal\n */\n\nexport function isPunctuatorTokenKind(kind) {\n return kind === TokenKind.BANG || kind === TokenKind.DOLLAR || kind === TokenKind.AMP || kind === TokenKind.PAREN_L || kind === TokenKind.PAREN_R || kind === TokenKind.SPREAD || kind === TokenKind.COLON || kind === TokenKind.EQUALS || kind === TokenKind.AT || kind === TokenKind.BRACKET_L || kind === TokenKind.BRACKET_R || kind === TokenKind.BRACE_L || kind === TokenKind.PIPE || kind === TokenKind.BRACE_R;\n}\n\nfunction printCharCode(code) {\n return (// NaN/undefined represents access beyond the end of the file.\n isNaN(code) ? TokenKind.EOF : // Trust JSON for ASCII.\n code < 0x007f ? JSON.stringify(String.fromCharCode(code)) : // Otherwise print the escaped form.\n \"\\\"\\\\u\".concat(('00' + code.toString(16).toUpperCase()).slice(-4), \"\\\"\")\n );\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n */\n\n\nfunction readToken(lexer, prev) {\n var source = lexer.source;\n var body = source.body;\n var bodyLength = body.length;\n var pos = prev.end;\n\n while (pos < bodyLength) {\n var code = body.charCodeAt(pos);\n var _line = lexer.line;\n\n var _col = 1 + pos - lexer.lineStart; // SourceCharacter\n\n\n switch (code) {\n case 0xfeff: // <BOM>\n\n case 9: // \\t\n\n case 32: // <space>\n\n case 44:\n // ,\n ++pos;\n continue;\n\n case 10:\n // \\n\n ++pos;\n ++lexer.line;\n lexer.lineStart = pos;\n continue;\n\n case 13:\n // \\r\n if (body.charCodeAt(pos + 1) === 10) {\n pos += 2;\n } else {\n ++pos;\n }\n\n ++lexer.line;\n lexer.lineStart = pos;\n continue;\n\n case 33:\n // !\n return new Token(TokenKind.BANG, pos, pos + 1, _line, _col, prev);\n\n case 35:\n // #\n return readComment(source, pos, _line, _col, prev);\n\n case 36:\n // $\n return new Token(TokenKind.DOLLAR, pos, pos + 1, _line, _col, prev);\n\n case 38:\n // &\n return new Token(TokenKind.AMP, pos, pos + 1, _line, _col, prev);\n\n case 40:\n // (\n return new Token(TokenKind.PAREN_L, pos, pos + 1, _line, _col, prev);\n\n case 41:\n // )\n return new Token(TokenKind.PAREN_R, pos, pos + 1, _line, _col, prev);\n\n case 46:\n // .\n if (body.charCodeAt(pos + 1) === 46 && body.charCodeAt(pos + 2) === 46) {\n return new Token(TokenKind.SPREAD, pos, pos + 3, _line, _col, prev);\n }\n\n break;\n\n case 58:\n // :\n return new Token(TokenKind.COLON, pos, pos + 1, _line, _col, prev);\n\n case 61:\n // =\n return new Token(TokenKind.EQUALS, pos, pos + 1, _line, _col, prev);\n\n case 64:\n // @\n return new Token(TokenKind.AT, pos, pos + 1, _line, _col, prev);\n\n case 91:\n // [\n return new Token(TokenKind.BRACKET_L, pos, pos + 1, _line, _col, prev);\n\n case 93:\n // ]\n return new Token(TokenKind.BRACKET_R, pos, pos + 1, _line, _col, prev);\n\n case 123:\n // {\n return new Token(TokenKind.BRACE_L, pos, pos + 1, _line, _col, prev);\n\n case 124:\n // |\n return new Token(TokenKind.PIPE, pos, pos + 1, _line, _col, prev);\n\n case 125:\n // }\n return new Token(TokenKind.BRACE_R, pos, pos + 1, _line, _col, prev);\n\n case 34:\n // \"\n if (body.charCodeAt(pos + 1) === 34 && body.charCodeAt(pos + 2) === 34) {\n return readBlockString(source, pos, _line, _col, prev, lexer);\n }\n\n return readString(source, pos, _line, _col, prev);\n\n case 45: // -\n\n case 48: // 0\n\n case 49: // 1\n\n case 50: // 2\n\n case 51: // 3\n\n case 52: // 4\n\n case 53: // 5\n\n case 54: // 6\n\n case 55: // 7\n\n case 56: // 8\n\n case 57:\n // 9\n return readNumber(source, pos, code, _line, _col, prev);\n\n case 65: // A\n\n case 66: // B\n\n case 67: // C\n\n case 68: // D\n\n case 69: // E\n\n case 70: // F\n\n case 71: // G\n\n case 72: // H\n\n case 73: // I\n\n case 74: // J\n\n case 75: // K\n\n case 76: // L\n\n case 77: // M\n\n case 78: // N\n\n case 79: // O\n\n case 80: // P\n\n case 81: // Q\n\n case 82: // R\n\n case 83: // S\n\n case 84: // T\n\n case 85: // U\n\n case 86: // V\n\n case 87: // W\n\n case 88: // X\n\n case 89: // Y\n\n case 90: // Z\n\n case 95: // _\n\n case 97: // a\n\n case 98: // b\n\n case 99: // c\n\n case 100: // d\n\n case 101: // e\n\n case 102: // f\n\n case 103: // g\n\n case 104: // h\n\n case 105: // i\n\n case 106: // j\n\n case 107: // k\n\n case 108: // l\n\n case 109: // m\n\n case 110: // n\n\n case 111: // o\n\n case 112: // p\n\n case 113: // q\n\n case 114: // r\n\n case 115: // s\n\n case 116: // t\n\n case 117: // u\n\n case 118: // v\n\n case 119: // w\n\n case 120: // x\n\n case 121: // y\n\n case 122:\n // z\n return readName(source, pos, _line, _col, prev);\n }\n\n throw syntaxError(source, pos, unexpectedCharacterMessage(code));\n }\n\n var line = lexer.line;\n var col = 1 + pos - lexer.lineStart;\n return new Token(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);\n}\n/**\n * Report a message that an unexpected character was encountered.\n */\n\n\nfunction unexpectedCharacterMessage(code) {\n if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n return \"Cannot contain the invalid character \".concat(printCharCode(code), \".\");\n }\n\n if (code === 39) {\n // '\n return 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?';\n }\n\n return \"Cannot parse the unexpected character \".concat(printCharCode(code), \".\");\n}\n/**\n * Reads a comment token from the source file.\n *\n * #[\\u0009\\u0020-\\uFFFF]*\n */\n\n\nfunction readComment(source, start, line, col, prev) {\n var body = source.body;\n var code;\n var position = start;\n\n do {\n code = body.charCodeAt(++position);\n } while (!isNaN(code) && ( // SourceCharacter but not LineTerminator\n code > 0x001f || code === 0x0009));\n\n return new Token(TokenKind.COMMENT, start, position, line, col, prev, body.slice(start + 1, position));\n}\n/**\n * Reads a number token from the source file, either a float\n * or an int depending on whether a decimal point appears.\n *\n * Int: -?(0|[1-9][0-9]*)\n * Float: -?(0|[1-9][0-9]*)(\\.[0-9]+)?((E|e)(+|-)?[0-9]+)?\n */\n\n\nfunction readNumber(source, start, firstCode, line, col, prev) {\n var body = source.body;\n var code = firstCode;\n var position = start;\n var isFloat = false;\n\n if (code === 45) {\n // -\n code = body.charCodeAt(++position);\n }\n\n if (code === 48) {\n // 0\n code = body.charCodeAt(++position);\n\n if (code >= 48 && code <= 57) {\n throw syntaxError(source, position, \"Invalid number, unexpected digit after 0: \".concat(printCharCode(code), \".\"));\n }\n } else {\n position = readDigits(source, position, code);\n code = body.charCodeAt(position);\n }\n\n if (code === 46) {\n // .\n isFloat = true;\n code = body.charCodeAt(++position);\n position = readDigits(source, position, code);\n code = body.charCodeAt(position);\n }\n\n if (code === 69 || code === 101) {\n // E e\n isFloat = true;\n code = body.charCodeAt(++position);\n\n if (code === 43 || code === 45) {\n // + -\n code = body.charCodeAt(++position);\n }\n\n position = readDigits(source, position, code);\n code = body.charCodeAt(position);\n } // Numbers cannot be followed by . or NameStart\n\n\n if (code === 46 || isNameStart(code)) {\n throw syntaxError(source, position, \"Invalid number, expected digit but got: \".concat(printCharCode(code), \".\"));\n }\n\n return new Token(isFloat ? TokenKind.FLOAT : TokenKind.INT, start, position, line, col, prev, body.slice(start, position));\n}\n/**\n * Returns the new position in the source after reading digits.\n */\n\n\nfunction readDigits(source, start, firstCode) {\n var body = source.body;\n var position = start;\n var code = firstCode;\n\n if (code >= 48 && code <= 57) {\n // 0 - 9\n do {\n code = body.charCodeAt(++position);\n } while (code >= 48 && code <= 57); // 0 - 9\n\n\n return position;\n }\n\n throw syntaxError(source, position, \"Invalid number, expected digit but got: \".concat(printCharCode(code), \".\"));\n}\n/**\n * Reads a string token from the source file.\n *\n * \"([^\"\\\\\\u000A\\u000D]|(\\\\(u[0-9a-fA-F]{4}|[\"\\\\/bfnrt])))*\"\n */\n\n\nfunction readString(source, start, line, col, prev) {\n var body = source.body;\n var position = start + 1;\n var chunkStart = position;\n var code = 0;\n var value = '';\n\n while (position < body.length && !isNaN(code = body.charCodeAt(position)) && // not LineTerminator\n code !== 0x000a && code !== 0x000d) {\n // Closing Quote (\")\n if (code === 34) {\n value += body.slice(chunkStart, position);\n return new Token(TokenKind.STRING, start, position + 1, line, col, prev, value);\n } // SourceCharacter\n\n\n if (code < 0x0020 && code !== 0x0009) {\n throw syntaxError(source, position, \"Invalid character within String: \".concat(printCharCode(code), \".\"));\n }\n\n ++position;\n\n if (code === 92) {\n // \\\n value += body.slice(chunkStart, position - 1);\n code = body.charCodeAt(position);\n\n switch (code) {\n case 34:\n value += '\"';\n break;\n\n case 47:\n value += '/';\n break;\n\n case 92:\n value += '\\\\';\n break;\n\n case 98:\n value += '\\b';\n break;\n\n case 102:\n value += '\\f';\n break;\n\n case 110:\n value += '\\n';\n break;\n\n case 114:\n value += '\\r';\n break;\n\n case 116:\n value += '\\t';\n break;\n\n case 117:\n {\n // uXXXX\n var charCode = uniCharCode(body.charCodeAt(position + 1), body.charCodeAt(position + 2), body.charCodeAt(position + 3), body.charCodeAt(position + 4));\n\n if (charCode < 0) {\n var invalidSequence = body.slice(position + 1, position + 5);\n throw syntaxError(source, position, \"Invalid character escape sequence: \\\\u\".concat(invalidSequence, \".\"));\n }\n\n value += String.fromCharCode(charCode);\n position += 4;\n break;\n }\n\n default:\n throw syntaxError(source, position, \"Invalid character escape sequence: \\\\\".concat(String.fromCharCode(code), \".\"));\n }\n\n ++position;\n chunkStart = position;\n }\n }\n\n throw syntaxError(source, position, 'Unterminated string.');\n}\n/**\n * Reads a block string token from the source file.\n *\n * \"\"\"(\"?\"?(\\\\\"\"\"|\\\\(?!=\"\"\")|[^\"\\\\]))*\"\"\"\n */\n\n\nfunction readBlockString(source, start, line, col, prev, lexer) {\n var body = source.body;\n var position = start + 3;\n var chunkStart = position;\n var code = 0;\n var rawValue = '';\n\n while (position < body.length && !isNaN(code = body.charCodeAt(position))) {\n // Closing Triple-Quote (\"\"\")\n if (code === 34 && body.charCodeAt(position + 1) === 34 && body.charCodeAt(position + 2) === 34) {\n rawValue += body.slice(chunkStart, position);\n return new Token(TokenKind.BLOCK_STRING, start, position + 3, line, col, prev, dedentBlockStringValue(rawValue));\n } // SourceCharacter\n\n\n if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n throw syntaxError(source, position, \"Invalid character within String: \".concat(printCharCode(code), \".\"));\n }\n\n if (code === 10) {\n // new line\n ++position;\n ++lexer.line;\n lexer.lineStart = position;\n } else if (code === 13) {\n // carriage return\n if (body.charCodeAt(position + 1) === 10) {\n position += 2;\n } else {\n ++position;\n }\n\n ++lexer.line;\n lexer.lineStart = position;\n } else if ( // Escape Triple-Quote (\\\"\"\")\n code === 92 && body.charCodeAt(position + 1) === 34 && body.charCodeAt(position + 2) === 34 && body.charCodeAt(position + 3) === 34) {\n rawValue += body.slice(chunkStart, position) + '\"\"\"';\n position += 4;\n chunkStart = position;\n } else {\n ++position;\n }\n }\n\n throw syntaxError(source, position, 'Unterminated string.');\n}\n/**\n * Converts four hexadecimal chars to the integer that the\n * string represents. For example, uniCharCode('0','0','0','f')\n * will return 15, and uniCharCode('0','0','f','f') returns 255.\n *\n * Returns a negative number on error, if a char was invalid.\n *\n * This is implemented by noting that char2hex() returns -1 on error,\n * which means the result of ORing the char2hex() will also be negative.\n */\n\n\nfunction uniCharCode(a, b, c, d) {\n return char2hex(a) << 12 | char2hex(b) << 8 | char2hex(c) << 4 | char2hex(d);\n}\n/**\n * Converts a hex character to its integer value.\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 on error.\n */\n\n\nfunction char2hex(a) {\n return a >= 48 && a <= 57 ? a - 48 // 0-9\n : a >= 65 && a <= 70 ? a - 55 // A-F\n : a >= 97 && a <= 102 ? a - 87 // a-f\n : -1;\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * [_A-Za-z][_0-9A-Za-z]*\n */\n\n\nfunction readName(source, start, line, col, prev) {\n var body = source.body;\n var bodyLength = body.length;\n var position = start + 1;\n var code = 0;\n\n while (position !== bodyLength && !isNaN(code = body.charCodeAt(position)) && (code === 95 || // _\n code >= 48 && code <= 57 || // 0-9\n code >= 65 && code <= 90 || // A-Z\n code >= 97 && code <= 122) // a-z\n ) {\n ++position;\n }\n\n return new Token(TokenKind.NAME, start, position, line, col, prev, body.slice(start, position));\n} // _ A-Z a-z\n\n\nfunction isNameStart(code) {\n return code === 95 || code >= 65 && code <= 90 || code >= 97 && code <= 122;\n}\n","import { syntaxError } from \"../error/syntaxError.mjs\";\nimport { Kind } from \"./kinds.mjs\";\nimport { Location } from \"./ast.mjs\";\nimport { TokenKind } from \"./tokenKind.mjs\";\nimport { Source, isSource } from \"./source.mjs\";\nimport { DirectiveLocation } from \"./directiveLocation.mjs\";\nimport { Lexer, isPunctuatorTokenKind } from \"./lexer.mjs\";\n/**\n * Configuration options to control parser behavior\n */\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nexport function parse(source, options) {\n var parser = new Parser(source, options);\n return parser.parseDocument();\n}\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\n\nexport function parseValue(source, options) {\n var parser = new Parser(source, options);\n parser.expectToken(TokenKind.SOF);\n var value = parser.parseValueLiteral(false);\n parser.expectToken(TokenKind.EOF);\n return value;\n}\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\n\nexport function parseType(source, options) {\n var parser = new Parser(source, options);\n parser.expectToken(TokenKind.SOF);\n var type = parser.parseTypeReference();\n parser.expectToken(TokenKind.EOF);\n return type;\n}\n/**\n * This class is exported only to assist people in implementing their own parsers\n * without duplicating too much code and should be used only as last resort for cases\n * such as experimental syntax or if certain features could not be contributed upstream.\n *\n * It is still part of the internal API and is versioned, so any changes to it are never\n * considered breaking changes. If you still need to support multiple versions of the\n * library, please use the `versionInfo` variable for version detection.\n *\n * @internal\n */\n\nexport var Parser = /*#__PURE__*/function () {\n function Parser(source, options) {\n var sourceObj = isSource(source) ? source : new Source(source);\n this._lexer = new Lexer(sourceObj);\n this._options = options;\n }\n /**\n * Converts a name lex token into a name parse node.\n */\n\n\n var _proto = Parser.prototype;\n\n _proto.parseName = function parseName() {\n var token = this.expectToken(TokenKind.NAME);\n return {\n kind: Kind.NAME,\n value: token.value,\n loc: this.loc(token)\n };\n } // Implements the parsing rules in the Document section.\n\n /**\n * Document : Definition+\n */\n ;\n\n _proto.parseDocument = function parseDocument() {\n var start = this._lexer.token;\n return {\n kind: Kind.DOCUMENT,\n definitions: this.many(TokenKind.SOF, this.parseDefinition, TokenKind.EOF),\n loc: this.loc(start)\n };\n }\n /**\n * Definition :\n * - ExecutableDefinition\n * - TypeSystemDefinition\n * - TypeSystemExtension\n *\n * ExecutableDefinition :\n * - OperationDefinition\n * - FragmentDefinition\n */\n ;\n\n _proto.parseDefinition = function parseDefinition() {\n if (this.peek(TokenKind.NAME)) {\n switch (this._lexer.token.value) {\n case 'query':\n case 'mutation':\n case 'subscription':\n return this.parseOperationDefinition();\n\n case 'fragment':\n return this.parseFragmentDefinition();\n\n case 'schema':\n case 'scalar':\n case 'type':\n case 'interface':\n case 'union':\n case 'enum':\n case 'input':\n case 'directive':\n return this.parseTypeSystemDefinition();\n\n case 'extend':\n return this.parseTypeSystemExtension();\n }\n } else if (this.peek(TokenKind.BRACE_L)) {\n return this.parseOperationDefinition();\n } else if (this.peekDescription()) {\n return this.parseTypeSystemDefinition();\n }\n\n throw this.unexpected();\n } // Implements the parsing rules in the Operations section.\n\n /**\n * OperationDefinition :\n * - SelectionSet\n * - OperationType Name? VariableDefinitions? Directives? SelectionSet\n */\n ;\n\n _proto.parseOperationDefinition = function parseOperationDefinition() {\n var start = this._lexer.token;\n\n if (this.peek(TokenKind.BRACE_L)) {\n return {\n kind: Kind.OPERATION_DEFINITION,\n operation: 'query',\n name: undefined,\n variableDefinitions: [],\n directives: [],\n selectionSet: this.parseSelectionSet(),\n loc: this.loc(start)\n };\n }\n\n var operation = this.parseOperationType();\n var name;\n\n if (this.peek(TokenKind.NAME)) {\n name = this.parseName();\n }\n\n return {\n kind: Kind.OPERATION_DEFINITION,\n operation: operation,\n name: name,\n variableDefinitions: this.parseVariableDefinitions(),\n directives: this.parseDirectives(false),\n selectionSet: this.parseSelectionSet(),\n loc: this.loc(start)\n };\n }\n /**\n * OperationType : one of query mutation subscription\n */\n ;\n\n _proto.parseOperationType = function parseOperationType() {\n var operationToken = this.expectToken(TokenKind.NAME);\n\n switch (operationToken.value) {\n case 'query':\n return 'query';\n\n case 'mutation':\n return 'mutation';\n\n case 'subscription':\n return 'subscription';\n }\n\n throw this.unexpected(operationToken);\n }\n /**\n * VariableDefinitions : ( VariableDefinition+ )\n */\n ;\n\n _proto.parseVariableDefinitions = function parseVariableDefinitions() {\n return this.optionalMany(TokenKind.PAREN_L, this.parseVariableDefinition, TokenKind.PAREN_R);\n }\n /**\n * VariableDefinition : Variable : Type DefaultValue? Directives[Const]?\n */\n ;\n\n _proto.parseVariableDefinition = function parseVariableDefinition() {\n var start = this._lexer.token;\n return {\n kind: Kind.VARIABLE_DEFINITION,\n variable: this.parseVariable(),\n type: (this.expectToken(TokenKind.COLON), this.parseTypeReference()),\n defaultValue: this.expectOptionalToken(TokenKind.EQUALS) ? this.parseValueLiteral(true) : undefined,\n directives: this.parseDirectives(true),\n loc: this.loc(start)\n };\n }\n /**\n * Variable : $ Name\n */\n ;\n\n _proto.parseVariable = function parseVariable() {\n var start = this._lexer.token;\n this.expectToken(TokenKind.DOLLAR);\n return {\n kind: Kind.VARIABLE,\n name: this.parseName(),\n loc: this.loc(start)\n };\n }\n /**\n * SelectionSet : { Selection+ }\n */\n ;\n\n _proto.parseSelectionSet = function parseSelectionSet() {\n var start = this._lexer.token;\n return {\n kind: Kind.SELECTION_SET,\n selections: this.many(TokenKind.BRACE_L, this.parseSelection, TokenKind.BRACE_R),\n loc: this.loc(start)\n };\n }\n /**\n * Selection :\n * - Field\n * - FragmentSpread\n * - InlineFragment\n */\n ;\n\n _proto.parseSelection = function parseSelection() {\n return this.peek(TokenKind.SPREAD) ? this.parseFragment() : this.parseField();\n }\n /**\n * Field : Alias? Name Arguments? Directives? SelectionSet?\n *\n * Alias : Name :\n */\n ;\n\n _proto.parseField = function parseField() {\n var start = this._lexer.token;\n var nameOrAlias = this.parseName();\n var alias;\n var name;\n\n if (this.expectOptionalToken(TokenKind.COLON)) {\n alias = nameOrAlias;\n name = this.parseName();\n } else {\n name = nameOrAlias;\n }\n\n return {\n kind: Kind.FIELD,\n alias: alias,\n name: name,\n arguments: this.parseArguments(false),\n directives: this.parseDirectives(false),\n selectionSet: this.peek(TokenKind.BRACE_L) ? this.parseSelectionSet() : undefined,\n loc: this.loc(start)\n };\n }\n /**\n * Arguments[Const] : ( Argument[?Const]+ )\n */\n ;\n\n _proto.parseArguments = function parseArguments(isConst) {\n var item = isConst ? this.parseConstArgument : this.parseArgument;\n return this.optionalMany(TokenKind.PAREN_L, item, TokenKind.PAREN_R);\n }\n /**\n * Argument[Const] : Name : Value[?Const]\n */\n ;\n\n _proto.parseArgument = function parseArgument() {\n var start = this._lexer.token;\n var name = this.parseName();\n this.expectToken(TokenKind.COLON);\n return {\n kind: Kind.ARGUMENT,\n name: name,\n value: this.parseValueLiteral(false),\n loc: this.loc(start)\n };\n };\n\n _proto.parseConstArgument = function parseConstArgument() {\n var start = this._lexer.token;\n return {\n kind: Kind.ARGUMENT,\n name: this.parseName(),\n value: (this.expectToken(TokenKind.COLON), this.parseValueLiteral(true)),\n loc: this.loc(start)\n };\n } // Implements the parsing rules in the Fragments section.\n\n /**\n * Corresponds to both FragmentSpread and InlineFragment in the spec.\n *\n * FragmentSpread : ... FragmentName Directives?\n *\n * InlineFragment : ... TypeCondition? Directives? SelectionSet\n */\n ;\n\n _proto.parseFragment = function parseFragment() {\n var start = this._lexer.token;\n this.expectToken(TokenKind.SPREAD);\n var hasTypeCondition = this.expectOptionalKeyword('on');\n\n if (!hasTypeCondition && this.peek(TokenKind.NAME)) {\n return {\n kind: Kind.FRAGMENT_SPREAD,\n name: this.parseFragmentName(),\n directives: this.parseDirectives(false),\n loc: this.loc(start)\n };\n }\n\n return {\n kind: Kind.INLINE_FRAGMENT,\n typeCondition: hasTypeCondition ? this.parseNamedType() : undefined,\n directives: this.parseDirectives(false),\n selectionSet: this.parseSelectionSet(),\n loc: this.loc(start)\n };\n }\n /**\n * FragmentDefinition :\n * - fragment FragmentName on TypeCondition Directives? SelectionSet\n *\n * TypeCondition : NamedType\n */\n ;\n\n _proto.parseFragmentDefinition = function parseFragmentDefinition() {\n var _this$_options;\n\n var start = this._lexer.token;\n this.expectKeyword('fragment'); // Experimental support for defining variables within fragments changes\n // the grammar of FragmentDefinition:\n // - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n\n if (((_this$_options = this._options) === null || _this$_options === void 0 ? void 0 : _this$_options.experimentalFragmentVariables) === true) {\n return {\n kind: Kind.FRAGMENT_DEFINITION,\n name: this.parseFragmentName(),\n variableDefinitions: this.parseVariableDefinitions(),\n typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n directives: this.parseDirectives(false),\n selectionSet: this.parseSelectionSet(),\n loc: this.loc(start)\n };\n }\n\n return {\n kind: Kind.FRAGMENT_DEFINITION,\n name: this.parseFragmentName(),\n typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n directives: this.parseDirectives(false),\n selectionSet: this.parseSelectionSet(),\n loc: this.loc(start)\n };\n }\n /**\n * FragmentName : Name but not `on`\n */\n ;\n\n _proto.parseFragmentName = function parseFragmentName() {\n if (this._lexer.token.value === 'on') {\n throw this.unexpected();\n }\n\n return this.parseName();\n } // Implements the parsing rules in the Values section.\n\n /**\n * Value[Const] :\n * - [~Const] Variable\n * - IntValue\n * - FloatValue\n * - StringValue\n * - BooleanValue\n * - NullValue\n * - EnumValue\n * - ListValue[?Const]\n * - ObjectValue[?Const]\n *\n * BooleanValue : one of `true` `false`\n *\n * NullValue : `null`\n *\n * EnumValue : Name but not `true`, `false` or `null`\n */\n ;\n\n _proto.parseValueLiteral = function parseValueLiteral(isConst) {\n var token = this._lexer.token;\n\n switch (token.kind) {\n case TokenKind.BRACKET_L:\n return this.parseList(isConst);\n\n case TokenKind.BRACE_L:\n return this.parseObject(isConst);\n\n case TokenKind.INT:\n this._lexer.advance();\n\n return {\n kind: Kind.INT,\n value: token.value,\n loc: this.loc(token)\n };\n\n case TokenKind.FLOAT:\n this._lexer.advance();\n\n return {\n kind: Kind.FLOAT,\n value: token.value,\n loc: this.loc(token)\n };\n\n case TokenKind.STRING:\n case TokenKind.BLOCK_STRING:\n return this.parseStringLiteral();\n\n case TokenKind.NAME:\n this._lexer.advance();\n\n switch (token.value) {\n case 'true':\n return {\n kind: Kind.BOOLEAN,\n value: true,\n loc: this.loc(token)\n };\n\n case 'false':\n return {\n kind: Kind.BOOLEAN,\n value: false,\n loc: this.loc(token)\n };\n\n case 'null':\n return {\n kind: Kind.NULL,\n loc: this.loc(token)\n };\n\n default:\n return {\n kind: Kind.ENUM,\n value: token.value,\n loc: this.loc(token)\n };\n }\n\n case TokenKind.DOLLAR:\n if (!isConst) {\n return this.parseVariable();\n }\n\n break;\n }\n\n throw this.unexpected();\n };\n\n _proto.parseStringLiteral = function parseStringLiteral() {\n var token = this._lexer.token;\n\n this._lexer.advance();\n\n return {\n kind: Kind.STRING,\n value: token.value,\n block: token.kind === TokenKind.BLOCK_STRING,\n loc: this.loc(token)\n };\n }\n /**\n * ListValue[Const] :\n * - [ ]\n * - [ Value[?Const]+ ]\n */\n ;\n\n _proto.parseList = function parseList(isConst) {\n var _this = this;\n\n var start = this._lexer.token;\n\n var item = function item() {\n return _this.parseValueLiteral(isConst);\n };\n\n return {\n kind: Kind.LIST,\n values: this.any(TokenKind.BRACKET_L, item, TokenKind.BRACKET_R),\n loc: this.loc(start)\n };\n }\n /**\n * ObjectValue[Const] :\n * - { }\n * - { ObjectField[?Const]+ }\n */\n ;\n\n _proto.parseObject = function parseObject(isConst) {\n var _this2 = this;\n\n var start = this._lexer.token;\n\n var item = function item() {\n return _this2.parseObjectField(isConst);\n };\n\n return {\n kind: Kind.OBJECT,\n fields: this.any(TokenKind.BRACE_L, item, TokenKind.BRACE_R),\n loc: this.loc(start)\n };\n }\n /**\n * ObjectField[Const] : Name : Value[?Const]\n */\n ;\n\n _proto.parseObjectField = function parseObjectField(isConst) {\n var start = this._lexer.token;\n var name = this.parseName();\n this.expectToken(TokenKind.COLON);\n return {\n kind: Kind.OBJECT_FIELD,\n name: name,\n value: this.parseValueLiteral(isConst),\n loc: this.loc(start)\n };\n } // Implements the parsing rules in the Directives section.\n\n /**\n * Directives[Const] : Directive[?Const]+\n */\n ;\n\n _proto.parseDirectives = function parseDirectives(isConst) {\n var directives = [];\n\n while (this.peek(TokenKind.AT)) {\n directives.push(this.parseDirective(isConst));\n }\n\n return directives;\n }\n /**\n * Directive[Const] : @ Name Arguments[?Const]?\n */\n ;\n\n _proto.parseDirective = function parseDirective(isConst) {\n var start = this._lexer.token;\n this.expectToken(TokenKind.AT);\n return {\n kind: Kind.DIRECTIVE,\n name: this.parseName(),\n arguments: this.parseArguments(isConst),\n loc: this.loc(start)\n };\n } // Implements the parsing rules in the Types section.\n\n /**\n * Type :\n * - NamedType\n * - ListType\n * - NonNullType\n */\n ;\n\n _proto.parseTypeReference = function parseTypeReference() {\n var start = this._lexer.token;\n var type;\n\n if (this.expectOptionalToken(TokenKind.BRACKET_L)) {\n type = this.parseTypeReference();\n this.expectToken(TokenKind.BRACKET_R);\n type = {\n kind: Kind.LIST_TYPE,\n type: type,\n loc: this.loc(start)\n };\n } else {\n type = this.parseNamedType();\n }\n\n if (this.expectOptionalToken(TokenKind.BANG)) {\n return {\n kind: Kind.NON_NULL_TYPE,\n type: type,\n loc: this.loc(start)\n };\n }\n\n return type;\n }\n /**\n * NamedType : Name\n */\n ;\n\n _proto.parseNamedType = function parseNamedType() {\n var start = this._lexer.token;\n return {\n kind: Kind.NAMED_TYPE,\n name: this.parseName(),\n loc: this.loc(start)\n };\n } // Implements the parsing rules in the Type Definition section.\n\n /**\n * TypeSystemDefinition :\n * - SchemaDefinition\n * - TypeDefinition\n * - DirectiveDefinition\n *\n * TypeDefinition :\n * - ScalarTypeDefinition\n * - ObjectTypeDefinition\n * - InterfaceTypeDefinition\n * - UnionTypeDefinition\n * - EnumTypeDefinition\n * - InputObjectTypeDefinition\n */\n ;\n\n _proto.parseTypeSystemDefinition = function parseTypeSystemDefinition() {\n // Many definitions begin with a description and require a lookahead.\n var keywordToken = this.peekDescription() ? this._lexer.lookahead() : this._lexer.token;\n\n if (keywordToken.kind === TokenKind.NAME) {\n switch (keywordToken.value) {\n case 'schema':\n return this.parseSchemaDefinition();\n\n case 'scalar':\n return this.parseScalarTypeDefinition();\n\n case 'type':\n return this.parseObjectTypeDefinition();\n\n case 'interface':\n return this.parseInterfaceTypeDefinition();\n\n case 'union':\n return this.parseUnionTypeDefinition();\n\n case 'enum':\n return this.parseEnumTypeDefinition();\n\n case 'input':\n return this.parseInputObjectTypeDefinition();\n\n case 'directive':\n return this.parseDirectiveDefinition();\n }\n }\n\n throw this.unexpected(keywordToken);\n };\n\n _proto.peekDescription = function peekDescription() {\n return this.peek(TokenKind.STRING) || this.peek(TokenKind.BLOCK_STRING);\n }\n /**\n * Description : StringValue\n */\n ;\n\n _proto.parseDescription = function parseDescription() {\n if (this.peekDescription()) {\n return this.parseStringLiteral();\n }\n }\n /**\n * SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ }\n */\n ;\n\n _proto.parseSchemaDefinition = function parseSchemaDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('schema');\n var directives = this.parseDirectives(true);\n var operationTypes = this.many(TokenKind.BRACE_L, this.parseOperationTypeDefinition, TokenKind.BRACE_R);\n return {\n kind: Kind.SCHEMA_DEFINITION,\n description: description,\n directives: directives,\n operationTypes: operationTypes,\n loc: this.loc(start)\n };\n }\n /**\n * OperationTypeDefinition : OperationType : NamedType\n */\n ;\n\n _proto.parseOperationTypeDefinition = function parseOperationTypeDefinition() {\n var start = this._lexer.token;\n var operation = this.parseOperationType();\n this.expectToken(TokenKind.COLON);\n var type = this.parseNamedType();\n return {\n kind: Kind.OPERATION_TYPE_DEFINITION,\n operation: operation,\n type: type,\n loc: this.loc(start)\n };\n }\n /**\n * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n */\n ;\n\n _proto.parseScalarTypeDefinition = function parseScalarTypeDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('scalar');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n return {\n kind: Kind.SCALAR_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n loc: this.loc(start)\n };\n }\n /**\n * ObjectTypeDefinition :\n * Description?\n * type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n */\n ;\n\n _proto.parseObjectTypeDefinition = function parseObjectTypeDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('type');\n var name = this.parseName();\n var interfaces = this.parseImplementsInterfaces();\n var directives = this.parseDirectives(true);\n var fields = this.parseFieldsDefinition();\n return {\n kind: Kind.OBJECT_TYPE_DEFINITION,\n description: description,\n name: name,\n interfaces: interfaces,\n directives: directives,\n fields: fields,\n loc: this.loc(start)\n };\n }\n /**\n * ImplementsInterfaces :\n * - implements `&`? NamedType\n * - ImplementsInterfaces & NamedType\n */\n ;\n\n _proto.parseImplementsInterfaces = function parseImplementsInterfaces() {\n var _this$_options2;\n\n if (!this.expectOptionalKeyword('implements')) {\n return [];\n }\n\n if (((_this$_options2 = this._options) === null || _this$_options2 === void 0 ? void 0 : _this$_options2.allowLegacySDLImplementsInterfaces) === true) {\n var types = []; // Optional leading ampersand\n\n this.expectOptionalToken(TokenKind.AMP);\n\n do {\n types.push(this.parseNamedType());\n } while (this.expectOptionalToken(TokenKind.AMP) || this.peek(TokenKind.NAME));\n\n return types;\n }\n\n return this.delimitedMany(TokenKind.AMP, this.parseNamedType);\n }\n /**\n * FieldsDefinition : { FieldDefinition+ }\n */\n ;\n\n _proto.parseFieldsDefinition = function parseFieldsDefinition() {\n var _this$_options3;\n\n // Legacy support for the SDL?\n if (((_this$_options3 = this._options) === null || _this$_options3 === void 0 ? void 0 : _this$_options3.allowLegacySDLEmptyFields) === true && this.peek(TokenKind.BRACE_L) && this._lexer.lookahead().kind === TokenKind.BRACE_R) {\n this._lexer.advance();\n\n this._lexer.advance();\n\n return [];\n }\n\n return this.optionalMany(TokenKind.BRACE_L, this.parseFieldDefinition, TokenKind.BRACE_R);\n }\n /**\n * FieldDefinition :\n * - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n */\n ;\n\n _proto.parseFieldDefinition = function parseFieldDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n var name = this.parseName();\n var args = this.parseArgumentDefs();\n this.expectToken(TokenKind.COLON);\n var type = this.parseTypeReference();\n var directives = this.parseDirectives(true);\n return {\n kind: Kind.FIELD_DEFINITION,\n description: description,\n name: name,\n arguments: args,\n type: type,\n directives: directives,\n loc: this.loc(start)\n };\n }\n /**\n * ArgumentsDefinition : ( InputValueDefinition+ )\n */\n ;\n\n _proto.parseArgumentDefs = function parseArgumentDefs() {\n return this.optionalMany(TokenKind.PAREN_L, this.parseInputValueDef, TokenKind.PAREN_R);\n }\n /**\n * InputValueDefinition :\n * - Description? Name : Type DefaultValue? Directives[Const]?\n */\n ;\n\n _proto.parseInputValueDef = function parseInputValueDef() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n var name = this.parseName();\n this.expectToken(TokenKind.COLON);\n var type = this.parseTypeReference();\n var defaultValue;\n\n if (this.expectOptionalToken(TokenKind.EQUALS)) {\n defaultValue = this.parseValueLiteral(true);\n }\n\n var directives = this.parseDirectives(true);\n return {\n kind: Kind.INPUT_VALUE_DEFINITION,\n description: description,\n name: name,\n type: type,\n defaultValue: defaultValue,\n directives: directives,\n loc: this.loc(start)\n };\n }\n /**\n * InterfaceTypeDefinition :\n * - Description? interface Name Directives[Const]? FieldsDefinition?\n */\n ;\n\n _proto.parseInterfaceTypeDefinition = function parseInterfaceTypeDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('interface');\n var name = this.parseName();\n var interfaces = this.parseImplementsInterfaces();\n var directives = this.parseDirectives(true);\n var fields = this.parseFieldsDefinition();\n return {\n kind: Kind.INTERFACE_TYPE_DEFINITION,\n description: description,\n name: name,\n interfaces: interfaces,\n directives: directives,\n fields: fields,\n loc: this.loc(start)\n };\n }\n /**\n * UnionTypeDefinition :\n * - Description? union Name Directives[Const]? UnionMemberTypes?\n */\n ;\n\n _proto.parseUnionTypeDefinition = function parseUnionTypeDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('union');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n var types = this.parseUnionMemberTypes();\n return {\n kind: Kind.UNION_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n types: types,\n loc: this.loc(start)\n };\n }\n /**\n * UnionMemberTypes :\n * - = `|`? NamedType\n * - UnionMemberTypes | NamedType\n */\n ;\n\n _proto.parseUnionMemberTypes = function parseUnionMemberTypes() {\n return this.expectOptionalToken(TokenKind.EQUALS) ? this.delimitedMany(TokenKind.PIPE, this.parseNamedType) : [];\n }\n /**\n * EnumTypeDefinition :\n * - Description? enum Name Directives[Const]? EnumValuesDefinition?\n */\n ;\n\n _proto.parseEnumTypeDefinition = function parseEnumTypeDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('enum');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n var values = this.parseEnumValuesDefinition();\n return {\n kind: Kind.ENUM_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n values: values,\n loc: this.loc(start)\n };\n }\n /**\n * EnumValuesDefinition : { EnumValueDefinition+ }\n */\n ;\n\n _proto.parseEnumValuesDefinition = function parseEnumValuesDefinition() {\n return this.optionalMany(TokenKind.BRACE_L, this.parseEnumValueDefinition, TokenKind.BRACE_R);\n }\n /**\n * EnumValueDefinition : Description? EnumValue Directives[Const]?\n *\n * EnumValue : Name\n */\n ;\n\n _proto.parseEnumValueDefinition = function parseEnumValueDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n return {\n kind: Kind.ENUM_VALUE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n loc: this.loc(start)\n };\n }\n /**\n * InputObjectTypeDefinition :\n * - Description? input Name Directives[Const]? InputFieldsDefinition?\n */\n ;\n\n _proto.parseInputObjectTypeDefinition = function parseInputObjectTypeDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('input');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n var fields = this.parseInputFieldsDefinition();\n return {\n kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n fields: fields,\n loc: this.loc(start)\n };\n }\n /**\n * InputFieldsDefinition : { InputValueDefinition+ }\n */\n ;\n\n _proto.parseInputFieldsDefinition = function parseInputFieldsDefinition() {\n return this.optionalMany(TokenKind.BRACE_L, this.parseInputValueDef, TokenKind.BRACE_R);\n }\n /**\n * TypeSystemExtension :\n * - SchemaExtension\n * - TypeExtension\n *\n * TypeExtension :\n * - ScalarTypeExtension\n * - ObjectTypeExtension\n * - InterfaceTypeExtension\n * - UnionTypeExtension\n * - EnumTypeExtension\n * - InputObjectTypeDefinition\n */\n ;\n\n _proto.parseTypeSystemExtension = function parseTypeSystemExtension() {\n var keywordToken = this._lexer.lookahead();\n\n if (keywordToken.kind === TokenKind.NAME) {\n switch (keywordToken.value) {\n case 'schema':\n return this.parseSchemaExtension();\n\n case 'scalar':\n return this.parseScalarTypeExtension();\n\n case 'type':\n return this.parseObjectTypeExtension();\n\n case 'interface':\n return this.parseInterfaceTypeExtension();\n\n case 'union':\n return this.parseUnionTypeExtension();\n\n case 'enum':\n return this.parseEnumTypeExtension();\n\n case 'input':\n return this.parseInputObjectTypeExtension();\n }\n }\n\n throw this.unexpected(keywordToken);\n }\n /**\n * SchemaExtension :\n * - extend schema Directives[Const]? { OperationTypeDefinition+ }\n * - extend schema Directives[Const]\n */\n ;\n\n _proto.parseSchemaExtension = function parseSchemaExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('schema');\n var directives = this.parseDirectives(true);\n var operationTypes = this.optionalMany(TokenKind.BRACE_L, this.parseOperationTypeDefinition, TokenKind.BRACE_R);\n\n if (directives.length === 0 && operationTypes.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.SCHEMA_EXTENSION,\n directives: directives,\n operationTypes: operationTypes,\n loc: this.loc(start)\n };\n }\n /**\n * ScalarTypeExtension :\n * - extend scalar Name Directives[Const]\n */\n ;\n\n _proto.parseScalarTypeExtension = function parseScalarTypeExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('scalar');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n\n if (directives.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.SCALAR_TYPE_EXTENSION,\n name: name,\n directives: directives,\n loc: this.loc(start)\n };\n }\n /**\n * ObjectTypeExtension :\n * - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n * - extend type Name ImplementsInterfaces? Directives[Const]\n * - extend type Name ImplementsInterfaces\n */\n ;\n\n _proto.parseObjectTypeExtension = function parseObjectTypeExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('type');\n var name = this.parseName();\n var interfaces = this.parseImplementsInterfaces();\n var directives = this.parseDirectives(true);\n var fields = this.parseFieldsDefinition();\n\n if (interfaces.length === 0 && directives.length === 0 && fields.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.OBJECT_TYPE_EXTENSION,\n name: name,\n interfaces: interfaces,\n directives: directives,\n fields: fields,\n loc: this.loc(start)\n };\n }\n /**\n * InterfaceTypeExtension :\n * - extend interface Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n * - extend interface Name ImplementsInterfaces? Directives[Const]\n * - extend interface Name ImplementsInterfaces\n */\n ;\n\n _proto.parseInterfaceTypeExtension = function parseInterfaceTypeExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('interface');\n var name = this.parseName();\n var interfaces = this.parseImplementsInterfaces();\n var directives = this.parseDirectives(true);\n var fields = this.parseFieldsDefinition();\n\n if (interfaces.length === 0 && directives.length === 0 && fields.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.INTERFACE_TYPE_EXTENSION,\n name: name,\n interfaces: interfaces,\n directives: directives,\n fields: fields,\n loc: this.loc(start)\n };\n }\n /**\n * UnionTypeExtension :\n * - extend union Name Directives[Const]? UnionMemberTypes\n * - extend union Name Directives[Const]\n */\n ;\n\n _proto.parseUnionTypeExtension = function parseUnionTypeExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('union');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n var types = this.parseUnionMemberTypes();\n\n if (directives.length === 0 && types.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.UNION_TYPE_EXTENSION,\n name: name,\n directives: directives,\n types: types,\n loc: this.loc(start)\n };\n }\n /**\n * EnumTypeExtension :\n * - extend enum Name Directives[Const]? EnumValuesDefinition\n * - extend enum Name Directives[Const]\n */\n ;\n\n _proto.parseEnumTypeExtension = function parseEnumTypeExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('enum');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n var values = this.parseEnumValuesDefinition();\n\n if (directives.length === 0 && values.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.ENUM_TYPE_EXTENSION,\n name: name,\n directives: directives,\n values: values,\n loc: this.loc(start)\n };\n }\n /**\n * InputObjectTypeExtension :\n * - extend input Name Directives[Const]? InputFieldsDefinition\n * - extend input Name Directives[Const]\n */\n ;\n\n _proto.parseInputObjectTypeExtension = function parseInputObjectTypeExtension() {\n var start = this._lexer.token;\n this.expectKeyword('extend');\n this.expectKeyword('input');\n var name = this.parseName();\n var directives = this.parseDirectives(true);\n var fields = this.parseInputFieldsDefinition();\n\n if (directives.length === 0 && fields.length === 0) {\n throw this.unexpected();\n }\n\n return {\n kind: Kind.INPUT_OBJECT_TYPE_EXTENSION,\n name: name,\n directives: directives,\n fields: fields,\n loc: this.loc(start)\n };\n }\n /**\n * DirectiveDefinition :\n * - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations\n */\n ;\n\n _proto.parseDirectiveDefinition = function parseDirectiveDefinition() {\n var start = this._lexer.token;\n var description = this.parseDescription();\n this.expectKeyword('directive');\n this.expectToken(TokenKind.AT);\n var name = this.parseName();\n var args = this.parseArgumentDefs();\n var repeatable = this.expectOptionalKeyword('repeatable');\n this.expectKeyword('on');\n var locations = this.parseDirectiveLocations();\n return {\n kind: Kind.DIRECTIVE_DEFINITION,\n description: description,\n name: name,\n arguments: args,\n repeatable: repeatable,\n locations: locations,\n loc: this.loc(start)\n };\n }\n /**\n * DirectiveLocations :\n * - `|`? DirectiveLocation\n * - DirectiveLocations | DirectiveLocation\n */\n ;\n\n _proto.parseDirectiveLocations = function parseDirectiveLocations() {\n return this.delimitedMany(TokenKind.PIPE, this.parseDirectiveLocation);\n }\n /*\n * DirectiveLocation :\n * - ExecutableDirectiveLocation\n * - TypeSystemDirectiveLocation\n *\n * ExecutableDirectiveLocation : one of\n * `QUERY`\n * `MUTATION`\n * `SUBSCRIPTION`\n * `FIELD`\n * `FRAGMENT_DEFINITION`\n * `FRAGMENT_SPREAD`\n * `INLINE_FRAGMENT`\n *\n * TypeSystemDirectiveLocation : one of\n * `SCHEMA`\n * `SCALAR`\n * `OBJECT`\n * `FIELD_DEFINITION`\n * `ARGUMENT_DEFINITION`\n * `INTERFACE`\n * `UNION`\n * `ENUM`\n * `ENUM_VALUE`\n * `INPUT_OBJECT`\n * `INPUT_FIELD_DEFINITION`\n */\n ;\n\n _proto.parseDirectiveLocation = function parseDirectiveLocation() {\n var start = this._lexer.token;\n var name = this.parseName();\n\n if (DirectiveLocation[name.value] !== undefined) {\n return name;\n }\n\n throw this.unexpected(start);\n } // Core parsing utility functions\n\n /**\n * Returns a location object, used to identify the place in the source that created a given parsed object.\n */\n ;\n\n _proto.loc = function loc(startToken) {\n var _this$_options4;\n\n if (((_this$_options4 = this._options) === null || _this$_options4 === void 0 ? void 0 : _this$_options4.noLocation) !== true) {\n return new Location(startToken, this._lexer.lastToken, this._lexer.source);\n }\n }\n /**\n * Determines if the next token is of a given kind\n */\n ;\n\n _proto.peek = function peek(kind) {\n return this._lexer.token.kind === kind;\n }\n /**\n * If the next token is of the given kind, return that token after advancing the lexer.\n * Otherwise, do not change the parser state and throw an error.\n */\n ;\n\n _proto.expectToken = function expectToken(kind) {\n var token = this._lexer.token;\n\n if (token.kind === kind) {\n this._lexer.advance();\n\n return token;\n }\n\n throw syntaxError(this._lexer.source, token.start, \"Expected \".concat(getTokenKindDesc(kind), \", found \").concat(getTokenDesc(token), \".\"));\n }\n /**\n * If the next token is of the given kind, return that token after advancing the lexer.\n * Otherwise, do not change the parser state and return undefined.\n */\n ;\n\n _proto.expectOptionalToken = function expectOptionalToken(kind) {\n var token = this._lexer.token;\n\n if (token.kind === kind) {\n this._lexer.advance();\n\n return token;\n }\n\n return undefined;\n }\n /**\n * If the next token is a given keyword, advance the lexer.\n * Otherwise, do not change the parser state and throw an error.\n */\n ;\n\n _proto.expectKeyword = function expectKeyword(value) {\n var token = this._lexer.token;\n\n if (token.kind === TokenKind.NAME && token.value === value) {\n this._lexer.advance();\n } else {\n throw syntaxError(this._lexer.source, token.start, \"Expected \\\"\".concat(value, \"\\\", found \").concat(getTokenDesc(token), \".\"));\n }\n }\n /**\n * If the next token is a given keyword, return \"true\" after advancing the lexer.\n * Otherwise, do not change the parser state and return \"false\".\n */\n ;\n\n _proto.expectOptionalKeyword = function expectOptionalKeyword(value) {\n var token = this._lexer.token;\n\n if (token.kind === TokenKind.NAME && token.value === value) {\n this._lexer.advance();\n\n return true;\n }\n\n return false;\n }\n /**\n * Helper function for creating an error when an unexpected lexed token is encountered.\n */\n ;\n\n _proto.unexpected = function unexpected(atToken) {\n var token = atToken !== null && atToken !== void 0 ? atToken : this._lexer.token;\n return syntaxError(this._lexer.source, token.start, \"Unexpected \".concat(getTokenDesc(token), \".\"));\n }\n /**\n * Returns a possibly empty list of parse nodes, determined by the parseFn.\n * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n * Advances the parser to the next lex token after the closing token.\n */\n ;\n\n _proto.any = function any(openKind, parseFn, closeKind) {\n this.expectToken(openKind);\n var nodes = [];\n\n while (!this.expectOptionalToken(closeKind)) {\n nodes.push(parseFn.call(this));\n }\n\n return nodes;\n }\n /**\n * Returns a list of parse nodes, determined by the parseFn.\n * It can be empty only if open token is missing otherwise it will always return non-empty list\n * that begins with a lex token of openKind and ends with a lex token of closeKind.\n * Advances the parser to the next lex token after the closing token.\n */\n ;\n\n _proto.optionalMany = function optionalMany(openKind, parseFn, closeKind) {\n if (this.expectOptionalToken(openKind)) {\n var nodes = [];\n\n do {\n nodes.push(parseFn.call(this));\n } while (!this.expectOptionalToken(closeKind));\n\n return nodes;\n }\n\n return [];\n }\n /**\n * Returns a non-empty list of parse nodes, determined by the parseFn.\n * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n * Advances the parser to the next lex token after the closing token.\n */\n ;\n\n _proto.many = function many(openKind, parseFn, closeKind) {\n this.expectToken(openKind);\n var nodes = [];\n\n do {\n nodes.push(parseFn.call(this));\n } while (!this.expectOptionalToken(closeKind));\n\n return nodes;\n }\n /**\n * Returns a non-empty list of parse nodes, determined by the parseFn.\n * This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind.\n * Advances the parser to the next lex token after last item in the list.\n */\n ;\n\n _proto.delimitedMany = function delimitedMany(delimiterKind, parseFn) {\n this.expectOptionalToken(delimiterKind);\n var nodes = [];\n\n do {\n nodes.push(parseFn.call(this));\n } while (this.expectOptionalToken(delimiterKind));\n\n return nodes;\n };\n\n return Parser;\n}();\n/**\n * A helper function to describe a token as a string for debugging.\n */\n\nfunction getTokenDesc(token) {\n var value = token.value;\n return getTokenKindDesc(token.kind) + (value != null ? \" \\\"\".concat(value, \"\\\"\") : '');\n}\n/**\n * A helper function to describe a token kind as a string for debugging.\n */\n\n\nfunction getTokenKindDesc(kind) {\n return isPunctuatorTokenKind(kind) ? \"\\\"\".concat(kind, \"\\\"\") : kind;\n}\n","import inspect from \"../jsutils/inspect.mjs\";\nimport { isNode } from \"./ast.mjs\";\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\nexport var QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: ['name', // Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n 'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['description', 'directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n InterfaceTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields']\n};\nexport var BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * const editedAST = visit(ast, {\n * enter(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: skip visiting this node\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * },\n * leave(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: no action\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * }\n * });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * visit(ast, {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n * a specific kind.\n *\n * visit(ast, {\n * Kind: {\n * enter(node) {\n * // enter the \"Kind\" node\n * }\n * leave(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * visit(ast, {\n * enter(node) {\n * // enter any node\n * },\n * leave(node) {\n * // leave any node\n * }\n * })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n * visit(ast, {\n * enter: {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * },\n * leave: {\n * Kind(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n */\n\nexport function visit(root, visitor) {\n var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n /* eslint-disable no-undef-init */\n var stack = undefined;\n var inArray = Array.isArray(root);\n var keys = [root];\n var index = -1;\n var edits = [];\n var node = undefined;\n var key = undefined;\n var parent = undefined;\n var path = [];\n var ancestors = [];\n var newRoot = root;\n /* eslint-enable no-undef-init */\n\n do {\n index++;\n var isLeaving = index === keys.length;\n var isEdited = isLeaving && edits.length !== 0;\n\n if (isLeaving) {\n key = ancestors.length === 0 ? undefined : path[path.length - 1];\n node = parent;\n parent = ancestors.pop();\n\n if (isEdited) {\n if (inArray) {\n node = node.slice();\n } else {\n var clone = {};\n\n for (var _i2 = 0, _Object$keys2 = Object.keys(node); _i2 < _Object$keys2.length; _i2++) {\n var k = _Object$keys2[_i2];\n clone[k] = node[k];\n }\n\n node = clone;\n }\n\n var editOffset = 0;\n\n for (var ii = 0; ii < edits.length; ii++) {\n var editKey = edits[ii][0];\n var editValue = edits[ii][1];\n\n if (inArray) {\n editKey -= editOffset;\n }\n\n if (inArray && editValue === null) {\n node.splice(editKey, 1);\n editOffset++;\n } else {\n node[editKey] = editValue;\n }\n }\n }\n\n index = stack.index;\n keys = stack.keys;\n edits = stack.edits;\n inArray = stack.inArray;\n stack = stack.prev;\n } else {\n key = parent ? inArray ? index : keys[index] : undefined;\n node = parent ? parent[key] : newRoot;\n\n if (node === null || node === undefined) {\n continue;\n }\n\n if (parent) {\n path.push(key);\n }\n }\n\n var result = void 0;\n\n if (!Array.isArray(node)) {\n if (!isNode(node)) {\n throw new Error(\"Invalid AST Node: \".concat(inspect(node), \".\"));\n }\n\n var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n\n if (visitFn) {\n result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n if (result === BREAK) {\n break;\n }\n\n if (result === false) {\n if (!isLeaving) {\n path.pop();\n continue;\n }\n } else if (result !== undefined) {\n edits.push([key, result]);\n\n if (!isLeaving) {\n if (isNode(result)) {\n node = result;\n } else {\n path.pop();\n continue;\n }\n }\n }\n }\n }\n\n if (result === undefined && isEdited) {\n edits.push([key, node]);\n }\n\n if (isLeaving) {\n path.pop();\n } else {\n var _visitorKeys$node$kin;\n\n stack = {\n inArray: inArray,\n index: index,\n keys: keys,\n edits: edits,\n prev: stack\n };\n inArray = Array.isArray(node);\n keys = inArray ? node : (_visitorKeys$node$kin = visitorKeys[node.kind]) !== null && _visitorKeys$node$kin !== void 0 ? _visitorKeys$node$kin : [];\n index = -1;\n edits = [];\n\n if (parent) {\n ancestors.push(parent);\n }\n\n parent = node;\n }\n } while (stack !== undefined);\n\n if (edits.length !== 0) {\n newRoot = edits[edits.length - 1][1];\n }\n\n return newRoot;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nexport function visitInParallel(visitors) {\n var skipping = new Array(visitors.length);\n return {\n enter: function enter(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n false);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === false) {\n skipping[i] = node;\n } else if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined) {\n return result;\n }\n }\n }\n }\n },\n leave: function leave(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n true);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined && result !== false) {\n return result;\n }\n }\n } else if (skipping[i] === node) {\n skipping[i] = null;\n }\n }\n }\n };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n var kindVisitor = visitor[kind];\n\n if (kindVisitor) {\n if (!isLeaving && typeof kindVisitor === 'function') {\n // { Kind() {} }\n return kindVisitor;\n }\n\n var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n\n if (typeof kindSpecificVisitor === 'function') {\n // { Kind: { enter() {}, leave() {} } }\n return kindSpecificVisitor;\n }\n } else {\n var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n\n if (specificVisitor) {\n if (typeof specificVisitor === 'function') {\n // { enter() {}, leave() {} }\n return specificVisitor;\n }\n\n var specificKindVisitor = specificVisitor[kind];\n\n if (typeof specificKindVisitor === 'function') {\n // { enter: { Kind() {} }, leave: { Kind() {} } }\n return specificKindVisitor;\n }\n }\n }\n}\n","/* eslint-disable no-redeclare */\n// $FlowFixMe[name-already-bound]\nvar find = Array.prototype.find ? function (list, predicate) {\n return Array.prototype.find.call(list, predicate);\n} : function (list, predicate) {\n for (var _i2 = 0; _i2 < list.length; _i2++) {\n var value = list[_i2];\n\n if (predicate(value)) {\n return value;\n }\n }\n};\nexport default find;\n","/* eslint-disable no-redeclare */\n// $FlowFixMe[name-already-bound] workaround for: https://github.com/facebook/flow/issues/4441\nvar objectValues = Object.values || function (obj) {\n return Object.keys(obj).map(function (key) {\n return obj[key];\n });\n};\n\nexport default objectValues;\n","/* eslint-disable no-redeclare */\n// $FlowFixMe[name-already-bound] workaround for: https://github.com/facebook/flow/issues/4441\nvar objectEntries = Object.entries || function (obj) {\n return Object.keys(obj).map(function (key) {\n return [key, obj[key]];\n });\n};\n\nexport default objectEntries;\n","/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * for each value in the array.\n *\n * This provides a convenient lookup for the array items if the key function\n * produces unique results.\n *\n * const phoneBook = [\n * { name: 'Jon', num: '555-1234' },\n * { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * // { Jon: { name: 'Jon', num: '555-1234' },\n * // Jenny: { name: 'Jenny', num: '867-5309' } }\n * const entriesByName = keyMap(\n * phoneBook,\n * entry => entry.name\n * )\n *\n * // { name: 'Jenny', num: '857-6309' }\n * const jennyEntry = entriesByName['Jenny']\n *\n */\nexport default function keyMap(list, keyFn) {\n return list.reduce(function (map, item) {\n map[keyFn(item)] = item;\n return map;\n }, Object.create(null));\n}\n","import objectEntries from \"../polyfills/objectEntries.mjs\";\n\n/**\n * Creates an object map with the same keys as `map` and values generated by\n * running each value of `map` thru `fn`.\n */\nexport default function mapValue(map, fn) {\n var result = Object.create(null);\n\n for (var _i2 = 0, _objectEntries2 = objectEntries(map); _i2 < _objectEntries2.length; _i2++) {\n var _ref2 = _objectEntries2[_i2];\n var _key = _ref2[0];\n var _value = _ref2[1];\n result[_key] = fn(_value, _key);\n }\n\n return result;\n}\n","import objectEntries from \"../polyfills/objectEntries.mjs\";\nexport default function toObjMap(obj) {\n /* eslint-enable no-redeclare */\n if (Object.getPrototypeOf(obj) === null) {\n return obj;\n }\n\n var map = Object.create(null);\n\n for (var _i2 = 0, _objectEntries2 = objectEntries(obj); _i2 < _objectEntries2.length; _i2++) {\n var _ref2 = _objectEntries2[_i2];\n var key = _ref2[0];\n var value = _ref2[1];\n map[key] = value;\n }\n\n return map;\n}\n","/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * and a function to produce the values from each item in the array.\n *\n * const phoneBook = [\n * { name: 'Jon', num: '555-1234' },\n * { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * // { Jon: '555-1234', Jenny: '867-5309' }\n * const phonesByName = keyValMap(\n * phoneBook,\n * entry => entry.name,\n * entry => entry.num\n * )\n *\n */\nexport default function keyValMap(list, keyFn, valFn) {\n return list.reduce(function (map, item) {\n map[keyFn(item)] = valFn(item);\n return map;\n }, Object.create(null));\n}\n","var MAX_SUGGESTIONS = 5;\n/**\n * Given [ A, B, C ] return ' Did you mean A, B, or C?'.\n */\n\n// eslint-disable-next-line no-redeclare\nexport default function didYouMean(firstArg, secondArg) {\n var _ref = typeof firstArg === 'string' ? [firstArg, secondArg] : [undefined, firstArg],\n subMessage = _ref[0],\n suggestionsArg = _ref[1];\n\n var message = ' Did you mean ';\n\n if (subMessage) {\n message += subMessage + ' ';\n }\n\n var suggestions = suggestionsArg.map(function (x) {\n return \"\\\"\".concat(x, \"\\\"\");\n });\n\n switch (suggestions.length) {\n case 0:\n return '';\n\n case 1:\n return message + suggestions[0] + '?';\n\n case 2:\n return message + suggestions[0] + ' or ' + suggestions[1] + '?';\n }\n\n var selected = suggestions.slice(0, MAX_SUGGESTIONS);\n var lastItem = selected.pop();\n return message + selected.join(', ') + ', or ' + lastItem + '?';\n}\n","/**\n * Returns the first argument it receives.\n */\nexport default function identityFunc(x) {\n return x;\n}\n","/**\n * Returns a number indicating whether a reference string comes before, or after,\n * or is the same as the given string in natural sort order.\n *\n * See: https://en.wikipedia.org/wiki/Natural_sort_order\n *\n */\nexport default function naturalCompare(aStr, bStr) {\n var aIdx = 0;\n var bIdx = 0;\n\n while (aIdx < aStr.length && bIdx < bStr.length) {\n var aChar = aStr.charCodeAt(aIdx);\n var bChar = bStr.charCodeAt(bIdx);\n\n if (isDigit(aChar) && isDigit(bChar)) {\n var aNum = 0;\n\n do {\n ++aIdx;\n aNum = aNum * 10 + aChar - DIGIT_0;\n aChar = aStr.charCodeAt(aIdx);\n } while (isDigit(aChar) && aNum > 0);\n\n var bNum = 0;\n\n do {\n ++bIdx;\n bNum = bNum * 10 + bChar - DIGIT_0;\n bChar = bStr.charCodeAt(bIdx);\n } while (isDigit(bChar) && bNum > 0);\n\n if (aNum < bNum) {\n return -1;\n }\n\n if (aNum > bNum) {\n return 1;\n }\n } else {\n if (aChar < bChar) {\n return -1;\n }\n\n if (aChar > bChar) {\n return 1;\n }\n\n ++aIdx;\n ++bIdx;\n }\n }\n\n return aStr.length - bStr.length;\n}\nvar DIGIT_0 = 48;\nvar DIGIT_9 = 57;\n\nfunction isDigit(code) {\n return !isNaN(code) && DIGIT_0 <= code && code <= DIGIT_9;\n}\n","import naturalCompare from \"./naturalCompare.mjs\";\n/**\n * Given an invalid input string and a list of valid options, returns a filtered\n * list of valid options sorted based on their similarity with the input.\n */\n\nexport default function suggestionList(input, options) {\n var optionsByDistance = Object.create(null);\n var lexicalDistance = new LexicalDistance(input);\n var threshold = Math.floor(input.length * 0.4) + 1;\n\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n var option = options[_i2];\n var distance = lexicalDistance.measure(option, threshold);\n\n if (distance !== undefined) {\n optionsByDistance[option] = distance;\n }\n }\n\n return Object.keys(optionsByDistance).sort(function (a, b) {\n var distanceDiff = optionsByDistance[a] - optionsByDistance[b];\n return distanceDiff !== 0 ? distanceDiff : naturalCompare(a, b);\n });\n}\n/**\n * Computes the lexical distance between strings A and B.\n *\n * The \"distance\" between two strings is given by counting the minimum number\n * of edits needed to transform string A into string B. An edit can be an\n * insertion, deletion, or substitution of a single character, or a swap of two\n * adjacent characters.\n *\n * Includes a custom alteration from Damerau-Levenshtein to treat case changes\n * as a single edit which helps identify mis-cased values with an edit distance\n * of 1.\n *\n * This distance can be useful for detecting typos in input or sorting\n */\n\nvar LexicalDistance = /*#__PURE__*/function () {\n function LexicalDistance(input) {\n this._input = input;\n this._inputLowerCase = input.toLowerCase();\n this._inputArray = stringToArray(this._inputLowerCase);\n this._rows = [new Array(input.length + 1).fill(0), new Array(input.length + 1).fill(0), new Array(input.length + 1).fill(0)];\n }\n\n var _proto = LexicalDistance.prototype;\n\n _proto.measure = function measure(option, threshold) {\n if (this._input === option) {\n return 0;\n }\n\n var optionLowerCase = option.toLowerCase(); // Any case change counts as a single edit\n\n if (this._inputLowerCase === optionLowerCase) {\n return 1;\n }\n\n var a = stringToArray(optionLowerCase);\n var b = this._inputArray;\n\n if (a.length < b.length) {\n var tmp = a;\n a = b;\n b = tmp;\n }\n\n var aLength = a.length;\n var bLength = b.length;\n\n if (aLength - bLength > threshold) {\n return undefined;\n }\n\n var rows = this._rows;\n\n for (var j = 0; j <= bLength; j++) {\n rows[0][j] = j;\n }\n\n for (var i = 1; i <= aLength; i++) {\n var upRow = rows[(i - 1) % 3];\n var currentRow = rows[i % 3];\n var smallestCell = currentRow[0] = i;\n\n for (var _j = 1; _j <= bLength; _j++) {\n var cost = a[i - 1] === b[_j - 1] ? 0 : 1;\n var currentCell = Math.min(upRow[_j] + 1, // delete\n currentRow[_j - 1] + 1, // insert\n upRow[_j - 1] + cost // substitute\n );\n\n if (i > 1 && _j > 1 && a[i - 1] === b[_j - 2] && a[i - 2] === b[_j - 1]) {\n // transposition\n var doubleDiagonalCell = rows[(i - 2) % 3][_j - 2];\n currentCell = Math.min(currentCell, doubleDiagonalCell + 1);\n }\n\n if (currentCell < smallestCell) {\n smallestCell = currentCell;\n }\n\n currentRow[_j] = currentCell;\n } // Early exit, since distance can't go smaller than smallest element of the previous row.\n\n\n if (smallestCell > threshold) {\n return undefined;\n }\n }\n\n var distance = rows[aLength % 3][bLength];\n return distance <= threshold ? distance : undefined;\n };\n\n return LexicalDistance;\n}();\n\nfunction stringToArray(str) {\n var strLength = str.length;\n var array = new Array(strLength);\n\n for (var i = 0; i < strLength; ++i) {\n array[i] = str.charCodeAt(i);\n }\n\n return array;\n}\n","import { visit } from \"./visitor.mjs\";\nimport { printBlockString } from \"./blockString.mjs\";\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n return visit(ast, {\n leave: printDocASTReducer\n });\n}\nvar MAX_LINE_LENGTH = 80; // TODO: provide better type coverage in future\n\nvar printDocASTReducer = {\n Name: function Name(node) {\n return node.value;\n },\n Variable: function Variable(node) {\n return '$' + node.name;\n },\n // Document\n Document: function Document(node) {\n return join(node.definitions, '\\n\\n') + '\\n';\n },\n OperationDefinition: function OperationDefinition(node) {\n var op = node.operation;\n var name = node.name;\n var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n var directives = join(node.directives, ' ');\n var selectionSet = node.selectionSet; // Anonymous queries with no directives or variable definitions can use\n // the query short form.\n\n return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n },\n VariableDefinition: function VariableDefinition(_ref) {\n var variable = _ref.variable,\n type = _ref.type,\n defaultValue = _ref.defaultValue,\n directives = _ref.directives;\n return variable + ': ' + type + wrap(' = ', defaultValue) + wrap(' ', join(directives, ' '));\n },\n SelectionSet: function SelectionSet(_ref2) {\n var selections = _ref2.selections;\n return block(selections);\n },\n Field: function Field(_ref3) {\n var alias = _ref3.alias,\n name = _ref3.name,\n args = _ref3.arguments,\n directives = _ref3.directives,\n selectionSet = _ref3.selectionSet;\n var prefix = wrap('', alias, ': ') + name;\n var argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n if (argsLine.length > MAX_LINE_LENGTH) {\n argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n }\n\n return join([argsLine, join(directives, ' '), selectionSet], ' ');\n },\n Argument: function Argument(_ref4) {\n var name = _ref4.name,\n value = _ref4.value;\n return name + ': ' + value;\n },\n // Fragments\n FragmentSpread: function FragmentSpread(_ref5) {\n var name = _ref5.name,\n directives = _ref5.directives;\n return '...' + name + wrap(' ', join(directives, ' '));\n },\n InlineFragment: function InlineFragment(_ref6) {\n var typeCondition = _ref6.typeCondition,\n directives = _ref6.directives,\n selectionSet = _ref6.selectionSet;\n return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n },\n FragmentDefinition: function FragmentDefinition(_ref7) {\n var name = _ref7.name,\n typeCondition = _ref7.typeCondition,\n variableDefinitions = _ref7.variableDefinitions,\n directives = _ref7.directives,\n selectionSet = _ref7.selectionSet;\n return (// Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n \"fragment \".concat(name).concat(wrap('(', join(variableDefinitions, ', '), ')'), \" \") + \"on \".concat(typeCondition, \" \").concat(wrap('', join(directives, ' '), ' ')) + selectionSet\n );\n },\n // Value\n IntValue: function IntValue(_ref8) {\n var value = _ref8.value;\n return value;\n },\n FloatValue: function FloatValue(_ref9) {\n var value = _ref9.value;\n return value;\n },\n StringValue: function StringValue(_ref10, key) {\n var value = _ref10.value,\n isBlockString = _ref10.block;\n return isBlockString ? printBlockString(value, key === 'description' ? '' : ' ') : JSON.stringify(value);\n },\n BooleanValue: function BooleanValue(_ref11) {\n var value = _ref11.value;\n return value ? 'true' : 'false';\n },\n NullValue: function NullValue() {\n return 'null';\n },\n EnumValue: function EnumValue(_ref12) {\n var value = _ref12.value;\n return value;\n },\n ListValue: function ListValue(_ref13) {\n var values = _ref13.values;\n return '[' + join(values, ', ') + ']';\n },\n ObjectValue: function ObjectValue(_ref14) {\n var fields = _ref14.fields;\n return '{' + join(fields, ', ') + '}';\n },\n ObjectField: function ObjectField(_ref15) {\n var name = _ref15.name,\n value = _ref15.value;\n return name + ': ' + value;\n },\n // Directive\n Directive: function Directive(_ref16) {\n var name = _ref16.name,\n args = _ref16.arguments;\n return '@' + name + wrap('(', join(args, ', '), ')');\n },\n // Type\n NamedType: function NamedType(_ref17) {\n var name = _ref17.name;\n return name;\n },\n ListType: function ListType(_ref18) {\n var type = _ref18.type;\n return '[' + type + ']';\n },\n NonNullType: function NonNullType(_ref19) {\n var type = _ref19.type;\n return type + '!';\n },\n // Type System Definitions\n SchemaDefinition: addDescription(function (_ref20) {\n var directives = _ref20.directives,\n operationTypes = _ref20.operationTypes;\n return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n }),\n OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n var operation = _ref21.operation,\n type = _ref21.type;\n return operation + ': ' + type;\n },\n ScalarTypeDefinition: addDescription(function (_ref22) {\n var name = _ref22.name,\n directives = _ref22.directives;\n return join(['scalar', name, join(directives, ' ')], ' ');\n }),\n ObjectTypeDefinition: addDescription(function (_ref23) {\n var name = _ref23.name,\n interfaces = _ref23.interfaces,\n directives = _ref23.directives,\n fields = _ref23.fields;\n return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n FieldDefinition: addDescription(function (_ref24) {\n var name = _ref24.name,\n args = _ref24.arguments,\n type = _ref24.type,\n directives = _ref24.directives;\n return name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + ': ' + type + wrap(' ', join(directives, ' '));\n }),\n InputValueDefinition: addDescription(function (_ref25) {\n var name = _ref25.name,\n type = _ref25.type,\n defaultValue = _ref25.defaultValue,\n directives = _ref25.directives;\n return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n }),\n InterfaceTypeDefinition: addDescription(function (_ref26) {\n var name = _ref26.name,\n interfaces = _ref26.interfaces,\n directives = _ref26.directives,\n fields = _ref26.fields;\n return join(['interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n UnionTypeDefinition: addDescription(function (_ref27) {\n var name = _ref27.name,\n directives = _ref27.directives,\n types = _ref27.types;\n return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n }),\n EnumTypeDefinition: addDescription(function (_ref28) {\n var name = _ref28.name,\n directives = _ref28.directives,\n values = _ref28.values;\n return join(['enum', name, join(directives, ' '), block(values)], ' ');\n }),\n EnumValueDefinition: addDescription(function (_ref29) {\n var name = _ref29.name,\n directives = _ref29.directives;\n return join([name, join(directives, ' ')], ' ');\n }),\n InputObjectTypeDefinition: addDescription(function (_ref30) {\n var name = _ref30.name,\n directives = _ref30.directives,\n fields = _ref30.fields;\n return join(['input', name, join(directives, ' '), block(fields)], ' ');\n }),\n DirectiveDefinition: addDescription(function (_ref31) {\n var name = _ref31.name,\n args = _ref31.arguments,\n repeatable = _ref31.repeatable,\n locations = _ref31.locations;\n return 'directive @' + name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + (repeatable ? ' repeatable' : '') + ' on ' + join(locations, ' | ');\n }),\n SchemaExtension: function SchemaExtension(_ref32) {\n var directives = _ref32.directives,\n operationTypes = _ref32.operationTypes;\n return join(['extend schema', join(directives, ' '), block(operationTypes)], ' ');\n },\n ScalarTypeExtension: function ScalarTypeExtension(_ref33) {\n var name = _ref33.name,\n directives = _ref33.directives;\n return join(['extend scalar', name, join(directives, ' ')], ' ');\n },\n ObjectTypeExtension: function ObjectTypeExtension(_ref34) {\n var name = _ref34.name,\n interfaces = _ref34.interfaces,\n directives = _ref34.directives,\n fields = _ref34.fields;\n return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n InterfaceTypeExtension: function InterfaceTypeExtension(_ref35) {\n var name = _ref35.name,\n interfaces = _ref35.interfaces,\n directives = _ref35.directives,\n fields = _ref35.fields;\n return join(['extend interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n UnionTypeExtension: function UnionTypeExtension(_ref36) {\n var name = _ref36.name,\n directives = _ref36.directives,\n types = _ref36.types;\n return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n },\n EnumTypeExtension: function EnumTypeExtension(_ref37) {\n var name = _ref37.name,\n directives = _ref37.directives,\n values = _ref37.values;\n return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n },\n InputObjectTypeExtension: function InputObjectTypeExtension(_ref38) {\n var name = _ref38.name,\n directives = _ref38.directives,\n fields = _ref38.fields;\n return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n }\n};\n\nfunction addDescription(cb) {\n return function (node) {\n return join([node.description, cb(node)], '\\n');\n };\n}\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\n\nfunction join(maybeArray) {\n var _maybeArray$filter$jo;\n\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (_maybeArray$filter$jo = maybeArray === null || maybeArray === void 0 ? void 0 : maybeArray.filter(function (x) {\n return x;\n }).join(separator)) !== null && _maybeArray$filter$jo !== void 0 ? _maybeArray$filter$jo : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\n\n\nfunction block(array) {\n return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\n\nfunction wrap(start, maybeString) {\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n return maybeString != null && maybeString !== '' ? start + maybeString + end : '';\n}\n\nfunction indent(str) {\n return wrap(' ', str.replace(/\\n/g, '\\n '));\n}\n\nfunction isMultiline(str) {\n return str.indexOf('\\n') !== -1;\n}\n\nfunction hasMultilineItems(maybeArray) {\n return maybeArray != null && maybeArray.some(isMultiline);\n}\n","import inspect from \"../jsutils/inspect.mjs\";\nimport invariant from \"../jsutils/invariant.mjs\";\nimport keyValMap from \"../jsutils/keyValMap.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\n\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value\n * will reflect the provided GraphQL value AST.\n *\n * | GraphQL Value | JavaScript Value |\n * | -------------------- | ---------------- |\n * | Input Object | Object |\n * | List | Array |\n * | Boolean | Boolean |\n * | String / Enum | String |\n * | Int / Float | Number |\n * | Null | null |\n *\n */\nexport function valueFromASTUntyped(valueNode, variables) {\n switch (valueNode.kind) {\n case Kind.NULL:\n return null;\n\n case Kind.INT:\n return parseInt(valueNode.value, 10);\n\n case Kind.FLOAT:\n return parseFloat(valueNode.value);\n\n case Kind.STRING:\n case Kind.ENUM:\n case Kind.BOOLEAN:\n return valueNode.value;\n\n case Kind.LIST:\n return valueNode.values.map(function (node) {\n return valueFromASTUntyped(node, variables);\n });\n\n case Kind.OBJECT:\n return keyValMap(valueNode.fields, function (field) {\n return field.name.value;\n }, function (field) {\n return valueFromASTUntyped(field.value, variables);\n });\n\n case Kind.VARIABLE:\n return variables === null || variables === void 0 ? void 0 : variables[valueNode.name.value];\n } // istanbul ignore next (Not reachable. All possible value nodes have been considered)\n\n\n false || invariant(0, 'Unexpected value node: ' + inspect(valueNode));\n}\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport objectEntries from \"../polyfills/objectEntries.mjs\";\nimport { SYMBOL_TO_STRING_TAG } from \"../polyfills/symbols.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport keyMap from \"../jsutils/keyMap.mjs\";\nimport mapValue from \"../jsutils/mapValue.mjs\";\nimport toObjMap from \"../jsutils/toObjMap.mjs\";\nimport devAssert from \"../jsutils/devAssert.mjs\";\nimport keyValMap from \"../jsutils/keyValMap.mjs\";\nimport instanceOf from \"../jsutils/instanceOf.mjs\";\nimport didYouMean from \"../jsutils/didYouMean.mjs\";\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport identityFunc from \"../jsutils/identityFunc.mjs\";\nimport defineInspect from \"../jsutils/defineInspect.mjs\";\nimport suggestionList from \"../jsutils/suggestionList.mjs\";\nimport { GraphQLError } from \"../error/GraphQLError.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { print } from \"../language/printer.mjs\";\nimport { valueFromASTUntyped } from \"../utilities/valueFromASTUntyped.mjs\";\nexport function isType(type) {\n return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isInputObjectType(type) || isListType(type) || isNonNullType(type);\n}\nexport function assertType(type) {\n if (!isType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL type.\"));\n }\n\n return type;\n}\n/**\n * There are predicates for each kind of GraphQL type.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isScalarType(type) {\n return instanceOf(type, GraphQLScalarType);\n}\nexport function assertScalarType(type) {\n if (!isScalarType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Scalar type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isObjectType(type) {\n return instanceOf(type, GraphQLObjectType);\n}\nexport function assertObjectType(type) {\n if (!isObjectType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Object type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isInterfaceType(type) {\n return instanceOf(type, GraphQLInterfaceType);\n}\nexport function assertInterfaceType(type) {\n if (!isInterfaceType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Interface type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isUnionType(type) {\n return instanceOf(type, GraphQLUnionType);\n}\nexport function assertUnionType(type) {\n if (!isUnionType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Union type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isEnumType(type) {\n return instanceOf(type, GraphQLEnumType);\n}\nexport function assertEnumType(type) {\n if (!isEnumType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Enum type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isInputObjectType(type) {\n return instanceOf(type, GraphQLInputObjectType);\n}\nexport function assertInputObjectType(type) {\n if (!isInputObjectType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Input Object type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isListType(type) {\n return instanceOf(type, GraphQLList);\n}\nexport function assertListType(type) {\n if (!isListType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL List type.\"));\n }\n\n return type;\n}\n// eslint-disable-next-line no-redeclare\nexport function isNonNullType(type) {\n return instanceOf(type, GraphQLNonNull);\n}\nexport function assertNonNullType(type) {\n if (!isNonNullType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL Non-Null type.\"));\n }\n\n return type;\n}\n/**\n * These types may be used as input types for arguments and directives.\n */\n\nexport function isInputType(type) {\n return isScalarType(type) || isEnumType(type) || isInputObjectType(type) || isWrappingType(type) && isInputType(type.ofType);\n}\nexport function assertInputType(type) {\n if (!isInputType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL input type.\"));\n }\n\n return type;\n}\n/**\n * These types may be used as output types as the result of fields.\n */\n\nexport function isOutputType(type) {\n return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isWrappingType(type) && isOutputType(type.ofType);\n}\nexport function assertOutputType(type) {\n if (!isOutputType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL output type.\"));\n }\n\n return type;\n}\n/**\n * These types may describe types which may be leaf values.\n */\n\nexport function isLeafType(type) {\n return isScalarType(type) || isEnumType(type);\n}\nexport function assertLeafType(type) {\n if (!isLeafType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL leaf type.\"));\n }\n\n return type;\n}\n/**\n * These types may describe the parent context of a selection set.\n */\n\nexport function isCompositeType(type) {\n return isObjectType(type) || isInterfaceType(type) || isUnionType(type);\n}\nexport function assertCompositeType(type) {\n if (!isCompositeType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL composite type.\"));\n }\n\n return type;\n}\n/**\n * These types may describe the parent context of a selection set.\n */\n\nexport function isAbstractType(type) {\n return isInterfaceType(type) || isUnionType(type);\n}\nexport function assertAbstractType(type) {\n if (!isAbstractType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL abstract type.\"));\n }\n\n return type;\n}\n/**\n * List Type Wrapper\n *\n * A list is a wrapping type which points to another type.\n * Lists are often created within the context of defining the fields of\n * an object type.\n *\n * Example:\n *\n * const PersonType = new GraphQLObjectType({\n * name: 'Person',\n * fields: () => ({\n * parents: { type: new GraphQLList(PersonType) },\n * children: { type: new GraphQLList(PersonType) },\n * })\n * })\n *\n */\n// FIXME: workaround to fix issue with Babel parser\n\n/* ::\ndeclare class GraphQLList<+T: GraphQLType> {\n +ofType: T;\n static <T>(ofType: T): GraphQLList<T>;\n // Note: constructors cannot be used for covariant types. Drop the \"new\".\n constructor(ofType: GraphQLType): void;\n}\n*/\n\nexport function GraphQLList(ofType) {\n // istanbul ignore else (to be removed in v16.0.0)\n if (this instanceof GraphQLList) {\n this.ofType = assertType(ofType);\n } else {\n return new GraphQLList(ofType);\n }\n} // Need to cast through any to alter the prototype.\n\nGraphQLList.prototype.toString = function toString() {\n return '[' + String(this.ofType) + ']';\n};\n\nGraphQLList.prototype.toJSON = function toJSON() {\n return this.toString();\n};\n\nObject.defineProperty(GraphQLList.prototype, SYMBOL_TO_STRING_TAG, {\n get: function get() {\n return 'GraphQLList';\n }\n}); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLList);\n/**\n * Non-Null Type Wrapper\n *\n * A non-null is a wrapping type which points to another type.\n * Non-null types enforce that their values are never null and can ensure\n * an error is raised if this ever occurs during a request. It is useful for\n * fields which you can make a strong guarantee on non-nullability, for example\n * usually the id field of a database row will never be null.\n *\n * Example:\n *\n * const RowType = new GraphQLObjectType({\n * name: 'Row',\n * fields: () => ({\n * id: { type: new GraphQLNonNull(GraphQLString) },\n * })\n * })\n *\n * Note: the enforcement of non-nullability occurs within the executor.\n */\n// FIXME: workaround to fix issue with Babel parser\n\n/* ::\ndeclare class GraphQLNonNull<+T: GraphQLNullableType> {\n +ofType: T;\n static <T>(ofType: T): GraphQLNonNull<T>;\n // Note: constructors cannot be used for covariant types. Drop the \"new\".\n constructor(ofType: GraphQLType): void;\n}\n*/\n\nexport function GraphQLNonNull(ofType) {\n // istanbul ignore else (to be removed in v16.0.0)\n if (this instanceof GraphQLNonNull) {\n this.ofType = assertNullableType(ofType);\n } else {\n return new GraphQLNonNull(ofType);\n }\n} // Need to cast through any to alter the prototype.\n\nGraphQLNonNull.prototype.toString = function toString() {\n return String(this.ofType) + '!';\n};\n\nGraphQLNonNull.prototype.toJSON = function toJSON() {\n return this.toString();\n};\n\nObject.defineProperty(GraphQLNonNull.prototype, SYMBOL_TO_STRING_TAG, {\n get: function get() {\n return 'GraphQLNonNull';\n }\n}); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLNonNull);\n/**\n * These types wrap and modify other types\n */\n\nexport function isWrappingType(type) {\n return isListType(type) || isNonNullType(type);\n}\nexport function assertWrappingType(type) {\n if (!isWrappingType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL wrapping type.\"));\n }\n\n return type;\n}\n/**\n * These types can all accept null as a value.\n */\n\nexport function isNullableType(type) {\n return isType(type) && !isNonNullType(type);\n}\nexport function assertNullableType(type) {\n if (!isNullableType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL nullable type.\"));\n }\n\n return type;\n}\n/* eslint-disable no-redeclare */\n\nexport function getNullableType(type) {\n /* eslint-enable no-redeclare */\n if (type) {\n return isNonNullType(type) ? type.ofType : type;\n }\n}\n/**\n * These named types do not include modifiers like List or NonNull.\n */\n\nexport function isNamedType(type) {\n return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isInputObjectType(type);\n}\nexport function assertNamedType(type) {\n if (!isNamedType(type)) {\n throw new Error(\"Expected \".concat(inspect(type), \" to be a GraphQL named type.\"));\n }\n\n return type;\n}\n/* eslint-disable no-redeclare */\n\nexport function getNamedType(type) {\n /* eslint-enable no-redeclare */\n if (type) {\n var unwrappedType = type;\n\n while (isWrappingType(unwrappedType)) {\n unwrappedType = unwrappedType.ofType;\n }\n\n return unwrappedType;\n }\n}\n/**\n * Used while defining GraphQL types to allow for circular references in\n * otherwise immutable type definitions.\n */\n\nfunction resolveThunk(thunk) {\n // $FlowFixMe[incompatible-use]\n return typeof thunk === 'function' ? thunk() : thunk;\n}\n\nfunction undefineIfEmpty(arr) {\n return arr && arr.length > 0 ? arr : undefined;\n}\n/**\n * Scalar Type Definition\n *\n * The leaf values of any request and input values to arguments are\n * Scalars (or Enums) and are defined with a name and a series of functions\n * used to parse input from ast or variables and to ensure validity.\n *\n * If a type's serialize function does not return a value (i.e. it returns\n * `undefined`) then an error will be raised and a `null` value will be returned\n * in the response. If the serialize function returns `null`, then no error will\n * be included in the response.\n *\n * Example:\n *\n * const OddType = new GraphQLScalarType({\n * name: 'Odd',\n * serialize(value) {\n * if (value % 2 === 1) {\n * return value;\n * }\n * }\n * });\n *\n */\n\n\nexport var GraphQLScalarType = /*#__PURE__*/function () {\n function GraphQLScalarType(config) {\n var _config$parseValue, _config$serialize, _config$parseLiteral;\n\n var parseValue = (_config$parseValue = config.parseValue) !== null && _config$parseValue !== void 0 ? _config$parseValue : identityFunc;\n this.name = config.name;\n this.description = config.description;\n this.specifiedByUrl = config.specifiedByUrl;\n this.serialize = (_config$serialize = config.serialize) !== null && _config$serialize !== void 0 ? _config$serialize : identityFunc;\n this.parseValue = parseValue;\n this.parseLiteral = (_config$parseLiteral = config.parseLiteral) !== null && _config$parseLiteral !== void 0 ? _config$parseLiteral : function (node, variables) {\n return parseValue(valueFromASTUntyped(node, variables));\n };\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = undefineIfEmpty(config.extensionASTNodes);\n typeof config.name === 'string' || devAssert(0, 'Must provide name.');\n config.specifiedByUrl == null || typeof config.specifiedByUrl === 'string' || devAssert(0, \"\".concat(this.name, \" must provide \\\"specifiedByUrl\\\" as a string, \") + \"but got: \".concat(inspect(config.specifiedByUrl), \".\"));\n config.serialize == null || typeof config.serialize === 'function' || devAssert(0, \"\".concat(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.\"));\n\n if (config.parseLiteral) {\n typeof config.parseValue === 'function' && typeof config.parseLiteral === 'function' || devAssert(0, \"\".concat(this.name, \" must provide both \\\"parseValue\\\" and \\\"parseLiteral\\\" functions.\"));\n }\n }\n\n var _proto = GraphQLScalarType.prototype;\n\n _proto.toConfig = function toConfig() {\n var _this$extensionASTNod;\n\n return {\n name: this.name,\n description: this.description,\n specifiedByUrl: this.specifiedByUrl,\n serialize: this.serialize,\n parseValue: this.parseValue,\n parseLiteral: this.parseLiteral,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: (_this$extensionASTNod = this.extensionASTNodes) !== null && _this$extensionASTNod !== void 0 ? _this$extensionASTNod : []\n };\n };\n\n _proto.toString = function toString() {\n return this.name;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLScalarType, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLScalarType';\n }\n }]);\n\n return GraphQLScalarType;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLScalarType);\n\n/**\n * Object Type Definition\n *\n * Almost all of the GraphQL types you define will be object types. Object types\n * have a name, but most importantly describe their fields.\n *\n * Example:\n *\n * const AddressType = new GraphQLObjectType({\n * name: 'Address',\n * fields: {\n * street: { type: GraphQLString },\n * number: { type: GraphQLInt },\n * formatted: {\n * type: GraphQLString,\n * resolve(obj) {\n * return obj.number + ' ' + obj.street\n * }\n * }\n * }\n * });\n *\n * When two types need to refer to each other, or a type needs to refer to\n * itself in a field, you can use a function expression (aka a closure or a\n * thunk) to supply the fields lazily.\n *\n * Example:\n *\n * const PersonType = new GraphQLObjectType({\n * name: 'Person',\n * fields: () => ({\n * name: { type: GraphQLString },\n * bestFriend: { type: PersonType },\n * })\n * });\n *\n */\nexport var GraphQLObjectType = /*#__PURE__*/function () {\n function GraphQLObjectType(config) {\n this.name = config.name;\n this.description = config.description;\n this.isTypeOf = config.isTypeOf;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = undefineIfEmpty(config.extensionASTNodes);\n this._fields = defineFieldMap.bind(undefined, config);\n this._interfaces = defineInterfaces.bind(undefined, config);\n typeof config.name === 'string' || devAssert(0, 'Must provide name.');\n config.isTypeOf == null || typeof config.isTypeOf === 'function' || devAssert(0, \"\".concat(this.name, \" must provide \\\"isTypeOf\\\" as a function, \") + \"but got: \".concat(inspect(config.isTypeOf), \".\"));\n }\n\n var _proto2 = GraphQLObjectType.prototype;\n\n _proto2.getFields = function getFields() {\n if (typeof this._fields === 'function') {\n this._fields = this._fields();\n }\n\n return this._fields;\n };\n\n _proto2.getInterfaces = function getInterfaces() {\n if (typeof this._interfaces === 'function') {\n this._interfaces = this._interfaces();\n }\n\n return this._interfaces;\n };\n\n _proto2.toConfig = function toConfig() {\n return {\n name: this.name,\n description: this.description,\n interfaces: this.getInterfaces(),\n fields: fieldsToFieldsConfig(this.getFields()),\n isTypeOf: this.isTypeOf,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: this.extensionASTNodes || []\n };\n };\n\n _proto2.toString = function toString() {\n return this.name;\n };\n\n _proto2.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLObjectType, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLObjectType';\n }\n }]);\n\n return GraphQLObjectType;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLObjectType);\n\nfunction defineInterfaces(config) {\n var _resolveThunk;\n\n var interfaces = (_resolveThunk = resolveThunk(config.interfaces)) !== null && _resolveThunk !== void 0 ? _resolveThunk : [];\n Array.isArray(interfaces) || devAssert(0, \"\".concat(config.name, \" interfaces must be an Array or a function which returns an Array.\"));\n return interfaces;\n}\n\nfunction defineFieldMap(config) {\n var fieldMap = resolveThunk(config.fields);\n isPlainObj(fieldMap) || devAssert(0, \"\".concat(config.name, \" fields must be an object with field names as keys or a function which returns such an object.\"));\n return mapValue(fieldMap, function (fieldConfig, fieldName) {\n var _fieldConfig$args;\n\n isPlainObj(fieldConfig) || devAssert(0, \"\".concat(config.name, \".\").concat(fieldName, \" field config must be an object.\"));\n !('isDeprecated' in fieldConfig) || devAssert(0, \"\".concat(config.name, \".\").concat(fieldName, \" should provide \\\"deprecationReason\\\" instead of \\\"isDeprecated\\\".\"));\n fieldConfig.resolve == null || typeof fieldConfig.resolve === 'function' || devAssert(0, \"\".concat(config.name, \".\").concat(fieldName, \" field resolver must be a function if \") + \"provided, but got: \".concat(inspect(fieldConfig.resolve), \".\"));\n var argsConfig = (_fieldConfig$args = fieldConfig.args) !== null && _fieldConfig$args !== void 0 ? _fieldConfig$args : {};\n isPlainObj(argsConfig) || devAssert(0, \"\".concat(config.name, \".\").concat(fieldName, \" args must be an object with argument names as keys.\"));\n var args = objectEntries(argsConfig).map(function (_ref) {\n var argName = _ref[0],\n argConfig = _ref[1];\n return {\n name: argName,\n description: argConfig.description,\n type: argConfig.type,\n defaultValue: argConfig.defaultValue,\n deprecationReason: argConfig.deprecationReason,\n extensions: argConfig.extensions && toObjMap(argConfig.extensions),\n astNode: argConfig.astNode\n };\n });\n return {\n name: fieldName,\n description: fieldConfig.description,\n type: fieldConfig.type,\n args: args,\n resolve: fieldConfig.resolve,\n subscribe: fieldConfig.subscribe,\n isDeprecated: fieldConfig.deprecationReason != null,\n deprecationReason: fieldConfig.deprecationReason,\n extensions: fieldConfig.extensions && toObjMap(fieldConfig.extensions),\n astNode: fieldConfig.astNode\n };\n });\n}\n\nfunction isPlainObj(obj) {\n return isObjectLike(obj) && !Array.isArray(obj);\n}\n\nfunction fieldsToFieldsConfig(fields) {\n return mapValue(fields, function (field) {\n return {\n description: field.description,\n type: field.type,\n args: argsToArgsConfig(field.args),\n resolve: field.resolve,\n subscribe: field.subscribe,\n deprecationReason: field.deprecationReason,\n extensions: field.extensions,\n astNode: field.astNode\n };\n });\n}\n/**\n * @internal\n */\n\n\nexport function argsToArgsConfig(args) {\n return keyValMap(args, function (arg) {\n return arg.name;\n }, function (arg) {\n return {\n description: arg.description,\n type: arg.type,\n defaultValue: arg.defaultValue,\n deprecationReason: arg.deprecationReason,\n extensions: arg.extensions,\n astNode: arg.astNode\n };\n });\n}\nexport function isRequiredArgument(arg) {\n return isNonNullType(arg.type) && arg.defaultValue === undefined;\n}\n\n/**\n * Interface Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Interface type\n * is used to describe what types are possible, what fields are in common across\n * all types, as well as a function to determine which type is actually used\n * when the field is resolved.\n *\n * Example:\n *\n * const EntityType = new GraphQLInterfaceType({\n * name: 'Entity',\n * fields: {\n * name: { type: GraphQLString }\n * }\n * });\n *\n */\nexport var GraphQLInterfaceType = /*#__PURE__*/function () {\n function GraphQLInterfaceType(config) {\n this.name = config.name;\n this.description = config.description;\n this.resolveType = config.resolveType;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = undefineIfEmpty(config.extensionASTNodes);\n this._fields = defineFieldMap.bind(undefined, config);\n this._interfaces = defineInterfaces.bind(undefined, config);\n typeof config.name === 'string' || devAssert(0, 'Must provide name.');\n config.resolveType == null || typeof config.resolveType === 'function' || devAssert(0, \"\".concat(this.name, \" must provide \\\"resolveType\\\" as a function, \") + \"but got: \".concat(inspect(config.resolveType), \".\"));\n }\n\n var _proto3 = GraphQLInterfaceType.prototype;\n\n _proto3.getFields = function getFields() {\n if (typeof this._fields === 'function') {\n this._fields = this._fields();\n }\n\n return this._fields;\n };\n\n _proto3.getInterfaces = function getInterfaces() {\n if (typeof this._interfaces === 'function') {\n this._interfaces = this._interfaces();\n }\n\n return this._interfaces;\n };\n\n _proto3.toConfig = function toConfig() {\n var _this$extensionASTNod2;\n\n return {\n name: this.name,\n description: this.description,\n interfaces: this.getInterfaces(),\n fields: fieldsToFieldsConfig(this.getFields()),\n resolveType: this.resolveType,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: (_this$extensionASTNod2 = this.extensionASTNodes) !== null && _this$extensionASTNod2 !== void 0 ? _this$extensionASTNod2 : []\n };\n };\n\n _proto3.toString = function toString() {\n return this.name;\n };\n\n _proto3.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLInterfaceType, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLInterfaceType';\n }\n }]);\n\n return GraphQLInterfaceType;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLInterfaceType);\n\n/**\n * Union Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Union type\n * is used to describe what types are possible as well as providing a function\n * to determine which type is actually used when the field is resolved.\n *\n * Example:\n *\n * const PetType = new GraphQLUnionType({\n * name: 'Pet',\n * types: [ DogType, CatType ],\n * resolveType(value) {\n * if (value instanceof Dog) {\n * return DogType;\n * }\n * if (value instanceof Cat) {\n * return CatType;\n * }\n * }\n * });\n *\n */\nexport var GraphQLUnionType = /*#__PURE__*/function () {\n function GraphQLUnionType(config) {\n this.name = config.name;\n this.description = config.description;\n this.resolveType = config.resolveType;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = undefineIfEmpty(config.extensionASTNodes);\n this._types = defineTypes.bind(undefined, config);\n typeof config.name === 'string' || devAssert(0, 'Must provide name.');\n config.resolveType == null || typeof config.resolveType === 'function' || devAssert(0, \"\".concat(this.name, \" must provide \\\"resolveType\\\" as a function, \") + \"but got: \".concat(inspect(config.resolveType), \".\"));\n }\n\n var _proto4 = GraphQLUnionType.prototype;\n\n _proto4.getTypes = function getTypes() {\n if (typeof this._types === 'function') {\n this._types = this._types();\n }\n\n return this._types;\n };\n\n _proto4.toConfig = function toConfig() {\n var _this$extensionASTNod3;\n\n return {\n name: this.name,\n description: this.description,\n types: this.getTypes(),\n resolveType: this.resolveType,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: (_this$extensionASTNod3 = this.extensionASTNodes) !== null && _this$extensionASTNod3 !== void 0 ? _this$extensionASTNod3 : []\n };\n };\n\n _proto4.toString = function toString() {\n return this.name;\n };\n\n _proto4.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLUnionType, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLUnionType';\n }\n }]);\n\n return GraphQLUnionType;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLUnionType);\n\nfunction defineTypes(config) {\n var types = resolveThunk(config.types);\n Array.isArray(types) || devAssert(0, \"Must provide Array of types or a function which returns such an array for Union \".concat(config.name, \".\"));\n return types;\n}\n\n/**\n * Enum Type Definition\n *\n * Some leaf values of requests and input values are Enums. GraphQL serializes\n * Enum values as strings, however internally Enums can be represented by any\n * kind of type, often integers.\n *\n * Example:\n *\n * const RGBType = new GraphQLEnumType({\n * name: 'RGB',\n * values: {\n * RED: { value: 0 },\n * GREEN: { value: 1 },\n * BLUE: { value: 2 }\n * }\n * });\n *\n * Note: If a value is not provided in a definition, the name of the enum value\n * will be used as its internal value.\n */\nexport var GraphQLEnumType\n/* <T> */\n= /*#__PURE__*/function () {\n function GraphQLEnumType(config) {\n this.name = config.name;\n this.description = config.description;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = undefineIfEmpty(config.extensionASTNodes);\n this._values = defineEnumValues(this.name, config.values);\n this._valueLookup = new Map(this._values.map(function (enumValue) {\n return [enumValue.value, enumValue];\n }));\n this._nameLookup = keyMap(this._values, function (value) {\n return value.name;\n });\n typeof config.name === 'string' || devAssert(0, 'Must provide name.');\n }\n\n var _proto5 = GraphQLEnumType.prototype;\n\n _proto5.getValues = function getValues() {\n return this._values;\n };\n\n _proto5.getValue = function getValue(name) {\n return this._nameLookup[name];\n };\n\n _proto5.serialize = function serialize(outputValue) {\n var enumValue = this._valueLookup.get(outputValue);\n\n if (enumValue === undefined) {\n throw new GraphQLError(\"Enum \\\"\".concat(this.name, \"\\\" cannot represent value: \").concat(inspect(outputValue)));\n }\n\n return enumValue.name;\n };\n\n _proto5.parseValue = function parseValue(inputValue)\n /* T */\n {\n if (typeof inputValue !== 'string') {\n var valueStr = inspect(inputValue);\n throw new GraphQLError(\"Enum \\\"\".concat(this.name, \"\\\" cannot represent non-string value: \").concat(valueStr, \".\") + didYouMeanEnumValue(this, valueStr));\n }\n\n var enumValue = this.getValue(inputValue);\n\n if (enumValue == null) {\n throw new GraphQLError(\"Value \\\"\".concat(inputValue, \"\\\" does not exist in \\\"\").concat(this.name, \"\\\" enum.\") + didYouMeanEnumValue(this, inputValue));\n }\n\n return enumValue.value;\n };\n\n _proto5.parseLiteral = function parseLiteral(valueNode, _variables)\n /* T */\n {\n // Note: variables will be resolved to a value before calling this function.\n if (valueNode.kind !== Kind.ENUM) {\n var valueStr = print(valueNode);\n throw new GraphQLError(\"Enum \\\"\".concat(this.name, \"\\\" cannot represent non-enum value: \").concat(valueStr, \".\") + didYouMeanEnumValue(this, valueStr), valueNode);\n }\n\n var enumValue = this.getValue(valueNode.value);\n\n if (enumValue == null) {\n var _valueStr = print(valueNode);\n\n throw new GraphQLError(\"Value \\\"\".concat(_valueStr, \"\\\" does not exist in \\\"\").concat(this.name, \"\\\" enum.\") + didYouMeanEnumValue(this, _valueStr), valueNode);\n }\n\n return enumValue.value;\n };\n\n _proto5.toConfig = function toConfig() {\n var _this$extensionASTNod4;\n\n var values = keyValMap(this.getValues(), function (value) {\n return value.name;\n }, function (value) {\n return {\n description: value.description,\n value: value.value,\n deprecationReason: value.deprecationReason,\n extensions: value.extensions,\n astNode: value.astNode\n };\n });\n return {\n name: this.name,\n description: this.description,\n values: values,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: (_this$extensionASTNod4 = this.extensionASTNodes) !== null && _this$extensionASTNod4 !== void 0 ? _this$extensionASTNod4 : []\n };\n };\n\n _proto5.toString = function toString() {\n return this.name;\n };\n\n _proto5.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLEnumType, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLEnumType';\n }\n }]);\n\n return GraphQLEnumType;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLEnumType);\n\nfunction didYouMeanEnumValue(enumType, unknownValueStr) {\n var allNames = enumType.getValues().map(function (value) {\n return value.name;\n });\n var suggestedValues = suggestionList(unknownValueStr, allNames);\n return didYouMean('the enum value', suggestedValues);\n}\n\nfunction defineEnumValues(typeName, valueMap) {\n isPlainObj(valueMap) || devAssert(0, \"\".concat(typeName, \" values must be an object with value names as keys.\"));\n return objectEntries(valueMap).map(function (_ref2) {\n var valueName = _ref2[0],\n valueConfig = _ref2[1];\n isPlainObj(valueConfig) || devAssert(0, \"\".concat(typeName, \".\").concat(valueName, \" must refer to an object with a \\\"value\\\" key \") + \"representing an internal value but got: \".concat(inspect(valueConfig), \".\"));\n !('isDeprecated' in valueConfig) || devAssert(0, \"\".concat(typeName, \".\").concat(valueName, \" should provide \\\"deprecationReason\\\" instead of \\\"isDeprecated\\\".\"));\n return {\n name: valueName,\n description: valueConfig.description,\n value: valueConfig.value !== undefined ? valueConfig.value : valueName,\n isDeprecated: valueConfig.deprecationReason != null,\n deprecationReason: valueConfig.deprecationReason,\n extensions: valueConfig.extensions && toObjMap(valueConfig.extensions),\n astNode: valueConfig.astNode\n };\n });\n}\n\n/**\n * Input Object Type Definition\n *\n * An input object defines a structured collection of fields which may be\n * supplied to a field argument.\n *\n * Using `NonNull` will ensure that a value must be provided by the query\n *\n * Example:\n *\n * const GeoPoint = new GraphQLInputObjectType({\n * name: 'GeoPoint',\n * fields: {\n * lat: { type: new GraphQLNonNull(GraphQLFloat) },\n * lon: { type: new GraphQLNonNull(GraphQLFloat) },\n * alt: { type: GraphQLFloat, defaultValue: 0 },\n * }\n * });\n *\n */\nexport var GraphQLInputObjectType = /*#__PURE__*/function () {\n function GraphQLInputObjectType(config) {\n this.name = config.name;\n this.description = config.description;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = undefineIfEmpty(config.extensionASTNodes);\n this._fields = defineInputFieldMap.bind(undefined, config);\n typeof config.name === 'string' || devAssert(0, 'Must provide name.');\n }\n\n var _proto6 = GraphQLInputObjectType.prototype;\n\n _proto6.getFields = function getFields() {\n if (typeof this._fields === 'function') {\n this._fields = this._fields();\n }\n\n return this._fields;\n };\n\n _proto6.toConfig = function toConfig() {\n var _this$extensionASTNod5;\n\n var fields = mapValue(this.getFields(), function (field) {\n return {\n description: field.description,\n type: field.type,\n defaultValue: field.defaultValue,\n deprecationReason: field.deprecationReason,\n extensions: field.extensions,\n astNode: field.astNode\n };\n });\n return {\n name: this.name,\n description: this.description,\n fields: fields,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: (_this$extensionASTNod5 = this.extensionASTNodes) !== null && _this$extensionASTNod5 !== void 0 ? _this$extensionASTNod5 : []\n };\n };\n\n _proto6.toString = function toString() {\n return this.name;\n };\n\n _proto6.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLInputObjectType, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLInputObjectType';\n }\n }]);\n\n return GraphQLInputObjectType;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLInputObjectType);\n\nfunction defineInputFieldMap(config) {\n var fieldMap = resolveThunk(config.fields);\n isPlainObj(fieldMap) || devAssert(0, \"\".concat(config.name, \" fields must be an object with field names as keys or a function which returns such an object.\"));\n return mapValue(fieldMap, function (fieldConfig, fieldName) {\n !('resolve' in fieldConfig) || devAssert(0, \"\".concat(config.name, \".\").concat(fieldName, \" field has a resolve property, but Input Types cannot define resolvers.\"));\n return {\n name: fieldName,\n description: fieldConfig.description,\n type: fieldConfig.type,\n defaultValue: fieldConfig.defaultValue,\n deprecationReason: fieldConfig.deprecationReason,\n extensions: fieldConfig.extensions && toObjMap(fieldConfig.extensions),\n astNode: fieldConfig.astNode\n };\n });\n}\n\nexport function isRequiredInputField(field) {\n return isNonNullType(field.type) && field.defaultValue === undefined;\n}\n","import { SYMBOL_ITERATOR } from \"./symbols.mjs\";\n\n/* eslint-disable no-redeclare */\n// $FlowFixMe[name-already-bound]\nvar arrayFrom = Array.from || function (obj, mapFn, thisArg) {\n if (obj == null) {\n throw new TypeError('Array.from requires an array-like object - not null or undefined');\n } // Is Iterable?\n\n\n var iteratorMethod = obj[SYMBOL_ITERATOR];\n\n if (typeof iteratorMethod === 'function') {\n var iterator = iteratorMethod.call(obj);\n var result = [];\n var step;\n\n for (var i = 0; !(step = iterator.next()).done; ++i) {\n result.push(mapFn.call(thisArg, step.value, i)); // Infinite Iterators could cause forEach to run forever.\n // After a very large number of iterations, produce an error.\n // istanbul ignore if (Too big to actually test)\n\n if (i > 9999999) {\n throw new TypeError('Near-infinite iteration.');\n }\n }\n\n return result;\n } // Is Array like?\n\n\n var length = obj.length;\n\n if (typeof length === 'number' && length >= 0 && length % 1 === 0) {\n var _result = [];\n\n for (var _i = 0; _i < length; ++_i) {\n if (Object.prototype.hasOwnProperty.call(obj, _i)) {\n _result.push(mapFn.call(thisArg, obj[_i], _i));\n }\n }\n\n return _result;\n }\n\n return [];\n};\n\nexport default arrayFrom;\n","/* eslint-disable no-redeclare */\n// $FlowFixMe[name-already-bound] workaround for: https://github.com/facebook/flow/issues/4441\nvar isFinitePolyfill = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value);\n};\n\nexport default isFinitePolyfill;\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { SYMBOL_ITERATOR } from \"../polyfills/symbols.mjs\";\n/**\n * Safer version of `Array.from` that return `null` if value isn't convertible to array.\n * Also protects against Array-like objects without items.\n *\n * @example\n *\n * safeArrayFrom([ 1, 2, 3 ]) // [1, 2, 3]\n * safeArrayFrom('ABC') // null\n * safeArrayFrom({ length: 1 }) // null\n * safeArrayFrom({ length: 1, 0: 'Alpha' }) // ['Alpha']\n * safeArrayFrom({ key: 'value' }) // null\n * safeArrayFrom(new Map()) // []\n *\n */\n\nexport default function safeArrayFrom(collection) {\n var mapFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (item) {\n return item;\n };\n\n if (collection == null || _typeof(collection) !== 'object') {\n return null;\n }\n\n if (Array.isArray(collection)) {\n return collection.map(mapFn);\n } // Is Iterable?\n\n\n var iteratorMethod = collection[SYMBOL_ITERATOR];\n\n if (typeof iteratorMethod === 'function') {\n // $FlowFixMe[incompatible-use]\n var iterator = iteratorMethod.call(collection);\n var result = [];\n var step;\n\n for (var i = 0; !(step = iterator.next()).done; ++i) {\n result.push(mapFn(step.value, i));\n }\n\n return result;\n } // Is Array like?\n\n\n var length = collection.length;\n\n if (typeof length === 'number' && length >= 0 && length % 1 === 0) {\n var _result = [];\n\n for (var _i = 0; _i < length; ++_i) {\n if (!Object.prototype.hasOwnProperty.call(collection, _i)) {\n return null;\n }\n\n _result.push(mapFn(collection[String(_i)], _i));\n }\n\n return _result;\n }\n\n return null;\n}\n","/* eslint-disable no-redeclare */\n// $FlowFixMe[name-already-bound] workaround for: https://github.com/facebook/flow/issues/4441\nvar isInteger = Number.isInteger || function (value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n};\n\nexport default isInteger;\n","import isFinite from \"../polyfills/isFinite.mjs\";\nimport isInteger from \"../polyfills/isInteger.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { print } from \"../language/printer.mjs\";\nimport { GraphQLError } from \"../error/GraphQLError.mjs\";\nimport { GraphQLScalarType } from \"./definition.mjs\"; // As per the GraphQL Spec, Integers are only treated as valid when a valid\n// 32-bit signed integer, providing the broadest support across platforms.\n//\n// n.b. JavaScript's integers are safe between -(2^53 - 1) and 2^53 - 1 because\n// they are internally represented as IEEE 754 doubles.\n\nvar MAX_INT = 2147483647;\nvar MIN_INT = -2147483648;\n\nfunction serializeInt(outputValue) {\n var coercedValue = serializeObject(outputValue);\n\n if (typeof coercedValue === 'boolean') {\n return coercedValue ? 1 : 0;\n }\n\n var num = coercedValue;\n\n if (typeof coercedValue === 'string' && coercedValue !== '') {\n num = Number(coercedValue);\n }\n\n if (!isInteger(num)) {\n throw new GraphQLError(\"Int cannot represent non-integer value: \".concat(inspect(coercedValue)));\n }\n\n if (num > MAX_INT || num < MIN_INT) {\n throw new GraphQLError('Int cannot represent non 32-bit signed integer value: ' + inspect(coercedValue));\n }\n\n return num;\n}\n\nfunction coerceInt(inputValue) {\n if (!isInteger(inputValue)) {\n throw new GraphQLError(\"Int cannot represent non-integer value: \".concat(inspect(inputValue)));\n }\n\n if (inputValue > MAX_INT || inputValue < MIN_INT) {\n throw new GraphQLError(\"Int cannot represent non 32-bit signed integer value: \".concat(inputValue));\n }\n\n return inputValue;\n}\n\nexport var GraphQLInt = new GraphQLScalarType({\n name: 'Int',\n description: 'The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.',\n serialize: serializeInt,\n parseValue: coerceInt,\n parseLiteral: function parseLiteral(valueNode) {\n if (valueNode.kind !== Kind.INT) {\n throw new GraphQLError(\"Int cannot represent non-integer value: \".concat(print(valueNode)), valueNode);\n }\n\n var num = parseInt(valueNode.value, 10);\n\n if (num > MAX_INT || num < MIN_INT) {\n throw new GraphQLError(\"Int cannot represent non 32-bit signed integer value: \".concat(valueNode.value), valueNode);\n }\n\n return num;\n }\n});\n\nfunction serializeFloat(outputValue) {\n var coercedValue = serializeObject(outputValue);\n\n if (typeof coercedValue === 'boolean') {\n return coercedValue ? 1 : 0;\n }\n\n var num = coercedValue;\n\n if (typeof coercedValue === 'string' && coercedValue !== '') {\n num = Number(coercedValue);\n }\n\n if (!isFinite(num)) {\n throw new GraphQLError(\"Float cannot represent non numeric value: \".concat(inspect(coercedValue)));\n }\n\n return num;\n}\n\nfunction coerceFloat(inputValue) {\n if (!isFinite(inputValue)) {\n throw new GraphQLError(\"Float cannot represent non numeric value: \".concat(inspect(inputValue)));\n }\n\n return inputValue;\n}\n\nexport var GraphQLFloat = new GraphQLScalarType({\n name: 'Float',\n description: 'The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).',\n serialize: serializeFloat,\n parseValue: coerceFloat,\n parseLiteral: function parseLiteral(valueNode) {\n if (valueNode.kind !== Kind.FLOAT && valueNode.kind !== Kind.INT) {\n throw new GraphQLError(\"Float cannot represent non numeric value: \".concat(print(valueNode)), valueNode);\n }\n\n return parseFloat(valueNode.value);\n }\n}); // Support serializing objects with custom valueOf() or toJSON() functions -\n// a common way to represent a complex value which can be represented as\n// a string (ex: MongoDB id objects).\n\nfunction serializeObject(outputValue) {\n if (isObjectLike(outputValue)) {\n if (typeof outputValue.valueOf === 'function') {\n var valueOfResult = outputValue.valueOf();\n\n if (!isObjectLike(valueOfResult)) {\n return valueOfResult;\n }\n }\n\n if (typeof outputValue.toJSON === 'function') {\n // $FlowFixMe[incompatible-use]\n return outputValue.toJSON();\n }\n }\n\n return outputValue;\n}\n\nfunction serializeString(outputValue) {\n var coercedValue = serializeObject(outputValue); // Serialize string, boolean and number values to a string, but do not\n // attempt to coerce object, function, symbol, or other types as strings.\n\n if (typeof coercedValue === 'string') {\n return coercedValue;\n }\n\n if (typeof coercedValue === 'boolean') {\n return coercedValue ? 'true' : 'false';\n }\n\n if (isFinite(coercedValue)) {\n return coercedValue.toString();\n }\n\n throw new GraphQLError(\"String cannot represent value: \".concat(inspect(outputValue)));\n}\n\nfunction coerceString(inputValue) {\n if (typeof inputValue !== 'string') {\n throw new GraphQLError(\"String cannot represent a non string value: \".concat(inspect(inputValue)));\n }\n\n return inputValue;\n}\n\nexport var GraphQLString = new GraphQLScalarType({\n name: 'String',\n description: 'The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.',\n serialize: serializeString,\n parseValue: coerceString,\n parseLiteral: function parseLiteral(valueNode) {\n if (valueNode.kind !== Kind.STRING) {\n throw new GraphQLError(\"String cannot represent a non string value: \".concat(print(valueNode)), valueNode);\n }\n\n return valueNode.value;\n }\n});\n\nfunction serializeBoolean(outputValue) {\n var coercedValue = serializeObject(outputValue);\n\n if (typeof coercedValue === 'boolean') {\n return coercedValue;\n }\n\n if (isFinite(coercedValue)) {\n return coercedValue !== 0;\n }\n\n throw new GraphQLError(\"Boolean cannot represent a non boolean value: \".concat(inspect(coercedValue)));\n}\n\nfunction coerceBoolean(inputValue) {\n if (typeof inputValue !== 'boolean') {\n throw new GraphQLError(\"Boolean cannot represent a non boolean value: \".concat(inspect(inputValue)));\n }\n\n return inputValue;\n}\n\nexport var GraphQLBoolean = new GraphQLScalarType({\n name: 'Boolean',\n description: 'The `Boolean` scalar type represents `true` or `false`.',\n serialize: serializeBoolean,\n parseValue: coerceBoolean,\n parseLiteral: function parseLiteral(valueNode) {\n if (valueNode.kind !== Kind.BOOLEAN) {\n throw new GraphQLError(\"Boolean cannot represent a non boolean value: \".concat(print(valueNode)), valueNode);\n }\n\n return valueNode.value;\n }\n});\n\nfunction serializeID(outputValue) {\n var coercedValue = serializeObject(outputValue);\n\n if (typeof coercedValue === 'string') {\n return coercedValue;\n }\n\n if (isInteger(coercedValue)) {\n return String(coercedValue);\n }\n\n throw new GraphQLError(\"ID cannot represent value: \".concat(inspect(outputValue)));\n}\n\nfunction coerceID(inputValue) {\n if (typeof inputValue === 'string') {\n return inputValue;\n }\n\n if (isInteger(inputValue)) {\n return inputValue.toString();\n }\n\n throw new GraphQLError(\"ID cannot represent value: \".concat(inspect(inputValue)));\n}\n\nexport var GraphQLID = new GraphQLScalarType({\n name: 'ID',\n description: 'The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.',\n serialize: serializeID,\n parseValue: coerceID,\n parseLiteral: function parseLiteral(valueNode) {\n if (valueNode.kind !== Kind.STRING && valueNode.kind !== Kind.INT) {\n throw new GraphQLError('ID cannot represent a non-string and non-integer value: ' + print(valueNode), valueNode);\n }\n\n return valueNode.value;\n }\n});\nexport var specifiedScalarTypes = Object.freeze([GraphQLString, GraphQLInt, GraphQLFloat, GraphQLBoolean, GraphQLID]);\nexport function isSpecifiedScalarType(type) {\n return specifiedScalarTypes.some(function (_ref) {\n var name = _ref.name;\n return type.name === name;\n });\n}\n","import isFinite from \"../polyfills/isFinite.mjs\";\nimport objectValues from \"../polyfills/objectValues.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport invariant from \"../jsutils/invariant.mjs\";\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport safeArrayFrom from \"../jsutils/safeArrayFrom.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { GraphQLID } from \"../type/scalars.mjs\";\nimport { isLeafType, isEnumType, isInputObjectType, isListType, isNonNullType } from \"../type/definition.mjs\";\n/**\n * Produces a GraphQL Value AST given a JavaScript object.\n * Function will match JavaScript/JSON values to GraphQL AST schema format\n * by using suggested GraphQLInputType. For example:\n *\n * astFromValue(\"value\", GraphQLString)\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * JavaScript values.\n *\n * | JSON Value | GraphQL Value |\n * | ------------- | -------------------- |\n * | Object | Input Object |\n * | Array | List |\n * | Boolean | Boolean |\n * | String | String / Enum Value |\n * | Number | Int / Float |\n * | Mixed | Enum Value |\n * | null | NullValue |\n *\n */\n\nexport function astFromValue(value, type) {\n if (isNonNullType(type)) {\n var astValue = astFromValue(value, type.ofType);\n\n if ((astValue === null || astValue === void 0 ? void 0 : astValue.kind) === Kind.NULL) {\n return null;\n }\n\n return astValue;\n } // only explicit null, not undefined, NaN\n\n\n if (value === null) {\n return {\n kind: Kind.NULL\n };\n } // undefined\n\n\n if (value === undefined) {\n return null;\n } // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but\n // the value is not an array, convert the value using the list's item type.\n\n\n if (isListType(type)) {\n var itemType = type.ofType;\n var items = safeArrayFrom(value);\n\n if (items != null) {\n var valuesNodes = [];\n\n for (var _i2 = 0; _i2 < items.length; _i2++) {\n var item = items[_i2];\n var itemNode = astFromValue(item, itemType);\n\n if (itemNode != null) {\n valuesNodes.push(itemNode);\n }\n }\n\n return {\n kind: Kind.LIST,\n values: valuesNodes\n };\n }\n\n return astFromValue(value, itemType);\n } // Populate the fields of the input object by creating ASTs from each value\n // in the JavaScript object according to the fields in the input type.\n\n\n if (isInputObjectType(type)) {\n if (!isObjectLike(value)) {\n return null;\n }\n\n var fieldNodes = [];\n\n for (var _i4 = 0, _objectValues2 = objectValues(type.getFields()); _i4 < _objectValues2.length; _i4++) {\n var field = _objectValues2[_i4];\n var fieldValue = astFromValue(value[field.name], field.type);\n\n if (fieldValue) {\n fieldNodes.push({\n kind: Kind.OBJECT_FIELD,\n name: {\n kind: Kind.NAME,\n value: field.name\n },\n value: fieldValue\n });\n }\n }\n\n return {\n kind: Kind.OBJECT,\n fields: fieldNodes\n };\n } // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2618')\n\n\n if (isLeafType(type)) {\n // Since value is an internally represented value, it must be serialized\n // to an externally represented value before converting into an AST.\n var serialized = type.serialize(value);\n\n if (serialized == null) {\n return null;\n } // Others serialize based on their corresponding JavaScript scalar types.\n\n\n if (typeof serialized === 'boolean') {\n return {\n kind: Kind.BOOLEAN,\n value: serialized\n };\n } // JavaScript numbers can be Int or Float values.\n\n\n if (typeof serialized === 'number' && isFinite(serialized)) {\n var stringNum = String(serialized);\n return integerStringRegExp.test(stringNum) ? {\n kind: Kind.INT,\n value: stringNum\n } : {\n kind: Kind.FLOAT,\n value: stringNum\n };\n }\n\n if (typeof serialized === 'string') {\n // Enum types use Enum literals.\n if (isEnumType(type)) {\n return {\n kind: Kind.ENUM,\n value: serialized\n };\n } // ID types can use Int literals.\n\n\n if (type === GraphQLID && integerStringRegExp.test(serialized)) {\n return {\n kind: Kind.INT,\n value: serialized\n };\n }\n\n return {\n kind: Kind.STRING,\n value: serialized\n };\n }\n\n throw new TypeError(\"Cannot convert value to AST: \".concat(inspect(serialized), \".\"));\n } // istanbul ignore next (Not reachable. All possible input types have been considered)\n\n\n false || invariant(0, 'Unexpected input type: ' + inspect(type));\n}\n/**\n * IntValue:\n * - NegativeSign? 0\n * - NegativeSign? NonZeroDigit ( Digit+ )?\n */\n\nvar integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/;\n","import objectValues from \"../polyfills/objectValues.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport invariant from \"../jsutils/invariant.mjs\";\nimport { print } from \"../language/printer.mjs\";\nimport { DirectiveLocation } from \"../language/directiveLocation.mjs\";\nimport { astFromValue } from \"../utilities/astFromValue.mjs\";\nimport { GraphQLString, GraphQLBoolean } from \"./scalars.mjs\";\nimport { GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLEnumType, isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType, isListType, isNonNullType, isAbstractType } from \"./definition.mjs\";\nexport var __Schema = new GraphQLObjectType({\n name: '__Schema',\n 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.',\n fields: function fields() {\n return {\n description: {\n type: GraphQLString,\n resolve: function resolve(schema) {\n return schema.description;\n }\n },\n types: {\n description: 'A list of all types supported by this server.',\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(__Type))),\n resolve: function resolve(schema) {\n return objectValues(schema.getTypeMap());\n }\n },\n queryType: {\n description: 'The type that query operations will be rooted at.',\n type: new GraphQLNonNull(__Type),\n resolve: function resolve(schema) {\n return schema.getQueryType();\n }\n },\n mutationType: {\n description: 'If this server supports mutation, the type that mutation operations will be rooted at.',\n type: __Type,\n resolve: function resolve(schema) {\n return schema.getMutationType();\n }\n },\n subscriptionType: {\n description: 'If this server support subscription, the type that subscription operations will be rooted at.',\n type: __Type,\n resolve: function resolve(schema) {\n return schema.getSubscriptionType();\n }\n },\n directives: {\n description: 'A list of all directives supported by this server.',\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(__Directive))),\n resolve: function resolve(schema) {\n return schema.getDirectives();\n }\n }\n };\n }\n});\nexport var __Directive = new GraphQLObjectType({\n name: '__Directive',\n 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.\",\n fields: function fields() {\n return {\n name: {\n type: new GraphQLNonNull(GraphQLString),\n resolve: function resolve(directive) {\n return directive.name;\n }\n },\n description: {\n type: GraphQLString,\n resolve: function resolve(directive) {\n return directive.description;\n }\n },\n isRepeatable: {\n type: new GraphQLNonNull(GraphQLBoolean),\n resolve: function resolve(directive) {\n return directive.isRepeatable;\n }\n },\n locations: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(__DirectiveLocation))),\n resolve: function resolve(directive) {\n return directive.locations;\n }\n },\n args: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(__InputValue))),\n args: {\n includeDeprecated: {\n type: GraphQLBoolean,\n defaultValue: false\n }\n },\n resolve: function resolve(field, _ref) {\n var includeDeprecated = _ref.includeDeprecated;\n return includeDeprecated ? field.args : field.args.filter(function (arg) {\n return arg.deprecationReason == null;\n });\n }\n }\n };\n }\n});\nexport var __DirectiveLocation = new GraphQLEnumType({\n name: '__DirectiveLocation',\n description: 'A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.',\n values: {\n QUERY: {\n value: DirectiveLocation.QUERY,\n description: 'Location adjacent to a query operation.'\n },\n MUTATION: {\n value: DirectiveLocation.MUTATION,\n description: 'Location adjacent to a mutation operation.'\n },\n SUBSCRIPTION: {\n value: DirectiveLocation.SUBSCRIPTION,\n description: 'Location adjacent to a subscription operation.'\n },\n FIELD: {\n value: DirectiveLocation.FIELD,\n description: 'Location adjacent to a field.'\n },\n FRAGMENT_DEFINITION: {\n value: DirectiveLocation.FRAGMENT_DEFINITION,\n description: 'Location adjacent to a fragment definition.'\n },\n FRAGMENT_SPREAD: {\n value: DirectiveLocation.FRAGMENT_SPREAD,\n description: 'Location adjacent to a fragment spread.'\n },\n INLINE_FRAGMENT: {\n value: DirectiveLocation.INLINE_FRAGMENT,\n description: 'Location adjacent to an inline fragment.'\n },\n VARIABLE_DEFINITION: {\n value: DirectiveLocation.VARIABLE_DEFINITION,\n description: 'Location adjacent to a variable definition.'\n },\n SCHEMA: {\n value: DirectiveLocation.SCHEMA,\n description: 'Location adjacent to a schema definition.'\n },\n SCALAR: {\n value: DirectiveLocation.SCALAR,\n description: 'Location adjacent to a scalar definition.'\n },\n OBJECT: {\n value: DirectiveLocation.OBJECT,\n description: 'Location adjacent to an object type definition.'\n },\n FIELD_DEFINITION: {\n value: DirectiveLocation.FIELD_DEFINITION,\n description: 'Location adjacent to a field definition.'\n },\n ARGUMENT_DEFINITION: {\n value: DirectiveLocation.ARGUMENT_DEFINITION,\n description: 'Location adjacent to an argument definition.'\n },\n INTERFACE: {\n value: DirectiveLocation.INTERFACE,\n description: 'Location adjacent to an interface definition.'\n },\n UNION: {\n value: DirectiveLocation.UNION,\n description: 'Location adjacent to a union definition.'\n },\n ENUM: {\n value: DirectiveLocation.ENUM,\n description: 'Location adjacent to an enum definition.'\n },\n ENUM_VALUE: {\n value: DirectiveLocation.ENUM_VALUE,\n description: 'Location adjacent to an enum value definition.'\n },\n INPUT_OBJECT: {\n value: DirectiveLocation.INPUT_OBJECT,\n description: 'Location adjacent to an input object type definition.'\n },\n INPUT_FIELD_DEFINITION: {\n value: DirectiveLocation.INPUT_FIELD_DEFINITION,\n description: 'Location adjacent to an input object field definition.'\n }\n }\n});\nexport var __Type = new GraphQLObjectType({\n name: '__Type',\n 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.',\n fields: function fields() {\n return {\n kind: {\n type: new GraphQLNonNull(__TypeKind),\n resolve: function resolve(type) {\n if (isScalarType(type)) {\n return TypeKind.SCALAR;\n }\n\n if (isObjectType(type)) {\n return TypeKind.OBJECT;\n }\n\n if (isInterfaceType(type)) {\n return TypeKind.INTERFACE;\n }\n\n if (isUnionType(type)) {\n return TypeKind.UNION;\n }\n\n if (isEnumType(type)) {\n return TypeKind.ENUM;\n }\n\n if (isInputObjectType(type)) {\n return TypeKind.INPUT_OBJECT;\n }\n\n if (isListType(type)) {\n return TypeKind.LIST;\n } // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2618')\n\n\n if (isNonNullType(type)) {\n return TypeKind.NON_NULL;\n } // istanbul ignore next (Not reachable. All possible types have been considered)\n\n\n false || invariant(0, \"Unexpected type: \\\"\".concat(inspect(type), \"\\\".\"));\n }\n },\n name: {\n type: GraphQLString,\n resolve: function resolve(type) {\n return type.name !== undefined ? type.name : undefined;\n }\n },\n description: {\n type: GraphQLString,\n resolve: function resolve(type) {\n return type.description !== undefined ? type.description : undefined;\n }\n },\n specifiedByUrl: {\n type: GraphQLString,\n resolve: function resolve(obj) {\n return obj.specifiedByUrl !== undefined ? obj.specifiedByUrl : undefined;\n }\n },\n fields: {\n type: new GraphQLList(new GraphQLNonNull(__Field)),\n args: {\n includeDeprecated: {\n type: GraphQLBoolean,\n defaultValue: false\n }\n },\n resolve: function resolve(type, _ref2) {\n var includeDeprecated = _ref2.includeDeprecated;\n\n if (isObjectType(type) || isInterfaceType(type)) {\n var fields = objectValues(type.getFields());\n return includeDeprecated ? fields : fields.filter(function (field) {\n return field.deprecationReason == null;\n });\n }\n }\n },\n interfaces: {\n type: new GraphQLList(new GraphQLNonNull(__Type)),\n resolve: function resolve(type) {\n if (isObjectType(type) || isInterfaceType(type)) {\n return type.getInterfaces();\n }\n }\n },\n possibleTypes: {\n type: new GraphQLList(new GraphQLNonNull(__Type)),\n resolve: function resolve(type, _args, _context, _ref3) {\n var schema = _ref3.schema;\n\n if (isAbstractType(type)) {\n return schema.getPossibleTypes(type);\n }\n }\n },\n enumValues: {\n type: new GraphQLList(new GraphQLNonNull(__EnumValue)),\n args: {\n includeDeprecated: {\n type: GraphQLBoolean,\n defaultValue: false\n }\n },\n resolve: function resolve(type, _ref4) {\n var includeDeprecated = _ref4.includeDeprecated;\n\n if (isEnumType(type)) {\n var values = type.getValues();\n return includeDeprecated ? values : values.filter(function (field) {\n return field.deprecationReason == null;\n });\n }\n }\n },\n inputFields: {\n type: new GraphQLList(new GraphQLNonNull(__InputValue)),\n args: {\n includeDeprecated: {\n type: GraphQLBoolean,\n defaultValue: false\n }\n },\n resolve: function resolve(type, _ref5) {\n var includeDeprecated = _ref5.includeDeprecated;\n\n if (isInputObjectType(type)) {\n var values = objectValues(type.getFields());\n return includeDeprecated ? values : values.filter(function (field) {\n return field.deprecationReason == null;\n });\n }\n }\n },\n ofType: {\n type: __Type,\n resolve: function resolve(type) {\n return type.ofType !== undefined ? type.ofType : undefined;\n }\n }\n };\n }\n});\nexport var __Field = new GraphQLObjectType({\n name: '__Field',\n 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.',\n fields: function fields() {\n return {\n name: {\n type: new GraphQLNonNull(GraphQLString),\n resolve: function resolve(field) {\n return field.name;\n }\n },\n description: {\n type: GraphQLString,\n resolve: function resolve(field) {\n return field.description;\n }\n },\n args: {\n type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(__InputValue))),\n args: {\n includeDeprecated: {\n type: GraphQLBoolean,\n defaultValue: false\n }\n },\n resolve: function resolve(field, _ref6) {\n var includeDeprecated = _ref6.includeDeprecated;\n return includeDeprecated ? field.args : field.args.filter(function (arg) {\n return arg.deprecationReason == null;\n });\n }\n },\n type: {\n type: new GraphQLNonNull(__Type),\n resolve: function resolve(field) {\n return field.type;\n }\n },\n isDeprecated: {\n type: new GraphQLNonNull(GraphQLBoolean),\n resolve: function resolve(field) {\n return field.deprecationReason != null;\n }\n },\n deprecationReason: {\n type: GraphQLString,\n resolve: function resolve(field) {\n return field.deprecationReason;\n }\n }\n };\n }\n});\nexport var __InputValue = new GraphQLObjectType({\n name: '__InputValue',\n 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.',\n fields: function fields() {\n return {\n name: {\n type: new GraphQLNonNull(GraphQLString),\n resolve: function resolve(inputValue) {\n return inputValue.name;\n }\n },\n description: {\n type: GraphQLString,\n resolve: function resolve(inputValue) {\n return inputValue.description;\n }\n },\n type: {\n type: new GraphQLNonNull(__Type),\n resolve: function resolve(inputValue) {\n return inputValue.type;\n }\n },\n defaultValue: {\n type: GraphQLString,\n description: 'A GraphQL-formatted string representing the default value for this input value.',\n resolve: function resolve(inputValue) {\n var type = inputValue.type,\n defaultValue = inputValue.defaultValue;\n var valueAST = astFromValue(defaultValue, type);\n return valueAST ? print(valueAST) : null;\n }\n },\n isDeprecated: {\n type: new GraphQLNonNull(GraphQLBoolean),\n resolve: function resolve(field) {\n return field.deprecationReason != null;\n }\n },\n deprecationReason: {\n type: GraphQLString,\n resolve: function resolve(obj) {\n return obj.deprecationReason;\n }\n }\n };\n }\n});\nexport var __EnumValue = new GraphQLObjectType({\n name: '__EnumValue',\n 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.',\n fields: function fields() {\n return {\n name: {\n type: new GraphQLNonNull(GraphQLString),\n resolve: function resolve(enumValue) {\n return enumValue.name;\n }\n },\n description: {\n type: GraphQLString,\n resolve: function resolve(enumValue) {\n return enumValue.description;\n }\n },\n isDeprecated: {\n type: new GraphQLNonNull(GraphQLBoolean),\n resolve: function resolve(enumValue) {\n return enumValue.deprecationReason != null;\n }\n },\n deprecationReason: {\n type: GraphQLString,\n resolve: function resolve(enumValue) {\n return enumValue.deprecationReason;\n }\n }\n };\n }\n});\nexport var TypeKind = Object.freeze({\n SCALAR: 'SCALAR',\n OBJECT: 'OBJECT',\n INTERFACE: 'INTERFACE',\n UNION: 'UNION',\n ENUM: 'ENUM',\n INPUT_OBJECT: 'INPUT_OBJECT',\n LIST: 'LIST',\n NON_NULL: 'NON_NULL'\n});\nexport var __TypeKind = new GraphQLEnumType({\n name: '__TypeKind',\n description: 'An enum describing what kind of type a given `__Type` is.',\n values: {\n SCALAR: {\n value: TypeKind.SCALAR,\n description: 'Indicates this type is a scalar.'\n },\n OBJECT: {\n value: TypeKind.OBJECT,\n description: 'Indicates this type is an object. `fields` and `interfaces` are valid fields.'\n },\n INTERFACE: {\n value: TypeKind.INTERFACE,\n description: 'Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.'\n },\n UNION: {\n value: TypeKind.UNION,\n description: 'Indicates this type is a union. `possibleTypes` is a valid field.'\n },\n ENUM: {\n value: TypeKind.ENUM,\n description: 'Indicates this type is an enum. `enumValues` is a valid field.'\n },\n INPUT_OBJECT: {\n value: TypeKind.INPUT_OBJECT,\n description: 'Indicates this type is an input object. `inputFields` is a valid field.'\n },\n LIST: {\n value: TypeKind.LIST,\n description: 'Indicates this type is a list. `ofType` is a valid field.'\n },\n NON_NULL: {\n value: TypeKind.NON_NULL,\n description: 'Indicates this type is a non-null. `ofType` is a valid field.'\n }\n }\n});\n/**\n * Note that these are GraphQLField and not GraphQLFieldConfig,\n * so the format for args is different.\n */\n\nexport var SchemaMetaFieldDef = {\n name: '__schema',\n type: new GraphQLNonNull(__Schema),\n description: 'Access the current type schema of this server.',\n args: [],\n resolve: function resolve(_source, _args, _context, _ref7) {\n var schema = _ref7.schema;\n return schema;\n },\n isDeprecated: false,\n deprecationReason: undefined,\n extensions: undefined,\n astNode: undefined\n};\nexport var TypeMetaFieldDef = {\n name: '__type',\n type: __Type,\n description: 'Request the type information of a single type.',\n args: [{\n name: 'name',\n description: undefined,\n type: new GraphQLNonNull(GraphQLString),\n defaultValue: undefined,\n deprecationReason: undefined,\n extensions: undefined,\n astNode: undefined\n }],\n resolve: function resolve(_source, _ref8, _context, _ref9) {\n var name = _ref8.name;\n var schema = _ref9.schema;\n return schema.getType(name);\n },\n isDeprecated: false,\n deprecationReason: undefined,\n extensions: undefined,\n astNode: undefined\n};\nexport var TypeNameMetaFieldDef = {\n name: '__typename',\n type: new GraphQLNonNull(GraphQLString),\n description: 'The name of the current Object type at runtime.',\n args: [],\n resolve: function resolve(_source, _args, _context, _ref10) {\n var parentType = _ref10.parentType;\n return parentType.name;\n },\n isDeprecated: false,\n deprecationReason: undefined,\n extensions: undefined,\n astNode: undefined\n};\nexport var introspectionTypes = Object.freeze([__Schema, __Directive, __DirectiveLocation, __Type, __Field, __InputValue, __EnumValue, __TypeKind]);\nexport function isIntrospectionType(type) {\n return introspectionTypes.some(function (_ref11) {\n var name = _ref11.name;\n return type.name === name;\n });\n}\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport objectEntries from \"../polyfills/objectEntries.mjs\";\nimport { SYMBOL_TO_STRING_TAG } from \"../polyfills/symbols.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport toObjMap from \"../jsutils/toObjMap.mjs\";\nimport devAssert from \"../jsutils/devAssert.mjs\";\nimport instanceOf from \"../jsutils/instanceOf.mjs\";\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport defineInspect from \"../jsutils/defineInspect.mjs\";\nimport { DirectiveLocation } from \"../language/directiveLocation.mjs\";\nimport { GraphQLString, GraphQLBoolean } from \"./scalars.mjs\";\nimport { argsToArgsConfig, GraphQLNonNull } from \"./definition.mjs\";\n/**\n * Test if the given value is a GraphQL directive.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isDirective(directive) {\n return instanceOf(directive, GraphQLDirective);\n}\nexport function assertDirective(directive) {\n if (!isDirective(directive)) {\n throw new Error(\"Expected \".concat(inspect(directive), \" to be a GraphQL directive.\"));\n }\n\n return directive;\n}\n/**\n * Directives are used by the GraphQL runtime as a way of modifying execution\n * behavior. Type system creators will usually not create these directly.\n */\n\nexport var GraphQLDirective = /*#__PURE__*/function () {\n function GraphQLDirective(config) {\n var _config$isRepeatable, _config$args;\n\n this.name = config.name;\n this.description = config.description;\n this.locations = config.locations;\n this.isRepeatable = (_config$isRepeatable = config.isRepeatable) !== null && _config$isRepeatable !== void 0 ? _config$isRepeatable : false;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n config.name || devAssert(0, 'Directive must be named.');\n Array.isArray(config.locations) || devAssert(0, \"@\".concat(config.name, \" locations must be an Array.\"));\n var args = (_config$args = config.args) !== null && _config$args !== void 0 ? _config$args : {};\n isObjectLike(args) && !Array.isArray(args) || devAssert(0, \"@\".concat(config.name, \" args must be an object with argument names as keys.\"));\n this.args = objectEntries(args).map(function (_ref) {\n var argName = _ref[0],\n argConfig = _ref[1];\n return {\n name: argName,\n description: argConfig.description,\n type: argConfig.type,\n defaultValue: argConfig.defaultValue,\n deprecationReason: argConfig.deprecationReason,\n extensions: argConfig.extensions && toObjMap(argConfig.extensions),\n astNode: argConfig.astNode\n };\n });\n }\n\n var _proto = GraphQLDirective.prototype;\n\n _proto.toConfig = function toConfig() {\n return {\n name: this.name,\n description: this.description,\n locations: this.locations,\n args: argsToArgsConfig(this.args),\n isRepeatable: this.isRepeatable,\n extensions: this.extensions,\n astNode: this.astNode\n };\n };\n\n _proto.toString = function toString() {\n return '@' + this.name;\n };\n\n _proto.toJSON = function toJSON() {\n return this.toString();\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLDirective, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLDirective';\n }\n }]);\n\n return GraphQLDirective;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(GraphQLDirective);\n\n/**\n * Used to conditionally include fields or fragments.\n */\nexport var GraphQLIncludeDirective = new GraphQLDirective({\n name: 'include',\n description: 'Directs the executor to include this field or fragment only when the `if` argument is true.',\n locations: [DirectiveLocation.FIELD, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT],\n args: {\n if: {\n type: new GraphQLNonNull(GraphQLBoolean),\n description: 'Included when true.'\n }\n }\n});\n/**\n * Used to conditionally skip (exclude) fields or fragments.\n */\n\nexport var GraphQLSkipDirective = new GraphQLDirective({\n name: 'skip',\n description: 'Directs the executor to skip this field or fragment when the `if` argument is true.',\n locations: [DirectiveLocation.FIELD, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT],\n args: {\n if: {\n type: new GraphQLNonNull(GraphQLBoolean),\n description: 'Skipped when true.'\n }\n }\n});\n/**\n * Constant string used for default reason for a deprecation.\n */\n\nexport var DEFAULT_DEPRECATION_REASON = 'No longer supported';\n/**\n * Used to declare element of a GraphQL schema as deprecated.\n */\n\nexport var GraphQLDeprecatedDirective = new GraphQLDirective({\n name: 'deprecated',\n description: 'Marks an element of a GraphQL schema as no longer supported.',\n locations: [DirectiveLocation.FIELD_DEFINITION, DirectiveLocation.ARGUMENT_DEFINITION, DirectiveLocation.INPUT_FIELD_DEFINITION, DirectiveLocation.ENUM_VALUE],\n args: {\n reason: {\n type: GraphQLString,\n 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/).',\n defaultValue: DEFAULT_DEPRECATION_REASON\n }\n }\n});\n/**\n * Used to provide a URL for specifying the behaviour of custom scalar definitions.\n */\n\nexport var GraphQLSpecifiedByDirective = new GraphQLDirective({\n name: 'specifiedBy',\n description: 'Exposes a URL that specifies the behaviour of this scalar.',\n locations: [DirectiveLocation.SCALAR],\n args: {\n url: {\n type: new GraphQLNonNull(GraphQLString),\n description: 'The URL that specifies the behaviour of this scalar.'\n }\n }\n});\n/**\n * The full list of specified directives.\n */\n\nexport var specifiedDirectives = Object.freeze([GraphQLIncludeDirective, GraphQLSkipDirective, GraphQLDeprecatedDirective, GraphQLSpecifiedByDirective]);\nexport function isSpecifiedDirective(directive) {\n return specifiedDirectives.some(function (_ref2) {\n var name = _ref2.name;\n return name === directive.name;\n });\n}\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport find from \"../polyfills/find.mjs\";\nimport arrayFrom from \"../polyfills/arrayFrom.mjs\";\nimport objectValues from \"../polyfills/objectValues.mjs\";\nimport { SYMBOL_TO_STRING_TAG } from \"../polyfills/symbols.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport toObjMap from \"../jsutils/toObjMap.mjs\";\nimport devAssert from \"../jsutils/devAssert.mjs\";\nimport instanceOf from \"../jsutils/instanceOf.mjs\";\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport { __Schema } from \"./introspection.mjs\";\nimport { GraphQLDirective, isDirective, specifiedDirectives } from \"./directives.mjs\";\nimport { isObjectType, isInterfaceType, isUnionType, isInputObjectType, getNamedType } from \"./definition.mjs\";\n/**\n * Test if the given value is a GraphQL schema.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isSchema(schema) {\n return instanceOf(schema, GraphQLSchema);\n}\nexport function assertSchema(schema) {\n if (!isSchema(schema)) {\n throw new Error(\"Expected \".concat(inspect(schema), \" to be a GraphQL schema.\"));\n }\n\n return schema;\n}\n/**\n * Schema Definition\n *\n * A Schema is created by supplying the root types of each type of operation,\n * query and mutation (optional). A schema definition is then supplied to the\n * validator and executor.\n *\n * Example:\n *\n * const MyAppSchema = new GraphQLSchema({\n * query: MyAppQueryRootType,\n * mutation: MyAppMutationRootType,\n * })\n *\n * Note: When the schema is constructed, by default only the types that are\n * reachable by traversing the root types are included, other types must be\n * explicitly referenced.\n *\n * Example:\n *\n * const characterInterface = new GraphQLInterfaceType({\n * name: 'Character',\n * ...\n * });\n *\n * const humanType = new GraphQLObjectType({\n * name: 'Human',\n * interfaces: [characterInterface],\n * ...\n * });\n *\n * const droidType = new GraphQLObjectType({\n * name: 'Droid',\n * interfaces: [characterInterface],\n * ...\n * });\n *\n * const schema = new GraphQLSchema({\n * query: new GraphQLObjectType({\n * name: 'Query',\n * fields: {\n * hero: { type: characterInterface, ... },\n * }\n * }),\n * ...\n * // Since this schema references only the `Character` interface it's\n * // necessary to explicitly list the types that implement it if\n * // you want them to be included in the final schema.\n * types: [humanType, droidType],\n * })\n *\n * Note: If an array of `directives` are provided to GraphQLSchema, that will be\n * the exact list of directives represented and allowed. If `directives` is not\n * provided then a default set of the specified directives (e.g. @include and\n * @skip) will be used. If you wish to provide *additional* directives to these\n * specified directives, you must explicitly declare them. Example:\n *\n * const MyAppSchema = new GraphQLSchema({\n * ...\n * directives: specifiedDirectives.concat([ myCustomDirective ]),\n * })\n *\n */\n\nexport var GraphQLSchema = /*#__PURE__*/function () {\n // Used as a cache for validateSchema().\n function GraphQLSchema(config) {\n var _config$directives;\n\n // If this schema was built from a source known to be valid, then it may be\n // marked with assumeValid to avoid an additional type system validation.\n this.__validationErrors = config.assumeValid === true ? [] : undefined; // Check for common mistakes during construction to produce early errors.\n\n isObjectLike(config) || devAssert(0, 'Must provide configuration object.');\n !config.types || Array.isArray(config.types) || devAssert(0, \"\\\"types\\\" must be Array if provided but got: \".concat(inspect(config.types), \".\"));\n !config.directives || Array.isArray(config.directives) || devAssert(0, '\"directives\" must be Array if provided but got: ' + \"\".concat(inspect(config.directives), \".\"));\n this.description = config.description;\n this.extensions = config.extensions && toObjMap(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = config.extensionASTNodes;\n this._queryType = config.query;\n this._mutationType = config.mutation;\n this._subscriptionType = config.subscription; // Provide specified directives (e.g. @include and @skip) by default.\n\n this._directives = (_config$directives = config.directives) !== null && _config$directives !== void 0 ? _config$directives : specifiedDirectives; // To preserve order of user-provided types, we add first to add them to\n // the set of \"collected\" types, so `collectReferencedTypes` ignore them.\n\n var allReferencedTypes = new Set(config.types);\n\n if (config.types != null) {\n for (var _i2 = 0, _config$types2 = config.types; _i2 < _config$types2.length; _i2++) {\n var type = _config$types2[_i2];\n // When we ready to process this type, we remove it from \"collected\" types\n // and then add it together with all dependent types in the correct position.\n allReferencedTypes.delete(type);\n collectReferencedTypes(type, allReferencedTypes);\n }\n }\n\n if (this._queryType != null) {\n collectReferencedTypes(this._queryType, allReferencedTypes);\n }\n\n if (this._mutationType != null) {\n collectReferencedTypes(this._mutationType, allReferencedTypes);\n }\n\n if (this._subscriptionType != null) {\n collectReferencedTypes(this._subscriptionType, allReferencedTypes);\n }\n\n for (var _i4 = 0, _this$_directives2 = this._directives; _i4 < _this$_directives2.length; _i4++) {\n var directive = _this$_directives2[_i4];\n\n // Directives are not validated until validateSchema() is called.\n if (isDirective(directive)) {\n for (var _i6 = 0, _directive$args2 = directive.args; _i6 < _directive$args2.length; _i6++) {\n var arg = _directive$args2[_i6];\n collectReferencedTypes(arg.type, allReferencedTypes);\n }\n }\n }\n\n collectReferencedTypes(__Schema, allReferencedTypes); // Storing the resulting map for reference by the schema.\n\n this._typeMap = Object.create(null);\n this._subTypeMap = Object.create(null); // Keep track of all implementations by interface name.\n\n this._implementationsMap = Object.create(null);\n\n for (var _i8 = 0, _arrayFrom2 = arrayFrom(allReferencedTypes); _i8 < _arrayFrom2.length; _i8++) {\n var namedType = _arrayFrom2[_i8];\n\n if (namedType == null) {\n continue;\n }\n\n var typeName = namedType.name;\n typeName || devAssert(0, 'One of the provided types for building the Schema is missing a name.');\n\n if (this._typeMap[typeName] !== undefined) {\n throw new Error(\"Schema must contain uniquely named types but contains multiple types named \\\"\".concat(typeName, \"\\\".\"));\n }\n\n this._typeMap[typeName] = namedType;\n\n if (isInterfaceType(namedType)) {\n // Store implementations by interface.\n for (var _i10 = 0, _namedType$getInterfa2 = namedType.getInterfaces(); _i10 < _namedType$getInterfa2.length; _i10++) {\n var iface = _namedType$getInterfa2[_i10];\n\n if (isInterfaceType(iface)) {\n var implementations = this._implementationsMap[iface.name];\n\n if (implementations === undefined) {\n implementations = this._implementationsMap[iface.name] = {\n objects: [],\n interfaces: []\n };\n }\n\n implementations.interfaces.push(namedType);\n }\n }\n } else if (isObjectType(namedType)) {\n // Store implementations by objects.\n for (var _i12 = 0, _namedType$getInterfa4 = namedType.getInterfaces(); _i12 < _namedType$getInterfa4.length; _i12++) {\n var _iface = _namedType$getInterfa4[_i12];\n\n if (isInterfaceType(_iface)) {\n var _implementations = this._implementationsMap[_iface.name];\n\n if (_implementations === undefined) {\n _implementations = this._implementationsMap[_iface.name] = {\n objects: [],\n interfaces: []\n };\n }\n\n _implementations.objects.push(namedType);\n }\n }\n }\n }\n }\n\n var _proto = GraphQLSchema.prototype;\n\n _proto.getQueryType = function getQueryType() {\n return this._queryType;\n };\n\n _proto.getMutationType = function getMutationType() {\n return this._mutationType;\n };\n\n _proto.getSubscriptionType = function getSubscriptionType() {\n return this._subscriptionType;\n };\n\n _proto.getTypeMap = function getTypeMap() {\n return this._typeMap;\n };\n\n _proto.getType = function getType(name) {\n return this.getTypeMap()[name];\n };\n\n _proto.getPossibleTypes = function getPossibleTypes(abstractType) {\n return isUnionType(abstractType) ? abstractType.getTypes() : this.getImplementations(abstractType).objects;\n };\n\n _proto.getImplementations = function getImplementations(interfaceType) {\n var implementations = this._implementationsMap[interfaceType.name];\n return implementations !== null && implementations !== void 0 ? implementations : {\n objects: [],\n interfaces: []\n };\n } // @deprecated: use isSubType instead - will be removed in v16.\n ;\n\n _proto.isPossibleType = function isPossibleType(abstractType, possibleType) {\n return this.isSubType(abstractType, possibleType);\n };\n\n _proto.isSubType = function isSubType(abstractType, maybeSubType) {\n var map = this._subTypeMap[abstractType.name];\n\n if (map === undefined) {\n map = Object.create(null);\n\n if (isUnionType(abstractType)) {\n for (var _i14 = 0, _abstractType$getType2 = abstractType.getTypes(); _i14 < _abstractType$getType2.length; _i14++) {\n var type = _abstractType$getType2[_i14];\n map[type.name] = true;\n }\n } else {\n var implementations = this.getImplementations(abstractType);\n\n for (var _i16 = 0, _implementations$obje2 = implementations.objects; _i16 < _implementations$obje2.length; _i16++) {\n var _type = _implementations$obje2[_i16];\n map[_type.name] = true;\n }\n\n for (var _i18 = 0, _implementations$inte2 = implementations.interfaces; _i18 < _implementations$inte2.length; _i18++) {\n var _type2 = _implementations$inte2[_i18];\n map[_type2.name] = true;\n }\n }\n\n this._subTypeMap[abstractType.name] = map;\n }\n\n return map[maybeSubType.name] !== undefined;\n };\n\n _proto.getDirectives = function getDirectives() {\n return this._directives;\n };\n\n _proto.getDirective = function getDirective(name) {\n return find(this.getDirectives(), function (directive) {\n return directive.name === name;\n });\n };\n\n _proto.toConfig = function toConfig() {\n var _this$extensionASTNod;\n\n return {\n description: this.description,\n query: this.getQueryType(),\n mutation: this.getMutationType(),\n subscription: this.getSubscriptionType(),\n types: objectValues(this.getTypeMap()),\n directives: this.getDirectives().slice(),\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: (_this$extensionASTNod = this.extensionASTNodes) !== null && _this$extensionASTNod !== void 0 ? _this$extensionASTNod : [],\n assumeValid: this.__validationErrors !== undefined\n };\n } // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n ;\n\n _createClass(GraphQLSchema, [{\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'GraphQLSchema';\n }\n }]);\n\n return GraphQLSchema;\n}();\n\nfunction collectReferencedTypes(type, typeSet) {\n var namedType = getNamedType(type);\n\n if (!typeSet.has(namedType)) {\n typeSet.add(namedType);\n\n if (isUnionType(namedType)) {\n for (var _i20 = 0, _namedType$getTypes2 = namedType.getTypes(); _i20 < _namedType$getTypes2.length; _i20++) {\n var memberType = _namedType$getTypes2[_i20];\n collectReferencedTypes(memberType, typeSet);\n }\n } else if (isObjectType(namedType) || isInterfaceType(namedType)) {\n for (var _i22 = 0, _namedType$getInterfa6 = namedType.getInterfaces(); _i22 < _namedType$getInterfa6.length; _i22++) {\n var interfaceType = _namedType$getInterfa6[_i22];\n collectReferencedTypes(interfaceType, typeSet);\n }\n\n for (var _i24 = 0, _objectValues2 = objectValues(namedType.getFields()); _i24 < _objectValues2.length; _i24++) {\n var field = _objectValues2[_i24];\n collectReferencedTypes(field.type, typeSet);\n\n for (var _i26 = 0, _field$args2 = field.args; _i26 < _field$args2.length; _i26++) {\n var arg = _field$args2[_i26];\n collectReferencedTypes(arg.type, typeSet);\n }\n }\n } else if (isInputObjectType(namedType)) {\n for (var _i28 = 0, _objectValues4 = objectValues(namedType.getFields()); _i28 < _objectValues4.length; _i28++) {\n var _field = _objectValues4[_i28];\n collectReferencedTypes(_field.type, typeSet);\n }\n }\n }\n\n return typeSet;\n}\n","import { Kind } from \"./kinds.mjs\";\nexport function isDefinitionNode(node) {\n return isExecutableDefinitionNode(node) || isTypeSystemDefinitionNode(node) || isTypeSystemExtensionNode(node);\n}\nexport function isExecutableDefinitionNode(node) {\n return node.kind === Kind.OPERATION_DEFINITION || node.kind === Kind.FRAGMENT_DEFINITION;\n}\nexport function isSelectionNode(node) {\n return node.kind === Kind.FIELD || node.kind === Kind.FRAGMENT_SPREAD || node.kind === Kind.INLINE_FRAGMENT;\n}\nexport function isValueNode(node) {\n return node.kind === Kind.VARIABLE || node.kind === Kind.INT || node.kind === Kind.FLOAT || node.kind === Kind.STRING || node.kind === Kind.BOOLEAN || node.kind === Kind.NULL || node.kind === Kind.ENUM || node.kind === Kind.LIST || node.kind === Kind.OBJECT;\n}\nexport function isTypeNode(node) {\n return node.kind === Kind.NAMED_TYPE || node.kind === Kind.LIST_TYPE || node.kind === Kind.NON_NULL_TYPE;\n}\nexport function isTypeSystemDefinitionNode(node) {\n return node.kind === Kind.SCHEMA_DEFINITION || isTypeDefinitionNode(node) || node.kind === Kind.DIRECTIVE_DEFINITION;\n}\nexport function isTypeDefinitionNode(node) {\n return node.kind === Kind.SCALAR_TYPE_DEFINITION || node.kind === Kind.OBJECT_TYPE_DEFINITION || node.kind === Kind.INTERFACE_TYPE_DEFINITION || node.kind === Kind.UNION_TYPE_DEFINITION || node.kind === Kind.ENUM_TYPE_DEFINITION || node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION;\n}\nexport function isTypeSystemExtensionNode(node) {\n return node.kind === Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node);\n}\nexport function isTypeExtensionNode(node) {\n return node.kind === Kind.SCALAR_TYPE_EXTENSION || node.kind === Kind.OBJECT_TYPE_EXTENSION || node.kind === Kind.INTERFACE_TYPE_EXTENSION || node.kind === Kind.UNION_TYPE_EXTENSION || node.kind === Kind.ENUM_TYPE_EXTENSION || node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION;\n}\n","import didYouMean from \"../../jsutils/didYouMean.mjs\";\nimport suggestionList from \"../../jsutils/suggestionList.mjs\";\nimport { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { isTypeDefinitionNode, isTypeSystemDefinitionNode, isTypeSystemExtensionNode } from \"../../language/predicates.mjs\";\nimport { specifiedScalarTypes } from \"../../type/scalars.mjs\";\nimport { introspectionTypes } from \"../../type/introspection.mjs\";\n\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n */\nexport function KnownTypeNamesRule(context) {\n var schema = context.getSchema();\n var existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);\n var definedTypes = Object.create(null);\n\n for (var _i2 = 0, _context$getDocument$2 = context.getDocument().definitions; _i2 < _context$getDocument$2.length; _i2++) {\n var def = _context$getDocument$2[_i2];\n\n if (isTypeDefinitionNode(def)) {\n definedTypes[def.name.value] = true;\n }\n }\n\n var typeNames = Object.keys(existingTypesMap).concat(Object.keys(definedTypes));\n return {\n NamedType: function NamedType(node, _1, parent, _2, ancestors) {\n var typeName = node.name.value;\n\n if (!existingTypesMap[typeName] && !definedTypes[typeName]) {\n var _ancestors$;\n\n var definitionNode = (_ancestors$ = ancestors[2]) !== null && _ancestors$ !== void 0 ? _ancestors$ : parent;\n var isSDL = definitionNode != null && isSDLNode(definitionNode);\n\n if (isSDL && isStandardTypeName(typeName)) {\n return;\n }\n\n var suggestedTypes = suggestionList(typeName, isSDL ? standardTypeNames.concat(typeNames) : typeNames);\n context.reportError(new GraphQLError(\"Unknown type \\\"\".concat(typeName, \"\\\".\") + didYouMean(suggestedTypes), node));\n }\n }\n };\n}\nvar standardTypeNames = [].concat(specifiedScalarTypes, introspectionTypes).map(function (type) {\n return type.name;\n});\n\nfunction isStandardTypeName(typeName) {\n return standardTypeNames.indexOf(typeName) !== -1;\n}\n\nfunction isSDLNode(value) {\n return !Array.isArray(value) && (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value));\n}\n","import inspect from \"../../jsutils/inspect.mjs\";\nimport invariant from \"../../jsutils/invariant.mjs\";\nimport { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { Kind } from \"../../language/kinds.mjs\";\nimport { DirectiveLocation } from \"../../language/directiveLocation.mjs\";\nimport { specifiedDirectives } from \"../../type/directives.mjs\";\n\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n */\nexport function KnownDirectivesRule(context) {\n var locationsMap = Object.create(null);\n var schema = context.getSchema();\n var definedDirectives = schema ? schema.getDirectives() : specifiedDirectives;\n\n for (var _i2 = 0; _i2 < definedDirectives.length; _i2++) {\n var directive = definedDirectives[_i2];\n locationsMap[directive.name] = directive.locations;\n }\n\n var astDefinitions = context.getDocument().definitions;\n\n for (var _i4 = 0; _i4 < astDefinitions.length; _i4++) {\n var def = astDefinitions[_i4];\n\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n locationsMap[def.name.value] = def.locations.map(function (name) {\n return name.value;\n });\n }\n }\n\n return {\n Directive: function Directive(node, _key, _parent, _path, ancestors) {\n var name = node.name.value;\n var locations = locationsMap[name];\n\n if (!locations) {\n context.reportError(new GraphQLError(\"Unknown directive \\\"@\".concat(name, \"\\\".\"), node));\n return;\n }\n\n var candidateLocation = getDirectiveLocationForASTPath(ancestors);\n\n if (candidateLocation && locations.indexOf(candidateLocation) === -1) {\n context.reportError(new GraphQLError(\"Directive \\\"@\".concat(name, \"\\\" may not be used on \").concat(candidateLocation, \".\"), node));\n }\n }\n };\n}\n\nfunction getDirectiveLocationForASTPath(ancestors) {\n var appliedTo = ancestors[ancestors.length - 1];\n !Array.isArray(appliedTo) || invariant(0);\n\n switch (appliedTo.kind) {\n case Kind.OPERATION_DEFINITION:\n return getDirectiveLocationForOperation(appliedTo.operation);\n\n case Kind.FIELD:\n return DirectiveLocation.FIELD;\n\n case Kind.FRAGMENT_SPREAD:\n return DirectiveLocation.FRAGMENT_SPREAD;\n\n case Kind.INLINE_FRAGMENT:\n return DirectiveLocation.INLINE_FRAGMENT;\n\n case Kind.FRAGMENT_DEFINITION:\n return DirectiveLocation.FRAGMENT_DEFINITION;\n\n case Kind.VARIABLE_DEFINITION:\n return DirectiveLocation.VARIABLE_DEFINITION;\n\n case Kind.SCHEMA_DEFINITION:\n case Kind.SCHEMA_EXTENSION:\n return DirectiveLocation.SCHEMA;\n\n case Kind.SCALAR_TYPE_DEFINITION:\n case Kind.SCALAR_TYPE_EXTENSION:\n return DirectiveLocation.SCALAR;\n\n case Kind.OBJECT_TYPE_DEFINITION:\n case Kind.OBJECT_TYPE_EXTENSION:\n return DirectiveLocation.OBJECT;\n\n case Kind.FIELD_DEFINITION:\n return DirectiveLocation.FIELD_DEFINITION;\n\n case Kind.INTERFACE_TYPE_DEFINITION:\n case Kind.INTERFACE_TYPE_EXTENSION:\n return DirectiveLocation.INTERFACE;\n\n case Kind.UNION_TYPE_DEFINITION:\n case Kind.UNION_TYPE_EXTENSION:\n return DirectiveLocation.UNION;\n\n case Kind.ENUM_TYPE_DEFINITION:\n case Kind.ENUM_TYPE_EXTENSION:\n return DirectiveLocation.ENUM;\n\n case Kind.ENUM_VALUE_DEFINITION:\n return DirectiveLocation.ENUM_VALUE;\n\n case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n return DirectiveLocation.INPUT_OBJECT;\n\n case Kind.INPUT_VALUE_DEFINITION:\n {\n var parentNode = ancestors[ancestors.length - 3];\n return parentNode.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION ? DirectiveLocation.INPUT_FIELD_DEFINITION : DirectiveLocation.ARGUMENT_DEFINITION;\n }\n }\n}\n\nfunction getDirectiveLocationForOperation(operation) {\n switch (operation) {\n case 'query':\n return DirectiveLocation.QUERY;\n\n case 'mutation':\n return DirectiveLocation.MUTATION;\n\n case 'subscription':\n return DirectiveLocation.SUBSCRIPTION;\n } // istanbul ignore next (Not reachable. All possible types have been considered)\n\n\n false || invariant(0, 'Unexpected operation: ' + inspect(operation));\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { Kind } from \"../../language/kinds.mjs\";\nimport { isTypeDefinitionNode, isTypeExtensionNode } from \"../../language/predicates.mjs\";\nimport { specifiedDirectives } from \"../../type/directives.mjs\";\n\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all non-repeatable directives at\n * a given location are uniquely named.\n */\nexport function UniqueDirectivesPerLocationRule(context) {\n var uniqueDirectiveMap = Object.create(null);\n var schema = context.getSchema();\n var definedDirectives = schema ? schema.getDirectives() : specifiedDirectives;\n\n for (var _i2 = 0; _i2 < definedDirectives.length; _i2++) {\n var directive = definedDirectives[_i2];\n uniqueDirectiveMap[directive.name] = !directive.isRepeatable;\n }\n\n var astDefinitions = context.getDocument().definitions;\n\n for (var _i4 = 0; _i4 < astDefinitions.length; _i4++) {\n var def = astDefinitions[_i4];\n\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n uniqueDirectiveMap[def.name.value] = !def.repeatable;\n }\n }\n\n var schemaDirectives = Object.create(null);\n var typeDirectivesMap = Object.create(null);\n return {\n // Many different AST nodes may contain directives. Rather than listing\n // them all, just listen for entering any node, and check to see if it\n // defines any directives.\n enter: function enter(node) {\n if (node.directives == null) {\n return;\n }\n\n var seenDirectives;\n\n if (node.kind === Kind.SCHEMA_DEFINITION || node.kind === Kind.SCHEMA_EXTENSION) {\n seenDirectives = schemaDirectives;\n } else if (isTypeDefinitionNode(node) || isTypeExtensionNode(node)) {\n var typeName = node.name.value;\n seenDirectives = typeDirectivesMap[typeName];\n\n if (seenDirectives === undefined) {\n typeDirectivesMap[typeName] = seenDirectives = Object.create(null);\n }\n } else {\n seenDirectives = Object.create(null);\n }\n\n for (var _i6 = 0, _node$directives2 = node.directives; _i6 < _node$directives2.length; _i6++) {\n var _directive = _node$directives2[_i6];\n var directiveName = _directive.name.value;\n\n if (uniqueDirectiveMap[directiveName]) {\n if (seenDirectives[directiveName]) {\n context.reportError(new GraphQLError(\"The directive \\\"@\".concat(directiveName, \"\\\" can only be used once at this location.\"), [seenDirectives[directiveName], _directive]));\n } else {\n seenDirectives[directiveName] = _directive;\n }\n }\n }\n }\n };\n}\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport didYouMean from \"../../jsutils/didYouMean.mjs\";\nimport suggestionList from \"../../jsutils/suggestionList.mjs\";\nimport { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { Kind } from \"../../language/kinds.mjs\";\nimport { specifiedDirectives } from \"../../type/directives.mjs\";\n\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n */\nexport function KnownArgumentNamesRule(context) {\n return _objectSpread(_objectSpread({}, KnownArgumentNamesOnDirectivesRule(context)), {}, {\n Argument: function Argument(argNode) {\n var argDef = context.getArgument();\n var fieldDef = context.getFieldDef();\n var parentType = context.getParentType();\n\n if (!argDef && fieldDef && parentType) {\n var argName = argNode.name.value;\n var knownArgsNames = fieldDef.args.map(function (arg) {\n return arg.name;\n });\n var suggestions = suggestionList(argName, knownArgsNames);\n context.reportError(new GraphQLError(\"Unknown argument \\\"\".concat(argName, \"\\\" on field \\\"\").concat(parentType.name, \".\").concat(fieldDef.name, \"\\\".\") + didYouMean(suggestions), argNode));\n }\n }\n });\n}\n/**\n * @internal\n */\n\nexport function KnownArgumentNamesOnDirectivesRule(context) {\n var directiveArgs = Object.create(null);\n var schema = context.getSchema();\n var definedDirectives = schema ? schema.getDirectives() : specifiedDirectives;\n\n for (var _i2 = 0; _i2 < definedDirectives.length; _i2++) {\n var directive = definedDirectives[_i2];\n directiveArgs[directive.name] = directive.args.map(function (arg) {\n return arg.name;\n });\n }\n\n var astDefinitions = context.getDocument().definitions;\n\n for (var _i4 = 0; _i4 < astDefinitions.length; _i4++) {\n var def = astDefinitions[_i4];\n\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n var _def$arguments;\n\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var argsNodes = (_def$arguments = def.arguments) !== null && _def$arguments !== void 0 ? _def$arguments : [];\n directiveArgs[def.name.value] = argsNodes.map(function (arg) {\n return arg.name.value;\n });\n }\n }\n\n return {\n Directive: function Directive(directiveNode) {\n var directiveName = directiveNode.name.value;\n var knownArgs = directiveArgs[directiveName];\n\n if (directiveNode.arguments && knownArgs) {\n for (var _i6 = 0, _directiveNode$argume2 = directiveNode.arguments; _i6 < _directiveNode$argume2.length; _i6++) {\n var argNode = _directiveNode$argume2[_i6];\n var argName = argNode.name.value;\n\n if (knownArgs.indexOf(argName) === -1) {\n var suggestions = suggestionList(argName, knownArgs);\n context.reportError(new GraphQLError(\"Unknown argument \\\"\".concat(argName, \"\\\" on directive \\\"@\").concat(directiveName, \"\\\".\") + didYouMean(suggestions), argNode));\n }\n }\n }\n\n return false;\n }\n };\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\n\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n */\nexport function UniqueArgumentNamesRule(context) {\n var knownArgNames = Object.create(null);\n return {\n Field: function Field() {\n knownArgNames = Object.create(null);\n },\n Directive: function Directive() {\n knownArgNames = Object.create(null);\n },\n Argument: function Argument(node) {\n var argName = node.name.value;\n\n if (knownArgNames[argName]) {\n context.reportError(new GraphQLError(\"There can be only one argument named \\\"\".concat(argName, \"\\\".\"), [knownArgNames[argName], node.name]));\n } else {\n knownArgNames[argName] = node.name;\n }\n\n return false;\n }\n };\n}\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport inspect from \"../../jsutils/inspect.mjs\";\nimport keyMap from \"../../jsutils/keyMap.mjs\";\nimport { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { Kind } from \"../../language/kinds.mjs\";\nimport { print } from \"../../language/printer.mjs\";\nimport { specifiedDirectives } from \"../../type/directives.mjs\";\nimport { isType, isRequiredArgument } from \"../../type/definition.mjs\";\n\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null without a\n * default value) field arguments have been provided.\n */\nexport function ProvidedRequiredArgumentsRule(context) {\n return _objectSpread(_objectSpread({}, ProvidedRequiredArgumentsOnDirectivesRule(context)), {}, {\n Field: {\n // Validate on leave to allow for deeper errors to appear first.\n leave: function leave(fieldNode) {\n var _fieldNode$arguments;\n\n var fieldDef = context.getFieldDef();\n\n if (!fieldDef) {\n return false;\n } // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n\n\n var argNodes = (_fieldNode$arguments = fieldNode.arguments) !== null && _fieldNode$arguments !== void 0 ? _fieldNode$arguments : [];\n var argNodeMap = keyMap(argNodes, function (arg) {\n return arg.name.value;\n });\n\n for (var _i2 = 0, _fieldDef$args2 = fieldDef.args; _i2 < _fieldDef$args2.length; _i2++) {\n var argDef = _fieldDef$args2[_i2];\n var argNode = argNodeMap[argDef.name];\n\n if (!argNode && isRequiredArgument(argDef)) {\n var argTypeStr = inspect(argDef.type);\n context.reportError(new GraphQLError(\"Field \\\"\".concat(fieldDef.name, \"\\\" argument \\\"\").concat(argDef.name, \"\\\" of type \\\"\").concat(argTypeStr, \"\\\" is required, but it was not provided.\"), fieldNode));\n }\n }\n }\n }\n });\n}\n/**\n * @internal\n */\n\nexport function ProvidedRequiredArgumentsOnDirectivesRule(context) {\n var requiredArgsMap = Object.create(null);\n var schema = context.getSchema();\n var definedDirectives = schema ? schema.getDirectives() : specifiedDirectives;\n\n for (var _i4 = 0; _i4 < definedDirectives.length; _i4++) {\n var directive = definedDirectives[_i4];\n requiredArgsMap[directive.name] = keyMap(directive.args.filter(isRequiredArgument), function (arg) {\n return arg.name;\n });\n }\n\n var astDefinitions = context.getDocument().definitions;\n\n for (var _i6 = 0; _i6 < astDefinitions.length; _i6++) {\n var def = astDefinitions[_i6];\n\n if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n var _def$arguments;\n\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var argNodes = (_def$arguments = def.arguments) !== null && _def$arguments !== void 0 ? _def$arguments : [];\n requiredArgsMap[def.name.value] = keyMap(argNodes.filter(isRequiredArgumentNode), function (arg) {\n return arg.name.value;\n });\n }\n }\n\n return {\n Directive: {\n // Validate on leave to allow for deeper errors to appear first.\n leave: function leave(directiveNode) {\n var directiveName = directiveNode.name.value;\n var requiredArgs = requiredArgsMap[directiveName];\n\n if (requiredArgs) {\n var _directiveNode$argume;\n\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var _argNodes = (_directiveNode$argume = directiveNode.arguments) !== null && _directiveNode$argume !== void 0 ? _directiveNode$argume : [];\n\n var argNodeMap = keyMap(_argNodes, function (arg) {\n return arg.name.value;\n });\n\n for (var _i8 = 0, _Object$keys2 = Object.keys(requiredArgs); _i8 < _Object$keys2.length; _i8++) {\n var argName = _Object$keys2[_i8];\n\n if (!argNodeMap[argName]) {\n var argType = requiredArgs[argName].type;\n var argTypeStr = isType(argType) ? inspect(argType) : print(argType);\n context.reportError(new GraphQLError(\"Directive \\\"@\".concat(directiveName, \"\\\" argument \\\"\").concat(argName, \"\\\" of type \\\"\").concat(argTypeStr, \"\\\" is required, but it was not provided.\"), directiveNode));\n }\n }\n }\n }\n }\n };\n}\n\nfunction isRequiredArgumentNode(arg) {\n return arg.type.kind === Kind.NON_NULL_TYPE && arg.defaultValue == null;\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\n\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n */\nexport function UniqueInputFieldNamesRule(context) {\n var knownNameStack = [];\n var knownNames = Object.create(null);\n return {\n ObjectValue: {\n enter: function enter() {\n knownNameStack.push(knownNames);\n knownNames = Object.create(null);\n },\n leave: function leave() {\n knownNames = knownNameStack.pop();\n }\n },\n ObjectField: function ObjectField(node) {\n var fieldName = node.name.value;\n\n if (knownNames[fieldName]) {\n context.reportError(new GraphQLError(\"There can be only one input field named \\\"\".concat(fieldName, \"\\\".\"), [knownNames[fieldName], node.name]));\n } else {\n knownNames[fieldName] = node.name;\n }\n }\n };\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\n\n/**\n * Lone Schema definition\n *\n * A GraphQL document is only valid if it contains only one schema definition.\n */\nexport function LoneSchemaDefinitionRule(context) {\n var _ref, _ref2, _oldSchema$astNode;\n\n var oldSchema = context.getSchema();\n var alreadyDefined = (_ref = (_ref2 = (_oldSchema$astNode = oldSchema === null || oldSchema === void 0 ? void 0 : oldSchema.astNode) !== null && _oldSchema$astNode !== void 0 ? _oldSchema$astNode : oldSchema === null || oldSchema === void 0 ? void 0 : oldSchema.getQueryType()) !== null && _ref2 !== void 0 ? _ref2 : oldSchema === null || oldSchema === void 0 ? void 0 : oldSchema.getMutationType()) !== null && _ref !== void 0 ? _ref : oldSchema === null || oldSchema === void 0 ? void 0 : oldSchema.getSubscriptionType();\n var schemaDefinitionsCount = 0;\n return {\n SchemaDefinition: function SchemaDefinition(node) {\n if (alreadyDefined) {\n context.reportError(new GraphQLError('Cannot define a new schema within a schema extension.', node));\n return;\n }\n\n if (schemaDefinitionsCount > 0) {\n context.reportError(new GraphQLError('Must provide only one schema definition.', node));\n }\n\n ++schemaDefinitionsCount;\n }\n };\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\n\n/**\n * Unique operation types\n *\n * A GraphQL document is only valid if it has only one type per operation.\n */\nexport function UniqueOperationTypesRule(context) {\n var schema = context.getSchema();\n var definedOperationTypes = Object.create(null);\n var existingOperationTypes = schema ? {\n query: schema.getQueryType(),\n mutation: schema.getMutationType(),\n subscription: schema.getSubscriptionType()\n } : {};\n return {\n SchemaDefinition: checkOperationTypes,\n SchemaExtension: checkOperationTypes\n };\n\n function checkOperationTypes(node) {\n var _node$operationTypes;\n\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var operationTypesNodes = (_node$operationTypes = node.operationTypes) !== null && _node$operationTypes !== void 0 ? _node$operationTypes : [];\n\n for (var _i2 = 0; _i2 < operationTypesNodes.length; _i2++) {\n var operationType = operationTypesNodes[_i2];\n var operation = operationType.operation;\n var alreadyDefinedOperationType = definedOperationTypes[operation];\n\n if (existingOperationTypes[operation]) {\n context.reportError(new GraphQLError(\"Type for \".concat(operation, \" already defined in the schema. It cannot be redefined.\"), operationType));\n } else if (alreadyDefinedOperationType) {\n context.reportError(new GraphQLError(\"There can be only one \".concat(operation, \" type in schema.\"), [alreadyDefinedOperationType, operationType]));\n } else {\n definedOperationTypes[operation] = operationType;\n }\n }\n\n return false;\n }\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\n\n/**\n * Unique type names\n *\n * A GraphQL document is only valid if all defined types have unique names.\n */\nexport function UniqueTypeNamesRule(context) {\n var knownTypeNames = Object.create(null);\n var schema = context.getSchema();\n return {\n ScalarTypeDefinition: checkTypeName,\n ObjectTypeDefinition: checkTypeName,\n InterfaceTypeDefinition: checkTypeName,\n UnionTypeDefinition: checkTypeName,\n EnumTypeDefinition: checkTypeName,\n InputObjectTypeDefinition: checkTypeName\n };\n\n function checkTypeName(node) {\n var typeName = node.name.value;\n\n if (schema !== null && schema !== void 0 && schema.getType(typeName)) {\n context.reportError(new GraphQLError(\"Type \\\"\".concat(typeName, \"\\\" already exists in the schema. It cannot also be defined in this type definition.\"), node.name));\n return;\n }\n\n if (knownTypeNames[typeName]) {\n context.reportError(new GraphQLError(\"There can be only one type named \\\"\".concat(typeName, \"\\\".\"), [knownTypeNames[typeName], node.name]));\n } else {\n knownTypeNames[typeName] = node.name;\n }\n\n return false;\n }\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { isEnumType } from \"../../type/definition.mjs\";\n\n/**\n * Unique enum value names\n *\n * A GraphQL enum type is only valid if all its values are uniquely named.\n */\nexport function UniqueEnumValueNamesRule(context) {\n var schema = context.getSchema();\n var existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);\n var knownValueNames = Object.create(null);\n return {\n EnumTypeDefinition: checkValueUniqueness,\n EnumTypeExtension: checkValueUniqueness\n };\n\n function checkValueUniqueness(node) {\n var _node$values;\n\n var typeName = node.name.value;\n\n if (!knownValueNames[typeName]) {\n knownValueNames[typeName] = Object.create(null);\n } // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n\n\n var valueNodes = (_node$values = node.values) !== null && _node$values !== void 0 ? _node$values : [];\n var valueNames = knownValueNames[typeName];\n\n for (var _i2 = 0; _i2 < valueNodes.length; _i2++) {\n var valueDef = valueNodes[_i2];\n var valueName = valueDef.name.value;\n var existingType = existingTypeMap[typeName];\n\n if (isEnumType(existingType) && existingType.getValue(valueName)) {\n context.reportError(new GraphQLError(\"Enum value \\\"\".concat(typeName, \".\").concat(valueName, \"\\\" already exists in the schema. It cannot also be defined in this type extension.\"), valueDef.name));\n } else if (valueNames[valueName]) {\n context.reportError(new GraphQLError(\"Enum value \\\"\".concat(typeName, \".\").concat(valueName, \"\\\" can only be defined once.\"), [valueNames[valueName], valueDef.name]));\n } else {\n valueNames[valueName] = valueDef.name;\n }\n }\n\n return false;\n }\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { isObjectType, isInterfaceType, isInputObjectType } from \"../../type/definition.mjs\";\n\n/**\n * Unique field definition names\n *\n * A GraphQL complex type is only valid if all its fields are uniquely named.\n */\nexport function UniqueFieldDefinitionNamesRule(context) {\n var schema = context.getSchema();\n var existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);\n var knownFieldNames = Object.create(null);\n return {\n InputObjectTypeDefinition: checkFieldUniqueness,\n InputObjectTypeExtension: checkFieldUniqueness,\n InterfaceTypeDefinition: checkFieldUniqueness,\n InterfaceTypeExtension: checkFieldUniqueness,\n ObjectTypeDefinition: checkFieldUniqueness,\n ObjectTypeExtension: checkFieldUniqueness\n };\n\n function checkFieldUniqueness(node) {\n var _node$fields;\n\n var typeName = node.name.value;\n\n if (!knownFieldNames[typeName]) {\n knownFieldNames[typeName] = Object.create(null);\n } // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n\n\n var fieldNodes = (_node$fields = node.fields) !== null && _node$fields !== void 0 ? _node$fields : [];\n var fieldNames = knownFieldNames[typeName];\n\n for (var _i2 = 0; _i2 < fieldNodes.length; _i2++) {\n var fieldDef = fieldNodes[_i2];\n var fieldName = fieldDef.name.value;\n\n if (hasField(existingTypeMap[typeName], fieldName)) {\n context.reportError(new GraphQLError(\"Field \\\"\".concat(typeName, \".\").concat(fieldName, \"\\\" already exists in the schema. It cannot also be defined in this type extension.\"), fieldDef.name));\n } else if (fieldNames[fieldName]) {\n context.reportError(new GraphQLError(\"Field \\\"\".concat(typeName, \".\").concat(fieldName, \"\\\" can only be defined once.\"), [fieldNames[fieldName], fieldDef.name]));\n } else {\n fieldNames[fieldName] = fieldDef.name;\n }\n }\n\n return false;\n }\n}\n\nfunction hasField(type, fieldName) {\n if (isObjectType(type) || isInterfaceType(type) || isInputObjectType(type)) {\n return type.getFields()[fieldName] != null;\n }\n\n return false;\n}\n","import { GraphQLError } from \"../../error/GraphQLError.mjs\";\n\n/**\n * Unique directive names\n *\n * A GraphQL document is only valid if all defined directives have unique names.\n */\nexport function UniqueDirectiveNamesRule(context) {\n var knownDirectiveNames = Object.create(null);\n var schema = context.getSchema();\n return {\n DirectiveDefinition: function DirectiveDefinition(node) {\n var directiveName = node.name.value;\n\n if (schema !== null && schema !== void 0 && schema.getDirective(directiveName)) {\n context.reportError(new GraphQLError(\"Directive \\\"@\".concat(directiveName, \"\\\" already exists in the schema. It cannot be redefined.\"), node.name));\n return;\n }\n\n if (knownDirectiveNames[directiveName]) {\n context.reportError(new GraphQLError(\"There can be only one directive named \\\"@\".concat(directiveName, \"\\\".\"), [knownDirectiveNames[directiveName], node.name]));\n } else {\n knownDirectiveNames[directiveName] = node.name;\n }\n\n return false;\n }\n };\n}\n","var _defKindToExtKind;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport inspect from \"../../jsutils/inspect.mjs\";\nimport invariant from \"../../jsutils/invariant.mjs\";\nimport didYouMean from \"../../jsutils/didYouMean.mjs\";\nimport suggestionList from \"../../jsutils/suggestionList.mjs\";\nimport { GraphQLError } from \"../../error/GraphQLError.mjs\";\nimport { Kind } from \"../../language/kinds.mjs\";\nimport { isTypeDefinitionNode } from \"../../language/predicates.mjs\";\nimport { isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType } from \"../../type/definition.mjs\";\n\n/**\n * Possible type extension\n *\n * A type extension is only valid if the type is defined and has the same kind.\n */\nexport function PossibleTypeExtensionsRule(context) {\n var schema = context.getSchema();\n var definedTypes = Object.create(null);\n\n for (var _i2 = 0, _context$getDocument$2 = context.getDocument().definitions; _i2 < _context$getDocument$2.length; _i2++) {\n var def = _context$getDocument$2[_i2];\n\n if (isTypeDefinitionNode(def)) {\n definedTypes[def.name.value] = def;\n }\n }\n\n return {\n ScalarTypeExtension: checkExtension,\n ObjectTypeExtension: checkExtension,\n InterfaceTypeExtension: checkExtension,\n UnionTypeExtension: checkExtension,\n EnumTypeExtension: checkExtension,\n InputObjectTypeExtension: checkExtension\n };\n\n function checkExtension(node) {\n var typeName = node.name.value;\n var defNode = definedTypes[typeName];\n var existingType = schema === null || schema === void 0 ? void 0 : schema.getType(typeName);\n var expectedKind;\n\n if (defNode) {\n expectedKind = defKindToExtKind[defNode.kind];\n } else if (existingType) {\n expectedKind = typeToExtKind(existingType);\n }\n\n if (expectedKind) {\n if (expectedKind !== node.kind) {\n var kindStr = extensionKindToTypeName(node.kind);\n context.reportError(new GraphQLError(\"Cannot extend non-\".concat(kindStr, \" type \\\"\").concat(typeName, \"\\\".\"), defNode ? [defNode, node] : node));\n }\n } else {\n var allTypeNames = Object.keys(definedTypes);\n\n if (schema) {\n allTypeNames = allTypeNames.concat(Object.keys(schema.getTypeMap()));\n }\n\n var suggestedTypes = suggestionList(typeName, allTypeNames);\n context.reportError(new GraphQLError(\"Cannot extend type \\\"\".concat(typeName, \"\\\" because it is not defined.\") + didYouMean(suggestedTypes), node.name));\n }\n }\n}\nvar defKindToExtKind = (_defKindToExtKind = {}, _defineProperty(_defKindToExtKind, Kind.SCALAR_TYPE_DEFINITION, Kind.SCALAR_TYPE_EXTENSION), _defineProperty(_defKindToExtKind, Kind.OBJECT_TYPE_DEFINITION, Kind.OBJECT_TYPE_EXTENSION), _defineProperty(_defKindToExtKind, Kind.INTERFACE_TYPE_DEFINITION, Kind.INTERFACE_TYPE_EXTENSION), _defineProperty(_defKindToExtKind, Kind.UNION_TYPE_DEFINITION, Kind.UNION_TYPE_EXTENSION), _defineProperty(_defKindToExtKind, Kind.ENUM_TYPE_DEFINITION, Kind.ENUM_TYPE_EXTENSION), _defineProperty(_defKindToExtKind, Kind.INPUT_OBJECT_TYPE_DEFINITION, Kind.INPUT_OBJECT_TYPE_EXTENSION), _defKindToExtKind);\n\nfunction typeToExtKind(type) {\n if (isScalarType(type)) {\n return Kind.SCALAR_TYPE_EXTENSION;\n }\n\n if (isObjectType(type)) {\n return Kind.OBJECT_TYPE_EXTENSION;\n }\n\n if (isInterfaceType(type)) {\n return Kind.INTERFACE_TYPE_EXTENSION;\n }\n\n if (isUnionType(type)) {\n return Kind.UNION_TYPE_EXTENSION;\n }\n\n if (isEnumType(type)) {\n return Kind.ENUM_TYPE_EXTENSION;\n } // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2618')\n\n\n if (isInputObjectType(type)) {\n return Kind.INPUT_OBJECT_TYPE_EXTENSION;\n } // istanbul ignore next (Not reachable. All possible types have been considered)\n\n\n false || invariant(0, 'Unexpected type: ' + inspect(type));\n}\n\nfunction extensionKindToTypeName(kind) {\n switch (kind) {\n case Kind.SCALAR_TYPE_EXTENSION:\n return 'scalar';\n\n case Kind.OBJECT_TYPE_EXTENSION:\n return 'object';\n\n case Kind.INTERFACE_TYPE_EXTENSION:\n return 'interface';\n\n case Kind.UNION_TYPE_EXTENSION:\n return 'union';\n\n case Kind.ENUM_TYPE_EXTENSION:\n return 'enum';\n\n case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n return 'input object';\n } // istanbul ignore next (Not reachable. All possible types have been considered)\n\n\n false || invariant(0, 'Unexpected kind: ' + inspect(kind));\n}\n","// Spec Section: \"Executable Definitions\"\nimport { ExecutableDefinitionsRule } from \"./rules/ExecutableDefinitionsRule.mjs\"; // Spec Section: \"Operation Name Uniqueness\"\n\nimport { UniqueOperationNamesRule } from \"./rules/UniqueOperationNamesRule.mjs\"; // Spec Section: \"Lone Anonymous Operation\"\n\nimport { LoneAnonymousOperationRule } from \"./rules/LoneAnonymousOperationRule.mjs\"; // Spec Section: \"Subscriptions with Single Root Field\"\n\nimport { SingleFieldSubscriptionsRule } from \"./rules/SingleFieldSubscriptionsRule.mjs\"; // Spec Section: \"Fragment Spread Type Existence\"\n\nimport { KnownTypeNamesRule } from \"./rules/KnownTypeNamesRule.mjs\"; // Spec Section: \"Fragments on Composite Types\"\n\nimport { FragmentsOnCompositeTypesRule } from \"./rules/FragmentsOnCompositeTypesRule.mjs\"; // Spec Section: \"Variables are Input Types\"\n\nimport { VariablesAreInputTypesRule } from \"./rules/VariablesAreInputTypesRule.mjs\"; // Spec Section: \"Leaf Field Selections\"\n\nimport { ScalarLeafsRule } from \"./rules/ScalarLeafsRule.mjs\"; // Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\n\nimport { FieldsOnCorrectTypeRule } from \"./rules/FieldsOnCorrectTypeRule.mjs\"; // Spec Section: \"Fragment Name Uniqueness\"\n\nimport { UniqueFragmentNamesRule } from \"./rules/UniqueFragmentNamesRule.mjs\"; // Spec Section: \"Fragment spread target defined\"\n\nimport { KnownFragmentNamesRule } from \"./rules/KnownFragmentNamesRule.mjs\"; // Spec Section: \"Fragments must be used\"\n\nimport { NoUnusedFragmentsRule } from \"./rules/NoUnusedFragmentsRule.mjs\"; // Spec Section: \"Fragment spread is possible\"\n\nimport { PossibleFragmentSpreadsRule } from \"./rules/PossibleFragmentSpreadsRule.mjs\"; // Spec Section: \"Fragments must not form cycles\"\n\nimport { NoFragmentCyclesRule } from \"./rules/NoFragmentCyclesRule.mjs\"; // Spec Section: \"Variable Uniqueness\"\n\nimport { UniqueVariableNamesRule } from \"./rules/UniqueVariableNamesRule.mjs\"; // Spec Section: \"All Variable Used Defined\"\n\nimport { NoUndefinedVariablesRule } from \"./rules/NoUndefinedVariablesRule.mjs\"; // Spec Section: \"All Variables Used\"\n\nimport { NoUnusedVariablesRule } from \"./rules/NoUnusedVariablesRule.mjs\"; // Spec Section: \"Directives Are Defined\"\n\nimport { KnownDirectivesRule } from \"./rules/KnownDirectivesRule.mjs\"; // Spec Section: \"Directives Are Unique Per Location\"\n\nimport { UniqueDirectivesPerLocationRule } from \"./rules/UniqueDirectivesPerLocationRule.mjs\"; // Spec Section: \"Argument Names\"\n\nimport { KnownArgumentNamesRule, KnownArgumentNamesOnDirectivesRule } from \"./rules/KnownArgumentNamesRule.mjs\"; // Spec Section: \"Argument Uniqueness\"\n\nimport { UniqueArgumentNamesRule } from \"./rules/UniqueArgumentNamesRule.mjs\"; // Spec Section: \"Value Type Correctness\"\n\nimport { ValuesOfCorrectTypeRule } from \"./rules/ValuesOfCorrectTypeRule.mjs\"; // Spec Section: \"Argument Optionality\"\n\nimport { ProvidedRequiredArgumentsRule, ProvidedRequiredArgumentsOnDirectivesRule } from \"./rules/ProvidedRequiredArgumentsRule.mjs\"; // Spec Section: \"All Variable Usages Are Allowed\"\n\nimport { VariablesInAllowedPositionRule } from \"./rules/VariablesInAllowedPositionRule.mjs\"; // Spec Section: \"Field Selection Merging\"\n\nimport { OverlappingFieldsCanBeMergedRule } from \"./rules/OverlappingFieldsCanBeMergedRule.mjs\"; // Spec Section: \"Input Object Field Uniqueness\"\n\nimport { UniqueInputFieldNamesRule } from \"./rules/UniqueInputFieldNamesRule.mjs\"; // TODO: Spec Section\n\nimport { MaxIntrospectionDepthRule } from \"./rules/MaxIntrospectionDepthRule.mjs\"; // SDL-specific validation rules\n\nimport { LoneSchemaDefinitionRule } from \"./rules/LoneSchemaDefinitionRule.mjs\";\nimport { UniqueOperationTypesRule } from \"./rules/UniqueOperationTypesRule.mjs\";\nimport { UniqueTypeNamesRule } from \"./rules/UniqueTypeNamesRule.mjs\";\nimport { UniqueEnumValueNamesRule } from \"./rules/UniqueEnumValueNamesRule.mjs\";\nimport { UniqueFieldDefinitionNamesRule } from \"./rules/UniqueFieldDefinitionNamesRule.mjs\";\nimport { UniqueDirectiveNamesRule } from \"./rules/UniqueDirectiveNamesRule.mjs\";\nimport { PossibleTypeExtensionsRule } from \"./rules/PossibleTypeExtensionsRule.mjs\";\n/**\n * Technically these aren't part of the spec but they are strongly encouraged\n * validation rules.\n */\n\nexport var recommendedRules = Object.freeze([MaxIntrospectionDepthRule]);\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\n\nexport var specifiedRules = Object.freeze([ExecutableDefinitionsRule, UniqueOperationNamesRule, LoneAnonymousOperationRule, SingleFieldSubscriptionsRule, KnownTypeNamesRule, FragmentsOnCompositeTypesRule, VariablesAreInputTypesRule, ScalarLeafsRule, FieldsOnCorrectTypeRule, UniqueFragmentNamesRule, KnownFragmentNamesRule, NoUnusedFragmentsRule, PossibleFragmentSpreadsRule, NoFragmentCyclesRule, UniqueVariableNamesRule, NoUndefinedVariablesRule, NoUnusedVariablesRule, KnownDirectivesRule, UniqueDirectivesPerLocationRule, KnownArgumentNamesRule, UniqueArgumentNamesRule, ValuesOfCorrectTypeRule, ProvidedRequiredArgumentsRule, VariablesInAllowedPositionRule, OverlappingFieldsCanBeMergedRule, UniqueInputFieldNamesRule].concat(recommendedRules));\n/**\n * @internal\n */\n\nexport var specifiedSDLRules = Object.freeze([LoneSchemaDefinitionRule, UniqueOperationTypesRule, UniqueTypeNamesRule, UniqueEnumValueNamesRule, UniqueFieldDefinitionNamesRule, UniqueDirectiveNamesRule, KnownTypeNamesRule, KnownDirectivesRule, UniqueDirectivesPerLocationRule, PossibleTypeExtensionsRule, KnownArgumentNamesOnDirectivesRule, UniqueArgumentNamesRule, UniqueInputFieldNamesRule, ProvidedRequiredArgumentsOnDirectivesRule]);\n","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nimport { Kind } from \"../language/kinds.mjs\";\nimport { visit } from \"../language/visitor.mjs\";\nimport { TypeInfo, visitWithTypeInfo } from \"../utilities/TypeInfo.mjs\";\n\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nexport var ASTValidationContext = /*#__PURE__*/function () {\n function ASTValidationContext(ast, onError) {\n this._ast = ast;\n this._fragments = undefined;\n this._fragmentSpreads = new Map();\n this._recursivelyReferencedFragments = new Map();\n this._onError = onError;\n }\n\n var _proto = ASTValidationContext.prototype;\n\n _proto.reportError = function reportError(error) {\n this._onError(error);\n };\n\n _proto.getDocument = function getDocument() {\n return this._ast;\n };\n\n _proto.getFragment = function getFragment(name) {\n var fragments = this._fragments;\n\n if (!fragments) {\n this._fragments = fragments = this.getDocument().definitions.reduce(function (frags, statement) {\n if (statement.kind === Kind.FRAGMENT_DEFINITION) {\n frags[statement.name.value] = statement;\n }\n\n return frags;\n }, Object.create(null));\n }\n\n return fragments[name];\n };\n\n _proto.getFragmentSpreads = function getFragmentSpreads(node) {\n var spreads = this._fragmentSpreads.get(node);\n\n if (!spreads) {\n spreads = [];\n var setsToVisit = [node];\n\n while (setsToVisit.length !== 0) {\n var set = setsToVisit.pop();\n\n for (var _i2 = 0, _set$selections2 = set.selections; _i2 < _set$selections2.length; _i2++) {\n var selection = _set$selections2[_i2];\n\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n spreads.push(selection);\n } else if (selection.selectionSet) {\n setsToVisit.push(selection.selectionSet);\n }\n }\n }\n\n this._fragmentSpreads.set(node, spreads);\n }\n\n return spreads;\n };\n\n _proto.getRecursivelyReferencedFragments = function getRecursivelyReferencedFragments(operation) {\n var fragments = this._recursivelyReferencedFragments.get(operation);\n\n if (!fragments) {\n fragments = [];\n var collectedNames = Object.create(null);\n var nodesToVisit = [operation.selectionSet];\n\n while (nodesToVisit.length !== 0) {\n var node = nodesToVisit.pop();\n\n for (var _i4 = 0, _this$getFragmentSpre2 = this.getFragmentSpreads(node); _i4 < _this$getFragmentSpre2.length; _i4++) {\n var spread = _this$getFragmentSpre2[_i4];\n var fragName = spread.name.value;\n\n if (collectedNames[fragName] !== true) {\n collectedNames[fragName] = true;\n var fragment = this.getFragment(fragName);\n\n if (fragment) {\n fragments.push(fragment);\n nodesToVisit.push(fragment.selectionSet);\n }\n }\n }\n }\n\n this._recursivelyReferencedFragments.set(operation, fragments);\n }\n\n return fragments;\n };\n\n return ASTValidationContext;\n}();\nexport var SDLValidationContext = /*#__PURE__*/function (_ASTValidationContext) {\n _inheritsLoose(SDLValidationContext, _ASTValidationContext);\n\n function SDLValidationContext(ast, schema, onError) {\n var _this;\n\n _this = _ASTValidationContext.call(this, ast, onError) || this;\n _this._schema = schema;\n return _this;\n }\n\n var _proto2 = SDLValidationContext.prototype;\n\n _proto2.getSchema = function getSchema() {\n return this._schema;\n };\n\n return SDLValidationContext;\n}(ASTValidationContext);\nexport var ValidationContext = /*#__PURE__*/function (_ASTValidationContext2) {\n _inheritsLoose(ValidationContext, _ASTValidationContext2);\n\n function ValidationContext(schema, ast, typeInfo, onError) {\n var _this2;\n\n _this2 = _ASTValidationContext2.call(this, ast, onError) || this;\n _this2._schema = schema;\n _this2._typeInfo = typeInfo;\n _this2._variableUsages = new Map();\n _this2._recursiveVariableUsages = new Map();\n return _this2;\n }\n\n var _proto3 = ValidationContext.prototype;\n\n _proto3.getSchema = function getSchema() {\n return this._schema;\n };\n\n _proto3.getVariableUsages = function getVariableUsages(node) {\n var usages = this._variableUsages.get(node);\n\n if (!usages) {\n var newUsages = [];\n var typeInfo = new TypeInfo(this._schema);\n visit(node, visitWithTypeInfo(typeInfo, {\n VariableDefinition: function VariableDefinition() {\n return false;\n },\n Variable: function Variable(variable) {\n newUsages.push({\n node: variable,\n type: typeInfo.getInputType(),\n defaultValue: typeInfo.getDefaultValue()\n });\n }\n }));\n usages = newUsages;\n\n this._variableUsages.set(node, usages);\n }\n\n return usages;\n };\n\n _proto3.getRecursiveVariableUsages = function getRecursiveVariableUsages(operation) {\n var usages = this._recursiveVariableUsages.get(operation);\n\n if (!usages) {\n usages = this.getVariableUsages(operation);\n\n for (var _i6 = 0, _this$getRecursivelyR2 = this.getRecursivelyReferencedFragments(operation); _i6 < _this$getRecursivelyR2.length; _i6++) {\n var frag = _this$getRecursivelyR2[_i6];\n usages = usages.concat(this.getVariableUsages(frag));\n }\n\n this._recursiveVariableUsages.set(operation, usages);\n }\n\n return usages;\n };\n\n _proto3.getType = function getType() {\n return this._typeInfo.getType();\n };\n\n _proto3.getParentType = function getParentType() {\n return this._typeInfo.getParentType();\n };\n\n _proto3.getInputType = function getInputType() {\n return this._typeInfo.getInputType();\n };\n\n _proto3.getParentInputType = function getParentInputType() {\n return this._typeInfo.getParentInputType();\n };\n\n _proto3.getFieldDef = function getFieldDef() {\n return this._typeInfo.getFieldDef();\n };\n\n _proto3.getDirective = function getDirective() {\n return this._typeInfo.getDirective();\n };\n\n _proto3.getArgument = function getArgument() {\n return this._typeInfo.getArgument();\n };\n\n _proto3.getEnumValue = function getEnumValue() {\n return this._typeInfo.getEnumValue();\n };\n\n return ValidationContext;\n}(ASTValidationContext);\n","import devAssert from \"../jsutils/devAssert.mjs\";\nimport { GraphQLError } from \"../error/GraphQLError.mjs\";\nimport { visit, visitInParallel } from \"../language/visitor.mjs\";\nimport { assertValidSchema } from \"../type/validate.mjs\";\nimport { TypeInfo, visitWithTypeInfo } from \"../utilities/TypeInfo.mjs\";\nimport { specifiedRules, specifiedSDLRules } from \"./specifiedRules.mjs\";\nimport { SDLValidationContext, ValidationContext } from \"./ValidationContext.mjs\";\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\n\nexport function validate(schema, documentAST) {\n var rules = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : specifiedRules;\n var typeInfo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new TypeInfo(schema);\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n maxErrors: undefined\n };\n documentAST || devAssert(0, 'Must provide document.'); // If the schema used for validation is invalid, throw an error.\n\n assertValidSchema(schema);\n var abortObj = Object.freeze({});\n var errors = [];\n var context = new ValidationContext(schema, documentAST, typeInfo, function (error) {\n if (options.maxErrors != null && errors.length >= options.maxErrors) {\n errors.push(new GraphQLError('Too many validation errors, error limit reached. Validation aborted.'));\n throw abortObj;\n }\n\n errors.push(error);\n }); // This uses a specialized visitor which runs multiple visitors in parallel,\n // while maintaining the visitor skip and break API.\n\n var visitor = visitInParallel(rules.map(function (rule) {\n return rule(context);\n })); // Visit the whole document with each instance of all provided rules.\n\n try {\n visit(documentAST, visitWithTypeInfo(typeInfo, visitor));\n } catch (e) {\n if (e !== abortObj) {\n throw e;\n }\n }\n\n return errors;\n}\n/**\n * @internal\n */\n\nexport function validateSDL(documentAST, schemaToExtend) {\n var rules = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : specifiedSDLRules;\n var errors = [];\n var context = new SDLValidationContext(documentAST, schemaToExtend, function (error) {\n errors.push(error);\n });\n var visitors = rules.map(function (rule) {\n return rule(context);\n });\n visit(documentAST, visitInParallel(visitors));\n return errors;\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDL(documentAST) {\n var errors = validateSDL(documentAST);\n\n if (errors.length !== 0) {\n throw new Error(errors.map(function (error) {\n return error.message;\n }).join('\\n\\n'));\n }\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDLExtension(documentAST, schema) {\n var errors = validateSDL(documentAST, schema);\n\n if (errors.length !== 0) {\n throw new Error(errors.map(function (error) {\n return error.message;\n }).join('\\n\\n'));\n }\n}\n","import objectValues from \"../polyfills/objectValues.mjs\";\nimport keyMap from \"../jsutils/keyMap.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport invariant from \"../jsutils/invariant.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { isLeafType, isInputObjectType, isListType, isNonNullType } from \"../type/definition.mjs\";\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * GraphQL Value literals.\n *\n * Returns `undefined` when the value could not be validly coerced according to\n * the provided type.\n *\n * | GraphQL Value | JSON Value |\n * | -------------------- | ------------- |\n * | Input Object | Object |\n * | List | Array |\n * | Boolean | Boolean |\n * | String | String |\n * | Int / Float | Number |\n * | Enum Value | Mixed |\n * | NullValue | null |\n *\n */\n\nexport function valueFromAST(valueNode, type, variables) {\n if (!valueNode) {\n // When there is no node, then there is also no value.\n // Importantly, this is different from returning the value null.\n return;\n }\n\n if (valueNode.kind === Kind.VARIABLE) {\n var variableName = valueNode.name.value;\n\n if (variables == null || variables[variableName] === undefined) {\n // No valid return value.\n return;\n }\n\n var variableValue = variables[variableName];\n\n if (variableValue === null && isNonNullType(type)) {\n return; // Invalid: intentionally return no value.\n } // Note: This does no further checking that this variable is correct.\n // This assumes that this query has been validated and the variable\n // usage here is of the correct type.\n\n\n return variableValue;\n }\n\n if (isNonNullType(type)) {\n if (valueNode.kind === Kind.NULL) {\n return; // Invalid: intentionally return no value.\n }\n\n return valueFromAST(valueNode, type.ofType, variables);\n }\n\n if (valueNode.kind === Kind.NULL) {\n // This is explicitly returning the value null.\n return null;\n }\n\n if (isListType(type)) {\n var itemType = type.ofType;\n\n if (valueNode.kind === Kind.LIST) {\n var coercedValues = [];\n\n for (var _i2 = 0, _valueNode$values2 = valueNode.values; _i2 < _valueNode$values2.length; _i2++) {\n var itemNode = _valueNode$values2[_i2];\n\n if (isMissingVariable(itemNode, variables)) {\n // If an array contains a missing variable, it is either coerced to\n // null or if the item type is non-null, it considered invalid.\n if (isNonNullType(itemType)) {\n return; // Invalid: intentionally return no value.\n }\n\n coercedValues.push(null);\n } else {\n var itemValue = valueFromAST(itemNode, itemType, variables);\n\n if (itemValue === undefined) {\n return; // Invalid: intentionally return no value.\n }\n\n coercedValues.push(itemValue);\n }\n }\n\n return coercedValues;\n }\n\n var coercedValue = valueFromAST(valueNode, itemType, variables);\n\n if (coercedValue === undefined) {\n return; // Invalid: intentionally return no value.\n }\n\n return [coercedValue];\n }\n\n if (isInputObjectType(type)) {\n if (valueNode.kind !== Kind.OBJECT) {\n return; // Invalid: intentionally return no value.\n }\n\n var coercedObj = Object.create(null);\n var fieldNodes = keyMap(valueNode.fields, function (field) {\n return field.name.value;\n });\n\n for (var _i4 = 0, _objectValues2 = objectValues(type.getFields()); _i4 < _objectValues2.length; _i4++) {\n var field = _objectValues2[_i4];\n var fieldNode = fieldNodes[field.name];\n\n if (!fieldNode || isMissingVariable(fieldNode.value, variables)) {\n if (field.defaultValue !== undefined) {\n coercedObj[field.name] = field.defaultValue;\n } else if (isNonNullType(field.type)) {\n return; // Invalid: intentionally return no value.\n }\n\n continue;\n }\n\n var fieldValue = valueFromAST(fieldNode.value, field.type, variables);\n\n if (fieldValue === undefined) {\n return; // Invalid: intentionally return no value.\n }\n\n coercedObj[field.name] = fieldValue;\n }\n\n return coercedObj;\n } // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2618')\n\n\n if (isLeafType(type)) {\n // Scalars and Enums fulfill parsing a literal value via parseLiteral().\n // Invalid values represent a failure to parse correctly, in which case\n // no value is returned.\n var result;\n\n try {\n result = type.parseLiteral(valueNode, variables);\n } catch (_error) {\n return; // Invalid: intentionally return no value.\n }\n\n if (result === undefined) {\n return; // Invalid: intentionally return no value.\n }\n\n return result;\n } // istanbul ignore next (Not reachable. All possible input types have been considered)\n\n\n false || invariant(0, 'Unexpected input type: ' + inspect(type));\n} // Returns true if the provided valueNode is a variable which is not defined\n// in the set of variables.\n\nfunction isMissingVariable(valueNode, variables) {\n return valueNode.kind === Kind.VARIABLE && (variables == null || variables[valueNode.name.value] === undefined);\n}\n","import find from \"../polyfills/find.mjs\";\nimport keyMap from \"../jsutils/keyMap.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport printPathArray from \"../jsutils/printPathArray.mjs\";\nimport { GraphQLError } from \"../error/GraphQLError.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { print } from \"../language/printer.mjs\";\nimport { isInputType, isNonNullType } from \"../type/definition.mjs\";\nimport { typeFromAST } from \"../utilities/typeFromAST.mjs\";\nimport { valueFromAST } from \"../utilities/valueFromAST.mjs\";\nimport { coerceInputValue } from \"../utilities/coerceInputValue.mjs\";\n\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n *\n * @internal\n */\nexport function getVariableValues(schema, varDefNodes, inputs, options) {\n var errors = [];\n var maxErrors = options === null || options === void 0 ? void 0 : options.maxErrors;\n\n try {\n var coerced = coerceVariableValues(schema, varDefNodes, inputs, function (error) {\n if (maxErrors != null && errors.length >= maxErrors) {\n throw new GraphQLError('Too many errors processing variables, error limit reached. Execution aborted.');\n }\n\n errors.push(error);\n });\n\n if (errors.length === 0) {\n return {\n coerced: coerced\n };\n }\n } catch (error) {\n errors.push(error);\n }\n\n return {\n errors: errors\n };\n}\n\nfunction coerceVariableValues(schema, varDefNodes, inputs, onError) {\n var coercedValues = {};\n\n var _loop = function _loop(_i2) {\n var varDefNode = varDefNodes[_i2];\n var varName = varDefNode.variable.name.value;\n var varType = typeFromAST(schema, varDefNode.type);\n\n if (!isInputType(varType)) {\n // Must use input types for variables. This should be caught during\n // validation, however is checked again here for safety.\n var varTypeStr = print(varDefNode.type);\n onError(new GraphQLError(\"Variable \\\"$\".concat(varName, \"\\\" expected value of type \\\"\").concat(varTypeStr, \"\\\" which cannot be used as an input type.\"), varDefNode.type));\n return \"continue\";\n }\n\n if (!hasOwnProperty(inputs, varName)) {\n if (varDefNode.defaultValue) {\n coercedValues[varName] = valueFromAST(varDefNode.defaultValue, varType);\n } else if (isNonNullType(varType)) {\n var _varTypeStr = inspect(varType);\n\n onError(new GraphQLError(\"Variable \\\"$\".concat(varName, \"\\\" of required type \\\"\").concat(_varTypeStr, \"\\\" was not provided.\"), varDefNode));\n }\n\n return \"continue\";\n }\n\n var value = inputs[varName];\n\n if (value === null && isNonNullType(varType)) {\n var _varTypeStr2 = inspect(varType);\n\n onError(new GraphQLError(\"Variable \\\"$\".concat(varName, \"\\\" of non-null type \\\"\").concat(_varTypeStr2, \"\\\" must not be null.\"), varDefNode));\n return \"continue\";\n }\n\n coercedValues[varName] = coerceInputValue(value, varType, function (path, invalidValue, error) {\n var prefix = \"Variable \\\"$\".concat(varName, \"\\\" got invalid value \") + inspect(invalidValue);\n\n if (path.length > 0) {\n prefix += \" at \\\"\".concat(varName).concat(printPathArray(path), \"\\\"\");\n }\n\n onError(new GraphQLError(prefix + '; ' + error.message, varDefNode, undefined, undefined, undefined, error.originalError));\n });\n };\n\n for (var _i2 = 0; _i2 < varDefNodes.length; _i2++) {\n var _ret = _loop(_i2);\n\n if (_ret === \"continue\") continue;\n }\n\n return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n *\n * @internal\n */\n\n\nexport function getArgumentValues(def, node, variableValues) {\n var _node$arguments;\n\n var coercedValues = {}; // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n\n var argumentNodes = (_node$arguments = node.arguments) !== null && _node$arguments !== void 0 ? _node$arguments : [];\n var argNodeMap = keyMap(argumentNodes, function (arg) {\n return arg.name.value;\n });\n\n for (var _i4 = 0, _def$args2 = def.args; _i4 < _def$args2.length; _i4++) {\n var argDef = _def$args2[_i4];\n var name = argDef.name;\n var argType = argDef.type;\n var argumentNode = argNodeMap[name];\n\n if (!argumentNode) {\n if (argDef.defaultValue !== undefined) {\n coercedValues[name] = argDef.defaultValue;\n } else if (isNonNullType(argType)) {\n throw new GraphQLError(\"Argument \\\"\".concat(name, \"\\\" of required type \\\"\").concat(inspect(argType), \"\\\" \") + 'was not provided.', node);\n }\n\n continue;\n }\n\n var valueNode = argumentNode.value;\n var isNull = valueNode.kind === Kind.NULL;\n\n if (valueNode.kind === Kind.VARIABLE) {\n var variableName = valueNode.name.value;\n\n if (variableValues == null || !hasOwnProperty(variableValues, variableName)) {\n if (argDef.defaultValue !== undefined) {\n coercedValues[name] = argDef.defaultValue;\n } else if (isNonNullType(argType)) {\n throw new GraphQLError(\"Argument \\\"\".concat(name, \"\\\" of required type \\\"\").concat(inspect(argType), \"\\\" \") + \"was provided the variable \\\"$\".concat(variableName, \"\\\" which was not provided a runtime value.\"), valueNode);\n }\n\n continue;\n }\n\n isNull = variableValues[variableName] == null;\n }\n\n if (isNull && isNonNullType(argType)) {\n throw new GraphQLError(\"Argument \\\"\".concat(name, \"\\\" of non-null type \\\"\").concat(inspect(argType), \"\\\" \") + 'must not be null.', valueNode);\n }\n\n var coercedValue = valueFromAST(valueNode, argType, variableValues);\n\n if (coercedValue === undefined) {\n // Note: ValuesOfCorrectTypeRule validation should catch this before\n // execution. This is a runtime check to ensure execution does not\n // continue with an invalid argument value.\n throw new GraphQLError(\"Argument \\\"\".concat(name, \"\\\" has invalid value \").concat(print(valueNode), \".\"), valueNode);\n }\n\n coercedValues[name] = coercedValue;\n }\n\n return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getDirectiveValues(directiveDef, node, variableValues) {\n var directiveNode = node.directives && find(node.directives, function (directive) {\n return directive.name.value === directiveDef.name;\n });\n\n if (directiveNode) {\n return getArgumentValues(directiveDef, directiveNode, variableValues);\n }\n}\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport objectValues from \"../polyfills/objectValues.mjs\";\nimport keyMap from \"../jsutils/keyMap.mjs\";\nimport inspect from \"../jsutils/inspect.mjs\";\nimport mapValue from \"../jsutils/mapValue.mjs\";\nimport invariant from \"../jsutils/invariant.mjs\";\nimport devAssert from \"../jsutils/devAssert.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { TokenKind } from \"../language/tokenKind.mjs\";\nimport { dedentBlockStringValue } from \"../language/blockString.mjs\";\nimport { isTypeDefinitionNode, isTypeExtensionNode } from \"../language/predicates.mjs\";\nimport { assertValidSDLExtension } from \"../validation/validate.mjs\";\nimport { getDirectiveValues } from \"../execution/values.mjs\";\nimport { assertSchema, GraphQLSchema } from \"../type/schema.mjs\";\nimport { specifiedScalarTypes, isSpecifiedScalarType } from \"../type/scalars.mjs\";\nimport { introspectionTypes, isIntrospectionType } from \"../type/introspection.mjs\";\nimport { GraphQLDirective, GraphQLDeprecatedDirective, GraphQLSpecifiedByDirective } from \"../type/directives.mjs\";\nimport { isScalarType, isObjectType, isInterfaceType, isUnionType, isListType, isNonNullType, isEnumType, isInputObjectType, GraphQLList, GraphQLNonNull, GraphQLScalarType, GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType, GraphQLEnumType, GraphQLInputObjectType } from \"../type/definition.mjs\";\nimport { valueFromAST } from \"./valueFromAST.mjs\";\n\n/**\n * Produces a new schema given an existing schema and a document which may\n * contain GraphQL type extensions and definitions. The original schema will\n * remain unaltered.\n *\n * Because a schema represents a graph of references, a schema cannot be\n * extended without effectively making an entire copy. We do not know until it's\n * too late if subgraphs remain unchanged.\n *\n * This algorithm copies the provided schema, applying extensions while\n * producing the copy. The original schema remains unaltered.\n *\n * Accepts options as a third argument:\n *\n * - commentDescriptions:\n * Provide true to use preceding comments as the description.\n *\n */\nexport function extendSchema(schema, documentAST, options) {\n assertSchema(schema);\n documentAST != null && documentAST.kind === Kind.DOCUMENT || devAssert(0, 'Must provide valid Document AST.');\n\n if ((options === null || options === void 0 ? void 0 : options.assumeValid) !== true && (options === null || options === void 0 ? void 0 : options.assumeValidSDL) !== true) {\n assertValidSDLExtension(documentAST, schema);\n }\n\n var schemaConfig = schema.toConfig();\n var extendedConfig = extendSchemaImpl(schemaConfig, documentAST, options);\n return schemaConfig === extendedConfig ? schema : new GraphQLSchema(extendedConfig);\n}\n/**\n * @internal\n */\n\nexport function extendSchemaImpl(schemaConfig, documentAST, options) {\n var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid;\n\n // Collect the type definitions and extensions found in the document.\n var typeDefs = [];\n var typeExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can\n // have the same name. For example, a type named \"skip\".\n\n var directiveDefs = [];\n var schemaDef; // Schema extensions are collected which may add additional operation types.\n\n var schemaExtensions = [];\n\n for (var _i2 = 0, _documentAST$definiti2 = documentAST.definitions; _i2 < _documentAST$definiti2.length; _i2++) {\n var def = _documentAST$definiti2[_i2];\n\n if (def.kind === Kind.SCHEMA_DEFINITION) {\n schemaDef = def;\n } else if (def.kind === Kind.SCHEMA_EXTENSION) {\n schemaExtensions.push(def);\n } else if (isTypeDefinitionNode(def)) {\n typeDefs.push(def);\n } else if (isTypeExtensionNode(def)) {\n var extendedTypeName = def.name.value;\n var existingTypeExtensions = typeExtensionsMap[extendedTypeName];\n typeExtensionsMap[extendedTypeName] = existingTypeExtensions ? existingTypeExtensions.concat([def]) : [def];\n } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n directiveDefs.push(def);\n }\n } // If this document contains no new types, extensions, or directives then\n // return the same unmodified GraphQLSchema instance.\n\n\n if (Object.keys(typeExtensionsMap).length === 0 && typeDefs.length === 0 && directiveDefs.length === 0 && schemaExtensions.length === 0 && schemaDef == null) {\n return schemaConfig;\n }\n\n var typeMap = Object.create(null);\n\n for (var _i4 = 0, _schemaConfig$types2 = schemaConfig.types; _i4 < _schemaConfig$types2.length; _i4++) {\n var existingType = _schemaConfig$types2[_i4];\n typeMap[existingType.name] = extendNamedType(existingType);\n }\n\n for (var _i6 = 0; _i6 < typeDefs.length; _i6++) {\n var _stdTypeMap$name;\n\n var typeNode = typeDefs[_i6];\n var name = typeNode.name.value;\n typeMap[name] = (_stdTypeMap$name = stdTypeMap[name]) !== null && _stdTypeMap$name !== void 0 ? _stdTypeMap$name : buildType(typeNode);\n }\n\n var operationTypes = _objectSpread(_objectSpread({\n // Get the extended root operation types.\n query: schemaConfig.query && replaceNamedType(schemaConfig.query),\n mutation: schemaConfig.mutation && replaceNamedType(schemaConfig.mutation),\n subscription: schemaConfig.subscription && replaceNamedType(schemaConfig.subscription)\n }, schemaDef && getOperationTypes([schemaDef])), getOperationTypes(schemaExtensions)); // Then produce and return a Schema config with these types.\n\n\n return _objectSpread(_objectSpread({\n description: (_schemaDef = schemaDef) === null || _schemaDef === void 0 ? void 0 : (_schemaDef$descriptio = _schemaDef.description) === null || _schemaDef$descriptio === void 0 ? void 0 : _schemaDef$descriptio.value\n }, operationTypes), {}, {\n types: objectValues(typeMap),\n directives: [].concat(schemaConfig.directives.map(replaceDirective), directiveDefs.map(buildDirective)),\n extensions: undefined,\n astNode: (_schemaDef2 = schemaDef) !== null && _schemaDef2 !== void 0 ? _schemaDef2 : schemaConfig.astNode,\n extensionASTNodes: schemaConfig.extensionASTNodes.concat(schemaExtensions),\n assumeValid: (_options$assumeValid = options === null || options === void 0 ? void 0 : options.assumeValid) !== null && _options$assumeValid !== void 0 ? _options$assumeValid : false\n }); // Below are functions used for producing this schema that have closed over\n // this scope and have access to the schema, cache, and newly defined types.\n\n function replaceType(type) {\n if (isListType(type)) {\n // $FlowFixMe[incompatible-return]\n return new GraphQLList(replaceType(type.ofType));\n }\n\n if (isNonNullType(type)) {\n // $FlowFixMe[incompatible-return]\n return new GraphQLNonNull(replaceType(type.ofType));\n }\n\n return replaceNamedType(type);\n }\n\n function replaceNamedType(type) {\n // Note: While this could make early assertions to get the correctly\n // typed values, that would throw immediately while type system\n // validation with validateSchema() will produce more actionable results.\n return typeMap[type.name];\n }\n\n function replaceDirective(directive) {\n var config = directive.toConfig();\n return new GraphQLDirective(_objectSpread(_objectSpread({}, config), {}, {\n args: mapValue(config.args, extendArg)\n }));\n }\n\n function extendNamedType(type) {\n if (isIntrospectionType(type) || isSpecifiedScalarType(type)) {\n // Builtin types are not extended.\n return type;\n }\n\n if (isScalarType(type)) {\n return extendScalarType(type);\n }\n\n if (isObjectType(type)) {\n return extendObjectType(type);\n }\n\n if (isInterfaceType(type)) {\n return extendInterfaceType(type);\n }\n\n if (isUnionType(type)) {\n return extendUnionType(type);\n }\n\n if (isEnumType(type)) {\n return extendEnumType(type);\n } // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2618')\n\n\n if (isInputObjectType(type)) {\n return extendInputObjectType(type);\n } // istanbul ignore next (Not reachable. All possible types have been considered)\n\n\n false || invariant(0, 'Unexpected type: ' + inspect(type));\n }\n\n function extendInputObjectType(type) {\n var _typeExtensionsMap$co;\n\n var config = type.toConfig();\n var extensions = (_typeExtensionsMap$co = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co !== void 0 ? _typeExtensionsMap$co : [];\n return new GraphQLInputObjectType(_objectSpread(_objectSpread({}, config), {}, {\n fields: function fields() {\n return _objectSpread(_objectSpread({}, mapValue(config.fields, function (field) {\n return _objectSpread(_objectSpread({}, field), {}, {\n type: replaceType(field.type)\n });\n })), buildInputFieldMap(extensions));\n },\n extensionASTNodes: config.extensionASTNodes.concat(extensions)\n }));\n }\n\n function extendEnumType(type) {\n var _typeExtensionsMap$ty;\n\n var config = type.toConfig();\n var extensions = (_typeExtensionsMap$ty = typeExtensionsMap[type.name]) !== null && _typeExtensionsMap$ty !== void 0 ? _typeExtensionsMap$ty : [];\n return new GraphQLEnumType(_objectSpread(_objectSpread({}, config), {}, {\n values: _objectSpread(_objectSpread({}, config.values), buildEnumValueMap(extensions)),\n extensionASTNodes: config.extensionASTNodes.concat(extensions)\n }));\n }\n\n function extendScalarType(type) {\n var _typeExtensionsMap$co2;\n\n var config = type.toConfig();\n var extensions = (_typeExtensionsMap$co2 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co2 !== void 0 ? _typeExtensionsMap$co2 : [];\n var specifiedByUrl = config.specifiedByUrl;\n\n for (var _i8 = 0; _i8 < extensions.length; _i8++) {\n var _getSpecifiedByUrl;\n\n var extensionNode = extensions[_i8];\n specifiedByUrl = (_getSpecifiedByUrl = getSpecifiedByUrl(extensionNode)) !== null && _getSpecifiedByUrl !== void 0 ? _getSpecifiedByUrl : specifiedByUrl;\n }\n\n return new GraphQLScalarType(_objectSpread(_objectSpread({}, config), {}, {\n specifiedByUrl: specifiedByUrl,\n extensionASTNodes: config.extensionASTNodes.concat(extensions)\n }));\n }\n\n function extendObjectType(type) {\n var _typeExtensionsMap$co3;\n\n var config = type.toConfig();\n var extensions = (_typeExtensionsMap$co3 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co3 !== void 0 ? _typeExtensionsMap$co3 : [];\n return new GraphQLObjectType(_objectSpread(_objectSpread({}, config), {}, {\n interfaces: function interfaces() {\n return [].concat(type.getInterfaces().map(replaceNamedType), buildInterfaces(extensions));\n },\n fields: function fields() {\n return _objectSpread(_objectSpread({}, mapValue(config.fields, extendField)), buildFieldMap(extensions));\n },\n extensionASTNodes: config.extensionASTNodes.concat(extensions)\n }));\n }\n\n function extendInterfaceType(type) {\n var _typeExtensionsMap$co4;\n\n var config = type.toConfig();\n var extensions = (_typeExtensionsMap$co4 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co4 !== void 0 ? _typeExtensionsMap$co4 : [];\n return new GraphQLInterfaceType(_objectSpread(_objectSpread({}, config), {}, {\n interfaces: function interfaces() {\n return [].concat(type.getInterfaces().map(replaceNamedType), buildInterfaces(extensions));\n },\n fields: function fields() {\n return _objectSpread(_objectSpread({}, mapValue(config.fields, extendField)), buildFieldMap(extensions));\n },\n extensionASTNodes: config.extensionASTNodes.concat(extensions)\n }));\n }\n\n function extendUnionType(type) {\n var _typeExtensionsMap$co5;\n\n var config = type.toConfig();\n var extensions = (_typeExtensionsMap$co5 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co5 !== void 0 ? _typeExtensionsMap$co5 : [];\n return new GraphQLUnionType(_objectSpread(_objectSpread({}, config), {}, {\n types: function types() {\n return [].concat(type.getTypes().map(replaceNamedType), buildUnionTypes(extensions));\n },\n extensionASTNodes: config.extensionASTNodes.concat(extensions)\n }));\n }\n\n function extendField(field) {\n return _objectSpread(_objectSpread({}, field), {}, {\n type: replaceType(field.type),\n // $FlowFixMe[incompatible-call]\n args: mapValue(field.args, extendArg)\n });\n }\n\n function extendArg(arg) {\n return _objectSpread(_objectSpread({}, arg), {}, {\n type: replaceType(arg.type)\n });\n }\n\n function getOperationTypes(nodes) {\n var opTypes = {};\n\n for (var _i10 = 0; _i10 < nodes.length; _i10++) {\n var _node$operationTypes;\n\n var node = nodes[_i10];\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var operationTypesNodes = (_node$operationTypes = node.operationTypes) !== null && _node$operationTypes !== void 0 ? _node$operationTypes : [];\n\n for (var _i12 = 0; _i12 < operationTypesNodes.length; _i12++) {\n var operationType = operationTypesNodes[_i12];\n opTypes[operationType.operation] = getNamedType(operationType.type);\n }\n } // Note: While this could make early assertions to get the correctly\n // typed values below, that would throw immediately while type system\n // validation with validateSchema() will produce more actionable results.\n\n\n return opTypes;\n }\n\n function getNamedType(node) {\n var _stdTypeMap$name2;\n\n var name = node.name.value;\n var type = (_stdTypeMap$name2 = stdTypeMap[name]) !== null && _stdTypeMap$name2 !== void 0 ? _stdTypeMap$name2 : typeMap[name];\n\n if (type === undefined) {\n throw new Error(\"Unknown type: \\\"\".concat(name, \"\\\".\"));\n }\n\n return type;\n }\n\n function getWrappedType(node) {\n if (node.kind === Kind.LIST_TYPE) {\n return new GraphQLList(getWrappedType(node.type));\n }\n\n if (node.kind === Kind.NON_NULL_TYPE) {\n return new GraphQLNonNull(getWrappedType(node.type));\n }\n\n return getNamedType(node);\n }\n\n function buildDirective(node) {\n var locations = node.locations.map(function (_ref) {\n var value = _ref.value;\n return value;\n });\n return new GraphQLDirective({\n name: node.name.value,\n description: getDescription(node, options),\n locations: locations,\n isRepeatable: node.repeatable,\n args: buildArgumentMap(node.arguments),\n astNode: node\n });\n }\n\n function buildFieldMap(nodes) {\n var fieldConfigMap = Object.create(null);\n\n for (var _i14 = 0; _i14 < nodes.length; _i14++) {\n var _node$fields;\n\n var node = nodes[_i14];\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var nodeFields = (_node$fields = node.fields) !== null && _node$fields !== void 0 ? _node$fields : [];\n\n for (var _i16 = 0; _i16 < nodeFields.length; _i16++) {\n var field = nodeFields[_i16];\n fieldConfigMap[field.name.value] = {\n // Note: While this could make assertions to get the correctly typed\n // value, that would throw immediately while type system validation\n // with validateSchema() will produce more actionable results.\n type: getWrappedType(field.type),\n description: getDescription(field, options),\n args: buildArgumentMap(field.arguments),\n deprecationReason: getDeprecationReason(field),\n astNode: field\n };\n }\n }\n\n return fieldConfigMap;\n }\n\n function buildArgumentMap(args) {\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var argsNodes = args !== null && args !== void 0 ? args : [];\n var argConfigMap = Object.create(null);\n\n for (var _i18 = 0; _i18 < argsNodes.length; _i18++) {\n var arg = argsNodes[_i18];\n // Note: While this could make assertions to get the correctly typed\n // value, that would throw immediately while type system validation\n // with validateSchema() will produce more actionable results.\n var type = getWrappedType(arg.type);\n argConfigMap[arg.name.value] = {\n type: type,\n description: getDescription(arg, options),\n defaultValue: valueFromAST(arg.defaultValue, type),\n deprecationReason: getDeprecationReason(arg),\n astNode: arg\n };\n }\n\n return argConfigMap;\n }\n\n function buildInputFieldMap(nodes) {\n var inputFieldMap = Object.create(null);\n\n for (var _i20 = 0; _i20 < nodes.length; _i20++) {\n var _node$fields2;\n\n var node = nodes[_i20];\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var fieldsNodes = (_node$fields2 = node.fields) !== null && _node$fields2 !== void 0 ? _node$fields2 : [];\n\n for (var _i22 = 0; _i22 < fieldsNodes.length; _i22++) {\n var field = fieldsNodes[_i22];\n // Note: While this could make assertions to get the correctly typed\n // value, that would throw immediately while type system validation\n // with validateSchema() will produce more actionable results.\n var type = getWrappedType(field.type);\n inputFieldMap[field.name.value] = {\n type: type,\n description: getDescription(field, options),\n defaultValue: valueFromAST(field.defaultValue, type),\n deprecationReason: getDeprecationReason(field),\n astNode: field\n };\n }\n }\n\n return inputFieldMap;\n }\n\n function buildEnumValueMap(nodes) {\n var enumValueMap = Object.create(null);\n\n for (var _i24 = 0; _i24 < nodes.length; _i24++) {\n var _node$values;\n\n var node = nodes[_i24];\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var valuesNodes = (_node$values = node.values) !== null && _node$values !== void 0 ? _node$values : [];\n\n for (var _i26 = 0; _i26 < valuesNodes.length; _i26++) {\n var value = valuesNodes[_i26];\n enumValueMap[value.name.value] = {\n description: getDescription(value, options),\n deprecationReason: getDeprecationReason(value),\n astNode: value\n };\n }\n }\n\n return enumValueMap;\n }\n\n function buildInterfaces(nodes) {\n var interfaces = [];\n\n for (var _i28 = 0; _i28 < nodes.length; _i28++) {\n var _node$interfaces;\n\n var node = nodes[_i28];\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var interfacesNodes = (_node$interfaces = node.interfaces) !== null && _node$interfaces !== void 0 ? _node$interfaces : [];\n\n for (var _i30 = 0; _i30 < interfacesNodes.length; _i30++) {\n var type = interfacesNodes[_i30];\n // Note: While this could make assertions to get the correctly typed\n // values below, that would throw immediately while type system\n // validation with validateSchema() will produce more actionable\n // results.\n interfaces.push(getNamedType(type));\n }\n }\n\n return interfaces;\n }\n\n function buildUnionTypes(nodes) {\n var types = [];\n\n for (var _i32 = 0; _i32 < nodes.length; _i32++) {\n var _node$types;\n\n var node = nodes[_i32];\n // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')\n var typeNodes = (_node$types = node.types) !== null && _node$types !== void 0 ? _node$types : [];\n\n for (var _i34 = 0; _i34 < typeNodes.length; _i34++) {\n var type = typeNodes[_i34];\n // Note: While this could make assertions to get the correctly typed\n // values below, that would throw immediately while type system\n // validation with validateSchema() will produce more actionable\n // results.\n types.push(getNamedType(type));\n }\n }\n\n return types;\n }\n\n function buildType(astNode) {\n var _typeExtensionsMap$na;\n\n var name = astNode.name.value;\n var description = getDescription(astNode, options);\n var extensionNodes = (_typeExtensionsMap$na = typeExtensionsMap[name]) !== null && _typeExtensionsMap$na !== void 0 ? _typeExtensionsMap$na : [];\n\n switch (astNode.kind) {\n case Kind.OBJECT_TYPE_DEFINITION:\n {\n var extensionASTNodes = extensionNodes;\n var allNodes = [astNode].concat(extensionASTNodes);\n return new GraphQLObjectType({\n name: name,\n description: description,\n interfaces: function interfaces() {\n return buildInterfaces(allNodes);\n },\n fields: function fields() {\n return buildFieldMap(allNodes);\n },\n astNode: astNode,\n extensionASTNodes: extensionASTNodes\n });\n }\n\n case Kind.INTERFACE_TYPE_DEFINITION:\n {\n var _extensionASTNodes = extensionNodes;\n\n var _allNodes = [astNode].concat(_extensionASTNodes);\n\n return new GraphQLInterfaceType({\n name: name,\n description: description,\n interfaces: function interfaces() {\n return buildInterfaces(_allNodes);\n },\n fields: function fields() {\n return buildFieldMap(_allNodes);\n },\n astNode: astNode,\n extensionASTNodes: _extensionASTNodes\n });\n }\n\n case Kind.ENUM_TYPE_DEFINITION:\n {\n var _extensionASTNodes2 = extensionNodes;\n\n var _allNodes2 = [astNode].concat(_extensionASTNodes2);\n\n return new GraphQLEnumType({\n name: name,\n description: description,\n values: buildEnumValueMap(_allNodes2),\n astNode: astNode,\n extensionASTNodes: _extensionASTNodes2\n });\n }\n\n case Kind.UNION_TYPE_DEFINITION:\n {\n var _extensionASTNodes3 = extensionNodes;\n\n var _allNodes3 = [astNode].concat(_extensionASTNodes3);\n\n return new GraphQLUnionType({\n name: name,\n description: description,\n types: function types() {\n return buildUnionTypes(_allNodes3);\n },\n astNode: astNode,\n extensionASTNodes: _extensionASTNodes3\n });\n }\n\n case Kind.SCALAR_TYPE_DEFINITION:\n {\n var _extensionASTNodes4 = extensionNodes;\n return new GraphQLScalarType({\n name: name,\n description: description,\n specifiedByUrl: getSpecifiedByUrl(astNode),\n astNode: astNode,\n extensionASTNodes: _extensionASTNodes4\n });\n }\n\n case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n {\n var _extensionASTNodes5 = extensionNodes;\n\n var _allNodes4 = [astNode].concat(_extensionASTNodes5);\n\n return new GraphQLInputObjectType({\n name: name,\n description: description,\n fields: function fields() {\n return buildInputFieldMap(_allNodes4);\n },\n astNode: astNode,\n extensionASTNodes: _extensionASTNodes5\n });\n }\n } // istanbul ignore next (Not reachable. All possible type definition nodes have been considered)\n\n\n false || invariant(0, 'Unexpected type definition node: ' + inspect(astNode));\n }\n}\nvar stdTypeMap = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {\n return type.name;\n});\n/**\n * Given a field or enum value node, returns the string value for the\n * deprecation reason.\n */\n\nfunction getDeprecationReason(node) {\n var deprecated = getDirectiveValues(GraphQLDeprecatedDirective, node);\n return deprecated === null || deprecated === void 0 ? void 0 : deprecated.reason;\n}\n/**\n * Given a scalar node, returns the string value for the specifiedByUrl.\n */\n\n\nfunction getSpecifiedByUrl(node) {\n var specifiedBy = getDirectiveValues(GraphQLSpecifiedByDirective, node);\n return specifiedBy === null || specifiedBy === void 0 ? void 0 : specifiedBy.url;\n}\n/**\n * Given an ast node, returns its string description.\n * @deprecated: provided to ease adoption and will be removed in v16.\n *\n * Accepts options as a second argument:\n *\n * - commentDescriptions:\n * Provide true to use preceding comments as the description.\n *\n */\n\n\nexport function getDescription(node, options) {\n if (node.description) {\n return node.description.value;\n }\n\n if ((options === null || options === void 0 ? void 0 : options.commentDescriptions) === true) {\n var rawValue = getLeadingCommentBlock(node);\n\n if (rawValue !== undefined) {\n return dedentBlockStringValue('\\n' + rawValue);\n }\n }\n}\n\nfunction getLeadingCommentBlock(node) {\n var loc = node.loc;\n\n if (!loc) {\n return;\n }\n\n var comments = [];\n var token = loc.startToken.prev;\n\n while (token != null && token.kind === TokenKind.COMMENT && token.next && token.prev && token.line + 1 === token.next.line && token.line !== token.prev.line) {\n var value = String(token.value);\n comments.push(value);\n token = token.prev;\n }\n\n return comments.length > 0 ? comments.reverse().join('\\n') : undefined;\n}\n","import devAssert from \"../jsutils/devAssert.mjs\";\nimport { Kind } from \"../language/kinds.mjs\";\nimport { parse } from \"../language/parser.mjs\";\nimport { assertValidSDL } from \"../validation/validate.mjs\";\nimport { GraphQLSchema } from \"../type/schema.mjs\";\nimport { specifiedDirectives } from \"../type/directives.mjs\";\nimport { extendSchemaImpl } from \"./extendSchema.mjs\";\n\n/**\n * This takes the ast of a schema document produced by the parse function in\n * src/language/parser.js.\n *\n * If no schema definition is provided, then it will look for types named Query\n * and Mutation.\n *\n * Given that AST it constructs a GraphQLSchema. The resulting schema\n * has no resolve methods, so execution will use default resolvers.\n *\n * Accepts options as a second argument:\n *\n * - commentDescriptions:\n * Provide true to use preceding comments as the description.\n *\n */\nexport function buildASTSchema(documentAST, options) {\n documentAST != null && documentAST.kind === Kind.DOCUMENT || devAssert(0, 'Must provide valid Document AST.');\n\n if ((options === null || options === void 0 ? void 0 : options.assumeValid) !== true && (options === null || options === void 0 ? void 0 : options.assumeValidSDL) !== true) {\n assertValidSDL(documentAST);\n }\n\n var emptySchemaConfig = {\n description: undefined,\n types: [],\n directives: [],\n extensions: undefined,\n extensionASTNodes: [],\n assumeValid: false\n };\n var config = extendSchemaImpl(emptySchemaConfig, documentAST, options);\n\n if (config.astNode == null) {\n for (var _i2 = 0, _config$types2 = config.types; _i2 < _config$types2.length; _i2++) {\n var type = _config$types2[_i2];\n\n switch (type.name) {\n // Note: While this could make early assertions to get the correctly\n // typed values below, that would throw immediately while type system\n // validation with validateSchema() will produce more actionable results.\n case 'Query':\n config.query = type;\n break;\n\n case 'Mutation':\n config.mutation = type;\n break;\n\n case 'Subscription':\n config.subscription = type;\n break;\n }\n }\n }\n\n var directives = config.directives; // If specified directives were not explicitly declared, add them.\n\n var _loop = function _loop(_i4) {\n var stdDirective = specifiedDirectives[_i4];\n\n if (directives.every(function (directive) {\n return directive.name !== stdDirective.name;\n })) {\n directives.push(stdDirective);\n }\n };\n\n for (var _i4 = 0; _i4 < specifiedDirectives.length; _i4++) {\n _loop(_i4);\n }\n\n return new GraphQLSchema(config);\n}\n/**\n * A helper function to build a GraphQLSchema directly from a source\n * document.\n */\n\nexport function buildSchema(source, options) {\n var document = parse(source, {\n noLocation: options === null || options === void 0 ? void 0 : options.noLocation,\n allowLegacySDLEmptyFields: options === null || options === void 0 ? void 0 : options.allowLegacySDLEmptyFields,\n allowLegacySDLImplementsInterfaces: options === null || options === void 0 ? void 0 : options.allowLegacySDLImplementsInterfaces,\n experimentalFragmentVariables: options === null || options === void 0 ? void 0 : options.experimentalFragmentVariables\n });\n return buildASTSchema(document, {\n commentDescriptions: options === null || options === void 0 ? void 0 : options.commentDescriptions,\n assumeValidSDL: options === null || options === void 0 ? void 0 : options.assumeValidSDL,\n assumeValid: options === null || options === void 0 ? void 0 : options.assumeValid\n });\n}\n","import { TypeCacheControlExtension } from '@conduit-client/model/v1';\nimport {\n GraphQLSchema,\n isNonNullType,\n isListType,\n isScalarType,\n isObjectType,\n isInterfaceType,\n isUnionType,\n isEnumType,\n isInputObjectType,\n GraphQLType,\n GraphQLObjectType,\n GraphQLInterfaceType,\n GraphQLInputObjectType,\n GraphQLField,\n GraphQLInputField,\n GraphQLUnionType,\n GraphQLEnumType,\n} from 'graphql';\n\n// Metadata types for different GraphQL type categories\nexport type BaseGraphQLTypeMetadata = {\n typename: string;\n};\n\nexport type IdentifiableGraphQLTypeMetadata = BaseGraphQLTypeMetadata & {\n 'cache-control': TypeCacheControlExtension;\n};\n\nexport type RootGraphQLTypeMetadata = BaseGraphQLTypeMetadata & {\n 'cache-control': TypeCacheControlExtension;\n};\n\nexport type UnidentifiableGraphQLTypeMetadata = BaseGraphQLTypeMetadata;\n\nexport type CursorConnectionGraphQLTypeMetadata = BaseGraphQLTypeMetadata;\n\n// Union type for all possible metadata configurations\nexport type GraphQLTypeMetadata =\n | IdentifiableGraphQLTypeMetadata\n | UnidentifiableGraphQLTypeMetadata\n | CursorConnectionGraphQLTypeMetadata\n | RootGraphQLTypeMetadata;\n\nexport type GraphQLTypeCategory = 'unidentifiable' | 'identifiable' | 'cursor-connection' | 'root';\n\nexport type GraphQLSingleFieldType = {\n kind: 'single';\n name: string;\n typename: string;\n nullable: boolean;\n};\n\nexport type GraphQLListFieldType = {\n kind: 'list';\n nullable: boolean;\n items: GraphQLSingleFieldType | GraphQLListFieldType;\n};\n\nexport type GraphQLFieldType = {\n type: GraphQLSingleFieldType | GraphQLListFieldType;\n args?: Record<string, GraphQLArgumentType>;\n description?: string | null;\n};\n\ntype GraphQLArgumentType = {\n type: GraphQLSingleFieldType | GraphQLListFieldType;\n defaultValue?: any;\n description?: string | null;\n};\nexport type GraphQLBaseTypeModel =\n | {\n name: string;\n category: 'unidentifiable';\n metadata?: UnidentifiableGraphQLTypeMetadata;\n }\n | {\n name: string;\n category: 'cursor-connection';\n metadata?: CursorConnectionGraphQLTypeMetadata;\n }\n | {\n name: string;\n category: 'identifiable';\n metadata: IdentifiableGraphQLTypeMetadata;\n idField: string;\n }\n | {\n name: string;\n category: 'root';\n metadata: RootGraphQLTypeMetadata;\n };\n\nexport type GraphQLObjectTypeModel = {\n kind: 'object';\n fields: Record<string, GraphQLFieldType>;\n interfaces?: string[];\n} & GraphQLBaseTypeModel;\n\nexport type GraphQLUnionTypeModel = {\n kind: 'union';\n fields: Record<string, GraphQLFieldType>;\n possibleTypes: GraphQLTypeModel[];\n} & GraphQLBaseTypeModel;\n\ntype GraphQLEnumValueModel = {\n name: string;\n value: number;\n description?: string | null;\n};\nexport type GraphQLEnumTypeModel = {\n kind: 'enum';\n values: Record<string, GraphQLEnumValueModel>;\n} & GraphQLBaseTypeModel;\n\ntype GraphQLInputObjectTypeModel = {\n kind: 'input';\n fields: Record<string, GraphQLFieldType>;\n} & GraphQLBaseTypeModel;\n\nexport type GraphQLInterfaceTypeModel = {\n kind: 'interface';\n fields: Record<string, GraphQLFieldType>;\n possibleTypes: GraphQLTypeModel[];\n} & GraphQLBaseTypeModel;\n\nexport type GraphQLTypeModel =\n | GraphQLObjectTypeModel\n | GraphQLUnionTypeModel\n | GraphQLEnumTypeModel\n | GraphQLInputObjectTypeModel\n | GraphQLInterfaceTypeModel;\nexport interface GraphQLSchemaModel {\n types: GraphQLTypeModel[];\n queryTypeName: string;\n mutationTypeName?: string;\n}\n\nconst BASE_FIELDS: Record<string, GraphQLFieldType> = {\n __typename: {\n type: {\n kind: 'single',\n name: '__typename',\n typename: 'String',\n nullable: false,\n },\n },\n};\n\n/**\n * Validates that the provided type metadata is valid for the given GraphQL schema.\n * Ensures that:\n * - All identifiable types have cache-control metadata\n * - All referenced typenames exist in the schema\n * - Metadata matches the expected category for each type\n */\nexport function validateGraphQLSchemaModel(\n typeMap: Record<string, GraphQLType>,\n metadataByTypename: Map<string, GraphQLTypeMetadata>,\n rootTypeNames: string[],\n defaults?: Partial<TypeCacheControlExtension>\n): void {\n validateTypeMetadata(typeMap, metadataByTypename, rootTypeNames, defaults);\n checkForUnknownTypes(typeMap, metadataByTypename);\n}\n\n/**\n * Helper function to check if a type requires cache-control metadata\n */\nfunction requiresCacheControl(type: GraphQLType, rootTypeNames: string[]): boolean {\n if (!isObjectType(type)) {\n return false;\n }\n\n const isIdentifiable = !!getOutputIdField(type);\n const isRootType = rootTypeNames.includes(type.name);\n\n return isIdentifiable || isRootType;\n}\n\n/**\n * Helper function to check if cache-control metadata is properly configured\n */\nfunction hasCacheControlMetadata(metadata: GraphQLTypeMetadata | undefined): boolean {\n return metadata !== undefined && 'cache-control' in metadata;\n}\n\n/**\n * Validates individual type definitions in the schema\n */\nfunction validateTypeMetadata(\n typeMap: Record<string, GraphQLType>,\n metadataByTypename: Map<string, GraphQLTypeMetadata>,\n rootTypeNames: string[],\n defaults?: Partial<TypeCacheControlExtension>\n): void {\n for (const [typeName, type] of Object.entries(typeMap)) {\n const metadata = metadataByTypename.get(typeName);\n\n if (requiresCacheControl(type, rootTypeNames)) {\n validateCacheControl(typeName, metadata, defaults);\n continue;\n }\n\n validateNonCacheControlType(typeName, metadata);\n }\n}\n\n/**\n * Validates that types requiring cache-control have it configured\n */\nfunction validateCacheControl(\n typeName: string,\n metadata: GraphQLTypeMetadata | undefined,\n defaults?: Partial<TypeCacheControlExtension>\n): void {\n if (hasCacheControlMetadata(metadata)) {\n return; // Valid: has explicit cache-control metadata\n }\n\n if (defaults) {\n return; // Valid: will use defaults\n }\n\n throw new Error(\n `GraphQL type '${typeName}' requires cache-control metadata but none was provided. ` +\n `Either provide cache-control metadata for this type or set a default cache-control configuration.`\n );\n}\n\n/**\n * Validates that types not requiring cache-control don't have it configured\n */\nfunction validateNonCacheControlType(\n typeName: string,\n metadata: GraphQLTypeMetadata | undefined\n): void {\n if (hasCacheControlMetadata(metadata)) {\n throw new Error(\n `GraphQL type '${typeName}' is not identifiable but metadata includes 'cache-control' property.`\n );\n }\n}\n\n/**\n * Validates that all metadata references exist in the schema\n */\nfunction checkForUnknownTypes(\n typeMap: Record<string, GraphQLType>,\n metadataByTypename: Map<string, GraphQLTypeMetadata>\n): void {\n for (const [typename, metadata] of metadataByTypename) {\n if (!typeMap[typename]) {\n throw new Error(`Metadata references unknown GraphQL type '${metadata.typename}'.`);\n }\n }\n}\n\nfunction buildFieldsFromType(\n type: GraphQLObjectType | GraphQLInterfaceType\n): Record<string, GraphQLFieldType> {\n return {\n ...BASE_FIELDS,\n ...Object.fromEntries(\n Object.entries(type.getFields()).map(([fieldName, field]) => [\n fieldName,\n getFieldInfo(field),\n ])\n ),\n };\n}\n\nexport function isRelayConnectionType(type: GraphQLObjectType): boolean {\n const fields = type.getFields();\n\n // Check for required fields\n if (!fields.edges || !fields.pageInfo) {\n return false;\n }\n\n // Check edges type structure\n const edgesType = fields.edges.type;\n if (!edgesType || !('ofType' in edgesType)) {\n return false;\n }\n\n const edgeType = edgesType.ofType;\n if (!edgeType || !('getFields' in edgeType)) {\n return false;\n }\n\n const edgeFields = edgeType.getFields();\n if (!edgeFields.node || !edgeFields.cursor) {\n return false;\n }\n\n // Check pageInfo type structure\n const pageInfoType = fields.pageInfo.type;\n if (!pageInfoType || !('getFields' in pageInfoType)) {\n return false;\n }\n\n const pageInfoFields = pageInfoType.getFields();\n return Boolean(\n pageInfoFields.hasNextPage &&\n pageInfoFields.hasPreviousPage &&\n pageInfoFields.startCursor &&\n pageInfoFields.endCursor\n );\n}\n\nexport function unwrapFieldType(type: GraphQLType): GraphQLSingleFieldType | GraphQLListFieldType {\n let currentType = type;\n let nullable = true;\n\n if (isNonNullType(currentType)) {\n nullable = false;\n currentType = currentType.ofType;\n }\n\n if (isListType(currentType)) {\n return {\n kind: 'list',\n nullable,\n items: unwrapFieldType(currentType.ofType),\n };\n }\n\n return {\n kind: 'single',\n name: currentType.name,\n typename: currentType.toString(),\n nullable,\n };\n}\n\nexport function getFieldInfo(field: GraphQLField<any, any>): GraphQLFieldType {\n const fieldType = unwrapFieldType(field.type);\n const args: Record<string, GraphQLArgumentType> = {};\n\n // Process field arguments\n if (field.args && field.args.length > 0) {\n for (const arg of field.args) {\n args[arg.name] = {\n type: unwrapFieldType(arg.type),\n defaultValue: arg.defaultValue,\n description: arg.description,\n };\n }\n }\n\n return {\n type: fieldType,\n args: Object.keys(args).length > 0 ? args : undefined,\n description: field.description,\n };\n}\n\nexport function getInputFieldInfo(field: GraphQLInputField): GraphQLFieldType {\n const fieldType = unwrapFieldType(field.type);\n\n return {\n type: fieldType,\n description: field.description,\n };\n}\n\nfunction getPossibleTypes(\n possibleTypes: readonly GraphQLObjectType[],\n types: GraphQLTypeModel[]\n): GraphQLTypeModel[] {\n const possibleTypeModels: GraphQLTypeModel[] = [];\n\n possibleTypes.forEach((t) => {\n const implementation = types.find((concreteType) => concreteType.name === t.name);\n if (implementation) {\n possibleTypeModels.push(implementation);\n } else {\n throw new Error(`Unknown type ${t.name}`);\n }\n });\n\n return possibleTypeModels;\n}\n\nexport function getOutputIdField(\n type: GraphQLObjectType | GraphQLInterfaceType\n): string | undefined {\n const idFields = Object.values(type.getFields())\n .filter((field) => {\n const typeString = field.type.toString();\n return (\n (typeString === 'ID' || typeString === 'ID!') && field.name.toLowerCase() === 'id'\n );\n })\n .map((field) => field.name);\n\n if (idFields.length > 1) {\n throw new Error(`Multiple ID fields found for type ${type.name}`);\n }\n\n return idFields.length > 0 ? idFields[0] : undefined;\n}\n\nexport function getInputIdField(type: GraphQLInputObjectType): string | undefined {\n const idFields = Object.values(type.getFields())\n .filter((field) => {\n const typeString = field.type.toString();\n return (\n (typeString === 'ID' || typeString === 'ID!') && field.name.toLowerCase() === 'id'\n );\n })\n .map((field) => field.name);\n\n if (idFields.length > 1) {\n throw new Error(`Multiple ID fields found for type ${type.name}`);\n }\n\n return idFields.length > 0 ? idFields[0] : undefined;\n}\n\nfunction setCacheControl(\n metadata: GraphQLTypeMetadata | undefined,\n defaults?: Partial<TypeCacheControlExtension>\n): TypeCacheControlExtension | void {\n // Check if metadata has cache-control (type narrowing)\n if (metadata && 'cache-control' in metadata) {\n const explicitCacheControl = metadata['cache-control'];\n\n if (explicitCacheControl.type === 'no-cache') {\n // For no-cache, only use explicit values (no merging with defaults)\n return explicitCacheControl;\n } else {\n // For other types, merge defaults with explicit values\n return {\n ...defaults,\n ...explicitCacheControl,\n } as TypeCacheControlExtension;\n }\n } else if (defaults) {\n // Use defaults if no explicit metadata\n return defaults as TypeCacheControlExtension;\n }\n}\n\nfunction buildGraphQLObjectModel(\n name: string,\n metadata: GraphQLTypeMetadata | undefined,\n type: GraphQLObjectType,\n isRootType: boolean,\n defaults?: Partial<TypeCacheControlExtension>\n): GraphQLObjectTypeModel {\n const fields = buildFieldsFromType(type);\n const interfaces = type.getInterfaces().map((i) => i.name);\n\n if (isRelayConnectionType(type)) {\n const connectionMetadata: CursorConnectionGraphQLTypeMetadata = metadata || {\n typename: name,\n };\n\n return {\n kind: 'object' as const,\n name,\n fields,\n interfaces,\n category: 'cursor-connection',\n metadata: connectionMetadata,\n };\n }\n\n const idField = getOutputIdField(type);\n if (idField || isRootType) {\n // For identifiable types, ensure cache-control is defined\n let cacheControl: TypeCacheControlExtension | void = setCacheControl(metadata, defaults);\n if (idField) {\n if (cacheControl) {\n const identifiableMetadata: IdentifiableGraphQLTypeMetadata = {\n typename: name,\n 'cache-control': cacheControl,\n };\n\n return {\n kind: 'object' as const,\n name,\n fields,\n interfaces,\n category: 'identifiable',\n idField,\n metadata: identifiableMetadata,\n };\n }\n // No cache-control defined and no default - throw error\n throw new Error(\n `Identifiable GraphQL type '${name}' must have cache-control metadata defined. ` +\n `Either provide cache-control metadata for this type or set a default cache-control configuration.`\n );\n } else if (cacheControl) {\n // Otherwise we don't throw, but fall through to the unidentifiable case\n const rootMetadata: RootGraphQLTypeMetadata = {\n typename: name,\n 'cache-control': cacheControl,\n };\n\n return {\n kind: 'object' as const,\n name,\n fields,\n interfaces,\n category: 'root',\n metadata: rootMetadata,\n };\n }\n }\n\n const unidentifiableMetadata: UnidentifiableGraphQLTypeMetadata = metadata || {\n typename: name,\n };\n\n return {\n kind: 'object' as const,\n name,\n fields,\n interfaces,\n category: 'unidentifiable',\n metadata: unidentifiableMetadata,\n };\n}\n\nfunction buildGraphQLInputObjectModel(\n name: string,\n metadata: GraphQLTypeMetadata | undefined,\n type: GraphQLInputObjectType,\n defaults?: Partial<TypeCacheControlExtension>\n): GraphQLInputObjectTypeModel {\n const fields: Record<string, GraphQLFieldType> = {};\n for (const [fieldName, field] of Object.entries(type.getFields())) {\n fields[fieldName] = getInputFieldInfo(field);\n }\n\n const baseInputObjectModel = {\n kind: 'input' as const,\n name,\n metadata,\n fields,\n };\n\n return {\n ...baseInputObjectModel,\n category: 'unidentifiable',\n };\n}\n\nfunction buildGraphQLInterfaceModel(\n name: string,\n metadata: BaseGraphQLTypeMetadata | undefined,\n type: GraphQLInterfaceType,\n types: GraphQLTypeModel[],\n schema: GraphQLSchema\n): GraphQLInterfaceTypeModel {\n const fields = buildFieldsFromType(type);\n const possibleTypes = getPossibleTypes(schema.getImplementations(type).objects, types);\n return {\n kind: 'interface' as const,\n category: 'unidentifiable',\n name,\n metadata,\n fields,\n possibleTypes,\n };\n}\n\nfunction buildGraphQLUnionModel(\n name: string,\n metadata: GraphQLTypeMetadata | undefined,\n type: GraphQLUnionType,\n types: GraphQLTypeModel[]\n): GraphQLUnionTypeModel {\n const possibleTypes = getPossibleTypes(type.getTypes(), types);\n // Union Types have __typename field, but no other fields\n const fields = {\n ...BASE_FIELDS,\n };\n\n return {\n kind: 'union' as const,\n fields,\n name,\n metadata,\n possibleTypes,\n category: 'unidentifiable',\n };\n}\n\nfunction buildGraphQLEnumModel(\n name: string,\n metadata: GraphQLTypeMetadata | undefined,\n type: GraphQLEnumType\n): GraphQLEnumTypeModel {\n const values: Record<string, GraphQLEnumValueModel> = {};\n for (const [name, value] of Object.entries(type.getValues())) {\n values[name] = {\n name: value.name,\n value: value.value,\n description: value.description,\n };\n }\n\n return {\n kind: 'enum' as const,\n name,\n metadata,\n values,\n category: 'unidentifiable',\n };\n}\n\nexport function buildGraphQLSchemaModel(\n schema: GraphQLSchema,\n typeMetadata: GraphQLTypeMetadata[] = [],\n defaults?: Partial<TypeCacheControlExtension>\n): GraphQLSchemaModel {\n const typeMap = schema.getTypeMap();\n const types: GraphQLTypeModel[] = [];\n const metadataByTypename = new Map(typeMetadata.map((m) => [m.typename, m]));\n const queryTypeName = schema.getQueryType()?.name;\n const mutationTypeName = schema.getMutationType()?.name;\n\n // First resolve all the concrete types (objects and enums)\n for (const [name, type] of Object.entries(typeMap)) {\n // Skip internal types and scalars and ignore interfaces and unions for now\n if (\n name.startsWith('__') ||\n isScalarType(type) ||\n isInterfaceType(type) ||\n isUnionType(type)\n ) {\n continue;\n }\n const metadata = metadataByTypename.get(name);\n\n if (isObjectType(type)) {\n types.push(\n buildGraphQLObjectModel(\n name,\n metadata,\n type,\n type.name === queryTypeName || type.name === mutationTypeName,\n defaults\n )\n );\n } else if (isInputObjectType(type)) {\n types.push(buildGraphQLInputObjectModel(name, metadata, type, defaults));\n } else if (isEnumType(type)) {\n types.push(buildGraphQLEnumModel(name, metadata, type));\n }\n }\n\n // Next resolve all the interfaces and unions\n for (const [name, type] of Object.entries(typeMap)) {\n // Skip internal types and scalars and ignore objects and input objects\n if (name.startsWith('__') || isObjectType(type) || isInputObjectType(type)) {\n continue;\n }\n const metadata = metadataByTypename.get(name);\n if (isInterfaceType(type)) {\n types.push(buildGraphQLInterfaceModel(name, metadata, type, types, schema));\n } else if (isUnionType(type)) {\n types.push(buildGraphQLUnionModel(name, metadata, type, types));\n }\n }\n\n if (!queryTypeName) {\n throw new Error('No query type found in schema');\n }\n // Validate metadata before returning the model\n const rootTypeNames = [queryTypeName];\n if (mutationTypeName) {\n rootTypeNames.push(mutationTypeName);\n }\n validateGraphQLSchemaModel(typeMap, metadataByTypename, rootTypeNames, defaults);\n\n return {\n types,\n queryTypeName,\n mutationTypeName,\n };\n}\n","import { buildSchema } from 'graphql';\nimport { GraphQLSchemaModel, buildGraphQLSchemaModel } from './graphql-schema-model';\nimport { resolve } from 'path';\nimport { readFileSync } from 'fs';\nimport { AuraNormalizedCachingCommandModel } from './aura-normalized-caching-command-model';\nimport { AuraGraphQLOperation } from '@conduit-client/model/v1';\nimport type { ImportableReference } from '../files';\nimport type { IGraphQLCommandModel } from './graphql-command-model-interface';\n\nconst AURA_GRAPHQL_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-aura-graphql-normalized-cache-control/v1',\n exportedSymbol: 'AuraGraphQLNormalizedCacheControlCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_AURA_GRAPHQL_CACHE_CONTROL_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-aura-graphql-normalized-cache-control/v1',\n exportedSymbol: 'NamedAuraGraphQLNormalizedCacheControlCommand',\n isType: true,\n};\n\nexport class AuraGraphQLCommandModel\n extends AuraNormalizedCachingCommandModel\n implements IGraphQLCommandModel\n{\n private schemaModel?: GraphQLSchemaModel;\n\n constructor(operation: AuraGraphQLOperation) {\n super(operation);\n }\n\n get serviceDependencies() {\n const deps = super.serviceDependencies;\n\n // Override the base class to use GraphQL-specific command service\n deps.baseClass = {\n version: '1.0' as const,\n descriptor: AURA_GRAPHQL_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_AURA_GRAPHQL_CACHE_CONTROL_COMMAND_SERVICE,\n localName: 'auraGraphQLNormalizedCacheControlCommand',\n serviceName: 'auraGraphQLNormalizedCacheControlCommand',\n };\n\n return deps;\n }\n\n get schema(): GraphQLSchemaModel {\n const graphQLOperation = this.operation as AuraGraphQLOperation;\n if (!this.schemaModel) {\n const config = graphQLOperation.graphqlConfig;\n const schemaPath = resolve(graphQLOperation.basePath, config.schemaFilePath);\n const schemaContent = readFileSync(schemaPath, 'utf-8');\n const graphqlSchema = buildSchema(schemaContent);\n\n // Access defaults from the operation's endpoint API\n const apiDefaults = this.operation.defaults.typeCacheControl;\n this.schemaModel = buildGraphQLSchemaModel(\n graphqlSchema,\n config['type-metadata'],\n apiDefaults\n );\n }\n return this.schemaModel;\n }\n}\n","import { buildSchema } from 'graphql';\nimport { GraphQLSchemaModel, buildGraphQLSchemaModel } from './graphql-schema-model';\nimport { resolve } from 'path';\nimport { readFileSync } from 'fs';\nimport { HttpNormalizedCachingCommandModel } from './http-normalized-caching-command-model';\nimport { HttpGraphQLOperation } from '@conduit-client/model/v1';\nimport type { ImportableReference } from '../files';\nimport type { IGraphQLCommandModel } from './graphql-command-model-interface';\n\nconst HTTP_GRAPHQL_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR: ImportableReference = {\n module: '@conduit-client/command-http-graphql-normalized-cache-control/v1',\n exportedSymbol: 'HttpGraphQLNormalizedCacheControlCommandServiceDescriptor',\n isType: true,\n};\n\nconst NAMED_HTTP_GRAPHQL_CACHE_CONTROL_COMMAND_SERVICE: ImportableReference = {\n module: '@conduit-client/command-http-graphql-normalized-cache-control/v1',\n exportedSymbol: 'NamedHttpGraphQLNormalizedCacheControlCommand',\n isType: true,\n};\n\nexport class HttpGraphQLCommandModel\n extends HttpNormalizedCachingCommandModel\n implements IGraphQLCommandModel\n{\n private schemaModel?: GraphQLSchemaModel;\n\n constructor(operation: HttpGraphQLOperation) {\n super(operation);\n }\n\n get serviceDependencies() {\n const deps = super.serviceDependencies;\n\n // Override the base class to use GraphQL-specific command service\n deps.baseClass = {\n version: '1.0' as const,\n descriptor: HTTP_GRAPHQL_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR,\n namedService: NAMED_HTTP_GRAPHQL_CACHE_CONTROL_COMMAND_SERVICE,\n localName: 'httpGraphQLNormalizedCacheControlCommand',\n serviceName: 'httpGraphQLNormalizedCacheControlCommand',\n };\n\n return deps;\n }\n\n get schema(): GraphQLSchemaModel {\n const graphQLOperation = this.operation as HttpGraphQLOperation;\n\n if (!this.schemaModel) {\n const config = graphQLOperation.graphqlConfig;\n const schemaPath = resolve(graphQLOperation.basePath, config.schemaFilePath);\n const schemaContent = readFileSync(schemaPath, 'utf-8');\n const graphqlSchema = buildSchema(schemaContent);\n\n // Access defaults from the operation's endpoint API\n const apiDefaults = this.operation.defaults.typeCacheControl;\n\n this.schemaModel = buildGraphQLSchemaModel(\n graphqlSchema,\n config['type-metadata'],\n apiDefaults\n );\n }\n return this.schemaModel;\n }\n}\n","import { type ImportableReference } from '../files';\nimport { AuraCommandGenerator } from './aura-command-generator';\nimport { NormalizedCacheControlGeneratorMixin } from './normalized-cache-control-generator-mixin';\nimport { GraphQLNormalizedCacheControlGeneratorMixin } from './graphql-normalized-cache-control-generator-mixin';\n\nconst AURA_GRAPHQL_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS = {\n module: '@conduit-client/command-aura-graphql-normalized-cache-control/v1',\n exportedSymbol: 'AuraGraphQLNormalizedCacheControlCommand',\n isType: true,\n} as const satisfies ImportableReference;\n\n// First apply the normalized cache control mixin to AuraCommandGenerator\nconst AuraNormalizedCacheControlCommandGenerator = NormalizedCacheControlGeneratorMixin(\n AuraCommandGenerator,\n AURA_GRAPHQL_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS\n);\n\n// Then apply the GraphQL mixin to the normalized cache control generator\nexport const AuraGraphQLNormalizedCacheControlCommandGenerator =\n GraphQLNormalizedCacheControlGeneratorMixin(\n AuraNormalizedCacheControlCommandGenerator,\n AURA_GRAPHQL_NORMALIZED_CACHE_CONTROL_COMMAND_BASE_CLASS\n );\n","import { AuraCommandModel } from '../model/aura-command-model';\nimport { HttpCommandModel } from '../model/http-command-model';\nimport { AuraNormalizedCachingCommandModel } from '../model/aura-normalized-caching-command-model';\nimport { AuraResourceCachingCommandModel } from '../model/aura-resource-caching-command-model';\nimport { AuraNormalizedCacheControlCommandGenerator } from './aura-normalized-cache-control-command-generator';\nimport { AuraResourceCacheControlCommandGenerator } from './aura-resource-cache-control-command-generator';\nimport { HttpCommandGenerator } from './http-command-generator';\nimport { BindingsGenerator, type IBindingsGenerator } from './bindings-generator';\nimport { AuraCommandGenerator } from './aura-command-generator';\nimport type { NamedTypeRegistryGeneratorService } from '../normalization/type-registry-generator';\nimport type { NamedGraphQLTypeRegistryGeneratorService } from '../normalization/graphql-type-registry-generator';\nimport type { NamedFileService } from '../files';\nimport type { NamedAPIService, Operation } from '@conduit-client/model/v1';\nimport type { NamedJSONSchemaDeclarationService, NamedTypeDefinitionService } from '../types';\nimport type { ICommandModel } from '../model/base-command-model';\nimport type { ICommandGenerator } from './base-command-generator';\nimport { HttpNormalizedCacheControlCommandGenerator } from './http-normalized-cache-control-command-generator';\nimport { HttpNormalizedCachingCommandModel } from '../model/http-normalized-caching-command-model';\nimport { AuraGraphQLCommandModel } from '../model/aura-graphql-command-model';\nimport { HttpGraphQLCommandModel } from '../model/http-graphql-command-model';\nimport { AuraGraphQLNormalizedCacheControlCommandGenerator } from './aura-graphql-normalized-cache-control-command-generator';\nimport { HttpGraphQLNormalizedCacheControlCommandGenerator } from './http-graphql-normalized-cache-control-command-generator';\n\nexport function defaultCommandModelFactory(operation: Operation): ICommandModel {\n let commandModel;\n if (operation.endpoint.type === 'aura') {\n if (operation.operationType === 'graphql') {\n commandModel = AuraGraphQLCommandModel;\n } else if (operation.cacheStrategy.type === 'none') {\n commandModel = AuraCommandModel;\n } else if (operation.cacheStrategy.type === 'normalized') {\n commandModel = AuraNormalizedCachingCommandModel;\n } else if (operation.cacheStrategy.type === 'resource') {\n commandModel = AuraResourceCachingCommandModel;\n } else {\n throw new Error(\n `Unknown Aura cache strategy type ${(operation.cacheStrategy as any).type}. Must be 'none', 'resource' or 'normalized'`\n );\n }\n } else {\n if (operation.operationType === 'graphql') {\n commandModel = HttpGraphQLCommandModel;\n } else if (operation.cacheStrategy.type === 'none') {\n commandModel = HttpCommandModel;\n } else if (operation.cacheStrategy.type === 'normalized') {\n commandModel = HttpNormalizedCachingCommandModel;\n } else {\n throw new Error(\n `Unknown HTTP cache strategy type ${operation.cacheStrategy.type}. Must be 'none' or 'normalized'`\n );\n }\n }\n\n return new commandModel(operation);\n}\n\nexport function defaultCommandGeneratorFactory(\n commandModel: ICommandModel,\n services: NamedAPIService &\n NamedFileService &\n NamedJSONSchemaDeclarationService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService\n) {\n if (commandModel.transportType === 'aura') {\n if (commandModel.cacheStrategy.type === 'none') {\n return new AuraCommandGenerator(commandModel, services);\n } else if (commandModel.cacheStrategy.type === 'normalized') {\n if (commandModel.operationType === 'graphql') {\n return new AuraGraphQLNormalizedCacheControlCommandGenerator(\n commandModel,\n services\n );\n } else {\n return new AuraNormalizedCacheControlCommandGenerator(commandModel, services);\n }\n } else {\n return new AuraResourceCacheControlCommandGenerator(commandModel, services);\n }\n }\n\n if (commandModel.cacheStrategy.type === 'none') {\n return new HttpCommandGenerator(commandModel, services);\n } else if (commandModel.cacheStrategy.type === 'normalized') {\n if (commandModel.operationType === 'graphql') {\n return new HttpGraphQLNormalizedCacheControlCommandGenerator(commandModel, services);\n } else {\n return new HttpNormalizedCacheControlCommandGenerator(commandModel, services);\n }\n }\n\n throw new Error('Unknown command configuration');\n}\n\nexport function defaultBindingsGeneratorFactory(\n commandModels: ICommandModel[],\n services: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService\n): IBindingsGenerator {\n return new BindingsGenerator(services, commandModels);\n}\n\nexport interface IApiFamilyModuleGenerator {\n build(): void;\n buildModels(): ICommandModel[];\n generateCommands(commandModels: ICommandModel[]): void;\n generateBindings(commandModels: ICommandModel[]): void;\n}\n\n/**\n * Class responsible for generating modules based on provided services and factories for commands and bindings.\n *\n * The `ModuleGenerator` class aggregates service interfaces and factory functions for creating command models,\n * command generators, and bindings generators. It uses these components to build modules by processing API\n * operations, generating necessary commands, and binding them into a coherent module structure.\n *\n * The general pattern for generating module code should, by convention, be:\n * 1. Transform the API model service into more targeted models for code generation\n * 2. Use those code generation models in the generator classes to populate a file template\n *\n * API operations map one to one with OneStore commands, and bindings sit on top of all commands, exposing the\n * interface to be consumed by a user, e.g. a component.\n *\n * @property {NamedAPIService & NamedFileService & NamedTypeDefinitionService & NamedJSONSchemaDeclarationService} services - Composite object providing essential services like API, File, Type Definition, and JSON Schema Declaration services.\n * @property {(op: Operation) => ICommandModel} commandModelFactory - Factory function to create command models from operations. Defaults to `defaultCommandModelFactory` if not provided.\n * @property {(op: Operation, commandModel: ICommandModel, services: NamedFileService & NamedJSONSchemaDeclarationService & NamedTypeDefinitionService) => ICommandGenerator} commandGeneratorFactory - Factory function to create command generators. Takes an operation, a command model, and services. Defaults to `defaultCommandGeneratorFactory` if not provided.\n * @property {(commandModels: ICommandModel[], services: NamedFileService & NamedTypeDefinitionService) => IBindingsGenerator} bindingsGeneratorFactory - Factory function to create bindings generators from command models and services. Defaults to `defaultBindingsGeneratorFactory` if not provided.\n */\nexport class ApiFamilyModuleGenerator implements IApiFamilyModuleGenerator {\n constructor(\n protected services: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedJSONSchemaDeclarationService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService,\n protected commandModelFactory: (\n op: Operation\n ) => ICommandModel = defaultCommandModelFactory,\n protected commandGeneratorFactory: (\n commandModel: ICommandModel,\n services: NamedAPIService &\n NamedFileService &\n NamedJSONSchemaDeclarationService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService\n ) => ICommandGenerator = defaultCommandGeneratorFactory,\n protected bindingsGeneratorFactory: (\n commandModels: ICommandModel[],\n services: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService\n ) => IBindingsGenerator = defaultBindingsGeneratorFactory\n ) {}\n\n /**\n * Builds the module by processing all operations defined in the API service.\n * This method iterates through each endpoint and operation, uses the command model factory to generate command models,\n * then generates commands with the command generator factory, and finally builds bindings using the bindings generator factory.\n */\n build() {\n const commandModels = this.buildModels();\n this.generateCommands(commandModels);\n this.generateBindings(commandModels);\n }\n\n buildModels() {\n const commandModels: ICommandModel[] = [];\n for (const endpoint of this.services.api.api.endpoints) {\n for (const operation of endpoint.operations) {\n const commandModel = this.commandModelFactory(operation);\n commandModels.push(commandModel);\n }\n }\n return commandModels;\n }\n\n generateCommands(commandModels: ICommandModel[]) {\n commandModels.forEach((commandModel) => {\n this.commandGeneratorFactory(commandModel, this.services).build();\n });\n }\n\n generateBindings(commandModels: ICommandModel[]) {\n this.bindingsGeneratorFactory(commandModels, this.services).build();\n }\n}\n","import { ApiFamilyModuleGenerator, IApiFamilyModuleGenerator } from './generators';\nimport type { NamedLoggerService } from '@conduit-client/utils';\nimport type { NamedFileService } from './files';\nimport type { NamedAPIService } from '@conduit-client/model/v1';\nimport type { NamedJSONSchemaDeclarationService, NamedTypeDefinitionService } from './types';\nimport type { NamedTypeRegistryGeneratorService } from './normalization/type-registry-generator';\nimport type { NamedGraphQLTypeRegistryGeneratorService } from './normalization/graphql-type-registry-generator';\n\n/**\n * Creates a new instance of ModuleGenerator using a composite service object.\n *\n * This function takes an object that aggregates several named services essential for module generation.\n * It constructs and returns a new `ModuleGenerator` instance initialized with these services.\n *\n * @param {NamedAPIService & NamedFileService & NamedTypeDefinitionService & NamedLoggerService & NamedJSONSchemaDeclarationService} services - An object that must implement the required services\n * @returns {ModuleGenerator} A new `ModuleGenerator` instance configured with the provided services.\n */\nexport function apiFamilyModuleGeneratorService(\n services: NamedAPIService &\n NamedFileService &\n NamedTypeDefinitionService &\n NamedLoggerService &\n NamedJSONSchemaDeclarationService &\n NamedTypeRegistryGeneratorService &\n NamedGraphQLTypeRegistryGeneratorService\n) {\n return new ApiFamilyModuleGenerator(services);\n}\n\nexport type { IApiFamilyModuleGenerator };\n"],"names":["code","isType","block","isObjectType","isEnumType","isIdentifiableType","NAMED_CACHE_CONTROLLER_SERVICE","NAMED_PUB_SUB_SERVICE","TYPE_SERVICES","defaultGenerateType","itemType","additionalPropsCode","GRAPHQL_DATA","GRAPHQL_DOCUMENT_ROOT_TYPE_REPOSITORY","isInterfaceType","isUnionType","path","FETCH_RESPONSE","JSON_SCHEMA_TYPE","APPLY_DECORATORS","WIRE_ADAPTER_CONSTRUCTOR","NAMED_CACHE_CONTROL_SERVICE","CACHE_CONTROL_SERVICE_DESCRIPTOR","NAMED_PUBSUB_SERVICE","PUBSUB_SERVICE_DESCRIPTOR","NAMED_FETCH_NETWORK_COMMAND_SERVICE","members","getCacheControlValue","NAMED_AURA_NETWORK_SERVICE","NAMED_FETCH_SERVICE","HttpNormalizedCacheControlCommandGenerator","FETCH_SERVICE_DESCRIPTOR","AURA_CACHE_CONTROL_COMMAND_BASE_CLASS_DESCRIPTOR","NAMED_AURA_CACHE_CONTROL_COMMAND_SERVICE","AuraNormalizedCacheControlCommandGenerator","_typeof","obj","ownKeys","_objectSpread","_defineProperty","_defineProperties","_createClass","_wrapNativeSuper","Class","_construct","Parent","args","_setPrototypeOf","o","p","_getPrototypeOf","GraphQLError","loc","toString","toJSON","get","Location","Token","instanceOf","Source","indent","Lexer","Parser","item","fields","LexicalDistance","GraphQLScalarType","GraphQLObjectType","GraphQLInterfaceType","GraphQLUnionType","GraphQLEnumType","parseLiteral","GraphQLInputObjectType","isFinite","resolve","GraphQLDirective","GraphQLSchema","getPossibleTypes","NamedType","Directive","Field","Argument","ObjectField","ASTValidationContext","SDLValidationContext","field","getNamedType","name","_loop","_i4"],"mappings":"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","x_google_ignoreList":[51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116]}