@isograph/react 0.0.0-main-3de26263 → 0.0.0-main-709dc2bb

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 (260) hide show
  1. package/.turbo/turbo-compile-libs.log +9 -2
  2. package/dist/_virtual/rolldown_runtime.js +25 -0
  3. package/dist/core/FragmentReference.d.mts +38 -0
  4. package/dist/core/FragmentReference.d.mts.map +1 -0
  5. package/dist/core/FragmentReference.d.ts +31 -29
  6. package/dist/core/FragmentReference.d.ts.map +1 -1
  7. package/dist/core/FragmentReference.js +7 -5
  8. package/dist/core/FragmentReference.mjs +10 -0
  9. package/dist/core/FragmentReference.mjs.map +1 -0
  10. package/dist/core/IsographEnvironment.d.mts +89 -0
  11. package/dist/core/IsographEnvironment.d.mts.map +1 -0
  12. package/dist/core/IsographEnvironment.d.ts +76 -81
  13. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  14. package/dist/core/IsographEnvironment.js +59 -82
  15. package/dist/core/IsographEnvironment.mjs +67 -0
  16. package/dist/core/IsographEnvironment.mjs.map +1 -0
  17. package/dist/core/PromiseWrapper.d.mts +36 -0
  18. package/dist/core/PromiseWrapper.d.mts.map +1 -0
  19. package/dist/core/PromiseWrapper.d.ts +26 -23
  20. package/dist/core/PromiseWrapper.d.ts.map +1 -1
  21. package/dist/core/PromiseWrapper.js +45 -43
  22. package/dist/core/PromiseWrapper.mjs +49 -0
  23. package/dist/core/PromiseWrapper.mjs.map +1 -0
  24. package/dist/core/areEqualWithDeepComparison.js +56 -93
  25. package/dist/core/areEqualWithDeepComparison.mjs +62 -0
  26. package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
  27. package/dist/core/brand.d.mts +19 -0
  28. package/dist/core/brand.d.mts.map +1 -0
  29. package/dist/core/brand.d.ts +6 -6
  30. package/dist/core/brand.d.ts.map +1 -1
  31. package/dist/core/cache.d.mts +20 -0
  32. package/dist/core/cache.d.mts.map +1 -0
  33. package/dist/core/cache.d.ts +18 -24
  34. package/dist/core/cache.d.ts.map +1 -1
  35. package/dist/core/cache.js +203 -306
  36. package/dist/core/cache.mjs +237 -0
  37. package/dist/core/cache.mjs.map +1 -0
  38. package/dist/core/check.d.mts +28 -0
  39. package/dist/core/check.d.mts.map +1 -0
  40. package/dist/core/check.d.ts +21 -19
  41. package/dist/core/check.d.ts.map +1 -1
  42. package/dist/core/check.js +80 -122
  43. package/dist/core/check.mjs +84 -0
  44. package/dist/core/check.mjs.map +1 -0
  45. package/dist/core/componentCache.js +9 -10
  46. package/dist/core/componentCache.mjs +12 -0
  47. package/dist/core/componentCache.mjs.map +1 -0
  48. package/dist/core/entrypoint.d.mts +99 -0
  49. package/dist/core/entrypoint.d.mts.map +1 -0
  50. package/dist/core/entrypoint.d.ts +83 -80
  51. package/dist/core/entrypoint.d.ts.map +1 -1
  52. package/dist/core/entrypoint.js +6 -5
  53. package/dist/core/entrypoint.mjs +8 -0
  54. package/dist/core/entrypoint.mjs.map +1 -0
  55. package/dist/core/garbageCollection.d.mts +18 -0
  56. package/dist/core/garbageCollection.d.mts.map +1 -0
  57. package/dist/core/garbageCollection.d.ts +15 -16
  58. package/dist/core/garbageCollection.d.ts.map +1 -1
  59. package/dist/core/garbageCollection.js +76 -120
  60. package/dist/core/garbageCollection.mjs +89 -0
  61. package/dist/core/garbageCollection.mjs.map +1 -0
  62. package/dist/core/getOrCreateCacheForArtifact.js +35 -38
  63. package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
  64. package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
  65. package/dist/core/logging.d.mts +95 -0
  66. package/dist/core/logging.d.mts.map +1 -0
  67. package/dist/core/logging.d.ts +66 -61
  68. package/dist/core/logging.d.ts.map +1 -1
  69. package/dist/core/logging.js +17 -18
  70. package/dist/core/logging.mjs +20 -0
  71. package/dist/core/logging.mjs.map +1 -0
  72. package/dist/core/makeNetworkRequest.d.mts +13 -0
  73. package/dist/core/makeNetworkRequest.d.mts.map +1 -0
  74. package/dist/core/makeNetworkRequest.d.ts +12 -10
  75. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  76. package/dist/core/makeNetworkRequest.js +180 -260
  77. package/dist/core/makeNetworkRequest.mjs +195 -0
  78. package/dist/core/makeNetworkRequest.mjs.map +1 -0
  79. package/dist/core/optimisticProxy.d.mts +43 -0
  80. package/dist/core/optimisticProxy.d.mts.map +1 -0
  81. package/dist/core/optimisticProxy.d.ts +37 -53
  82. package/dist/core/optimisticProxy.d.ts.map +1 -1
  83. package/dist/core/optimisticProxy.js +245 -353
  84. package/dist/core/optimisticProxy.mjs +268 -0
  85. package/dist/core/optimisticProxy.mjs.map +1 -0
  86. package/dist/core/read.d.mts +29 -0
  87. package/dist/core/read.d.mts.map +1 -0
  88. package/dist/core/read.d.ts +23 -29
  89. package/dist/core/read.d.ts.map +1 -1
  90. package/dist/core/read.js +435 -634
  91. package/dist/core/read.mjs +456 -0
  92. package/dist/core/read.mjs.map +1 -0
  93. package/dist/core/reader.d.mts +89 -0
  94. package/dist/core/reader.d.mts.map +1 -0
  95. package/dist/core/reader.d.ts +78 -79
  96. package/dist/core/reader.d.ts.map +1 -1
  97. package/dist/core/startUpdate.js +115 -149
  98. package/dist/core/startUpdate.mjs +125 -0
  99. package/dist/core/startUpdate.mjs.map +1 -0
  100. package/dist/core/subscribe.d.mts +12 -0
  101. package/dist/core/subscribe.d.mts.map +1 -0
  102. package/dist/core/subscribe.d.ts +11 -7
  103. package/dist/core/subscribe.d.ts.map +1 -1
  104. package/dist/core/subscribe.js +67 -109
  105. package/dist/core/subscribe.mjs +79 -0
  106. package/dist/core/subscribe.mjs.map +1 -0
  107. package/dist/core/util.d.mts +27 -0
  108. package/dist/core/util.d.mts.map +1 -0
  109. package/dist/core/util.d.ts +21 -24
  110. package/dist/core/util.d.ts.map +1 -1
  111. package/dist/core/util.js +17 -23
  112. package/dist/core/util.mjs +21 -0
  113. package/dist/core/util.mjs.map +1 -0
  114. package/dist/core/writeData.d.mts +11 -0
  115. package/dist/core/writeData.d.mts.map +1 -0
  116. package/dist/core/writeData.d.ts +10 -6
  117. package/dist/core/writeData.d.ts.map +1 -1
  118. package/dist/core/writeData.js +39 -34
  119. package/dist/core/writeData.mjs +42 -0
  120. package/dist/core/writeData.mjs.map +1 -0
  121. package/dist/index.d.mts +32 -0
  122. package/dist/index.d.ts +32 -32
  123. package/dist/index.js +70 -72
  124. package/dist/index.mjs +31 -0
  125. package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
  126. package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
  127. package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -13
  128. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
  129. package/dist/loadable-hooks/useClientSideDefer.js +13 -44
  130. package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
  131. package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
  132. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
  133. package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
  134. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +26 -22
  135. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  136. package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -176
  137. package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
  138. package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
  139. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
  140. package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
  141. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
  142. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
  143. package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
  144. package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
  145. package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
  146. package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
  147. package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
  148. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
  149. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
  150. package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
  151. package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
  152. package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
  153. package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
  154. package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
  155. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
  156. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  157. package/dist/loadable-hooks/useSkipLimitPagination.js +118 -164
  158. package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
  159. package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
  160. package/dist/react/FragmentReader.d.mts +18 -0
  161. package/dist/react/FragmentReader.d.mts.map +1 -0
  162. package/dist/react/FragmentReader.d.ts +16 -8
  163. package/dist/react/FragmentReader.d.ts.map +1 -1
  164. package/dist/react/FragmentReader.js +8 -7
  165. package/dist/react/FragmentReader.mjs +10 -0
  166. package/dist/react/FragmentReader.mjs.map +1 -0
  167. package/dist/react/FragmentRenderer.d.mts +20 -0
  168. package/dist/react/FragmentRenderer.d.mts.map +1 -0
  169. package/dist/react/FragmentRenderer.d.ts +18 -14
  170. package/dist/react/FragmentRenderer.d.ts.map +1 -1
  171. package/dist/react/FragmentRenderer.js +11 -33
  172. package/dist/react/FragmentRenderer.mjs +12 -0
  173. package/dist/react/FragmentRenderer.mjs.map +1 -0
  174. package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
  175. package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
  176. package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
  177. package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
  178. package/dist/react/IsographEnvironmentProvider.js +15 -39
  179. package/dist/react/IsographEnvironmentProvider.mjs +17 -0
  180. package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
  181. package/dist/react/LoadableFieldReader.d.mts +21 -0
  182. package/dist/react/LoadableFieldReader.d.mts.map +1 -0
  183. package/dist/react/LoadableFieldReader.d.ts +15 -13
  184. package/dist/react/LoadableFieldReader.d.ts.map +1 -1
  185. package/dist/react/LoadableFieldReader.js +13 -47
  186. package/dist/react/LoadableFieldReader.mjs +14 -0
  187. package/dist/react/LoadableFieldReader.mjs.map +1 -0
  188. package/dist/react/LoadableFieldRenderer.d.mts +22 -0
  189. package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
  190. package/dist/react/LoadableFieldRenderer.d.ts +16 -14
  191. package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
  192. package/dist/react/LoadableFieldRenderer.js +13 -70
  193. package/dist/react/LoadableFieldRenderer.mjs +14 -0
  194. package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
  195. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
  196. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
  197. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
  198. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
  199. package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
  200. package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
  201. package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
  202. package/dist/react/createIsographEnvironment.d.mts +9 -0
  203. package/dist/react/createIsographEnvironment.d.mts.map +1 -0
  204. package/dist/react/createIsographEnvironment.d.ts +7 -3
  205. package/dist/react/createIsographEnvironment.d.ts.map +1 -1
  206. package/dist/react/createIsographEnvironment.js +8 -6
  207. package/dist/react/createIsographEnvironment.mjs +11 -0
  208. package/dist/react/createIsographEnvironment.mjs.map +1 -0
  209. package/dist/react/maybeUnwrapNetworkRequest.js +9 -12
  210. package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
  211. package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
  212. package/dist/react/useImperativeReference.d.mts +15 -0
  213. package/dist/react/useImperativeReference.d.mts.map +1 -0
  214. package/dist/react/useImperativeReference.d.ts +13 -11
  215. package/dist/react/useImperativeReference.d.ts.map +1 -1
  216. package/dist/react/useImperativeReference.js +34 -30
  217. package/dist/react/useImperativeReference.mjs +35 -0
  218. package/dist/react/useImperativeReference.mjs.map +1 -0
  219. package/dist/react/useLazyReference.d.mts +13 -0
  220. package/dist/react/useLazyReference.d.mts.map +1 -0
  221. package/dist/react/useLazyReference.d.ts +11 -9
  222. package/dist/react/useLazyReference.d.ts.map +1 -1
  223. package/dist/react/useLazyReference.js +17 -40
  224. package/dist/react/useLazyReference.mjs +18 -0
  225. package/dist/react/useLazyReference.mjs.map +1 -0
  226. package/dist/react/useReadAndSubscribe.d.mts +20 -0
  227. package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
  228. package/dist/react/useReadAndSubscribe.d.ts +14 -11
  229. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  230. package/dist/react/useReadAndSubscribe.js +54 -63
  231. package/dist/react/useReadAndSubscribe.mjs +59 -0
  232. package/dist/react/useReadAndSubscribe.mjs.map +1 -0
  233. package/dist/react/useRerenderOnChange.d.mts +12 -0
  234. package/dist/react/useRerenderOnChange.d.mts.map +1 -0
  235. package/dist/react/useRerenderOnChange.d.ts +10 -6
  236. package/dist/react/useRerenderOnChange.d.ts.map +1 -1
  237. package/dist/react/useRerenderOnChange.js +16 -20
  238. package/dist/react/useRerenderOnChange.mjs +17 -0
  239. package/dist/react/useRerenderOnChange.mjs.map +1 -0
  240. package/dist/react/useResult.d.mts +8 -0
  241. package/dist/react/useResult.d.mts.map +1 -0
  242. package/dist/react/useResult.d.ts +7 -3
  243. package/dist/react/useResult.d.ts.map +1 -1
  244. package/dist/react/useResult.js +27 -30
  245. package/dist/react/useResult.mjs +30 -0
  246. package/dist/react/useResult.mjs.map +1 -0
  247. package/package.json +16 -8
  248. package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
  249. package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
  250. package/dist/core/brand.js +0 -2
  251. package/dist/core/componentCache.d.ts +0 -5
  252. package/dist/core/componentCache.d.ts.map +0 -1
  253. package/dist/core/getOrCreateCacheForArtifact.d.ts +0 -8
  254. package/dist/core/getOrCreateCacheForArtifact.d.ts.map +0 -1
  255. package/dist/core/reader.js +0 -2
  256. package/dist/core/startUpdate.d.ts +0 -9
  257. package/dist/core/startUpdate.d.ts.map +0 -1
  258. package/dist/index.d.ts.map +0 -1
  259. package/dist/react/maybeUnwrapNetworkRequest.d.ts +0 -4
  260. package/dist/react/maybeUnwrapNetworkRequest.d.ts.map +0 -1
