@apollo/client 3.12.0-alpha.0 → 3.12.0-rc.1

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 (148) hide show
  1. package/.changeset/brown-readers-smash.md +5 -0
  2. package/.changeset/cold-apes-bow.md +5 -0
  3. package/.changeset/early-bobcats-eat.md +5 -0
  4. package/.changeset/flat-beans-knock.md +15 -0
  5. package/.changeset/gorgeous-zebras-confess.md +5 -0
  6. package/.changeset/kind-toys-tie.md +5 -0
  7. package/.changeset/long-zoos-ring.md +5 -0
  8. package/.changeset/nervous-owls-hear.md +5 -0
  9. package/.changeset/nice-countries-share.md +5 -0
  10. package/.changeset/pre.json +13 -2
  11. package/.changeset/slimy-points-end.md +5 -0
  12. package/.changeset/small-bears-confess.md +5 -0
  13. package/CHANGELOG.md +52 -0
  14. package/apollo-client.cjs +187 -93
  15. package/apollo-client.cjs.map +1 -1
  16. package/apollo-client.min.cjs +1 -1
  17. package/cache/cache.cjs +59 -25
  18. package/cache/cache.cjs.map +1 -1
  19. package/cache/cache.cjs.native.js +59 -25
  20. package/cache/inmemory/policies.js +12 -9
  21. package/cache/inmemory/policies.js.map +1 -1
  22. package/config/jest/setup.js +5 -0
  23. package/config/jest/setup.js.map +1 -1
  24. package/core/ApolloClient.js +7 -3
  25. package/core/ApolloClient.js.map +1 -1
  26. package/core/ObservableQuery.js +2 -0
  27. package/core/ObservableQuery.js.map +1 -1
  28. package/core/QueryManager.d.ts +4 -1
  29. package/core/QueryManager.js +26 -2
  30. package/core/QueryManager.js.map +1 -1
  31. package/core/core.cjs +86 -25
  32. package/core/core.cjs.map +1 -1
  33. package/core/core.cjs.native.js +86 -25
  34. package/core/masking.d.ts +6 -0
  35. package/core/masking.js +62 -20
  36. package/core/masking.js.map +1 -1
  37. package/dev/dev.cjs +66 -62
  38. package/dev/dev.cjs.map +1 -1
  39. package/dev/dev.cjs.native.js +66 -62
  40. package/invariantErrorCodes.js +66 -61
  41. package/link/core/ApolloLink.js +2 -2
  42. package/link/core/core.cjs +2 -2
  43. package/link/core/core.cjs.map +1 -1
  44. package/link/core/core.cjs.native.js +2 -2
  45. package/link/http/checkFetcher.js +1 -1
  46. package/link/http/createHttpLink.js +1 -1
  47. package/link/http/http.cjs +3 -3
  48. package/link/http/http.cjs.map +1 -1
  49. package/link/http/http.cjs.native.js +3 -3
  50. package/link/http/serializeFetchParameter.js +1 -1
  51. package/link/persisted-queries/index.js +2 -2
  52. package/link/persisted-queries/index.js.map +1 -1
  53. package/link/persisted-queries/persisted-queries.cjs +2 -2
  54. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  55. package/link/persisted-queries/persisted-queries.cjs.native.js +2 -2
  56. package/link/utils/toPromise.js +1 -1
  57. package/link/utils/utils.cjs +2 -2
  58. package/link/utils/utils.cjs.map +1 -1
  59. package/link/utils/utils.cjs.native.js +2 -2
  60. package/link/utils/validateOperation.js +1 -1
  61. package/masking/internal/types.d.ts +2 -2
  62. package/masking/internal/types.js.map +1 -1
  63. package/masking/types.d.ts +2 -2
  64. package/masking/types.js.map +1 -1
  65. package/package.json +4 -3
  66. package/react/context/ApolloConsumer.js +1 -1
  67. package/react/context/ApolloContext.js +1 -1
  68. package/react/context/ApolloProvider.js +1 -1
  69. package/react/context/context.cjs +3 -3
  70. package/react/context/context.cjs.map +1 -1
  71. package/react/context/context.cjs.native.js +3 -3
  72. package/react/hoc/hoc-utils.js +1 -1
  73. package/react/hoc/hoc.cjs +2 -2
  74. package/react/hoc/hoc.cjs.map +1 -1
  75. package/react/hoc/hoc.cjs.native.js +2 -2
  76. package/react/hoc/withApollo.js +1 -1
  77. package/react/hooks/hooks.cjs +34 -20
  78. package/react/hooks/hooks.cjs.map +1 -1
  79. package/react/hooks/hooks.cjs.native.js +34 -20
  80. package/react/hooks/useApolloClient.js +1 -1
  81. package/react/hooks/useFragment.d.ts +1 -1
  82. package/react/hooks/useFragment.js +33 -19
  83. package/react/hooks/useFragment.js.map +1 -1
  84. package/react/hooks/useLoadableQuery.js +2 -2
  85. package/react/hooks/useSubscription.js +3 -3
  86. package/react/hooks/useSuspenseQuery.js +2 -2
  87. package/react/hooks/useSyncExternalStore.js +1 -1
  88. package/react/internal/cache/QueryReference.js +2 -2
  89. package/react/internal/cache/QueryReference.js.map +1 -1
  90. package/react/internal/internal.cjs +3 -3
  91. package/react/internal/internal.cjs.map +1 -1
  92. package/react/internal/internal.cjs.native.js +3 -3
  93. package/react/parser/index.js +5 -5
  94. package/react/parser/parser.cjs +5 -5
  95. package/react/parser/parser.cjs.map +1 -1
  96. package/react/parser/parser.cjs.native.js +5 -5
  97. package/testing/core/core.cjs +2 -2
  98. package/testing/core/core.cjs.map +1 -1
  99. package/testing/core/core.cjs.native.js +2 -2
  100. package/testing/core/mocking/mockLink.js +2 -2
  101. package/testing/internal/ObservableStream.d.ts +11 -15
  102. package/testing/internal/ObservableStream.js +18 -62
  103. package/testing/internal/ObservableStream.js.map +1 -1
  104. package/testing/internal/index.d.ts +1 -2
  105. package/testing/internal/index.js +1 -2
  106. package/testing/internal/index.js.map +1 -1
  107. package/testing/internal/renderHelpers.d.ts +13 -2
  108. package/testing/internal/renderHelpers.js +20 -12
  109. package/testing/internal/renderHelpers.js.map +1 -1
  110. package/testing/matchers/index.js +0 -3
  111. package/testing/matchers/index.js.map +1 -1
  112. package/utilities/globals/globals.cjs +1 -1
  113. package/utilities/globals/globals.cjs.map +1 -1
  114. package/utilities/globals/globals.cjs.native.js +1 -1
  115. package/utilities/graphql/DocumentTransform.js +1 -1
  116. package/utilities/graphql/directives.js +7 -7
  117. package/utilities/graphql/fragments.d.ts +1 -0
  118. package/utilities/graphql/fragments.js +18 -3
  119. package/utilities/graphql/fragments.js.map +1 -1
  120. package/utilities/graphql/getFromAST.js +8 -8
  121. package/utilities/graphql/storeUtils.js +1 -1
  122. package/utilities/graphql/transform.js +8 -2
  123. package/utilities/graphql/transform.js.map +1 -1
  124. package/utilities/index.d.ts +1 -1
  125. package/utilities/index.js +1 -1
  126. package/utilities/index.js.map +1 -1
  127. package/utilities/utilities.cjs +41 -22
  128. package/utilities/utilities.cjs.map +1 -1
  129. package/utilities/utilities.cjs.native.js +41 -22
  130. package/version.js +1 -1
  131. package/testing/internal/profile/Render.d.ts +0 -69
  132. package/testing/internal/profile/Render.js +0 -144
  133. package/testing/internal/profile/Render.js.map +0 -1
  134. package/testing/internal/profile/context.d.ts +0 -10
  135. package/testing/internal/profile/context.js +0 -14
  136. package/testing/internal/profile/context.js.map +0 -1
  137. package/testing/internal/profile/index.d.ts +0 -4
  138. package/testing/internal/profile/index.js +0 -2
  139. package/testing/internal/profile/index.js.map +0 -1
  140. package/testing/internal/profile/profile.d.ts +0 -109
  141. package/testing/internal/profile/profile.js +0 -304
  142. package/testing/internal/profile/profile.js.map +0 -1
  143. package/testing/internal/profile/traces.d.ts +0 -7
  144. package/testing/internal/profile/traces.js +0 -30
  145. package/testing/internal/profile/traces.js.map +0 -1
  146. package/testing/matchers/ProfiledComponent.d.ts +0 -8
  147. package/testing/matchers/ProfiledComponent.js +0 -110
  148. package/testing/matchers/ProfiledComponent.js.map +0 -1
