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

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 (293) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/build/browser/Client.js +1 -1
  3. package/build/browser/Client.js.map +1 -1
  4. package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
  5. package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
  6. package/build/browser/intellisense.test.js +14 -4
  7. package/build/browser/intellisense.test.js.map +1 -1
  8. package/build/browser/object/Cache.js +1 -1
  9. package/build/browser/object/Cache.js.map +1 -1
  10. package/build/browser/object/SimpleCache.js +1 -1
  11. package/build/browser/object/SimpleCache.js.map +1 -1
  12. package/build/browser/object/convertWireToOsdkObjects.js +4 -0
  13. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  14. package/build/browser/object/fetchPage.js +8 -4
  15. package/build/browser/object/fetchPage.js.map +1 -1
  16. package/build/browser/object/geotimeseriesreference.test.js +0 -2
  17. package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
  18. package/build/browser/objectSet/createObjectSet.js +3 -1
  19. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  20. package/build/browser/observable/LinkPayload.js +2 -0
  21. package/build/browser/observable/LinkPayload.js.map +1 -0
  22. package/build/browser/observable/ObjectPayload.js.map +1 -1
  23. package/build/browser/observable/ObservableClient/ObserveLink.js +17 -0
  24. package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -0
  25. package/build/browser/observable/ObservableClient/common.js +2 -0
  26. package/build/browser/observable/ObservableClient/common.js.map +1 -0
  27. package/build/browser/observable/ObservableClient.js +20 -0
  28. package/build/browser/observable/ObservableClient.js.map +1 -1
  29. package/build/browser/observable/Unsubscribable.js +2 -0
  30. package/build/browser/observable/Unsubscribable.js.map +1 -0
  31. package/build/browser/observable/internal/AbstractHelper.js +50 -0
  32. package/build/browser/observable/internal/AbstractHelper.js.map +1 -0
  33. package/build/browser/observable/internal/BaseCollectionQuery.js +2 -0
  34. package/build/browser/observable/internal/BaseCollectionQuery.js.map +1 -0
  35. package/build/browser/observable/internal/BulkObjectLoader.js +3 -3
  36. package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
  37. package/build/browser/observable/internal/CacheKeys.js +17 -2
  38. package/build/browser/observable/internal/CacheKeys.js.map +1 -1
  39. package/build/browser/observable/internal/Changes.js +6 -0
  40. package/build/browser/observable/internal/Changes.js.map +1 -1
  41. package/build/browser/observable/internal/KnownCacheKey.js +2 -0
  42. package/build/browser/observable/internal/KnownCacheKey.js.map +1 -0
  43. package/build/browser/observable/internal/Layer.js.map +1 -1
  44. package/build/browser/observable/internal/ListCacheKey.js +2 -0
  45. package/build/browser/observable/internal/ListCacheKey.js.map +1 -0
  46. package/build/browser/observable/internal/ListQuery.js +399 -161
  47. package/build/browser/observable/internal/ListQuery.js.map +1 -1
  48. package/build/browser/observable/internal/ObjectQuery.js +27 -2
  49. package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
  50. package/build/browser/observable/internal/ObservableClientImpl.js +42 -2
  51. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  52. package/build/browser/observable/internal/OptimisticJob.js +12 -3
  53. package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
  54. package/build/browser/observable/internal/Query.js +17 -3
  55. package/build/browser/observable/internal/Query.js.map +1 -1
  56. package/build/browser/observable/internal/QuerySubscription.js +41 -0
  57. package/build/browser/observable/internal/QuerySubscription.js.map +1 -0
  58. package/build/browser/observable/internal/Store.invalidation.test.js +481 -0
  59. package/build/browser/observable/internal/Store.invalidation.test.js.map +1 -0
  60. package/build/browser/observable/internal/Store.js +38 -91
  61. package/build/browser/observable/internal/Store.js.map +1 -1
  62. package/build/browser/observable/internal/Store.test.js +318 -63
  63. package/build/browser/observable/internal/Store.test.js.map +1 -1
  64. package/build/browser/observable/internal/UnsubscribableWrapper.js +30 -0
  65. package/build/browser/observable/internal/UnsubscribableWrapper.js.map +1 -0
  66. package/build/browser/observable/internal/createCollectionConnectable.js +50 -0
  67. package/build/browser/observable/internal/createCollectionConnectable.js.map +1 -0
  68. package/build/browser/observable/internal/createCollectionConnectable.test.js +599 -0
  69. package/build/browser/observable/internal/createCollectionConnectable.test.js.map +1 -0
  70. package/build/browser/observable/internal/getObjectTypesThatInvalidate.js +216 -0
  71. package/build/browser/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
  72. package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
  73. package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
  74. package/build/browser/observable/internal/isObjectInstance.js +23 -0
  75. package/build/browser/observable/internal/isObjectInstance.js.map +1 -0
  76. package/build/browser/observable/internal/links/LinksHelper.js +37 -0
  77. package/build/browser/observable/internal/links/LinksHelper.js.map +1 -0
  78. package/build/browser/observable/internal/links/SpecificLinkCacheKey.js +2 -0
  79. package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
  80. package/build/browser/observable/internal/links/SpecificLinkQuery.js +185 -0
  81. package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -0
  82. package/build/browser/observable/internal/list/ListsHelper.js +49 -0
  83. package/build/browser/observable/internal/list/ListsHelper.js.map +1 -0
  84. package/build/browser/observable/internal/object/ObjectsHelper.js +34 -0
  85. package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -0
  86. package/build/browser/observable/internal/removeDuplicates.js +36 -0
  87. package/build/browser/observable/internal/removeDuplicates.js.map +1 -0
  88. package/build/browser/observable/internal/sorting/SortingStrategy.js +78 -0
  89. package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -0
  90. package/build/browser/observable/internal/testUtils/invalidateList.js +23 -0
  91. package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -0
  92. package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
  93. package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
  94. package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
  95. package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
  96. package/build/browser/observable/internal/testUtils.js +70 -7
  97. package/build/browser/observable/internal/testUtils.js.map +1 -1
  98. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  99. package/build/browser/util/UserAgent.js +2 -2
  100. package/build/browser/util/streamutils.js +1 -1
  101. package/build/browser/util/streamutils.js.map +1 -1
  102. package/build/cjs/{chunk-URDXPIRU.cjs → chunk-N5DMNYGH.cjs} +58 -54
  103. package/build/cjs/chunk-N5DMNYGH.cjs.map +1 -0
  104. package/build/cjs/{chunk-BJYCRD5Y.cjs → chunk-NWD33DSJ.cjs} +23 -19
  105. package/build/cjs/chunk-NWD33DSJ.cjs.map +1 -0
  106. package/build/cjs/index.cjs +7 -7
  107. package/build/cjs/public/internal.cjs +8 -8
  108. package/build/cjs/public/unstable-do-not-use.cjs +779 -268
  109. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  110. package/build/cjs/public/unstable-do-not-use.d.cts +161 -12
  111. package/build/esm/Client.js +1 -1
  112. package/build/esm/Client.js.map +1 -1
  113. package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
  114. package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
  115. package/build/esm/intellisense.test.js +14 -4
  116. package/build/esm/intellisense.test.js.map +1 -1
  117. package/build/esm/object/Cache.js +1 -1
  118. package/build/esm/object/Cache.js.map +1 -1
  119. package/build/esm/object/SimpleCache.js +1 -1
  120. package/build/esm/object/SimpleCache.js.map +1 -1
  121. package/build/esm/object/convertWireToOsdkObjects.js +4 -0
  122. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  123. package/build/esm/object/fetchPage.js +8 -4
  124. package/build/esm/object/fetchPage.js.map +1 -1
  125. package/build/esm/object/geotimeseriesreference.test.js +0 -2
  126. package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
  127. package/build/esm/objectSet/createObjectSet.js +3 -1
  128. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  129. package/build/esm/observable/LinkPayload.js +2 -0
  130. package/build/esm/observable/LinkPayload.js.map +1 -0
  131. package/build/esm/observable/ObjectPayload.js.map +1 -1
  132. package/build/esm/observable/ObservableClient/ObserveLink.js +17 -0
  133. package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -0
  134. package/build/esm/observable/ObservableClient/common.js +2 -0
  135. package/build/esm/observable/ObservableClient/common.js.map +1 -0
  136. package/build/esm/observable/ObservableClient.js +20 -0
  137. package/build/esm/observable/ObservableClient.js.map +1 -1
  138. package/build/esm/observable/Unsubscribable.js +2 -0
  139. package/build/esm/observable/Unsubscribable.js.map +1 -0
  140. package/build/esm/observable/internal/AbstractHelper.js +50 -0
  141. package/build/esm/observable/internal/AbstractHelper.js.map +1 -0
  142. package/build/esm/observable/internal/BaseCollectionQuery.js +2 -0
  143. package/build/esm/observable/internal/BaseCollectionQuery.js.map +1 -0
  144. package/build/esm/observable/internal/BulkObjectLoader.js +3 -3
  145. package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
  146. package/build/esm/observable/internal/CacheKeys.js +17 -2
  147. package/build/esm/observable/internal/CacheKeys.js.map +1 -1
  148. package/build/esm/observable/internal/Changes.js +6 -0
  149. package/build/esm/observable/internal/Changes.js.map +1 -1
  150. package/build/esm/observable/internal/KnownCacheKey.js +2 -0
  151. package/build/esm/observable/internal/KnownCacheKey.js.map +1 -0
  152. package/build/esm/observable/internal/Layer.js.map +1 -1
  153. package/build/esm/observable/internal/ListCacheKey.js +2 -0
  154. package/build/esm/observable/internal/ListCacheKey.js.map +1 -0
  155. package/build/esm/observable/internal/ListQuery.js +399 -161
  156. package/build/esm/observable/internal/ListQuery.js.map +1 -1
  157. package/build/esm/observable/internal/ObjectQuery.js +27 -2
  158. package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
  159. package/build/esm/observable/internal/ObservableClientImpl.js +42 -2
  160. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  161. package/build/esm/observable/internal/OptimisticJob.js +12 -3
  162. package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
  163. package/build/esm/observable/internal/Query.js +17 -3
  164. package/build/esm/observable/internal/Query.js.map +1 -1
  165. package/build/esm/observable/internal/QuerySubscription.js +41 -0
  166. package/build/esm/observable/internal/QuerySubscription.js.map +1 -0
  167. package/build/esm/observable/internal/Store.invalidation.test.js +481 -0
  168. package/build/esm/observable/internal/Store.invalidation.test.js.map +1 -0
  169. package/build/esm/observable/internal/Store.js +38 -91
  170. package/build/esm/observable/internal/Store.js.map +1 -1
  171. package/build/esm/observable/internal/Store.test.js +318 -63
  172. package/build/esm/observable/internal/Store.test.js.map +1 -1
  173. package/build/esm/observable/internal/UnsubscribableWrapper.js +30 -0
  174. package/build/esm/observable/internal/UnsubscribableWrapper.js.map +1 -0
  175. package/build/esm/observable/internal/createCollectionConnectable.js +50 -0
  176. package/build/esm/observable/internal/createCollectionConnectable.js.map +1 -0
  177. package/build/esm/observable/internal/createCollectionConnectable.test.js +599 -0
  178. package/build/esm/observable/internal/createCollectionConnectable.test.js.map +1 -0
  179. package/build/esm/observable/internal/getObjectTypesThatInvalidate.js +216 -0
  180. package/build/esm/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
  181. package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
  182. package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
  183. package/build/esm/observable/internal/isObjectInstance.js +23 -0
  184. package/build/esm/observable/internal/isObjectInstance.js.map +1 -0
  185. package/build/esm/observable/internal/links/LinksHelper.js +37 -0
  186. package/build/esm/observable/internal/links/LinksHelper.js.map +1 -0
  187. package/build/esm/observable/internal/links/SpecificLinkCacheKey.js +2 -0
  188. package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
  189. package/build/esm/observable/internal/links/SpecificLinkQuery.js +185 -0
  190. package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -0
  191. package/build/esm/observable/internal/list/ListsHelper.js +49 -0
  192. package/build/esm/observable/internal/list/ListsHelper.js.map +1 -0
  193. package/build/esm/observable/internal/object/ObjectsHelper.js +34 -0
  194. package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -0
  195. package/build/esm/observable/internal/removeDuplicates.js +36 -0
  196. package/build/esm/observable/internal/removeDuplicates.js.map +1 -0
  197. package/build/esm/observable/internal/sorting/SortingStrategy.js +78 -0
  198. package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -0
  199. package/build/esm/observable/internal/testUtils/invalidateList.js +23 -0
  200. package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -0
  201. package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
  202. package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
  203. package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
  204. package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
  205. package/build/esm/observable/internal/testUtils.js +70 -7
  206. package/build/esm/observable/internal/testUtils.js.map +1 -1
  207. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  208. package/build/esm/util/UserAgent.js +2 -2
  209. package/build/esm/util/streamutils.js +1 -1
  210. package/build/esm/util/streamutils.js.map +1 -1
  211. package/build/types/Client.d.ts +1 -1
  212. package/build/types/object/fetchPage.d.ts.map +1 -1
  213. package/build/types/observable/LinkPayload.d.ts +9 -0
  214. package/build/types/observable/LinkPayload.d.ts.map +1 -0
  215. package/build/types/observable/ObjectPayload.d.ts +4 -0
  216. package/build/types/observable/ObjectPayload.d.ts.map +1 -1
  217. package/build/types/observable/ObservableClient/ObserveLink.d.ts +32 -0
  218. package/build/types/observable/ObservableClient/ObserveLink.d.ts.map +1 -0
  219. package/build/types/observable/ObservableClient/common.d.ts +67 -0
  220. package/build/types/observable/ObservableClient/common.d.ts.map +1 -0
  221. package/build/types/observable/ObservableClient.d.ts +82 -15
  222. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  223. package/build/types/observable/Unsubscribable.d.ts +3 -0
  224. package/build/types/observable/Unsubscribable.d.ts.map +1 -0
  225. package/build/types/observable/internal/AbstractHelper.d.ts +15 -0
  226. package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -0
  227. package/build/types/observable/internal/BaseCollectionQuery.d.ts +64 -0
  228. package/build/types/observable/internal/BaseCollectionQuery.d.ts.map +1 -0
  229. package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
  230. package/build/types/observable/internal/CacheKeys.d.ts +10 -4
  231. package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
  232. package/build/types/observable/internal/Changes.d.ts +7 -4
  233. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  234. package/build/types/observable/internal/KnownCacheKey.d.ts +4 -0
  235. package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -0
  236. package/build/types/observable/internal/Layer.d.ts +7 -7
  237. package/build/types/observable/internal/Layer.d.ts.map +1 -1
  238. package/build/types/observable/internal/ListCacheKey.d.ts +7 -0
  239. package/build/types/observable/internal/ListCacheKey.d.ts.map +1 -0
  240. package/build/types/observable/internal/ListQuery.d.ts +160 -21
  241. package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
  242. package/build/types/observable/internal/ObjectQuery.d.ts +3 -1
  243. package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
  244. package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
  245. package/build/types/observable/internal/Query.d.ts +6 -5
  246. package/build/types/observable/internal/Query.d.ts.map +1 -1
  247. package/build/types/observable/internal/QuerySubscription.d.ts +1 -0
  248. package/build/types/observable/internal/QuerySubscription.d.ts.map +1 -0
  249. package/build/types/observable/internal/Store.d.ts +34 -31
  250. package/build/types/observable/internal/Store.d.ts.map +1 -1
  251. package/build/types/observable/internal/Store.invalidation.test.d.ts +1 -0
  252. package/build/types/observable/internal/Store.invalidation.test.d.ts.map +1 -0
  253. package/build/types/observable/internal/Store.test.d.ts +4 -1
  254. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  255. package/build/types/observable/internal/UnsubscribableWrapper.d.ts +1 -0
  256. package/build/types/observable/internal/UnsubscribableWrapper.d.ts.map +1 -0
  257. package/build/types/observable/internal/createCollectionConnectable.d.ts +38 -0
  258. package/build/types/observable/internal/createCollectionConnectable.d.ts.map +1 -0
  259. package/build/types/observable/internal/createCollectionConnectable.test.d.ts +1 -0
  260. package/build/types/observable/internal/createCollectionConnectable.test.d.ts.map +1 -0
  261. package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts +9 -0
  262. package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts.map +1 -0
  263. package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts +1 -0
  264. package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts.map +1 -0
  265. package/build/types/observable/internal/isObjectInstance.d.ts +5 -0
  266. package/build/types/observable/internal/isObjectInstance.d.ts.map +1 -0
  267. package/build/types/observable/internal/links/LinksHelper.d.ts +29 -0
  268. package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -0
  269. package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +17 -0
  270. package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -0
  271. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +45 -0
  272. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -0
  273. package/build/types/observable/internal/list/ListsHelper.d.ts +17 -0
  274. package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -0
  275. package/build/types/observable/internal/object/ObjectsHelper.d.ts +11 -0
  276. package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -0
  277. package/build/types/observable/internal/removeDuplicates.d.ts +11 -0
  278. package/build/types/observable/internal/removeDuplicates.d.ts.map +1 -0
  279. package/build/types/observable/internal/sorting/SortingStrategy.d.ts +41 -0
  280. package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -0
  281. package/build/types/observable/internal/testUtils/invalidateList.d.ts +9 -0
  282. package/build/types/observable/internal/testUtils/invalidateList.d.ts.map +1 -0
  283. package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts +46 -0
  284. package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts.map +1 -0
  285. package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts +26 -0
  286. package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts.map +1 -0
  287. package/build/types/observable/internal/testUtils.d.ts +25 -3
  288. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  289. package/build/types/public/unstable-do-not-use.d.ts +4 -2
  290. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  291. package/package.json +10 -10
  292. package/build/cjs/chunk-BJYCRD5Y.cjs.map +0 -1
  293. package/build/cjs/chunk-URDXPIRU.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expectStandardObserveObject.js","names":["expect","createDefer","expectSingleObjectCallAndClear","mockSingleSubCallback","waitForCall","defer","expectStandardObserveObject","cache","type","primaryKey","subFn","objects","observe","apiName","pk","undefined","obj","objectContaining","$apiName","$primaryKey","payload"],"sources":["expectStandardObserveObject.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 type { ObjectTypeDefinition, PrimaryKeyType } from \"@osdk/api\";\nimport { expect } from \"vitest\";\nimport type { TypedObjectPayload } from \"../../../ObjectPayload.js\";\nimport type { Store } from \"../../Store.js\";\nimport type { MockedSingleSubCallback } from \"../../testUtils.js\";\nimport {\n createDefer,\n expectSingleObjectCallAndClear,\n mockSingleSubCallback,\n waitForCall,\n} from \"../../testUtils.js\";\n\nconst defer = createDefer();\n\n/**\n * Utility function for testing object observation behavior\n *\n * This function provides the following guarantees:\n * - Validates the initial \"loading\" state is emitted\n * - Waits for the subscription callback to be called again\n * - Validates the \"loaded\" state with the expected object containing apiName and primaryKey\n * - Returns both the observed object and mock subscription function for further assertions\n *\n * @param cache - The Store instance to use for observation\n * @param apiName - The API name for the object to observe\n * @param primaryKey - The primary key of the object to observe\n * @returns A promise that resolves to the observed object and the mocked subscription callback\n */\nexport async function expectStandardObserveObject<\n T extends ObjectTypeDefinition,\n>(\n { cache, type, primaryKey }: {\n cache: Store;\n type: T;\n primaryKey: PrimaryKeyType<T>;\n },\n): Promise<{\n payload: TypedObjectPayload<T>;\n subFn: MockedSingleSubCallback;\n}> {\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: type,\n pk: primaryKey,\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(\n subFn,\n undefined,\n \"loading\",\n );\n\n await waitForCall(subFn);\n\n const obj = expectSingleObjectCallAndClear(\n subFn,\n expect.objectContaining({\n $apiName: type.apiName,\n $primaryKey: primaryKey,\n }),\n \"loaded\",\n );\n return { payload: obj as TypedObjectPayload<T>, subFn };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,MAAM,QAAQ,QAAQ;AAI/B,SACEC,WAAW,EACXC,8BAA8B,EAC9BC,qBAAqB,EACrBC,WAAW,QACN,oBAAoB;AAE3B,MAAMC,KAAK,GAAGJ,WAAW,CAAC,CAAC;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeK,2BAA2BA,CAG/C;EAAEC,KAAK;EAAEC,IAAI;EAAEC;AAIf,CAAC,EAIA;EACD,MAAMC,KAAK,GAAGP,qBAAqB,CAAC,CAAC;EACrCE,KAAK,CACHE,KAAK,CAACI,OAAO,CAACC,OAAO,CAAC;IACpBC,OAAO,EAAEL,IAAI;IACbM,EAAE,EAAEL;EACN,CAAC,EAAEC,KAAK,CACV,CAAC;EAEDR,8BAA8B,CAC5BQ,KAAK,EACLK,SAAS,EACT,SACF,CAAC;EAED,MAAMX,WAAW,CAACM,KAAK,CAAC;EAExB,MAAMM,GAAG,GAAGd,8BAA8B,CACxCQ,KAAK,EACLV,MAAM,CAACiB,gBAAgB,CAAC;IACtBC,QAAQ,EAAEV,IAAI,CAACK,OAAO;IACtBM,WAAW,EAAEV;EACf,CAAC,CAAC,EACF,QACF,CAAC;EACD,OAAO;IAAEW,OAAO,EAAEJ,GAA4B;IAAEN;EAAM,CAAC;AACzD","ignoreList":[]}