@@ -1,381 +1,273 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOrInsertRecord = getOrInsertRecord;
4
- exports.getStoreRecordProxy = getStoreRecordProxy;
5
- exports.getMutableStoreRecordProxy = getMutableStoreRecordProxy;
6
- exports.addNetworkResponseStoreLayer = addNetworkResponseStoreLayer;
7
- exports.addStartUpdateStoreLayer = addStartUpdateStoreLayer;
8
- exports.addOptimisticUpdaterStoreLayer = addOptimisticUpdaterStoreLayer;
9
- exports.addOptimisticNetworkResponseStoreLayer = addOptimisticNetworkResponseStoreLayer;
10
- exports.revertOptimisticStoreLayerAndMaybeReplace = revertOptimisticStoreLayerAndMaybeReplace;
11
- const cache_1 = require("./cache");
12
- const subscribe_1 = require("./subscribe");
1
+ const require_subscribe = require('./subscribe.js');
2
+ const require_cache = require('./cache.js');
3
+
4
+ //#region src/core/optimisticProxy.ts
13
5
  function getOrInsertRecord(dataLayer, link) {
14
- var _a, _b;
15
- var _c, _d;
16
- const recordsById = ((_a = dataLayer[_c = link.__typename]) !== null && _a !== void 0 ? _a : (dataLayer[_c] = {}));
17
- return ((_b = recordsById[_d = link.__link]) !== null && _b !== void 0 ? _b : (recordsById[_d] = {}));
6
+ const recordsById = dataLayer[link.__typename] ??= {};
7
+ return recordsById[link.__link] ??= {};
18
8
  }
