@apollo/client 3.11.7 → 3.12.0-alpha.0

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 (187) hide show
  1. package/.changeset/nasty-camels-pay.md +36 -0
  2. package/.changeset/pre.json +10 -0
  3. package/CHANGELOG.md +43 -0
  4. package/apollo-client.cjs +438 -111
  5. package/apollo-client.cjs.map +1 -1
  6. package/apollo-client.min.cjs +1 -1
  7. package/cache/cache.cjs +218 -22
  8. package/cache/cache.cjs.map +1 -1
  9. package/cache/cache.cjs.native.js +218 -22
  10. package/cache/core/cache.d.ts +13 -10
  11. package/cache/core/cache.js +32 -14
  12. package/cache/core/cache.js.map +1 -1
  13. package/cache/core/types/Cache.d.ts +2 -1
  14. package/cache/core/types/Cache.js.map +1 -1
  15. package/cache/core/types/DataProxy.d.ts +4 -3
  16. package/cache/core/types/DataProxy.js.map +1 -1
  17. package/cache/inmemory/entityStore.js +3 -3
  18. package/cache/inmemory/inMemoryCache.d.ts +3 -1
  19. package/cache/inmemory/inMemoryCache.js +7 -0
  20. package/cache/inmemory/inMemoryCache.js.map +1 -1
  21. package/cache/inmemory/key-extractor.js +1 -1
  22. package/cache/inmemory/policies.js +4 -4
  23. package/cache/inmemory/readFromStore.js +2 -2
  24. package/cache/inmemory/writeToStore.js +4 -4
  25. package/core/ApolloClient.d.ts +14 -6
  26. package/core/ApolloClient.js +14 -6
  27. package/core/ApolloClient.js.map +1 -1
  28. package/core/LocalState.js +2 -2
  29. package/core/ObservableQuery.d.ts +17 -14
  30. package/core/ObservableQuery.js +29 -16
  31. package/core/ObservableQuery.js.map +1 -1
  32. package/core/QueryInfo.js.map +1 -1
  33. package/core/QueryManager.d.ts +18 -3
  34. package/core/QueryManager.js +39 -14
  35. package/core/QueryManager.js.map +1 -1
  36. package/core/core.cjs +285 -37
  37. package/core/core.cjs.map +1 -1
  38. package/core/core.cjs.native.js +285 -37
  39. package/core/index.d.ts +1 -0
  40. package/core/index.js.map +1 -1
  41. package/core/masking.d.ts +4 -0
  42. package/core/masking.js +212 -0
  43. package/core/masking.js.map +1 -0
  44. package/core/types.d.ts +3 -2
  45. package/core/types.js.map +1 -1
  46. package/core/watchQueryOptions.d.ts +8 -6
  47. package/core/watchQueryOptions.js.map +1 -1
  48. package/dev/dev.cjs +131 -87
  49. package/dev/dev.cjs.map +1 -1
  50. package/dev/dev.cjs.native.js +131 -87
  51. package/invariantErrorCodes.js +140 -86
  52. package/link/core/ApolloLink.js +2 -2
  53. package/link/core/core.cjs +2 -2
  54. package/link/core/core.cjs.map +1 -1
  55. package/link/core/core.cjs.native.js +2 -2
  56. package/link/http/checkFetcher.js +1 -1
  57. package/link/http/createHttpLink.js +1 -1
  58. package/link/http/http.cjs +6 -6
  59. package/link/http/http.cjs.map +1 -1
  60. package/link/http/http.cjs.native.js +6 -6
  61. package/link/http/selectHttpOptionsAndBody.js +3 -3
  62. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  63. package/link/http/serializeFetchParameter.js +1 -1
  64. package/link/persisted-queries/index.js +2 -2
  65. package/link/persisted-queries/persisted-queries.cjs +2 -2
  66. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  67. package/link/persisted-queries/persisted-queries.cjs.native.js +2 -2
  68. package/link/utils/toPromise.js +1 -1
  69. package/link/utils/utils.cjs +2 -2
  70. package/link/utils/utils.cjs.map +1 -1
  71. package/link/utils/utils.cjs.native.js +2 -2
  72. package/link/utils/validateOperation.js +1 -1
  73. package/masking/index.d.ts +2 -0
  74. package/masking/index.js +2 -0
  75. package/masking/index.js.map +1 -0
  76. package/masking/internal/types.d.ts +15 -0
  77. package/masking/internal/types.js +2 -0
  78. package/masking/internal/types.js.map +1 -0
  79. package/masking/masking.cjs +3 -0
  80. package/masking/masking.cjs.map +1 -0
  81. package/masking/masking.cjs.native.js +3 -0
  82. package/masking/masking.d.cts +1 -0
  83. package/masking/package.json +8 -0
  84. package/masking/types.d.ts +44 -0
  85. package/masking/types.js +2 -0
  86. package/masking/types.js.map +1 -0
  87. package/package.json +2 -1
  88. package/react/context/ApolloConsumer.js +1 -1
  89. package/react/context/ApolloContext.js +1 -1
  90. package/react/context/ApolloProvider.js +1 -1
  91. package/react/context/context.cjs +3 -3
  92. package/react/context/context.cjs.map +1 -1
  93. package/react/context/context.cjs.native.js +3 -3
  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 +24 -16
  100. package/react/hooks/hooks.cjs.map +1 -1
  101. package/react/hooks/hooks.cjs.native.js +24 -16
  102. package/react/hooks/useApolloClient.js +1 -1
  103. package/react/hooks/useFragment.d.ts +4 -3
  104. package/react/hooks/useFragment.js +12 -5
  105. package/react/hooks/useFragment.js.map +1 -1
  106. package/react/hooks/useLazyQuery.js +1 -1
  107. package/react/hooks/useLazyQuery.js.map +1 -1
  108. package/react/hooks/useLoadableQuery.js +2 -2
  109. package/react/hooks/useQuery.d.ts +4 -3
  110. package/react/hooks/useQuery.js +2 -1
  111. package/react/hooks/useQuery.js.map +1 -1
  112. package/react/hooks/useReadQuery.d.ts +2 -1
  113. package/react/hooks/useReadQuery.js.map +1 -1
  114. package/react/hooks/useSubscription.d.ts +2 -1
  115. package/react/hooks/useSubscription.js +3 -3
  116. package/react/hooks/useSubscription.js.map +1 -1
  117. package/react/hooks/useSuspenseQuery.d.ts +6 -5
  118. package/react/hooks/useSuspenseQuery.js +2 -2
  119. package/react/hooks/useSuspenseQuery.js.map +1 -1
  120. package/react/hooks/useSyncExternalStore.js +1 -1
  121. package/react/internal/cache/QueryReference.d.ts +5 -4
  122. package/react/internal/cache/QueryReference.js +1 -1
  123. package/react/internal/cache/QueryReference.js.map +1 -1
  124. package/react/internal/internal.cjs +2 -2
  125. package/react/internal/internal.cjs.map +1 -1
  126. package/react/internal/internal.cjs.native.js +2 -2
  127. package/react/parser/index.js +5 -5
  128. package/react/parser/parser.cjs +5 -5
  129. package/react/parser/parser.cjs.map +1 -1
  130. package/react/parser/parser.cjs.native.js +5 -5
  131. package/react/types/types.d.ts +18 -42
  132. package/react/types/types.js.map +1 -1
  133. package/testing/core/core.cjs +3 -3
  134. package/testing/core/core.cjs.map +1 -1
  135. package/testing/core/core.cjs.native.js +3 -3
  136. package/testing/core/mocking/mockLink.d.ts +3 -2
  137. package/testing/core/mocking/mockLink.js +3 -3
  138. package/testing/core/mocking/mockLink.js.map +1 -1
  139. package/testing/core/mocking/mockQueryManager.d.ts +1 -0
  140. package/testing/core/mocking/mockQueryManager.js +1 -1
  141. package/testing/core/mocking/mockQueryManager.js.map +1 -1
  142. package/testing/internal/disposables/index.d.ts +1 -0
  143. package/testing/internal/disposables/index.js +1 -0
  144. package/testing/internal/disposables/index.js.map +1 -1
  145. package/testing/internal/disposables/withProdMode.d.ts +4 -0
  146. package/testing/internal/disposables/withProdMode.js +10 -0
  147. package/testing/internal/disposables/withProdMode.js.map +1 -0
  148. package/testing/internal/scenarios/index.d.ts +28 -0
  149. package/testing/internal/scenarios/index.js +18 -2
  150. package/testing/internal/scenarios/index.js.map +1 -1
  151. package/utilities/common/maybeDeepFreeze.d.ts +1 -0
  152. package/utilities/common/maybeDeepFreeze.js +1 -1
  153. package/utilities/common/maybeDeepFreeze.js.map +1 -1
  154. package/utilities/globals/globals.cjs +1 -1
  155. package/utilities/globals/globals.cjs.map +1 -1
  156. package/utilities/globals/globals.cjs.native.js +1 -1
  157. package/utilities/graphql/DocumentTransform.js +1 -1
  158. package/utilities/graphql/directives.d.ts +3 -1
  159. package/utilities/graphql/directives.js +39 -5
  160. package/utilities/graphql/directives.js.map +1 -1
  161. package/utilities/graphql/fragments.js +3 -3
  162. package/utilities/graphql/getFromAST.js +8 -8
  163. package/utilities/graphql/storeUtils.js +1 -1
  164. package/utilities/graphql/transform.d.ts +1 -0
  165. package/utilities/graphql/transform.js +15 -2
  166. package/utilities/graphql/transform.js.map +1 -1
  167. package/utilities/index.d.ts +7 -3
  168. package/utilities/index.js +4 -3
  169. package/utilities/index.js.map +1 -1
  170. package/utilities/promises/preventUnhandledRejection.d.ts +2 -0
  171. package/utilities/promises/preventUnhandledRejection.js +5 -0
  172. package/utilities/promises/preventUnhandledRejection.js.map +1 -0
  173. package/utilities/subscriptions/relay/relay.cjs.map +1 -1
  174. package/utilities/subscriptions/urql/urql.cjs.map +1 -1
  175. package/utilities/types/NoInfer.d.ts +27 -0
  176. package/utilities/types/NoInfer.js +2 -0
  177. package/utilities/types/NoInfer.js.map +1 -0
  178. package/utilities/types/Prettify.d.ts +4 -0
  179. package/utilities/types/Prettify.js +2 -0
  180. package/utilities/types/Prettify.js.map +1 -0
  181. package/utilities/types/UnionToIntersection.d.ts +2 -0
  182. package/utilities/types/UnionToIntersection.js +2 -0
  183. package/utilities/types/UnionToIntersection.js.map +1 -0
  184. package/utilities/utilities.cjs +73 -19
  185. package/utilities/utilities.cjs.map +1 -1
  186. package/utilities/utilities.cjs.native.js +73 -19
  187. package/version.js +1 -1
