@osdk/client 2.5.0-beta.1 → 2.5.0-beta.11

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 (541) hide show
  1. package/CHANGELOG.md +149 -3
  2. package/build/browser/Client.js +1 -1
  3. package/build/browser/Client.js.map +1 -1
  4. package/build/browser/MinimalClientContext.js.map +1 -1
  5. package/build/browser/actions/applyAction.js +4 -0
  6. package/build/browser/actions/applyAction.js.map +1 -1
  7. package/build/browser/createClient.js +6 -2
  8. package/build/browser/createClient.js.map +1 -1
  9. package/build/browser/createMinimalClient.js +2 -1
  10. package/build/browser/createMinimalClient.js.map +1 -1
  11. package/build/browser/fetchMetadata.test.js +11 -0
  12. package/build/browser/fetchMetadata.test.js.map +1 -1
  13. package/build/browser/index.js +2 -0
  14. package/build/browser/index.js.map +1 -1
  15. package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
  16. package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
  17. package/build/browser/intellisense.test.js +14 -4
  18. package/build/browser/intellisense.test.js.map +1 -1
  19. package/build/browser/object/Cache.js +1 -1
  20. package/build/browser/object/Cache.js.map +1 -1
  21. package/build/browser/object/Cache.test.js +1 -1
  22. package/build/browser/object/Cache.test.js.map +1 -1
  23. package/build/browser/object/SimpleCache.js +1 -1
  24. package/build/browser/object/SimpleCache.js.map +1 -1
  25. package/build/browser/object/aggregate.js +2 -0
  26. package/build/browser/object/aggregate.js.map +1 -1
  27. package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
  28. package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
  29. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
  30. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  31. package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
  32. package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
  33. package/build/browser/object/convertWireToOsdkObjects.js +4 -0
  34. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  35. package/build/browser/object/convertWireToOsdkObjects.test.js +14 -0
  36. package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
  37. package/build/browser/object/fetchPage.js +96 -21
  38. package/build/browser/object/fetchPage.js.map +1 -1
  39. package/build/browser/object/fetchPage.test.js +35 -1
  40. package/build/browser/object/fetchPage.test.js.map +1 -1
  41. package/build/browser/object/geotimeseriesreference.test.js +0 -2
  42. package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
  43. package/build/browser/objectSet/ObjectSet.test.js +6 -0
  44. package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
  45. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +31 -9
  46. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  47. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +69 -4
  48. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  49. package/build/browser/objectSet/createObjectSet.js +3 -1
  50. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  51. package/build/browser/observable/LinkPayload.js +2 -0
  52. package/build/browser/observable/LinkPayload.js.map +1 -0
  53. package/build/browser/observable/ObjectPayload.js.map +1 -1
  54. package/build/browser/observable/ObjectSetPayload.js +2 -0
  55. package/build/browser/observable/ObjectSetPayload.js.map +1 -0
  56. package/build/browser/observable/ObservableClient/ObserveLink.js +17 -0
  57. package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -0
  58. package/build/browser/observable/ObservableClient/common.js +2 -0
  59. package/build/browser/observable/ObservableClient/common.js.map +1 -0
  60. package/build/browser/observable/ObservableClient.js +20 -0
  61. package/build/browser/observable/ObservableClient.js.map +1 -1
  62. package/build/browser/observable/Unsubscribable.js +2 -0
  63. package/build/browser/observable/Unsubscribable.js.map +1 -0
  64. package/build/browser/observable/computeObjectSetCacheKey.js +64 -0
  65. package/build/browser/observable/computeObjectSetCacheKey.js.map +1 -0
  66. package/build/browser/observable/internal/AbstractHelper.js +54 -0
  67. package/build/browser/observable/internal/AbstractHelper.js.map +1 -0
  68. package/build/browser/observable/internal/BatchContext.js +2 -0
  69. package/build/browser/observable/internal/BatchContext.js.map +1 -0
  70. package/build/browser/observable/internal/BulkObjectLoader.js +3 -3
  71. package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
  72. package/build/browser/observable/internal/CacheKeys.js +65 -25
  73. package/build/browser/observable/internal/CacheKeys.js.map +1 -1
  74. package/build/browser/observable/internal/Changes.js +9 -0
  75. package/build/browser/observable/internal/Changes.js.map +1 -1
  76. package/build/browser/observable/internal/KnownCacheKey.js +2 -0
  77. package/build/browser/observable/internal/KnownCacheKey.js.map +1 -0
  78. package/build/browser/observable/internal/Layer.js +0 -8
  79. package/build/browser/observable/internal/Layer.js.map +1 -1
  80. package/build/browser/observable/internal/Layers.js +151 -0
  81. package/build/browser/observable/internal/Layers.js.map +1 -0
  82. package/build/browser/observable/internal/ObservableClientImpl.js +62 -3
  83. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  84. package/build/browser/observable/internal/OrderByCanonicalizer.js +1 -37
  85. package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -1
  86. package/build/browser/observable/internal/Queries.js +40 -0
  87. package/build/browser/observable/internal/Queries.js.map +1 -0
  88. package/build/browser/observable/internal/Query.js +63 -5
  89. package/build/browser/observable/internal/Query.js.map +1 -1
  90. package/build/browser/observable/internal/QuerySubscription.js +48 -0
  91. package/build/browser/observable/internal/QuerySubscription.js.map +1 -0
  92. package/build/browser/observable/internal/Store.invalidation.test.js +646 -0
  93. package/build/browser/observable/internal/Store.invalidation.test.js.map +1 -0
  94. package/build/browser/observable/internal/Store.js +89 -308
  95. package/build/browser/observable/internal/Store.js.map +1 -1
  96. package/build/browser/observable/internal/Store.test.js +330 -73
  97. package/build/browser/observable/internal/Store.test.js.map +1 -1
  98. package/build/browser/observable/internal/SubjectPayload.js +2 -0
  99. package/build/browser/observable/internal/SubjectPayload.js.map +1 -0
  100. package/build/browser/observable/internal/Subjects.js +55 -0
  101. package/build/browser/observable/internal/Subjects.js.map +1 -0
  102. package/build/browser/observable/internal/UnsubscribableWrapper.js +30 -0
  103. package/build/browser/observable/internal/UnsubscribableWrapper.js.map +1 -0
  104. package/build/browser/observable/internal/WeakRefTrie.js +61 -0
  105. package/build/browser/observable/internal/WeakRefTrie.js.map +1 -0
  106. package/build/browser/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +2 -2
  107. package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -0
  108. package/build/{esm/observable/internal → browser/observable/internal/actions}/OptimisticJob.js +15 -6
  109. package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -0
  110. package/build/browser/observable/internal/base-list/BaseCollectionQuery.js +2 -0
  111. package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
  112. package/build/browser/observable/internal/base-list/BaseListQuery.js +411 -0
  113. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -0
  114. package/build/browser/observable/internal/base-list/createCollectionConnectable.js +50 -0
  115. package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
  116. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +597 -0
  117. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
  118. package/build/browser/observable/internal/base-list/removeDuplicates.js +36 -0
  119. package/build/browser/observable/internal/base-list/removeDuplicates.js.map +1 -0
  120. package/build/browser/observable/internal/createInitEntry.js +25 -0
  121. package/build/browser/observable/internal/createInitEntry.js.map +1 -0
  122. package/build/browser/observable/internal/getObjectTypesThatInvalidate.js +216 -0
  123. package/build/browser/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
  124. package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
  125. package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
  126. package/build/browser/observable/internal/isObjectInstance.js +23 -0
  127. package/build/browser/observable/internal/isObjectInstance.js.map +1 -0
  128. package/build/browser/observable/internal/links/LinksHelper.js +37 -0
  129. package/build/browser/observable/internal/links/LinksHelper.js.map +1 -0
  130. package/build/browser/observable/internal/links/SpecificLinkCacheKey.js +2 -0
  131. package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
  132. package/build/browser/observable/internal/links/SpecificLinkQuery.js +185 -0
  133. package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -0
  134. package/build/browser/observable/internal/list/InterfaceListQuery.js +83 -0
  135. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -0
  136. package/build/browser/observable/internal/list/ListCacheKey.js +2 -0
  137. package/build/browser/observable/internal/list/ListCacheKey.js.map +1 -0
  138. package/build/browser/observable/internal/list/ListQuery.js +372 -0
  139. package/build/browser/observable/internal/list/ListQuery.js.map +1 -0
  140. package/build/browser/observable/internal/list/ListQueryOptions.js +2 -0
  141. package/build/browser/observable/internal/list/ListQueryOptions.js.map +1 -0
  142. package/build/browser/observable/internal/list/ListsHelper.js +51 -0
  143. package/build/browser/observable/internal/list/ListsHelper.js.map +1 -0
  144. package/build/browser/observable/internal/list/ObjectListQuery.js +48 -0
  145. package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -0
  146. package/build/browser/observable/internal/object/ObjectCacheKey.js +2 -0
  147. package/build/browser/observable/internal/object/ObjectCacheKey.js.map +1 -0
  148. package/build/browser/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +27 -18
  149. package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -0
  150. package/build/browser/observable/internal/object/ObjectsHelper.js +48 -0
  151. package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -0
  152. package/build/browser/observable/internal/objectset/ObjectSetCacheKey.js +2 -0
  153. package/build/browser/observable/internal/objectset/ObjectSetCacheKey.js.map +1 -0
  154. package/build/browser/observable/internal/objectset/ObjectSetHelper.js +69 -0
  155. package/build/browser/observable/internal/objectset/ObjectSetHelper.js.map +1 -0
  156. package/build/browser/observable/internal/objectset/ObjectSetQuery.js +151 -0
  157. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -0
  158. package/build/browser/observable/internal/objectset/ObjectSetQueryOptions.js +2 -0
  159. package/build/browser/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -0
  160. package/build/browser/observable/internal/sorting/SortingStrategy.js +78 -0
  161. package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -0
  162. package/build/browser/observable/internal/testUtils/invalidateList.js +23 -0
  163. package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -0
  164. package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
  165. package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
  166. package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
  167. package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
  168. package/build/browser/observable/internal/testUtils.js +72 -10
  169. package/build/browser/observable/internal/testUtils.js.map +1 -1
  170. package/build/browser/ontology/loadActionMetadata.js +3 -1
  171. package/build/browser/ontology/loadActionMetadata.js.map +1 -1
  172. package/build/browser/ontology/loadFullObjectMetadata.js +2 -1
  173. package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
  174. package/build/browser/ontology/loadInterfaceMetadata.js +2 -1
  175. package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
  176. package/build/browser/public/unstable-do-not-use.js +1 -0
  177. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  178. package/build/browser/queries/applyQuery.js +3 -3
  179. package/build/browser/queries/applyQuery.js.map +1 -1
  180. package/build/browser/util/UserAgent.js +2 -2
  181. package/build/browser/util/UserAgent.js.map +1 -1
  182. package/build/browser/util/exponentialBackoff.js +51 -0
  183. package/build/browser/util/exponentialBackoff.js.map +1 -0
  184. package/build/browser/util/exponentialBackoff.test.js +81 -0
  185. package/build/browser/util/exponentialBackoff.test.js.map +1 -0
  186. package/build/browser/util/extractObjectOrInterfaceType.js +9 -1
  187. package/build/browser/util/extractObjectOrInterfaceType.js.map +1 -1
  188. package/build/browser/util/extractObjectOrInterfaceType.test.js +2 -2
  189. package/build/browser/util/extractObjectOrInterfaceType.test.js.map +1 -1
  190. package/build/browser/util/streamutils.js +1 -1
  191. package/build/browser/util/streamutils.js.map +1 -1
  192. package/build/cjs/{chunk-URDXPIRU.cjs → chunk-3LPXQHP5.cjs} +116 -77
  193. package/build/cjs/chunk-3LPXQHP5.cjs.map +1 -0
  194. package/build/cjs/{chunk-BJYCRD5Y.cjs → chunk-GVGP7T5P.cjs} +375 -237
  195. package/build/cjs/chunk-GVGP7T5P.cjs.map +1 -0
  196. package/build/cjs/{createClient-BJo8T7Js.d.cts → createClient-mOlFts15.d.cts} +1 -0
  197. package/build/cjs/index.cjs +7 -7
  198. package/build/cjs/index.d.cts +1 -1
  199. package/build/cjs/public/internal.cjs +8 -8
  200. package/build/cjs/public/unstable-do-not-use.cjs +1824 -927
  201. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  202. package/build/cjs/public/unstable-do-not-use.d.cts +238 -17
  203. package/build/esm/Client.js +1 -1
  204. package/build/esm/Client.js.map +1 -1
  205. package/build/esm/MinimalClientContext.js.map +1 -1
  206. package/build/esm/actions/applyAction.js +4 -0
  207. package/build/esm/actions/applyAction.js.map +1 -1
  208. package/build/esm/createClient.js +6 -2
  209. package/build/esm/createClient.js.map +1 -1
  210. package/build/esm/createMinimalClient.js +2 -1
  211. package/build/esm/createMinimalClient.js.map +1 -1
  212. package/build/esm/fetchMetadata.test.js +11 -0
  213. package/build/esm/fetchMetadata.test.js.map +1 -1
  214. package/build/esm/index.js +2 -0
  215. package/build/esm/index.js.map +1 -1
  216. package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
  217. package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
  218. package/build/esm/intellisense.test.js +14 -4
  219. package/build/esm/intellisense.test.js.map +1 -1
  220. package/build/esm/object/Cache.js +1 -1
  221. package/build/esm/object/Cache.js.map +1 -1
  222. package/build/esm/object/Cache.test.js +1 -1
  223. package/build/esm/object/Cache.test.js.map +1 -1
  224. package/build/esm/object/SimpleCache.js +1 -1
  225. package/build/esm/object/SimpleCache.js.map +1 -1
  226. package/build/esm/object/aggregate.js +2 -0
  227. package/build/esm/object/aggregate.js.map +1 -1
  228. package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
  229. package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
  230. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
  231. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  232. package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
  233. package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
  234. package/build/esm/object/convertWireToOsdkObjects.js +4 -0
  235. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  236. package/build/esm/object/convertWireToOsdkObjects.test.js +14 -0
  237. package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
  238. package/build/esm/object/fetchPage.js +96 -21
  239. package/build/esm/object/fetchPage.js.map +1 -1
  240. package/build/esm/object/fetchPage.test.js +35 -1
  241. package/build/esm/object/fetchPage.test.js.map +1 -1
  242. package/build/esm/object/geotimeseriesreference.test.js +0 -2
  243. package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
  244. package/build/esm/objectSet/ObjectSet.test.js +6 -0
  245. package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
  246. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +31 -9
  247. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  248. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +69 -4
  249. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  250. package/build/esm/objectSet/createObjectSet.js +3 -1
  251. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  252. package/build/esm/observable/LinkPayload.js +2 -0
  253. package/build/esm/observable/LinkPayload.js.map +1 -0
  254. package/build/esm/observable/ObjectPayload.js.map +1 -1
  255. package/build/esm/observable/ObjectSetPayload.js +2 -0
  256. package/build/esm/observable/ObjectSetPayload.js.map +1 -0
  257. package/build/esm/observable/ObservableClient/ObserveLink.js +17 -0
  258. package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -0
  259. package/build/esm/observable/ObservableClient/common.js +2 -0
  260. package/build/esm/observable/ObservableClient/common.js.map +1 -0
  261. package/build/esm/observable/ObservableClient.js +20 -0
  262. package/build/esm/observable/ObservableClient.js.map +1 -1
  263. package/build/esm/observable/Unsubscribable.js +2 -0
  264. package/build/esm/observable/Unsubscribable.js.map +1 -0
  265. package/build/esm/observable/computeObjectSetCacheKey.js +64 -0
  266. package/build/esm/observable/computeObjectSetCacheKey.js.map +1 -0
  267. package/build/esm/observable/internal/AbstractHelper.js +54 -0
  268. package/build/esm/observable/internal/AbstractHelper.js.map +1 -0
  269. package/build/esm/observable/internal/BatchContext.js +2 -0
  270. package/build/esm/observable/internal/BatchContext.js.map +1 -0
  271. package/build/esm/observable/internal/BulkObjectLoader.js +3 -3
  272. package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
  273. package/build/esm/observable/internal/CacheKeys.js +65 -25
  274. package/build/esm/observable/internal/CacheKeys.js.map +1 -1
  275. package/build/esm/observable/internal/Changes.js +9 -0
  276. package/build/esm/observable/internal/Changes.js.map +1 -1
  277. package/build/esm/observable/internal/KnownCacheKey.js +2 -0
  278. package/build/esm/observable/internal/KnownCacheKey.js.map +1 -0
  279. package/build/esm/observable/internal/Layer.js +0 -8
  280. package/build/esm/observable/internal/Layer.js.map +1 -1
  281. package/build/esm/observable/internal/Layers.js +151 -0
  282. package/build/esm/observable/internal/Layers.js.map +1 -0
  283. package/build/esm/observable/internal/ObservableClientImpl.js +62 -3
  284. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  285. package/build/esm/observable/internal/OrderByCanonicalizer.js +1 -37
  286. package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -1
  287. package/build/esm/observable/internal/Queries.js +40 -0
  288. package/build/esm/observable/internal/Queries.js.map +1 -0
  289. package/build/esm/observable/internal/Query.js +63 -5
  290. package/build/esm/observable/internal/Query.js.map +1 -1
  291. package/build/esm/observable/internal/QuerySubscription.js +48 -0
  292. package/build/esm/observable/internal/QuerySubscription.js.map +1 -0
  293. package/build/esm/observable/internal/Store.invalidation.test.js +646 -0
  294. package/build/esm/observable/internal/Store.invalidation.test.js.map +1 -0
  295. package/build/esm/observable/internal/Store.js +89 -308
  296. package/build/esm/observable/internal/Store.js.map +1 -1
  297. package/build/esm/observable/internal/Store.test.js +330 -73
  298. package/build/esm/observable/internal/Store.test.js.map +1 -1
  299. package/build/esm/observable/internal/SubjectPayload.js +2 -0
  300. package/build/esm/observable/internal/SubjectPayload.js.map +1 -0
  301. package/build/esm/observable/internal/Subjects.js +55 -0
  302. package/build/esm/observable/internal/Subjects.js.map +1 -0
  303. package/build/esm/observable/internal/UnsubscribableWrapper.js +30 -0
  304. package/build/esm/observable/internal/UnsubscribableWrapper.js.map +1 -0
  305. package/build/esm/observable/internal/WeakRefTrie.js +61 -0
  306. package/build/esm/observable/internal/WeakRefTrie.js.map +1 -0
  307. package/build/esm/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +2 -2
  308. package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -0
  309. package/build/{browser/observable/internal → esm/observable/internal/actions}/OptimisticJob.js +15 -6
  310. package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -0
  311. package/build/esm/observable/internal/base-list/BaseCollectionQuery.js +2 -0
  312. package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
  313. package/build/esm/observable/internal/base-list/BaseListQuery.js +411 -0
  314. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -0
  315. package/build/esm/observable/internal/base-list/createCollectionConnectable.js +50 -0
  316. package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
  317. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +597 -0
  318. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
  319. package/build/esm/observable/internal/base-list/removeDuplicates.js +36 -0
  320. package/build/esm/observable/internal/base-list/removeDuplicates.js.map +1 -0
  321. package/build/esm/observable/internal/createInitEntry.js +25 -0
  322. package/build/esm/observable/internal/createInitEntry.js.map +1 -0
  323. package/build/esm/observable/internal/getObjectTypesThatInvalidate.js +216 -0
  324. package/build/esm/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
  325. package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
  326. package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
  327. package/build/esm/observable/internal/isObjectInstance.js +23 -0
  328. package/build/esm/observable/internal/isObjectInstance.js.map +1 -0
  329. package/build/esm/observable/internal/links/LinksHelper.js +37 -0
  330. package/build/esm/observable/internal/links/LinksHelper.js.map +1 -0
  331. package/build/esm/observable/internal/links/SpecificLinkCacheKey.js +2 -0
  332. package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
  333. package/build/esm/observable/internal/links/SpecificLinkQuery.js +185 -0
  334. package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -0
  335. package/build/esm/observable/internal/list/InterfaceListQuery.js +83 -0
  336. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -0
  337. package/build/esm/observable/internal/list/ListCacheKey.js +2 -0
  338. package/build/esm/observable/internal/list/ListCacheKey.js.map +1 -0
  339. package/build/esm/observable/internal/list/ListQuery.js +372 -0
  340. package/build/esm/observable/internal/list/ListQuery.js.map +1 -0
  341. package/build/esm/observable/internal/list/ListQueryOptions.js +2 -0
  342. package/build/esm/observable/internal/list/ListQueryOptions.js.map +1 -0
  343. package/build/esm/observable/internal/list/ListsHelper.js +51 -0
  344. package/build/esm/observable/internal/list/ListsHelper.js.map +1 -0
  345. package/build/esm/observable/internal/list/ObjectListQuery.js +48 -0
  346. package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -0
  347. package/build/esm/observable/internal/object/ObjectCacheKey.js +2 -0
  348. package/build/esm/observable/internal/object/ObjectCacheKey.js.map +1 -0
  349. package/build/esm/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +27 -18
  350. package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -0
  351. package/build/esm/observable/internal/object/ObjectsHelper.js +48 -0
  352. package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -0
  353. package/build/esm/observable/internal/objectset/ObjectSetCacheKey.js +2 -0
  354. package/build/esm/observable/internal/objectset/ObjectSetCacheKey.js.map +1 -0
  355. package/build/esm/observable/internal/objectset/ObjectSetHelper.js +69 -0
  356. package/build/esm/observable/internal/objectset/ObjectSetHelper.js.map +1 -0
  357. package/build/esm/observable/internal/objectset/ObjectSetQuery.js +151 -0
  358. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -0
  359. package/build/esm/observable/internal/objectset/ObjectSetQueryOptions.js +2 -0
  360. package/build/esm/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -0
  361. package/build/esm/observable/internal/sorting/SortingStrategy.js +78 -0
  362. package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -0
  363. package/build/esm/observable/internal/testUtils/invalidateList.js +23 -0
  364. package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -0
  365. package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
  366. package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
  367. package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
  368. package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
  369. package/build/esm/observable/internal/testUtils.js +72 -10
  370. package/build/esm/observable/internal/testUtils.js.map +1 -1
  371. package/build/esm/ontology/loadActionMetadata.js +3 -1
  372. package/build/esm/ontology/loadActionMetadata.js.map +1 -1
  373. package/build/esm/ontology/loadFullObjectMetadata.js +2 -1
  374. package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
  375. package/build/esm/ontology/loadInterfaceMetadata.js +2 -1
  376. package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
  377. package/build/esm/public/unstable-do-not-use.js +1 -0
  378. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  379. package/build/esm/queries/applyQuery.js +3 -3
  380. package/build/esm/queries/applyQuery.js.map +1 -1
  381. package/build/esm/util/UserAgent.js +2 -2
  382. package/build/esm/util/UserAgent.js.map +1 -1
  383. package/build/esm/util/exponentialBackoff.js +51 -0
  384. package/build/esm/util/exponentialBackoff.js.map +1 -0
  385. package/build/esm/util/exponentialBackoff.test.js +81 -0
  386. package/build/esm/util/exponentialBackoff.test.js.map +1 -0
  387. package/build/esm/util/extractObjectOrInterfaceType.js +9 -1
  388. package/build/esm/util/extractObjectOrInterfaceType.js.map +1 -1
  389. package/build/esm/util/extractObjectOrInterfaceType.test.js +2 -2
  390. package/build/esm/util/extractObjectOrInterfaceType.test.js.map +1 -1
  391. package/build/esm/util/streamutils.js +1 -1
  392. package/build/esm/util/streamutils.js.map +1 -1
  393. package/build/types/Client.d.ts +1 -1
  394. package/build/types/MinimalClientContext.d.ts +1 -0
  395. package/build/types/MinimalClientContext.d.ts.map +1 -1
  396. package/build/types/actions/applyAction.d.ts.map +1 -1
  397. package/build/types/createClient.d.ts +1 -0
  398. package/build/types/createClient.d.ts.map +1 -1
  399. package/build/types/index.d.ts +1 -1
  400. package/build/types/index.d.ts.map +1 -1
  401. package/build/types/object/fetchPage.d.ts.map +1 -1
  402. package/build/types/observable/LinkPayload.d.ts +9 -0
  403. package/build/types/observable/LinkPayload.d.ts.map +1 -0
  404. package/build/types/observable/ObjectPayload.d.ts +4 -0
  405. package/build/types/observable/ObjectPayload.d.ts.map +1 -1
  406. package/build/types/observable/ObjectSetPayload.d.ts +5 -0
  407. package/build/types/observable/ObjectSetPayload.d.ts.map +1 -0
  408. package/build/types/observable/ObservableClient/ObserveLink.d.ts +32 -0
  409. package/build/types/observable/ObservableClient/ObserveLink.d.ts.map +1 -0
  410. package/build/types/observable/ObservableClient/common.d.ts +67 -0
  411. package/build/types/observable/ObservableClient/common.d.ts.map +1 -0
  412. package/build/types/observable/ObservableClient.d.ts +136 -16
  413. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  414. package/build/types/observable/Unsubscribable.d.ts +3 -0
  415. package/build/types/observable/Unsubscribable.d.ts.map +1 -0
  416. package/build/types/observable/computeObjectSetCacheKey.d.ts +16 -0
  417. package/build/types/observable/computeObjectSetCacheKey.d.ts.map +1 -0
  418. package/build/types/observable/internal/AbstractHelper.d.ts +17 -0
  419. package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -0
  420. package/build/types/observable/internal/BatchContext.d.ts +11 -0
  421. package/build/types/observable/internal/BatchContext.d.ts.map +1 -0
  422. package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
  423. package/build/types/observable/internal/CacheKeys.d.ts +12 -6
  424. package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
  425. package/build/types/observable/internal/Changes.d.ts +10 -5
  426. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  427. package/build/types/observable/internal/KnownCacheKey.d.ts +5 -0
  428. package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -0
  429. package/build/types/observable/internal/Layer.d.ts +6 -7
  430. package/build/types/observable/internal/Layer.d.ts.map +1 -1
  431. package/build/types/observable/internal/Layers.d.ts +26 -0
  432. package/build/types/observable/internal/Layers.d.ts.map +1 -0
  433. package/build/types/observable/internal/OrderByCanonicalizer.d.ts +0 -7
  434. package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -1
  435. package/build/types/observable/internal/Queries.d.ts +9 -0
  436. package/build/types/observable/internal/Queries.d.ts.map +1 -0
  437. package/build/types/observable/internal/Query.d.ts +23 -6
  438. package/build/types/observable/internal/Query.d.ts.map +1 -1
  439. package/build/types/observable/internal/QuerySubscription.d.ts +1 -0
  440. package/build/types/observable/internal/QuerySubscription.d.ts.map +1 -0
  441. package/build/types/observable/internal/Store.d.ts +43 -51
  442. package/build/types/observable/internal/Store.d.ts.map +1 -1
  443. package/build/types/observable/internal/Store.invalidation.test.d.ts +1 -0
  444. package/build/types/observable/internal/Store.invalidation.test.d.ts.map +1 -0
  445. package/build/types/observable/internal/Store.test.d.ts +4 -1
  446. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  447. package/build/types/observable/internal/SubjectPayload.d.ts +5 -0
  448. package/build/types/observable/internal/SubjectPayload.d.ts.map +1 -0
  449. package/build/types/observable/internal/Subjects.d.ts +16 -0
  450. package/build/types/observable/internal/Subjects.d.ts.map +1 -0
  451. package/build/types/observable/internal/UnsubscribableWrapper.d.ts +1 -0
  452. package/build/types/observable/internal/UnsubscribableWrapper.d.ts.map +1 -0
  453. package/build/types/observable/internal/WeakRefTrie.d.ts +13 -0
  454. package/build/types/observable/internal/WeakRefTrie.d.ts.map +1 -0
  455. package/build/types/observable/internal/{ActionApplication.d.ts → actions/ActionApplication.d.ts} +2 -2
  456. package/build/types/observable/internal/{ActionApplication.d.ts.map → actions/ActionApplication.d.ts.map} +1 -1
  457. package/build/types/observable/internal/{OptimisticJob.d.ts → actions/OptimisticJob.d.ts} +4 -4
  458. package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -0
  459. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +64 -0
  460. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -0
  461. package/build/types/observable/internal/base-list/BaseListQuery.d.ts +145 -0
  462. package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -0
  463. package/build/types/observable/internal/base-list/createCollectionConnectable.d.ts +39 -0
  464. package/build/types/observable/internal/base-list/createCollectionConnectable.d.ts.map +1 -0
  465. package/build/types/observable/internal/base-list/createCollectionConnectable.test.d.ts +1 -0
  466. package/build/types/observable/internal/base-list/createCollectionConnectable.test.d.ts.map +1 -0
  467. package/build/types/observable/internal/base-list/removeDuplicates.d.ts +11 -0
  468. package/build/types/observable/internal/base-list/removeDuplicates.d.ts.map +1 -0
  469. package/build/types/observable/internal/createInitEntry.d.ts +3 -0
  470. package/build/types/observable/internal/createInitEntry.d.ts.map +1 -0
  471. package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts +9 -0
  472. package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts.map +1 -0
  473. package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts +1 -0
  474. package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts.map +1 -0
  475. package/build/types/observable/internal/isObjectInstance.d.ts +5 -0
  476. package/build/types/observable/internal/isObjectInstance.d.ts.map +1 -0
  477. package/build/types/observable/internal/links/LinksHelper.d.ts +31 -0
  478. package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -0
  479. package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +17 -0
  480. package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -0
  481. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +47 -0
  482. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -0
  483. package/build/types/observable/internal/list/InterfaceListQuery.d.ts +18 -0
  484. package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -0
  485. package/build/types/observable/internal/list/ListCacheKey.d.ts +7 -0
  486. package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -0
  487. package/build/types/observable/internal/list/ListQuery.d.ts +106 -0
  488. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -0
  489. package/build/types/observable/internal/list/ListQueryOptions.d.ts +4 -0
  490. package/build/types/observable/internal/list/ListQueryOptions.d.ts.map +1 -0
  491. package/build/types/observable/internal/list/ListsHelper.d.ts +19 -0
  492. package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -0
  493. package/build/types/observable/internal/list/ObjectListQuery.d.ts +18 -0
  494. package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -0
  495. package/build/types/observable/internal/object/ObjectCacheKey.d.ts +5 -0
  496. package/build/types/observable/internal/object/ObjectCacheKey.d.ts.map +1 -0
  497. package/build/types/observable/internal/{ObjectQuery.d.ts → object/ObjectQuery.d.ts} +11 -9
  498. package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -0
  499. package/build/types/observable/internal/object/ObjectsHelper.d.ts +11 -0
  500. package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -0
  501. package/build/types/observable/internal/objectset/ObjectSetCacheKey.d.ts +16 -0
  502. package/build/types/observable/internal/objectset/ObjectSetCacheKey.d.ts.map +1 -0
  503. package/build/types/observable/internal/objectset/ObjectSetHelper.d.ts +19 -0
  504. package/build/types/observable/internal/objectset/ObjectSetHelper.d.ts.map +1 -0
  505. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +34 -0
  506. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -0
  507. package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts +18 -0
  508. package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts.map +1 -0
  509. package/build/types/observable/internal/sorting/SortingStrategy.d.ts +41 -0
  510. package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -0
  511. package/build/types/observable/internal/testUtils/invalidateList.d.ts +9 -0
  512. package/build/types/observable/internal/testUtils/invalidateList.d.ts.map +1 -0
  513. package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts +46 -0
  514. package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts.map +1 -0
  515. package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts +26 -0
  516. package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts.map +1 -0
  517. package/build/types/observable/internal/testUtils.d.ts +26 -4
  518. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  519. package/build/types/public/unstable-do-not-use.d.ts +5 -2
  520. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  521. package/build/types/util/exponentialBackoff.d.ts +14 -0
  522. package/build/types/util/exponentialBackoff.d.ts.map +1 -0
  523. package/build/types/util/exponentialBackoff.test.d.ts +1 -0
  524. package/build/types/util/exponentialBackoff.test.d.ts.map +1 -0
  525. package/package.json +25 -25
  526. package/build/browser/observable/internal/ActionApplication.js.map +0 -1
  527. package/build/browser/observable/internal/ListQuery.js +0 -618
  528. package/build/browser/observable/internal/ListQuery.js.map +0 -1
  529. package/build/browser/observable/internal/ObjectQuery.js.map +0 -1
  530. package/build/browser/observable/internal/OptimisticJob.js.map +0 -1
  531. package/build/cjs/chunk-BJYCRD5Y.cjs.map +0 -1
  532. package/build/cjs/chunk-URDXPIRU.cjs.map +0 -1
  533. package/build/esm/observable/internal/ActionApplication.js.map +0 -1
  534. package/build/esm/observable/internal/ListQuery.js +0 -618
  535. package/build/esm/observable/internal/ListQuery.js.map +0 -1
  536. package/build/esm/observable/internal/ObjectQuery.js.map +0 -1
  537. package/build/esm/observable/internal/OptimisticJob.js.map +0 -1
  538. package/build/types/observable/internal/ListQuery.d.ts +0 -88
  539. package/build/types/observable/internal/ListQuery.d.ts.map +0 -1
  540. package/build/types/observable/internal/ObjectQuery.d.ts.map +0 -1
  541. package/build/types/observable/internal/OptimisticJob.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Store.invalidation.test.js","names":["Employee","Office","Todo","FauxFoundry","ontologies","startNodeApiServer","stubData","invariant","beforeAll","beforeEach","describe","expect","it","vi","createClient","TestLogger","Store","createDefer","mockListSubCallback","updateList","expectStandardObserveLink","expectStandardObserveObject","defer","logger","EMPLOYEE_1_ID","EMPLOYEE_2_ID","OFFICE_1_ID","OFFICE_2_ID","TODO_1_ID","TODO_2_ID","client","cache","fauxFoundry","setupOntology","fauxOntology","getDefaultOntology","addEmployeeOntology","registerObjectType","todoWithLinkTypes","registerActionType","editTodo","actionTypeV2","b","payload","id","other","parameters","modifyObject","apiName","setupTestObjects","dataStore","getDefaultDataStore","emp1","registerObject","employeeId","fullName","emp2","office1","officeId","name","office2","todo1","$apiName","text","todo2","registerLink","testSetup","apiServer","close","resetAllMocks","undefined","emp1Payload","subFn","empSubFn","type","primaryKey","object","process","env","NODE_ENV","office1Payload","officeSubFn","next","mockClear","invalidateObjectType","Promise","resolve","setTimeout","toHaveBeenCalled","not","todo1Payload","todoSubFn","fetchOne","where","orderBy","empListSubFn","lists","observe","mode","officeListSubFn","linkSubFn","officeLinkSubFn","store","srcObject","srcLinkName","targetType","expected","objectContaining","$primaryKey","todoListSubFn","employeeOfficeLinkSubFn","officeOccupantsLinkSubFn","invalidateAll","pageSize","emp2SubFn","invalidateObjects"],"sources":["Store.invalidation.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Employee, Office, Todo } from \"@osdk/client.test.ontology\";\nimport {\n FauxFoundry,\n ontologies,\n startNodeApiServer,\n stubData,\n} from \"@osdk/shared.test\";\nimport invariant from \"tiny-invariant\";\nimport { beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { createClient } from \"../../createClient.js\";\nimport { TestLogger } from \"../../logger/TestLogger.js\";\nimport { Store } from \"./Store.js\";\nimport { createDefer, mockListSubCallback, updateList } from \"./testUtils.js\";\nimport { expectStandardObserveLink } from \"./testUtils/observeLink/expectStandardObserveLink.js\";\nimport { expectStandardObserveObject } from \"./testUtils/observeObject/expectStandardObserveObject.js\";\n\n// Defer utility to track subscriptions for cleanup\nconst defer = createDefer();\n\n// Logger setup\nconst logger = new TestLogger({}, {\n // level: \"debug\",\n});\n\n// Constants for test objects\nconst EMPLOYEE_1_ID = 1;\nconst EMPLOYEE_2_ID = 2;\nconst OFFICE_1_ID = \"101\";\nconst OFFICE_2_ID = \"102\";\nconst TODO_1_ID = 201;\nconst TODO_2_ID = 202;\n\ndescribe(\"Store Invalidation Type Isolation\", () => {\n let client: ReturnType<typeof createClient>;\n let cache: Store;\n let fauxFoundry: FauxFoundry;\n\n function setupOntology(fauxFoundry: FauxFoundry) {\n const fauxOntology = fauxFoundry.getDefaultOntology();\n ontologies.addEmployeeOntology(fauxOntology);\n\n fauxFoundry.getDefaultOntology().registerObjectType(\n stubData.todoWithLinkTypes,\n );\n\n fauxFoundry.getDefaultOntology().registerActionType(\n stubData.editTodo.actionTypeV2,\n (b, payload) => {\n const { id, ...other } = payload.parameters;\n b.modifyObject<Todo>(Todo.apiName, id, { ...other });\n },\n );\n }\n\n function setupTestObjects(fauxFoundry: FauxFoundry) {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n // Create Employees\n const emp1 = dataStore.registerObject(Employee, {\n employeeId: EMPLOYEE_1_ID,\n fullName: \"Employee One\",\n });\n\n const emp2 = dataStore.registerObject(Employee, {\n employeeId: EMPLOYEE_2_ID,\n fullName: \"Employee Two\",\n });\n\n // Create Offices\n const office1 = dataStore.registerObject(Office, {\n officeId: OFFICE_1_ID,\n name: \"Office One\",\n });\n\n const office2 = dataStore.registerObject(Office, {\n officeId: OFFICE_2_ID,\n name: \"Office Two\",\n });\n\n // Create Todos\n const todo1 = dataStore.registerObject(Todo, {\n $apiName: \"Todo\",\n id: TODO_1_ID,\n text: \"Todo One\",\n });\n\n const todo2 = dataStore.registerObject(Todo, {\n $apiName: \"Todo\",\n id: TODO_2_ID,\n text: \"Todo Two\",\n });\n\n // Link employees to offices\n dataStore.registerLink(emp1, \"officeLink\", office1, \"occupants\");\n dataStore.registerLink(emp2, \"officeLink\", office2, \"occupants\");\n\n // Link employees to todos (we're not using these links in this test, but showing different link patterns)\n // Note: There are no direct Todo-Employee links in the test ontology\n }\n\n beforeAll(async () => {\n // Set up the mock environment and client\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client, fauxFoundry } = testSetup);\n\n // Set up the test ontology and data\n setupOntology(fauxFoundry);\n setupTestObjects(fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n cache = new Store(client);\n return () => {\n cache = undefined!;\n };\n });\n\n describe(\"Object Type Isolation\", () => {\n it(\"invalidating Employee type should not affect Office objects\", async () => {\n // Set up observations for an Employee and Office object\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const office1 = office1Payload?.object;\n invariant(office1);\n\n // Clear the initial calls\n empSubFn.next.mockClear();\n officeSubFn.next.mockClear();\n\n // Invalidate only the Employee type\n await cache.invalidateObjectType(Employee, undefined);\n\n // Allow time for any potential updates\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Employee should be updated\n expect(empSubFn.next).toHaveBeenCalled();\n\n // Office object should NOT receive any updates\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n\n it(\"invalidating Office type should not affect Employee objects\", async () => {\n // Set up observations for an Employee and Office object\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const office1 = office1Payload?.object;\n invariant(office1);\n\n // Clear the initial calls\n empSubFn.next.mockClear();\n officeSubFn.next.mockClear();\n\n // Invalidate only the Office type\n await cache.invalidateObjectType(Office, undefined);\n\n // Allow time for any potential updates\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Office should be updated\n expect(officeSubFn.next).toHaveBeenCalled();\n\n // Employee object should NOT receive any updates\n expect(empSubFn.next).not.toHaveBeenCalled();\n });\n\n it(\"invalidating Todo type should not affect Employee or Office objects\", async () => {\n // Set up observations for Employee, Office, and Todo objects\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const office1 = office1Payload?.object;\n invariant(office1);\n\n const { payload: todo1Payload, subFn: todoSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Todo,\n primaryKey: TODO_1_ID,\n });\n const todo1 = todo1Payload?.object;\n invariant(todo1);\n\n // Clear the initial calls\n empSubFn.next.mockClear();\n officeSubFn.next.mockClear();\n todoSubFn.next.mockClear();\n\n // Invalidate only the Todo type\n await cache.invalidateObjectType(Todo, undefined);\n\n // Allow time for any potential updates\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Todo should be updated\n expect(todoSubFn.next).toHaveBeenCalled();\n\n // Employee and Office objects should NOT receive any updates\n expect(empSubFn.next).not.toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n });\n\n describe(\"List Query Isolation\", () => {\n it(\"invalidating Employee type should only affect Employee lists\", async () => {\n // Pre-seed the cache with lists - need to fetch the objects first to get proper instances\n const emp1 = await client(Employee).fetchOne(EMPLOYEE_1_ID);\n const emp2 = await client(Employee).fetchOne(EMPLOYEE_2_ID);\n const office1 = await client(Office).fetchOne(OFFICE_1_ID);\n const office2 = await client(Office).fetchOne(OFFICE_2_ID);\n\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n emp1,\n emp2,\n ]);\n updateList(cache, { type: Office, where: {}, orderBy: {} }, [\n office1,\n office2,\n ]);\n\n // Set up list observations\n const empListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, empListSubFn));\n\n const officeListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Office,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, officeListSubFn));\n\n // Wait for the initial calls and clear them\n await new Promise(resolve => setTimeout(resolve, 100));\n empListSubFn.next.mockClear();\n officeListSubFn.next.mockClear();\n\n // Invalidate only the Employee type\n await cache.invalidateObjectType(Employee, undefined);\n\n // Allow time for any potential updates\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Employee list should be updated\n expect(empListSubFn.next).toHaveBeenCalled();\n\n // Office list should NOT be invalidated\n expect(officeListSubFn.next).not.toHaveBeenCalled();\n });\n });\n\n describe(\"Link Query Isolation\", () => {\n it(\"basic source object filtering works for direct invalidation\", async () => {\n // Get an Office object that has Employee occupants\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const office1 = office1Payload?.object;\n invariant(office1);\n\n // Get an Employee object\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n // Set up observation of Employee -> Office link\n const { linkSubFn: officeLinkSubFn } = await expectStandardObserveLink({\n store: cache,\n srcObject: emp1,\n srcLinkName: \"officeLink\",\n targetType: Office,\n expected: [expect.objectContaining({ $primaryKey: OFFICE_1_ID })],\n });\n\n // Clear initial calls\n officeSubFn.next.mockClear();\n empSubFn.next.mockClear();\n officeLinkSubFn.next.mockClear();\n\n // Invalidate the Employee type\n await cache.invalidateObjectType(Employee, undefined);\n\n // Allow time for any potential updates\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Employee object should be invalidated\n expect(empSubFn.next).toHaveBeenCalled();\n\n // Employee -> Office link (with Employee source) should be invalidated\n // because its source is an Employee object\n expect(officeLinkSubFn.next).toHaveBeenCalled();\n });\n });\n\n describe(\"Complex Multi-Type Scenario\", () => {\n it(\"should correctly isolate invalidation across multiple related objects\", async () => {\n // Set up observations for all three object types\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const office1 = office1Payload?.object;\n invariant(office1);\n\n const { payload: todo1Payload, subFn: todoSubFn } =\n await expectStandardObserveObject({\n cache,\n type: Todo,\n primaryKey: TODO_1_ID,\n });\n const todo1 = todo1Payload?.object;\n invariant(todo1);\n\n // Set up list observations\n const empListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, empListSubFn));\n\n const officeListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Office,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, officeListSubFn));\n\n const todoListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Todo,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, todoListSubFn));\n\n // Set up link observations\n const { linkSubFn: employeeOfficeLinkSubFn } =\n await expectStandardObserveLink({\n store: cache,\n srcObject: emp1,\n srcLinkName: \"officeLink\",\n targetType: Office,\n expected: [expect.objectContaining({ $primaryKey: OFFICE_1_ID })],\n });\n\n // Setup another link observation for the test\n const { linkSubFn: officeOccupantsLinkSubFn } =\n await expectStandardObserveLink({\n store: cache,\n srcObject: office1,\n srcLinkName: \"occupants\",\n targetType: Employee,\n expected: [expect.objectContaining({ $primaryKey: EMPLOYEE_1_ID })],\n });\n\n // Clear all the initial calls\n empSubFn.next.mockClear();\n officeSubFn.next.mockClear();\n todoSubFn.next.mockClear();\n empListSubFn.next.mockClear();\n officeListSubFn.next.mockClear();\n todoListSubFn.next.mockClear();\n employeeOfficeLinkSubFn.next.mockClear();\n officeOccupantsLinkSubFn.next.mockClear();\n\n // Invalidate only the Todo type\n await cache.invalidateObjectType(Todo, undefined);\n\n // Allow time for any potential updates\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Todo object and list should be invalidated\n expect(todoSubFn.next).toHaveBeenCalled();\n expect(todoListSubFn.next).toHaveBeenCalled();\n\n // All Employee and Office related items should NOT be invalidated\n expect(empSubFn.next).not.toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n expect(empListSubFn.next).not.toHaveBeenCalled();\n expect(officeListSubFn.next).not.toHaveBeenCalled();\n expect(employeeOfficeLinkSubFn.next).not.toHaveBeenCalled();\n expect(officeOccupantsLinkSubFn.next).not.toHaveBeenCalled();\n });\n });\n\n describe(\"invalidateAll\", () => {\n it(\"should invalidate all cached queries\", async () => {\n const { subFn: empSubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const { subFn: officeSubFn } = await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const { subFn: todoSubFn } = await expectStandardObserveObject({\n cache,\n type: Todo,\n primaryKey: TODO_1_ID,\n });\n\n empSubFn.next.mockClear();\n officeSubFn.next.mockClear();\n todoSubFn.next.mockClear();\n\n await cache.invalidateAll();\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n expect(empSubFn.next).toHaveBeenCalled();\n expect(officeSubFn.next).toHaveBeenCalled();\n expect(todoSubFn.next).toHaveBeenCalled();\n });\n\n it(\"should invalidate all list queries\", async () => {\n const empListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n pageSize: 10,\n }, empListSubFn));\n\n const officeListSubFn = mockListSubCallback();\n defer(cache.lists.observe({\n type: Office,\n where: {},\n orderBy: {},\n pageSize: 10,\n }, officeListSubFn));\n\n await new Promise(resolve => setTimeout(resolve, 100));\n empListSubFn.next.mockClear();\n officeListSubFn.next.mockClear();\n\n await cache.invalidateAll();\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n expect(empListSubFn.next).toHaveBeenCalled();\n expect(officeListSubFn.next).toHaveBeenCalled();\n });\n });\n\n describe(\"invalidateObjects\", () => {\n it(\"should invalidate a single object\", async () => {\n const { subFn: empSubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const { subFn: emp2SubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_2_ID,\n });\n\n empSubFn.next.mockClear();\n emp2SubFn.next.mockClear();\n\n const emp1 = await client(Employee).fetchOne(EMPLOYEE_1_ID);\n invariant(emp1);\n\n await cache.invalidateObjects(emp1);\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n expect(empSubFn.next).toHaveBeenCalled();\n expect(emp2SubFn.next).not.toHaveBeenCalled();\n });\n\n it(\"should invalidate multiple objects\", async () => {\n const { subFn: empSubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const { subFn: emp2SubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_2_ID,\n });\n const { subFn: officeSubFn } = await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n\n empSubFn.next.mockClear();\n emp2SubFn.next.mockClear();\n officeSubFn.next.mockClear();\n\n const emp1 = await client(Employee).fetchOne(EMPLOYEE_1_ID);\n const emp2 = await client(Employee).fetchOne(EMPLOYEE_2_ID);\n invariant(emp1);\n invariant(emp2);\n\n await cache.invalidateObjects([emp1, emp2]);\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n expect(empSubFn.next).toHaveBeenCalled();\n expect(emp2SubFn.next).toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n\n it(\"should invalidate mixed object types\", async () => {\n const { subFn: empSubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n const { subFn: officeSubFn } = await expectStandardObserveObject({\n cache,\n type: Office,\n primaryKey: OFFICE_1_ID,\n });\n const { subFn: todoSubFn } = await expectStandardObserveObject({\n cache,\n type: Todo,\n primaryKey: TODO_1_ID,\n });\n\n empSubFn.next.mockClear();\n officeSubFn.next.mockClear();\n todoSubFn.next.mockClear();\n\n const emp1 = await client(Employee).fetchOne(EMPLOYEE_1_ID);\n const office1 = await client(Office).fetchOne(OFFICE_1_ID);\n invariant(emp1);\n invariant(office1);\n\n await cache.invalidateObjects([emp1, office1]);\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n expect(empSubFn.next).toHaveBeenCalled();\n expect(officeSubFn.next).toHaveBeenCalled();\n expect(todoSubFn.next).not.toHaveBeenCalled();\n });\n\n it(\"should handle empty array\", async () => {\n const { subFn: empSubFn } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: EMPLOYEE_1_ID,\n });\n\n empSubFn.next.mockClear();\n\n await cache.invalidateObjects([]);\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n expect(empSubFn.next).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -14,100 +14,59 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { BehaviorSubject } from "rxjs";