19
9
  /**
20
- * Given the child-most store layer (i.e. environment.store) and a link (identifying a
21
- * store record), create a proxy object that attempts to read through each successive
22
- * store layer until a value (i.e. field name) is found. If found, return that value.
23
- */
10
+ * Given the child-most store layer (i.e. environment.store) and a link (identifying a
11
+ * store record), create a proxy object that attempts to read through each successive
12
+ * store layer until a value (i.e. field name) is found. If found, return that value.
13
+ */
24
14
  function getStoreRecordProxy(storeLayer, link) {
25
- var _a;
26
- let startNode = storeLayer;
27
- while (startNode != null) {
28
- const storeRecord = (_a = startNode.data[link.__typename]) === null || _a === void 0 ? void 0 : _a[link.__link];
29
- if (storeRecord === undefined) {
30
- startNode = startNode.parentStoreLayer;
31
- continue;
32
- }
33
- if (storeRecord == null) {
34
- return null;
35
- }
36
- return getMutableStoreRecordProxy(startNode, link);
37
- }
38
- return undefined;
15
+ let startNode = storeLayer;
16
+ while (startNode != null) {
17
+ const storeRecord = startNode.data[link.__typename]?.[link.__link];
18
+ if (storeRecord === void 0) {
19
+ startNode = startNode.parentStoreLayer;
20
+ continue;
21
+ }
22
+ if (storeRecord == null) return null;
23
+ return getMutableStoreRecordProxy(startNode, link);
24
+ }
39
25
  }
