@graphitation/supermassive 3.0.0-alpha.1 → 3.0.0-alpha.3

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 (193) hide show
  1. package/.eslintcache +1 -1
  2. package/CHANGELOG.md +10 -2
  3. package/lib/__testUtils__/execute.d.ts +13 -0
  4. package/lib/__testUtils__/execute.d.ts.map +1 -0
  5. package/lib/__testUtils__/execute.js +196 -0
  6. package/lib/__testUtils__/execute.js.map +7 -0
  7. package/lib/__testUtils__/execute.mjs +174 -0
  8. package/lib/__testUtils__/execute.mjs.map +7 -0
  9. package/lib/benchmarks/index.js +10 -19
  10. package/lib/benchmarks/index.js.map +3 -3
  11. package/lib/benchmarks/index.mjs +11 -22
  12. package/lib/benchmarks/index.mjs.map +2 -2
  13. package/lib/collectFields.d.ts +4 -9
  14. package/lib/collectFields.d.ts.map +1 -1
  15. package/lib/collectFields.js +38 -99
  16. package/lib/collectFields.js.map +2 -2
  17. package/lib/collectFields.mjs +41 -100
  18. package/lib/collectFields.mjs.map +2 -2
  19. package/lib/executeWithSchema.d.ts +1 -1
  20. package/lib/executeWithSchema.d.ts.map +1 -1
  21. package/lib/executeWithSchema.js +7 -13
  22. package/lib/executeWithSchema.js.map +2 -2
  23. package/lib/executeWithSchema.mjs +9 -20
  24. package/lib/executeWithSchema.mjs.map +2 -2
  25. package/lib/executeWithoutSchema.d.ts +5 -5
  26. package/lib/executeWithoutSchema.d.ts.map +1 -1
  27. package/lib/executeWithoutSchema.js +175 -227
  28. package/lib/executeWithoutSchema.js.map +2 -2
  29. package/lib/executeWithoutSchema.mjs +176 -228
  30. package/lib/executeWithoutSchema.mjs.map +2 -2
  31. package/lib/index.d.ts +2 -9
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +0 -7
  34. package/lib/index.js.map +2 -2
  35. package/lib/index.mjs +0 -10
  36. package/lib/index.mjs.map +2 -2
  37. package/lib/schema/definition.d.ts +95 -0
  38. package/lib/schema/definition.d.ts.map +1 -0
  39. package/lib/schema/definition.js +77 -0
  40. package/lib/schema/definition.js.map +7 -0
  41. package/lib/schema/definition.mjs +58 -0
  42. package/lib/schema/definition.mjs.map +7 -0
  43. package/lib/schema/directives.d.ts +41 -0
  44. package/lib/schema/directives.d.ts.map +1 -0
  45. package/lib/schema/directives.js +82 -0
  46. package/lib/schema/directives.js.map +7 -0
  47. package/lib/schema/directives.mjs +65 -0
  48. package/lib/schema/directives.mjs.map +7 -0
  49. package/lib/schema/fragment.d.ts +41 -0
  50. package/lib/schema/fragment.d.ts.map +1 -0
  51. package/lib/schema/fragment.js +270 -0
  52. package/lib/schema/fragment.js.map +7 -0
  53. package/lib/schema/fragment.mjs +267 -0
  54. package/lib/schema/fragment.mjs.map +7 -0
  55. package/lib/schema/reference.d.ts +12 -0
  56. package/lib/schema/reference.d.ts.map +1 -0
  57. package/lib/schema/reference.js +137 -0
  58. package/lib/schema/reference.js.map +7 -0
  59. package/lib/schema/reference.mjs +118 -0
  60. package/lib/schema/reference.mjs.map +7 -0
  61. package/lib/schema/resolvers.d.ts +9 -0
  62. package/lib/schema/resolvers.d.ts.map +1 -0
  63. package/lib/schema/resolvers.js +47 -0
  64. package/lib/schema/resolvers.js.map +7 -0
  65. package/lib/schema/resolvers.mjs +35 -0
  66. package/lib/schema/resolvers.mjs.map +7 -0
  67. package/lib/subscribeWithSchema.d.ts +1 -1
  68. package/lib/subscribeWithSchema.d.ts.map +1 -1
  69. package/lib/subscribeWithSchema.js +7 -13
  70. package/lib/subscribeWithSchema.js.map +2 -2
  71. package/lib/subscribeWithSchema.mjs +9 -20
  72. package/lib/subscribeWithSchema.mjs.map +2 -2
  73. package/lib/types.d.ts +10 -24
  74. package/lib/types.d.ts.map +1 -1
  75. package/lib/types.js.map +2 -2
  76. package/lib/types.mjs.map +2 -2
  77. package/lib/utilities/addMinimalViableSchemaToRequestDocument.d.ts +9 -0
  78. package/lib/utilities/addMinimalViableSchemaToRequestDocument.d.ts.map +1 -0
  79. package/lib/utilities/addMinimalViableSchemaToRequestDocument.js +303 -0
  80. package/lib/utilities/addMinimalViableSchemaToRequestDocument.js.map +7 -0
  81. package/lib/utilities/addMinimalViableSchemaToRequestDocument.mjs +317 -0
  82. package/lib/utilities/addMinimalViableSchemaToRequestDocument.mjs.map +7 -0
  83. package/lib/{supermassive-ast → utilities}/annotateDocumentGraphQLTransform.d.ts +1 -1
  84. package/lib/utilities/annotateDocumentGraphQLTransform.d.ts.map +1 -0
  85. package/lib/{supermassive-ast → utilities}/annotateDocumentGraphQLTransform.js +3 -3
  86. package/lib/utilities/annotateDocumentGraphQLTransform.js.map +7 -0
  87. package/lib/utilities/annotateDocumentGraphQLTransform.mjs +17 -0
  88. package/lib/utilities/annotateDocumentGraphQLTransform.mjs.map +7 -0
  89. package/lib/utilities/coerceInputValue.d.ts +10 -0
  90. package/lib/utilities/coerceInputValue.d.ts.map +1 -0
  91. package/lib/utilities/coerceInputValue.js +181 -0
  92. package/lib/utilities/coerceInputValue.js.map +7 -0
  93. package/lib/utilities/coerceInputValue.mjs +167 -0
  94. package/lib/utilities/coerceInputValue.mjs.map +7 -0
  95. package/lib/utilities/decodeASTSchema.d.ts +7 -0
  96. package/lib/utilities/decodeASTSchema.d.ts.map +1 -0
  97. package/lib/utilities/decodeASTSchema.js +243 -0
  98. package/lib/utilities/decodeASTSchema.js.map +7 -0
  99. package/lib/utilities/decodeASTSchema.mjs +242 -0
  100. package/lib/utilities/decodeASTSchema.mjs.map +7 -0
  101. package/lib/utilities/encodeASTSchema.d.ts +4 -0
  102. package/lib/utilities/encodeASTSchema.d.ts.map +1 -0
  103. package/lib/utilities/encodeASTSchema.js +122 -0
  104. package/lib/utilities/encodeASTSchema.js.map +7 -0
  105. package/lib/utilities/encodeASTSchema.mjs +105 -0
  106. package/lib/utilities/encodeASTSchema.mjs.map +7 -0
  107. package/lib/utilities/getSchemaFragment.d.ts +4 -0
  108. package/lib/utilities/getSchemaFragment.d.ts.map +1 -0
  109. package/lib/utilities/getSchemaFragment.js +38 -0
  110. package/lib/utilities/getSchemaFragment.js.map +7 -0
  111. package/lib/utilities/getSchemaFragment.mjs +22 -0
  112. package/lib/utilities/getSchemaFragment.mjs.map +7 -0
  113. package/lib/utilities/makeReadableErrorPath.d.ts +3 -0
  114. package/lib/utilities/makeReadableErrorPath.d.ts.map +1 -0
  115. package/lib/utilities/makeReadableErrorPath.js +47 -0
  116. package/lib/utilities/makeReadableErrorPath.js.map +7 -0
  117. package/lib/utilities/makeReadableErrorPath.mjs +28 -0
  118. package/lib/utilities/makeReadableErrorPath.mjs.map +7 -0
  119. package/lib/utilities/mergeDefinitions.d.ts +8 -0
  120. package/lib/utilities/mergeDefinitions.d.ts.map +1 -0
  121. package/lib/utilities/mergeDefinitions.js +126 -0
  122. package/lib/utilities/mergeDefinitions.js.map +7 -0
  123. package/lib/utilities/mergeDefinitions.mjs +114 -0
  124. package/lib/utilities/mergeDefinitions.mjs.map +7 -0
  125. package/lib/utilities/typeNameFromAST.d.ts +1 -1
  126. package/lib/utilities/typeNameFromAST.d.ts.map +1 -1
  127. package/lib/utilities/typeNameFromAST.js.map +2 -2
  128. package/lib/utilities/typeNameFromAST.mjs.map +2 -2
  129. package/lib/utilities/valueFromAST.d.ts +27 -0
  130. package/lib/utilities/valueFromAST.d.ts.map +1 -0
  131. package/lib/utilities/valueFromAST.js +139 -0
  132. package/lib/utilities/valueFromAST.js.map +7 -0
  133. package/lib/utilities/valueFromAST.mjs +125 -0
  134. package/lib/utilities/valueFromAST.mjs.map +7 -0
  135. package/lib/utilities/valueFromASTUntyped.d.ts +21 -0
  136. package/lib/utilities/valueFromASTUntyped.d.ts.map +1 -0
  137. package/lib/utilities/valueFromASTUntyped.js +51 -0
  138. package/lib/utilities/valueFromASTUntyped.js.map +7 -0
  139. package/lib/utilities/valueFromASTUntyped.mjs +32 -0
  140. package/lib/utilities/valueFromASTUntyped.mjs.map +7 -0
  141. package/lib/values.d.ts +8 -12
  142. package/lib/values.d.ts.map +1 -1
  143. package/lib/values.js +75 -63
  144. package/lib/values.js.map +2 -2
  145. package/lib/values.mjs +77 -71
  146. package/lib/values.mjs.map +2 -2
  147. package/package.json +8 -6
  148. package/lib/definition.d.ts +0 -7
  149. package/lib/definition.d.ts.map +0 -1
  150. package/lib/definition.js +0 -59
  151. package/lib/definition.js.map +0 -7
  152. package/lib/definition.mjs +0 -40
  153. package/lib/definition.mjs.map +0 -7
  154. package/lib/directives.d.ts +0 -8
  155. package/lib/directives.d.ts.map +0 -1
  156. package/lib/directives.js +0 -47
  157. package/lib/directives.js.map +0 -7
  158. package/lib/directives.mjs +0 -37
  159. package/lib/directives.mjs.map +0 -7
  160. package/lib/extractImplicitTypesRuntime.d.ts +0 -4
  161. package/lib/extractImplicitTypesRuntime.d.ts.map +0 -1
  162. package/lib/extractImplicitTypesRuntime.js +0 -123
  163. package/lib/extractImplicitTypesRuntime.js.map +0 -7
  164. package/lib/extractImplicitTypesRuntime.mjs +0 -114
  165. package/lib/extractImplicitTypesRuntime.mjs.map +0 -7
  166. package/lib/supermassive-ast/TypedAST.d.ts +0 -370
  167. package/lib/supermassive-ast/TypedAST.d.ts.map +0 -1
  168. package/lib/supermassive-ast/TypedAST.js +0 -29
  169. package/lib/supermassive-ast/TypedAST.js.map +0 -7
  170. package/lib/supermassive-ast/TypedAST.mjs +0 -10
  171. package/lib/supermassive-ast/TypedAST.mjs.map +0 -7
  172. package/lib/supermassive-ast/addTypesToRequestDocument.d.ts +0 -56
  173. package/lib/supermassive-ast/addTypesToRequestDocument.d.ts.map +0 -1
  174. package/lib/supermassive-ast/addTypesToRequestDocument.js +0 -473
  175. package/lib/supermassive-ast/addTypesToRequestDocument.js.map +0 -7
  176. package/lib/supermassive-ast/addTypesToRequestDocument.mjs +0 -463
  177. package/lib/supermassive-ast/addTypesToRequestDocument.mjs.map +0 -7
  178. package/lib/supermassive-ast/annotateDocumentGraphQLTransform.d.ts.map +0 -1
  179. package/lib/supermassive-ast/annotateDocumentGraphQLTransform.js.map +0 -7
  180. package/lib/supermassive-ast/annotateDocumentGraphQLTransform.mjs +0 -17
  181. package/lib/supermassive-ast/annotateDocumentGraphQLTransform.mjs.map +0 -7
  182. package/lib/supermassive-ast/directives.d.ts +0 -36
  183. package/lib/supermassive-ast/directives.d.ts.map +0 -1
  184. package/lib/supermassive-ast/directives.js +0 -165
  185. package/lib/supermassive-ast/directives.js.map +0 -7
  186. package/lib/supermassive-ast/directives.mjs +0 -153
  187. package/lib/supermassive-ast/directives.mjs.map +0 -7
  188. package/lib/supermassive-ast/index.d.ts +0 -6
  189. package/lib/supermassive-ast/index.d.ts.map +0 -1
  190. package/lib/supermassive-ast/index.js +0 -37
  191. package/lib/supermassive-ast/index.js.map +0 -7
  192. package/lib/supermassive-ast/index.mjs +0 -27
  193. package/lib/supermassive-ast/index.mjs.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/benchmarks/index.ts"],