@@ -0,0 +1,212 @@
1
+ import { __assign } from "tslib";
2
+ import { Kind } from "graphql";
3
+ import { createFragmentMap, resultKeyNameFromField, getFragmentDefinitions, getFragmentMaskMode, getOperationDefinition, maybeDeepFreeze, } from "../utilities/index.js";
4
+ import { invariant } from "../utilities/globals/index.js";
5
+ export function maskOperation(data, document, cache) {
6
+ var _a;
7
+ if (!cache.fragmentMatches) {
8
+ if (globalThis.__DEV__ !== false) {
9
+ warnOnImproperCacheImplementation();
10
+ }
11
+ return data;
12
+ }
13
+ var definition = getOperationDefinition(document);
14
+ invariant(definition, 37);
15
+ if (data == null) {
16
+ // Maintain the original `null` or `undefined` value
17
+ return data;
18
+ }
19
+ var context = {
20
+ operationType: definition.operation,
21
+ operationName: (_a = definition.name) === null || _a === void 0 ? void 0 : _a.value,
22
+ fragmentMap: createFragmentMap(getFragmentDefinitions(document)),
23
+ cache: cache,
24
+ };
25
+ var _b = maskSelectionSet(data, definition.selectionSet, context), masked = _b[0], changed = _b[1];
26
+ if (Object.isFrozen(data)) {
27
+ context.disableWarnings = true;
28
+ maybeDeepFreeze(masked);
29
+ context.disableWarnings = false;
30
+ }
31
+ return changed ? masked : data;
32
+ }
33
+ export function maskFragment(data, document, cache, fragmentName) {
34
+ if (!cache.fragmentMatches) {
35
+ if (globalThis.__DEV__ !== false) {
36
+ warnOnImproperCacheImplementation();
37
+ }
38
+ return data;
39
+ }
40
+ var fragments = document.definitions.filter(function (node) {
41
+ return node.kind === Kind.FRAGMENT_DEFINITION;
42
+ });
43
+ if (typeof fragmentName === "undefined") {
44
+ invariant(fragments.length === 1, 38, fragments.length);
45
+ fragmentName = fragments[0].name.value;
46
+ }
47
+ var fragment = fragments.find(function (fragment) { return fragment.name.value === fragmentName; });
48
+ invariant(!!fragment, 39, fragmentName);
49
+ if (data == null) {
50
+ // Maintain the original `null` or `undefined` value
51
+ return data;
52
+ }
53
+ var context = {
54
+ operationType: "fragment",
55
+ operationName: fragment.name.value,
56
+ fragmentMap: createFragmentMap(getFragmentDefinitions(document)),
57
+ cache: cache,
58
+ };
59
+ var _a = maskSelectionSet(data, fragment.selectionSet, context), masked = _a[0], changed = _a[1];
60
+ if (Object.isFrozen(data)) {
61
+ context.disableWarnings = true;
62
+ maybeDeepFreeze(masked);
63
+ context.disableWarnings = false;
64
+ }
65
+ return changed ? masked : data;
66
+ }
67
+ function maskSelectionSet(data, selectionSet, context, path) {
68
+ if (Array.isArray(data)) {
69
+ var changed_1 = false;
70
+ var masked = data.map(function (item, index) {
71
+ if (item === null) {
72
+ return null;
73
+ }
74
+ var _a = maskSelectionSet(item, selectionSet, context, globalThis.__DEV__ !== false ? "".concat(path || "", "[").concat(index, "]") : void 0), masked = _a[0], itemChanged = _a[1];
75
+ changed_1 || (changed_1 = itemChanged);
76
+ return itemChanged ? masked : item;
77
+ });
78
+ return [changed_1 ? masked : data, changed_1];
79
+ }
80
+ var result = selectionSet.selections.reduce(function (_a, selection) {
81
+ var memo = _a[0], changed = _a[1];
82
+ switch (selection.kind) {
83
+ case Kind.FIELD: {
84
+ var keyName = resultKeyNameFromField(selection);
85
+ var childSelectionSet = selection.selectionSet;
86
+ memo[keyName] = data[keyName];
87
+ if (childSelectionSet && data[keyName] !== null) {
88
+ var _b = maskSelectionSet(data[keyName], childSelectionSet, context, globalThis.__DEV__ !== false ? "".concat(path || "", ".").concat(keyName) : void 0), masked = _b[0], childChanged = _b[1];
89
+ if (childChanged ||
90
+ // This check prevents cases where masked fields may accidentally be
91
+ // returned as part of this object when the fragment also selects
92
+ // additional fields from the same child selection.
93
+ Object.keys(masked).length !== Object.keys(data[keyName]).length) {
94
+ memo[keyName] = masked;
95
+ changed = true;
96
+ }
97
+ }
98
+ return [memo, changed];
99
+ }
100
+ case Kind.INLINE_FRAGMENT: {
101
+ if (selection.typeCondition &&
102
+ !context.cache.fragmentMatches(selection, data.__typename)) {
103
+ return [memo, changed];
104
+ }
105
+ var _c = maskSelectionSet(data, selection.selectionSet, context, path), fragmentData = _c[0], childChanged = _c[1];
106
+ return [
107
+ __assign(__assign({}, memo), fragmentData),
108
+ changed || childChanged,
109
+ ];
110
+ }
111
+ case Kind.FRAGMENT_SPREAD: {
112
+ var fragmentName = selection.name.value;
113
+ var fragment = context.fragmentMap[fragmentName] ||
114
+ (context.fragmentMap[fragmentName] =
115
+ context.cache.lookupFragment(fragmentName));
116
+ invariant(fragment, 40, fragmentName);
117
+ var mode = getFragmentMaskMode(selection);
118
+ if (mode === "mask") {
119
+ return [memo, true];
120
+ }
121
+ if (globalThis.__DEV__ !== false) {
122
+ if (mode === "migrate") {
123
+ return [
124
+ addFieldAccessorWarnings(memo, data, fragment.selectionSet, path || "", context),
125
+ true,
126
+ ];
127
+ }
128
+ }
129
+ var _d = maskSelectionSet(data, fragment.selectionSet, context, path), fragmentData = _d[0], changed_2 = _d[1];
130
+ return [__assign(__assign({}, memo), fragmentData), changed_2];
131
+ }
132
+ }
133
+ }, [Object.create(null), false]);
134
+ if ("__typename" in data && !("__typename" in result[0])) {
135
+ result[0].__typename = data.__typename;
136
+ }
137
+ return result;
138
+ }
139
+ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
140
+ if (Array.isArray(data)) {
141
+ return data.map(function (item, index) {
142
+ return addFieldAccessorWarnings(memo[index] || Object.create(null), item, selectionSetNode, "".concat(path, "[").concat(index, "]"), context);
143
+ });
144
+ }
145
+ return selectionSetNode.selections.reduce(function (memo, selection) {
146
+ switch (selection.kind) {
147
+ case Kind.FIELD: {
148
+ var keyName = resultKeyNameFromField(selection);
149
+ var childSelectionSet = selection.selectionSet;
150
+ if (keyName in memo) {
151
+ return memo;
152
+ }
153
+ var value = data[keyName];
154
+ if (childSelectionSet) {
155
+ value = addFieldAccessorWarnings(memo[keyName] || Object.create(null), data[keyName], childSelectionSet, "".concat(path, ".").concat(keyName), context);
156
+ }
157
+ if (globalThis.__DEV__ !== false) {
158
+ addAccessorWarning(memo, value, keyName, path, context);
159
+ }
160
+ if (!(globalThis.__DEV__ !== false)) {
161
+ memo[keyName] = data[keyName];
162
+ }
163
+ return memo;
164
+ }
165
+ case Kind.INLINE_FRAGMENT: {
166
+ return addFieldAccessorWarnings(memo, data, selection.selectionSet, path, context);
167
+ }
168
+ case Kind.FRAGMENT_SPREAD: {
169
+ var fragment = context.fragmentMap[selection.name.value];
170
+ var mode = getFragmentMaskMode(selection);
171
+ if (mode === "mask") {
172
+ return memo;
173
+ }
174
+ if (mode === "unmask") {
175
+ var fragmentData = maskSelectionSet(data, fragment.selectionSet, context, path)[0];
176
+ return Object.assign(memo, fragmentData);
177
+ }
178
+ return addFieldAccessorWarnings(memo, data, fragment.selectionSet, path, context);
179
+ }
180
+ }
181
+ }, memo);
182
+ }
183
+ function addAccessorWarning(data, value, fieldName, path, context) {
184
+ var getValue = function () {
185
+ if (context.disableWarnings) {
186
+ return value;
187
+ }
188
+ globalThis.__DEV__ !== false && invariant.warn(41, context.operationName ?
189
+ "".concat(context.operationType, " '").concat(context.operationName, "'")
190
+ : "anonymous ".concat(context.operationType), "".concat(path, ".").concat(fieldName).replace(/^\./, ""));
191
+ getValue = function () { return value; };
192
+ return value;
193
+ };
194
+ Object.defineProperty(data, fieldName, {
195
+ get: function () {
196
+ return getValue();
197
+ },
198
+ set: function (value) {
199
+ getValue = function () { return value; };
200
+ },
201
+ enumerable: true,
202
+ configurable: true,
203
+ });
204
+ }
205
+ var issuedWarning = false;
206
+ function warnOnImproperCacheImplementation() {
207
+ if (!issuedWarning) {
208
+ issuedWarning = true;
209
+ globalThis.__DEV__ !== false && invariant.warn(42);
210
+ }
211
+ }
212
+ //# sourceMappingURL=masking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masking.js","sourceRoot":"","sources":["../../src/core/masking.ts"],"names":[],"mappings":"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","sourcesContent":["import { Kind } from \"graphql\";\nimport type { FragmentDefinitionNode, SelectionSetNode } from \"graphql\";\nimport {\n createFragmentMap,\n resultKeyNameFromField,\n getFragmentDefinitions,\n getFragmentMaskMode,\n getOperationDefinition,\n maybeDeepFreeze,\n} from \"../utilities/index.js\";\nimport type { FragmentMap } from \"../utilities/index.js\";\nimport type { ApolloCache, DocumentNode, TypedDocumentNode } from \"./index.js\";\nimport { invariant } from \"../utilities/globals/index.js\";\n\ninterface MaskingContext {\n operationType: \"query\" | \"mutation\" | \"subscription\" | \"fragment\";\n operationName: string | undefined;\n fragmentMap: FragmentMap;\n cache: ApolloCache<unknown>;\n disableWarnings?: boolean;\n}\n\nexport function maskOperation<TData = unknown>(\n data: TData,\n document: DocumentNode | TypedDocumentNode<TData>,\n cache: ApolloCache<unknown>\n): TData {\n if (!cache.fragmentMatches) {\n if (__DEV__) {\n warnOnImproperCacheImplementation();\n }\n\n return data;\n }\n\n const definition = getOperationDefinition(document);\n\n invariant(\n definition,\n \"Expected a parsed GraphQL document with a query, mutation, or subscription.\"\n );\n\n if (data == null) {\n // Maintain the original `null` or `undefined` value\n return data;\n }\n\n const context: MaskingContext = {\n operationType: definition.operation,\n operationName: definition.name?.value,\n fragmentMap: createFragmentMap(getFragmentDefinitions(document)),\n cache,\n };\n\n const [masked, changed] = maskSelectionSet(\n data,\n definition.selectionSet,\n context\n );\n\n if (Object.isFrozen(data)) {\n context.disableWarnings = true;\n maybeDeepFreeze(masked);\n context.disableWarnings = false;\n }\n\n return changed ? masked : data;\n}\n\nexport function maskFragment<TData = unknown>(\n data: TData,\n document: TypedDocumentNode<TData> | DocumentNode,\n cache: ApolloCache<unknown>,\n fragmentName?: string\n): TData {\n if (!cache.fragmentMatches) {\n if (__DEV__) {\n warnOnImproperCacheImplementation();\n }\n\n return data;\n }\n\n const fragments = document.definitions.filter(\n (node): node is FragmentDefinitionNode =>\n node.kind === Kind.FRAGMENT_DEFINITION\n );\n\n if (typeof fragmentName === \"undefined\") {\n invariant(\n fragments.length === 1,\n `Found %s fragments. \\`fragmentName\\` must be provided when there is not exactly 1 fragment.`,\n fragments.length\n );\n fragmentName = fragments[0].name.value;\n }\n\n const fragment = fragments.find(\n (fragment) => fragment.name.value === fragmentName\n );\n\n invariant(\n !!fragment,\n `Could not find fragment with name \"%s\".`,\n fragmentName\n );\n\n if (data == null) {\n // Maintain the original `null` or `undefined` value\n return data;\n }\n\n const context: MaskingContext = {\n operationType: \"fragment\",\n operationName: fragment.name.value,\n fragmentMap: createFragmentMap(getFragmentDefinitions(document)),\n cache,\n };\n\n const [masked, changed] = maskSelectionSet(\n data,\n fragment.selectionSet,\n context\n );\n\n if (Object.isFrozen(data)) {\n context.disableWarnings = true;\n maybeDeepFreeze(masked);\n context.disableWarnings = false;\n }\n\n return changed ? masked : data;\n}\n\nfunction maskSelectionSet(\n data: any,\n selectionSet: SelectionSetNode,\n context: MaskingContext,\n path?: string | undefined\n): [data: any, changed: boolean] {\n if (Array.isArray(data)) {\n let changed = false;\n\n const masked = data.map((item, index) => {\n if (item === null) {\n return null;\n }\n\n const [masked, itemChanged] = maskSelectionSet(\n item,\n selectionSet,\n context,\n __DEV__ ? `${path || \"\"}[${index}]` : void 0\n );\n changed ||= itemChanged;\n\n return itemChanged ? masked : item;\n });\n\n return [changed ? masked : data, changed];\n }\n\n const result = selectionSet.selections.reduce<[any, boolean]>(\n ([memo, changed], selection) => {\n switch (selection.kind) {\n case Kind.FIELD: {\n const keyName = resultKeyNameFromField(selection);\n const childSelectionSet = selection.selectionSet;\n\n memo[keyName] = data[keyName];\n\n if (childSelectionSet && data[keyName] !== null) {\n const [masked, childChanged] = maskSelectionSet(\n data[keyName],\n childSelectionSet,\n context,\n __DEV__ ? `${path || \"\"}.${keyName}` : void 0\n );\n\n if (\n childChanged ||\n // This check prevents cases where masked fields may accidentally be\n // returned as part of this object when the fragment also selects\n // additional fields from the same child selection.\n Object.keys(masked).length !== Object.keys(data[keyName]).length\n ) {\n memo[keyName] = masked;\n changed = true;\n }\n }\n\n return [memo, changed];\n }\n case Kind.INLINE_FRAGMENT: {\n if (\n selection.typeCondition &&\n !context.cache.fragmentMatches!(selection, data.__typename)\n ) {\n return [memo, changed];\n }\n\n const [fragmentData, childChanged] = maskSelectionSet(\n data,\n selection.selectionSet,\n context,\n path\n );\n\n return [\n {\n ...memo,\n ...fragmentData,\n },\n changed || childChanged,\n ];\n }\n case Kind.FRAGMENT_SPREAD: {\n const fragmentName = selection.name.value;\n let fragment: FragmentDefinitionNode | null =\n context.fragmentMap[fragmentName] ||\n (context.fragmentMap[fragmentName] =\n context.cache.lookupFragment(fragmentName)!);\n invariant(\n fragment,\n \"Could not find fragment with name '%s'.\",\n fragmentName\n );\n\n const mode = getFragmentMaskMode(selection);\n\n if (mode === \"mask\") {\n return [memo, true];\n }\n\n if (__DEV__) {\n if (mode === \"migrate\") {\n return [\n addFieldAccessorWarnings(\n memo,\n data,\n fragment.selectionSet,\n path || \"\",\n context\n ),\n true,\n ];\n }\n }\n\n const [fragmentData, changed] = maskSelectionSet(\n data,\n fragment.selectionSet,\n context,\n path\n );\n\n return [{ ...memo, ...fragmentData }, changed];\n }\n }\n },\n [Object.create(null), false]\n );\n\n if (\"__typename\" in data && !(\"__typename\" in result[0])) {\n result[0].__typename = data.__typename;\n }\n\n return result;\n}\n\nfunction addFieldAccessorWarnings(\n memo: Record<string, unknown>,\n data: Record<string, unknown>,\n selectionSetNode: SelectionSetNode,\n path: string,\n context: MaskingContext\n) {\n if (Array.isArray(data)) {\n return data.map((item, index): unknown => {\n return addFieldAccessorWarnings(\n memo[index] || Object.create(null),\n item,\n selectionSetNode,\n `${path}[${index}]`,\n context\n );\n });\n }\n\n return selectionSetNode.selections.reduce<any>((memo, selection) => {\n switch (selection.kind) {\n case Kind.FIELD: {\n const keyName = resultKeyNameFromField(selection);\n const childSelectionSet = selection.selectionSet;\n\n if (keyName in memo) {\n return memo;\n }\n\n let value = data[keyName];\n\n if (childSelectionSet) {\n value = addFieldAccessorWarnings(\n memo[keyName] || Object.create(null),\n data[keyName] as Record<string, unknown>,\n childSelectionSet,\n `${path}.${keyName}`,\n context\n );\n }\n\n if (__DEV__) {\n addAccessorWarning(memo, value, keyName, path, context);\n }\n\n if (!__DEV__) {\n memo[keyName] = data[keyName];\n }\n\n return memo;\n }\n case Kind.INLINE_FRAGMENT: {\n return addFieldAccessorWarnings(\n memo,\n data,\n selection.selectionSet,\n path,\n context\n );\n }\n case Kind.FRAGMENT_SPREAD: {\n const fragment = context.fragmentMap[selection.name.value];\n const mode = getFragmentMaskMode(selection);\n\n if (mode === \"mask\") {\n return memo;\n }\n\n if (mode === \"unmask\") {\n const [fragmentData] = maskSelectionSet(\n data,\n fragment.selectionSet,\n context,\n path\n );\n\n return Object.assign(memo, fragmentData);\n }\n\n return addFieldAccessorWarnings(\n memo,\n data,\n fragment.selectionSet,\n path,\n context\n );\n }\n }\n }, memo);\n}\n\nfunction addAccessorWarning(\n data: Record<string, any>,\n value: any,\n fieldName: string,\n path: string,\n context: MaskingContext\n) {\n let getValue = () => {\n if (context.disableWarnings) {\n return value;\n }\n\n invariant.warn(\n \"Accessing unmasked field on %s at path '%s'. This field will not be available when masking is enabled. Please read the field from the fragment instead.\",\n context.operationName ?\n `${context.operationType} '${context.operationName}'`\n : `anonymous ${context.operationType}`,\n `${path}.${fieldName}`.replace(/^\\./, \"\")\n );\n\n getValue = () => value;\n\n return value;\n };\n\n Object.defineProperty(data, fieldName, {\n get() {\n return getValue();\n },\n set(value) {\n getValue = () => value;\n },\n enumerable: true,\n configurable: true,\n });\n}\n\nlet issuedWarning = false;\nfunction warnOnImproperCacheImplementation() {\n if (!issuedWarning) {\n issuedWarning = true;\n invariant.warn(\n \"The configured cache does not support data masking which effectively disables it. Please use a cache that supports data masking or disable data masking to silence this warning.\"\n );\n }\n}\n"]}
package/core/types.d.ts CHANGED
@@ -9,6 +9,7 @@ import type { ObservableQuery } from "./ObservableQuery.js";
9
9
  import type { QueryOptions } from "./watchQueryOptions.js";