40
26
  function getMutableStoreRecordProxy(childMostStoreLayer, link) {
41
- return new Proxy({}, {
42
- get(_, propertyName) {
43
- var _a;
44
- let currentStoreLayer = childMostStoreLayer;
45
- while (currentStoreLayer != null) {
46
- const storeRecord = (_a = currentStoreLayer.data[link.__typename]) === null || _a === void 0 ? void 0 : _a[link.__link];
47
- if (storeRecord !== undefined) {
48
- if (storeRecord == null) {
49
- return undefined;
50
- }
51
- const value = Reflect.get(storeRecord, propertyName);
52
- if (value !== undefined) {
53
- return value;
54
- }
55
- }
56
- currentStoreLayer = currentStoreLayer.parentStoreLayer;
57
- }
58
- },
59
- has(_, propertyName) {
60
- var _a;
61
- let currentStoreLayer = childMostStoreLayer;
62
- while (currentStoreLayer != null) {
63
- const storeRecord = (_a = currentStoreLayer.data[link.__typename]) === null || _a === void 0 ? void 0 : _a[link.__link];
64
- if (storeRecord !== undefined) {
65
- if (storeRecord == null) {
66
- return false;
67
- }
68
- const value = Reflect.has(storeRecord, propertyName);
69
- if (value) {
70
- return true;
71
- }
72
- }
73
- currentStoreLayer = currentStoreLayer.parentStoreLayer;
74
- }
75
- return false;
76
- },
77
- set(_, p, newValue) {
78
- return Reflect.set(getOrInsertRecord(childMostStoreLayer.data, link), p, newValue);
79
- },
80
- });
27
+ return new Proxy({}, {
28
+ get(_, propertyName) {
29
+ let currentStoreLayer = childMostStoreLayer;
30
+ while (currentStoreLayer != null) {
31
+ const storeRecord = currentStoreLayer.data[link.__typename]?.[link.__link];
32
+ if (storeRecord !== void 0) {
33
+ if (storeRecord == null) return;
34
+ const value = Reflect.get(storeRecord, propertyName);
35
+ if (value !== void 0) return value;
36
+ }
37
+ currentStoreLayer = currentStoreLayer.parentStoreLayer;
38
+ }
39
+ },
40
+ has(_, propertyName) {
41
+ let currentStoreLayer = childMostStoreLayer;
42
+ while (currentStoreLayer != null) {
43
+ const storeRecord = currentStoreLayer.data[link.__typename]?.[link.__link];
44
+ if (storeRecord !== void 0) {
45
+ if (storeRecord == null) return false;
46
+ if (Reflect.has(storeRecord, propertyName)) return true;
47
+ }
48
+ currentStoreLayer = currentStoreLayer.parentStoreLayer;
49
+ }
50
+ return false;
51
+ },
52
+ set(_, p, newValue) {
53
+ return Reflect.set(getOrInsertRecord(childMostStoreLayer.data, link), p, newValue);
54
+ }
55
+ });
81
56
  }
82
57
  function addNetworkResponseStoreLayer(parent) {
83
- switch (parent.kind) {
84
- case 'NetworkResponseStoreLayer':
85
- case 'BaseStoreLayer': {
86
- return parent;
87
- }
88
- case 'StartUpdateStoreLayer':
89
- case 'OptimisticNetworkResponseStoreLayer':
90
- case 'OptimisticUpdaterStoreLayer': {
91
- const node = {
92
- kind: 'NetworkResponseStoreLayer',
93
- parentStoreLayer: parent,
94
- childStoreLayer: null,
95
- data: {},
96
- };
97
- parent.childStoreLayer = node;
98
- return node;
99
- }
100
- }
58
+ switch (parent.kind) {
59
+ case "NetworkResponseStoreLayer":
60
+ case "BaseStoreLayer": return parent;
61
+ case "StartUpdateStoreLayer":
62
+ case "OptimisticNetworkResponseStoreLayer":
63
+ case "OptimisticUpdaterStoreLayer": {
64
+ const node = {
65
+ kind: "NetworkResponseStoreLayer",
66
+ parentStoreLayer: parent,
67
+ childStoreLayer: null,
68
+ data: {}
69
+ };
70
+ parent.childStoreLayer = node;
71
+ return node;
72
+ }
73
+ }
101
74
  }
102
75
  function mergeDataLayer(target, source) {
103
- var _a, _b;
104
- for (const [typeName, sourceById] of Object.entries(source)) {
105
- if (sourceById == null) {
106
- target[typeName] = sourceById;
107
- continue;
108
- }
109
- const targetRecordById = ((_a = target[typeName]) !== null && _a !== void 0 ? _a : (target[typeName] = {}));
110
- for (const [id, sourceRecord] of Object.entries(sourceById)) {
111
- if (sourceRecord == null) {
112
- targetRecordById[id] = null;
113
- continue;
114
- }
115
- const targetRecord = ((_b = targetRecordById[id]) !== null && _b !== void 0 ? _b : (targetRecordById[id] = {}));
116
- Object.assign(targetRecord, sourceRecord);
117
- }
118
- }
76
+ for (const [typeName, sourceById] of Object.entries(source)) {
77
+ if (sourceById == null) {
78
+ target[typeName] = sourceById;
79
+ continue;
80
+ }
81
+ const targetRecordById = target[typeName] ??= {};
82
+ for (const [id, sourceRecord] of Object.entries(sourceById)) {
83
+ if (sourceRecord == null) {
84
+ targetRecordById[id] = null;
85
+ continue;
86
+ }
87
+ const targetRecord = targetRecordById[id] ??= {};
88
+ Object.assign(targetRecord, sourceRecord);
89
+ }
90
+ }
119
91
  }