18
17
  import invariant from "tiny-invariant";
19
18
  import { additionalContext } from "../../Client.js";
20
19
  import { DEBUG_REFCOUNTS } from "../DebugFlags.js";
21
- import { ActionApplication } from "./ActionApplication.js";
20
+ import { ActionApplication } from "./actions/ActionApplication.js";
22
21
  import { CacheKeys } from "./CacheKeys.js";
23
22
  import { createChangedObjects, DEBUG_ONLY__changesToString } from "./Changes.js";
24
- import { Entry, Layer } from "./Layer.js";
25
- import { isListCacheKey, ListQuery } from "./ListQuery.js";
26
- import { ObjectQuery } from "./ObjectQuery.js";
23
+ import { Layers } from "./Layers.js";
24
+ import { LinksHelper } from "./links/LinksHelper.js";
25
+ import { ListsHelper } from "./list/ListsHelper.js";
26
+ import { ObjectsHelper } from "./object/ObjectsHelper.js";
27
+ import { ObjectSetHelper } from "./objectset/ObjectSetHelper.js";
27
28
  import { OrderByCanonicalizer } from "./OrderByCanonicalizer.js";
28
- import { RefCounts } from "./RefCounts.js";
29
- import { tombstone } from "./tombstone.js";
29
+ import { Queries } from "./Queries.js";
30
30
  import { WhereClauseCanonicalizer } from "./WhereClauseCanonicalizer.js";