4
- "sourcesContent": ["import fs from \"fs\";\nimport path from \"path\";\nimport NiceBenchmark from \"./nice-benchmark\";\nimport schema from \"./swapi-schema\";\nimport resolvers from \"./swapi-schema/resolvers\";\nimport models from \"./swapi-schema/models\";\nimport {\n graphql,\n execute as graphqlExecute,\n parse,\n isInputType,\n} from \"graphql\";\nimport { compileQuery, isCompiledQuery } from \"graphql-jit\";\nimport { executeWithoutSchema as supermassiveExecute } from \"../executeWithoutSchema\";\nimport { addTypesToRequestDocument } from \"../supermassive-ast\";\nimport { Resolvers, UserResolvers } from \"../types\";\nimport { extractImplicitTypes } from \"../extractImplicitTypesRuntime\";\nimport { specifiedScalars } from \"../values\";\n\nconst query = fs.readFileSync(\n path.join(__dirname, \"./fixtures/query1.graphql\"),\n {\n encoding: \"utf-8\",\n },\n);\n\nconst parsedQuery = parse(query);\n\nconst compiledQuery = compileQuery(schema, parsedQuery);\n\nconst typeAnnotatedQuery = addTypesToRequestDocument(schema, parsedQuery);\n\nconst queryRunningSuite = new NiceBenchmark(\"Query Running\");\nqueryRunningSuite.add(\"graphql-js - string queries\", async () => {\n const result = await graphql({\n schema,\n source: query,\n contextValue: { models },\n });\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n});\nqueryRunningSuite.add(\"graphql-js - parsed queries\", async () => {\n const result = await graphqlExecute({\n schema,\n document: parsedQuery,\n contextValue: { models },\n });\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n});\nqueryRunningSuite.add(\"graphql-jit - uncompiled\", async () => {\n const freshCompiledQuery = compileQuery(schema, parsedQuery);\n if (isCompiledQuery(freshCompiledQuery)) {\n const result = await freshCompiledQuery.query({}, { models }, {});\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n } else {\n throw new Error(\"Wrong query\");\n }\n});\nqueryRunningSuite.add(\"graphql-jit - precompiled\", async () => {\n if (isCompiledQuery(compiledQuery)) {\n const result = await compiledQuery.query({}, { models }, {});\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n } else {\n throw new Error(\"Wrong query\");\n }\n});\nqueryRunningSuite.add(\"supermassive - runtime schemaless\", async () => {\n let extractedResolvers: Resolvers = {};\n const getTypeByName = (name: string) => {\n const type = specifiedScalars[name] || extractedResolvers[name];\n if (isInputType(type)) {\n return type;\n } else {\n throw new Error(\"Invalid type\");\n }\n };\n extractedResolvers = extractImplicitTypes(parsedQuery, getTypeByName);\n\n const result = await supermassiveExecute({\n resolvers: resolvers as UserResolvers,\n schemaResolvers: extractedResolvers,\n document: typeAnnotatedQuery,\n contextValue: { models },\n });\n if (\"data\" in result && (result.errors || !result.data)) {\n throw new Error(\"Stuff ain't executing\");\n }\n});\n\nconst queryParsingSuite = new NiceBenchmark(\"Query parsing\");\nqueryParsingSuite.add(\"graphql-js\", async () => {\n parse(query);\n});\n\nconst queryCompilingSuite = new NiceBenchmark(\"Query compiling\");\nqueryCompilingSuite.add(\"graphql-jit\", async () => {\n await compileQuery(schema, parsedQuery);\n});\n\nconst queryAnnotationSuite = new NiceBenchmark(\"Query annotation\");\nqueryAnnotationSuite.add(\"supermassive\", () => {\n addTypesToRequestDocument(schema, parsedQuery);\n});\n\nasync function main() {\n await queryCompilingSuite.run();\n await queryParsingSuite.run();\n await queryAnnotationSuite.run();\n await queryRunningSuite.run();\n}\n\nmain();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import fs from \"fs\";\nimport path from \"path\";\nimport NiceBenchmark from \"./nice-benchmark\";\nimport schema from \"./swapi-schema\";\nimport resolvers from \"./swapi-schema/resolvers\";\nimport models from \"./swapi-schema/models\";\nimport {\n execute as graphqlExecute,\n parse,\n // experimentalExecuteIncrementally as graphqlExecute,\n} from \"graphql\";\nimport { compileQuery, isCompiledQuery } from \"graphql-jit\";\nimport { executeWithoutSchema as supermassiveExecute } from \"../executeWithoutSchema\";\nimport { UserResolvers } from \"../types\";\nimport { extractMinimalViableSchemaForRequestDocument } from \"../utilities/addMinimalViableSchemaToRequestDocument\";\n\nconst query = fs.readFileSync(\n path.join(__dirname, \"./fixtures/query1.graphql\"),\n {\n encoding: \"utf-8\",\n },\n);\n\nconst parsedQuery = parse(query);\n\nconst compiledQuery = compileQuery(schema, parsedQuery);\n\nconst schemaFragment = extractMinimalViableSchemaForRequestDocument(\n schema,\n parsedQuery,\n);\n\nconst queryRunningSuite = new NiceBenchmark(\"Query Running\");\nqueryRunningSuite.add(\"graphql-js - string queries\", async () => {\n const result = await graphqlExecute({\n schema,\n document: parse(query),\n contextValue: { models },\n });\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n});\nqueryRunningSuite.add(\"graphql-js - parsed queries\", async () => {\n const result = await graphqlExecute({\n schema,\n document: parsedQuery,\n contextValue: { models },\n });\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n});\nqueryRunningSuite.add(\"graphql-jit - uncompiled\", async () => {\n const freshCompiledQuery = compileQuery(schema, parsedQuery);\n if (isCompiledQuery(freshCompiledQuery)) {\n const result = await freshCompiledQuery.query({}, { models }, {});\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n } else {\n throw new Error(\"Wrong query\");\n }\n});\nqueryRunningSuite.add(\"graphql-jit - precompiled\", async () => {\n if (isCompiledQuery(compiledQuery)) {\n const result = await compiledQuery.query({}, { models }, {});\n if (result.errors || !result.data) {\n throw new Error(\"Stuff ain't executing\");\n }\n } else {\n throw new Error(\"Wrong query\");\n }\n});\nqueryRunningSuite.add(\"supermassive - runtime schemaless\", async () => {\n const result = await supermassiveExecute({\n resolvers: resolvers as UserResolvers,\n schemaFragment,\n document: parsedQuery,\n contextValue: { models },\n });\n if (\"data\" in result && (result.errors || !result.data)) {\n throw new Error(\"Stuff ain't executing\");\n }\n});\n\nconst queryParsingSuite = new NiceBenchmark(\"Query parsing\");\nqueryParsingSuite.add(\"graphql-js\", async () => {\n parse(query);\n});\n\nconst queryCompilingSuite = new NiceBenchmark(\"Query compiling\");\nqueryCompilingSuite.add(\"graphql-jit\", async () => {\n await compileQuery(schema, parsedQuery);\n});\n\nconst queryAnnotationSuite = new NiceBenchmark(\"Query annotation\");\nqueryAnnotationSuite.add(\"supermassive\", () => {\n extractMinimalViableSchemaForRequestDocument(schema, parsedQuery);\n});\n\nasync function main() {\n await queryCompilingSuite.run();\n await queryParsingSuite.run();\n await queryAnnotationSuite.run();\n await queryRunningSuite.run();\n}\n\nmain();\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,5 @@
1
- import { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from "./supermassive-ast";
2
- import type { ObjMap } from "./jsutils/ObjMap";
3
- import { Resolvers } from "./types";
1
+ import { FieldNode } from "graphql";
2
+ import { ExecutionContext } from "./executeWithoutSchema";
4
3
  export type FieldGroup = ReadonlyArray<FieldNode>;
5
4
  export type GroupedFieldSet = Map<string, FieldGroup>;
6
5
  export interface PatchFields {
@@ -20,9 +19,7 @@ export interface FieldsAndPatches {
20
19
  *
21
20
  * @internal
22
21
  */
23
- export declare function collectFields(resolvers: Resolvers, fragments: ObjMap<FragmentDefinitionNode>, variableValues: {
24
- [variable: string]: unknown;
25
- }, runtimeTypeName: string, operation: OperationDefinitionNode): FieldsAndPatches;
22
+ export declare function collectFields(exeContext: ExecutionContext, runtimeTypeName: string): FieldsAndPatches;
26
23
  /**
27
24
  * Given an array of field nodes, collects all of the subfields of the passed
28
25
  * in fields, and returns them at the end.
@@ -33,7 +30,5 @@ export declare function collectFields(resolvers: Resolvers, fragments: ObjMap<Fr
33
30
  *
34
31
  * @internal
35
32
  */
36
- export declare function collectSubfields(resolvers: Resolvers, fragments: ObjMap<FragmentDefinitionNode>, variableValues: {
37
- [variable: string]: unknown;
38
- }, operation: OperationDefinitionNode, returnTypeName: string, fieldGroup: FieldGroup): FieldsAndPatches;
33
+ export declare function collectSubfields(exeContext: ExecutionContext, returnTypeName: string, fieldGroup: FieldGroup): FieldsAndPatches;
39
34
  //# sourceMappingURL=collectFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collectFields.d.ts","sourceRoot":"","sources":["../src/collectFields.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,sBAAsB,EAGtB,uBAAuB,EAGxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAU/C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKpC,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,EACzC,cAAc,EAAE;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAC/C,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,uBAAuB,GACjC,gBAAgB,CAelB;AAED;;;;;;;;;GASG;AAEH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,EACzC,cAAc,EAAE;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAC/C,SAAS,EAAE,uBAAuB,EAClC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,UAAU,GACrB,gBAAgB,CA0BlB"}
1
+ {"version":3,"file":"collectFields.d.ts","sourceRoot":"","sources":["../src/collectFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAMV,MAAM,SAAS,CAAC;AAUjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,gBAAgB,EAC5B,eAAe,EAAE,MAAM,GACtB,gBAAgB,CAalB;AAED;;;;;;;;;GASG;AAEH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,UAAU,GACrB,gBAAgB,CAuBlB"}
@@ -34,19 +34,15 @@ __export(collectFields_exports, {
34
34
  module.exports = __toCommonJS(collectFields_exports);
35
35
  var import_graphql = require("graphql");
36
36
  var import_values = require("./values");
37
- var import_directives = require("./directives");
38
- var import_typeNameFromAST = require("./utilities/typeNameFromAST");
39
- var import_definition = require("./definition");
37
+ var import_directives = require("./schema/directives");
40
38
  var import_AccumulatorMap = require("./jsutils/AccumulatorMap");
41
39
  var import_invariant = __toESM(require("invariant"));
42
- function collectFields(resolvers, fragments, variableValues, runtimeTypeName, operation) {
40
+ function collectFields(exeContext, runtimeTypeName) {
41
+ const { operation } = exeContext;
43
42
  const groupedFieldSet = new import_AccumulatorMap.AccumulatorMap();
44
43
  const patches = [];
45
44
  collectFieldsImpl(
46
- resolvers,
47
- fragments,
48
- variableValues,
49
- operation,
45
+ exeContext,
50
46
  runtimeTypeName,
51
47
  operation.selectionSet,
52
48
  groupedFieldSet,
@@ -55,7 +51,7 @@ function collectFields(resolvers, fragments, variableValues, runtimeTypeName, op
55
51
  );
56
52
  return { groupedFieldSet, patches };
57
53
  }
58
- function collectSubfields(resolvers, fragments, variableValues, operation, returnTypeName, fieldGroup) {
54
+ function collectSubfields(exeContext, returnTypeName, fieldGroup) {
59
55
  const subGroupedFieldSet = new import_AccumulatorMap.AccumulatorMap();
60
56
  const visitedFragmentNames = /* @__PURE__ */ new Set();
61
57
  const subPatches = [];
@@ -66,10 +62,7 @@ function collectSubfields(resolvers, fragments, variableValues, operation, retur
66
62
  for (const node of fieldGroup) {
67
63
  if (node.selectionSet) {
68
64
  collectFieldsImpl(
69
- resolvers,
70
- fragments,
71
- variableValues,
72
- operation,
65
+ exeContext,
73
66
  returnTypeName,
74
67
  node.selectionSet,
75
68
  subGroupedFieldSet,
@@ -80,33 +73,29 @@ function collectSubfields(resolvers, fragments, variableValues, operation, retur
80
73
  }
81
74
  return subFieldsAndPatches;
82
75
  }
83
- function collectFieldsImpl(resolvers, fragments, variableValues, operation, runtimeTypeName, selectionSet, groupedFieldSet, patches, visitedFragmentNames) {
76
+ function collectFieldsImpl(exeContext, runtimeTypeName, selectionSet, groupedFieldSet, patches, visitedFragmentNames) {
84
77
  for (const selection of selectionSet.selections) {
85
78
  switch (selection.kind) {
86
79
  case import_graphql.Kind.FIELD: {
87
- if (!shouldIncludeNode(resolvers, variableValues, selection)) {
80
+ if (!shouldIncludeNode(exeContext, selection)) {
88
81
  continue;
89
82
  }
90
83
  groupedFieldSet.add(getFieldEntryKey(selection), selection);
91
84
  break;
92
85
  }
93
86
  case import_graphql.Kind.INLINE_FRAGMENT: {
94
- if (!shouldIncludeNode(resolvers, variableValues, selection) || !doesFragmentConditionMatch(selection, runtimeTypeName, resolvers)) {
87
+ if (!shouldIncludeNode(exeContext, selection) || !doesFragmentConditionMatch(
88
+ selection,
89
+ runtimeTypeName,
90
+ exeContext.schemaTypes
91
+ )) {
95
92
  continue;
96
93
  }
97
- const defer = getDeferValues(
98
- resolvers,
99
- operation,
100
- variableValues,
101
- selection
102
- );
94
+ const defer = getDeferValues(exeContext, selection);
103
95
  if (defer) {
104
96
  const patchFields = new import_AccumulatorMap.AccumulatorMap();
105
97
  collectFieldsImpl(
106
- resolvers,
107
- fragments,
108
- variableValues,
109
- operation,
98
+ exeContext,
110
99
  runtimeTypeName,
111
100
  selection.selectionSet,
112
101
  patchFields,
@@ -119,10 +108,7 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
119
108
  });
120
109
  } else {
121
110
  collectFieldsImpl(
122
- resolvers,
123
- fragments,
124
- variableValues,
125
- operation,
111
+ exeContext,
126
112
  runtimeTypeName,
127
113
  selection.selectionSet,
128
114
  groupedFieldSet,
@@ -134,20 +120,19 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
134
120
  }
135
121
  case import_graphql.Kind.FRAGMENT_SPREAD: {
136
122
  const fragName = selection.name.value;
137
- if (!shouldIncludeNode(resolvers, variableValues, selection)) {
123
+ if (!shouldIncludeNode(exeContext, selection)) {
138
124
  continue;
139
125
  }
140
- const defer = getDeferValues(
141
- resolvers,
142
- operation,
143
- variableValues,
144
- selection
145
- );
126
+ const defer = getDeferValues(exeContext, selection);
146
127
  if (visitedFragmentNames.has(fragName) && !defer) {
147
128
  continue;
148
129
  }
149
- const fragment = fragments[fragName];
150
- if (fragment == null || !doesFragmentConditionMatch(fragment, runtimeTypeName, resolvers)) {
130
+ const fragment = exeContext.fragments[fragName];
131
+ if (fragment == null || !doesFragmentConditionMatch(
132
+ fragment,
133
+ runtimeTypeName,
134
+ exeContext.schemaTypes
135
+ )) {
151
136
  continue;
152
137
  }
153
138
  if (!defer) {
@@ -156,10 +141,7 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
156
141
  if (defer) {
157
142
  const patchFields = new import_AccumulatorMap.AccumulatorMap();
158
143
  collectFieldsImpl(
159
- resolvers,
160
- fragments,
161
- variableValues,
162
- operation,
144
+ exeContext,
163
145
  runtimeTypeName,
164
146
  fragment.selectionSet,
165
147
  patchFields,
@@ -172,10 +154,7 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
172
154
  });
173
155
  } else {
174
156
  collectFieldsImpl(
175
- resolvers,
176
- fragments,
177
- variableValues,
178
- operation,
157
+ exeContext,
179
158
  runtimeTypeName,
180
159
  fragment.selectionSet,
181
160
  groupedFieldSet,
@@ -188,80 +167,40 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
188
167
  }
189
168
  }
190
169
  }
191
- function shouldIncludeNode(resolvers, variableValues, node) {
170
+ function shouldIncludeNode(exeContext, node) {
192
171
  var _a;
193
172
  if (!((_a = node.directives) == null ? void 0 : _a.length)) {
194
173
  return true;
195
174
  }
196
- const skip = (0, import_values.getDirectiveValues)(
197
- import_directives.GraphQLSkipDirective,
198
- node,
199
- resolvers,
200
- variableValues
201
- );
175
+ const skip = (0, import_values.getDirectiveValues)(exeContext, import_directives.GraphQLSkipDirective, node);
202
176
  if ((skip == null ? void 0 : skip.if) === true) {
203
177
  return false;
204
178
  }
205
- const include = (0, import_values.getDirectiveValues)(
206
- import_directives.GraphQLIncludeDirective,
207
- node,
208
- resolvers,
209
- variableValues
210
- );
179
+ const include = (0, import_values.getDirectiveValues)(exeContext, import_directives.GraphQLIncludeDirective, node);
211
180
  if ((include == null ? void 0 : include.if) === false) {
212
181
  return false;
213
182
  }
214
183
  return true;
215
184
  }
216
- function doesFragmentConditionMatch(fragment, typeName, resolvers) {
185
+ function doesFragmentConditionMatch(fragment, typeName, schemaFragment) {
217
186
  const typeConditionNode = fragment.typeCondition;
218
187
  if (!typeConditionNode) {
219
188
  return true;
220
189
  }
221
- const conditionalType = (0, import_typeNameFromAST.typeNameFromAST)(typeConditionNode);
222
- if (conditionalType === typeName) {
190
+ const conditionalTypeName = typeConditionNode.name.value;
191
+ if (conditionalTypeName === typeName) {
223
192
  return true;
224
193
  }
225
- const subTypes = getSubTypes(resolvers, /* @__PURE__ */ new Set(), conditionalType);
226
- return subTypes.has(typeName);
227
- }
228
- function getSubTypes(resolvers, abstractTypes, conditionalType) {
229
- const resolver = resolvers[conditionalType];
230
- if ((0, import_definition.isInterfaceResolverType)(resolver)) {
231
- const result = resolver.__implementedBy.reduce(
232
- (acc, item) => {
233
- if (!abstractTypes.has(item)) {
234
- const newTypes = /* @__PURE__ */ new Set([...abstractTypes, item]);
235
- acc.push(...abstractTypes, ...getSubTypes(resolvers, newTypes, item));
236
- }
237
- return acc;
238
- },
239
- []
240
- );
241
- return /* @__PURE__ */ new Set([...result]);
194
+ if (schemaFragment.isAbstractType(conditionalTypeName)) {
195
+ return schemaFragment.isSubType(conditionalTypeName, typeName);
242
196
  }
243
- if ((0, import_definition.isUnionResolverType)(resolver)) {
244
- const result = resolver.__types.reduce((acc, item) => {
245
- if (!abstractTypes.has(item)) {
246
- const newTypes = /* @__PURE__ */ new Set([...abstractTypes, item]);
247
- acc.push(...abstractTypes, ...getSubTypes(resolvers, newTypes, item));
248
- }
249
- return acc;
250
- }, []);
251
- return /* @__PURE__ */ new Set([...result]);
252
- }
253
- return abstractTypes;
197
+ return false;
254
198
  }
255
199
  function getFieldEntryKey(node) {
256
200
  return node.alias ? node.alias.value : node.name.value;
257
201
  }
258
- function getDeferValues(resolvers, operation, variableValues, node) {
259
- const defer = (0, import_values.getDirectiveValues)(
260
- import_directives.GraphQLDeferDirective,
261
- node,
262
- resolvers,
263
- variableValues
264
- );
202
+ function getDeferValues(exeContext, node) {
203
+ const defer = (0, import_values.getDirectiveValues)(exeContext, import_directives.GraphQLDeferDirective, node);
265
204
  if (!defer) {
266
205
  return;
267
206
  }
@@ -269,7 +208,7 @@ function getDeferValues(resolvers, operation, variableValues, node) {
269
208
  return;
270
209
  }
271
210
  (0, import_invariant.default)(
272
- operation.operation !== "subscription",
211
+ exeContext.operation.operation !== "subscription",
273
212
  "`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`."
274
213
  );
275
214
  return {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/collectFields.ts"],
4
- "sourcesContent": ["import { Kind } from \"graphql\";\nimport {\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n InlineFragmentNode,\n OperationDefinitionNode,\n SelectionNode,\n SelectionSetNode,\n} from \"./supermassive-ast\";\nimport type { ObjMap } from \"./jsutils/ObjMap\";\nimport { getDirectiveValues } from \"./values\";\nimport {\n GraphQLSkipDirective,\n GraphQLIncludeDirective,\n GraphQLDeferDirective,\n} from \"./directives\";\nimport { typeNameFromAST } from \"./utilities/typeNameFromAST\";\nimport { isUnionResolverType, isInterfaceResolverType } from \"./definition\";\n\nimport { Resolvers } from \"./types\";\n\nimport { AccumulatorMap } from \"./jsutils/AccumulatorMap\";\nimport invariant from \"invariant\";\n\nexport type FieldGroup = ReadonlyArray<FieldNode>;\n\nexport type GroupedFieldSet = Map<string, FieldGroup>;\n\nexport interface PatchFields {\n label: string | undefined;\n groupedFieldSet: GroupedFieldSet;\n}\n\nexport interface FieldsAndPatches {\n groupedFieldSet: GroupedFieldSet;\n patches: Array<PatchFields>;\n}\n\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\nexport function collectFields(\n resolvers: Resolvers,\n fragments: ObjMap<FragmentDefinitionNode>,\n variableValues: { [variable: string]: unknown },\n runtimeTypeName: string,\n operation: OperationDefinitionNode,\n): FieldsAndPatches {\n const groupedFieldSet = new AccumulatorMap<string, FieldNode>();\n const patches: Array<PatchFields> = [];\n collectFieldsImpl(\n resolvers,\n fragments,\n variableValues,\n operation,\n runtimeTypeName,\n operation.selectionSet,\n groupedFieldSet,\n patches,\n new Set(),\n );\n return { groupedFieldSet, patches };\n}\n\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n// eslint-disable-next-line max-params\nexport function collectSubfields(\n resolvers: Resolvers,\n fragments: ObjMap<FragmentDefinitionNode>,\n variableValues: { [variable: string]: unknown },\n operation: OperationDefinitionNode,\n returnTypeName: string,\n fieldGroup: FieldGroup,\n): FieldsAndPatches {\n const subGroupedFieldSet = new AccumulatorMap<string, FieldNode>();\n const visitedFragmentNames = new Set<string>();\n\n const subPatches: Array<PatchFields> = [];\n const subFieldsAndPatches = {\n groupedFieldSet: subGroupedFieldSet,\n patches: subPatches,\n };\n\n for (const node of fieldGroup) {\n if (node.selectionSet) {\n collectFieldsImpl(\n resolvers,\n fragments,\n variableValues,\n operation,\n returnTypeName,\n node.selectionSet,\n subGroupedFieldSet,\n subPatches,\n visitedFragmentNames,\n );\n }\n }\n return subFieldsAndPatches;\n}\n\n// eslint-disable-next-line max-params\nfunction collectFieldsImpl(\n resolvers: Resolvers,\n fragments: ObjMap<FragmentDefinitionNode>,\n variableValues: { [variable: string]: unknown },\n operation: OperationDefinitionNode,\n runtimeTypeName: string,\n selectionSet: SelectionSetNode,\n groupedFieldSet: AccumulatorMap<string, FieldNode>,\n patches: Array<PatchFields>,\n visitedFragmentNames: Set<string>,\n): void {\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n if (!shouldIncludeNode(resolvers, variableValues, selection)) {\n continue;\n }\n groupedFieldSet.add(getFieldEntryKey(selection), selection);\n break;\n }\n case Kind.INLINE_FRAGMENT: {\n if (\n !shouldIncludeNode(resolvers, variableValues, selection) ||\n !doesFragmentConditionMatch(selection, runtimeTypeName, resolvers)\n ) {\n continue;\n }\n\n const defer = getDeferValues(\n resolvers,\n operation,\n variableValues,\n selection,\n );\n\n if (defer) {\n const patchFields = new AccumulatorMap<string, FieldNode>();\n collectFieldsImpl(\n resolvers,\n fragments,\n variableValues,\n operation,\n runtimeTypeName,\n selection.selectionSet,\n patchFields,\n patches,\n visitedFragmentNames,\n );\n patches.push({\n label: defer.label,\n groupedFieldSet: patchFields,\n });\n } else {\n collectFieldsImpl(\n resolvers,\n fragments,\n variableValues,\n operation,\n runtimeTypeName,\n selection.selectionSet,\n groupedFieldSet,\n patches,\n visitedFragmentNames,\n );\n }\n break;\n }\n case Kind.FRAGMENT_SPREAD: {\n const fragName = selection.name.value;\n\n if (!shouldIncludeNode(resolvers, variableValues, selection)) {\n continue;\n }\n\n const defer = getDeferValues(\n resolvers,\n operation,\n variableValues,\n selection,\n );\n if (visitedFragmentNames.has(fragName) && !defer) {\n continue;\n }\n\n const fragment = fragments[fragName];\n if (\n fragment == null ||\n !doesFragmentConditionMatch(fragment, runtimeTypeName, resolvers)\n ) {\n continue;\n }\n\n if (!defer) {\n visitedFragmentNames.add(fragName);\n }\n\n if (defer) {\n const patchFields = new AccumulatorMap<string, FieldNode>();\n collectFieldsImpl(\n resolvers,\n fragments,\n variableValues,\n operation,\n runtimeTypeName,\n fragment.selectionSet,\n patchFields,\n patches,\n visitedFragmentNames,\n );\n patches.push({\n label: defer.label,\n groupedFieldSet: patchFields,\n });\n } else {\n collectFieldsImpl(\n resolvers,\n fragments,\n variableValues,\n operation,\n runtimeTypeName,\n fragment.selectionSet,\n groupedFieldSet,\n patches,\n visitedFragmentNames,\n );\n }\n break;\n }\n }\n }\n}\n\n/**\n * Determines if a field should be included based on the @include and @skip\n * directives, where @skip has higher precedence than @include.\n */\nfunction shouldIncludeNode(\n resolvers: Resolvers,\n variableValues: { [variable: string]: unknown },\n node: SelectionNode,\n): boolean {\n if (!node.directives?.length) {\n return true;\n }\n\n const skip = getDirectiveValues(\n GraphQLSkipDirective,\n node as SelectionNode,\n resolvers,\n variableValues,\n );\n if (skip?.if === true) {\n return false;\n }\n\n const include = getDirectiveValues(\n GraphQLIncludeDirective,\n node as SelectionNode,\n resolvers,\n variableValues,\n );\n\n if (include?.if === false) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Determines if a fragment is applicable to the given type.\n */\nfunction doesFragmentConditionMatch(\n fragment: FragmentDefinitionNode | InlineFragmentNode,\n typeName: string,\n resolvers: Resolvers,\n): boolean {\n const typeConditionNode = fragment.typeCondition;\n if (!typeConditionNode) {\n return true;\n }\n\n const conditionalType = typeNameFromAST(typeConditionNode);\n\n if (conditionalType === typeName) {\n return true;\n }\n\n const subTypes = getSubTypes(resolvers, new Set(), conditionalType);\n\n return subTypes.has(typeName);\n}\n\nfunction getSubTypes(\n resolvers: Resolvers,\n abstractTypes: Set<string>,\n conditionalType: string,\n): Set<string> {\n const resolver = resolvers[conditionalType];\n if (isInterfaceResolverType(resolver)) {\n const result = resolver.__implementedBy.reduce(\n (acc: string[], item: string) => {\n if (!abstractTypes.has(item)) {\n const newTypes = new Set([...abstractTypes, item]);\n\n acc.push(...abstractTypes, ...getSubTypes(resolvers, newTypes, item));\n }\n return acc;\n },\n [],\n );\n\n return new Set([...result]);\n }\n\n if (isUnionResolverType(resolver)) {\n const result = resolver.__types.reduce((acc: string[], item: string) => {\n if (!abstractTypes.has(item)) {\n const newTypes = new Set([...abstractTypes, item]);\n\n acc.push(...abstractTypes, ...getSubTypes(resolvers, newTypes, item));\n }\n return acc;\n }, []);\n\n return new Set([...result]);\n }\n\n return abstractTypes;\n}\n\n/**\n * Implements the logic to compute the key of a given field's entry\n */\nfunction getFieldEntryKey(node: FieldNode): string {\n return node.alias ? node.alias.value : node.name.value;\n}\n\n/**\n * Returns an object containing the `@defer` arguments if a field should be\n * deferred based on the experimental flag, defer directive present and\n * not disabled by the \"if\" argument.\n */\nfunction getDeferValues(\n resolvers: Resolvers,\n operation: OperationDefinitionNode,\n variableValues: { [variable: string]: unknown },\n node: FragmentSpreadNode | InlineFragmentNode,\n): undefined | { label: string | undefined } {\n const defer = getDirectiveValues(\n GraphQLDeferDirective,\n node,\n resolvers,\n variableValues,\n );\n\n if (!defer) {\n return;\n }\n\n if (defer.if === false) {\n return;\n }\n\n invariant(\n operation.operation !== \"subscription\",\n \"`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.\",\n );\n\n return {\n label: typeof defer.label === \"string\" ? defer.label : undefined,\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n Kind,\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n InlineFragmentNode,\n SelectionNode,\n SelectionSetNode,\n} from \"graphql\";\nimport { getDirectiveValues } from \"./values\";\nimport {\n GraphQLSkipDirective,\n GraphQLIncludeDirective,\n GraphQLDeferDirective,\n} from \"./schema/directives\";\n\nimport { AccumulatorMap } from \"./jsutils/AccumulatorMap\";\nimport invariant from \"invariant\";\nimport { ExecutionContext } from \"./executeWithoutSchema\";\nimport { SchemaFragment } from \"./schema/fragment\";\n\nexport type FieldGroup = ReadonlyArray<FieldNode>;\n\nexport type GroupedFieldSet = Map<string, FieldGroup>;\n\nexport interface PatchFields {\n label: string | undefined;\n groupedFieldSet: GroupedFieldSet;\n}\n\nexport interface FieldsAndPatches {\n groupedFieldSet: GroupedFieldSet;\n patches: Array<PatchFields>;\n}\n\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\nexport function collectFields(\n exeContext: ExecutionContext,\n runtimeTypeName: string,\n): FieldsAndPatches {\n const { operation } = exeContext;\n const groupedFieldSet = new AccumulatorMap<string, FieldNode>();\n const patches: Array<PatchFields> = [];\n collectFieldsImpl(\n exeContext,\n runtimeTypeName,\n operation.selectionSet,\n groupedFieldSet,\n patches,\n new Set(),\n );\n return { groupedFieldSet, patches };\n}\n\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n// eslint-disable-next-line max-params\nexport function collectSubfields(\n exeContext: ExecutionContext,\n returnTypeName: string,\n fieldGroup: FieldGroup,\n): FieldsAndPatches {\n const subGroupedFieldSet = new AccumulatorMap<string, FieldNode>();\n const visitedFragmentNames = new Set<string>();\n\n const subPatches: Array<PatchFields> = [];\n const subFieldsAndPatches = {\n groupedFieldSet: subGroupedFieldSet,\n patches: subPatches,\n };\n\n for (const node of fieldGroup) {\n if (node.selectionSet) {\n collectFieldsImpl(\n exeContext,\n returnTypeName,\n node.selectionSet,\n subGroupedFieldSet,\n subPatches,\n visitedFragmentNames,\n );\n }\n }\n return subFieldsAndPatches;\n}\n\n// eslint-disable-next-line max-params\nfunction collectFieldsImpl(\n exeContext: ExecutionContext,\n runtimeTypeName: string,\n selectionSet: SelectionSetNode,\n groupedFieldSet: AccumulatorMap<string, FieldNode>,\n patches: Array<PatchFields>,\n visitedFragmentNames: Set<string>,\n): void {\n for (const selection of selectionSet.selections) {\n switch (selection.kind) {\n case Kind.FIELD: {\n if (!shouldIncludeNode(exeContext, selection)) {\n continue;\n }\n groupedFieldSet.add(getFieldEntryKey(selection), selection);\n break;\n }\n case Kind.INLINE_FRAGMENT: {\n if (\n !shouldIncludeNode(exeContext, selection) ||\n !doesFragmentConditionMatch(\n selection,\n runtimeTypeName,\n exeContext.schemaTypes,\n )\n ) {\n continue;\n }\n\n const defer = getDeferValues(exeContext, selection);\n\n if (defer) {\n const patchFields = new AccumulatorMap<string, FieldNode>();\n collectFieldsImpl(\n exeContext,\n runtimeTypeName,\n selection.selectionSet,\n patchFields,\n patches,\n visitedFragmentNames,\n );\n patches.push({\n label: defer.label,\n groupedFieldSet: patchFields,\n });\n } else {\n collectFieldsImpl(\n exeContext,\n runtimeTypeName,\n selection.selectionSet,\n groupedFieldSet,\n patches,\n visitedFragmentNames,\n );\n }\n break;\n }\n case Kind.FRAGMENT_SPREAD: {\n const fragName = selection.name.value;\n\n if (!shouldIncludeNode(exeContext, selection)) {\n continue;\n }\n\n const defer = getDeferValues(exeContext, selection);\n if (visitedFragmentNames.has(fragName) && !defer) {\n continue;\n }\n\n const fragment = exeContext.fragments[fragName];\n if (\n fragment == null ||\n !doesFragmentConditionMatch(\n fragment,\n runtimeTypeName,\n exeContext.schemaTypes,\n )\n ) {\n continue;\n }\n\n if (!defer) {\n visitedFragmentNames.add(fragName);\n }\n\n if (defer) {\n const patchFields = new AccumulatorMap<string, FieldNode>();\n collectFieldsImpl(\n exeContext,\n runtimeTypeName,\n fragment.selectionSet,\n patchFields,\n patches,\n visitedFragmentNames,\n );\n patches.push({\n label: defer.label,\n groupedFieldSet: patchFields,\n });\n } else {\n collectFieldsImpl(\n exeContext,\n runtimeTypeName,\n fragment.selectionSet,\n groupedFieldSet,\n patches,\n visitedFragmentNames,\n );\n }\n break;\n }\n }\n }\n}\n\n/**\n * Determines if a field should be included based on the @include and @skip\n * directives, where @skip has higher precedence than @include.\n */\nfunction shouldIncludeNode(\n exeContext: ExecutionContext,\n node: SelectionNode,\n): boolean {\n if (!node.directives?.length) {\n return true;\n }\n\n const skip = getDirectiveValues(exeContext, GraphQLSkipDirective, node);\n if (skip?.if === true) {\n return false;\n }\n\n const include = getDirectiveValues(exeContext, GraphQLIncludeDirective, node);\n if (include?.if === false) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Determines if a fragment is applicable to the given type.\n */\nfunction doesFragmentConditionMatch(\n fragment: FragmentDefinitionNode | InlineFragmentNode,\n typeName: string,\n // resolvers: Resolvers,\n schemaFragment: SchemaFragment,\n): boolean {\n const typeConditionNode = fragment.typeCondition;\n if (!typeConditionNode) {\n return true;\n }\n\n const conditionalTypeName = typeConditionNode.name.value;\n\n if (conditionalTypeName === typeName) {\n return true;\n }\n if (schemaFragment.isAbstractType(conditionalTypeName)) {\n return schemaFragment.isSubType(conditionalTypeName, typeName);\n }\n return false;\n}\n\n/**\n * Implements the logic to compute the key of a given field's entry\n */\nfunction getFieldEntryKey(node: FieldNode): string {\n return node.alias ? node.alias.value : node.name.value;\n}\n\n/**\n * Returns an object containing the `@defer` arguments if a field should be\n * deferred based on the experimental flag, defer directive present and\n * not disabled by the \"if\" argument.\n */\nfunction getDeferValues(\n exeContext: ExecutionContext,\n node: FragmentSpreadNode | InlineFragmentNode,\n): undefined | { label: string | undefined } {\n const defer = getDirectiveValues(exeContext, GraphQLDeferDirective, node);\n\n if (!defer) {\n return;\n }\n\n if (defer.if === false) {\n return;\n }\n\n invariant(\n exeContext.operation.operation !== \"subscription\",\n \"`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.\",\n );\n\n return {\n label: typeof defer.label === \"string\" ? defer.label : undefined,\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["invariant"]
7
7
  }
@@ -1,23 +1,21 @@
1
1
  // src/collectFields.ts
2
- import { Kind } from "graphql";
2
+ import {
3
+ Kind
4
+ } from "graphql";
3
5
  import { getDirectiveValues } from "./values.mjs";
4
6
  import {
5
7
  GraphQLSkipDirective,
6
8
  GraphQLIncludeDirective,
7
9
  GraphQLDeferDirective
8
- } from "./directives.mjs";
9
- import { typeNameFromAST } from "./utilities/typeNameFromAST.mjs";
10
- import { isUnionResolverType, isInterfaceResolverType } from "./definition.mjs";
10
+ } from "./schema/directives.mjs";
11
11
  import { AccumulatorMap } from "./jsutils/AccumulatorMap.mjs";
12
12
  import invariant from "invariant";
13
- function collectFields(resolvers, fragments, variableValues, runtimeTypeName, operation) {
13
+ function collectFields(exeContext, runtimeTypeName) {
14
+ const { operation } = exeContext;
14
15
  const groupedFieldSet = new AccumulatorMap();
15
16
  const patches = [];
16
17
  collectFieldsImpl(
17
- resolvers,
18
- fragments,
19
- variableValues,
20
- operation,
18
+ exeContext,
21
19
  runtimeTypeName,
22
20
  operation.selectionSet,
23
21
  groupedFieldSet,
@@ -26,7 +24,7 @@ function collectFields(resolvers, fragments, variableValues, runtimeTypeName, op
26
24
  );
27
25
  return { groupedFieldSet, patches };
28
26
  }
29
- function collectSubfields(resolvers, fragments, variableValues, operation, returnTypeName, fieldGroup) {
27
+ function collectSubfields(exeContext, returnTypeName, fieldGroup) {
30
28
  const subGroupedFieldSet = new AccumulatorMap();
31
29
  const visitedFragmentNames = /* @__PURE__ */ new Set();
32
30
  const subPatches = [];
@@ -37,10 +35,7 @@ function collectSubfields(resolvers, fragments, variableValues, operation, retur
37
35
  for (const node of fieldGroup) {
38
36
  if (node.selectionSet) {
39
37
  collectFieldsImpl(
40
- resolvers,
41
- fragments,
42
- variableValues,
43
- operation,
38
+ exeContext,
44
39
  returnTypeName,
45
40
  node.selectionSet,
46
41
  subGroupedFieldSet,
@@ -51,33 +46,29 @@ function collectSubfields(resolvers, fragments, variableValues, operation, retur
51
46
  }
52
47
  return subFieldsAndPatches;
53
48
  }
54
- function collectFieldsImpl(resolvers, fragments, variableValues, operation, runtimeTypeName, selectionSet, groupedFieldSet, patches, visitedFragmentNames) {
49
+ function collectFieldsImpl(exeContext, runtimeTypeName, selectionSet, groupedFieldSet, patches, visitedFragmentNames) {
55
50
  for (const selection of selectionSet.selections) {
56
51
  switch (selection.kind) {
57
52
  case Kind.FIELD: {
58
- if (!shouldIncludeNode(resolvers, variableValues, selection)) {
53
+ if (!shouldIncludeNode(exeContext, selection)) {
59
54
  continue;
60
55
  }
61
56
  groupedFieldSet.add(getFieldEntryKey(selection), selection);
62
57
  break;
63
58
  }
64
59
  case Kind.INLINE_FRAGMENT: {
65
- if (!shouldIncludeNode(resolvers, variableValues, selection) || !doesFragmentConditionMatch(selection, runtimeTypeName, resolvers)) {
60
+ if (!shouldIncludeNode(exeContext, selection) || !doesFragmentConditionMatch(
61
+ selection,
62
+ runtimeTypeName,
63
+ exeContext.schemaTypes
64
+ )) {
66
65
  continue;
67
66
  }
68
- const defer = getDeferValues(
69
- resolvers,
70
- operation,
71
- variableValues,
72
- selection
73
- );
67
+ const defer = getDeferValues(exeContext, selection);
74
68
  if (defer) {
75
69
  const patchFields = new AccumulatorMap();
76
70
  collectFieldsImpl(
77
- resolvers,
78
- fragments,
79
- variableValues,
80
- operation,
71
+ exeContext,
81
72
  runtimeTypeName,
82
73
  selection.selectionSet,
83
74
  patchFields,
@@ -90,10 +81,7 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
90
81
  });
91
82
  } else {
92
83
  collectFieldsImpl(
93
- resolvers,
94
- fragments,
95
- variableValues,
96
- operation,
84
+ exeContext,
97
85
  runtimeTypeName,
98
86
  selection.selectionSet,
99
87
  groupedFieldSet,
@@ -105,20 +93,19 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
105
93
  }
106
94
  case Kind.FRAGMENT_SPREAD: {
107
95
  const fragName = selection.name.value;
108
- if (!shouldIncludeNode(resolvers, variableValues, selection)) {
96
+ if (!shouldIncludeNode(exeContext, selection)) {
109
97
  continue;
110
98
  }
111
- const defer = getDeferValues(
112
- resolvers,
113
- operation,
114
- variableValues,
115
- selection
116
- );
99
+ const defer = getDeferValues(exeContext, selection);
117
100
  if (visitedFragmentNames.has(fragName) && !defer) {
118
101
  continue;
119
102
  }
120
- const fragment = fragments[fragName];
121
- if (fragment == null || !doesFragmentConditionMatch(fragment, runtimeTypeName, resolvers)) {
103
+ const fragment = exeContext.fragments[fragName];
104
+ if (fragment == null || !doesFragmentConditionMatch(
105
+ fragment,
106
+ runtimeTypeName,
107
+ exeContext.schemaTypes
108
+ )) {
122
109
  continue;
123
110
  }
124
111
  if (!defer) {
@@ -127,10 +114,7 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
127
114
  if (defer) {
128
115
  const patchFields = new AccumulatorMap();
129
116
  collectFieldsImpl(
130
- resolvers,
131
- fragments,
132
- variableValues,
133
- operation,
117
+ exeContext,
134
118
  runtimeTypeName,
135
119
  fragment.selectionSet,
136
120
  patchFields,
@@ -143,10 +127,7 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
143
127
  });
144
128
  } else {
145
129
  collectFieldsImpl(
146
- resolvers,
147
- fragments,
148
- variableValues,
149
- operation,
130
+ exeContext,
150
131
  runtimeTypeName,
151
132
  fragment.selectionSet,
152
133
  groupedFieldSet,
@@ -159,80 +140,40 @@ function collectFieldsImpl(resolvers, fragments, variableValues, operation, runt
159
140
  }
160
141
  }
161
142
  }
162
- function shouldIncludeNode(resolvers, variableValues, node) {
143
+ function shouldIncludeNode(exeContext, node) {
163
144
  var _a;
164
145
  if (!((_a = node.directives) == null ? void 0 : _a.length)) {
165
146
  return true;
166
147
  }
167
- const skip = getDirectiveValues(
168
- GraphQLSkipDirective,
169
- node,
170
- resolvers,
171
- variableValues
172
- );
148
+ const skip = getDirectiveValues(exeContext, GraphQLSkipDirective, node);
173
149
  if ((skip == null ? void 0 : skip.if) === true) {
174
150
  return false;
175
151
  }
176
- const include = getDirectiveValues(
177
- GraphQLIncludeDirective,
178
- node,
179
- resolvers,
180
- variableValues
181
- );
152
+ const include = getDirectiveValues(exeContext, GraphQLIncludeDirective, node);
182
153
  if ((include == null ? void 0 : include.if) === false) {
183
154
  return false;
184
155
  }
185
156
  return true;
186
157
  }
187
- function doesFragmentConditionMatch(fragment, typeName, resolvers) {
158
+ function doesFragmentConditionMatch(fragment, typeName, schemaFragment) {
188
159
  const typeConditionNode = fragment.typeCondition;
189
160
  if (!typeConditionNode) {
190
161
  return true;
191
162
  }
192
- const conditionalType = typeNameFromAST(typeConditionNode);
193
- if (conditionalType === typeName) {
163
+ const conditionalTypeName = typeConditionNode.name.value;
164
+ if (conditionalTypeName === typeName) {
194
165
  return true;
195
166
  }
196
- const subTypes = getSubTypes(resolvers, /* @__PURE__ */ new Set(), conditionalType);
197
- return subTypes.has(typeName);
198
- }
199
- function getSubTypes(resolvers, abstractTypes, conditionalType) {
200
- const resolver = resolvers[conditionalType];
201
- if (isInterfaceResolverType(resolver)) {
202
- const result = resolver.__implementedBy.reduce(
203
- (acc, item) => {
204
- if (!abstractTypes.has(item)) {
205
- const newTypes = /* @__PURE__ */ new Set([...abstractTypes, item]);
206
- acc.push(...abstractTypes, ...getSubTypes(resolvers, newTypes, item));
207
- }
208
- return acc;
209
- },
210
- []
211
- );
212
- return /* @__PURE__ */ new Set([...result]);
213
- }
214
- if (isUnionResolverType(resolver)) {
215
- const result = resolver.__types.reduce((acc, item) => {
216
- if (!abstractTypes.has(item)) {
217
- const newTypes = /* @__PURE__ */ new Set([...abstractTypes, item]);
218
- acc.push(...abstractTypes, ...getSubTypes(resolvers, newTypes, item));
219
- }
220
- return acc;
221
- }, []);
222
- return /* @__PURE__ */ new Set([...result]);
167
+ if (schemaFragment.isAbstractType(conditionalTypeName)) {
168
+ return schemaFragment.isSubType(conditionalTypeName, typeName);
223
169
  }
224
- return abstractTypes;
170
+ return false;
225
171
  }
226
172
  function getFieldEntryKey(node) {
227
173
  return node.alias ? node.alias.value : node.name.value;
228
174
  }
229
- function getDeferValues(resolvers, operation, variableValues, node) {
230
- const defer = getDirectiveValues(
231
- GraphQLDeferDirective,
232
- node,
233
- resolvers,
234
- variableValues
235
- );
175
+ function getDeferValues(exeContext, node) {
176
+ const defer = getDirectiveValues(exeContext, GraphQLDeferDirective, node);
236
177
  if (!defer) {
237
178
  return;
238
179
  }
@@ -240,7 +181,7 @@ function getDeferValues(resolvers, operation, variableValues, node) {
240
181
  return;
241
182
  }
242
183
  invariant(
243
- operation.operation !== "subscription",
184
+ exeContext.operation.operation !== "subscription",
244
185
  "`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`."
245
186
  );
246
187
  return {