120
92
  function addStartUpdateStoreLayer(parent, startUpdate) {
121
- switch (parent.kind) {
122
- case 'BaseStoreLayer': {
123
- startUpdate(parent);
124
- return parent;
125
- }
126
- case 'StartUpdateStoreLayer': {
127
- const node = parent;
128
- const prevStartUpdate = node.startUpdate;
129
- node.startUpdate = () => {
130
- prevStartUpdate(node);
131
- startUpdate(node);
132
- };
133
- startUpdate(node);
134
- return node;
135
- }
136
- case 'NetworkResponseStoreLayer':
137
- case 'OptimisticNetworkResponseStoreLayer':
138
- case 'OptimisticUpdaterStoreLayer': {
139
- const node = {
140
- kind: 'StartUpdateStoreLayer',
141
- parentStoreLayer: parent,
142
- childStoreLayer: null,
143
- data: {},
144
- startUpdate: startUpdate,
145
- };
146
- parent.childStoreLayer = node;
147
- startUpdate(node);
148
- return node;
149
- }
150
- }
151
- }
152
- function addOptimisticUpdaterStoreLayer(parent, startUpdate) {
153
- switch (parent.kind) {
154
- case 'BaseStoreLayer':
155
- case 'StartUpdateStoreLayer':
156
- case 'NetworkResponseStoreLayer':
157
- case 'OptimisticNetworkResponseStoreLayer':
158
- case 'OptimisticUpdaterStoreLayer': {
159
- const node = {
160
- kind: 'OptimisticUpdaterStoreLayer',
161
- parentStoreLayer: parent,
162
- childStoreLayer: null,
163
- data: {},
164
- startUpdate: startUpdate,
165
- };
166
- startUpdate(node);
167
- parent.childStoreLayer = node;
168
- return node;
169
- }
170
- }
93
+ switch (parent.kind) {
94
+ case "BaseStoreLayer":
95
+ startUpdate(parent);
96
+ return parent;
97
+ case "StartUpdateStoreLayer": {
98
+ const node = parent;
99
+ const prevStartUpdate = node.startUpdate;
100
+ node.startUpdate = () => {
101
+ prevStartUpdate(node);
102
+ startUpdate(node);
103
+ };
104
+ startUpdate(node);
105
+ return node;
106
+ }
107
+ case "NetworkResponseStoreLayer":
108
+ case "OptimisticNetworkResponseStoreLayer":
109
+ case "OptimisticUpdaterStoreLayer": {
110
+ const node = {
111
+ kind: "StartUpdateStoreLayer",
112
+ parentStoreLayer: parent,
113
+ childStoreLayer: null,
114
+ data: {},
115
+ startUpdate
116
+ };
117
+ parent.childStoreLayer = node;
118
+ startUpdate(node);
119
+ return node;
120
+ }
121
+ }
171
122
  }
172
123
  function addOptimisticNetworkResponseStoreLayer(parent) {
173
- switch (parent.kind) {
174
- case 'BaseStoreLayer':
175
- case 'StartUpdateStoreLayer':
176
- case 'NetworkResponseStoreLayer':
177
- case 'OptimisticNetworkResponseStoreLayer':
178
- case 'OptimisticUpdaterStoreLayer': {
179
- const node = {
180
- kind: 'OptimisticNetworkResponseStoreLayer',
181
- parentStoreLayer: parent,
182
- childStoreLayer: null,
183
- data: {},
184
- };
185
- parent.childStoreLayer = node;
186
- return node;
187
- }
188
- }
124
+ switch (parent.kind) {
125
+ case "BaseStoreLayer":
126
+ case "StartUpdateStoreLayer":
127
+ case "NetworkResponseStoreLayer":
128
+ case "OptimisticNetworkResponseStoreLayer":
129
+ case "OptimisticUpdaterStoreLayer": {
130
+ const node = {
131
+ kind: "OptimisticNetworkResponseStoreLayer",
132
+ parentStoreLayer: parent,
133
+ childStoreLayer: null,
134
+ data: {}
135
+ };
136
+ parent.childStoreLayer = node;
137
+ return node;
138
+ }
139
+ }
189
140
  }