31
-
32
- /*
33
- Work still to do:
34
- - [x] testing for optimistic writes
35
- - [x] automatic invalidation of actions
36
- - [x] automatic optimistic list updates
37
- - [x] useOsdkObjects
38
- - [x] imply offline for objects passed directly
39
- - [x] websocket subscriptions
40
- - [ ] links
41
- - [x] add pagination
42
- - [ ] sub-selection support
43
- - [ ] interfaces
44
- - [ ] setup defaults
45
- - [ ] reduce updates in react
46
- */
47
-
48
- function createInitEntry(cacheKey) {
49
- return {
50
- cacheKey,
51
- status: "init",
52
- value: undefined,
53
- lastUpdated: 0
54
- };
55
- }
56
-
57
31
  /*
58
32
  Notes:
59
33
  - Subjects are one per type per store (by cache key)
60
34
  - Data is one per layer per cache key
61
35
  */
62
36
 
37
+ /**
38
+ * Central data store with layered cache architecture.
39
+ * - Truth layer: server state | Optimistic layers: pending changes
40
+ * - Reference counting prevents memory leaks
41
+ * - Batch operations ensure consistency
42
+ */
63
43
  export class Store {
64
44
  whereCanonicalizer = new WhereClauseCanonicalizer();
65
45
  orderByCanonicalizer = new OrderByCanonicalizer();
66
- #truthLayer = new Layer(undefined, undefined);
67
- #topLayer;
68
46
 
69
47
  /** @internal */
70
48
 
71
- // we can use a regular Map here because the refCounting will
72
- // handle cleanup.
73
- #queries = new Map();
74
- #cacheKeyToSubject = new WeakMap();
75
- #cacheKeys;
76
- #refCounts = new RefCounts(DEBUG_REFCOUNTS ? 15_000 : 60_000, k => this.#cleanupCacheKey(k));
49
+ queries = new Queries();
50
+ layers = new Layers({
51
+ logger: this.logger,
52
+ onRevalidate: this.#maybeRevalidateQueries.bind(this)
53
+ });
54
+ subjects = this.layers.subjects;
55
+
56
+ // these are hopefully temporary
77
57
 
78
- // we are currently only using this for debug logging and should just remove it in the future if that
79
- // continues to be true
80
- #finalizationRegistry;
81
58
  constructor(client) {
82
- this.client = client;
83
59
  this.logger = client[additionalContext].logger?.child({}, {
84
60
  msgPrefix: "Store"
85
61
  });
86
- this.#topLayer = this.#truthLayer;
87
- this.#cacheKeys = new CacheKeys(this.whereCanonicalizer, this.orderByCanonicalizer, k => {
88
- if (DEBUG_REFCOUNTS) {
89
- const cacheKeyType = k.type;
90
- const otherKeys = k.otherKeys;
91
- // eslint-disable-next-line no-console
92
- console.log(`CacheKeys.onCreate(${cacheKeyType}, ${JSON.stringify(otherKeys)})`);
93
- this.#finalizationRegistry.register(k, () => {
94
- // eslint-disable-next-line no-console
95
- console.log(`CacheKey Finalization(${cacheKeyType}, ${JSON.stringify(otherKeys)})`);
96
- });
97
- }
98
- this.#refCounts.register(k);
99
- });
100
- setInterval(() => {
101
- this.#refCounts.gc();
102
- }, 1000);
103
- this.#finalizationRegistry = new FinalizationRegistry(cleanupCallback => {
104
- try {
105
- cleanupCallback();
106
- } catch (e) {
107
- // eslint-disable-next-line no-console
108
- console.error("Caught an error while running a finalization callback", e);
109
- }
62
+ this.client = client;
63
+ this.cacheKeys = new CacheKeys({
64
+ onDestroy: this.#cleanupCacheKey
110
65
  });