@@ -15,6 +15,7 @@
15
15
  */
16
16
 
17
17
  import { Chalk } from "chalk";
18
+ import { inspect } from "node:util";
18
19
  import pDefer from "p-defer";
19
20
  import invariant from "tiny-invariant";
20
21
  import { afterEach, beforeEach, expect, vi, vitest } from "vitest";
@@ -26,11 +27,14 @@ function mockLog(...args) {
26
27
  // eslint-disable-next-line no-console
27
28
  console.log(chalk.yellow("mockClient"), ...args);
28
29
  }
29
- // interface Logger.LogFn {
30
- // (obj: unknown, msg?: string, ...args: any[]): void;
31
- // (msg: string, ...args: any[]): void;
32
- // }
33
30
 
31
+ /**
32
+ * Testing utilities for ObservableClient implementation.
33
+ * - Mock creation helpers for client, observers, and callbacks
34
+ * - Expectation utilities for validating payloads
35
+ * - Tools for managing test lifecycle and cleanup
36
+ * - Creates a colorized logger for test environments
37
+ */
34
38
  export function createTestLogger(bindings, options) {
35
39
  const colors = {
36
40
  debug: [chalk.cyan, chalk.bgCyan],
@@ -71,6 +75,10 @@ export function createTestLogger(bindings, options) {
71
75
  isLevelEnabled: vi.fn(() => true)
72
76
  };
73
77
  }
78
+
79
+ /**
80
+ * Creates mocked client helpers with deferred promise control
81
+ */
74
82
  export function createClientMockHelper() {
75
83
  const client = vitest.fn();
76
84
  const logger = createTestLogger({});
@@ -183,6 +191,10 @@ export function createClientMockHelper() {
183
191
  }
184
192
  };
185
193
  }