190
141
  /**
191
- * Merge storeLayerToMerge, and its children, into baseStoreLayer.
192
- * We can merge until we reach a revertible layer (i.e. an optimistic layer).
193
- * All other layers cannot be reverted, so for housekeeping + perf, we merge
194
- * them into a single layer.
195
- *
196
- * Note that BaseStoreLayer.childStoreLayer has type OptimisticStoreLayer | null.
197
- * So, the state of the stack is never e.g. base <- network response. Instead,
198
- * we have a base + a child that we would like to attach to the base. So, we merge
199
- * (flatten) until we reach an optimistic layer or null, at which point, we can
200
- * set baseStoreLayer.childStoreLayer = storeLayerToMerge (via setChildOfNode).
201
- */
142
+ * Merge storeLayerToMerge, and its children, into baseStoreLayer.
143
+ * We can merge until we reach a revertible layer (i.e. an optimistic layer).
144
+ * All other layers cannot be reverted, so for housekeeping + perf, we merge
145
+ * them into a single layer.
146
+ *
147
+ * Note that BaseStoreLayer.childStoreLayer has type OptimisticStoreLayer | null.
148
+ * So, the state of the stack is never e.g. base <- network response. Instead,
149
+ * we have a base + a child that we would like to attach to the base. So, we merge
150
+ * (flatten) until we reach an optimistic layer or null, at which point, we can
151
+ * set baseStoreLayer.childStoreLayer = storeLayerToMerge (via setChildOfNode).
152
+ */
202
153
  function mergeLayersWithDataIntoBaseLayer(environment, storeLayerToMerge, baseStoreLayer) {
203
- while (storeLayerToMerge != null &&
204
- storeLayerToMerge.kind !== 'OptimisticUpdaterStoreLayer') {
205
- mergeDataLayer(baseStoreLayer.data, storeLayerToMerge.data);
206
- storeLayerToMerge = storeLayerToMerge.childStoreLayer;
207
- }
208
- setChildOfNode(environment, baseStoreLayer, storeLayerToMerge);
154
+ while (storeLayerToMerge != null && storeLayerToMerge.kind !== "OptimisticUpdaterStoreLayer") {
155
+ mergeDataLayer(baseStoreLayer.data, storeLayerToMerge.data);
156
+ storeLayerToMerge = storeLayerToMerge.childStoreLayer;
157
+ }
158
+ setChildOfNode(environment, baseStoreLayer, storeLayerToMerge);
209
159
  }