@@ -12,6 +12,7 @@ var cache = require('../cache');
12
12
  var errors = require('../errors');
13
13
  var trie = require('@wry/trie');
14
14
  var graphql = require('graphql');
15
+ var optimism = require('optimism');
15
16
  var utils = require('../link/utils');
16
17
  var tsInvariant = require('ts-invariant');
17
18
  var graphqlTag = require('graphql-tag');
@@ -20,7 +21,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
20
21
 
21
22
  var equal__default = /*#__PURE__*/_interopDefaultLegacy(equal);
22
23
 
23
- var version = "3.12.0-alpha.0";
24
+ var version = "3.12.0-rc.1";
24
25
 
25
26
  function isNonNullObject(obj) {
26
27
  return obj !== null && typeof obj === "object";
@@ -758,6 +759,8 @@ var ObservableQuery = (function (_super) {
758
759
  return result && "data" in result ? tslib.__assign(tslib.__assign({}, result), { data: this.queryManager.maskOperation({
759
760
  document: this.query,
760
761
  data: result.data,
762
+ fetchPolicy: this.options.fetchPolicy,
763
+ id: this.queryId,
761
764
  }) }) : result;
762
765
  };
763
766
  return ObservableQuery;
@@ -1071,6 +1074,7 @@ function shouldWriteResult(result, errorPolicy) {
1071
1074
  return writeWithErrors;
1072
1075
  }
1073
1076
 
1077
+ var disableWarningsSlot = new optimism.Slot();
1074
1078
  function maskOperation(data, document, cache) {
1075
1079
  var _a;
1076
1080
  if (!cache.fragmentMatches) {
@@ -1080,7 +1084,7 @@ function maskOperation(data, document, cache) {
1080
1084
  return data;
1081
1085
  }
1082
1086
  var definition = utilities.getOperationDefinition(document);
1083
- globals.invariant(definition, 37);
1087
+ globals.invariant(definition, 38);
1084
1088
  if (data == null) {
1085
1089
  return data;
1086
1090
  }
@@ -1092,9 +1096,7 @@ function maskOperation(data, document, cache) {
1092
1096
  };
1093
1097
  var _b = maskSelectionSet(data, definition.selectionSet, context), masked = _b[0], changed = _b[1];
1094
1098
  if (Object.isFrozen(data)) {
1095
- context.disableWarnings = true;
1096
- utilities.maybeDeepFreeze(masked);
1097
- context.disableWarnings = false;
1099
+ disableWarningsSlot.withValue(true, utilities.maybeDeepFreeze, [masked]);
1098
1100
  }
1099
1101
  return changed ? masked : data;
1100
1102
  }
@@ -1109,14 +1111,17 @@ function maskFragment(data, document, cache, fragmentName) {
1109
1111
  return node.kind === graphql.Kind.FRAGMENT_DEFINITION;
1110
1112
  });
1111
1113
  if (typeof fragmentName === "undefined") {
1112
- globals.invariant(fragments.length === 1, 38, fragments.length);
1114
+ globals.invariant(fragments.length === 1, 39, fragments.length);
1113
1115
  fragmentName = fragments[0].name.value;
1114
1116
  }
1115
1117
  var fragment = fragments.find(function (fragment) { return fragment.name.value === fragmentName; });
1116
- globals.invariant(!!fragment, 39, fragmentName);
1118
+ globals.invariant(!!fragment, 40, fragmentName);
1117
1119
  if (data == null) {
1118
1120
  return data;
1119
1121
  }
1122
+ if (equal.equal(data, {})) {
1123
+ return data;
1124
+ }
1120
1125
  var context = {
1121
1126
  operationType: "fragment",
1122
1127
  operationName: fragment.name.value,
@@ -1125,9 +1130,7 @@ function maskFragment(data, document, cache, fragmentName) {
1125
1130
  };
1126
1131
  var _a = maskSelectionSet(data, fragment.selectionSet, context), masked = _a[0], changed = _a[1];
1127
1132
  if (Object.isFrozen(data)) {
1128
- context.disableWarnings = true;
1129
- utilities.maybeDeepFreeze(masked);
1130
- context.disableWarnings = false;
1133
+ disableWarningsSlot.withValue(true, utilities.maybeDeepFreeze, [masked]);
1131
1134
  }
1132
1135
  return changed ? masked : data;
1133
1136
  }
@@ -1144,14 +1147,22 @@ function maskSelectionSet(data, selectionSet, context, path) {
1144
1147
  });
1145
1148
  return [changed_1 ? masked : data, changed_1];
1146
1149
  }
