@apollo/client 3.8.0-alpha.11 → 3.8.0-alpha.13

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 (205) hide show
  1. package/apollo-client.cjs +594 -397
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/core/ApolloClient.d.ts.map +1 -1
  5. package/core/ApolloClient.js.map +1 -1
  6. package/core/ObservableQuery.d.ts +2 -1
  7. package/core/ObservableQuery.d.ts.map +1 -1
  8. package/core/ObservableQuery.js +30 -19
  9. package/core/ObservableQuery.js.map +1 -1
  10. package/core/QueryManager.d.ts +2 -0
  11. package/core/QueryManager.d.ts.map +1 -1
  12. package/core/QueryManager.js +60 -48
  13. package/core/QueryManager.js.map +1 -1
  14. package/core/core.cjs +175 -82
  15. package/core/core.cjs.map +1 -1
  16. package/core/core.cjs.native.js +175 -82
  17. package/core/equalByQuery.d.ts +4 -0
  18. package/core/equalByQuery.d.ts.map +1 -0
  19. package/{react/hooks/compareResults.js → core/equalByQuery.js} +14 -10
  20. package/core/equalByQuery.js.map +1 -0
  21. package/core/index.d.ts +1 -1
  22. package/core/index.d.ts.map +1 -1
  23. package/core/index.js +1 -1
  24. package/core/index.js.map +1 -1
  25. package/errors/errors.cjs +17 -17
  26. package/errors/errors.cjs.map +1 -1
  27. package/errors/errors.cjs.native.js +17 -17
  28. package/errors/index.d.ts +24 -8
  29. package/errors/index.d.ts.map +1 -1
  30. package/errors/index.js +17 -19
  31. package/errors/index.js.map +1 -1
  32. package/invariantErrorCodes.js +29 -34
  33. package/link/batch-http/batch-http.cjs +23 -2
  34. package/link/batch-http/batch-http.cjs.map +1 -1
  35. package/link/batch-http/batch-http.cjs.native.js +23 -2
  36. package/link/batch-http/batchHttpLink.d.ts.map +1 -1
  37. package/link/batch-http/batchHttpLink.js +7 -2
  38. package/link/batch-http/batchHttpLink.js.map +1 -1
  39. package/link/core/types.d.ts +4 -0
  40. package/link/core/types.d.ts.map +1 -1
  41. package/link/core/types.js.map +1 -1
  42. package/link/http/createHttpLink.d.ts.map +1 -1
  43. package/link/http/createHttpLink.js +21 -20
  44. package/link/http/createHttpLink.js.map +1 -1
  45. package/link/http/http.cjs +59 -30
  46. package/link/http/http.cjs.map +1 -1
  47. package/link/http/http.cjs.native.js +59 -30
  48. package/link/http/parseAndCheckHttpResponse.d.ts.map +1 -1
  49. package/link/http/parseAndCheckHttpResponse.js +34 -14
  50. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  51. package/link/http/selectHttpOptionsAndBody.d.ts.map +1 -1
  52. package/link/http/selectHttpOptionsAndBody.js +2 -1
  53. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  54. package/link/persisted-queries/index.d.ts.map +1 -1
  55. package/link/persisted-queries/index.js +12 -13
  56. package/link/persisted-queries/index.js.map +1 -1
  57. package/link/persisted-queries/persisted-queries.cjs +12 -13
  58. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  59. package/link/persisted-queries/persisted-queries.cjs.native.js +12 -13
  60. package/link/subscriptions/index.d.ts.map +1 -1
  61. package/link/subscriptions/index.js +10 -5
  62. package/link/subscriptions/index.js.map +1 -1
  63. package/link/subscriptions/subscriptions.cjs +9 -4
  64. package/link/subscriptions/subscriptions.cjs.map +1 -1
  65. package/link/subscriptions/subscriptions.cjs.native.js +9 -4
  66. package/link/utils/filterOperationVariables.d.ts +5 -0
  67. package/link/utils/filterOperationVariables.d.ts.map +1 -0
  68. package/link/utils/filterOperationVariables.js +18 -0
  69. package/link/utils/filterOperationVariables.js.map +1 -0
  70. package/link/utils/index.d.ts +1 -0
  71. package/link/utils/index.d.ts.map +1 -1
  72. package/link/utils/index.js +1 -0
  73. package/link/utils/index.js.map +1 -1
  74. package/link/utils/throwServerError.d.ts +1 -1
  75. package/link/utils/throwServerError.d.ts.map +1 -1
  76. package/link/utils/throwServerError.js.map +1 -1
  77. package/link/utils/utils.cjs +18 -0
  78. package/link/utils/utils.cjs.map +1 -1
  79. package/link/utils/utils.cjs.native.js +18 -0
  80. package/package.json +24 -23
  81. package/react/cache/QuerySubscription.d.ts +11 -4
  82. package/react/cache/QuerySubscription.d.ts.map +1 -1
  83. package/react/cache/QuerySubscription.js +53 -35
  84. package/react/cache/QuerySubscription.js.map +1 -1
  85. package/react/cache/SuspenseCache.d.ts +3 -2
  86. package/react/cache/SuspenseCache.d.ts.map +1 -1
  87. package/react/cache/SuspenseCache.js +6 -7
  88. package/react/cache/SuspenseCache.js.map +1 -1
  89. package/react/context/ApolloConsumer.js +1 -1
  90. package/react/context/ApolloProvider.js +1 -1
  91. package/react/context/context.cjs +2 -2
  92. package/react/context/context.cjs.map +1 -1
  93. package/react/context/context.cjs.native.js +2 -2
  94. package/react/hoc/hoc-utils.js +1 -1
  95. package/react/hoc/hoc.cjs +2 -2
  96. package/react/hoc/hoc.cjs.map +1 -1
  97. package/react/hoc/hoc.cjs.native.js +2 -2
  98. package/react/hoc/withApollo.js +1 -1
  99. package/react/hooks/hooks.cjs +118 -146
  100. package/react/hooks/hooks.cjs.map +1 -1
  101. package/react/hooks/hooks.cjs.native.js +118 -146
  102. package/react/hooks/internal/__use.d.ts +3 -1
  103. package/react/hooks/internal/__use.d.ts.map +1 -1
  104. package/react/hooks/internal/__use.js +16 -12
  105. package/react/hooks/internal/__use.js.map +1 -1
  106. package/react/hooks/useApolloClient.js +1 -1
  107. package/react/hooks/useFragment.d.ts +2 -1
  108. package/react/hooks/useFragment.d.ts.map +1 -1
  109. package/react/hooks/useFragment.js.map +1 -1
  110. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  111. package/react/hooks/useLazyQuery.js +13 -22
  112. package/react/hooks/useLazyQuery.js.map +1 -1
  113. package/react/hooks/useQuery.d.ts +3 -3
  114. package/react/hooks/useQuery.d.ts.map +1 -1
  115. package/react/hooks/useQuery.js +26 -25
  116. package/react/hooks/useQuery.js.map +1 -1
  117. package/react/hooks/useSubscription.d.ts.map +1 -1
  118. package/react/hooks/useSubscription.js +25 -13
  119. package/react/hooks/useSubscription.js.map +1 -1
  120. package/react/hooks/useSuspenseCache.js +1 -1
  121. package/react/hooks/useSuspenseQuery.d.ts +15 -3
  122. package/react/hooks/useSuspenseQuery.d.ts.map +1 -1
  123. package/react/hooks/useSuspenseQuery.js +39 -53
  124. package/react/hooks/useSuspenseQuery.js.map +1 -1
  125. package/react/index.d.ts +1 -1
  126. package/react/index.d.ts.map +1 -1
  127. package/react/index.js +1 -1
  128. package/react/index.js.map +1 -1
  129. package/react/parser/index.js +5 -5
  130. package/react/parser/parser.cjs +5 -5
  131. package/react/parser/parser.cjs.map +1 -1
  132. package/react/parser/parser.cjs.native.js +5 -5
  133. package/react/react.cjs +58 -54
  134. package/react/react.cjs.map +1 -1
  135. package/react/react.cjs.native.js +58 -54
  136. package/react/types/types.d.ts +2 -3
  137. package/react/types/types.d.ts.map +1 -1
  138. package/react/types/types.js.map +1 -1
  139. package/testing/core/core.cjs +1 -1
  140. package/testing/core/core.cjs.map +1 -1
  141. package/testing/core/core.cjs.native.js +1 -1
  142. package/testing/core/mocking/mockLink.js +1 -1
  143. package/testing/core/mocking/mockSubscriptionLink.d.ts +1 -1
  144. package/testing/react/MockedProvider.d.ts +1 -1
  145. package/testing/react/MockedProvider.d.ts.map +1 -1
  146. package/testing/react/MockedProvider.js +7 -6
  147. package/testing/react/MockedProvider.js.map +1 -1
  148. package/testing/testing.cjs +8 -124
  149. package/testing/testing.cjs.map +1 -1
  150. package/testing/testing.cjs.native.js +8 -124
  151. package/utilities/common/incrementalResult.d.ts +2 -1
  152. package/utilities/common/incrementalResult.d.ts.map +1 -1
  153. package/utilities/common/incrementalResult.js +4 -0
  154. package/utilities/common/incrementalResult.js.map +1 -1
  155. package/utilities/common/mergeOptions.d.ts +1 -1
  156. package/utilities/common/mergeOptions.d.ts.map +1 -1
  157. package/utilities/common/mergeOptions.js.map +1 -1
  158. package/utilities/common/objects.d.ts +1 -0
  159. package/utilities/common/objects.d.ts.map +1 -1
  160. package/utilities/common/objects.js +6 -0
  161. package/utilities/common/objects.js.map +1 -1
  162. package/utilities/common/omitDeep.d.ts +3 -0
  163. package/utilities/common/omitDeep.d.ts.map +1 -0
  164. package/utilities/common/omitDeep.js +42 -0
  165. package/utilities/common/omitDeep.js.map +1 -0
  166. package/utilities/common/stripTypename.d.ts +2 -0
  167. package/utilities/common/stripTypename.d.ts.map +1 -0
  168. package/utilities/common/stripTypename.js +5 -0
  169. package/utilities/common/stripTypename.js.map +1 -0
  170. package/utilities/graphql/directives.js +4 -4
  171. package/utilities/graphql/fragments.js +3 -3
  172. package/utilities/graphql/getFromAST.js +8 -8
  173. package/utilities/graphql/storeUtils.d.ts.map +1 -1
  174. package/utilities/graphql/storeUtils.js +2 -1
  175. package/utilities/graphql/storeUtils.js.map +1 -1
  176. package/utilities/graphql/transform.d.ts.map +1 -1
  177. package/utilities/graphql/transform.js +26 -16
  178. package/utilities/graphql/transform.js.map +1 -1
  179. package/utilities/index.d.ts +5 -0
  180. package/utilities/index.d.ts.map +1 -1
  181. package/utilities/index.js +3 -0
  182. package/utilities/index.js.map +1 -1
  183. package/utilities/promises/decoration.d.ts +2 -0
  184. package/utilities/promises/decoration.d.ts.map +1 -1
  185. package/utilities/promises/decoration.js +12 -0
  186. package/utilities/promises/decoration.js.map +1 -1
  187. package/utilities/types/DeepOmit.d.ts +10 -0
  188. package/utilities/types/DeepOmit.d.ts.map +1 -0
  189. package/utilities/types/DeepOmit.js +2 -0
  190. package/utilities/types/DeepOmit.js.map +1 -0
  191. package/utilities/types/DeepPartial.d.ts +12 -0
  192. package/utilities/types/DeepPartial.d.ts.map +1 -0
  193. package/utilities/types/DeepPartial.js +2 -0
  194. package/utilities/types/DeepPartial.js.map +1 -0
  195. package/utilities/types/Primitive.d.ts +2 -0
  196. package/utilities/types/Primitive.d.ts.map +1 -0
  197. package/utilities/types/Primitive.js +2 -0
  198. package/utilities/types/Primitive.js.map +1 -0
  199. package/utilities/utilities.cjs +141 -31
  200. package/utilities/utilities.cjs.map +1 -1
  201. package/utilities/utilities.cjs.native.js +141 -31
  202. package/version.js +1 -1
  203. package/react/hooks/compareResults.d.ts +0 -3
  204. package/react/hooks/compareResults.d.ts.map +0 -1
  205. package/react/hooks/compareResults.js.map +0 -1
