@apollo/client 4.3.0-alpha.1 → 4.3.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +285 -0
  2. package/__cjs/cache/core/Scalar.cjs +36 -0
  3. package/__cjs/cache/core/Scalar.cjs.map +1 -0
  4. package/__cjs/cache/core/Scalar.d.cts +20 -0
  5. package/__cjs/cache/core/cache.cjs +8 -1
  6. package/__cjs/cache/core/cache.cjs.map +1 -1
  7. package/__cjs/cache/core/cache.d.cts +16 -0
  8. package/__cjs/cache/index.cjs +3 -1
  9. package/__cjs/cache/index.cjs.map +1 -1
  10. package/__cjs/cache/index.d.cts +3 -2
  11. package/__cjs/cache/inmemory/entityStore.cjs +45 -2
  12. package/__cjs/cache/inmemory/entityStore.cjs.map +1 -1
  13. package/__cjs/cache/inmemory/entityStore.d.cts +3 -0
  14. package/__cjs/cache/inmemory/helpers.d.cts +9 -1
  15. package/__cjs/cache/inmemory/inMemoryCache.cjs +73 -4
  16. package/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
  17. package/__cjs/cache/inmemory/inMemoryCache.d.cts +35 -3
  18. package/__cjs/cache/inmemory/policies.cjs +8 -1
  19. package/__cjs/cache/inmemory/policies.cjs.map +1 -1
  20. package/__cjs/cache/inmemory/policies.d.cts +4 -1
  21. package/__cjs/cache/inmemory/readFromStore.cjs +16 -3
  22. package/__cjs/cache/inmemory/readFromStore.cjs.map +1 -1
  23. package/__cjs/cache/inmemory/types.d.cts +20 -4
  24. package/__cjs/cache/inmemory/writeToStore.cjs +10 -6
  25. package/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
  26. package/__cjs/core/ApolloClient.cjs +2 -2
  27. package/__cjs/core/ApolloClient.cjs.map +1 -1
  28. package/__cjs/core/ObservableQuery.cjs +1 -3
  29. package/__cjs/core/ObservableQuery.cjs.map +1 -1
  30. package/__cjs/core/QueryInfo.cjs +211 -37
  31. package/__cjs/core/QueryInfo.cjs.map +1 -1
  32. package/__cjs/core/QueryInfo.d.cts +5 -2
  33. package/__cjs/core/QueryManager.cjs +12 -18
  34. package/__cjs/core/QueryManager.cjs.map +1 -1
  35. package/__cjs/core/QueryManager.d.cts +1 -3
  36. package/__cjs/core/index.cjs +2 -1
  37. package/__cjs/core/index.cjs.map +1 -1
  38. package/__cjs/core/index.d.cts +2 -2
  39. package/__cjs/invariantErrorCodes.cjs +12 -7
  40. package/__cjs/react/hooks/useLazyQuery.cjs.map +1 -1
  41. package/__cjs/react/hooks/useLazyQuery.d.cts +13 -13
  42. package/__cjs/utilities/index.cjs.map +1 -1
  43. package/__cjs/utilities/index.d.cts +1 -0
  44. package/__cjs/utilities/internal/collectSiblingFields.cjs +61 -0
  45. package/__cjs/utilities/internal/collectSiblingFields.cjs.map +1 -0
  46. package/__cjs/utilities/internal/collectSiblingFields.d.cts +21 -0
  47. package/__cjs/utilities/internal/getUnwrappedType.cjs +20 -0
  48. package/__cjs/utilities/internal/getUnwrappedType.cjs.map +1 -0
  49. package/__cjs/utilities/internal/getUnwrappedType.d.cts +8 -0
  50. package/__cjs/utilities/internal/index.cjs +10 -2
  51. package/__cjs/utilities/internal/index.cjs.map +1 -1
  52. package/__cjs/utilities/internal/index.d.cts +6 -0
  53. package/__cjs/utilities/internal/isDeferredFragment.cjs +23 -0
  54. package/__cjs/utilities/internal/isDeferredFragment.cjs.map +1 -0
  55. package/__cjs/utilities/internal/isDeferredFragment.d.cts +4 -0
  56. package/__cjs/utilities/internal/isTypenameField.cjs +7 -0
  57. package/__cjs/utilities/internal/isTypenameField.cjs.map +1 -0
  58. package/__cjs/utilities/internal/isTypenameField.d.cts +3 -0
  59. package/__cjs/utilities/internal/types/IsLooselyEqual.cjs +3 -0
  60. package/__cjs/utilities/internal/types/IsLooselyEqual.cjs.map +1 -0
  61. package/__cjs/utilities/internal/types/IsLooselyEqual.d.cts +10 -0
  62. package/__cjs/utilities/policies/pagination.cjs.map +1 -1
  63. package/__cjs/utilities/policies/pagination.d.cts +1 -1
  64. package/__cjs/utilities/subscriptions/relay/index.cjs +1 -0
  65. package/__cjs/utilities/subscriptions/relay/index.cjs.map +1 -1
  66. package/__cjs/version.cjs +1 -1
  67. package/cache/core/Scalar.d.ts +20 -0
  68. package/cache/core/Scalar.js +32 -0
  69. package/cache/core/Scalar.js.map +1 -0
  70. package/cache/core/cache.d.ts +16 -0
  71. package/cache/core/cache.js +8 -1
  72. package/cache/core/cache.js.map +1 -1
  73. package/cache/index.d.ts +3 -2
  74. package/cache/index.js +1 -0
  75. package/cache/index.js.map +1 -1
  76. package/cache/inmemory/entityStore.d.ts +3 -0
  77. package/cache/inmemory/entityStore.js +46 -3
  78. package/cache/inmemory/entityStore.js.map +1 -1
  79. package/cache/inmemory/helpers.d.ts +9 -1
  80. package/cache/inmemory/inMemoryCache.d.ts +35 -3
  81. package/cache/inmemory/inMemoryCache.js +74 -5
  82. package/cache/inmemory/inMemoryCache.js.map +1 -1
  83. package/cache/inmemory/policies.d.ts +4 -1
  84. package/cache/inmemory/policies.js +8 -1
  85. package/cache/inmemory/policies.js.map +1 -1
  86. package/cache/inmemory/readFromStore.js +11 -2
  87. package/cache/inmemory/readFromStore.js.map +1 -1
  88. package/cache/inmemory/types.d.ts +20 -4
  89. package/cache/inmemory/types.js.map +1 -1
  90. package/cache/inmemory/writeToStore.js +11 -7
  91. package/cache/inmemory/writeToStore.js.map +1 -1
  92. package/core/ApolloClient.js +2 -2
  93. package/core/ApolloClient.js.map +1 -1
  94. package/core/ObservableQuery.js +1 -3
  95. package/core/ObservableQuery.js.map +1 -1
  96. package/core/QueryInfo.d.ts +5 -2
  97. package/core/QueryInfo.js +212 -38
  98. package/core/QueryInfo.js.map +1 -1
  99. package/core/QueryManager.d.ts +1 -3
  100. package/core/QueryManager.js +12 -18
  101. package/core/QueryManager.js.map +1 -1
  102. package/core/index.d.ts +2 -2
  103. package/core/index.js +1 -1
  104. package/core/index.js.map +1 -1
  105. package/invariantErrorCodes.js +12 -7
  106. package/package.json +1 -1
  107. package/react/hooks/useLazyQuery.d.ts +13 -13
  108. package/react/hooks/useLazyQuery.js.map +1 -1
  109. package/react/hooks-compiled/useLazyQuery.d.ts +13 -13
  110. package/react/hooks-compiled/useLazyQuery.js.map +1 -1
  111. package/utilities/index.d.ts +1 -0
  112. package/utilities/index.js.map +1 -1
  113. package/utilities/internal/collectSiblingFields.d.ts +21 -0
  114. package/utilities/internal/collectSiblingFields.js +58 -0
  115. package/utilities/internal/collectSiblingFields.js.map +1 -0
  116. package/utilities/internal/getUnwrappedType.d.ts +8 -0
  117. package/utilities/internal/getUnwrappedType.js +17 -0
  118. package/utilities/internal/getUnwrappedType.js.map +1 -0
  119. package/utilities/internal/index.d.ts +6 -0
  120. package/utilities/internal/index.js +4 -0
  121. package/utilities/internal/index.js.map +1 -1
  122. package/utilities/internal/isDeferredFragment.d.ts +4 -0
  123. package/utilities/internal/isDeferredFragment.js +20 -0
  124. package/utilities/internal/isDeferredFragment.js.map +1 -0
  125. package/utilities/internal/isTypenameField.d.ts +3 -0
  126. package/utilities/internal/isTypenameField.js +4 -0
  127. package/utilities/internal/isTypenameField.js.map +1 -0
  128. package/utilities/internal/types/IsLooselyEqual.d.ts +10 -0
  129. package/utilities/internal/types/IsLooselyEqual.js +2 -0
  130. package/utilities/internal/types/IsLooselyEqual.js.map +1 -0
  131. package/utilities/policies/pagination.d.ts +1 -1
  132. package/utilities/policies/pagination.js.map +1 -1
  133. package/utilities/subscriptions/relay/index.js +1 -0
  134. package/utilities/subscriptions/relay/index.js.map +1 -1
  135. package/version.js +1 -1