66
+ this.lists = new ListsHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);
67
+ this.objects = new ObjectsHelper(this, this.cacheKeys);
68
+ this.links = new LinksHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);
69
+ this.objectSets = new ObjectSetHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);
111
70
  }
112
71
 
113
72
  /**
@@ -115,7 +74,7 @@ export class Store {
115
74
  * @param key
116
75
  */
117
76
  #cleanupCacheKey = key => {
118
- const subject = this.peekSubject(key);
77
+ const subject = this.subjects.peek(key);
119
78
  if (DEBUG_REFCOUNTS) {
120
79
  // eslint-disable-next-line no-console
121
80
  console.log(`CacheKey cleaning up (${JSON.stringify({
@@ -123,16 +82,11 @@ export class Store {
123
82
  observed: subject?.observed
124
83
  })})`, JSON.stringify([key.type, ...key.otherKeys], null, 2));
125
84
  }
126
- this.#cacheKeys.remove(key);
127
85
  if (process.env.NODE_ENV !== "production") {
128
86
  !subject ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
129
87
  }
130
- if (subject) {
131
- subject.complete();
132
- this.#cacheKeyToSubject.delete(key);
133
- }
134
- this.#queries.get(key)?.dispose();
135
- this.#queries.delete(key);
88
+ this.subjects.delete(key);
89
+ this.queries.delete(key);
136
90
  };