210
160
  /**
211
- * Now that we have replaced the optimistic layer with a network response layer, we need
212
- * to
213
- * - re-execute startUpdate and optimistic nodes, in light of the replaced data, and
214
- * - create two objects containing the old merged data (from the optimistic update layer
215
- * onward) and the new merged data (from the network response layer onward).
216
- * - we will compare the new and old merged data in order to determine the changed records
217
- * and trigger subscriptions.
218
- *
219
- * Here, "merged data" means all of the records + fields that were modified, starting at
220
- * storeLayer, e.g. in BaseLayer <- OptimisticLayer <- StartUpdateLayer, if we
221
- * are replacing Optimistic, then oldData will contain the records + fields modified by
222
- * OptimisticLayer + StartUpdateLayer.
223
- */
224
- function reexecuteUpdatesAndMergeData(storeLayer,
225
- // reflects the (now reverted) optimistic layer
226
- oldMergedData,
227
- // reflects whatever replaced the optimistic layer
228
- newMergedData) {
229
- while (storeLayer != null) {
230
- mergeDataLayer(oldMergedData, storeLayer.data);
231
- switch (storeLayer.kind) {
232
- case 'OptimisticNetworkResponseStoreLayer':
233
- case 'NetworkResponseStoreLayer':
234
- break;
235
- case 'StartUpdateStoreLayer': {
236
- storeLayer.data = {};
237
- storeLayer.startUpdate(storeLayer);
238
- break;
239
- }
240
- case 'OptimisticUpdaterStoreLayer': {
241
- storeLayer.data = {};
242
- storeLayer.startUpdate(storeLayer);
243
- break;
244
- }
245
- }
246
- mergeDataLayer(newMergedData, storeLayer.data);
247
- storeLayer = storeLayer.childStoreLayer;
248
- }
161
+ * Now that we have replaced the optimistic layer with a network response layer, we need
162
+ * to
163
+ * - re-execute startUpdate and optimistic nodes, in light of the replaced data, and
164
+ * - create two objects containing the old merged data (from the optimistic update layer
165
+ * onward) and the new merged data (from the network response layer onward).
166
+ * - we will compare the new and old merged data in order to determine the changed records
167
+ * and trigger subscriptions.
168
+ *
169
+ * Here, "merged data" means all of the records + fields that were modified, starting at
170
+ * storeLayer, e.g. in BaseLayer <- OptimisticLayer <- StartUpdateLayer, if we
171
+ * are replacing Optimistic, then oldData will contain the records + fields modified by
172
+ * OptimisticLayer + StartUpdateLayer.
173
+ */
174
+ function reexecuteUpdatesAndMergeData(storeLayer, oldMergedData, newMergedData) {
175
+ while (storeLayer != null) {
176
+ mergeDataLayer(oldMergedData, storeLayer.data);
177
+ switch (storeLayer.kind) {
178
+ case "OptimisticNetworkResponseStoreLayer":
179
+ case "NetworkResponseStoreLayer": break;
180
+ case "StartUpdateStoreLayer":
181
+ storeLayer.data = {};
182
+ storeLayer.startUpdate(storeLayer);
183
+ break;
184
+ case "OptimisticUpdaterStoreLayer":
185
+ storeLayer.data = {};
186
+ storeLayer.startUpdate(storeLayer);
187
+ break;
188
+ }
189
+ mergeDataLayer(newMergedData, storeLayer.data);
190
+ storeLayer = storeLayer.childStoreLayer;
191
+ }
249
192
  }
250
193
  /**
251
- * Set storeLayerToModify's child to a given layer. This may be null!
252
- * If it is null, set the environment.store to storeLayerToModify.
253
- * If it is not null, then the existing environment.store value remains
254
- * valid.
255
- */
194
+ * Set storeLayerToModify's child to a given layer. This may be null!
195
+ * If it is null, set the environment.store to storeLayerToModify.
196
+ * If it is not null, then the existing environment.store value remains
197
+ * valid.
198
+ */
256
199
  function setChildOfNode(environment, storeLayerToModify, newChildStoreLayer) {
257
- storeLayerToModify.childStoreLayer = newChildStoreLayer;
258
- if (newChildStoreLayer != null) {
259
- newChildStoreLayer.parentStoreLayer = storeLayerToModify;
260
- }
261
- else {
262
- environment.store = storeLayerToModify;
263
- }
200
+ storeLayerToModify.childStoreLayer = newChildStoreLayer;
201
+ if (newChildStoreLayer != null) newChildStoreLayer.parentStoreLayer = storeLayerToModify;
202
+ else environment.store = storeLayerToModify;
264
203
  }
265
204
  /**
266
- * Remove an optimistic store layer from the stack, potentially replacing it
267
- * with a network response.
268
- *
269
- * After we do this, we must re-execute all child startUpdate and optimistic
270
- * layers (since their data may have changed.) We also keep track of changed
271
- * records, in order to call affected subscriptions.
272
- */
205
+ * Remove an optimistic store layer from the stack, potentially replacing it
206
+ * with a network response.
207
+ *
208
+ * After we do this, we must re-execute all child startUpdate and optimistic
209
+ * layers (since their data may have changed.) We also keep track of changed
210
+ * records, in order to call affected subscriptions.
211
+ */
273
212
  function revertOptimisticStoreLayerAndMaybeReplace(environment, optimisticNode, normalizeData) {
274
- var _a;
275
- // We cannot just replace the optimistic node with the network response node,
276
- // because (e.g.) the types allow Base <- Opt, but not Base <- NetworkResponse.
277
- // We also may be removing the optimistic layer without replacing it with
278
- // anything, which would also be disallowed if the original stack was
279
- // Base <- Opt <- NetworkResponse.
280
- //
281
- // Thus, instead, we will (1) replace the optimistic node's data with an empty object
282
- // and attach the network response as a child.
283
- const oldMergedData = optimisticNode.data;
284
- optimisticNode.data = {};
285
- let newMergedData = {};
286
- let childNode = optimisticNode.childStoreLayer;
287
- if (normalizeData != null) {
288
- const networkResponseStoreLayer = {
289
- kind: 'NetworkResponseStoreLayer',
290
- data: {},
291
- parentStoreLayer: optimisticNode,
292
- childStoreLayer: null,
293
- };
294
- normalizeData(networkResponseStoreLayer);
295
- if ((childNode === null || childNode === void 0 ? void 0 : childNode.kind) === 'NetworkResponseStoreLayer') {
296
- // (2) if the optimistic layer's child was a network response, and we are
297
- // replacing it with a network response, we must merge the replacement
298
- // and the child.
299
- mergeDataLayer(networkResponseStoreLayer.data, childNode.data);
300
- mergeDataLayer(oldMergedData, childNode.data);
301
- childNode = childNode.childStoreLayer;
302
- }
303
- newMergedData = structuredClone(networkResponseStoreLayer.data);
304
- setChildOfNode(environment, networkResponseStoreLayer, childNode);
305
- optimisticNode.childStoreLayer = networkResponseStoreLayer;
306
- }
307
- // (3) Re-execute all updates, accumulating all changed values into newMergedData.
308
- // Since we have already written the network response into newMergedData, we
309
- // can proceed from the child of the (potentially merged) network response layer.
310
- //
311
- // Note that it is important that reexecuteUpdatesAndMergeData is called here!
312
- // That is because we created newMergedData from the network response layer's data,
313
- // and later, we may merge that network response into the parent layer (if it is
314
- // a base layer). That merged layer will contain many extraneous records (unless the
315
- // base layer is empty).
316
- //
317
- // This would cause us to re-execute subscriptions unnecessarily, as these records
318
- // do not represent changes between the optimistic and network response layers.
319
- reexecuteUpdatesAndMergeData(childNode, oldMergedData, newMergedData);
320
- // (4) Now, we can finally remove the optimistic layer, i.e. do
321
- // optimistic.parent.child = optimistic.child.
322
- // But the types don't line up, so we handle the cases differently, based on the
323
- // parent layer type.
324
- if (optimisticNode.parentStoreLayer.kind === 'BaseStoreLayer') {
325
- // (4a) If the optimistic parent is the base layer, then we have a problem: base.child
326
- // must be an optimistic layer or null. So, we merge the optimistic children into the
327
- // base layer until we reach an optimistic layer.
328
- mergeLayersWithDataIntoBaseLayer(environment, optimisticNode.childStoreLayer, optimisticNode.parentStoreLayer);
329
- }
330
- else if (optimisticNode.parentStoreLayer.kind === 'NetworkResponseStoreLayer' &&
331
- ((_a = optimisticNode.childStoreLayer) === null || _a === void 0 ? void 0 : _a.kind) === 'NetworkResponseStoreLayer') {
332
- // (4b) if the parent is a network response layer, simply merge those. (We do not
333
- // attempt to merge other layers, e.g. startUpdate layers, because there is some
334
- // optimistic layer between this layer and the base, and the startUpdate will need
335
- // to be recalculated if the optimistic layer is reverted.)
336
- mergeDataLayer(optimisticNode.parentStoreLayer.data, optimisticNode.childStoreLayer.data);
337
- setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer.childStoreLayer);
338
- }
339
- else {
340
- // (4c) Otherwise, the parent is an optimistic or start update layer, and we can
341
- // set optimistic.parent.child = optimistic.child.
342
- setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer);
343
- }
344
- // (5) finally, compare the oldMergedData and newMergedData objects, in order to extract
345
- // the modified IDs, and re-execute subscriptions.
346
- let encounteredIds = new Map();
347
- compareData(oldMergedData, newMergedData, encounteredIds);
348
- (0, subscribe_1.callSubscriptions)(environment, encounteredIds);
213
+ const oldMergedData = optimisticNode.data;
214
+ optimisticNode.data = {};
215
+ let newMergedData = {};
216
+ let childNode = optimisticNode.childStoreLayer;
217
+ if (normalizeData != null) {
218
+ const networkResponseStoreLayer = {
219
+ kind: "NetworkResponseStoreLayer",
220
+ data: {},
221
+ parentStoreLayer: optimisticNode,
222
+ childStoreLayer: null
223
+ };
224
+ normalizeData(networkResponseStoreLayer);
225
+ if (childNode?.kind === "NetworkResponseStoreLayer") {
226
+ mergeDataLayer(networkResponseStoreLayer.data, childNode.data);
227
+ mergeDataLayer(oldMergedData, childNode.data);
228
+ childNode = childNode.childStoreLayer;
229
+ }
230
+ newMergedData = structuredClone(networkResponseStoreLayer.data);
231
+ setChildOfNode(environment, networkResponseStoreLayer, childNode);
232
+ optimisticNode.childStoreLayer = networkResponseStoreLayer;
233
+ }
234
+ reexecuteUpdatesAndMergeData(childNode, oldMergedData, newMergedData);
235
+ if (optimisticNode.parentStoreLayer.kind === "BaseStoreLayer") mergeLayersWithDataIntoBaseLayer(environment, optimisticNode.childStoreLayer, optimisticNode.parentStoreLayer);
236
+ else if (optimisticNode.parentStoreLayer.kind === "NetworkResponseStoreLayer" && optimisticNode.childStoreLayer?.kind === "NetworkResponseStoreLayer") {
237
+ mergeDataLayer(optimisticNode.parentStoreLayer.data, optimisticNode.childStoreLayer.data);
238
+ setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer.childStoreLayer);
239
+ } else setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer);
240
+ let encounteredIds = /* @__PURE__ */ new Map();
241
+ compareData(oldMergedData, newMergedData, encounteredIds);
242
+ require_subscribe.callSubscriptions(environment, encounteredIds);
349
243
  }