@@ -8,12 +8,29 @@ var utilities = require('../../utilities');
8
8
  var utils = require('../utils');
9
9
  var http = require('../http');
10
10
  var batch = require('../batch');
11
+ var graphql = require('graphql');
12
+
13
+ function filterOperationVariables(variables, operation) {
14
+ var result = tslib.__assign({}, variables);
15
+ var unusedNames = new Set(Object.keys(variables));
16
+ graphql.visit(operation.query, {
17
+ Variable: function (node, _key, parent) {
18
+ if (parent && parent.kind !== 'VariableDefinition') {
19
+ unusedNames.delete(node.name.value);
20
+ }
21
+ },
22
+ });
23
+ unusedNames.forEach(function (name) {
24
+ delete result[name];
25
+ });
26
+ return result;
27
+ }
11
28
 
12
29
  var BatchHttpLink = (function (_super) {
13
30
  tslib.__extends(BatchHttpLink, _super);
14
31
  function BatchHttpLink(fetchParams) {
15
32
  var _this = _super.call(this) || this;
16
- var _a = fetchParams || {}, _b = _a.uri, uri = _b === void 0 ? '/graphql' : _b, fetcher = _a.fetch, _c = _a.print, print = _c === void 0 ? http.defaultPrinter : _c, includeExtensions = _a.includeExtensions, preserveHeaderCase = _a.preserveHeaderCase, batchInterval = _a.batchInterval, batchDebounce = _a.batchDebounce, batchMax = _a.batchMax, batchKey = _a.batchKey, requestOptions = tslib.__rest(_a, ["uri", "fetch", "print", "includeExtensions", "preserveHeaderCase", "batchInterval", "batchDebounce", "batchMax", "batchKey"]);
33
+ var _a = fetchParams || {}, _b = _a.uri, uri = _b === void 0 ? '/graphql' : _b, fetcher = _a.fetch, _c = _a.print, print = _c === void 0 ? http.defaultPrinter : _c, includeExtensions = _a.includeExtensions, preserveHeaderCase = _a.preserveHeaderCase, batchInterval = _a.batchInterval, batchDebounce = _a.batchDebounce, batchMax = _a.batchMax, batchKey = _a.batchKey, _d = _a.includeUnusedVariables, includeUnusedVariables = _d === void 0 ? false : _d, requestOptions = tslib.__rest(_a, ["uri", "fetch", "print", "includeExtensions", "preserveHeaderCase", "batchInterval", "batchDebounce", "batchMax", "batchKey", "includeUnusedVariables"]);
17
34
  http.checkFetcher(fetcher);
18
35
  if (!fetcher) {
19
36
  fetcher = fetch;
@@ -57,7 +74,11 @@ var BatchHttpLink = (function (_super) {
57
74
  return utils.fromError(new Error('BatchHttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or enable the `transformOptions.removeClientFields` option.'));
58
75
  }
59
76
  var optsAndBody = operations.map(function (operation, index) {
60
- return http.selectHttpOptionsAndBodyInternal(tslib.__assign(tslib.__assign({}, operation), { query: queries[index] }), print, http.fallbackHttpConfig, linkConfig, contextConfig);
77
+ var result = http.selectHttpOptionsAndBodyInternal(tslib.__assign(tslib.__assign({}, operation), { query: queries[index] }), print, http.fallbackHttpConfig, linkConfig, contextConfig);
78
+ if (result.body.variables && !includeUnusedVariables) {
79
+ result.body.variables = filterOperationVariables(result.body, operation);
80
+ }
81
+ return result;
61
82
  });
62
83
  var loadedBody = optsAndBody.map(function (_a) {
63
84
  var body = _a.body;
@@ -1 +1 @@
1
- {"version":3,"file":"batchHttpLink.d.ts","sourceRoot":"","sources":["../../../src/link/batch-http/batchHttpLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EACL,UAAU,EAGX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAQL,WAAW,EAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,yBAAiB,aAAa,CAAC;IAC7B,KAAY,OAAO,GAAG,IAAI,CACxB,SAAS,CAAC,OAAO,EACjB,UAAU,GAAG,eAAe,GAAG,eAAe,GAAG,UAAU,CAC5D,GAAG,WAAW,CAAC;CACjB;AAMD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,OAAO,CAAC,aAAa,CAAC,CAAU;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAa;gBAEhB,WAAW,CAAC,EAAE,aAAa,CAAC,OAAO;IA6MxC,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;CAGrE"}
1
+ {"version":3,"file":"batchHttpLink.d.ts","sourceRoot":"","sources":["../../../src/link/batch-http/batchHttpLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EACL,UAAU,EAGX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAQL,WAAW,EAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,yBAAiB,aAAa,CAAC;IAC7B,KAAY,OAAO,GAAG,IAAI,CACxB,SAAS,CAAC,OAAO,EACjB,UAAU,GAAG,eAAe,GAAG,eAAe,GAAG,UAAU,CAC5D,GAAG,WAAW,CAAC;CACjB;AAMD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,OAAO,CAAC,aAAa,CAAC,CAAU;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAa;gBAEhB,WAAW,CAAC,EAAE,aAAa,CAAC,OAAO;IAoNxC,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;CAGrE"}
@@ -4,11 +4,12 @@ import { Observable, hasDirectives, removeClientSetsFromDocument } from "../../u
4
4
  import { fromError } from "../utils/index.js";
5
5
  import { serializeFetchParameter, selectURI, parseAndCheckHttpResponse, checkFetcher, selectHttpOptionsAndBodyInternal, defaultPrinter, fallbackHttpConfig, createSignalIfSupported, } from "../http/index.js";
6
6
  import { BatchLink } from "../batch/index.js";
7
+ import { filterOperationVariables } from "../utils/filterOperationVariables.js";
7
8
  var BatchHttpLink = (function (_super) {
8
9
  __extends(BatchHttpLink, _super);
9
10
  function BatchHttpLink(fetchParams) {
10
11
  var _this = _super.call(this) || this;
11
- var _a = fetchParams || {}, _b = _a.uri, uri = _b === void 0 ? '/graphql' : _b, fetcher = _a.fetch, _c = _a.print, print = _c === void 0 ? defaultPrinter : _c, includeExtensions = _a.includeExtensions, preserveHeaderCase = _a.preserveHeaderCase, batchInterval = _a.batchInterval, batchDebounce = _a.batchDebounce, batchMax = _a.batchMax, batchKey = _a.batchKey, requestOptions = __rest(_a, ["uri", "fetch", "print", "includeExtensions", "preserveHeaderCase", "batchInterval", "batchDebounce", "batchMax", "batchKey"]);
12
+ var _a = fetchParams || {}, _b = _a.uri, uri = _b === void 0 ? '/graphql' : _b, fetcher = _a.fetch, _c = _a.print, print = _c === void 0 ? defaultPrinter : _c, includeExtensions = _a.includeExtensions, preserveHeaderCase = _a.preserveHeaderCase, batchInterval = _a.batchInterval, batchDebounce = _a.batchDebounce, batchMax = _a.batchMax, batchKey = _a.batchKey, _d = _a.includeUnusedVariables, includeUnusedVariables = _d === void 0 ? false : _d, requestOptions = __rest(_a, ["uri", "fetch", "print", "includeExtensions", "preserveHeaderCase", "batchInterval", "batchDebounce", "batchMax", "batchKey", "includeUnusedVariables"]);
12
13
  checkFetcher(fetcher);
13
14
  if (!fetcher) {
14
15
  fetcher = fetch;
@@ -52,7 +53,11 @@ var BatchHttpLink = (function (_super) {
52
53
  return fromError(new Error('BatchHttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or enable the `transformOptions.removeClientFields` option.'));
53
54
  }
54
55
  var optsAndBody = operations.map(function (operation, index) {
55
- return selectHttpOptionsAndBodyInternal(__assign(__assign({}, operation), { query: queries[index] }), print, fallbackHttpConfig, linkConfig, contextConfig);
56
+ var result = selectHttpOptionsAndBodyInternal(__assign(__assign({}, operation), { query: queries[index] }), print, fallbackHttpConfig, linkConfig, contextConfig);
57
+ if (result.body.variables && !includeUnusedVariables) {
58
+ result.body.variables = filterOperationVariables(result.body, operation);
59
+ }
60
+ return result;
56
61
  });
57
62
  var loadedBody = optsAndBody.map(function (_a) {
58
63
  var body = _a.body;
@@ -1 +1 @@
1
- {"version":3,"file":"batchHttpLink.js","sourceRoot":"","sources":["../../../src/link/batch-http/batchHttpLink.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApolloLink, Operation, FetchResult } from '../core';\nimport {\n Observable,\n hasDirectives,\n removeClientSetsFromDocument\n} from '../../utilities';\nimport { fromError } from '../utils';\nimport {\n serializeFetchParameter,\n selectURI,\n parseAndCheckHttpResponse,\n checkFetcher,\n selectHttpOptionsAndBodyInternal,\n defaultPrinter,\n fallbackHttpConfig,\n HttpOptions,\n createSignalIfSupported,\n} from '../http';\nimport { BatchLink } from '../batch';\n\nexport namespace BatchHttpLink {\n export type Options = Pick<\n BatchLink.Options,\n 'batchMax' | 'batchDebounce' | 'batchInterval' | 'batchKey'\n > & HttpOptions;\n}\n\n/**\n * Transforms Operation for into HTTP results.\n * context can include the headers property, which will be passed to the fetch function\n */\nexport class BatchHttpLink extends ApolloLink {\n private batchDebounce?: boolean;\n private batchInterval: number;\n private batchMax: number;\n private batcher: ApolloLink;\n\n constructor(fetchParams?: BatchHttpLink.Options) {\n super();\n\n let {\n uri = '/graphql',\n // use default global fetch if nothing is passed in\n fetch: fetcher,\n print = defaultPrinter,\n includeExtensions,\n preserveHeaderCase,\n batchInterval,\n batchDebounce,\n batchMax,\n batchKey,\n ...requestOptions\n } = fetchParams || ({} as BatchHttpLink.Options);\n\n // dev warnings to ensure fetch is present\n checkFetcher(fetcher);\n\n //fetcher is set here rather than the destructuring to ensure fetch is\n //declared before referencing it. Reference in the destructuring would cause\n //a ReferenceError\n if (!fetcher) {\n fetcher = fetch;\n }\n\n const linkConfig = {\n http: { includeExtensions, preserveHeaderCase },\n options: requestOptions.fetchOptions,\n credentials: requestOptions.credentials,\n headers: requestOptions.headers,\n };\n\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval || 10;\n this.batchMax = batchMax || 10;\n\n const batchHandler = (operations: Operation[]) => {\n const chosenURI = selectURI(operations[0], uri);\n\n const context = operations[0].getContext();\n\n const clientAwarenessHeaders: {\n 'apollographql-client-name'?: string;\n 'apollographql-client-version'?: string;\n } = {};\n if (context.clientAwareness) {\n const { name, version } = context.clientAwareness;\n if (name) {\n clientAwarenessHeaders['apollographql-client-name'] = name;\n }\n if (version) {\n clientAwarenessHeaders['apollographql-client-version'] = version;\n }\n }\n\n const contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: { ...clientAwarenessHeaders, ...context.headers },\n };\n\n const queries = operations.map(({ query }) => {\n if (hasDirectives(['client'], query)) {\n return removeClientSetsFromDocument(query);\n }\n\n return query;\n });\n\n // If we have a query that returned `null` after removing client-only\n // fields, it indicates a query that is using all client-only fields.\n if (queries.some(query => !query)) {\n return fromError<FetchResult[]>(\n new Error(\n 'BatchHttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or enable the `transformOptions.removeClientFields` option.'\n )\n );\n }\n\n //uses fallback, link, and then context to build options\n const optsAndBody = operations.map((operation, index) =>\n selectHttpOptionsAndBodyInternal(\n { ...operation, query: queries[index]! },\n print,\n fallbackHttpConfig,\n linkConfig,\n contextConfig,\n ),\n );\n\n const loadedBody = optsAndBody.map(({ body }) => body);\n const options = optsAndBody[0].options;\n\n // There's no spec for using GET with batches.\n if (options.method === 'GET') {\n return fromError<FetchResult[]>(\n new Error('apollo-link-batch-http does not support GET requests'),\n );\n }\n\n try {\n (options as any).body = serializeFetchParameter(loadedBody, 'Payload');\n } catch (parseError) {\n return fromError<FetchResult[]>(parseError);\n }\n\n let controller: any;\n if (!(options as any).signal) {\n const { controller: _controller, signal } = createSignalIfSupported();\n controller = _controller;\n if (controller) (options as any).signal = signal;\n }\n\n return new Observable<FetchResult[]>(observer => {\n fetcher!(chosenURI, options)\n .then(response => {\n // Make the raw response available in the context.\n operations.forEach(operation => operation.setContext({ response }));\n return response;\n })\n .then(parseAndCheckHttpResponse(operations))\n .then(result => {\n // we have data and can send it to back up the link chain\n observer.next(result);\n observer.complete();\n return result;\n })\n .catch(err => {\n // fetch was cancelled so its already been cleaned up in the unsubscribe\n if (err.name === 'AbortError') return;\n // if it is a network error, BUT there is graphql result info\n // fire the next observer before calling error\n // this gives apollo-client (and react-apollo) the `graphqlErrors` and `networkErrors`\n // to pass to UI\n // this should only happen if we *also* have data as part of the response key per\n // the spec\n if (err.result && err.result.errors && err.result.data) {\n // if we dont' call next, the UI can only show networkError because AC didn't\n // get andy graphqlErrors\n // this is graphql execution result info (i.e errors and possibly data)\n // this is because there is no formal spec how errors should translate to\n // http status codes. So an auth error (401) could have both data\n // from a public field, errors from a private field, and a status of 401\n // {\n // user { // this will have errors\n // firstName\n // }\n // products { // this is public so will have data\n // cost\n // }\n // }\n //\n // the result of above *could* look like this:\n // {\n // data: { products: [{ cost: \"$10\" }] },\n // errors: [{\n // message: 'your session has timed out',\n // path: []\n // }]\n // }\n // status code of above would be a 401\n // in the UI you want to show data where you can, errors as data where you can\n // and use correct http status codes\n observer.next(err.result);\n }\n\n observer.error(err);\n });\n\n return () => {\n // XXX support canceling this request\n // https://developers.google.com/web/updates/2017/09/abortable-fetch\n if (controller) controller.abort();\n };\n });\n };\n\n batchKey =\n batchKey ||\n ((operation: Operation) => {\n const context = operation.getContext();\n\n const contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: context.headers,\n };\n\n //may throw error if config not serializable\n return selectURI(operation, uri) + JSON.stringify(contextConfig);\n });\n\n this.batcher = new BatchLink({\n batchDebounce: this.batchDebounce,\n batchInterval: this.batchInterval,\n batchMax: this.batchMax,\n batchKey,\n batchHandler,\n });\n }\n\n public request(operation: Operation): Observable<FetchResult> | null {\n return this.batcher.request(operation);\n }\n}\n"]}
1
+ {"version":3,"file":"batchHttpLink.js","sourceRoot":"","sources":["../../../src/link/batch-http/batchHttpLink.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApolloLink, Operation, FetchResult } from '../core';\nimport {\n Observable,\n hasDirectives,\n removeClientSetsFromDocument\n} from '../../utilities';\nimport { fromError } from '../utils';\nimport {\n serializeFetchParameter,\n selectURI,\n parseAndCheckHttpResponse,\n checkFetcher,\n selectHttpOptionsAndBodyInternal,\n defaultPrinter,\n fallbackHttpConfig,\n HttpOptions,\n createSignalIfSupported,\n} from '../http';\nimport { BatchLink } from '../batch';\nimport { filterOperationVariables } from \"../utils/filterOperationVariables\";\n\nexport namespace BatchHttpLink {\n export type Options = Pick<\n BatchLink.Options,\n 'batchMax' | 'batchDebounce' | 'batchInterval' | 'batchKey'\n > & HttpOptions;\n}\n\n/**\n * Transforms Operation for into HTTP results.\n * context can include the headers property, which will be passed to the fetch function\n */\nexport class BatchHttpLink extends ApolloLink {\n private batchDebounce?: boolean;\n private batchInterval: number;\n private batchMax: number;\n private batcher: ApolloLink;\n\n constructor(fetchParams?: BatchHttpLink.Options) {\n super();\n\n let {\n uri = '/graphql',\n // use default global fetch if nothing is passed in\n fetch: fetcher,\n print = defaultPrinter,\n includeExtensions,\n preserveHeaderCase,\n batchInterval,\n batchDebounce,\n batchMax,\n batchKey,\n includeUnusedVariables = false,\n ...requestOptions\n } = fetchParams || ({} as BatchHttpLink.Options);\n\n // dev warnings to ensure fetch is present\n checkFetcher(fetcher);\n\n //fetcher is set here rather than the destructuring to ensure fetch is\n //declared before referencing it. Reference in the destructuring would cause\n //a ReferenceError\n if (!fetcher) {\n fetcher = fetch;\n }\n\n const linkConfig = {\n http: { includeExtensions, preserveHeaderCase },\n options: requestOptions.fetchOptions,\n credentials: requestOptions.credentials,\n headers: requestOptions.headers,\n };\n\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval || 10;\n this.batchMax = batchMax || 10;\n\n const batchHandler = (operations: Operation[]) => {\n const chosenURI = selectURI(operations[0], uri);\n\n const context = operations[0].getContext();\n\n const clientAwarenessHeaders: {\n 'apollographql-client-name'?: string;\n 'apollographql-client-version'?: string;\n } = {};\n if (context.clientAwareness) {\n const { name, version } = context.clientAwareness;\n if (name) {\n clientAwarenessHeaders['apollographql-client-name'] = name;\n }\n if (version) {\n clientAwarenessHeaders['apollographql-client-version'] = version;\n }\n }\n\n const contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: { ...clientAwarenessHeaders, ...context.headers },\n };\n\n const queries = operations.map(({ query }) => {\n if (hasDirectives(['client'], query)) {\n return removeClientSetsFromDocument(query);\n }\n\n return query;\n });\n\n // If we have a query that returned `null` after removing client-only\n // fields, it indicates a query that is using all client-only fields.\n if (queries.some(query => !query)) {\n return fromError<FetchResult[]>(\n new Error(\n 'BatchHttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or enable the `transformOptions.removeClientFields` option.'\n )\n );\n }\n\n //uses fallback, link, and then context to build options\n const optsAndBody = operations.map((operation, index) => {\n const result = selectHttpOptionsAndBodyInternal(\n { ...operation, query: queries[index]! },\n print,\n fallbackHttpConfig,\n linkConfig,\n contextConfig\n );\n\n if (result.body.variables && !includeUnusedVariables) {\n result.body.variables = filterOperationVariables(result.body, operation);\n }\n\n return result;\n });\n\n const loadedBody = optsAndBody.map(({ body }) => body);\n const options = optsAndBody[0].options;\n\n // There's no spec for using GET with batches.\n if (options.method === 'GET') {\n return fromError<FetchResult[]>(\n new Error('apollo-link-batch-http does not support GET requests'),\n );\n }\n\n try {\n (options as any).body = serializeFetchParameter(loadedBody, 'Payload');\n } catch (parseError) {\n return fromError<FetchResult[]>(parseError);\n }\n\n let controller: any;\n if (!(options as any).signal) {\n const { controller: _controller, signal } = createSignalIfSupported();\n controller = _controller;\n if (controller) (options as any).signal = signal;\n }\n\n return new Observable<FetchResult[]>(observer => {\n fetcher!(chosenURI, options)\n .then(response => {\n // Make the raw response available in the context.\n operations.forEach(operation => operation.setContext({ response }));\n return response;\n })\n .then(parseAndCheckHttpResponse(operations))\n .then(result => {\n // we have data and can send it to back up the link chain\n observer.next(result);\n observer.complete();\n return result;\n })\n .catch(err => {\n // fetch was cancelled so its already been cleaned up in the unsubscribe\n if (err.name === 'AbortError') return;\n // if it is a network error, BUT there is graphql result info\n // fire the next observer before calling error\n // this gives apollo-client (and react-apollo) the `graphqlErrors` and `networkErrors`\n // to pass to UI\n // this should only happen if we *also* have data as part of the response key per\n // the spec\n if (err.result && err.result.errors && err.result.data) {\n // if we dont' call next, the UI can only show networkError because AC didn't\n // get andy graphqlErrors\n // this is graphql execution result info (i.e errors and possibly data)\n // this is because there is no formal spec how errors should translate to\n // http status codes. So an auth error (401) could have both data\n // from a public field, errors from a private field, and a status of 401\n // {\n // user { // this will have errors\n // firstName\n // }\n // products { // this is public so will have data\n // cost\n // }\n // }\n //\n // the result of above *could* look like this:\n // {\n // data: { products: [{ cost: \"$10\" }] },\n // errors: [{\n // message: 'your session has timed out',\n // path: []\n // }]\n // }\n // status code of above would be a 401\n // in the UI you want to show data where you can, errors as data where you can\n // and use correct http status codes\n observer.next(err.result);\n }\n\n observer.error(err);\n });\n\n return () => {\n // XXX support canceling this request\n // https://developers.google.com/web/updates/2017/09/abortable-fetch\n if (controller) controller.abort();\n };\n });\n };\n\n batchKey =\n batchKey ||\n ((operation: Operation) => {\n const context = operation.getContext();\n\n const contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: context.headers,\n };\n\n //may throw error if config not serializable\n return selectURI(operation, uri) + JSON.stringify(contextConfig);\n });\n\n this.batcher = new BatchLink({\n batchDebounce: this.batchDebounce,\n batchInterval: this.batchInterval,\n batchMax: this.batchMax,\n batchKey,\n batchHandler,\n });\n }\n\n public request(operation: Operation): Observable<FetchResult> | null {\n return this.batcher.request(operation);\n }\n}\n"]}
@@ -25,6 +25,10 @@ export interface ExecutionPatchIncrementalResult<TData = Record<string, any>, TE
25
25
  errors?: never;
26
26
  extensions?: never;
27
27
  }
28
+ export interface ApolloPayloadResult<TData = Record<string, any>, TExtensions = Record<string, any>> {
29
+ payload: SingleExecutionResult | ExecutionPatchResult | null;
30
+ errors?: ReadonlyArray<Error | string>;
31
+ }
28
32
  export type ExecutionPatchResult<TData = Record<string, any>, TExtensions = Record<string, any>> = ExecutionPatchInitialResult<TData, TExtensions> | ExecutionPatchIncrementalResult<TData, TExtensions>;
29
33
  export interface GraphQLRequest<TVariables = Record<string, any>> {
30
34
  query: DocumentNode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"","sourcesContent":["import { DocumentNode, ExecutionResult, GraphQLError } from \"graphql\";\nimport { DefaultContext } from \"../../core\";\nexport { DocumentNode };\n\nimport { Observable } from \"../../utilities\";\n\nexport type Path = ReadonlyArray<string | number>;\n\ninterface ExecutionPatchResultBase {\n hasNext?: boolean;\n}\n\nexport interface ExecutionPatchInitialResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // if data is present, incremental is not\n data: TData | null | undefined;\n incremental?: never;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface IncrementalPayload<\n TData,\n TExtensions,\n> {\n // data and path must both be present\n // https://github.com/graphql/graphql-spec/pull/742/files#diff-98d0cd153b72b63c417ad4238e8cc0d3385691ccbde7f7674bc0d2a718b896ecR288-R293\n data: TData | null;\n label?: string;\n path: Path;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface ExecutionPatchIncrementalResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // the reverse is also true: if incremental is present,\n // data (and errors and extensions) are not\n incremental?: IncrementalPayload<TData, TExtensions>[];\n data?: never;\n // Errors only exist for chunks, not at the top level\n // https://github.com/robrichard/defer-stream-wg/discussions/50#discussioncomment-3466739\n errors?: never;\n extensions?: never;\n}\n\nexport type ExecutionPatchResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | ExecutionPatchInitialResult<TData, TExtensions>\n | ExecutionPatchIncrementalResult<TData, TExtensions>;\n\nexport interface GraphQLRequest<TVariables = Record<string, any>> {\n query: DocumentNode;\n variables?: TVariables;\n operationName?: string;\n context?: DefaultContext;\n extensions?: Record<string, any>;\n}\n\nexport interface Operation {\n query: DocumentNode;\n variables: Record<string, any>;\n operationName: string;\n extensions: Record<string, any>;\n setContext: (context: DefaultContext) => DefaultContext;\n getContext: () => DefaultContext;\n}\n\nexport interface SingleExecutionResult<\n TData = Record<string, any>,\n TContext = DefaultContext,\n TExtensions = Record<string, any>\n> extends ExecutionResult<TData, TExtensions> {\n data?: TData | null;\n context?: TContext;\n}\n\nexport type FetchResult<\n TData = Record<string, any>,\n TContext = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | SingleExecutionResult<TData, TContext, TExtensions>\n | ExecutionPatchResult<TData, TExtensions>;\n\nexport type NextLink = (operation: Operation) => Observable<FetchResult>;\n\nexport type RequestHandler = (\n operation: Operation,\n forward: NextLink\n) => Observable<FetchResult> | null;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"","sourcesContent":["import { DocumentNode, ExecutionResult, GraphQLError } from \"graphql\";\nimport { DefaultContext } from \"../../core\";\nexport { DocumentNode };\n\nimport { Observable } from \"../../utilities\";\n\nexport type Path = ReadonlyArray<string | number>;\n\ninterface ExecutionPatchResultBase {\n hasNext?: boolean;\n}\n\nexport interface ExecutionPatchInitialResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // if data is present, incremental is not\n data: TData | null | undefined;\n incremental?: never;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface IncrementalPayload<TData, TExtensions> {\n // data and path must both be present\n // https://github.com/graphql/graphql-spec/pull/742/files#diff-98d0cd153b72b63c417ad4238e8cc0d3385691ccbde7f7674bc0d2a718b896ecR288-R293\n data: TData | null;\n label?: string;\n path: Path;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface ExecutionPatchIncrementalResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // the reverse is also true: if incremental is present,\n // data (and errors and extensions) are not\n incremental?: IncrementalPayload<TData, TExtensions>[];\n data?: never;\n // Errors only exist for chunks, not at the top level\n // https://github.com/robrichard/defer-stream-wg/discussions/50#discussioncomment-3466739\n errors?: never;\n extensions?: never;\n}\n\nexport interface ApolloPayloadResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> {\n payload: SingleExecutionResult | ExecutionPatchResult | null;\n // Transport layer errors (as distinct from GraphQL or NetworkErrors),\n // these are fatal errors that will include done: true.\n errors?: ReadonlyArray<Error | string>;\n}\n\nexport type ExecutionPatchResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | ExecutionPatchInitialResult<TData, TExtensions>\n | ExecutionPatchIncrementalResult<TData, TExtensions>;\n\nexport interface GraphQLRequest<TVariables = Record<string, any>> {\n query: DocumentNode;\n variables?: TVariables;\n operationName?: string;\n context?: DefaultContext;\n extensions?: Record<string, any>;\n}\n\nexport interface Operation {\n query: DocumentNode;\n variables: Record<string, any>;\n operationName: string;\n extensions: Record<string, any>;\n setContext: (context: DefaultContext) => DefaultContext;\n getContext: () => DefaultContext;\n}\n\nexport interface SingleExecutionResult<\n TData = Record<string, any>,\n TContext = DefaultContext,\n TExtensions = Record<string, any>\n> extends ExecutionResult<TData, TExtensions> {\n data?: TData | null;\n context?: TContext;\n}\n\nexport type FetchResult<\n TData = Record<string, any>,\n TContext = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | SingleExecutionResult<TData, TContext, TExtensions>\n | ExecutionPatchResult<TData, TExtensions>;\n\nexport type NextLink = (operation: Operation) => Observable<FetchResult>;\n\nexport type RequestHandler = (\n operation: Operation,\n forward: NextLink\n) => Observable<FetchResult> | null;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"createHttpLink.d.ts","sourceRoot":"","sources":["../../../src/link/http/createHttpLink.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAUrC,OAAO,EAIL,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAQpC,eAAO,MAAM,cAAc,iBAAiB,WAAW,eA6KtD,CAAC"}
1
+ {"version":3,"file":"createHttpLink.d.ts","sourceRoot":"","sources":["../../../src/link/http/createHttpLink.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAUrC,OAAO,EAIL,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAYpC,eAAO,MAAM,cAAc,iBAAiB,WAAW,eA2KtD,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { __assign, __rest } from "tslib";
2
- import { __DEV__ } from "../../utilities/globals/index.js";
3
- import { visit } from 'graphql';
2
+ import { __DEV__, invariant } from "../../utilities/globals/index.js";
4
3
  import { ApolloLink } from "../core/index.js";
5
4
  import { Observable, hasDirectives } from "../../utilities/index.js";
6
5
  import { serializeFetchParameter } from "./serializeFetchParameter.js";
@@ -10,8 +9,8 @@ import { checkFetcher } from "./checkFetcher.js";
10
9
  import { selectHttpOptionsAndBodyInternal, defaultPrinter, fallbackHttpConfig } from "./selectHttpOptionsAndBody.js";
11
10
  import { createSignalIfSupported } from "./createSignalIfSupported.js";
12
11
  import { rewriteURIForGET } from "./rewriteURIForGET.js";
13
- import { fromError } from "../utils/index.js";
14
- import { maybe, removeClientSetsFromDocument } from "../../utilities/index.js";
12
+ import { fromError, filterOperationVariables } from "../utils/index.js";
13
+ import { maybe, getMainDefinition, removeClientSetsFromDocument } from "../../utilities/index.js";
15
14
  var backupFetch = maybe(function () { return fetch; });
16
15
  export var createHttpLink = function (linkOptions) {
17
16
  if (linkOptions === void 0) { linkOptions = {}; }
@@ -54,20 +53,7 @@ export var createHttpLink = function (linkOptions) {
54
53
  }
55
54
  var _b = selectHttpOptionsAndBodyInternal(operation, print, fallbackHttpConfig, linkConfig, contextConfig), options = _b.options, body = _b.body;
56
55
  if (body.variables && !includeUnusedVariables) {
57
- var unusedNames_1 = new Set(Object.keys(body.variables));
58
- visit(operation.query, {
59
- Variable: function (node, _key, parent) {
60
- if (parent && parent.kind !== 'VariableDefinition') {
61
- unusedNames_1.delete(node.name.value);
62
- }
63
- },
64
- });
65
- if (unusedNames_1.size) {
66
- body.variables = __assign({}, body.variables);
67
- unusedNames_1.forEach(function (name) {
68
- delete body.variables[name];
69
- });
70
- }
56
+ body.variables = filterOperationVariables(body.variables, operation);
71
57
  }
72
58
  var controller;
73
59
  if (!options.signal) {
@@ -79,13 +65,28 @@ export var createHttpLink = function (linkOptions) {
79
65
  var definitionIsMutation = function (d) {
80
66
  return d.kind === 'OperationDefinition' && d.operation === 'mutation';
81
67
  };
68
+ var definitionIsSubscription = function (d) {
69
+ return d.kind === 'OperationDefinition' && d.operation === 'subscription';
70
+ };
71
+ var isSubscription = definitionIsSubscription(getMainDefinition(operation.query));
72
+ var hasDefer = hasDirectives(['defer'], operation.query);
82
73
  if (useGETForQueries &&
83
74
  !operation.query.definitions.some(definitionIsMutation)) {
84
75
  options.method = 'GET';
85
76
  }
86
- if (hasDirectives(['defer'], operation.query)) {
77
+ if (hasDefer || isSubscription) {
87
78
  options.headers = options.headers || {};
88
- options.headers.accept = "multipart/mixed; deferSpec=20220824, application/json";
79
+ var acceptHeader = "multipart/mixed;";
80
+ if (isSubscription && hasDefer) {
81
+ __DEV__ && invariant.warn("Multipart-subscriptions do not support @defer");
82
+ }
83
+ if (isSubscription) {
84
+ acceptHeader += 'boundary=graphql;subscriptionSpec=1.0,application/json';
85
+ }
86
+ else if (hasDefer) {
87
+ acceptHeader += 'deferSpec=20220824,application/json';
88
+ }
89
+ options.headers.accept = acceptHeader;
89
90
  }
90
91
  if (options.method === 'GET') {
91
92
  var _d = rewriteURIForGET(chosenURI, body), newURI = _d.newURI, parseError = _d.parseError;
@@ -1 +1 @@
1
- {"version":3,"file":"createHttpLink.js","sourceRoot":"","sources":["../../../src/link/http/createHttpLink.ts"],"names":[],"mappings":"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","sourcesContent":["import { __DEV__ } from '../../utilities/globals';\n\nimport { visit, DefinitionNode, VariableDefinitionNode } from 'graphql';\n\nimport { ApolloLink } from '../core';\nimport { Observable, hasDirectives } from '../../utilities';\nimport { serializeFetchParameter } from './serializeFetchParameter';\nimport { selectURI } from './selectURI';\nimport {\n handleError,\n readMultipartBody,\n readJsonBody\n} from './parseAndCheckHttpResponse';\nimport { checkFetcher } from './checkFetcher';\nimport {\n selectHttpOptionsAndBodyInternal,\n defaultPrinter,\n fallbackHttpConfig,\n HttpOptions\n} from './selectHttpOptionsAndBody';\nimport { createSignalIfSupported } from './createSignalIfSupported';\nimport { rewriteURIForGET } from './rewriteURIForGET';\nimport { fromError } from '../utils';\nimport { maybe, removeClientSetsFromDocument } from '../../utilities';\n\nconst backupFetch = maybe(() => fetch);\n\nexport const createHttpLink = (linkOptions: HttpOptions = {}) => {\n let {\n uri = '/graphql',\n // use default global fetch if nothing passed in\n fetch: preferredFetch,\n print = defaultPrinter,\n includeExtensions,\n preserveHeaderCase,\n useGETForQueries,\n includeUnusedVariables = false,\n ...requestOptions\n } = linkOptions;\n\n if (__DEV__) {\n // Make sure at least one of preferredFetch, window.fetch, or backupFetch is\n // defined, so requests won't fail at runtime.\n checkFetcher(preferredFetch || backupFetch);\n }\n\n const linkConfig = {\n http: { includeExtensions, preserveHeaderCase },\n options: requestOptions.fetchOptions,\n credentials: requestOptions.credentials,\n headers: requestOptions.headers,\n };\n\n return new ApolloLink(operation => {\n let chosenURI = selectURI(operation, uri);\n\n const context = operation.getContext();\n\n // `apollographql-client-*` headers are automatically set if a\n // `clientAwareness` object is found in the context. These headers are\n // set first, followed by the rest of the headers pulled from\n // `context.headers`. If desired, `apollographql-client-*` headers set by\n // the `clientAwareness` object can be overridden by\n // `apollographql-client-*` headers set in `context.headers`.\n const clientAwarenessHeaders: {\n 'apollographql-client-name'?: string;\n 'apollographql-client-version'?: string;\n } = {};\n\n if (context.clientAwareness) {\n const { name, version } = context.clientAwareness;\n if (name) {\n clientAwarenessHeaders['apollographql-client-name'] = name;\n }\n if (version) {\n clientAwarenessHeaders['apollographql-client-version'] = version;\n }\n }\n\n const contextHeaders = { ...clientAwarenessHeaders, ...context.headers };\n\n const contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: contextHeaders,\n };\n\n if (hasDirectives(['client'], operation.query)) {\n const transformedQuery = removeClientSetsFromDocument(operation.query);\n\n if (!transformedQuery) {\n return fromError(\n new Error(\n 'HttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or set the `transformOptions.removeClientFields` option to `true`.'\n )\n );\n }\n\n operation.query = transformedQuery;\n }\n\n //uses fallback, link, and then context to build options\n const { options, body } = selectHttpOptionsAndBodyInternal(\n operation,\n print,\n fallbackHttpConfig,\n linkConfig,\n contextConfig,\n );\n\n if (body.variables && !includeUnusedVariables) {\n const unusedNames = new Set(Object.keys(body.variables));\n visit(operation.query, {\n Variable(node, _key, parent) {\n // A variable type definition at the top level of a query is not\n // enough to silence server-side errors about the variable being\n // unused, so variable definitions do not count as usage.\n // https://spec.graphql.org/draft/#sec-All-Variables-Used\n if (parent && (parent as VariableDefinitionNode).kind !== 'VariableDefinition') {\n unusedNames.delete(node.name.value);\n }\n },\n });\n if (unusedNames.size) {\n // Make a shallow copy of body.variables (with keys in the same\n // order) and then delete unused variables from the copy.\n body.variables = { ...body.variables };\n unusedNames.forEach(name => {\n delete body.variables![name];\n });\n }\n }\n\n let controller: any;\n if (!(options as any).signal) {\n const { controller: _controller, signal } = createSignalIfSupported();\n controller = _controller;\n if (controller) (options as any).signal = signal;\n }\n\n // If requested, set method to GET if there are no mutations.\n const definitionIsMutation = (d: DefinitionNode) => {\n return d.kind === 'OperationDefinition' && d.operation === 'mutation';\n };\n if (\n useGETForQueries &&\n !operation.query.definitions.some(definitionIsMutation)\n ) {\n options.method = 'GET';\n }\n\n // does not match custom directives beginning with @defer\n if (hasDirectives(['defer'], operation.query)) {\n options.headers = options.headers || {};\n options.headers.accept = \"multipart/mixed; deferSpec=20220824, application/json\";\n }\n\n if (options.method === 'GET') {\n const { newURI, parseError } = rewriteURIForGET(chosenURI, body);\n if (parseError) {\n return fromError(parseError);\n }\n chosenURI = newURI;\n } else {\n try {\n (options as any).body = serializeFetchParameter(body, 'Payload');\n } catch (parseError) {\n return fromError(parseError);\n }\n }\n\n return new Observable(observer => {\n // Prefer linkOptions.fetch (preferredFetch) if provided, and otherwise\n // fall back to the *current* global window.fetch function (see issue\n // #7832), or (if all else fails) the backupFetch function we saved when\n // this module was first evaluated. This last option protects against the\n // removal of window.fetch, which is unlikely but not impossible.\n const currentFetch = preferredFetch || maybe(() => fetch) || backupFetch;\n\n currentFetch!(chosenURI, options)\n .then(response => {\n operation.setContext({ response });\n const ctype = response.headers?.get('content-type');\n\n if (ctype !== null && /^multipart\\/mixed/i.test(ctype)) {\n return readMultipartBody(response, observer);\n } else {\n return readJsonBody(response, operation, observer);\n }\n })\n .catch(err => handleError(err, observer));\n\n return () => {\n // XXX support canceling this request\n // https://developers.google.com/web/updates/2017/09/abortable-fetch\n if (controller) controller.abort();\n };\n });\n });\n};\n"]}
1
+ {"version":3,"file":"createHttpLink.js","sourceRoot":"","sources":["../../../src/link/http/createHttpLink.ts"],"names":[],"mappings":"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","sourcesContent":["import { __DEV__, invariant } from '../../utilities/globals';\n\nimport { DefinitionNode } from 'graphql';\n\nimport { ApolloLink } from '../core';\nimport { Observable, hasDirectives } from '../../utilities';\nimport { serializeFetchParameter } from './serializeFetchParameter';\nimport { selectURI } from './selectURI';\nimport {\n handleError,\n readMultipartBody,\n readJsonBody\n} from './parseAndCheckHttpResponse';\nimport { checkFetcher } from './checkFetcher';\nimport {\n selectHttpOptionsAndBodyInternal,\n defaultPrinter,\n fallbackHttpConfig,\n HttpOptions\n} from './selectHttpOptionsAndBody';\nimport { createSignalIfSupported } from './createSignalIfSupported';\nimport { rewriteURIForGET } from './rewriteURIForGET';\nimport { fromError, filterOperationVariables } from '../utils';\nimport {\n maybe,\n getMainDefinition,\n removeClientSetsFromDocument\n} from '../../utilities';\n\nconst backupFetch = maybe(() => fetch);\n\nexport const createHttpLink = (linkOptions: HttpOptions = {}) => {\n let {\n uri = '/graphql',\n // use default global fetch if nothing passed in\n fetch: preferredFetch,\n print = defaultPrinter,\n includeExtensions,\n preserveHeaderCase,\n useGETForQueries,\n includeUnusedVariables = false,\n ...requestOptions\n } = linkOptions;\n\n if (__DEV__) {\n // Make sure at least one of preferredFetch, window.fetch, or backupFetch is\n // defined, so requests won't fail at runtime.\n checkFetcher(preferredFetch || backupFetch);\n }\n\n const linkConfig = {\n http: { includeExtensions, preserveHeaderCase },\n options: requestOptions.fetchOptions,\n credentials: requestOptions.credentials,\n headers: requestOptions.headers,\n };\n\n return new ApolloLink(operation => {\n let chosenURI = selectURI(operation, uri);\n\n const context = operation.getContext();\n\n // `apollographql-client-*` headers are automatically set if a\n // `clientAwareness` object is found in the context. These headers are\n // set first, followed by the rest of the headers pulled from\n // `context.headers`. If desired, `apollographql-client-*` headers set by\n // the `clientAwareness` object can be overridden by\n // `apollographql-client-*` headers set in `context.headers`.\n const clientAwarenessHeaders: {\n 'apollographql-client-name'?: string;\n 'apollographql-client-version'?: string;\n } = {};\n\n if (context.clientAwareness) {\n const { name, version } = context.clientAwareness;\n if (name) {\n clientAwarenessHeaders['apollographql-client-name'] = name;\n }\n if (version) {\n clientAwarenessHeaders['apollographql-client-version'] = version;\n }\n }\n\n const contextHeaders = { ...clientAwarenessHeaders, ...context.headers };\n\n const contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: contextHeaders,\n };\n\n if (hasDirectives(['client'], operation.query)) {\n const transformedQuery = removeClientSetsFromDocument(operation.query);\n\n if (!transformedQuery) {\n return fromError(\n new Error(\n 'HttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or set the `transformOptions.removeClientFields` option to `true`.'\n )\n );\n }\n\n operation.query = transformedQuery;\n }\n\n //uses fallback, link, and then context to build options\n const { options, body } = selectHttpOptionsAndBodyInternal(\n operation,\n print,\n fallbackHttpConfig,\n linkConfig,\n contextConfig,\n );\n\n if (body.variables && !includeUnusedVariables) {\n body.variables = filterOperationVariables(body.variables, operation);\n }\n\n let controller: any;\n if (!(options as any).signal) {\n const { controller: _controller, signal } = createSignalIfSupported();\n controller = _controller;\n if (controller) (options as any).signal = signal;\n }\n\n // If requested, set method to GET if there are no mutations.\n const definitionIsMutation = (d: DefinitionNode) => {\n return d.kind === 'OperationDefinition' && d.operation === 'mutation';\n };\n const definitionIsSubscription = (d: DefinitionNode) => {\n return d.kind === 'OperationDefinition' && d.operation === 'subscription';\n };\n const isSubscription = definitionIsSubscription(getMainDefinition(operation.query));\n // does not match custom directives beginning with @defer\n const hasDefer = hasDirectives(['defer'], operation.query);\n if (\n useGETForQueries &&\n !operation.query.definitions.some(definitionIsMutation)\n ) {\n options.method = 'GET';\n }\n\n if (hasDefer || isSubscription) {\n options.headers = options.headers || {};\n let acceptHeader = \"multipart/mixed;\";\n // Omit defer-specific headers if the user attempts to defer a selection\n // set on a subscription and log a warning.\n if (isSubscription && hasDefer) {\n invariant.warn(\"Multipart-subscriptions do not support @defer\");\n }\n\n if (isSubscription) {\n acceptHeader += 'boundary=graphql;subscriptionSpec=1.0,application/json';\n } else if (hasDefer) {\n acceptHeader += 'deferSpec=20220824,application/json';\n }\n options.headers.accept = acceptHeader;\n }\n\n if (options.method === 'GET') {\n const { newURI, parseError } = rewriteURIForGET(chosenURI, body);\n if (parseError) {\n return fromError(parseError);\n }\n chosenURI = newURI;\n } else {\n try {\n (options as any).body = serializeFetchParameter(body, 'Payload');\n } catch (parseError) {\n return fromError(parseError);\n }\n }\n\n return new Observable(observer => {\n // Prefer linkOptions.fetch (preferredFetch) if provided, and otherwise\n // fall back to the *current* global window.fetch function (see issue\n // #7832), or (if all else fails) the backupFetch function we saved when\n // this module was first evaluated. This last option protects against the\n // removal of window.fetch, which is unlikely but not impossible.\n const currentFetch = preferredFetch || maybe(() => fetch) || backupFetch;\n\n currentFetch!(chosenURI, options)\n .then(response => {\n operation.setContext({ response });\n const ctype = response.headers?.get('content-type');\n\n if (ctype !== null && /^multipart\\/mixed/i.test(ctype)) {\n return readMultipartBody(response, observer);\n } else {\n return readJsonBody(response, operation, observer);\n }\n })\n .catch(err => handleError(err, observer));\n\n return () => {\n // XXX support canceling this request\n // https://developers.google.com/web/updates/2017/09/abortable-fetch\n if (controller) controller.abort();\n };\n });\n });\n};\n"]}
@@ -6,6 +6,7 @@ var globals = require('../../utilities/globals');
6
6
  var tslib = require('tslib');
7
7
  var utilities = require('../../utilities');
8
8
  var utils = require('../utils');
9
+ var errors = require('../../errors');
9
10
  var graphql = require('graphql');
10
11
  var core = require('../core');
11
12
 
@@ -152,20 +153,28 @@ function responseIterator(response) {
152
153
  throw new Error("Unknown body type for responseIterator. Please pass a streamable response.");
153
154
  }
154
155
 
156
+ function isNonNullObject(obj) {
157
+ return obj !== null && typeof obj === 'object';
158
+ }
159
+
160
+ function isApolloPayloadResult(value) {
161
+ return isNonNullObject(value) && "payload" in value;
162
+ }
163
+
155
164
  var hasOwnProperty = Object.prototype.hasOwnProperty;
156
165
  function readMultipartBody(response, observer) {
157
- var _a, _b, _c;
166
+ var _a, _b, _c, _d, _e;
158
167
  return tslib.__awaiter(this, void 0, void 0, function () {
159
- var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _d, value, done, chunk, bi, message, i, headers, contentType_1, body, result;
160
- var _e;
161
- return tslib.__generator(this, function (_f) {
162
- switch (_f.label) {
168
+ var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _f, value, done, chunk, bi, message, i, headers, contentType_1, body, result, next;
169
+ var _g, _h;
170
+ return tslib.__generator(this, function (_j) {
171
+ switch (_j.label) {
163
172
  case 0:
164
173
  if (TextDecoder === undefined) {
165
174
  throw new Error("TextDecoder must be defined in the environment: please import a polyfill.");
166
175
  }
167
176
  decoder = new TextDecoder("utf-8");
168
- contentType = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.get('content-type');
177
+ contentType = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.get("content-type");
169
178
  delimiter = "boundary=";
170
179
  boundaryVal = (contentType === null || contentType === void 0 ? void 0 : contentType.includes(delimiter))
171
180
  ? contentType === null || contentType === void 0 ? void 0 : contentType.substring((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(delimiter)) + delimiter.length).replace(/['"]/g, "").replace(/\;(.*)/gm, "").trim()
@@ -174,22 +183,22 @@ function readMultipartBody(response, observer) {
174
183
  buffer = "";
175
184
  iterator = responseIterator(response);
176
185
  running = true;
177
- _f.label = 1;
186
+ _j.label = 1;
178
187
  case 1:
179
188
  if (!running) return [3, 3];
180
189
  return [4, iterator.next()];
181
190
  case 2:
182
- _d = _f.sent(), value = _d.value, done = _d.done;
191
+ _f = _j.sent(), value = _f.value, done = _f.done;
183
192
  chunk = typeof value === "string" ? value : decoder.decode(value);
184
193
  running = !done;
185
194
  buffer += chunk;
186
195
  bi = buffer.indexOf(boundary);
187
196
  while (bi > -1) {
188
197
  message = void 0;
189
- _e = [
198
+ _g = [
190
199
  buffer.slice(0, bi),
191
200
  buffer.slice(bi + boundary.length),
192
- ], message = _e[0], buffer = _e[1];
201
+ ], message = _g[0], buffer = _g[1];
193
202
  if (message.trim()) {
194
203
  i = message.indexOf("\r\n\r\n");
195
204
  headers = parseHeaders(message.slice(0, i));
@@ -204,8 +213,26 @@ function readMultipartBody(response, observer) {
204
213
  if (Object.keys(result).length > 1 ||
205
214
  "data" in result ||
206
215
  "incremental" in result ||
207
- "errors" in result) {
208
- (_b = observer.next) === null || _b === void 0 ? void 0 : _b.call(observer, result);
216
+ "errors" in result ||
217
+ "payload" in result) {
218
+ if (isApolloPayloadResult(result)) {
219
+ next = {};
220
+ if ("payload" in result) {
221
+ next = tslib.__assign({}, result.payload);
222
+ }
223
+ if ("errors" in result) {
224
+ next = tslib.__assign(tslib.__assign({}, next), { extensions: tslib.__assign(tslib.__assign({}, ("extensions" in next ? next.extensions : null)), (_h = {}, _h[errors.PROTOCOL_ERRORS_SYMBOL] = result.errors, _h)) });
225
+ }
226
+ (_b = observer.next) === null || _b === void 0 ? void 0 : _b.call(observer, next);
227
+ }
228
+ else {
229
+ (_c = observer.next) === null || _c === void 0 ? void 0 : _c.call(observer, result);
230
+ }
231
+ }
232
+ else if (Object.keys(result).length === 1 &&
233
+ "hasNext" in result &&
234
+ !result.hasNext) {
235
+ (_d = observer.complete) === null || _d === void 0 ? void 0 : _d.call(observer);
209
236
  }
210
237
  }
211
238
  catch (err) {
@@ -216,7 +243,7 @@ function readMultipartBody(response, observer) {
216
243
  }
217
244
  return [3, 1];
218
245
  case 3:
219
- (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);
246
+ (_e = observer.complete) === null || _e === void 0 ? void 0 : _e.call(observer);
220
247
  return [2];
221
248
  }
222
249
  });
@@ -355,7 +382,7 @@ function selectHttpOptionsAndBodyInternal(operation, printer) {
355
382
  options.headers = removeDuplicateHeaders(options.headers, http.preserveHeaderCase);
356
383
  }
357
384
  var operationName = operation.operationName, extensions = operation.extensions, variables = operation.variables, query = operation.query;
358
- var body = { operationName: operationName, variables: variables };
385
+ var body = { operationName: operationName, variables: utilities.stripTypename(variables) };
359
386
  if (http.includeExtensions)
360
387
  body.extensions = extensions;
361
388
  if (http.includeQuery)
@@ -496,20 +523,7 @@ var createHttpLink = function (linkOptions) {
496
523
  }
497
524
  var _b = selectHttpOptionsAndBodyInternal(operation, print, fallbackHttpConfig, linkConfig, contextConfig), options = _b.options, body = _b.body;
498
525
  if (body.variables && !includeUnusedVariables) {
499
- var unusedNames_1 = new Set(Object.keys(body.variables));
500
- graphql.visit(operation.query, {
501
- Variable: function (node, _key, parent) {
502
- if (parent && parent.kind !== 'VariableDefinition') {
503
- unusedNames_1.delete(node.name.value);
504
- }
505
- },
506
- });
507
- if (unusedNames_1.size) {
508
- body.variables = tslib.__assign({}, body.variables);
509
- unusedNames_1.forEach(function (name) {
510
- delete body.variables[name];
511
- });
512
- }
526
+ body.variables = utils.filterOperationVariables(body.variables, operation);
513
527
  }
514
528
  var controller;
515
529
  if (!options.signal) {
@@ -521,13 +535,28 @@ var createHttpLink = function (linkOptions) {
521
535
  var definitionIsMutation = function (d) {
522
536
  return d.kind === 'OperationDefinition' && d.operation === 'mutation';
523
537
  };
538
+ var definitionIsSubscription = function (d) {
539
+ return d.kind === 'OperationDefinition' && d.operation === 'subscription';
540
+ };
541
+ var isSubscription = definitionIsSubscription(utilities.getMainDefinition(operation.query));
542
+ var hasDefer = utilities.hasDirectives(['defer'], operation.query);
524
543
  if (useGETForQueries &&
525
544
  !operation.query.definitions.some(definitionIsMutation)) {
526
545
  options.method = 'GET';
527
546
  }
528
- if (utilities.hasDirectives(['defer'], operation.query)) {
547
+ if (hasDefer || isSubscription) {
529
548
  options.headers = options.headers || {};
530
- options.headers.accept = "multipart/mixed; deferSpec=20220824, application/json";
549
+ var acceptHeader = "multipart/mixed;";
550
+ if (isSubscription && hasDefer) {
551
+ globals.__DEV__ && globals.invariant.warn("Multipart-subscriptions do not support @defer");
552
+ }
553
+ if (isSubscription) {
554
+ acceptHeader += 'boundary=graphql;subscriptionSpec=1.0,application/json';
555
+ }
556
+ else if (hasDefer) {
557
+ acceptHeader += 'deferSpec=20220824,application/json';
558
+ }
559
+ options.headers.accept = acceptHeader;
531
560
  }
532
561
  if (options.method === 'GET') {
533
562
  var _d = rewriteURIForGET(chosenURI, body), newURI = _d.newURI, parseError = _d.parseError;