137
91
  applyAction = async (action, args, opts) => {
138
92
  return await new ActionApplication(this).applyAction(action, args, opts);
@@ -144,247 +98,66 @@ export class Store {
144
98
  });
145
99
  return result;
146
100
  };
147
- removeLayer(layerId) {
148
- !(layerId != null) ? process.env.NODE_ENV !== "production" ? invariant(false, "undefined is the reserved layerId for the truth layer") : invariant(false) : void 0;
149
- // 1. collect all cache keys for a given layerId
150
- let currentLayer = this.#topLayer;
151
- const cacheKeys = new Map();
152
- while (currentLayer != null && currentLayer.parentLayer != null) {
153
- if (currentLayer.layerId === layerId) {
154
- for (const [k, v] of currentLayer.entries()) {
155
- if (cacheKeys.has(k)) continue;
156
- cacheKeys.set(k, v);
157
- }
158
- }
159
- currentLayer = currentLayer.parentLayer;
160
- }
161
-
162
- // 2. remove the layers from the chain
163
- this.#topLayer = this.#topLayer.removeLayer(layerId);
164
-
165
- // 3. check each cache key to see if it is different in the new chain
166
- for (const [k, oldEntry] of cacheKeys) {
167
- const currentEntry = this.#topLayer.get(k);
168
-
169
- // 4. if different, update the subject
170
- if (oldEntry !== currentEntry) {
171
- currentEntry ?? createInitEntry(k); // We are going to be pretty lazy here and just re-emit the value.
172
- // In the future it may benefit us to deep equal check her but I think
173
- // the subjects are effectively doing this anyway.
174
- this.peekSubject(k)?.next({
175
- // eslint-disable-next-line @typescript-eslint/no-misused-spread
176
- ...(currentEntry ?? createInitEntry(k)),
177
- isOptimistic: currentEntry?.value !== this.#truthLayer.get(k)?.value
178
- });
179
- }
180
- }
181
- }
182
- getCacheKey(type, ...args) {
183
- return this.#refCounts.register(this.#cacheKeys.get(type, ...args));
184
- }
185
- peekSubject = cacheKey => {
186
- return this.#cacheKeyToSubject.get(cacheKey);
187
- };
188
- getSubject = cacheKey => {
189
- let subject = this.#cacheKeyToSubject.get(cacheKey);
190
- if (!subject) {
191
- const initialValue = this.#topLayer.get(cacheKey) ?? createInitEntry(cacheKey);
192
- subject = new BehaviorSubject({
193
- // eslint-disable-next-line @typescript-eslint/no-misused-spread
194
- ...initialValue,
195
- isOptimistic: initialValue.value !== this.#truthLayer.get(cacheKey)?.value
196
- });
197
- this.#cacheKeyToSubject.set(cacheKey, subject);
198
- }
199
- return subject;
200
- };
201
- canonicalizeWhereClause(where) {
202
- return this.whereCanonicalizer.canonicalize(where);
203
- }
204
- observeObject(apiName, pk, options, subFn) {
205
- if (typeof apiName !== "string") {
206
- apiName = apiName.apiName;
207
- }
208
- const query = this.getObjectQuery(apiName, pk);
209
- this.retain(query.cacheKey);
210
- if (options.mode !== "offline") {
211
- query.revalidate(options.mode === "force").catch(e => {
212
- subFn.error(e);
213
- // we don't want observeObject() to return a promise,
214
- // so we settle for logging an error here instead of
215
- // dropping it on the floor.
216
- if (this.logger) {
217
- this.logger.error("Unhandled error in observeObject", e);
218
- } else {
219
- throw e;
220
- }
221
- });
222
- }
223
- const sub = query.subscribe(subFn);
224
- return {
225
- unsubscribe: () => {
226
- sub.unsubscribe();
227
- this.release(query.cacheKey);
228
- }
229
- };
230
- }
231
- observeList(options, subFn) {
232
- // the ListQuery represents the shared state of the list
233
- const query = this.getListQuery(options.type, options.where ?? {}, options.orderBy ?? {}, options);
234
- this.retain(query.cacheKey);
235
- if (options.mode !== "offline") {
236
- query.revalidate(options.mode === "force").catch(x => {
237
- subFn.error(x);
238
- });
239
- }
240
- const sub = query.subscribe(subFn);
241
- if (options.streamUpdates) {
242
- query.registerStreamUpdates(sub);
243
- }
244
- return {
245
- unsubscribe: () => {
246
- sub.unsubscribe();
247
- this.release(query.cacheKey);
248
- }
249
- };
250
- }
251
- peekQuery(cacheKey) {
252
- return this.#queries.get(cacheKey);
253
- }
254
- #getQuery(cacheKey, createQuery) {
255
- let query = this.peekQuery(cacheKey);
256
- if (!query) {
257
- query = createQuery();
258
- this.#queries.set(cacheKey, query);
259
- }
260
- return query;
261
- }
262
- getListQuery(def, where, orderBy, opts) {
263
- const {
264
- apiName,
265
- type
266
- } = def;
267
- const canonWhere = this.whereCanonicalizer.canonicalize(where);
268
- const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy);
269
- const listCacheKey = this.getCacheKey("list", type, apiName, canonWhere, canonOrderBy);
270
- return this.#getQuery(listCacheKey, () => {
271
- return new ListQuery(this, this.getSubject(listCacheKey), type, apiName, canonWhere, canonOrderBy, listCacheKey, opts);
272
- });
273
- }
274
- getObjectQuery(apiName, pk) {
275
- if (typeof apiName !== "string") {
276
- apiName = apiName.apiName;
277
- }
278
- const objectCacheKey = this.getCacheKey("object", apiName, pk);
279
- return this.#getQuery(objectCacheKey, () => new ObjectQuery(this, this.getSubject(objectCacheKey), apiName, pk, objectCacheKey, {
280
- dedupeInterval: 0
281
- }));
282
- }
283
101
  getValue(cacheKey) {
284
- return this.#topLayer.get(cacheKey);
102
+ return this.layers.top.get(cacheKey);
285
103
  }