350
244
  function compareData(oldData, newData, encounteredIds) {
351
- var _a;
352
- const oldDataTypeNames = new Set(Object.keys(oldData));
353
- const newDataTypeNames = new Set(Object.keys(newData));
354
- for (const oldTypeName of oldDataTypeNames.difference(newDataTypeNames)) {
355
- const set = (0, cache_1.insertEmptySetIfMissing)(encounteredIds, oldTypeName);
356
- for (const id in oldData[oldTypeName]) {
357
- set.add(id);
358
- }
359
- }
360
- for (const [typeName, newRecords] of Object.entries(newData)) {
361
- if (newRecords == null) {
362
- continue;
363
- }
364
- const oldRecords = oldData[typeName];
365
- outer: for (const [id, newRecord] of Object.entries(newRecords)) {
366
- if (newRecord == null) {
367
- continue;
368
- }
369
- const oldRecord = oldRecords === null || oldRecords === void 0 ? void 0 : oldRecords[id];
370
- for (const [recordKey, newRecordValue] of Object.entries(newRecord)) {
371
- // TODO: compare links, compare arrays
372
- if (newRecordValue !== (oldRecord === null || oldRecord === void 0 ? void 0 : oldRecord[recordKey])) {
373
- const set = (0, cache_1.insertEmptySetIfMissing)(encounteredIds, typeName);
374
- set.add(id);
375
- continue outer;
376
- }
377
- }
378
- (_a = encounteredIds.get(typeName)) === null || _a === void 0 ? void 0 : _a.delete(id);
379
- }
380
- }
245
+ const oldDataTypeNames = new Set(Object.keys(oldData));
246
+ const newDataTypeNames = new Set(Object.keys(newData));
247
+ for (const oldTypeName of oldDataTypeNames.difference(newDataTypeNames)) {
248
+ const set = require_cache.insertEmptySetIfMissing(encounteredIds, oldTypeName);
249
+ for (const id in oldData[oldTypeName]) set.add(id);
250
+ }
251
+ for (const [typeName, newRecords] of Object.entries(newData)) {
252
+ if (newRecords == null) continue;
253
+ const oldRecords = oldData[typeName];
254
+ outer: for (const [id, newRecord] of Object.entries(newRecords)) {
255
+ if (newRecord == null) continue;
256
+ const oldRecord = oldRecords?.[id];
257
+ for (const [recordKey, newRecordValue] of Object.entries(newRecord)) if (newRecordValue !== oldRecord?.[recordKey]) {
258
+ require_cache.insertEmptySetIfMissing(encounteredIds, typeName).add(id);
259
+ continue outer;
260
+ }
261
+ encounteredIds.get(typeName)?.delete(id);
262
+ }
263
+ }
381
264
  }
265
+
266
+ //#endregion
267
+ exports.addNetworkResponseStoreLayer = addNetworkResponseStoreLayer;
268
+ exports.addOptimisticNetworkResponseStoreLayer = addOptimisticNetworkResponseStoreLayer;
269
+ exports.addStartUpdateStoreLayer = addStartUpdateStoreLayer;
270
+ exports.getMutableStoreRecordProxy = getMutableStoreRecordProxy;
271
+ exports.getOrInsertRecord = getOrInsertRecord;
272
+ exports.getStoreRecordProxy = getStoreRecordProxy;
273
+ exports.revertOptimisticStoreLayerAndMaybeReplace = revertOptimisticStoreLayerAndMaybeReplace;