10
10
  import type { Cache } from "../cache/index.js";
11
11
  import type { IsStrictlyAny } from "../utilities/index.js";
12
+ import type { Unmasked } from "../masking/index.js";
12
13
  export type { TypedDocumentNode } from "@graphql-typed-document-node/core";
13
14
  export type MethodKeys<T> = {
14
15
  [P in keyof T]: T[P] extends Function ? P : never;
@@ -59,7 +60,7 @@ export interface ApolloQueryResult<T> {
59
60
  partial?: boolean;
60
61
  }
61
62
  export type MutationQueryReducer<T> = (previousResult: Record<string, any>, options: {
62
- mutationResult: FetchResult<T>;
63
+ mutationResult: FetchResult<Unmasked<T>>;
63
64
  queryName: string | undefined;
64
65
  queryVariables: Record<string, any>;
65
66
  }) => Record<string, any>;
@@ -74,7 +75,7 @@ export type MutationQueryReducersMap<T = {
74
75
  export type MutationUpdaterFn<T = {
75
76
  [key: string]: any;
76
77
  }> = (cache: ApolloCache<T>, mutationResult: FetchResult<T>) => void;
77
- export type MutationUpdaterFunction<TData, TVariables, TContext, TCache extends ApolloCache<any>> = (cache: TCache, result: Omit<FetchResult<TData>, "context">, options: {
78
+ export type MutationUpdaterFunction<TData, TVariables, TContext, TCache extends ApolloCache<any>> = (cache: TCache, result: Omit<FetchResult<Unmasked<TData>>, "context">, options: {
78
79
  context?: TContext;
79
80
  variables?: TVariables;
80
81
  }) => void;
package/core/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { DocumentNode, GraphQLFormattedError } from \"graphql\";\n\nimport type { ApolloCache } from \"../cache/index.js\";\nimport type { FetchResult } from \"../link/core/index.js\";\nimport type { ApolloError } from \"../errors/index.js\";\nimport type { QueryInfo } from \"./QueryInfo.js\";\nimport type { NetworkStatus } from \"./networkStatus.js\";\nimport type { Resolver } from \"./LocalState.js\";\nimport type { ObservableQuery } from \"./ObservableQuery.js\";\nimport type { QueryOptions } from \"./watchQueryOptions.js\";\nimport type { Cache } from \"../cache/index.js\";\nimport type { IsStrictlyAny } from \"../utilities/index.js\";\n\nexport type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\n\nexport type MethodKeys<T> = {\n [P in keyof T]: T[P] extends Function ? P : never;\n}[keyof T];\n\nexport interface DefaultContext extends Record<string, any> {}\n\nexport type QueryListener = (queryInfo: QueryInfo) => void;\n\nexport type OnQueryUpdated<TResult> = (\n observableQuery: ObservableQuery<any>,\n diff: Cache.DiffResult<any>,\n lastDiff: Cache.DiffResult<any> | undefined\n) => boolean | TResult;\n\nexport type RefetchQueryDescriptor = string | DocumentNode;\nexport type InternalRefetchQueryDescriptor =\n | RefetchQueryDescriptor\n | QueryOptions;\n\ntype RefetchQueriesIncludeShorthand = \"all\" | \"active\";\n\nexport type RefetchQueriesInclude =\n | RefetchQueryDescriptor[]\n | RefetchQueriesIncludeShorthand;\n\nexport type InternalRefetchQueriesInclude =\n | InternalRefetchQueryDescriptor[]\n | RefetchQueriesIncludeShorthand;\n\n// Used by ApolloClient[\"refetchQueries\"]\n// TODO Improve documentation comments for this public type.\nexport interface RefetchQueriesOptions<\n TCache extends ApolloCache<any>,\n TResult,\n> {\n updateCache?: (cache: TCache) => void;\n // The client.refetchQueries method discourages passing QueryOptions, by\n // restricting the public type of options.include to exclude QueryOptions as\n // an available array element type (see InternalRefetchQueriesInclude for a\n // version of RefetchQueriesInclude that allows legacy QueryOptions objects).\n include?: RefetchQueriesInclude;\n optimistic?: boolean;\n // If no onQueryUpdated function is provided, any queries affected by the\n // updateCache function or included in the options.include array will be\n // refetched by default. Passing null instead of undefined disables this\n // default refetching behavior for affected queries, though included queries\n // will still be refetched.\n onQueryUpdated?: OnQueryUpdated<TResult> | null;\n}\n\n// The client.refetchQueries method returns a thenable (PromiseLike) object\n// whose result is an array of Promise.resolve'd TResult values, where TResult\n// is whatever type the (optional) onQueryUpdated function returns. When no\n// onQueryUpdated function is given, TResult defaults to ApolloQueryResult<any>\n// (thanks to default type parameters for client.refetchQueries).\nexport type RefetchQueriesPromiseResults<TResult> =\n // If onQueryUpdated returns any, all bets are off, so the results array must\n // be a generic any[] array, which is much less confusing than the union type\n // we get if we don't check for any. I hoped `any extends TResult` would do\n // the trick here, instead of IsStrictlyAny, but you can see for yourself what\n // fails in the refetchQueries tests if you try making that simplification.\n IsStrictlyAny<TResult> extends true ? any[]\n : // If the onQueryUpdated function passed to client.refetchQueries returns true\n // or false, that means either to refetch the query (true) or to skip the\n // query (false). Since refetching produces an ApolloQueryResult<any>, and\n // skipping produces nothing, the fully-resolved array of all results produced\n // will be an ApolloQueryResult<any>[], when TResult extends boolean.\n TResult extends boolean ? ApolloQueryResult<any>[]\n : // If onQueryUpdated returns a PromiseLike<U>, that thenable will be passed as\n // an array element to Promise.all, so we infer/unwrap the array type U here.\n TResult extends PromiseLike<infer U> ? U[]\n : // All other onQueryUpdated results end up in the final Promise.all array as\n // themselves, with their original TResult type. Note that TResult will\n // default to ApolloQueryResult<any> if no onQueryUpdated function is passed\n // to client.refetchQueries.\n TResult[];\n\n// The result of client.refetchQueries is thenable/awaitable, if you just want\n// an array of fully resolved results, but you can also access the raw results\n// immediately by examining the additional { queries, results } properties of\n// the RefetchQueriesResult<TResult> object.\nexport interface RefetchQueriesResult<TResult>\n extends Promise<RefetchQueriesPromiseResults<TResult>> {\n // An array of ObservableQuery objects corresponding 1:1 to TResult values\n // in the results arrays (both the TResult[] array below, and the results\n // array resolved by the Promise above).\n queries: ObservableQuery<any>[];\n // These are the raw TResult values returned by any onQueryUpdated functions\n // that were invoked by client.refetchQueries.\n results: InternalRefetchQueriesResult<TResult>[];\n}\n\n// Used by QueryManager[\"refetchQueries\"]\nexport interface InternalRefetchQueriesOptions<\n TCache extends ApolloCache<any>,\n TResult,\n> extends Omit<RefetchQueriesOptions<TCache, TResult>, \"include\"> {\n // Just like the refetchQueries option for a mutation, an array of strings,\n // DocumentNode objects, and/or QueryOptions objects, or one of the shorthand\n // strings \"all\" or \"active\", to select every (active) query.\n include?: InternalRefetchQueriesInclude;\n // This part of the API is a (useful) implementation detail, but need not be\n // exposed in the public client.refetchQueries API (above).\n removeOptimistic?: string;\n}\n\nexport type InternalRefetchQueriesResult<TResult> =\n // If onQueryUpdated returns a boolean, that's equivalent to refetching the\n // query when the boolean is true and skipping the query when false, so the\n // internal type of refetched results is Promise<ApolloQueryResult<any>>.\n TResult extends boolean ? Promise<ApolloQueryResult<any>>\n : // Otherwise, onQueryUpdated returns whatever it returns. If onQueryUpdated is\n // not provided, TResult defaults to Promise<ApolloQueryResult<any>> (see the\n // generic type parameters of client.refetchQueries).\n TResult;\n\nexport type InternalRefetchQueriesMap<TResult> = Map<\n ObservableQuery<any>,\n InternalRefetchQueriesResult<TResult>\n>;\n\n// TODO Remove this unnecessary type in Apollo Client 4.\nexport type { QueryOptions as PureQueryOptions };\n\nexport type OperationVariables = Record<string, any>;\n\nexport interface ApolloQueryResult<T> {\n data: T;\n /**\n * A list of any errors that occurred during server-side execution of a GraphQL operation.\n * See https://www.apollographql.com/docs/react/data/error-handling/ for more information.\n */\n errors?: ReadonlyArray<GraphQLFormattedError>;\n /**\n * The single Error object that is passed to onError and useQuery hooks, and is often thrown during manual `client.query` calls.\n * This will contain both a NetworkError field and any GraphQLErrors.\n * See https://www.apollographql.com/docs/react/data/error-handling/ for more information.\n */\n error?: ApolloError;\n loading: boolean;\n networkStatus: NetworkStatus;\n // If result.data was read from the cache with missing fields,\n // result.partial will be true. Otherwise, result.partial will be falsy\n // (usually because the property is absent from the result object).\n partial?: boolean;\n}\n\n// This is part of the public API, people write these functions in `updateQueries`.\nexport type MutationQueryReducer<T> = (\n previousResult: Record<string, any>,\n options: {\n mutationResult: FetchResult<T>;\n queryName: string | undefined;\n queryVariables: Record<string, any>;\n }\n) => Record<string, any>;\n\nexport type MutationQueryReducersMap<T = { [key: string]: any }> = {\n [queryName: string]: MutationQueryReducer<T>;\n};\n\n/**\n * @deprecated Use `MutationUpdaterFunction` instead.\n */\nexport type MutationUpdaterFn<T = { [key: string]: any }> = (\n // The MutationUpdaterFn type is broken because it mistakenly uses the same\n // type parameter T for both the cache and the mutationResult. Do not use this\n // type unless you absolutely need it for backwards compatibility.\n cache: ApolloCache<T>,\n mutationResult: FetchResult<T>\n) => void;\n\nexport type MutationUpdaterFunction<\n TData,\n TVariables,\n TContext,\n TCache extends ApolloCache<any>,\n> = (\n cache: TCache,\n result: Omit<FetchResult<TData>, \"context\">,\n options: {\n context?: TContext;\n variables?: TVariables;\n }\n) => void;\nexport interface Resolvers {\n [key: string]: {\n [field: string]: Resolver;\n };\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { DocumentNode, GraphQLFormattedError } from \"graphql\";\n\nimport type { ApolloCache } from \"../cache/index.js\";\nimport type { FetchResult } from \"../link/core/index.js\";\nimport type { ApolloError } from \"../errors/index.js\";\nimport type { QueryInfo } from \"./QueryInfo.js\";\nimport type { NetworkStatus } from \"./networkStatus.js\";\nimport type { Resolver } from \"./LocalState.js\";\nimport type { ObservableQuery } from \"./ObservableQuery.js\";\nimport type { QueryOptions } from \"./watchQueryOptions.js\";\nimport type { Cache } from \"../cache/index.js\";\nimport type { IsStrictlyAny } from \"../utilities/index.js\";\nimport type { Unmasked } from \"../masking/index.js\";\n\nexport type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\n\nexport type MethodKeys<T> = {\n [P in keyof T]: T[P] extends Function ? P : never;\n}[keyof T];\n\nexport interface DefaultContext extends Record<string, any> {}\n\nexport type QueryListener = (queryInfo: QueryInfo) => void;\n\nexport type OnQueryUpdated<TResult> = (\n observableQuery: ObservableQuery<any>,\n diff: Cache.DiffResult<any>,\n lastDiff: Cache.DiffResult<any> | undefined\n) => boolean | TResult;\n\nexport type RefetchQueryDescriptor = string | DocumentNode;\nexport type InternalRefetchQueryDescriptor =\n | RefetchQueryDescriptor\n | QueryOptions;\n\ntype RefetchQueriesIncludeShorthand = \"all\" | \"active\";\n\nexport type RefetchQueriesInclude =\n | RefetchQueryDescriptor[]\n | RefetchQueriesIncludeShorthand;\n\nexport type InternalRefetchQueriesInclude =\n | InternalRefetchQueryDescriptor[]\n | RefetchQueriesIncludeShorthand;\n\n// Used by ApolloClient[\"refetchQueries\"]\n// TODO Improve documentation comments for this public type.\nexport interface RefetchQueriesOptions<\n TCache extends ApolloCache<any>,\n TResult,\n> {\n updateCache?: (cache: TCache) => void;\n // The client.refetchQueries method discourages passing QueryOptions, by\n // restricting the public type of options.include to exclude QueryOptions as\n // an available array element type (see InternalRefetchQueriesInclude for a\n // version of RefetchQueriesInclude that allows legacy QueryOptions objects).\n include?: RefetchQueriesInclude;\n optimistic?: boolean;\n // If no onQueryUpdated function is provided, any queries affected by the\n // updateCache function or included in the options.include array will be\n // refetched by default. Passing null instead of undefined disables this\n // default refetching behavior for affected queries, though included queries\n // will still be refetched.\n onQueryUpdated?: OnQueryUpdated<TResult> | null;\n}\n\n// The client.refetchQueries method returns a thenable (PromiseLike) object\n// whose result is an array of Promise.resolve'd TResult values, where TResult\n// is whatever type the (optional) onQueryUpdated function returns. When no\n// onQueryUpdated function is given, TResult defaults to ApolloQueryResult<any>\n// (thanks to default type parameters for client.refetchQueries).\nexport type RefetchQueriesPromiseResults<TResult> =\n // If onQueryUpdated returns any, all bets are off, so the results array must\n // be a generic any[] array, which is much less confusing than the union type\n // we get if we don't check for any. I hoped `any extends TResult` would do\n // the trick here, instead of IsStrictlyAny, but you can see for yourself what\n // fails in the refetchQueries tests if you try making that simplification.\n IsStrictlyAny<TResult> extends true ? any[]\n : // If the onQueryUpdated function passed to client.refetchQueries returns true\n // or false, that means either to refetch the query (true) or to skip the\n // query (false). Since refetching produces an ApolloQueryResult<any>, and\n // skipping produces nothing, the fully-resolved array of all results produced\n // will be an ApolloQueryResult<any>[], when TResult extends boolean.\n TResult extends boolean ? ApolloQueryResult<any>[]\n : // If onQueryUpdated returns a PromiseLike<U>, that thenable will be passed as\n // an array element to Promise.all, so we infer/unwrap the array type U here.\n TResult extends PromiseLike<infer U> ? U[]\n : // All other onQueryUpdated results end up in the final Promise.all array as\n // themselves, with their original TResult type. Note that TResult will\n // default to ApolloQueryResult<any> if no onQueryUpdated function is passed\n // to client.refetchQueries.\n TResult[];\n\n// The result of client.refetchQueries is thenable/awaitable, if you just want\n// an array of fully resolved results, but you can also access the raw results\n// immediately by examining the additional { queries, results } properties of\n// the RefetchQueriesResult<TResult> object.\nexport interface RefetchQueriesResult<TResult>\n extends Promise<RefetchQueriesPromiseResults<TResult>> {\n // An array of ObservableQuery objects corresponding 1:1 to TResult values\n // in the results arrays (both the TResult[] array below, and the results\n // array resolved by the Promise above).\n queries: ObservableQuery<any>[];\n // These are the raw TResult values returned by any onQueryUpdated functions\n // that were invoked by client.refetchQueries.\n results: InternalRefetchQueriesResult<TResult>[];\n}\n\n// Used by QueryManager[\"refetchQueries\"]\nexport interface InternalRefetchQueriesOptions<\n TCache extends ApolloCache<any>,\n TResult,\n> extends Omit<RefetchQueriesOptions<TCache, TResult>, \"include\"> {\n // Just like the refetchQueries option for a mutation, an array of strings,\n // DocumentNode objects, and/or QueryOptions objects, or one of the shorthand\n // strings \"all\" or \"active\", to select every (active) query.\n include?: InternalRefetchQueriesInclude;\n // This part of the API is a (useful) implementation detail, but need not be\n // exposed in the public client.refetchQueries API (above).\n removeOptimistic?: string;\n}\n\nexport type InternalRefetchQueriesResult<TResult> =\n // If onQueryUpdated returns a boolean, that's equivalent to refetching the\n // query when the boolean is true and skipping the query when false, so the\n // internal type of refetched results is Promise<ApolloQueryResult<any>>.\n TResult extends boolean ? Promise<ApolloQueryResult<any>>\n : // Otherwise, onQueryUpdated returns whatever it returns. If onQueryUpdated is\n // not provided, TResult defaults to Promise<ApolloQueryResult<any>> (see the\n // generic type parameters of client.refetchQueries).\n TResult;\n\nexport type InternalRefetchQueriesMap<TResult> = Map<\n ObservableQuery<any>,\n InternalRefetchQueriesResult<TResult>\n>;\n\n// TODO Remove this unnecessary type in Apollo Client 4.\nexport type { QueryOptions as PureQueryOptions };\n\nexport type OperationVariables = Record<string, any>;\n\nexport interface ApolloQueryResult<T> {\n data: T;\n /**\n * A list of any errors that occurred during server-side execution of a GraphQL operation.\n * See https://www.apollographql.com/docs/react/data/error-handling/ for more information.\n */\n errors?: ReadonlyArray<GraphQLFormattedError>;\n /**\n * The single Error object that is passed to onError and useQuery hooks, and is often thrown during manual `client.query` calls.\n * This will contain both a NetworkError field and any GraphQLErrors.\n * See https://www.apollographql.com/docs/react/data/error-handling/ for more information.\n */\n error?: ApolloError;\n loading: boolean;\n networkStatus: NetworkStatus;\n // If result.data was read from the cache with missing fields,\n // result.partial will be true. Otherwise, result.partial will be falsy\n // (usually because the property is absent from the result object).\n partial?: boolean;\n}\n\n// This is part of the public API, people write these functions in `updateQueries`.\nexport type MutationQueryReducer<T> = (\n previousResult: Record<string, any>,\n options: {\n mutationResult: FetchResult<Unmasked<T>>;\n queryName: string | undefined;\n queryVariables: Record<string, any>;\n }\n) => Record<string, any>;\n\nexport type MutationQueryReducersMap<T = { [key: string]: any }> = {\n [queryName: string]: MutationQueryReducer<T>;\n};\n\n/**\n * @deprecated Use `MutationUpdaterFunction` instead.\n */\nexport type MutationUpdaterFn<T = { [key: string]: any }> = (\n // The MutationUpdaterFn type is broken because it mistakenly uses the same\n // type parameter T for both the cache and the mutationResult. Do not use this\n // type unless you absolutely need it for backwards compatibility.\n cache: ApolloCache<T>,\n mutationResult: FetchResult<T>\n) => void;\n\nexport type MutationUpdaterFunction<\n TData,\n TVariables,\n TContext,\n TCache extends ApolloCache<any>,\n> = (\n cache: TCache,\n result: Omit<FetchResult<Unmasked<TData>>, \"context\">,\n options: {\n context?: TContext;\n variables?: TVariables;\n }\n) => void;\nexport interface Resolvers {\n [key: string]: {\n [field: string]: Resolver;\n };\n}\n"]}
@@ -5,6 +5,8 @@ import type { DefaultContext, MutationQueryReducersMap, OperationVariables, Muta
5
5
  import type { ApolloCache } from "../cache/index.js";
6
6
  import type { ObservableQuery } from "./ObservableQuery.js";
7
7
  import type { IgnoreModifier } from "../cache/core/types/common.js";
8
+ import type { Unmasked } from "../masking/index.js";
9
+ import type { NoInfer } from "../utilities/index.js";
8
10
  /**
9
11
  * fetchPolicy determines where the client may return a result from. The options are:
10
12
  * - cache-first (default): return result from cache. Only fetch from network if cached result is not available.
@@ -292,12 +294,12 @@ export interface FetchMoreQueryOptions<TVariables, TData = any> {
292
294
  variables?: Partial<TVariables>;
293
295
  context?: DefaultContext;
294
296
  }
295
- export type UpdateQueryFn<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = (previousQueryResult: TData, options: {
297
+ export type UpdateQueryFn<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = (previousQueryResult: Unmasked<TData>, options: {
296
298
  subscriptionData: {
297
- data: TSubscriptionData;
299
+ data: Unmasked<TSubscriptionData>;
298
300
  };
299
301
  variables?: TSubscriptionVariables;
300
- }) => TData;
302
+ }) => Unmasked<TData>;
301
303
  export type SubscribeToMoreOptions<TData = any, TSubscriptionVariables = OperationVariables, TSubscriptionData = TData> = {
302
304
  document: DocumentNode | TypedDocumentNode<TSubscriptionData, TSubscriptionVariables>;
303
305
  variables?: TSubscriptionVariables;
@@ -341,9 +343,9 @@ export interface MutationBaseOptions<TData = any, TVariables = OperationVariable
341
343
  *
342
344
  * 3. Caching options
343
345
  */
344
- optimisticResponse?: TData | ((vars: TVariables, { IGNORE }: {
346
+ optimisticResponse?: Unmasked<NoInfer<TData>> | ((vars: TVariables, { IGNORE }: {
345
347
  IGNORE: IgnoreModifier;
346
- }) => TData | IgnoreModifier);
348
+ }) => Unmasked<NoInfer<TData>> | IgnoreModifier);
347
349
  /**
348
350
  * A `MutationQueryReducersMap`, which is map from query names to mutation query reducers. Briefly, this map defines how to incorporate the results of the mutation into the results of queries that are currently being watched by your application.
349
351
  */
@@ -361,7 +363,7 @@ export interface MutationBaseOptions<TData = any, TVariables = OperationVariable
361
363
  *
362
364
  * 1. Operation options
363
365
  */
364
- refetchQueries?: ((result: FetchResult<TData>) => InternalRefetchQueriesInclude) | InternalRefetchQueriesInclude;
366
+ refetchQueries?: ((result: FetchResult<Unmasked<TData>>) => InternalRefetchQueriesInclude) | InternalRefetchQueriesInclude;
365
367
  /**
366
368
  * If `true`, makes sure all queries included in `refetchQueries` are completed before the mutation is considered complete.
367
369
  *
@@ -1 +1 @@
1
- {"version":3,"file":"watchQueryOptions.js","sourceRoot":"","sources":["../../src/core/watchQueryOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { DocumentNode } from \"graphql\";\nimport type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\n\nimport type { FetchResult } from \"../link/core/index.js\";\nimport type {\n DefaultContext,\n MutationQueryReducersMap,\n OperationVariables,\n MutationUpdaterFunction,\n OnQueryUpdated,\n InternalRefetchQueriesInclude,\n} from \"./types.js\";\nimport type { ApolloCache } from \"../cache/index.js\";\nimport type { ObservableQuery } from \"./ObservableQuery.js\";\nimport type { IgnoreModifier } from \"../cache/core/types/common.js\";\n\n/**\n * fetchPolicy determines where the client may return a result from. The options are:\n * - cache-first (default): return result from cache. Only fetch from network if cached result is not available.\n * - cache-and-network: return result from cache first (if it exists), then return network result once it's available.\n * - cache-only: return result from cache if available, fail otherwise.\n * - no-cache: return result from network, fail if network call doesn't succeed, don't save to cache\n * - network-only: return result from network, fail if network call doesn't succeed, save to cache\n * - standby: only for queries that aren't actively watched, but should be available for refetch and updateQueries.\n */\nexport type FetchPolicy =\n | \"cache-first\"\n | \"network-only\"\n | \"cache-only\"\n | \"no-cache\"\n | \"standby\";\n\nexport type WatchQueryFetchPolicy = FetchPolicy | \"cache-and-network\";\n\nexport type MutationFetchPolicy = Extract<\n FetchPolicy,\n | \"network-only\" // default behavior (mutation results written to cache)\n | \"no-cache\" // alternate behavior (results not written to cache)\n>;\n\nexport type RefetchWritePolicy = \"merge\" | \"overwrite\";\n\n/**\n * errorPolicy determines the level of events for errors in the execution result. The options are:\n * - none (default): any errors from the request are treated like runtime errors and the observable is stopped\n * - ignore: errors from the request do not stop the observable, but also don't call `next`\n * - all: errors are treated like data and will notify observables\n */\nexport type ErrorPolicy = \"none\" | \"ignore\" | \"all\";\n\n/**\n * Query options.\n */\nexport interface QueryOptions<TVariables = OperationVariables, TData = any> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#query:member} */\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: FetchPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#pollInterval:member} */\n pollInterval?: number;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#notifyOnNetworkStatusChange:member} */\n notifyOnNetworkStatusChange?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#returnPartialData:member} */\n returnPartialData?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#partialRefetch:member} */\n partialRefetch?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#canonizeResults:member} */\n canonizeResults?: boolean;\n}\n\n/**\n * Watched query options.\n */\nexport interface WatchQueryOptions<\n TVariables extends OperationVariables = OperationVariables,\n TData = any,\n> extends SharedWatchQueryOptions<TVariables, TData> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#query:member} */\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n}\n\nexport interface SharedWatchQueryOptions<\n TVariables extends OperationVariables,\n TData,\n> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: WatchQueryFetchPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#nextFetchPolicy:member} */\n nextFetchPolicy?:\n | WatchQueryFetchPolicy\n | ((\n this: WatchQueryOptions<TVariables, TData>,\n currentFetchPolicy: WatchQueryFetchPolicy,\n context: NextFetchPolicyContext<TData, TVariables>\n ) => WatchQueryFetchPolicy);\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#initialFetchPolicy:member} */\n initialFetchPolicy?: WatchQueryFetchPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#refetchWritePolicy:member} */\n refetchWritePolicy?: RefetchWritePolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#pollInterval:member} */\n pollInterval?: number;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#notifyOnNetworkStatusChange:member} */\n notifyOnNetworkStatusChange?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#returnPartialData:member} */\n returnPartialData?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#partialRefetch:member} */\n partialRefetch?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#canonizeResults:member} */\n canonizeResults?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#skipPollAttempt:member} */\n skipPollAttempt?: () => boolean;\n}\n\nexport interface NextFetchPolicyContext<\n TData,\n TVariables extends OperationVariables,\n> {\n reason: \"after-fetch\" | \"variables-changed\";\n observable: ObservableQuery<TData, TVariables>;\n options: WatchQueryOptions<TVariables, TData>;\n initialFetchPolicy: WatchQueryFetchPolicy;\n}\n\nexport interface FetchMoreQueryOptions<TVariables, TData = any> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#query:member} */\n query?: DocumentNode | TypedDocumentNode<TData, TVariables>;\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#variables:member} */\n variables?: Partial<TVariables>;\n context?: DefaultContext;\n}\n\nexport type UpdateQueryFn<\n TData = any,\n TSubscriptionVariables = OperationVariables,\n TSubscriptionData = TData,\n> = (\n previousQueryResult: TData,\n options: {\n subscriptionData: { data: TSubscriptionData };\n variables?: TSubscriptionVariables;\n }\n) => TData;\n\nexport type SubscribeToMoreOptions<\n TData = any,\n TSubscriptionVariables = OperationVariables,\n TSubscriptionData = TData,\n> = {\n document:\n | DocumentNode\n | TypedDocumentNode<TSubscriptionData, TSubscriptionVariables>;\n variables?: TSubscriptionVariables;\n updateQuery?: UpdateQueryFn<TData, TSubscriptionVariables, TSubscriptionData>;\n onError?: (error: Error) => void;\n context?: DefaultContext;\n};\n\nexport interface SubscriptionOptions<\n TVariables = OperationVariables,\n TData = any,\n> {\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#query:member} */\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: FetchPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#extensions:member} */\n extensions?: Record<string, any>;\n}\n\nexport interface MutationBaseOptions<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n> {\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#optimisticResponse:member} */\n optimisticResponse?:\n | TData\n | ((\n vars: TVariables,\n { IGNORE }: { IGNORE: IgnoreModifier }\n ) => TData | IgnoreModifier);\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#updateQueries:member} */\n updateQueries?: MutationQueryReducersMap<TData>;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#refetchQueries:member} */\n refetchQueries?:\n | ((result: FetchResult<TData>) => InternalRefetchQueriesInclude)\n | InternalRefetchQueriesInclude;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#awaitRefetchQueries:member} */\n awaitRefetchQueries?: boolean;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#update:member} */\n update?: MutationUpdaterFunction<TData, TVariables, TContext, TCache>;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#onQueryUpdated:member} */\n onQueryUpdated?: OnQueryUpdated<any>;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#context:member} */\n context?: TContext;\n}\n\nexport interface MutationOptions<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n> extends MutationSharedOptions<TData, TVariables, TContext, TCache> {\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#mutation:member} */\n mutation: DocumentNode | TypedDocumentNode<TData, TVariables>;\n}\nexport interface MutationSharedOptions<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n> extends MutationBaseOptions<TData, TVariables, TContext, TCache> {\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: MutationFetchPolicy;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#keepRootFields:member} */\n keepRootFields?: boolean;\n}\n"]}
1
+ {"version":3,"file":"watchQueryOptions.js","sourceRoot":"","sources":["../../src/core/watchQueryOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type { DocumentNode } from \"graphql\";\nimport type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\n\nimport type { FetchResult } from \"../link/core/index.js\";\nimport type {\n DefaultContext,\n MutationQueryReducersMap,\n OperationVariables,\n MutationUpdaterFunction,\n OnQueryUpdated,\n InternalRefetchQueriesInclude,\n} from \"./types.js\";\nimport type { ApolloCache } from \"../cache/index.js\";\nimport type { ObservableQuery } from \"./ObservableQuery.js\";\nimport type { IgnoreModifier } from \"../cache/core/types/common.js\";\nimport type { Unmasked } from \"../masking/index.js\";\nimport type { NoInfer } from \"../utilities/index.js\";\n\n/**\n * fetchPolicy determines where the client may return a result from. The options are:\n * - cache-first (default): return result from cache. Only fetch from network if cached result is not available.\n * - cache-and-network: return result from cache first (if it exists), then return network result once it's available.\n * - cache-only: return result from cache if available, fail otherwise.\n * - no-cache: return result from network, fail if network call doesn't succeed, don't save to cache\n * - network-only: return result from network, fail if network call doesn't succeed, save to cache\n * - standby: only for queries that aren't actively watched, but should be available for refetch and updateQueries.\n */\nexport type FetchPolicy =\n | \"cache-first\"\n | \"network-only\"\n | \"cache-only\"\n | \"no-cache\"\n | \"standby\";\n\nexport type WatchQueryFetchPolicy = FetchPolicy | \"cache-and-network\";\n\nexport type MutationFetchPolicy = Extract<\n FetchPolicy,\n | \"network-only\" // default behavior (mutation results written to cache)\n | \"no-cache\" // alternate behavior (results not written to cache)\n>;\n\nexport type RefetchWritePolicy = \"merge\" | \"overwrite\";\n\n/**\n * errorPolicy determines the level of events for errors in the execution result. The options are:\n * - none (default): any errors from the request are treated like runtime errors and the observable is stopped\n * - ignore: errors from the request do not stop the observable, but also don't call `next`\n * - all: errors are treated like data and will notify observables\n */\nexport type ErrorPolicy = \"none\" | \"ignore\" | \"all\";\n\n/**\n * Query options.\n */\nexport interface QueryOptions<TVariables = OperationVariables, TData = any> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#query:member} */\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: FetchPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#pollInterval:member} */\n pollInterval?: number;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#notifyOnNetworkStatusChange:member} */\n notifyOnNetworkStatusChange?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#returnPartialData:member} */\n returnPartialData?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#partialRefetch:member} */\n partialRefetch?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#canonizeResults:member} */\n canonizeResults?: boolean;\n}\n\n/**\n * Watched query options.\n */\nexport interface WatchQueryOptions<\n TVariables extends OperationVariables = OperationVariables,\n TData = any,\n> extends SharedWatchQueryOptions<TVariables, TData> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#query:member} */\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n}\n\nexport interface SharedWatchQueryOptions<\n TVariables extends OperationVariables,\n TData,\n> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: WatchQueryFetchPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#nextFetchPolicy:member} */\n nextFetchPolicy?:\n | WatchQueryFetchPolicy\n | ((\n this: WatchQueryOptions<TVariables, TData>,\n currentFetchPolicy: WatchQueryFetchPolicy,\n context: NextFetchPolicyContext<TData, TVariables>\n ) => WatchQueryFetchPolicy);\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#initialFetchPolicy:member} */\n initialFetchPolicy?: WatchQueryFetchPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#refetchWritePolicy:member} */\n refetchWritePolicy?: RefetchWritePolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#pollInterval:member} */\n pollInterval?: number;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#notifyOnNetworkStatusChange:member} */\n notifyOnNetworkStatusChange?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#returnPartialData:member} */\n returnPartialData?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#partialRefetch:member} */\n partialRefetch?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#canonizeResults:member} */\n canonizeResults?: boolean;\n\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#skipPollAttempt:member} */\n skipPollAttempt?: () => boolean;\n}\n\nexport interface NextFetchPolicyContext<\n TData,\n TVariables extends OperationVariables,\n> {\n reason: \"after-fetch\" | \"variables-changed\";\n observable: ObservableQuery<TData, TVariables>;\n options: WatchQueryOptions<TVariables, TData>;\n initialFetchPolicy: WatchQueryFetchPolicy;\n}\n\nexport interface FetchMoreQueryOptions<TVariables, TData = any> {\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#query:member} */\n query?: DocumentNode | TypedDocumentNode<TData, TVariables>;\n /** {@inheritDoc @apollo/client!QueryOptionsDocumentation#variables:member} */\n variables?: Partial<TVariables>;\n context?: DefaultContext;\n}\n\nexport type UpdateQueryFn<\n TData = any,\n TSubscriptionVariables = OperationVariables,\n TSubscriptionData = TData,\n> = (\n previousQueryResult: Unmasked<TData>,\n options: {\n subscriptionData: { data: Unmasked<TSubscriptionData> };\n variables?: TSubscriptionVariables;\n }\n) => Unmasked<TData>;\n\nexport type SubscribeToMoreOptions<\n TData = any,\n TSubscriptionVariables = OperationVariables,\n TSubscriptionData = TData,\n> = {\n document:\n | DocumentNode\n | TypedDocumentNode<TSubscriptionData, TSubscriptionVariables>;\n variables?: TSubscriptionVariables;\n updateQuery?: UpdateQueryFn<TData, TSubscriptionVariables, TSubscriptionData>;\n onError?: (error: Error) => void;\n context?: DefaultContext;\n};\n\nexport interface SubscriptionOptions<\n TVariables = OperationVariables,\n TData = any,\n> {\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#query:member} */\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: FetchPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#extensions:member} */\n extensions?: Record<string, any>;\n}\n\nexport interface MutationBaseOptions<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n> {\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#optimisticResponse:member} */\n optimisticResponse?:\n | Unmasked<NoInfer<TData>>\n | ((\n vars: TVariables,\n { IGNORE }: { IGNORE: IgnoreModifier }\n ) => Unmasked<NoInfer<TData>> | IgnoreModifier);\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#updateQueries:member} */\n updateQueries?: MutationQueryReducersMap<TData>;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#refetchQueries:member} */\n refetchQueries?:\n | ((result: FetchResult<Unmasked<TData>>) => InternalRefetchQueriesInclude)\n | InternalRefetchQueriesInclude;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#awaitRefetchQueries:member} */\n awaitRefetchQueries?: boolean;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#update:member} */\n update?: MutationUpdaterFunction<TData, TVariables, TContext, TCache>;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#onQueryUpdated:member} */\n onQueryUpdated?: OnQueryUpdated<any>;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#variables:member} */\n variables?: TVariables;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#context:member} */\n context?: TContext;\n}\n\nexport interface MutationOptions<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n> extends MutationSharedOptions<TData, TVariables, TContext, TCache> {\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#mutation:member} */\n mutation: DocumentNode | TypedDocumentNode<TData, TVariables>;\n}\nexport interface MutationSharedOptions<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n> extends MutationBaseOptions<TData, TVariables, TContext, TCache> {\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: MutationFetchPolicy;\n\n /** {@inheritDoc @apollo/client!MutationOptionsDocumentation#keepRootFields:member} */\n keepRootFields?: boolean;\n}\n"]}