286
- batch = ({
104
+ batch({
287
105
  optimisticId,
288
106
  changes = createChangedObjects()
289
- }, batchFn) => {
290
- !(optimisticId === undefined || !!optimisticId) ? process.env.NODE_ENV !== "production" ? invariant(false, "optimistic must be undefined or not falsy") : invariant(false) : void 0;
291
- let needsLayer = optimisticId !== undefined;
292
- const batchContext = {
293
- changes,
294
- createLayerIfNeeded: () => {
295
- if (needsLayer) {
296
- this.#topLayer = this.#topLayer.addLayer(optimisticId);
297
- needsLayer = false;
298
- }
299
- },
300
- optimisticWrite: !!optimisticId,
301
- write: (cacheKey, value, status) => {
302
- const oldTopValue = this.#topLayer.get(cacheKey);
303
- if (optimisticId) batchContext.createLayerIfNeeded();
304
- const writeLayer = optimisticId ? this.#topLayer : this.#truthLayer;
305
- const newValue = new Entry(cacheKey, value, Date.now(), status);
306
- writeLayer.set(cacheKey, newValue);
307
- const newTopValue = this.#topLayer.get(cacheKey);
308
- if (oldTopValue !== newTopValue) {
309
- this.#cacheKeyToSubject.get(cacheKey)?.next({
310
- // eslint-disable-next-line @typescript-eslint/no-misused-spread
311
- ...newValue,
312
- isOptimistic: newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value
313
- });
314
- }
315
- return newValue;
316
- },
317
- delete: (cacheKey, status) => {
318
- return batchContext.write(cacheKey, tombstone, status);
319
- },
320
- read: cacheKey => {
321
- return optimisticId ? this.#topLayer.get(cacheKey) : this.#truthLayer.get(cacheKey);
322
- }
323
- };
324
- const retVal = batchFn(batchContext);
325
- this.maybeRevalidateQueries(changes, optimisticId).catch(e => {
326
- // we don't want batch() to return a promise,
327
- // so we settle for logging an error here instead of
328
- // dropping it on the floor.
329
- if (this.logger) {
330
- this.logger.error("Unhandled error in batch", e);
331
- } else {
332
- // eslint-disable-next-line no-console
333
- console.error("Unhandled error in batch", e);
334
- throw e;
335
- }
336
- });
337
- return {
338
- batchResult: batchContext,
339
- retVal: retVal,
340
- changes: batchContext.changes
341
- };
342
- };
107
+ }, batchFn) {
108
+ return this.layers.batch({
109
+ optimisticId,
110
+ changes
111
+ }, batchFn);
112
+ }
343
113
  invalidateObject(apiName, pk) {
344
114
  if (typeof apiName !== "string") {
345
115
  apiName = apiName.apiName;
346
116
  }
347
- return this.getObjectQuery(apiName, pk).revalidate(/* force */true);
117
+ return this.objects.getQuery({
118
+ apiName,
119
+ pk
120
+ }).revalidate(/* force */true);
348
121
  }