194
+
195
+ /**
196
+ * Manages test subscriptions with automatic cleanup
197
+ */
186
198
  export function createDefer() {
187
199
  let subscriptions;
188
200
  beforeEach(() => {
@@ -199,6 +211,18 @@ export function createDefer() {
199
211
  return x;
200
212
  };
201
213
  }
214
+ export function expectSingleLinkCallAndClear(subFn, resolvedList, payloadOptions = {}) {
215
+ if (vitest.isFakeTimers()) {
216
+ vitest.runOnlyPendingTimers();
217
+ }
218
+ expect(subFn.next).toHaveBeenCalledExactlyOnceWith(linkPayloadContaining({
219
+ ...payloadOptions,
220
+ resolvedList: resolvedList
221
+ }));
222
+ const ret = subFn.next.mock.calls[0][0];
223
+ subFn.next.mockClear();
224
+ return ret;
225
+ }
202
226
  export function expectSingleListCallAndClear(subFn, resolvedList, payloadOptions = {}) {
203
227
  if (vitest.isFakeTimers()) {
204
228
  vitest.runOnlyPendingTimers();
@@ -209,12 +233,18 @@ export function expectSingleListCallAndClear(subFn, resolvedList, payloadOptions
209
233
  }));
210
234
  subFn.next.mockClear();
211
235
  }
236
+
237
+ /**
238
+ * Validates object payload emissions in tests
239
+ */
212
240
  export function expectSingleObjectCallAndClear(subFn, object, status) {
213
241
  expect(subFn.next).toHaveBeenCalledExactlyOnceWith(expect.objectContaining({
214
242
  object,
215
243
  status: status ?? expect.any(String)
216
244
  }));
245
+ const ret = subFn.next.mock.calls[0][0];
217
246
  subFn.next.mockClear();
247
+ return ret;
218
248
  }
219
249
  export async function waitForCall(subFn, times = 1) {
220
250
  if ("next" in subFn && "error" in subFn && "complete" in subFn) {
@@ -223,8 +253,16 @@ export async function waitForCall(subFn, times = 1) {
223
253
  try {
224
254
  await vi.waitFor(() => {
225
255
  expect(subFn).toHaveBeenCalledTimes(times);
256
+ }, {
257
+ interval: 0
226
258
  });
227
259
  } catch (e) {
260
+ // eslint-disable-next-line no-console
261
+ console.log(`We are going to fail waiting for ${times} calls because these are our calls: `, inspect(subFn.mock.calls, {
262
+ depth: 9,
263
+ colors: true,
264
+ compact: 2
265
+ }));
228
266
  // we don't need the error, it will retrigger on the next line
229
267
  // and that provides better behavior in the vitest vscode
230
268
  // plugin. This places the error in the test itself instead of
@@ -286,9 +324,16 @@ export function mockObserver() {
286
324
  complete: vitest.fn()
287
325
  };
288
326
  }
327
+
328
+ // todo: find uses of this and replace with direct call to mockObserver<ListPayload | undefined>
289
329
  export function mockListSubCallback() {
290
330
  return mockObserver();
291
331
  }
332
+
333
+ // todo: find uses of this and replace with direct call to mockObserver<SpecificLinkPayload | undefined>
334
+ export function mockLinkSubCallback() {
335
+ return mockObserver();
336
+ }
292
337
  export function cacheEntryContaining(x) {
293
338
  return {
294
339
  cacheKey: x.cacheKey ?? expect.any(Object),
@@ -318,6 +363,16 @@ export function listPayloadContaining(x) {
318
363
  lastUpdated: x.lastUpdated ?? expect.anything()
319
364
  };
320
365
  }
366
+ export function linkPayloadContaining(x) {
367
+ return {
368
+ fetchMore: x.fetchMore ?? expect.any(Function),
369
+ hasMore: x.hasMore ?? expect.any(Boolean),
370
+ resolvedList: x.resolvedList ?? expect.anything(),
371
+ isOptimistic: expect.any(Boolean),
372
+ status: x.status ?? expect.anything(),
373
+ lastUpdated: x.lastUpdated ?? expect.anything()
374
+ };
375
+ }
321
376
  export function applyCustomMatchers() {
322
377
  expect.extend({
323
378
  toBeGreaterThan: (r, e) => {
@@ -356,12 +411,17 @@ export function updateList(store, {
356
411
  optimisticId
357
412
  });
358
413
  }
359
- const query = store.getListQuery(type, where ?? {}, orderBy ?? {}, opts);
414
+ const query = store.lists.getQuery({
415
+ ...opts,
416
+ type,
417
+ where: where ?? {},
418
+ orderBy: orderBy ?? {}
419
+ });
360
420
  store.batch({
361
421
  optimisticId
362
422
  }, batch => {
363
423
  const objectCacheKeys = storeOsdkInstances(store, objects, batch);
364
- query._updateList(objectCacheKeys, false, "loaded", batch);
424
+ query._updateList(objectCacheKeys, "loaded", batch, false);
365
425
  });
366
426
  }
367
427
  export function getObject(store, type, pk) {
@@ -370,7 +430,10 @@ export function getObject(store, type, pk) {
370
430
  export function updateObject(store, value, {
371
431
  optimisticId
372
432
  } = {}) {
373
- const query = store.getObjectQuery(value.$apiName, value.$primaryKey);
433
+ const query = store.objects.getQuery({
434
+ apiName: value.$apiName,
435
+ pk: value.$primaryKey
436
+ });
374
437
  store.batch({
375
438
  optimisticId
376
439
  }, batch => {
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.js","names":["Chalk","pDefer","invariant","afterEach","beforeEach","expect","vi","vitest","additionalContext","storeOsdkInstances","chalk","mockLog","args","console","log","yellow","createTestLogger","bindings","options","colors","debug","cyan","bgCyan","info","green","bgGreen","trace","gray","bgGray","error","red","bgRed","warn","bgYellow","fatal","redBright","bgRedBright","createLogMethod","name","fn","hasData","length","obj","more","slice","msgPrefix","methodName","magenta","Object","keys","child","theseBindings","theseOptions","level","undefined","isLevelEnabled","createClientMockHelper","client","logger","mockImplementation","localLogger","Error","e","where","deadObjectSet","whereArgs","fetchPage","fetchArgs","fetchOne","baseUrl","ontologyRid","objectFactory","objectFactory2","ontologyProvider","getActionDefinition","getInterfaceDefinition","getObjectDefinition","getQueryDefinition","tokenProvider","objectSetFactory","fetch","clientCacheKey","requestContext","fetchMetadata","mockApplyActionOnce","d","mockReturnValueOnce","applyAction","x","promise","type","addedLinks","addedObjects","deletedObjects","deletedLinks","deletedLinksCount","deletedObjectsCount","editedObjectTypes","modifiedObjects","mockFetchOneOnce","expectedId","a","process","env","NODE_ENV","r","$primaryKey","JSON","stringify","mockObjectFactory2Once","mocked","mockFetchPageOnce","objectSet","fetchPageArgs","clause","createDefer","subscriptions","s","unsubscribe","push","expectSingleListCallAndClear","subFn","resolvedList","payloadOptions","isFakeTimers","runOnlyPendingTimers","next","toHaveBeenCalledExactlyOnceWith","listPayloadContaining","mockClear","expectSingleObjectCallAndClear","object","status","objectContaining","any","String","waitForCall","times","waitFor","toHaveBeenCalledTimes","expectNoMoreCalls","observer","not","toHaveBeenCalled","createSubscriptionHelper","mockSingleSubCallback","ret","mockObserver","assign","expectLoadingAndLoaded","q","toHaveBeenNthCalledWith","loading","loaded","complete","mockListSubCallback","cacheEntryContaining","cacheKey","value","toBeOneOf","anything","lastUpdated","nonOptionalValue","src","key","objectPayloadContaining","isOptimistic","Boolean","fetchMore","Function","hasMore","applyCustomMatchers","extend","toBeGreaterThan","pass","message","updateList","store","orderBy","objects","optimisticId","opts","dedupeInterval","query","getListQuery","batch","objectCacheKeys","_updateList","getObject","pk","getValue","getCacheKey","updateObject","getObjectQuery","$apiName","writeToStore"],"sources":["testUtils.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 type {\n ActionDefinition,\n ActionEditResponse,\n FetchPageArgs,\n InterfaceDefinition,\n Logger,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n OsdkBase,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport { Chalk } from \"chalk\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { Observer } from \"rxjs\";\nimport invariant from \"tiny-invariant\";\nimport type { Mock, MockedObject } from \"vitest\";\nimport { afterEach, beforeEach, expect, vi, vitest } from \"vitest\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport type { Client } from \"../../Client.js\";\nimport { additionalContext } from \"../../Client.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { OrderBy, Status, Unsubscribable } from \"../ObservableClient.js\";\nimport type { Entry } from \"./Layer.js\";\nimport type { ListQueryOptions } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { storeOsdkInstances } from \"./ObjectQuery.js\";\nimport type { OptimisticId } from \"./OptimisticId.js\";\nimport type { Store } from \"./Store.js\";\n\nconst chalk = new Chalk(); // new Chalk({ level: 3 });\n\nexport interface MockClientHelper {\n client: Mock<Client> & Client;\n\n mockApplyActionOnce: () => DeferredPromise<Partial<ActionEditResponse>>;\n\n mockFetchOneOnce: <Q extends ObjectTypeDefinition>(\n expectedId?: string | number | boolean,\n ) => DeferredPromise<\n Partial<\n Osdk.Instance<Q>\n >\n >;\n\n mockObjectFactory2Once: () => DeferredPromise<\n Array<\n | Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>\n | ObjectHolder\n >\n >;\n\n mockFetchPageOnce: <\n Q extends ObjectTypeDefinition,\n >(\n expected?: {\n where: WhereClause<any>;\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>;\n },\n ) => DeferredPromise<\n PageResult<Partial<Osdk.Instance<Q>>>\n >;\n}\n\nfunction mockLog(...args: any[]) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.yellow(\"mockClient\"),\n ...args,\n );\n}\n// interface Logger.LogFn {\n// (obj: unknown, msg?: string, ...args: any[]): void;\n// (msg: string, ...args: any[]): void;\n// }\n\nexport function createTestLogger(\n bindings: Record<string, any>,\n options?: { level?: string; msgPrefix?: string },\n): Logger {\n const colors = {\n debug: [chalk.cyan, chalk.bgCyan],\n info: [chalk.green, chalk.bgGreen],\n trace: [chalk.gray, chalk.bgGray],\n error: [chalk.red, chalk.bgRed],\n warn: [chalk.yellow, chalk.bgYellow],\n fatal: [chalk.redBright, chalk.bgRedBright],\n } as const;\n function createLogMethod(\n name: \"debug\" | \"error\" | \"info\" | \"warn\" | \"fatal\" | \"trace\",\n ) {\n return vi.fn<Logger.LogFn>(\n (\n ...args: [\n obj: unknown,\n ...args1: any[],\n ] | [\n ...args2: any[],\n ]\n ) => {\n const hasData = args.length > 0 && typeof args[0] !== \"string\";\n const obj: Record<string, unknown> = hasData ? args[0] as any : {};\n const more: any[] = hasData ? args.slice(1) : args.slice(0);\n\n // eslint-disable-next-line no-console\n console.log(\n `${colors[name][1](name)}${\n options?.msgPrefix ? \" \" + colors[name][0](options.msgPrefix) : \"\"\n }${obj?.methodName ? ` .${chalk.magenta(obj.methodName)}()` : \"\"}`,\n ...more,\n );\n if (bindings && Object.keys(bindings).length > 0) {\n // eslint-disable-next-line no-console\n console.log(bindings);\n }\n },\n ) as Logger.LogFn;\n }\n return {\n debug: createLogMethod(\"debug\"),\n error: createLogMethod(\"error\"),\n info: createLogMethod(\"info\"),\n warn: createLogMethod(\"warn\"),\n fatal: createLogMethod(\"fatal\"),\n child: vi.fn<Logger[\"child\"]>((theseBindings, theseOptions) =>\n createTestLogger({\n ...bindings,\n ...theseBindings,\n }, {\n level: (theseOptions ?? options)?.level,\n msgPrefix: options?.msgPrefix || theseOptions?.msgPrefix\n ? `${options?.msgPrefix ? `${options.msgPrefix} ` : \"\"}${\n theseOptions?.msgPrefix || \"\"\n }`\n : undefined,\n })\n ),\n trace: createLogMethod(\"trace\"),\n isLevelEnabled: vi.fn((args) => true),\n };\n}\n\nexport function createClientMockHelper(): MockClientHelper {\n const client = vitest.fn<typeof client>() as unknown as Mock<Client> & Client;\n\n const logger = createTestLogger({});\n\n // this is just a fallback for when there is nothing set so we can track whats up\n client.mockImplementation((...args: any[]) => {\n const localLogger = logger.child({}, { msgPrefix: \"fallback mock client\" });\n try {\n throw new Error(\"IN THE FALLBACK MOCK CLIENT IMPLEMENTATION\");\n } catch (e) {\n localLogger.error(\"Just for the stack trace\", e);\n }\n\n let where;\n const deadObjectSet = {\n where: (...whereArgs: any[]) => {\n localLogger.trace(\"where\", whereArgs);\n where = whereArgs;\n return deadObjectSet;\n },\n fetchPage: (...fetchArgs: any[]) => {\n localLogger.trace(\"fetchPage\", where!, fetchArgs);\n throw new Error(\"NO\");\n },\n fetchOne: (...fetchArgs: any[]) => {\n localLogger.trace(\"fetchOne\", fetchArgs);\n\n throw new Error(\"NO\");\n },\n };\n return deadObjectSet;\n });\n\n client[additionalContext] = {\n baseUrl: \"http://localhost:8080\",\n ontologyRid: \"ri.something\",\n objectFactory: vitest.fn(),\n objectFactory2: vitest.fn(),\n ontologyProvider: {\n getActionDefinition: vitest.fn(),\n getInterfaceDefinition: vitest.fn(),\n getObjectDefinition: vitest.fn(),\n getQueryDefinition: vitest.fn(),\n },\n tokenProvider: vitest.fn(),\n objectSetFactory: vitest.fn(),\n fetch: vitest.fn(),\n clientCacheKey: {} as any,\n requestContext: {},\n logger,\n };\n client.fetchMetadata = vitest.fn();\n\n function mockObjectFactory2Once() {\n const d = pDefer<\n (\n | Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>\n | ObjectHolder\n )[]\n >();\n vi.mocked(client[additionalContext].objectFactory2).mockReturnValueOnce(\n d.promise as Promise<ObjectHolder[]>,\n );\n return d;\n }\n\n function mockFetchPageOnce<\n X extends PageResult<\n Osdk.Instance<ObjectTypeDefinition>\n >,\n >(): DeferredPromise<X> {\n const d = pDefer<X>();\n\n const objectSet: ObjectSet<ObjectTypeDefinition> = {\n fetchPage: async (fetchPageArgs: FetchPageArgs<any>) => {\n mockLog(\"fetchPage\", fetchPageArgs);\n const r = await d.promise;\n return { ...r, $primaryKey: fetchPageArgs };\n },\n where: (clause) => {\n mockLog(\"where\", clause);\n return objectSet;\n },\n } as Pick<\n ObjectSet<ObjectTypeDefinition>,\n \"fetchPage\" | \"where\"\n > as ObjectSet<ObjectTypeDefinition>;\n\n client.mockReturnValueOnce(objectSet);\n return d;\n }\n\n function mockFetchOneOnce<\n X extends Partial<OsdkBase<any>>,\n >(expectedId?: string | number | boolean): DeferredPromise<X> {\n const d = pDefer<X>();\n\n client.mockReturnValueOnce(\n {\n fetchOne: async (a: FetchPageArgs<any>) => {\n mockLog(\"fetchOne\", a);\n invariant(\n expectedId === undefined || a === expectedId,\n \"expected id to match\",\n );\n const r = await d.promise;\n invariant(\n r.$primaryKey === a,\n `expected id to match. Got ${\n JSON.stringify(a)\n } but object to return was ${r.$primaryKey}`,\n );\n return r as Osdk.Instance<any>;\n },\n } as Pick<ObjectSet<ObjectTypeDefinition>, \"fetchOne\">,\n );\n return d;\n }\n\n function mockApplyActionOnce(): DeferredPromise<\n Partial<ActionEditResponse>\n > {\n const d = pDefer<Partial<ActionEditResponse>>();\n\n client.mockReturnValueOnce(\n {\n applyAction: async (_args): Promise<ActionEditResponse> => {\n const x = await d.promise;\n return {\n type: \"edits\",\n addedLinks: x.addedLinks ?? [],\n addedObjects: x.addedObjects ?? [],\n deletedObjects: x.deletedObjects ?? [],\n deletedLinks: x.deletedLinks ?? [],\n deletedLinksCount: x.deletedLinksCount ?? 0,\n deletedObjectsCount: x.deletedObjectsCount ?? 0,\n editedObjectTypes: x.editedObjectTypes ?? [],\n modifiedObjects: x.modifiedObjects ?? [],\n };\n },\n } as Pick<\n ActionSignatureFromDef<ActionDefinition>,\n \"applyAction\"\n >,\n );\n return d;\n }\n\n return {\n client,\n mockApplyActionOnce,\n mockFetchOneOnce,\n mockObjectFactory2Once,\n mockFetchPageOnce,\n };\n}\n\nexport function createDefer() {\n let subscriptions: Unsubscribable[];\n\n beforeEach(() => {\n subscriptions = [];\n });\n\n afterEach(() => {\n for (const s of subscriptions) {\n s.unsubscribe();\n }\n subscriptions = [];\n });\n\n return function defer(x: Unsubscribable): Unsubscribable {\n subscriptions.push(x);\n return x;\n };\n}\n\nexport function expectSingleListCallAndClear<T extends ObjectTypeDefinition>(\n subFn: MockedObject<Observer<ListPayload | undefined>>,\n resolvedList: ObjectHolder[] | Osdk.Instance<T>[],\n payloadOptions: Omit<Partial<ListPayload>, \"resolvedList\"> = {},\n): void {\n if (vitest.isFakeTimers()) {\n vitest.runOnlyPendingTimers();\n }\n expect(subFn.next).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n ...payloadOptions,\n resolvedList: resolvedList as unknown as Array<\n ObjectHolder\n >,\n }),\n );\n subFn.next.mockClear();\n}\n\nexport function expectSingleObjectCallAndClear<T extends ObjectTypeDefinition>(\n subFn: MockedObject<Observer<ObjectPayload | undefined>>,\n object: Osdk.Instance<T> | undefined,\n status?: Status,\n): void {\n expect(subFn.next).toHaveBeenCalledExactlyOnceWith(\n expect.objectContaining({\n object,\n status: status ?? expect.any(String),\n }),\n );\n subFn.next.mockClear();\n}\n\nexport async function waitForCall(\n subFn: Mock<(e: any) => void> | MockedObject<Observer<any>>,\n times: number = 1,\n): Promise<void> {\n if (\"next\" in subFn && \"error\" in subFn && \"complete\" in subFn) {\n subFn = subFn.next;\n }\n try {\n await vi.waitFor(() => {\n expect(subFn).toHaveBeenCalledTimes(times);\n });\n } catch (e) {\n // we don't need the error, it will retrigger on the next line\n // and that provides better behavior in the vitest vscode\n // plugin. This places the error in the test itself instead of\n // only in this file\n }\n expect(subFn).toHaveBeenCalledTimes(times);\n}\n\nexport function expectNoMoreCalls(\n observer: MockedObject<\n Observer<any>\n >,\n): void {\n expect(observer.next).not.toHaveBeenCalled();\n expect(observer.error).not.toHaveBeenCalled();\n}\n\nfunction createSubscriptionHelper() {\n}\n\nexport function mockSingleSubCallback():\n & MockedObject<\n Observer<ObjectPayload | undefined>\n >\n & {\n // expectLoaded: (value: unknown) => Promise<void>;\n // expectLoading: (value: unknown) => Promise<void>;\n expectLoadingAndLoaded: (q: {\n loading?: unknown;\n loaded: unknown;\n }) => Promise<void>;\n }\n{\n const ret = mockObserver<ObjectPayload | undefined>();\n\n // async function expectLoaded(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenLastCalledWith(\n // cacheEntryContaining({\n // value,\n // status: \"loaded\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n // async function expectLoading(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenCalledExactlyOnceWith(\n // cacheEntryContaining({\n // value,\n // status: \"loading\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n return Object.assign(ret, {\n // expectLoaded,\n // expectLoading,\n expectLoadingAndLoaded: async (\n q: { loading?: unknown; loaded: unknown },\n ) => {\n await waitForCall(ret.next, 2);\n\n // as long as we get the loaded call we are happy\n expect(ret.next).toHaveBeenNthCalledWith(\n 1,\n q.loading,\n );\n expect(ret.next).toHaveBeenNthCalledWith(\n 2,\n q.loaded,\n );\n expect(ret.next).toHaveBeenCalledTimes(2);\n ret.next.mockClear();\n },\n });\n}\n\nexport function mockObserver<T>(): MockedObject<Observer<T>> {\n return {\n next: vitest.fn(),\n\n // error: vitest.fn((x) => console.error(x)),\n error: vitest.fn(),\n complete: vitest.fn(),\n };\n}\n\nexport function mockListSubCallback(): MockedObject<\n Observer<ListPayload | undefined>\n> {\n return mockObserver<ListPayload | undefined>();\n}\n\nexport function cacheEntryContaining(x: Partial<Entry<any>>): Entry<any> {\n return {\n cacheKey: x.cacheKey ?? expect.any(Object),\n value: \"value\" in x\n ? x.value\n : expect.toBeOneOf([expect.anything(), undefined]),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nfunction nonOptionalValue<T extends object, K extends keyof T>(\n src: T,\n key: K,\n): NonNullable<T[K]> {\n return key in src\n ? src[key]\n : expect.toBeOneOf([expect.anything(), undefined]);\n}\n\nexport function objectPayloadContaining(\n x: Partial<ObjectPayload>,\n): ObjectPayload {\n return {\n object: nonOptionalValue(x, \"object\"),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function listPayloadContaining(\n x: Partial<ListPayload>,\n): ListPayload {\n return {\n fetchMore: x.fetchMore ?? expect.any(Function),\n hasMore: x.hasMore ?? expect.any(Boolean),\n resolvedList: x.resolvedList ?? expect.anything(),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function applyCustomMatchers(): void {\n expect.extend({\n toBeGreaterThan: (r: number, e: number) => {\n return {\n pass: r > e,\n message: () => `expected ${r} to be greater than ${e} (lastUpdated)`,\n };\n },\n });\n}\n\ninterface CustomMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ninterface CustomAsymmetricMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ndeclare module \"vitest\" {\n interface Assertion<T = any> extends CustomMatchers<T> {}\n interface AsymmetricMatchersContaining extends CustomAsymmetricMatchers {}\n}\n\n/**\n * Updates the internal state of a list and will create a new internal query if needed.\n *\n * Helper method only for tests right now. May be removed later.\n *\n * @param apiName\n * @param where\n * @param orderBy\n * @param objects\n * @param param4\n * @param opts\n */\nexport function updateList<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n>(\n store: Store,\n {\n type,\n where,\n orderBy,\n }: {\n type: Pick<T, \"apiName\" | \"type\">;\n where: WhereClause<T>;\n orderBy: OrderBy<T>;\n },\n objects: ObjectHolder[] | Osdk.Instance<T>[],\n { optimisticId }: { optimisticId?: OptimisticId } = {},\n opts: ListQueryOptions = { dedupeInterval: 0 },\n): void {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.child({ methodName: \"updateList\" }).info(\n \"\",\n { optimisticId },\n );\n }\n\n const query = store.getListQuery(\n type,\n where ?? {},\n orderBy ?? {},\n opts,\n );\n\n store.batch({ optimisticId }, (batch) => {\n const objectCacheKeys = storeOsdkInstances(store, objects, batch);\n query._updateList(objectCacheKeys, false, \"loaded\", batch);\n });\n}\n\nexport function getObject(\n store: Store,\n type: string,\n pk: number,\n): ObjectHolder | undefined {\n return store.getValue(store.getCacheKey<ObjectCacheKey>(\"object\", type, pk))\n ?.value;\n}\n\nexport function updateObject<T extends ObjectOrInterfaceDefinition>(\n store: Store,\n value: Osdk.Instance<T>,\n { optimisticId }: { optimisticId?: OptimisticId } = {},\n): Osdk.Instance<T> {\n const query = store.getObjectQuery(value.$apiName, value.$primaryKey);\n\n store.batch({ optimisticId }, (batch) => {\n return query.writeToStore(\n value as unknown as ObjectHolder<typeof value>,\n \"loaded\",\n batch,\n );\n });\n\n return value;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"testUtils.js","names":["Chalk","inspect","pDefer","invariant","afterEach","beforeEach","expect","vi","vitest","additionalContext","storeOsdkInstances","chalk","mockLog","args","console","log","yellow","createTestLogger","bindings","options","colors","debug","cyan","bgCyan","info","green","bgGreen","trace","gray","bgGray","error","red","bgRed","warn","bgYellow","fatal","redBright","bgRedBright","createLogMethod","name","fn","hasData","length","obj","more","slice","msgPrefix","methodName","magenta","Object","keys","child","theseBindings","theseOptions","level","undefined","isLevelEnabled","createClientMockHelper","client","logger","mockImplementation","localLogger","Error","e","where","deadObjectSet","whereArgs","fetchPage","fetchArgs","fetchOne","baseUrl","ontologyRid","objectFactory","objectFactory2","ontologyProvider","getActionDefinition","getInterfaceDefinition","getObjectDefinition","getQueryDefinition","tokenProvider","objectSetFactory","fetch","clientCacheKey","requestContext","fetchMetadata","mockApplyActionOnce","d","mockReturnValueOnce","applyAction","x","promise","type","addedLinks","addedObjects","deletedObjects","deletedLinks","deletedLinksCount","deletedObjectsCount","editedObjectTypes","modifiedObjects","mockFetchOneOnce","expectedId","a","process","env","NODE_ENV","r","$primaryKey","JSON","stringify","mockObjectFactory2Once","mocked","mockFetchPageOnce","objectSet","fetchPageArgs","clause","createDefer","subscriptions","s","unsubscribe","push","expectSingleLinkCallAndClear","subFn","resolvedList","payloadOptions","isFakeTimers","runOnlyPendingTimers","next","toHaveBeenCalledExactlyOnceWith","linkPayloadContaining","ret","mock","calls","mockClear","expectSingleListCallAndClear","listPayloadContaining","expectSingleObjectCallAndClear","object","status","objectContaining","any","String","waitForCall","times","waitFor","toHaveBeenCalledTimes","interval","depth","compact","expectNoMoreCalls","observer","not","toHaveBeenCalled","createSubscriptionHelper","mockSingleSubCallback","mockObserver","assign","expectLoadingAndLoaded","q","toHaveBeenNthCalledWith","loading","loaded","complete","mockListSubCallback","mockLinkSubCallback","cacheEntryContaining","cacheKey","value","toBeOneOf","anything","lastUpdated","nonOptionalValue","src","key","objectPayloadContaining","isOptimistic","Boolean","fetchMore","Function","hasMore","applyCustomMatchers","extend","toBeGreaterThan","pass","message","updateList","store","orderBy","objects","optimisticId","opts","dedupeInterval","query","lists","getQuery","batch","objectCacheKeys","_updateList","getObject","pk","getValue","getCacheKey","updateObject","apiName","$apiName","writeToStore"],"sources":["testUtils.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 type {\n ActionDefinition,\n ActionEditResponse,\n FetchPageArgs,\n InterfaceDefinition,\n Logger,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n OsdkBase,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport { Chalk } from \"chalk\";\nimport { inspect } from \"node:util\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { Observer } from \"rxjs\";\nimport invariant from \"tiny-invariant\";\nimport type { Mock, MockedObject } from \"vitest\";\nimport { afterEach, beforeEach, expect, vi, vitest } from \"vitest\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport type { Client } from \"../../Client.js\";\nimport { additionalContext } from \"../../Client.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { SpecificLinkPayload } from \"../LinkPayload.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { OrderBy, Status } from \"../ObservableClient/common.js\";\nimport type { Unsubscribable } from \"../Unsubscribable.js\";\nimport type { Entry } from \"./Layer.js\";\nimport type { ListQueryOptions } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { storeOsdkInstances } from \"./ObjectQuery.js\";\nimport type { OptimisticId } from \"./OptimisticId.js\";\nimport type { Store } from \"./Store.js\";\n\nconst chalk = new Chalk(); // new Chalk({ level: 3 });\n\nexport interface MockClientHelper {\n client: Mock<Client> & Client;\n\n mockApplyActionOnce: () => DeferredPromise<Partial<ActionEditResponse>>;\n\n mockFetchOneOnce: <Q extends ObjectTypeDefinition>(\n expectedId?: string | number | boolean,\n ) => DeferredPromise<\n Partial<\n Osdk.Instance<Q>\n >\n >;\n\n mockObjectFactory2Once: () => DeferredPromise<\n Array<\n | Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>\n | ObjectHolder\n >\n >;\n\n mockFetchPageOnce: <\n Q extends ObjectTypeDefinition,\n >(\n expected?: {\n where: WhereClause<any>;\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>;\n },\n ) => DeferredPromise<\n PageResult<Partial<Osdk.Instance<Q>>>\n >;\n}\n\nfunction mockLog(...args: any[]) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.yellow(\"mockClient\"),\n ...args,\n );\n}\n\n/**\n * Testing utilities for ObservableClient implementation.\n * - Mock creation helpers for client, observers, and callbacks\n * - Expectation utilities for validating payloads\n * - Tools for managing test lifecycle and cleanup\n * - Creates a colorized logger for test environments\n */\nexport function createTestLogger(\n bindings: Record<string, any>,\n options?: { level?: string; msgPrefix?: string },\n): Logger {\n const colors = {\n debug: [chalk.cyan, chalk.bgCyan],\n info: [chalk.green, chalk.bgGreen],\n trace: [chalk.gray, chalk.bgGray],\n error: [chalk.red, chalk.bgRed],\n warn: [chalk.yellow, chalk.bgYellow],\n fatal: [chalk.redBright, chalk.bgRedBright],\n } as const;\n function createLogMethod(\n name: \"debug\" | \"error\" | \"info\" | \"warn\" | \"fatal\" | \"trace\",\n ) {\n return vi.fn<Logger.LogFn>(\n (\n ...args: [\n obj: unknown,\n ...args1: any[],\n ] | [\n ...args2: any[],\n ]\n ) => {\n const hasData = args.length > 0 && typeof args[0] !== \"string\";\n const obj: Record<string, unknown> = hasData ? args[0] as any : {};\n const more: any[] = hasData ? args.slice(1) : args.slice(0);\n\n // eslint-disable-next-line no-console\n console.log(\n `${colors[name][1](name)}${\n options?.msgPrefix ? \" \" + colors[name][0](options.msgPrefix) : \"\"\n }${obj?.methodName ? ` .${chalk.magenta(obj.methodName)}()` : \"\"}`,\n ...more,\n );\n if (bindings && Object.keys(bindings).length > 0) {\n // eslint-disable-next-line no-console\n console.log(bindings);\n }\n },\n ) as Logger.LogFn;\n }\n return {\n debug: createLogMethod(\"debug\"),\n error: createLogMethod(\"error\"),\n info: createLogMethod(\"info\"),\n warn: createLogMethod(\"warn\"),\n fatal: createLogMethod(\"fatal\"),\n child: vi.fn<Logger[\"child\"]>((theseBindings, theseOptions) =>\n createTestLogger({\n ...bindings,\n ...theseBindings,\n }, {\n level: (theseOptions ?? options)?.level,\n msgPrefix: options?.msgPrefix || theseOptions?.msgPrefix\n ? `${options?.msgPrefix ? `${options.msgPrefix} ` : \"\"}${\n theseOptions?.msgPrefix || \"\"\n }`\n : undefined,\n })\n ),\n trace: createLogMethod(\"trace\"),\n isLevelEnabled: vi.fn((args) => true),\n };\n}\n\n/**\n * Creates mocked client helpers with deferred promise control\n */\nexport function createClientMockHelper(): MockClientHelper {\n const client = vitest.fn<typeof client>() as unknown as Mock<Client> & Client;\n\n const logger = createTestLogger({});\n\n // this is just a fallback for when there is nothing set so we can track whats up\n client.mockImplementation((...args: any[]) => {\n const localLogger = logger.child({}, { msgPrefix: \"fallback mock client\" });\n try {\n throw new Error(\"IN THE FALLBACK MOCK CLIENT IMPLEMENTATION\");\n } catch (e) {\n localLogger.error(\"Just for the stack trace\", e);\n }\n\n let where;\n const deadObjectSet = {\n where: (...whereArgs: any[]) => {\n localLogger.trace(\"where\", whereArgs);\n where = whereArgs;\n return deadObjectSet;\n },\n fetchPage: (...fetchArgs: any[]) => {\n localLogger.trace(\"fetchPage\", where!, fetchArgs);\n throw new Error(\"NO\");\n },\n fetchOne: (...fetchArgs: any[]) => {\n localLogger.trace(\"fetchOne\", fetchArgs);\n\n throw new Error(\"NO\");\n },\n };\n return deadObjectSet;\n });\n\n client[additionalContext] = {\n baseUrl: \"http://localhost:8080\",\n ontologyRid: \"ri.something\",\n objectFactory: vitest.fn(),\n objectFactory2: vitest.fn(),\n ontologyProvider: {\n getActionDefinition: vitest.fn(),\n getInterfaceDefinition: vitest.fn(),\n getObjectDefinition: vitest.fn(),\n getQueryDefinition: vitest.fn(),\n },\n tokenProvider: vitest.fn(),\n objectSetFactory: vitest.fn(),\n fetch: vitest.fn(),\n clientCacheKey: {} as any,\n requestContext: {},\n logger,\n };\n client.fetchMetadata = vitest.fn();\n\n function mockObjectFactory2Once() {\n const d = pDefer<\n (\n | Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>\n | ObjectHolder\n )[]\n >();\n vi.mocked(client[additionalContext].objectFactory2).mockReturnValueOnce(\n d.promise as Promise<ObjectHolder[]>,\n );\n return d;\n }\n\n function mockFetchPageOnce<\n X extends PageResult<\n Osdk.Instance<ObjectTypeDefinition>\n >,\n >(): DeferredPromise<X> {\n const d = pDefer<X>();\n\n const objectSet: ObjectSet<ObjectTypeDefinition> = {\n fetchPage: async (fetchPageArgs: FetchPageArgs<any>) => {\n mockLog(\"fetchPage\", fetchPageArgs);\n const r = await d.promise;\n return { ...r, $primaryKey: fetchPageArgs };\n },\n where: (clause) => {\n mockLog(\"where\", clause);\n return objectSet;\n },\n } as Pick<\n ObjectSet<ObjectTypeDefinition>,\n \"fetchPage\" | \"where\"\n > as ObjectSet<ObjectTypeDefinition>;\n\n client.mockReturnValueOnce(objectSet);\n return d;\n }\n\n function mockFetchOneOnce<\n X extends Partial<OsdkBase<any>>,\n >(expectedId?: string | number | boolean): DeferredPromise<X> {\n const d = pDefer<X>();\n\n client.mockReturnValueOnce(\n {\n fetchOne: async (a: FetchPageArgs<any>) => {\n mockLog(\"fetchOne\", a);\n invariant(\n expectedId === undefined || a === expectedId,\n \"expected id to match\",\n );\n const r = await d.promise;\n invariant(\n r.$primaryKey === a,\n `expected id to match. Got ${\n JSON.stringify(a)\n } but object to return was ${r.$primaryKey}`,\n );\n return r as Osdk.Instance<any>;\n },\n } as Pick<ObjectSet<ObjectTypeDefinition>, \"fetchOne\">,\n );\n return d;\n }\n\n function mockApplyActionOnce(): DeferredPromise<\n Partial<ActionEditResponse>\n > {\n const d = pDefer<Partial<ActionEditResponse>>();\n\n client.mockReturnValueOnce(\n {\n applyAction: async (_args): Promise<ActionEditResponse> => {\n const x = await d.promise;\n return {\n type: \"edits\",\n addedLinks: x.addedLinks ?? [],\n addedObjects: x.addedObjects ?? [],\n deletedObjects: x.deletedObjects ?? [],\n deletedLinks: x.deletedLinks ?? [],\n deletedLinksCount: x.deletedLinksCount ?? 0,\n deletedObjectsCount: x.deletedObjectsCount ?? 0,\n editedObjectTypes: x.editedObjectTypes ?? [],\n modifiedObjects: x.modifiedObjects ?? [],\n };\n },\n } as Pick<\n ActionSignatureFromDef<ActionDefinition>,\n \"applyAction\"\n >,\n );\n return d;\n }\n\n return {\n client,\n mockApplyActionOnce,\n mockFetchOneOnce,\n mockObjectFactory2Once,\n mockFetchPageOnce,\n };\n}\n\n/**\n * Manages test subscriptions with automatic cleanup\n */\nexport function createDefer() {\n let subscriptions: Unsubscribable[];\n\n beforeEach(() => {\n subscriptions = [];\n });\n\n afterEach(() => {\n for (const s of subscriptions) {\n s.unsubscribe();\n }\n subscriptions = [];\n });\n\n return function defer(x: Unsubscribable): Unsubscribable {\n subscriptions.push(x);\n return x;\n };\n}\n\nexport function expectSingleLinkCallAndClear<T extends ObjectTypeDefinition>(\n subFn: MockedObject<Observer<SpecificLinkPayload | undefined>>,\n resolvedList: ObjectHolder[] | Osdk.Instance<T>[] | undefined,\n payloadOptions: Omit<Partial<SpecificLinkPayload>, \"resolvedList\"> = {},\n): SpecificLinkPayload | undefined {\n if (vitest.isFakeTimers()) {\n vitest.runOnlyPendingTimers();\n }\n expect(subFn.next).toHaveBeenCalledExactlyOnceWith(\n linkPayloadContaining({\n ...payloadOptions,\n resolvedList: resolvedList as unknown as Array<\n ObjectHolder\n >,\n }),\n );\n\n const ret = subFn.next.mock.calls[0][0];\n subFn.next.mockClear();\n return ret;\n}\n\nexport function expectSingleListCallAndClear<T extends ObjectTypeDefinition>(\n subFn: MockedObject<Observer<ListPayload | undefined>>,\n resolvedList: ObjectHolder[] | Osdk.Instance<T>[],\n payloadOptions: Omit<Partial<ListPayload>, \"resolvedList\"> = {},\n): void {\n if (vitest.isFakeTimers()) {\n vitest.runOnlyPendingTimers();\n }\n expect(subFn.next).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n ...payloadOptions,\n resolvedList: resolvedList as unknown as Array<\n ObjectHolder\n >,\n }),\n );\n subFn.next.mockClear();\n}\n\n/**\n * Validates object payload emissions in tests\n */\nexport function expectSingleObjectCallAndClear<T extends ObjectTypeDefinition>(\n subFn: MockedObject<Observer<ObjectPayload | undefined>>,\n object: Osdk.Instance<T> | undefined,\n status?: Status,\n): ObjectPayload | undefined {\n expect(subFn.next).toHaveBeenCalledExactlyOnceWith(\n expect.objectContaining({\n object,\n status: status ?? expect.any(String),\n }),\n );\n\n const ret = subFn.next.mock.calls[0][0];\n subFn.next.mockClear();\n return ret;\n}\n\nexport async function waitForCall(\n subFn: Mock<(e: any) => void> | MockedObject<Observer<any>>,\n times: number = 1,\n): Promise<void> {\n if (\"next\" in subFn && \"error\" in subFn && \"complete\" in subFn) {\n subFn = subFn.next;\n }\n try {\n await vi.waitFor(() => {\n expect(subFn).toHaveBeenCalledTimes(times);\n }, {\n interval: 0,\n });\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\n `We are going to fail waiting for ${times} calls because these are our calls: `,\n inspect(subFn.mock.calls, {\n depth: 9,\n colors: true,\n compact: 2,\n }),\n );\n // we don't need the error, it will retrigger on the next line\n // and that provides better behavior in the vitest vscode\n // plugin. This places the error in the test itself instead of\n // only in this file\n }\n expect(subFn).toHaveBeenCalledTimes(times);\n}\n\nexport function expectNoMoreCalls(\n observer: MockedObject<\n Observer<any>\n >,\n): void {\n expect(observer.next).not.toHaveBeenCalled();\n expect(observer.error).not.toHaveBeenCalled();\n}\n\nfunction createSubscriptionHelper() {\n}\n\nexport type MockedSingleSubCallback =\n & MockedObject<Observer<ObjectPayload | undefined>>\n & {\n // expectLoaded: (value: unknown) => Promise<void>;\n // expectLoading: (value: unknown) => Promise<void>;\n expectLoadingAndLoaded: (q: {\n loading?: unknown;\n loaded: unknown;\n }) => Promise<void>;\n };\n\nexport function mockSingleSubCallback(): MockedSingleSubCallback {\n const ret = mockObserver<ObjectPayload | undefined>();\n\n // async function expectLoaded(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenLastCalledWith(\n // cacheEntryContaining({\n // value,\n // status: \"loaded\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n // async function expectLoading(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenCalledExactlyOnceWith(\n // cacheEntryContaining({\n // value,\n // status: \"loading\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n return Object.assign(ret, {\n // expectLoaded,\n // expectLoading,\n expectLoadingAndLoaded: async (\n q: { loading?: unknown; loaded: unknown },\n ) => {\n await waitForCall(ret.next, 2);\n\n // as long as we get the loaded call we are happy\n expect(ret.next).toHaveBeenNthCalledWith(\n 1,\n q.loading,\n );\n expect(ret.next).toHaveBeenNthCalledWith(\n 2,\n q.loaded,\n );\n expect(ret.next).toHaveBeenCalledTimes(2);\n ret.next.mockClear();\n },\n });\n}\n\nexport function mockObserver<T>(): MockedObject<Observer<T>> {\n return {\n next: vitest.fn(),\n\n // error: vitest.fn((x) => console.error(x)),\n error: vitest.fn(),\n complete: vitest.fn(),\n };\n}\n\n// todo: find uses of this and replace with direct call to mockObserver<ListPayload | undefined>\nexport function mockListSubCallback(): MockedObject<\n Observer<ListPayload | undefined>\n> {\n return mockObserver<ListPayload | undefined>();\n}\n\n// todo: find uses of this and replace with direct call to mockObserver<SpecificLinkPayload | undefined>\nexport function mockLinkSubCallback(): MockedObject<\n Observer<SpecificLinkPayload | undefined>\n> {\n return mockObserver<SpecificLinkPayload | undefined>();\n}\n\nexport function cacheEntryContaining(x: Partial<Entry<any>>): Entry<any> {\n return {\n cacheKey: x.cacheKey ?? expect.any(Object),\n value: \"value\" in x\n ? x.value\n : expect.toBeOneOf([expect.anything(), undefined]),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nfunction nonOptionalValue<T extends object, K extends keyof T>(\n src: T,\n key: K,\n): NonNullable<T[K]> {\n return key in src\n ? src[key]\n : expect.toBeOneOf([expect.anything(), undefined]);\n}\n\nexport function objectPayloadContaining(\n x: Partial<ObjectPayload>,\n): ObjectPayload {\n return {\n object: nonOptionalValue(x, \"object\"),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function listPayloadContaining(\n x: Partial<ListPayload>,\n): ListPayload {\n return {\n fetchMore: x.fetchMore ?? expect.any(Function),\n hasMore: x.hasMore ?? expect.any(Boolean),\n resolvedList: x.resolvedList ?? expect.anything(),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function linkPayloadContaining(\n x: Partial<SpecificLinkPayload>,\n): SpecificLinkPayload {\n return {\n fetchMore: x.fetchMore ?? expect.any(Function),\n hasMore: x.hasMore ?? expect.any(Boolean),\n resolvedList: x.resolvedList ?? expect.anything(),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function applyCustomMatchers(): void {\n expect.extend({\n toBeGreaterThan: (r: number, e: number) => {\n return {\n pass: r > e,\n message: () => `expected ${r} to be greater than ${e} (lastUpdated)`,\n };\n },\n });\n}\n\ninterface CustomMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ninterface CustomAsymmetricMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ndeclare module \"vitest\" {\n interface Assertion<T = any> extends CustomMatchers<T> {}\n interface AsymmetricMatchersContaining extends CustomAsymmetricMatchers {}\n}\n\n/**\n * Updates the internal state of a list and will create a new internal query if needed.\n *\n * Helper method only for tests right now. May be removed later.\n *\n * @param apiName\n * @param where\n * @param orderBy\n * @param objects\n * @param param4\n * @param opts\n */\nexport function updateList<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n>(\n store: Store,\n {\n type,\n where,\n orderBy,\n }: {\n type: Pick<T, \"apiName\" | \"type\">;\n where: WhereClause<T>;\n orderBy: OrderBy<T>;\n },\n objects: ObjectHolder[] | Osdk.Instance<T>[],\n { optimisticId }: { optimisticId?: OptimisticId } = {},\n opts: ListQueryOptions = { dedupeInterval: 0 },\n): void {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.child({ methodName: \"updateList\" }).info(\n \"\",\n { optimisticId },\n );\n }\n\n const query = store.lists.getQuery({\n ...opts,\n type,\n where: where ?? {},\n orderBy: orderBy ?? {},\n });\n\n store.batch({ optimisticId }, (batch) => {\n const objectCacheKeys = storeOsdkInstances(store, objects, batch);\n query._updateList(objectCacheKeys, \"loaded\", batch, false);\n });\n}\n\nexport function getObject(\n store: Store,\n type: string,\n pk: number,\n): ObjectHolder | undefined {\n return store.getValue(store.getCacheKey<ObjectCacheKey>(\"object\", type, pk))\n ?.value;\n}\n\nexport function updateObject<T extends ObjectOrInterfaceDefinition>(\n store: Store,\n value: Osdk.Instance<T>,\n { optimisticId }: { optimisticId?: OptimisticId } = {},\n): Osdk.Instance<T> {\n const query = store.objects.getQuery({\n apiName: value.$apiName,\n pk: value.$primaryKey,\n });\n\n store.batch({ optimisticId }, (batch) => {\n return query.writeToStore(\n value as unknown as ObjectHolder<typeof value>,\n \"loaded\",\n batch,\n );\n });\n\n return value;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"unstable-do-not-use.js","names":["augment","createObservableClient","getMetaTagContent","getOsdkConfig","createClientWithTransaction"],"sources":["unstable-do-not-use.ts"],"sourcesContent":["/*\n * Copyright 2023 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\nexport { augment } from \"../object/fetchPage.js\";\n\n// THIS IS NOT THE FINAL NAME DO NOT SHIP LIKE THIS\nexport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nexport { createObservableClient } from \"../observable/ObservableClient.js\";\nexport type {\n ObservableClient,\n ObserveObjectArgs,\n ObserveObjectsArgs,\n Observer,\n Unsubscribable,\n} from \"../observable/ObservableClient.js\";\nexport type { OsdkConfig } from \"../public-utils/osdkConfig.js\";\nexport {\n getMetaTagContent,\n getOsdkConfig,\n} from \"../public-utils/osdkConfig.js\";\n\nexport { createClientWithTransaction } from \"../createClient.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,wBAAwB;;AAEhD;;AAEA,SAASC,sBAAsB,QAAQ,mCAAmC;AAS1E,SACEC,iBAAiB,EACjBC,aAAa,QACR,+BAA+B;AAEtC,SAASC,2BAA2B,QAAQ,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"unstable-do-not-use.js","names":["augment","createObservableClient","getMetaTagContent","getOsdkConfig","createClientWithTransaction"],"sources":["unstable-do-not-use.ts"],"sourcesContent":["/*\n * Copyright 2023 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\nexport { augment } from \"../object/fetchPage.js\";\n\n// THIS IS NOT THE FINAL NAME DO NOT SHIP LIKE THIS\nexport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nexport { createObservableClient } from \"../observable/ObservableClient.js\";\nexport type {\n ObservableClient,\n ObserveObjectArgs,\n ObserveObjectsArgs,\n Unsubscribable,\n} from \"../observable/ObservableClient.js\";\nexport type { Observer } from \"../observable/ObservableClient/common.js\";\nexport type { ObserveLinks } from \"../observable/ObservableClient/ObserveLink.js\";\nexport {\n getMetaTagContent,\n getOsdkConfig,\n} from \"../public-utils/osdkConfig.js\";\nexport type { OsdkConfig } from \"../public-utils/osdkConfig.js\";\n\nexport { createClientWithTransaction } from \"../createClient.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,wBAAwB;;AAEhD;;AAEA,SAASC,sBAAsB,QAAQ,mCAAmC;AAS1E,SACEC,iBAAiB,EACjBC,aAAa,QACR,+BAA+B;AAGtC,SAASC,2BAA2B,QAAQ,oBAAoB","ignoreList":[]}
@@ -14,6 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- export const USER_AGENT = `osdk-client/${"2.5.0-beta.1"}`;
18
- export const OBSERVABLE_USER_AGENT = `osdk-observable-client/${"2.5.0-beta.1"}`;
17
+ export const USER_AGENT = `osdk-client/${"2.5.0-beta.2"}`;
18
+ export const OBSERVABLE_USER_AGENT = `osdk-observable-client/${"2.5.0-beta.2"}`;
19
19
  //# sourceMappingURL=UserAgent.js.map
@@ -23,7 +23,7 @@ export async function* parseStreamedResponse(asyncIterable) {
23
23
  let parsedStart = false;
24
24
  let prevChunks = [];
25
25
  let openBracesCount = 0;
26
- for await (let chunk of asyncIterable) {
26
+ for await (const chunk of asyncIterable) {
27
27
  // on the first chunk, skip the expected START_TOKEN if we see it
28
28
  let i = 0;
29
29
  if (!parsedStart) {
@@ -1 +1 @@
1
- {"version":3,"file":"streamutils.js","names":["START_TOKEN","Uint8Array","OBJECT_OPEN_CHAR_CODE","OBJECT_CLOSE_CHAR_CODE","parseStreamedResponse","asyncIterable","utf8decoder","TextDecoder","parsedStart","prevChunks","openBracesCount","chunk","i","startsWith","length","j","c","combineAndParse","subarray","push","a","b","prev","curr","str","decode","stream","JSON","parse","iterateReadableStream","readableStream","res","read","done","value"],"sources":["streamutils.ts"],"sourcesContent":["/*\n * Copyright 2023 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\nconst START_TOKEN = new Uint8Array([123, 34, 100, 97, 116, 97, 34, 58, 91]); // `{\"data\":[`\nconst OBJECT_OPEN_CHAR_CODE = 123; // '{'\nconst OBJECT_CLOSE_CHAR_CODE = 125; // '}'\n\nexport async function* parseStreamedResponse(\n asyncIterable: AsyncIterable<Uint8Array>,\n): AsyncGenerator<any, void, unknown> {\n const utf8decoder = new TextDecoder(\"utf-8\");\n\n let parsedStart = false;\n let prevChunks: Uint8Array[] = [];\n let openBracesCount = 0;\n\n for await (let chunk of asyncIterable) {\n // on the first chunk, skip the expected START_TOKEN if we see it\n let i = 0;\n if (!parsedStart) {\n parsedStart = true;\n if (startsWith(chunk, START_TOKEN)) {\n i = START_TOKEN.length;\n }\n }\n\n for (; i < chunk.length; i++) {\n // if we aren't currently parsing an object, skip until we find the next object start\n while (\n openBracesCount === 0 && chunk[i] !== OBJECT_OPEN_CHAR_CODE\n && i < chunk.length\n ) {\n i++;\n }\n\n // iterate through the chunk looking for the end of the current top level object\n let j = i;\n for (; j < chunk.length; j++) {\n const c = chunk[j];\n if (c === OBJECT_OPEN_CHAR_CODE) {\n openBracesCount++;\n } else if (c === OBJECT_CLOSE_CHAR_CODE) {\n openBracesCount--;\n\n // found a complete top level object, emit it\n if (0 === openBracesCount) {\n yield combineAndParse(\n utf8decoder,\n prevChunks,\n chunk.subarray(i, j + 1),\n );\n\n // if there was a prevChunk, we've consumed it now\n prevChunks = [];\n\n // advance the start index to the final '}' of the current object,\n // which lets us start seeking the beginning of the next object\n i = j;\n break;\n }\n }\n }\n\n // if we reached the end of our chunk before finding the end of the object\n // store off the relevant remainder of our current chunk and go grab the next one\n if (j === chunk.length) {\n prevChunks.push(chunk.subarray(i));\n break;\n }\n }\n }\n}\n\nfunction startsWith(a: Uint8Array, b: Uint8Array) {\n if (a.length < b.length) {\n return false;\n }\n\n for (let i = 0; i < b.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction combineAndParse(\n utf8decoder: TextDecoder,\n prev: Uint8Array[],\n curr: Uint8Array,\n) {\n let str = \"\";\n for (const chunk of prev) {\n str += utf8decoder.decode(chunk, { stream: true });\n }\n str += utf8decoder.decode(curr);\n\n return JSON.parse(str);\n}\n\nexport async function* iterateReadableStream(\n readableStream: ReadableStreamDefaultReader<Uint8Array>,\n): AsyncGenerator<Uint8Array, void, unknown> {\n let res = await readableStream.read();\n while (!res.done) {\n yield res.value;\n res = await readableStream.read();\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"streamutils.js","names":["START_TOKEN","Uint8Array","OBJECT_OPEN_CHAR_CODE","OBJECT_CLOSE_CHAR_CODE","parseStreamedResponse","asyncIterable","utf8decoder","TextDecoder","parsedStart","prevChunks","openBracesCount","chunk","i","startsWith","length","j","c","combineAndParse","subarray","push","a","b","prev","curr","str","decode","stream","JSON","parse","iterateReadableStream","readableStream","res","read","done","value"],"sources":["streamutils.ts"],"sourcesContent":["/*\n * Copyright 2023 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\nconst START_TOKEN = new Uint8Array([123, 34, 100, 97, 116, 97, 34, 58, 91]); // `{\"data\":[`\nconst OBJECT_OPEN_CHAR_CODE = 123; // '{'\nconst OBJECT_CLOSE_CHAR_CODE = 125; // '}'\n\nexport async function* parseStreamedResponse(\n asyncIterable: AsyncIterable<Uint8Array>,\n): AsyncGenerator<any, void, unknown> {\n const utf8decoder = new TextDecoder(\"utf-8\");\n\n let parsedStart = false;\n let prevChunks: Uint8Array[] = [];\n let openBracesCount = 0;\n\n for await (const chunk of asyncIterable) {\n // on the first chunk, skip the expected START_TOKEN if we see it\n let i = 0;\n if (!parsedStart) {\n parsedStart = true;\n if (startsWith(chunk, START_TOKEN)) {\n i = START_TOKEN.length;\n }\n }\n\n for (; i < chunk.length; i++) {\n // if we aren't currently parsing an object, skip until we find the next object start\n while (\n openBracesCount === 0 && chunk[i] !== OBJECT_OPEN_CHAR_CODE\n && i < chunk.length\n ) {\n i++;\n }\n\n // iterate through the chunk looking for the end of the current top level object\n let j = i;\n for (; j < chunk.length; j++) {\n const c = chunk[j];\n if (c === OBJECT_OPEN_CHAR_CODE) {\n openBracesCount++;\n } else if (c === OBJECT_CLOSE_CHAR_CODE) {\n openBracesCount--;\n\n // found a complete top level object, emit it\n if (0 === openBracesCount) {\n yield combineAndParse(\n utf8decoder,\n prevChunks,\n chunk.subarray(i, j + 1),\n );\n\n // if there was a prevChunk, we've consumed it now\n prevChunks = [];\n\n // advance the start index to the final '}' of the current object,\n // which lets us start seeking the beginning of the next object\n i = j;\n break;\n }\n }\n }\n\n // if we reached the end of our chunk before finding the end of the object\n // store off the relevant remainder of our current chunk and go grab the next one\n if (j === chunk.length) {\n prevChunks.push(chunk.subarray(i));\n break;\n }\n }\n }\n}\n\nfunction startsWith(a: Uint8Array, b: Uint8Array) {\n if (a.length < b.length) {\n return false;\n }\n\n for (let i = 0; i < b.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction combineAndParse(\n utf8decoder: TextDecoder,\n prev: Uint8Array[],\n curr: Uint8Array,\n) {\n let str = \"\";\n for (const chunk of prev) {\n str += utf8decoder.decode(chunk, { stream: true });\n }\n str += utf8decoder.decode(curr);\n\n return JSON.parse(str);\n}\n\nexport async function* iterateReadableStream(\n readableStream: ReadableStreamDefaultReader<Uint8Array>,\n): AsyncGenerator<Uint8Array, void, unknown> {\n let res = await readableStream.read();\n while (!res.done) {\n yield res.value;\n res = await readableStream.read();\n }\n}\n"],"mappings":"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","ignoreList":[]}