1147
- var result = selectionSet.selections.reduce(function (_a, selection) {
1150
+ var result = selectionSet.selections
1151
+ .concat()
1152
+ .sort(sortFragmentsLast)
1153
+ .reduce(function (_a, selection) {
1148
1154
  var memo = _a[0], changed = _a[1];
1149
1155
  switch (selection.kind) {
1150
1156
  case graphql.Kind.FIELD: {
1151
1157
  var keyName = utilities.resultKeyNameFromField(selection);
1152
1158
  var childSelectionSet = selection.selectionSet;
1153
1159
  memo[keyName] = data[keyName];
1154
- if (childSelectionSet && data[keyName] !== null) {
1160
+ if (memo[keyName] === void 0) {
1161
+ delete memo[keyName];
1162
+ }
1163
+ if (keyName in memo &&
1164
+ childSelectionSet &&
1165
+ data[keyName] !== null) {
1155
1166
  var _b = maskSelectionSet(data[keyName], childSelectionSet, context, globalThis.__DEV__ !== false ? "".concat(path || "", ".").concat(keyName) : void 0), masked = _b[0], childChanged = _b[1];
1156
1167
  if (childChanged ||
1157
1168
  Object.keys(masked).length !== Object.keys(data[keyName]).length) {
@@ -1177,7 +1188,7 @@ function maskSelectionSet(data, selectionSet, context, path) {
1177
1188
  var fragment = context.fragmentMap[fragmentName] ||
1178
1189
  (context.fragmentMap[fragmentName] =
1179
1190
  context.cache.lookupFragment(fragmentName));
1180
- globals.invariant(fragment, 40, fragmentName);
1191
+ globals.invariant(fragment, 41, fragmentName);
1181
1192
  var mode = utilities.getFragmentMaskMode(selection);
1182
1193
  if (mode === "mask") {
1183
1194
  return [memo, true];
@@ -1195,7 +1206,7 @@ function maskSelectionSet(data, selectionSet, context, path) {
1195
1206
  }
1196
1207
  }
1197
1208
  }, [Object.create(null), false]);
1198
- if ("__typename" in data && !("__typename" in result[0])) {
1209
+ if (data && "__typename" in data && !("__typename" in result[0])) {
1199
1210
  result[0].__typename = data.__typename;
1200
1211
  }
1201
1212
  return result;
@@ -1206,20 +1217,29 @@ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
1206
1217
  return addFieldAccessorWarnings(memo[index] || Object.create(null), item, selectionSetNode, "".concat(path, "[").concat(index, "]"), context);
1207
1218
  });
1208
1219
  }
1209
- return selectionSetNode.selections.reduce(function (memo, selection) {
1220
+ return selectionSetNode.selections
1221
+ .concat()
1222
+ .sort(sortFragmentsLast)
1223
+ .reduce(function (memo, selection) {
1210
1224
  switch (selection.kind) {
1211
1225
  case graphql.Kind.FIELD: {
1212
1226
  var keyName = utilities.resultKeyNameFromField(selection);
1213
1227
  var childSelectionSet = selection.selectionSet;
1214
- if (keyName in memo) {
1228
+ if (keyName in memo && !childSelectionSet) {
1215
1229
  return memo;
1216
1230
  }
1217
1231
  var value = data[keyName];
1218
1232
  if (childSelectionSet) {
1219
- value = addFieldAccessorWarnings(memo[keyName] || Object.create(null), data[keyName], childSelectionSet, "".concat(path, ".").concat(keyName), context);
1233
+ value = addFieldAccessorWarnings(memo[keyName] ||
1234
+ (Array.isArray(data[keyName]) ? [] : Object.create(null)), data[keyName], childSelectionSet, "".concat(path, ".").concat(keyName), context);
1220
1235
  }
1221
1236
  if (globalThis.__DEV__ !== false) {
1222
- addAccessorWarning(memo, value, keyName, path, context);
1237
+ if (keyName in memo) {
1238
+ memo[keyName] = value;
1239
+ }
1240
+ else {
1241
+ addAccessorWarning(memo, value, keyName, path, context);
1242
+ }
1223
1243
  }
1224
1244
  if (!(globalThis.__DEV__ !== false)) {
1225
1245
  memo[keyName] = data[keyName];
@@ -1227,6 +1247,10 @@ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
1227
1247
  return memo;
1228
1248
  }
1229
1249
  case graphql.Kind.INLINE_FRAGMENT: {
1250
+ if (selection.typeCondition &&
1251
+ !context.cache.fragmentMatches(selection, data.__typename)) {
1252
+ return memo;
1253
+ }
1230
1254
  return addFieldAccessorWarnings(memo, data, selection.selectionSet, path, context);
1231
1255
  }
1232
1256
  case graphql.Kind.FRAGMENT_SPREAD: {
@@ -1245,11 +1269,14 @@ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
1245
1269
  }, memo);
1246
1270
  }
1247
1271
  function addAccessorWarning(data, value, fieldName, path, context) {
1272
+ if (value === void 0) {
1273
+ return;
1274
+ }
1248
1275
  var getValue = function () {
1249
- if (context.disableWarnings) {
1276
+ if (disableWarningsSlot.getValue()) {
1250
1277
  return value;
1251
1278
  }
1252
- globalThis.__DEV__ !== false && globals.invariant.warn(41, context.operationName ?
1279
+ globalThis.__DEV__ !== false && globals.invariant.warn(42, context.operationName ?
1253
1280
  "".concat(context.operationType, " '").concat(context.operationName, "'")
1254
1281
  : "anonymous ".concat(context.operationType), "".concat(path, ".").concat(fieldName).replace(/^\./, ""));
1255
1282
  getValue = function () { return value; };
@@ -1270,8 +1297,14 @@ var issuedWarning = false;
1270
1297
  function warnOnImproperCacheImplementation() {
1271
1298
  if (!issuedWarning) {
1272
1299
  issuedWarning = true;
1273
- globalThis.__DEV__ !== false && globals.invariant.warn(42);
1300
+ globalThis.__DEV__ !== false && globals.invariant.warn(43);
1301
+ }
1302
+ }
1303
+ function sortFragmentsLast(a, b) {
1304
+ if (a.kind === b.kind) {
1305
+ return 0;
1274
1306
  }
1307
+ return a.kind === graphql.Kind.FRAGMENT_SPREAD ? 1 : -1;
1275
1308
  }
1276
1309
 
1277
1310
  var hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -1288,6 +1321,7 @@ var QueryManager = (function () {
1288
1321
  this.requestIdCounter = 1;
1289
1322
  this.mutationIdCounter = 1;
1290
1323
  this.inFlightLinkObservables = new trie.Trie(false);
1324
+ this.noCacheWarningsByQueryId = new Set();
1291
1325
  var defaultDocumentTransform = new utilities.DocumentTransform(function (document) { return _this.cache.transformDocument(document); },
1292
1326
  { cache: false });
1293
1327
  this.cache = options.cache;
@@ -1404,6 +1438,8 @@ var QueryManager = (function () {
1404
1438
  resolve(tslib.__assign(tslib.__assign({}, storeResult), { data: self.maskOperation({
1405
1439
  document: mutation,
1406
1440
  data: storeResult.data,
1441
+ fetchPolicy: fetchPolicy,
1442
+ id: mutationId,
1407
1443
  }) }));
1408
1444
  }
1409
1445
  },
@@ -1665,7 +1701,12 @@ var QueryManager = (function () {
1665
1701
  var query = this.transform(options.query);
1666
1702
  return this.fetchQuery(queryId, tslib.__assign(tslib.__assign({}, options), { query: query }))
1667
1703
  .then(function (result) {
1668
- return result && tslib.__assign(tslib.__assign({}, result), { data: _this.maskOperation({ document: query, data: result.data }) });
1704
+ return result && tslib.__assign(tslib.__assign({}, result), { data: _this.maskOperation({
1705
+ document: query,
1706
+ data: result.data,
1707
+ fetchPolicy: options.fetchPolicy,
1708
+ id: queryId,
1709
+ }) });
1669
1710
  })
1670
1711
  .finally(function () { return _this.stopQuery(queryId); });
1671
1712
  };
@@ -2078,7 +2119,23 @@ var QueryManager = (function () {
2078
2119
  return results;
2079
2120
  };
2080
2121
  QueryManager.prototype.maskOperation = function (options) {
2122
+ var _a, _b, _c;
2081
2123
  var document = options.document, data = options.data;
2124
+ if (globalThis.__DEV__ !== false) {
2125
+ var fetchPolicy = options.fetchPolicy, id = options.id;
2126
+ var operationType = (_a = utilities.getOperationDefinition(document)) === null || _a === void 0 ? void 0 : _a.operation;
2127
+ var operationId = ((_b = operationType === null || operationType === void 0 ? void 0 : operationType[0]) !== null && _b !== void 0 ? _b : "o") + id;
2128
+ if (this.dataMasking &&
2129
+ fetchPolicy === "no-cache" &&
2130
+ !utilities.isFullyUnmaskedOperation(document) &&
2131
+ !this.noCacheWarningsByQueryId.has(operationId)) {
2132
+ this.noCacheWarningsByQueryId.add(operationId);
2133
+ globalThis.__DEV__ !== false && globals.invariant.warn(
2134
+ 37,
2135
+ (_c = utilities.getOperationName(document)) !== null && _c !== void 0 ? _c : "Unnamed ".concat(operationType !== null && operationType !== void 0 ? operationType : "operation")
2136
+ );
2137
+ }
2138
+ }
2082
2139
  return (this.dataMasking ?
2083
2140
  maskOperation(data, document, this.cache)
2084
2141
  : data);
@@ -2602,13 +2659,14 @@ var hasSuggestedDevtools = false;
2602
2659
  var ApolloClient = (function () {
2603
2660
  function ApolloClient(options) {
2604
2661
  var _this = this;
2662
+ var _a;
2605
2663
  this.resetStoreCallbacks = [];
2606
2664
  this.clearStoreCallbacks = [];
2607
2665
  if (!options.cache) {
2608
2666
  throw globals.newInvariantError(16);
2609
2667
  }
2610
- var uri = options.uri, credentials = options.credentials, headers = options.headers, cache = options.cache, documentTransform = options.documentTransform, _a = options.ssrMode, ssrMode = _a === void 0 ? false : _a, _b = options.ssrForceFetchDelay, ssrForceFetchDelay = _b === void 0 ? 0 : _b,
2611
- connectToDevTools = options.connectToDevTools, _c = options.queryDeduplication, queryDeduplication = _c === void 0 ? true : _c, defaultOptions = options.defaultOptions, defaultContext = options.defaultContext, _d = options.assumeImmutableResults, assumeImmutableResults = _d === void 0 ? cache.assumeImmutableResults : _d, resolvers = options.resolvers, typeDefs = options.typeDefs, fragmentMatcher = options.fragmentMatcher, clientAwarenessName = options.name, clientAwarenessVersion = options.version, devtools = options.devtools, dataMasking = options.dataMasking;
2668
+ var uri = options.uri, credentials = options.credentials, headers = options.headers, cache = options.cache, documentTransform = options.documentTransform, _b = options.ssrMode, ssrMode = _b === void 0 ? false : _b, _c = options.ssrForceFetchDelay, ssrForceFetchDelay = _c === void 0 ? 0 : _c,
2669
+ connectToDevTools = options.connectToDevTools, _d = options.queryDeduplication, queryDeduplication = _d === void 0 ? true : _d, defaultOptions = options.defaultOptions, defaultContext = options.defaultContext, _e = options.assumeImmutableResults, assumeImmutableResults = _e === void 0 ? cache.assumeImmutableResults : _e, resolvers = options.resolvers, typeDefs = options.typeDefs, fragmentMatcher = options.fragmentMatcher, clientAwarenessName = options.name, clientAwarenessVersion = options.version, devtools = options.devtools, dataMasking = options.dataMasking;
2612
2670
  var link = options.link;
2613
2671
  if (!link) {
2614
2672
  link =
@@ -2620,7 +2678,7 @@ var ApolloClient = (function () {
2620
2678
  this.queryDeduplication = queryDeduplication;
2621
2679
  this.defaultOptions = defaultOptions || Object.create(null);
2622
2680
  this.typeDefs = typeDefs;
2623
- this.devtoolsConfig = tslib.__assign(tslib.__assign({}, devtools), { enabled: (devtools === null || devtools === void 0 ? void 0 : devtools.enabled) || connectToDevTools });
2681
+ this.devtoolsConfig = tslib.__assign(tslib.__assign({}, devtools), { enabled: (_a = devtools === null || devtools === void 0 ? void 0 : devtools.enabled) !== null && _a !== void 0 ? _a : connectToDevTools });
2624
2682
  if (this.devtoolsConfig.enabled === undefined) {
2625
2683
  this.devtoolsConfig.enabled = globalThis.__DEV__ !== false;
2626
2684
  }
@@ -2751,11 +2809,14 @@ var ApolloClient = (function () {
2751
2809
  };
2752
2810
  ApolloClient.prototype.subscribe = function (options) {
2753
2811
  var _this = this;
2812
+ var id = this.queryManager.generateQueryId();
2754
2813
  return this.queryManager
2755
2814
  .startGraphQLSubscription(options)
2756
2815
  .map(function (result) { return (tslib.__assign(tslib.__assign({}, result), { data: _this.queryManager.maskOperation({
2757
2816
  document: options.query,
2758
2817
  data: result.data,
2818
+ fetchPolicy: options.fetchPolicy,
2819
+ id: id,
2759
2820
  }) })); });
2760
2821
  };
2761
2822
  ApolloClient.prototype.readQuery = function (options, optimistic) {
package/core/masking.d.ts CHANGED
@@ -1,4 +1,10 @@
1
1
  import type { ApolloCache, DocumentNode, TypedDocumentNode } from "./index.js";
2
+ export declare const disableWarningsSlot: {
3
+ readonly id: string;
4
+ hasValue(): boolean;
5
+ getValue(): boolean | undefined;
6
+ withValue<TResult, TArgs extends any[], TThis = any>(value: boolean, callback: (this: TThis, ...args: TArgs) => TResult, args?: TArgs | undefined, thisArg?: TThis | undefined): TResult;
7
+ };
2
8
  export declare function maskOperation<TData = unknown>(data: TData, document: DocumentNode | TypedDocumentNode<TData>, cache: ApolloCache<unknown>): TData;
3
9
  export declare function maskFragment<TData = unknown>(data: TData, document: TypedDocumentNode<TData> | DocumentNode, cache: ApolloCache<unknown>, fragmentName?: string): TData;
4
10
  //# sourceMappingURL=masking.d.ts.map
package/core/masking.js CHANGED
@@ -2,6 +2,11 @@ import { __assign } from "tslib";
2
2
  import { Kind } from "graphql";
3
3
  import { createFragmentMap, resultKeyNameFromField, getFragmentDefinitions, getFragmentMaskMode, getOperationDefinition, maybeDeepFreeze, } from "../utilities/index.js";
4
4
  import { invariant } from "../utilities/globals/index.js";
5
+ import { equal } from "@wry/equality";
6
+ import { Slot } from "optimism";
7
+ // Contextual slot that allows us to disable accessor warnings on fields when in
8
+ // migrate mode.
9
+ export var disableWarningsSlot = new Slot();
5
10
  export function maskOperation(data, document, cache) {
6
11
  var _a;
7
12
  if (!cache.fragmentMatches) {
@@ -11,7 +16,7 @@ export function maskOperation(data, document, cache) {
11
16
  return data;
12
17
  }
13
18
  var definition = getOperationDefinition(document);
14
- invariant(definition, 37);
19
+ invariant(definition, 38);
15
20
  if (data == null) {
16
21
  // Maintain the original `null` or `undefined` value
17
22
  return data;
@@ -24,9 +29,7 @@ export function maskOperation(data, document, cache) {
24
29
  };
25
30
  var _b = maskSelectionSet(data, definition.selectionSet, context), masked = _b[0], changed = _b[1];
26
31
  if (Object.isFrozen(data)) {
27
- context.disableWarnings = true;
28
- maybeDeepFreeze(masked);
29
- context.disableWarnings = false;
32
+ disableWarningsSlot.withValue(true, maybeDeepFreeze, [masked]);
30
33
  }
31
34
  return changed ? masked : data;
32
35
  }
@@ -41,15 +44,21 @@ export function maskFragment(data, document, cache, fragmentName) {
41
44
  return node.kind === Kind.FRAGMENT_DEFINITION;
42
45
  });
43
46
  if (typeof fragmentName === "undefined") {
44
- invariant(fragments.length === 1, 38, fragments.length);
47
+ invariant(fragments.length === 1, 39, fragments.length);
45
48
  fragmentName = fragments[0].name.value;
46
49
  }
47
50
  var fragment = fragments.find(function (fragment) { return fragment.name.value === fragmentName; });
48
- invariant(!!fragment, 39, fragmentName);
51
+ invariant(!!fragment, 40, fragmentName);
49
52
  if (data == null) {
50
53
  // Maintain the original `null` or `undefined` value
51
54
  return data;
52
55
  }
56
+ if (equal(data, {})) {
57
+ // Return early and skip the masking algorithm if we don't have any data
58
+ // yet. This can happen when cache.diff returns an empty object which is
59
+ // used from watchFragment.
60
+ return data;
61
+ }
53
62
  var context = {
54
63
  operationType: "fragment",
55
64
  operationName: fragment.name.value,
@@ -58,9 +67,7 @@ export function maskFragment(data, document, cache, fragmentName) {
58
67
  };
59
68
  var _a = maskSelectionSet(data, fragment.selectionSet, context), masked = _a[0], changed = _a[1];
60
69
  if (Object.isFrozen(data)) {
61
- context.disableWarnings = true;
62
- maybeDeepFreeze(masked);
63
- context.disableWarnings = false;
70
+ disableWarningsSlot.withValue(true, maybeDeepFreeze, [masked]);
64
71
  }
65
72
  return changed ? masked : data;
66
73
  }
@@ -77,14 +84,22 @@ function maskSelectionSet(data, selectionSet, context, path) {
77
84
  });
78
85
  return [changed_1 ? masked : data, changed_1];
79
86
  }
80
- var result = selectionSet.selections.reduce(function (_a, selection) {
87
+ var result = selectionSet.selections
88
+ .concat()
89
+ .sort(sortFragmentsLast)
90
+ .reduce(function (_a, selection) {
81
91
  var memo = _a[0], changed = _a[1];
82
92
  switch (selection.kind) {
83
93
  case Kind.FIELD: {
84
94
  var keyName = resultKeyNameFromField(selection);
85
95
  var childSelectionSet = selection.selectionSet;
86
96
  memo[keyName] = data[keyName];
87
- if (childSelectionSet && data[keyName] !== null) {
97
+ if (memo[keyName] === void 0) {
98
+ delete memo[keyName];
99
+ }
100
+ if (keyName in memo &&
101
+ childSelectionSet &&
102
+ data[keyName] !== null) {
88
103
  var _b = maskSelectionSet(data[keyName], childSelectionSet, context, globalThis.__DEV__ !== false ? "".concat(path || "", ".").concat(keyName) : void 0), masked = _b[0], childChanged = _b[1];
89
104
  if (childChanged ||
90
105
  // This check prevents cases where masked fields may accidentally be
@@ -113,7 +128,7 @@ function maskSelectionSet(data, selectionSet, context, path) {
113
128
  var fragment = context.fragmentMap[fragmentName] ||
114
129
  (context.fragmentMap[fragmentName] =
115
130
  context.cache.lookupFragment(fragmentName));
116
- invariant(fragment, 40, fragmentName);
131
+ invariant(fragment, 41, fragmentName);
117
132
  var mode = getFragmentMaskMode(selection);
118
133
  if (mode === "mask") {
119
134
  return [memo, true];
@@ -131,7 +146,7 @@ function maskSelectionSet(data, selectionSet, context, path) {
131
146
  }
132
147
  }
133
148
  }, [Object.create(null), false]);
134
- if ("__typename" in data && !("__typename" in result[0])) {
149
+ if (data && "__typename" in data && !("__typename" in result[0])) {
135
150
  result[0].__typename = data.__typename;
136
151
  }
137
152
  return result;
@@ -142,20 +157,29 @@ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
142
157
  return addFieldAccessorWarnings(memo[index] || Object.create(null), item, selectionSetNode, "".concat(path, "[").concat(index, "]"), context);
143
158
  });
144
159
  }
145
- return selectionSetNode.selections.reduce(function (memo, selection) {
160
+ return selectionSetNode.selections
161
+ .concat()
162
+ .sort(sortFragmentsLast)
163
+ .reduce(function (memo, selection) {
146
164
  switch (selection.kind) {
147
165
  case Kind.FIELD: {
148
166
  var keyName = resultKeyNameFromField(selection);
149
167
  var childSelectionSet = selection.selectionSet;
150
- if (keyName in memo) {
168
+ if (keyName in memo && !childSelectionSet) {
151
169
  return memo;
152
170
  }
153
171
  var value = data[keyName];
154
172
  if (childSelectionSet) {
155
- value = addFieldAccessorWarnings(memo[keyName] || Object.create(null), data[keyName], childSelectionSet, "".concat(path, ".").concat(keyName), context);
173
+ value = addFieldAccessorWarnings(memo[keyName] ||
174
+ (Array.isArray(data[keyName]) ? [] : Object.create(null)), data[keyName], childSelectionSet, "".concat(path, ".").concat(keyName), context);
156
175
  }
157
176
  if (globalThis.__DEV__ !== false) {
158
- addAccessorWarning(memo, value, keyName, path, context);
177
+ if (keyName in memo) {
178
+ memo[keyName] = value;
179
+ }
180
+ else {
181
+ addAccessorWarning(memo, value, keyName, path, context);
182
+ }
159
183
  }
160
184
  if (!(globalThis.__DEV__ !== false)) {
161
185
  memo[keyName] = data[keyName];
@@ -163,6 +187,10 @@ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
163
187
  return memo;
164
188
  }
165
189
  case Kind.INLINE_FRAGMENT: {
190
+ if (selection.typeCondition &&
191
+ !context.cache.fragmentMatches(selection, data.__typename)) {
192
+ return memo;
193
+ }
166
194
  return addFieldAccessorWarnings(memo, data, selection.selectionSet, path, context);
167
195
  }
168
196
  case Kind.FRAGMENT_SPREAD: {
@@ -181,11 +209,19 @@ function addFieldAccessorWarnings(memo, data, selectionSetNode, path, context) {
181
209
  }, memo);
182
210
  }
183
211
  function addAccessorWarning(data, value, fieldName, path, context) {
212
+ // In order to preserve the original shape of the data as much as possible, we
213
+ // want to skip adding a property with warning to the final result when the
214
+ // value is missing, otherwise our final result will contain additional
215
+ // properties that our original result did not have. This could happen with a
216
+ // deferred payload for example.
217
+ if (value === void 0) {
218
+ return;
219
+ }
184
220
  var getValue = function () {
185
- if (context.disableWarnings) {
221
+ if (disableWarningsSlot.getValue()) {
186
222
  return value;
187
223
  }
188
- globalThis.__DEV__ !== false && invariant.warn(41, context.operationName ?
224
+ globalThis.__DEV__ !== false && invariant.warn(42, context.operationName ?
189
225
  "".concat(context.operationType, " '").concat(context.operationName, "'")
190
226
  : "anonymous ".concat(context.operationType), "".concat(path, ".").concat(fieldName).replace(/^\./, ""));
191
227
  getValue = function () { return value; };
@@ -206,7 +242,13 @@ var issuedWarning = false;
206
242
  function warnOnImproperCacheImplementation() {
207
243
  if (!issuedWarning) {
208
244
  issuedWarning = true;
209
- globalThis.__DEV__ !== false && invariant.warn(42);
245
+ globalThis.__DEV__ !== false && invariant.warn(43);
246
+ }
247
+ }
248
+ function sortFragmentsLast(a, b) {
249
+ if (a.kind === b.kind) {
250
+ return 0;
210
251
  }
252
+ return a.kind === Kind.FRAGMENT_SPREAD ? 1 : -1;
211
253
  }
212
254
  //# sourceMappingURL=masking.js.map
@@ -1 +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"]}
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 {\n FragmentDefinitionNode,\n SelectionNode,\n SelectionSetNode,\n} 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\";\nimport { equal } from \"@wry/equality\";\nimport { Slot } from \"optimism\";\n\ninterface MaskingContext {\n operationType: \"query\" | \"mutation\" | \"subscription\" | \"fragment\";\n operationName: string | undefined;\n fragmentMap: FragmentMap;\n cache: ApolloCache<unknown>;\n}\n\n// Contextual slot that allows us to disable accessor warnings on fields when in\n// migrate mode.\nexport const disableWarningsSlot = new Slot<boolean>();\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 disableWarningsSlot.withValue(true, maybeDeepFreeze, [masked]);\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 if (equal(data, {})) {\n // Return early and skip the masking algorithm if we don't have any data\n // yet. This can happen when cache.diff returns an empty object which is\n // used from watchFragment.\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 disableWarningsSlot.withValue(true, maybeDeepFreeze, [masked]);\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\n .concat()\n .sort(sortFragmentsLast)\n .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 (memo[keyName] === void 0) {\n delete memo[keyName];\n }\n\n if (\n keyName in memo &&\n childSelectionSet &&\n data[keyName] !== null\n ) {\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 (data && \"__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\n .concat()\n .sort(sortFragmentsLast)\n .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 && !childSelectionSet) {\n return memo;\n }\n\n let value = data[keyName];\n\n if (childSelectionSet) {\n value = addFieldAccessorWarnings(\n memo[keyName] ||\n (Array.isArray(data[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 if (keyName in memo) {\n memo[keyName] = value;\n } else {\n addAccessorWarning(memo, value, keyName, path, context);\n }\n }\n\n if (!__DEV__) {\n memo[keyName] = data[keyName];\n }\n\n return memo;\n }\n case Kind.INLINE_FRAGMENT: {\n if (\n selection.typeCondition &&\n !context.cache.fragmentMatches!(selection, (data as any).__typename)\n ) {\n return memo;\n }\n\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 // In order to preserve the original shape of the data as much as possible, we\n // want to skip adding a property with warning to the final result when the\n // value is missing, otherwise our final result will contain additional\n // properties that our original result did not have. This could happen with a\n // deferred payload for example.\n if (value === void 0) {\n return;\n }\n\n let getValue = () => {\n if (disableWarningsSlot.getValue()) {\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\nfunction sortFragmentsLast(a: SelectionNode, b: SelectionNode) {\n if (a.kind === b.kind) {\n return 0;\n }\n\n return a.kind === Kind.FRAGMENT_SPREAD ? 1 : -1;\n}\n"]}