349
- async maybeRevalidateQueries(changes, optimisticId) {
122
+ async #maybeRevalidateQueries(changes, optimisticId) {
123
+ const logger = process.env.NODE_ENV !== "production" ? this.logger?.child({
124
+ methodName: "maybeRevalidateQueries"
125
+ }) : undefined;
350
126
  if (changes.isEmpty()) {
351
127
  if (process.env.NODE_ENV !== "production") {
352
- // todo
353
- this.logger?.child({
354
- methodName: "maybeRevalidateQueries"
355
- }).debug("No changes, aborting");
128
+ logger?.debug("No changes, aborting");
356
129
  }
357
130
  return;
358
131
  }
359
132
  if (process.env.NODE_ENV !== "production") {
360
- // todo
361
- this.logger?.child({
362
- methodName: "maybeRevalidateQueries"
363
- }).debug(DEBUG_ONLY__changesToString(changes), {
133
+ logger?.debug(DEBUG_ONLY__changesToString(changes), {
364
134
  optimisticId
365
135
  });
366
136
  }
367
137
  try {
368
138
  const promises = [];
369
- for (const cacheKey of this.#queries.keys()) {
370
- const promise = this.peekQuery(cacheKey)?.maybeUpdateAndRevalidate?.(changes, optimisticId);
139
+ for (const cacheKey of this.queries.keys()) {
140
+ const promise = this.queries.peek(cacheKey)?.maybeUpdateAndRevalidate?.(changes, optimisticId);
371
141
  if (promise) promises.push(promise);
372
142
  }
373
143
  await Promise.all(promises);
374
144
  } finally {
375
145
  if (process.env.NODE_ENV !== "production") {
376
- // todo
377
- this.logger?.child({
378
- methodName: "maybeRevalidateQueries"
379
- }).debug("in finally", DEBUG_ONLY__changesToString(changes));
146
+ logger?.debug("in finally", DEBUG_ONLY__changesToString(changes));
380
147
  }
381
148
  }
382
149
  }
383
150
 
384
151
  /**
385
- * @param apiName
386
- * @param changes The changes we know about / to update
387
- * @returns
152
+ * Invalidates all cache entries for a specific object type.
153
+ * This will revalidate:
154
+ * 1. All objects of the specified type
155
+ * 2. All lists of the specified type
156
+ * 3. All links where the source object is of the specified type
157
+ *
158
+ * @param apiName - The API name of the object type to invalidate
159
+ * @param changes - Optional changes object to track what has been modified
160
+ * @returns Promise that resolves when all invalidations are complete
388
161
  */
389
162
  invalidateObjectType(apiName, changes) {
390
163
  if (typeof apiName !== "string") {
@@ -396,30 +169,38 @@ export class Store {
396
169
  }).info(changes ? DEBUG_ONLY__changesToString(changes) : void 0);
397
170
  }
398
171
  const promises = [];
399
- for (const cacheKey of this.#truthLayer.keys()) {
400
- if (isListCacheKey(cacheKey)) {
401
- if (!changes || !changes.modified.has(cacheKey)) {
402
- const promise = this.peekQuery(cacheKey)?.revalidate(true);
403
- if (promise) {
404
- promises.push(promise);
405
- changes?.modified.add(cacheKey);
406
- }
407
- }
172
+ for (const cacheKey of this.layers.truth.keys()) {
173
+ if (changes && changes.modified.has(cacheKey)) {
174
+ continue;
408
175
  }
176
+ const query = this.queries.peek(cacheKey);
177
+ if (!query) continue;
178
+ promises.push(query.invalidateObjectType(apiName, changes));
409
179
  }
410
- return Promise.all(promises).then(() => void 0);
180
+
181
+ // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.
182
+ return Promise.allSettled(promises).then(() => void 0);
411
183
  }
412
- retain(cacheKey) {
413
- this.#refCounts.retain(cacheKey);
184
+ async invalidateAll() {
185
+ const promises = [];
186
+ for (const cacheKey of this.queries.keys()) {
187
+ const query = this.queries.peek(cacheKey);
188
+ if (query) {
189
+ promises.push(query.revalidate(true));
190
+ }
191
+ }
192
+ // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.
193
+ return Promise.allSettled(promises).then(() => void 0);
414
194
  }
415
- release(cacheKey) {
416
- this.#refCounts.release(cacheKey);
195
+ async invalidateObjects(objects) {
196
+ const objectsArray = Array.isArray(objects) ? objects : [objects];
197
+ const promises = [];
198
+ for (const obj of objectsArray) {
199
+ promises.push(this.invalidateObject(obj.$objectType, obj.$primaryKey));
200
+ }
201
+
202
+ // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.
203
+ return Promise.allSettled(promises).then(() => void 0);
417
204
  }
418
205
  }
419
- export async function invalidateList(store, args) {
420
- const where = store.whereCanonicalizer.canonicalize(args.where ?? {});
421
- const orderBy = store.orderByCanonicalizer.canonicalize(args.orderBy ?? {});
422
- const cacheKey = store.getCacheKey("list", args.type.type, args.type.apiName, where, orderBy);
423
- await store.peekQuery(cacheKey)?.revalidate(true);
424
- }
425
206
  //# sourceMappingURL=Store.js.map