@@ -3,7 +3,7 @@ import { Trie } from "@wry/trie";
3
3
  import { dep } from "optimism";
4
4
  import { isReference } from "@apollo/client/utilities";
5
5
  import { __DEV__ } from "@apollo/client/utilities/environment";
6
- import { DeepMerger, isNonNullObject, makeReference, maybeDeepFreeze, } from "@apollo/client/utilities/internal";
6
+ import { DeepMerger, isNonNullObject, isPlainObject, makeReference, maybeDeepFreeze, } from "@apollo/client/utilities/internal";
7
7
  import { invariant } from "@apollo/client/utilities/invariant";
8
8
  import { fieldNameFromStoreName, hasOwn } from "./helpers.js";
9
9
  const DELETE = {};
@@ -68,12 +68,17 @@ export class EntityStore {
68
68
  if (isReference(newer))
69
69
  newer = newer.__ref;
70
70
  const existing = typeof older === "string" ? this.lookup((dataId = older)) : older;
71
- const incoming = typeof newer === "string" ? this.lookup((dataId = newer)) : newer;
71
+ let incoming = typeof newer === "string" ? this.lookup((dataId = newer)) : newer;
72
72
  // If newer was a string ID, but that ID was not defined in this store,
73
73
  // then there are no fields to be merged, so we're done.
74
74
  if (!incoming)
75
75
  return;
76
76
  invariant(typeof dataId === "string", 104);
77
+ // Parse all scalars before merging so that the storeObjectReconciler can
78
+ // deep compare the parsed value with the existing value
79
+ incoming = this.coerceStoreObject(incoming, (scalar, value) => scalar.coerceToParsed(value), incoming.__typename ||
80
+ existing?.__typename ||
81
+ this.policies.rootTypenamesById[dataId]);
77
82
  const merged = new DeepMerger({
78
83
  reconciler: storeObjectReconciler,
79
84
  }).merge(existing, incoming);
@@ -277,7 +282,14 @@ export class EntityStore {
277
282
  this.replace(null);
278
283
  }
279
284
  extract() {
280
- const obj = this.toObject();
285
+ let obj = this.toObject();
286
+ if (this.hasScalarConfig()) {
287
+ obj = Object.fromEntries(Object.entries(obj).map(([dataId, storeObject]) => [
288
+ dataId,
289
+ storeObject &&
290
+ this.coerceStoreObject(storeObject, (scalar, value) => scalar.coerceToSerialized(value), storeObject?.__typename || this.policies.rootTypenamesById[dataId]),
291
+ ]));
292
+ }
281
293
  const extraRootIds = [];
282
294
  this.getRootIdSet().forEach((id) => {
283
295
  if (!hasOwn.call(this.policies.rootTypenamesById, id)) {
@@ -289,6 +301,37 @@ export class EntityStore {
289
301
  }
290
302
  return obj;
291
303
  }
304
+ hasScalarConfig() {
305
+ return !!this.policies.cache["config"].scalars;
306
+ }
307
+ coerceStoreObject(obj, coerce, typename = obj.__typename) {
308
+ if (!typename || !this.hasScalarConfig()) {
309
+ return obj;
310
+ }
311
+ let changed = false;
312
+ const entries = Object.entries(obj).map(([storeFieldName, value]) => {
313
+ const scalar = this.policies.getScalarForField(typename, fieldNameFromStoreName(storeFieldName));
314
+ const newValue = this.coerceValue(value, coerce, scalar);
315
+ changed ||= newValue !== value;
316
+ return [storeFieldName, newValue];
317
+ });
318
+ return changed ? Object.fromEntries(entries) : obj;
319
+ }
320
+ coerceValue(value, coerce, scalar) {
321
+ if (value == null) {
322
+ return value;
323
+ }
324
+ if (Array.isArray(value)) {
325
+ return value.map((item) => this.coerceValue(item, coerce, scalar));
326
+ }
327
+ if (scalar) {
328
+ return coerce(scalar, value);
329
+ }
330
+ if (isPlainObject(value) && "__typename" in value) {
331
+ return this.coerceStoreObject(value, coerce);
332
+ }
333
+ return value;
334
+ }
292
335
  replace(newData) {
293
336
  Object.keys(this.data).forEach((dataId) => {
294
337
  if (!(newData && hasOwn.call(newData, dataId))) {