@osdk/client 2.7.0-beta.9 → 2.7.0

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 (322) hide show
  1. package/CHANGELOG.md +236 -0
  2. package/build/browser/MinimalClientContext.js.map +1 -1
  3. package/build/browser/actions/actions.test.js +9 -8
  4. package/build/browser/actions/actions.test.js.map +1 -1
  5. package/build/browser/actions/applyAction.js +0 -4
  6. package/build/browser/actions/applyAction.js.map +1 -1
  7. package/build/browser/createClient.js +1 -2
  8. package/build/browser/createClient.js.map +1 -1
  9. package/build/browser/createMinimalClient.js +0 -1
  10. package/build/browser/createMinimalClient.js.map +1 -1
  11. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +1 -17
  12. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  13. package/build/browser/index.js +1 -1
  14. package/build/browser/index.js.map +1 -1
  15. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +14 -9
  16. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  17. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  18. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  19. package/build/browser/object/SimpleOsdkProperties.js.map +1 -1
  20. package/build/browser/object/aggregate.js +0 -1
  21. package/build/browser/object/aggregate.js.map +1 -1
  22. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  23. package/build/browser/object/fetchPage.js +0 -2
  24. package/build/browser/object/fetchPage.js.map +1 -1
  25. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +13 -4
  26. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  27. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
  28. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  29. package/build/browser/objectSet/createObjectSet.js +1 -1
  30. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  31. package/build/browser/objectSet/fetchLinksPage.js +0 -1
  32. package/build/browser/objectSet/fetchLinksPage.js.map +1 -1
  33. package/build/browser/observable/FunctionPayload.js +2 -0
  34. package/build/browser/observable/FunctionPayload.js.map +1 -0
  35. package/build/browser/observable/ObservableClient.js.map +1 -1
  36. package/build/browser/observable/internal/BulkObjectLoader.js +2 -1
  37. package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
  38. package/build/browser/observable/internal/Changes.js +4 -1
  39. package/build/browser/observable/internal/Changes.js.map +1 -1
  40. package/build/browser/observable/internal/KnownCacheKey.js.map +1 -1
  41. package/build/browser/observable/internal/ObservableClientImpl.js +21 -1
  42. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  43. package/build/browser/observable/internal/RidListCanonicalizer.js +30 -0
  44. package/build/browser/observable/internal/RidListCanonicalizer.js.map +1 -0
  45. package/build/browser/observable/internal/RidListCanonicalizer.test.js +50 -0
  46. package/build/browser/observable/internal/RidListCanonicalizer.test.js.map +1 -0
  47. package/build/browser/observable/internal/Store.js +11 -1
  48. package/build/browser/observable/internal/Store.js.map +1 -1
  49. package/build/browser/observable/internal/Store.test.js +57 -4
  50. package/build/browser/observable/internal/Store.test.js.map +1 -1
  51. package/build/browser/observable/internal/actions/ActionApplication.js +12 -9
  52. package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -1
  53. package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  54. package/build/browser/observable/internal/base-list/BaseListQuery.js +15 -9
  55. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  56. package/build/browser/observable/internal/base-list/createCollectionConnectable.js +4 -2
  57. package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  58. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
  59. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  60. package/build/browser/observable/internal/evaluateFilter.js +1 -1
  61. package/build/browser/observable/internal/evaluateFilter.js.map +1 -1
  62. package/build/browser/observable/internal/evaluateFilter.test.js +105 -0
  63. package/build/browser/observable/internal/evaluateFilter.test.js.map +1 -0
  64. package/build/browser/observable/internal/function/FunctionCacheKey.js +26 -0
  65. package/build/browser/observable/internal/function/FunctionCacheKey.js.map +1 -0
  66. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
  67. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
  68. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
  69. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
  70. package/build/browser/observable/internal/function/FunctionQuery.js +137 -0
  71. package/build/browser/observable/internal/function/FunctionQuery.js.map +1 -0
  72. package/build/browser/observable/internal/function/FunctionQuery.test.js +278 -0
  73. package/build/browser/observable/internal/function/FunctionQuery.test.js.map +1 -0
  74. package/build/browser/observable/internal/function/FunctionsHelper.js +92 -0
  75. package/build/browser/observable/internal/function/FunctionsHelper.js.map +1 -0
  76. package/build/browser/observable/internal/links/SpecificLinkQuery.js +2 -1
  77. package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  78. package/build/browser/observable/internal/list/InterfaceListQuery.js +27 -10
  79. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
  80. package/build/browser/observable/internal/list/ListCacheKey.js +1 -0
  81. package/build/browser/observable/internal/list/ListCacheKey.js.map +1 -1
  82. package/build/browser/observable/internal/list/ListQuery.js +10 -4
  83. package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
  84. package/build/browser/observable/internal/list/ListQuery.test.js +167 -3
  85. package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
  86. package/build/browser/observable/internal/list/ListsHelper.js +6 -3
  87. package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
  88. package/build/browser/observable/internal/list/ObjectListQuery.js +23 -9
  89. package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -1
  90. package/build/browser/observable/internal/object/ObjectQuery.js +15 -1
  91. package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -1
  92. package/build/browser/observable/internal/object/ObjectsHelper.js +1 -3
  93. package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
  94. package/build/browser/observable/internal/objectMatchesWhereClause.test.js +11 -1
  95. package/build/browser/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  96. package/build/browser/observable/internal/objectset/ObjectSetQuery.js +6 -2
  97. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  98. package/build/browser/observable/internal/testUtils.js +8 -5
  99. package/build/browser/observable/internal/testUtils.js.map +1 -1
  100. package/build/browser/observable/internal/utils/rdpFieldOperations.js +6 -3
  101. package/build/browser/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  102. package/build/browser/ontology/loadActionMetadata.js +1 -3
  103. package/build/browser/ontology/loadActionMetadata.js.map +1 -1
  104. package/build/browser/ontology/loadFullObjectMetadata.js +1 -2
  105. package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
  106. package/build/browser/ontology/loadInterfaceMetadata.js +1 -2
  107. package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
  108. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  109. package/build/browser/queries/applyQuery.js +14 -0
  110. package/build/browser/queries/applyQuery.js.map +1 -1
  111. package/build/browser/queries/queries.test.js +14 -2
  112. package/build/browser/queries/queries.test.js.map +1 -1
  113. package/build/browser/util/UserAgent.js +2 -2
  114. package/build/browser/util/UserAgent.js.map +1 -1
  115. package/build/browser/util/isObjectSpecifiersObject.js.map +1 -1
  116. package/build/browser/util/toDataValue.js +0 -5
  117. package/build/browser/util/toDataValue.js.map +1 -1
  118. package/build/browser/util/toDataValue.test.js +2 -7
  119. package/build/browser/util/toDataValue.test.js.map +1 -1
  120. package/build/cjs/{Client-DaUJl7jZ.d.cts → Client-Cmx6x_V1.d.cts} +1 -1
  121. package/build/cjs/{chunk-IQJTM3KW.cjs → chunk-W4BHRZWL.cjs} +79 -82
  122. package/build/cjs/chunk-W4BHRZWL.cjs.map +1 -0
  123. package/build/cjs/{chunk-PARVKNVB.cjs → chunk-Y362HOIZ.cjs} +30 -35
  124. package/build/cjs/chunk-Y362HOIZ.cjs.map +1 -0
  125. package/build/cjs/{createClient-D5G3qzAO.d.cts → createClient-BDmrDOzZ.d.cts} +1 -2
  126. package/build/cjs/index.cjs +8 -12
  127. package/build/cjs/index.cjs.map +1 -1
  128. package/build/cjs/index.d.cts +3 -3
  129. package/build/cjs/public/internal.cjs +8 -8
  130. package/build/cjs/public/internal.d.cts +1 -1
  131. package/build/cjs/public/unstable-do-not-use.cjs +537 -95
  132. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  133. package/build/cjs/public/unstable-do-not-use.d.cts +75 -4
  134. package/build/esm/MinimalClientContext.js.map +1 -1
  135. package/build/esm/actions/actions.test.js +9 -8
  136. package/build/esm/actions/actions.test.js.map +1 -1
  137. package/build/esm/actions/applyAction.js +0 -4
  138. package/build/esm/actions/applyAction.js.map +1 -1
  139. package/build/esm/createClient.js +1 -2
  140. package/build/esm/createClient.js.map +1 -1
  141. package/build/esm/createMinimalClient.js +0 -1
  142. package/build/esm/createMinimalClient.js.map +1 -1
  143. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +1 -17
  144. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  145. package/build/esm/index.js +1 -1
  146. package/build/esm/index.js.map +1 -1
  147. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +14 -9
  148. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  149. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  150. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  151. package/build/esm/object/SimpleOsdkProperties.js.map +1 -1
  152. package/build/esm/object/aggregate.js +0 -1
  153. package/build/esm/object/aggregate.js.map +1 -1
  154. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  155. package/build/esm/object/fetchPage.js +0 -2
  156. package/build/esm/object/fetchPage.js.map +1 -1
  157. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +13 -4
  158. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  159. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
  160. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  161. package/build/esm/objectSet/createObjectSet.js +1 -1
  162. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  163. package/build/esm/objectSet/fetchLinksPage.js +0 -1
  164. package/build/esm/objectSet/fetchLinksPage.js.map +1 -1
  165. package/build/esm/observable/FunctionPayload.js +2 -0
  166. package/build/esm/observable/FunctionPayload.js.map +1 -0
  167. package/build/esm/observable/ObservableClient.js.map +1 -1
  168. package/build/esm/observable/internal/BulkObjectLoader.js +2 -1
  169. package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
  170. package/build/esm/observable/internal/Changes.js +4 -1
  171. package/build/esm/observable/internal/Changes.js.map +1 -1
  172. package/build/esm/observable/internal/KnownCacheKey.js.map +1 -1
  173. package/build/esm/observable/internal/ObservableClientImpl.js +21 -1
  174. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  175. package/build/esm/observable/internal/RidListCanonicalizer.js +30 -0
  176. package/build/esm/observable/internal/RidListCanonicalizer.js.map +1 -0
  177. package/build/esm/observable/internal/RidListCanonicalizer.test.js +50 -0
  178. package/build/esm/observable/internal/RidListCanonicalizer.test.js.map +1 -0
  179. package/build/esm/observable/internal/Store.js +11 -1
  180. package/build/esm/observable/internal/Store.js.map +1 -1
  181. package/build/esm/observable/internal/Store.test.js +57 -4
  182. package/build/esm/observable/internal/Store.test.js.map +1 -1
  183. package/build/esm/observable/internal/actions/ActionApplication.js +12 -9
  184. package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -1
  185. package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  186. package/build/esm/observable/internal/base-list/BaseListQuery.js +15 -9
  187. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  188. package/build/esm/observable/internal/base-list/createCollectionConnectable.js +4 -2
  189. package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  190. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
  191. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  192. package/build/esm/observable/internal/evaluateFilter.js +1 -1
  193. package/build/esm/observable/internal/evaluateFilter.js.map +1 -1
  194. package/build/esm/observable/internal/evaluateFilter.test.js +105 -0
  195. package/build/esm/observable/internal/evaluateFilter.test.js.map +1 -0
  196. package/build/esm/observable/internal/function/FunctionCacheKey.js +26 -0
  197. package/build/esm/observable/internal/function/FunctionCacheKey.js.map +1 -0
  198. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
  199. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
  200. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
  201. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
  202. package/build/esm/observable/internal/function/FunctionQuery.js +137 -0
  203. package/build/esm/observable/internal/function/FunctionQuery.js.map +1 -0
  204. package/build/esm/observable/internal/function/FunctionQuery.test.js +278 -0
  205. package/build/esm/observable/internal/function/FunctionQuery.test.js.map +1 -0
  206. package/build/esm/observable/internal/function/FunctionsHelper.js +92 -0
  207. package/build/esm/observable/internal/function/FunctionsHelper.js.map +1 -0
  208. package/build/esm/observable/internal/links/SpecificLinkQuery.js +2 -1
  209. package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  210. package/build/esm/observable/internal/list/InterfaceListQuery.js +27 -10
  211. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
  212. package/build/esm/observable/internal/list/ListCacheKey.js +1 -0
  213. package/build/esm/observable/internal/list/ListCacheKey.js.map +1 -1
  214. package/build/esm/observable/internal/list/ListQuery.js +10 -4
  215. package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
  216. package/build/esm/observable/internal/list/ListQuery.test.js +167 -3
  217. package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
  218. package/build/esm/observable/internal/list/ListsHelper.js +6 -3
  219. package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
  220. package/build/esm/observable/internal/list/ObjectListQuery.js +23 -9
  221. package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -1
  222. package/build/esm/observable/internal/object/ObjectQuery.js +15 -1
  223. package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -1
  224. package/build/esm/observable/internal/object/ObjectsHelper.js +1 -3
  225. package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
  226. package/build/esm/observable/internal/objectMatchesWhereClause.test.js +11 -1
  227. package/build/esm/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  228. package/build/esm/observable/internal/objectset/ObjectSetQuery.js +6 -2
  229. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  230. package/build/esm/observable/internal/testUtils.js +8 -5
  231. package/build/esm/observable/internal/testUtils.js.map +1 -1
  232. package/build/esm/observable/internal/utils/rdpFieldOperations.js +6 -3
  233. package/build/esm/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  234. package/build/esm/ontology/loadActionMetadata.js +1 -3
  235. package/build/esm/ontology/loadActionMetadata.js.map +1 -1
  236. package/build/esm/ontology/loadFullObjectMetadata.js +1 -2
  237. package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
  238. package/build/esm/ontology/loadInterfaceMetadata.js +1 -2
  239. package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
  240. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  241. package/build/esm/queries/applyQuery.js +14 -0
  242. package/build/esm/queries/applyQuery.js.map +1 -1
  243. package/build/esm/queries/queries.test.js +14 -2
  244. package/build/esm/queries/queries.test.js.map +1 -1
  245. package/build/esm/util/UserAgent.js +2 -2
  246. package/build/esm/util/UserAgent.js.map +1 -1
  247. package/build/esm/util/isObjectSpecifiersObject.js.map +1 -1
  248. package/build/esm/util/toDataValue.js +0 -5
  249. package/build/esm/util/toDataValue.js.map +1 -1
  250. package/build/esm/util/toDataValue.test.js +2 -7
  251. package/build/esm/util/toDataValue.test.js.map +1 -1
  252. package/build/types/MinimalClientContext.d.ts +1 -1
  253. package/build/types/actions/applyAction.d.ts.map +1 -1
  254. package/build/types/createClient.d.ts +0 -1
  255. package/build/types/createClient.d.ts.map +1 -1
  256. package/build/types/index.d.ts +1 -1
  257. package/build/types/index.d.ts.map +1 -1
  258. package/build/types/objectSet/createObjectSet.d.ts +14 -1
  259. package/build/types/objectSet/createObjectSet.d.ts.map +1 -1
  260. package/build/types/objectSet/fetchLinksPage.d.ts +9 -1
  261. package/build/types/objectSet/fetchLinksPage.d.ts.map +1 -1
  262. package/build/types/observable/FunctionPayload.d.ts +10 -0
  263. package/build/types/observable/FunctionPayload.d.ts.map +1 -0
  264. package/build/types/observable/ObservableClient.d.ts +73 -1
  265. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  266. package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
  267. package/build/types/observable/internal/Changes.d.ts +5 -3
  268. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  269. package/build/types/observable/internal/KnownCacheKey.d.ts +2 -1
  270. package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
  271. package/build/types/observable/internal/RidListCanonicalizer.d.ts +5 -0
  272. package/build/types/observable/internal/RidListCanonicalizer.d.ts.map +1 -0
  273. package/build/types/observable/internal/RidListCanonicalizer.test.d.ts +1 -0
  274. package/build/types/observable/internal/RidListCanonicalizer.test.d.ts.map +1 -0
  275. package/build/types/observable/internal/Store.d.ts +7 -1
  276. package/build/types/observable/internal/Store.d.ts.map +1 -1
  277. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  278. package/build/types/observable/internal/actions/ActionApplication.d.ts.map +1 -1
  279. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +3 -0
  280. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -1
  281. package/build/types/observable/internal/base-list/BaseListQuery.d.ts +3 -1
  282. package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
  283. package/build/types/observable/internal/evaluateFilter.test.d.ts +1 -0
  284. package/build/types/observable/internal/evaluateFilter.test.d.ts.map +1 -0
  285. package/build/types/observable/internal/function/FunctionCacheKey.d.ts +17 -0
  286. package/build/types/observable/internal/function/FunctionCacheKey.d.ts.map +1 -0
  287. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts +16 -0
  288. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts.map +1 -0
  289. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts +1 -0
  290. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts.map +1 -0
  291. package/build/types/observable/internal/function/FunctionQuery.d.ts +40 -0
  292. package/build/types/observable/internal/function/FunctionQuery.d.ts.map +1 -0
  293. package/build/types/observable/internal/function/FunctionQuery.test.d.ts +1 -0
  294. package/build/types/observable/internal/function/FunctionQuery.test.d.ts.map +1 -0
  295. package/build/types/observable/internal/function/FunctionsHelper.d.ts +25 -0
  296. package/build/types/observable/internal/function/FunctionsHelper.d.ts.map +1 -0
  297. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
  298. package/build/types/observable/internal/list/InterfaceListQuery.d.ts +3 -0
  299. package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
  300. package/build/types/observable/internal/list/ListCacheKey.d.ts +2 -1
  301. package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -1
  302. package/build/types/observable/internal/list/ListQuery.d.ts +1 -1
  303. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
  304. package/build/types/observable/internal/list/ListsHelper.d.ts +3 -1
  305. package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
  306. package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -1
  307. package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -1
  308. package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
  309. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +1 -0
  310. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
  311. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  312. package/build/types/observable/internal/utils/rdpFieldOperations.d.ts.map +1 -1
  313. package/build/types/public/unstable-do-not-use.d.ts +2 -1
  314. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  315. package/build/types/queries/applyQuery.d.ts.map +1 -1
  316. package/build/types/util/isObjectSpecifiersObject.d.ts +1 -0
  317. package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -1
  318. package/package.json +11 -12
  319. package/build/cjs/chunk-IQJTM3KW.cjs.map +0 -1
  320. package/build/cjs/chunk-PARVKNVB.cjs.map +0 -1
  321. package/build/cjs/delay-W2TSML2P.cjs +0 -75
  322. package/build/cjs/delay-W2TSML2P.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Store.test.js","names":["editTodo","Employee","FooInterface","Office","Todo","FauxFoundry","ontologies","startNodeApiServer","stubData","TypeHelpers","chalk","inspect","invariant","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","ActionValidationError","createClient","TestLogger","runOptimisticJob","createOptimisticId","Store","applyCustomMatchers","createClientMockHelper","createDefer","expectNoMoreCalls","expectSingleLinkCallAndClear","expectSingleListCallAndClear","expectSingleObjectCallAndClear","getObject","mockListSubCallback","mockObserver","mockSingleSubCallback","objectPayloadContaining","updateList","updateObject","waitForCall","invalidateList","expectStandardObserveLink","expectStandardObserveObject","JOHN_DOE_ID","defer","logger","level","defaultOptions","depth","colors","setConfig","fakeTimers","toFake","resetConfig","ANY_INIT_ENTRY","object","undefined","lastUpdated","status","fullTaskName","task","suite","name","x","console","log","bgRed","white","testStage","s","bgYellow","setupOntology","fauxFoundry","fauxOntology","getDefaultOntology","addEmployeeOntology","registerObjectType","todoWithLinkTypes","registerActionType","actionTypeV2","b","payload","id","other","parameters","modifyObject","apiName","setupSomeEmployees","dataStore","getDefaultDataStore","emp1","registerObject","employeeId","emp2","$apiName","johnDoe","fullName","registerLink","office1","officeId","office2","client","cache","testSetup","apiServer","close","objectLikeJohnDoe","objectContaining","$primaryKey","emp1Payload","subFn","type","primaryKey","process","env","NODE_ENV","linkSubFn","store","srcObject","srcLinkName","targetType","expected","unregisterLink","asBsoStub","__apiName","__primaryKey","invalidateEmployeePromise","invalidateObjectType","office1Payload","officeSubFn","$link","occupants","fetchPage","toMatchInlineSnapshot","empSubFn","occupantsLinkSubFn","next","mockClear","not","toHaveBeenCalled","cacheKeys","employeesAsServerReturns","mutatedEmployees","data","$clone","slice","emp","cacheKey","get","getValue","value","toBeUndefined","result","toBe","toEqual","updatedEmpFromCache","objects","observe","pk","mode","optimisticId","layers","remove","where","orderBy","listSubFn","lists","optimisticEmployee","isOptimistic","truthUpdatedEmployee","subListFn","batch","changes","deleteObject","delete","staleEmp","invalidateObject","invalidateListPromise","useFakeTimers","useRealTimers","pInvalidateComplete","toHaveBeenNthCalledWith","subFn1","subFn2","complete","error","likeEmployee50030","toHaveBeenCalledExactlyOnceWith","firstLoad","mock","lastCall","toBeGreaterThan","sub","find","unsubscribe","toHaveBeenCalledTimes","calls","listSub1","ifaceSub","mocked","mockReset","$gt","listSub","pageSize","fetchMore","resetHandlers","on","toHaveBeenCalledOnce","a","expectLoadingAndLoaded","loading","loaded","clear","text","todoSubFn","applyAction","fauxObject","optimisticUpdate","ctx","rejects","toThrow","nextPk","fauxObjectA","fauxObjectB","fauxObjectC","Promise","all","map","fetchOne","noWhereNoOrderBy","noWhereOrderByText","subListUnordered","subListOrdered","optimisticallyMutatedA","pkForOptimistic","optimisticallyCreatedObjectD","removeOptimisticResult","createObject","actionDefinition","crazyAction","crazyActionTypeV2","actionTypeBuilder","addParameter","build","idForD","addObject","$title","pActionResult","modifiedObjectA","pkForD","addedObjects","createdObjectD","officeA","officeB","objectSets","baseObjectSet","pivotTo","waitFor","toHaveBeenLastCalledWith","timeout","resolvedList","clientHelper","baseObjects","i","$objectType","obj","layerIds","write"],"sources":["Store.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 type { Osdk } from \"@osdk/api\";\nimport {\n editTodo,\n Employee,\n FooInterface,\n Office,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { SetupServer } from \"@osdk/shared.test\";\nimport {\n FauxFoundry,\n ontologies,\n startNodeApiServer,\n stubData,\n TypeHelpers,\n} from \"@osdk/shared.test\";\nimport chalk from \"chalk\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { Task } from \"vitest\";\nimport {\n afterAll,\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport type { BaseServerObject } from \"../../../../faux/build/types/FauxFoundry/BaseServerObject.js\";\nimport { ActionValidationError } from \"../../actions/ActionValidationError.js\";\nimport { type Client } from \"../../Client.js\";\nimport { createClient } from \"../../createClient.js\";\nimport { TestLogger } from \"../../logger/TestLogger.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObserveListOptions,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport { runOptimisticJob } from \"./actions/OptimisticJob.js\";\nimport type { CacheKeys } from \"./CacheKeys.js\";\nimport type { KnownCacheKey } from \"./KnownCacheKey.js\";\nimport type { ObjectCacheKey } from \"./object/ObjectCacheKey.js\";\nimport { createOptimisticId } from \"./OptimisticId.js\";\nimport { Store } from \"./Store.js\";\nimport {\n applyCustomMatchers,\n createClientMockHelper,\n createDefer,\n expectNoMoreCalls,\n expectSingleLinkCallAndClear,\n expectSingleListCallAndClear,\n expectSingleObjectCallAndClear,\n getObject,\n mockListSubCallback,\n mockObserver,\n mockSingleSubCallback,\n objectPayloadContaining,\n updateList,\n updateObject,\n waitForCall,\n} from \"./testUtils.js\";\nimport { invalidateList } from \"./testUtils/invalidateList.js\";\nimport { expectStandardObserveLink } from \"./testUtils/observeLink/expectStandardObserveLink.js\";\nimport { expectStandardObserveObject } from \"./testUtils/observeObject/expectStandardObserveObject.js\";\n\nconst JOHN_DOE_ID = 50030;\n\nconst defer = createDefer();\n\nconst logger = new TestLogger({}, {\n level: \"debug\",\n});\n\ninspect.defaultOptions.depth = 9;\ninspect.defaultOptions.colors = true;\n\nbeforeAll(() => {\n vi.setConfig({\n fakeTimers: {\n toFake: [\n \"setTimeout\",\n \"clearTimeout\",\n \"Date\",\n \"setInterval\",\n \"clearInterval\",\n ],\n },\n });\n});\nafterAll(() => {\n vi.resetConfig();\n});\n\nconst ANY_INIT_ENTRY = {\n // cacheKey: expect.any(Object),\n object: undefined,\n lastUpdated: 0,\n status: \"init\",\n};\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nfunction fullTaskName(task?: Task): string {\n return task ? `${fullTaskName(task.suite)} > ${task.name}` : \"\";\n}\n\nbeforeEach((x) => {\n console.log(\n chalk.bgRed(chalk.white(fullTaskName(x.task))),\n );\n});\n\n// helper method to make debugging tests easier\nfunction testStage(s: string) {\n console.log(chalk.bgYellow(`Test Stage: ${s}`));\n}\n\napplyCustomMatchers();\n\nfunction 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\n b.modifyObject<Todo>(Todo.apiName, id, { ...other });\n },\n );\n}\n\nfunction setupSomeEmployees(fauxFoundry: FauxFoundry) {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n const emp1 = dataStore.registerObject(Employee, {\n employeeId: 1,\n });\n\n const emp2 = dataStore.registerObject(Employee, {\n employeeId: 2,\n });\n\n const emp3 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 3,\n });\n\n const emp4 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 4,\n });\n\n const johnDoe = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n dataStore.registerLink(emp1, \"peeps\", johnDoe, \"lead\");\n\n // Create offices\n const office1 = dataStore.registerObject(Office, {\n officeId: \"101\",\n name: \"Office 1\",\n });\n\n const office2 = dataStore.registerObject(Office, {\n officeId: \"102\",\n name: \"Office 2\",\n });\n\n // Link employees to offices (Employee->Office: officeLink, Office->Employee: occupants)\n dataStore.registerLink(emp1, \"officeLink\", office1, \"occupants\");\n dataStore.registerLink(emp2, \"officeLink\", office2, \"occupants\");\n}\n\ndescribe(Store, () => {\n describe(\"observeLinks\", () => {\n let client: Client;\n let cache: Store;\n let fauxFoundry: FauxFoundry;\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 // Use the existing setup function that adds Employee objects\n setupOntology(fauxFoundry);\n setupSomeEmployees(fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n return () => {\n cache = undefined!;\n };\n });\n\n const objectLikeJohnDoe = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: JOHN_DOE_ID,\n });\n const objectLikeEmp2 = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: 2,\n });\n\n it(\"removing link updates\", async (x) => {\n const { payload: emp1Payload, subFn } = await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n // Set up mock callback for observing links\n const { payload, linkSubFn } = await expectStandardObserveLink({\n store: cache,\n srcObject: emp1,\n srcLinkName: \"peeps\",\n targetType: Employee,\n expected: [objectLikeJohnDoe],\n });\n\n // Unregister the link \"in the backend\"\n fauxFoundry.getDefaultDataStore().unregisterLink(\n asBsoStub(emp1),\n \"peeps\",\n { __apiName: \"Employee\", __primaryKey: JOHN_DOE_ID },\n \"lead\",\n );\n\n const targetType = \"Employee\";\n const currentLinks: Osdk.Instance<any>[] = [objectLikeJohnDoe];\n const expectedLinks: Osdk.Instance<any>[] = [];\n\n testStage(\"Observing Employee 1's peeps\");\n\n // Invalidate the employee cache\n const invalidateEmployeePromise = cache.invalidateObjectType(\n targetType,\n undefined,\n );\n\n await waitForCall(linkSubFn);\n // Initially go to an invalidated loading state\n expectSingleLinkCallAndClear(linkSubFn, currentLinks, {\n status: \"loading\",\n });\n\n await invalidateEmployeePromise;\n\n // Should have no peeps now\n expectSingleLinkCallAndClear(linkSubFn, expectedLinks, {\n status: \"loaded\",\n });\n });\n\n it(\"invalidating Employee type only invalidates links, not Office objects\", async () => {\n // Get an Office object that has Employee occupants\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Office,\n primaryKey: \"101\",\n },\n );\n const office1 = office1Payload?.object;\n invariant(office1);\n\n expect(await office1.$link.occupants.fetchPage()).toMatchInlineSnapshot(`\n {\n \"data\": [\n {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:1\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 1,\n \"$title\": undefined,\n \"employeeId\": 1,\n \"office\": \"101\",\n },\n ],\n \"nextPageToken\": undefined,\n \"totalCount\": undefined,\n }\n `);\n\n testStage(\"Observing Employee 1\");\n\n // Get an Employee object linked to the office\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n testStage(\"Observing Office 101's occupants\");\n\n // Set up observation of occupants link\n const { linkSubFn: occupantsLinkSubFn } = await expectStandardObserveLink(\n {\n store: cache,\n srcObject: office1,\n srcLinkName: \"occupants\",\n targetType: Employee,\n expected: [expect.objectContaining({ $primaryKey: 1 })],\n },\n );\n\n // Clear any initial calls\n officeSubFn.next.mockClear();\n empSubFn.next.mockClear();\n occupantsLinkSubFn.next.mockClear();\n\n testStage(\"Invalidating Employee object type\");\n\n // Invalidate the Employee object type\n // This should cause:\n // - any object query for Employee to be invalidated\n // - any object list query for Employee to be invalidated\n // - any link queries where the source is an Employee to be invalidated\n // - any link queries where the target is an Employee to be invalidated\n const invalidateEmployeePromise = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n // The link should be invalidated (loading state)\n await waitForCall(occupantsLinkSubFn, 1);\n\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loading\",\n });\n\n // The employee should be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loading\");\n\n // The link should be revalidated (loaded state)\n await waitForCall(occupantsLinkSubFn, 1);\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loaded\",\n });\n\n // the Employee object should also be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loaded\");\n\n // The Office object should NOT have any calls\n // This is the key verification - no calls should be made to the office subscription\n expect(officeSubFn.next).not.toHaveBeenCalled();\n\n await invalidateEmployeePromise;\n\n // ensure at the end of invalidation there are no new calls\n expect(occupantsLinkSubFn.next).not.toHaveBeenCalled();\n expect(empSubFn.next).not.toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n });\n\n describe(\"with mock server\", () => {\n let client: Client;\n let cache: Store;\n let cacheKeys: CacheKeys<KnownCacheKey>;\n\n let employeesAsServerReturns: Osdk.Instance<Employee>[];\n let mutatedEmployees: Osdk.Instance<Employee>[];\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n setupSomeEmployees(testSetup.fauxFoundry);\n\n employeesAsServerReturns = (await client(Employee).fetchPage()).data;\n mutatedEmployees = [\n employeesAsServerReturns[0],\n employeesAsServerReturns[1].$clone({\n fullName: \"foo\",\n }),\n ...employeesAsServerReturns.slice(2),\n ];\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n cacheKeys = cache.cacheKeys;\n\n return () => {\n cache = undefined!;\n };\n });\n\n it(\"basic single object works\", async () => {\n const emp = employeesAsServerReturns[0];\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n \"Employee\",\n emp.$primaryKey,\n );\n\n // starts empty\n expect(\n cache.getValue(cacheKey)?.value,\n ).toBeUndefined();\n\n const result = updateObject(cache, emp);\n expect(emp).toBe(result);\n\n // getting the object now matches the result\n expect(cache.getValue(cacheKey)?.value).toEqual(\n result,\n );\n\n const updatedEmpFromCache = updateObject(\n cache,\n emp.$clone({ fullName: \"new name\" }),\n );\n expect(updatedEmpFromCache).not.toBe(emp);\n\n // getting it again is the updated object\n expect(cache.getValue(cacheKey)?.value).toEqual(\n updatedEmpFromCache,\n );\n });\n\n describe(\"optimistic updates\", () => {\n it(\"rolls back objects\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticId = createOptimisticId();\n // update with an optimistic write\n updateObject(cache, emp.$clone({ fullName: \"new name\" }), {\n optimisticId,\n });\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n \"loaded\",\n );\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n });\n\n it(\"rolls back to an updated real value\", async () => {\n // pre-seed the cache with the \"real\" value\n updateList(cache, {\n type: Employee,\n where: {},\n orderBy: {},\n }, employeesAsServerReturns);\n\n const emp = employeesAsServerReturns[0];\n\n const empSubFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, empSubFn),\n );\n\n expectSingleObjectCallAndClear(empSubFn, emp, \"loaded\");\n\n const listSubFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, listSubFn),\n );\n\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, employeesAsServerReturns);\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n const optimisticId = createOptimisticId();\n\n testStage(\"optimistic update\");\n expect(listSubFn.next).not.toHaveBeenCalled();\n\n // update with an optimistic write\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n\n testStage(\"after optimistic update\");\n\n // expect optimistic write\n expectSingleObjectCallAndClear(empSubFn, optimisticEmployee);\n\n // expect optimistic write to the list\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(\n listSubFn,\n [\n optimisticEmployee,\n ...employeesAsServerReturns.slice(1),\n ],\n {\n isOptimistic: true,\n status: \"loading\",\n },\n );\n\n // write the real update, via the earlier list definition\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n\n testStage(\"write real update\");\n\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n truthUpdatedEmployee,\n ]);\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n // see the object observation get updated\n expectSingleObjectCallAndClear(\n empSubFn,\n truthUpdatedEmployee,\n \"loaded\",\n );\n\n // see the list get updated\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, [truthUpdatedEmployee], {\n status: \"loaded\",\n isOptimistic: false,\n });\n });\n\n it(\"rolls back to an updated real value via list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n // update with an optimistic write\n const optimisticId = createOptimisticId();\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n expectSingleObjectCallAndClear(subFn, optimisticEmployee);\n\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n updateObject(cache, truthUpdatedEmployee);\n\n // we shouldn't expect an update because the top layer has a value\n expect(subFn.next).not.toHaveBeenCalled();\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, truthUpdatedEmployee);\n expectNoMoreCalls(subFn);\n });\n\n describe(\"object deletes\", () => {\n it(\"it properly updates the list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n emp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [emp],\n { status: \"loaded\" },\n );\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n emp.$apiName,\n emp.$primaryKey,\n );\n\n // Actual test is here, prior to this is setup\n testStage(\"delete the object\");\n\n cache.batch({\n optimisticId: createOptimisticId(),\n }, (batch) => {\n batch.changes.deleteObject(cacheKey);\n batch.delete(cacheKey, \"loading\");\n });\n\n expectSingleObjectCallAndClear(subFn, undefined);\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [],\n { isOptimistic: true, status: \"loading\" },\n );\n });\n });\n });\n\n describe(\".invalidateObject\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateObject(cache, staleEmp);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loaded\");\n\n // invalidate\n void cache.invalidateObject(Employee, staleEmp.$primaryKey);\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loading\");\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n expectNoMoreCalls(subFn);\n });\n });\n\n describe(\".invalidateList\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const invalidateListPromise = invalidateList(cache, { type: Employee });\n testStage(\"check invalidate\");\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loading\" },\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n employeesAsServerReturns,\n { status: \"loaded\" },\n );\n\n await waitForCall(subFn, 1);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n // don't leave promises dangling\n await invalidateListPromise;\n });\n });\n\n describe(\".invalidateObjectType\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const pInvalidateComplete = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, [staleEmp], {\n status: \"loading\",\n });\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, employeesAsServerReturns);\n\n testStage(\"Check invalidation call for single sub\");\n\n await waitForCall(subFn, 2);\n // First call is for loading state\n expect(subFn.next).toHaveBeenNthCalledWith(\n 1,\n objectPayloadContaining({\n status: \"loading\",\n object: staleEmp as unknown as ObjectHolder,\n }),\n );\n // Second call is for loaded state with fresh data\n expect(subFn.next).toHaveBeenNthCalledWith(\n 2,\n objectPayloadContaining({\n status: \"loaded\",\n object: emp as unknown as ObjectHolder,\n }),\n );\n subFn.next.mockClear();\n\n // we don't need this value to control the test but we want to make sure we don't have\n // any unhandled exceptions upon test completion\n await pInvalidateComplete;\n });\n });\n\n describe(\".observeObject (force)\", () => {\n const subFn1 = mockSingleSubCallback();\n const subFn2 = mockSingleSubCallback();\n\n beforeEach(async () => {\n subFn1.complete.mockClear();\n subFn1.next.mockClear();\n subFn1.error.mockClear();\n\n subFn2.complete.mockClear();\n subFn2.next.mockClear();\n subFn2.error.mockClear();\n });\n\n const likeEmployee50030 = expect.objectContaining({\n $primaryKey: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n it(\"fetches and updates twice\", async () => {\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn1),\n );\n\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n );\n\n subFn1.next.mockClear();\n\n await waitForCall(subFn1);\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: likeEmployee50030,\n isOptimistic: false,\n }),\n );\n\n const firstLoad = subFn1.next.mock.lastCall?.[0]!;\n\n subFn1.next.mockClear();\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn2),\n );\n expectSingleObjectCallAndClear(subFn1, likeEmployee50030, \"loading\");\n\n // should be the earlier results\n expectSingleObjectCallAndClear(subFn2, likeEmployee50030, \"loading\");\n\n // both will be updated\n for (const s of [subFn1, subFn2]) {\n // wait for the result to come in\n await waitForCall(s, 1);\n expect(s.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n ...firstLoad,\n lastUpdated: expect.toBeGreaterThan(firstLoad.lastUpdated),\n }),\n );\n\n s.next.mockClear();\n }\n });\n });\n\n describe(\".observeObject (offline)\", () => {\n const subFn = mockSingleSubCallback();\n let sub: Unsubscribable;\n\n beforeEach(() => {\n subFn.complete.mockClear();\n subFn.next.mockClear();\n subFn.error.mockClear();\n\n sub = defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, undefined!, \"init\");\n });\n\n it(\"does basic observation and unsubscribe\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp);\n expectSingleObjectCallAndClear(subFn, emp);\n\n // force again\n updateObject(cache, emp.$clone({ fullName: \"new name\" }));\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n );\n\n sub.unsubscribe();\n\n // force again but no subscription update\n updateObject(cache, emp.$clone({ fullName: \"new name 2\" }));\n expect(subFn.next).not.toHaveBeenCalled();\n });\n\n it(\"observes with list update\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp.$clone({ fullName: \"not the name\" }));\n expect(subFn.next).toHaveBeenCalledTimes(1);\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n expect(subFn.next).toHaveBeenCalledTimes(2);\n\n expect(subFn.next.mock.calls[1][0]).toEqual(\n objectPayloadContaining({\n object: emp as unknown as ObjectHolder<typeof emp>,\n }),\n );\n });\n });\n\n describe(\".lists.observe\", () => {\n const listSub1 = mockListSubCallback();\n const ifaceSub = mockListSubCallback();\n\n beforeEach(() => {\n vi.mocked(listSub1.next).mockReset();\n vi.mocked(listSub1.error).mockReset();\n vi.mocked(listSub1.complete).mockReset();\n\n vi.mocked(ifaceSub.next).mockReset();\n vi.mocked(ifaceSub.error).mockReset();\n vi.mocked(ifaceSub.complete).mockReset();\n });\n\n describe(\"mode=force\", () => {\n it(\"initial load\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n\n orderBy: {},\n mode: \"force\",\n }, listSub1),\n );\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n\n await waitForCall(listSub1);\n await waitForCall(ifaceSub);\n\n expectSingleListCallAndClear(\n listSub1,\n [],\n { status: \"loading\" },\n );\n\n expectSingleListCallAndClear(\n ifaceSub,\n [],\n { status: \"loading\" },\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(\n listSub1,\n employeesAsServerReturns,\n {\n status: \"loaded\",\n },\n );\n\n await waitForCall(ifaceSub);\n expectSingleListCallAndClear(\n ifaceSub,\n employeesAsServerReturns,\n {\n status: \"loaded\",\n },\n );\n\n expectNoMoreCalls(listSub1);\n expectNoMoreCalls(ifaceSub);\n\n expect(listSub1.next).not.toHaveBeenCalled();\n expect(listSub1.error).not.toHaveBeenCalled();\n expect(ifaceSub.next).not.toHaveBeenCalled();\n expect(ifaceSub.error).not.toHaveBeenCalled();\n });\n\n it(\"subsequent load\", async () => {\n // Pre-seed with data the server doesn't return\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n mutatedEmployees,\n );\n\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"force\",\n }, listSub1),\n );\n\n await waitForCall(listSub1, 1);\n const firstLoad = listSub1.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(listSub1, mutatedEmployees, {\n status: \"loading\",\n });\n\n await waitForCall(listSub1, 1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns, {\n status: \"loaded\",\n lastUpdated: expect.toBeGreaterThan(\n firstLoad.lastUpdated,\n ),\n });\n });\n });\n\n describe(\"mode = offline\", () => {\n it(\"updates with list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // list is just now one object\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n employeesAsServerReturns[0],\n ]);\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);\n });\n\n it(\"updates with different list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // new where === different list\n updateList(cache, {\n type: Employee,\n where: { employeeId: { $gt: 0 } },\n orderBy: {},\n }, mutatedEmployees);\n\n // original list updates still\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, mutatedEmployees);\n });\n });\n });\n\n describe(\".fetchMore\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"works in the solo case\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n const { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n });\n\n it(\"handles multiple sequential fetchMore calls\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n let { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 4),\n { status: \"loaded\" },\n );\n });\n });\n });\n\n describe(\"with mock client\", () => {\n let client: Client;\n let apiServer: SetupServer;\n let fauxFoundry: FauxFoundry;\n let store: Store;\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\", undefined, { logger }),\n createClient,\n { logger },\n );\n ({ client, apiServer, fauxFoundry } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n apiServer.resetHandlers();\n });\n\n beforeEach(async () => {\n store = new Store(client);\n });\n\n it(\"properly fires error handler for a list\", async () => {\n const sub = mockListSubCallback();\n\n // ignores unhandled rejection, like one we will get from fire-and-forget metadata call\n process.on(\"unhandledRejection\", () => {});\n\n store.lists.observe({\n type: { apiName: \"notReal\", type: \"object\" },\n orderBy: {},\n }, sub);\n\n await waitForCall(sub.next);\n\n // initial loading state\n expect(sub.next).toHaveBeenCalledOnce();\n expectSingleListCallAndClear(sub, [], { status: \"loading\" });\n\n await waitForCall(sub.error);\n expect(sub.error).toHaveBeenCalledOnce();\n expect(sub.next).not.toHaveBeenCalled();\n });\n\n describe(\"batching\", () => {\n it(\"groups requests for single objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 0,\n });\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n });\n\n const a = mockSingleSubCallback();\n const b = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Employee,\n pk: 0,\n }, a));\n defer(store.objects.observe({\n apiName: Employee,\n pk: 1,\n }, b));\n\n await a.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n await b.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 1,\n }),\n }),\n });\n });\n });\n\n describe(\"actions\", () => {\n beforeEach(() => {\n fauxFoundry.getDefaultDataStore().clear();\n });\n\n it(\"properly invalidates objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"og title\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn));\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n\n // at this point we have an observation properly set up\n await store.applyAction(editTodo, {\n id: 0,\n text: \"hello there kind sir\",\n });\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n text: \"hello there kind sir\",\n }),\n }),\n });\n });\n\n it(\"rolls back optimistic updates on error\", async () => {\n const fauxObject = expect.objectContaining({\n id: 0,\n text: \"does not matter\",\n });\n\n // set the object in the \"backend\"\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"does not matter\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n defer(\n store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn),\n );\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n\n const object: Osdk.Instance<Todo> | undefined = store.getValue(\n store.cacheKeys.get<ObjectCacheKey>(\"object\", \"Todo\", 0),\n )?.value as any;\n invariant(object);\n\n // at this point we have an observation properly set up\n await expect(\n store.applyAction(editTodo, {\n id: \"not an id that exists\",\n } as any, {\n optimisticUpdate: (ctx) => {\n ctx.updateObject(object.$clone({ text: \"optimistic\" }));\n },\n }),\n ).rejects.toThrow(ActionValidationError);\n\n await waitForCall(todoSubFn, 2);\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: expect.objectContaining({\n id: 0,\n text: \"optimistic\",\n }),\n isOptimistic: true,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n });\n });\n\n describe(\"orderBy\", async () => {\n let nextPk = 0;\n\n let fauxObjectA: Osdk.Instance<Todo>;\n let fauxObjectB: Osdk.Instance<Todo>;\n let fauxObjectC: Osdk.Instance<Todo>;\n\n beforeAll(async () => {\n fauxFoundry.getDefaultDataStore().clear();\n [fauxObjectA, fauxObjectB, fauxObjectC] = await Promise.all(\n ([\"a\", \"b\", \"c\"] as const).map(text => {\n const id = nextPk++;\n\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id,\n text,\n });\n\n return client(Todo).fetchOne(id);\n }),\n );\n });\n\n const noWhereNoOrderBy = {\n type: Todo,\n where: {},\n orderBy: {},\n } satisfies ObserveListOptions<Todo>;\n\n const noWhereOrderByText = {\n type: Todo,\n where: {},\n orderBy: {\n text: \"asc\",\n },\n } satisfies ObserveListOptions<Todo>;\n\n let subListUnordered = mockListSubCallback();\n let subListOrdered = mockListSubCallback();\n\n beforeEach(async () => {\n subListUnordered = mockListSubCallback();\n subListOrdered = mockListSubCallback();\n defer(\n store.lists.observe({\n ...noWhereNoOrderBy,\n mode: \"offline\",\n }, subListUnordered),\n );\n await waitForCall(subListUnordered);\n expectSingleListCallAndClear(subListUnordered, [], { status: \"init\" });\n\n defer(\n store.lists.observe({\n ...noWhereOrderByText,\n mode: \"offline\",\n }, subListOrdered),\n );\n await waitForCall(subListOrdered);\n expectSingleListCallAndClear(subListOrdered, [], { status: \"init\" });\n });\n\n it(\"invalidates the correct lists\", async () => {\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n // For whatever reason, object B is no longer in the first set (use your imagination)\n // but we have added a C before A. So the first list is [C, A]\n updateList(store, { type: Todo, where: {}, orderBy: {} }, [\n fauxObjectC,\n fauxObjectA,\n ]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectC, fauxObjectA],\n );\n\n // Nothing told the system that B was deleted so we can presume it still exists\n // and therefore the second list is now [A, B, C]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB, fauxObjectC],\n );\n });\n\n it(\"produces proper results with optimistic updates and successful action\", async () => {\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"text\": \"d\",\n id: pkForOptimistic,\n });\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n testStage(\"Start\");\n\n // Perform something optimistic.\n const removeOptimisticResult = runOptimisticJob(store, (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d\",\n });\n b.updateObject(optimisticallyMutatedA as Osdk.Instance<any>);\n });\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ],\n { isOptimistic: true },\n );\n\n // the second list is now [A, B, optimistic]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ],\n { isOptimistic: true },\n );\n\n // Roll back the optimistic update\n await removeOptimisticResult();\n\n // The first list is now [B, A]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n { isOptimistic: false },\n );\n\n // the second list is now [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n { isOptimistic: false },\n );\n });\n // I think these are named backwards\n it(\"produces proper results with optimistic updates and rollback\", async () => {\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"$primaryKey\": pkForOptimistic,\n \"$title\": undefined, // FIXME once this is calculated by optimistic then this needs to be the right value\n \"text\": \"d optimistic\",\n id: pkForOptimistic,\n });\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n\n testStage(\"Initial Setup\");\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n fauxObjectA,\n ]);\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectA,\n fauxObjectB,\n ]);\n\n testStage(\"Optimistic Creation\");\n\n // create the weirdest action ever. It always creates a Todo with\n // a new primary key and the text \"d\" and updates A\n const {\n actionDefinition: crazyAction,\n actionTypeV2: crazyActionTypeV2,\n } = TypeHelpers.actionTypeBuilder(\"asdf\")\n .addParameter(\"foo\", \"string\")\n .build();\n\n fauxFoundry.getDefaultOntology().registerActionType(\n crazyActionTypeV2,\n (batch, params) => {\n const idForD = nextPk++;\n\n batch.addObject(Todo.apiName, idForD, {\n id: idForD,\n text: \"d\",\n });\n\n batch.modifyObject(fauxObjectA.$apiName, fauxObjectA.$primaryKey, {\n text: \"a prime\",\n $title: \"a prime\", // FIXME we shouldn't have to set this, it can be calculated\n });\n },\n );\n\n // the optimistic job will call createObject which triggers the `objectFactory2` of the\n // cache context.\n\n // Perform something optimistic.\n const pActionResult = store.applyAction<typeof crazyAction>(\n crazyAction,\n {},\n {\n optimisticUpdate: (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d optimistic\",\n });\n b.updateObject(optimisticallyMutatedA);\n },\n },\n );\n\n testStage(\"Optimistic Updates\");\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ], { isOptimistic: true });\n\n // the second list is now [B, optimistic, optimistic a]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ], { isOptimistic: true });\n\n testStage(\"Resolve Action\");\n\n const modifiedObjectA = fauxObjectA.$clone({\n text: \"a prime\",\n });\n\n const pkForD = (await pActionResult).addedObjects?.[0].primaryKey;\n invariant(typeof pkForD === \"number\");\n // load this without the cache for comparisons\n const createdObjectD = await client(Todo).fetchOne(pkForD);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n modifiedObjectA,\n createdObjectD,\n ], { isOptimistic: false });\n\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [modifiedObjectA, fauxObjectB, createdObjectD],\n { isOptimistic: false },\n );\n });\n });\n\n it(\"works with pivotTo and orderBy on objectSets\", async () => {\n fauxFoundry.getDefaultDataStore().clear();\n\n const officeA = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-a\",\n name: \"Zebra Office\",\n });\n const officeB = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-b\",\n name: \"Alpha Office\",\n });\n\n const emp1 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n fullName: \"Test Employee\",\n });\n const emp2 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 2,\n fullName: \"Test Employee 2\",\n });\n\n fauxFoundry.getDefaultDataStore().registerLink(\n emp1,\n \"officeLink\",\n officeA,\n \"occupants\",\n );\n fauxFoundry.getDefaultDataStore().registerLink(\n emp2,\n \"officeLink\",\n officeB,\n \"occupants\",\n );\n\n const sub = mockObserver<ObjectSetPayload | undefined>();\n defer(\n store.objectSets.observe({\n baseObjectSet: client(Employee).pivotTo(\"officeLink\"),\n orderBy: { name: \"asc\" },\n }, sub),\n );\n\n await vi.waitFor(\n () => {\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n }),\n );\n },\n { timeout: 5000 },\n );\n\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n resolvedList: [\n expect.objectContaining({ name: \"Alpha Office\" }),\n expect.objectContaining({ name: \"Zebra Office\" }),\n ],\n }),\n );\n\n expect(sub.error).not.toHaveBeenCalled();\n });\n });\n\n describe(\"layers\", () => {\n it(\"properly remove\", () => {\n const clientHelper = createClientMockHelper();\n const store = new Store(clientHelper.client);\n\n const baseObjects = [1, 2].map((i) => ({\n $primaryKey: i,\n $objectType: \"Employee\",\n $apiName: \"Employee\",\n $title: `truth ${i}`,\n } as Osdk.Instance<Employee> & ObjectHolder<Osdk.Instance<Employee>>));\n\n const cacheKeys = baseObjects.map((obj) =>\n store.cacheKeys.get(\"object\", \"Employee\", obj.$primaryKey)\n );\n\n // set the truth\n for (const obj of baseObjects) {\n updateObject(store, obj);\n }\n\n // expect the truth\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n\n const layerIds = [1, 2].map(createOptimisticId);\n\n // optimistically set the objects in their own layers\n for (let i = 0; i < 2; i++) {\n store.batch({ optimisticId: layerIds[i] }, (batch) => {\n batch.write(\n cacheKeys[i],\n {\n ...baseObjects[i],\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n },\n \"loading\",\n );\n });\n }\n\n // expect the optimistic values\n for (let i = 0; i < 2; i++) {\n expect(getObject(store, \"Employee\", baseObjects[i].$primaryKey))\n .toEqual(\n expect.objectContaining({\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n }),\n );\n }\n\n // remove the first layer\n store.layers.remove(layerIds[0]);\n\n // should have truth object 1 and optimistic object 2\n expect(getObject(store, \"Employee\", 1)).toEqual(\n expect.objectContaining({ $title: \"truth 1\" }),\n );\n expect(getObject(store, \"Employee\", 2)).toEqual(\n expect.objectContaining({ $title: \"optimistic 2\" }),\n );\n\n // remove the second layer\n store.layers.remove(layerIds[1]);\n\n // should have truth objects\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n });\n });\n});\n\nexport function asBsoStub(\n x: ObjectHolder<any> | Osdk.Instance<any>,\n): BaseServerObject {\n return {\n __apiName: x.$apiName,\n __primaryKey: x.$primaryKey,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Store.test.js","names":["editTodo","Employee","FooInterface","Office","Todo","FauxFoundry","ontologies","startNodeApiServer","stubData","TypeHelpers","chalk","inspect","invariant","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","ActionValidationError","createClient","TestLogger","runOptimisticJob","createOptimisticId","Store","applyCustomMatchers","createClientMockHelper","createDefer","expectNoMoreCalls","expectSingleLinkCallAndClear","expectSingleListCallAndClear","expectSingleObjectCallAndClear","getObject","mockListSubCallback","mockObserver","mockSingleSubCallback","objectPayloadContaining","updateList","updateObject","waitForCall","invalidateList","expectStandardObserveLink","expectStandardObserveObject","JOHN_DOE_ID","defer","logger","level","defaultOptions","depth","colors","setConfig","fakeTimers","toFake","resetConfig","ANY_INIT_ENTRY","object","undefined","lastUpdated","status","fullTaskName","task","suite","name","x","console","log","bgRed","white","testStage","s","bgYellow","setupOntology","fauxFoundry","fauxOntology","getDefaultOntology","addEmployeeOntology","registerObjectType","todoWithLinkTypes","registerActionType","actionTypeV2","b","payload","id","other","parameters","modifyObject","apiName","setupSomeEmployees","dataStore","getDefaultDataStore","emp1","registerObject","employeeId","emp2","$apiName","johnDoe","fullName","registerLink","office1","officeId","office2","client","cache","testSetup","apiServer","close","objectLikeJohnDoe","objectContaining","$primaryKey","emp1Payload","subFn","type","primaryKey","process","env","NODE_ENV","linkSubFn","store","srcObject","srcLinkName","targetType","expected","unregisterLink","asBsoStub","__apiName","__primaryKey","invalidateEmployeePromise","invalidateObjectType","office1Payload","officeSubFn","$link","occupants","fetchPage","toMatchInlineSnapshot","empSubFn","occupantsLinkSubFn","next","mockClear","not","toHaveBeenCalled","cacheKeys","employeesAsServerReturns","mutatedEmployees","$includeRid","data","$clone","slice","emp","cacheKey","get","getValue","value","toBeUndefined","result","toBe","toEqual","updatedEmpFromCache","objects","observe","pk","mode","optimisticId","layers","remove","where","orderBy","listSubFn","lists","optimisticEmployee","isOptimistic","truthUpdatedEmployee","subListFn","batch","changes","deleteObject","delete","staleEmp","invalidateObject","invalidateListPromise","useFakeTimers","useRealTimers","pInvalidateComplete","toHaveBeenNthCalledWith","subFn1","subFn2","complete","error","likeEmployee50030","toHaveBeenCalledExactlyOnceWith","firstLoad","mock","lastCall","toBeGreaterThan","sub","find","unsubscribe","toHaveBeenCalledTimes","calls","listSub1","ifaceSub","mocked","mockReset","map","e","$objectType","cached","ifacePayload","resolvedList","objSub","at","$gt","listSub","pageSize","fetchMore","resetHandlers","on","toHaveBeenCalledOnce","a","expectLoadingAndLoaded","loading","loaded","clear","text","todoSubFn","applyAction","fauxObject","optimisticUpdate","ctx","rejects","toThrow","nextPk","fauxObjectA","fauxObjectB","fauxObjectC","Promise","all","fetchOne","noWhereNoOrderBy","noWhereOrderByText","subListUnordered","subListOrdered","optimisticallyMutatedA","pkForOptimistic","optimisticallyCreatedObjectD","removeOptimisticResult","createObject","actionDefinition","crazyAction","crazyActionTypeV2","actionTypeBuilder","addParameter","build","idForD","addObject","$title","pActionResult","modifiedObjectA","pkForD","addedObjects","createdObjectD","officeA","officeB","objectSets","baseObjectSet","pivotTo","waitFor","toHaveBeenLastCalledWith","timeout","clientHelper","baseObjects","i","obj","layerIds","write"],"sources":["Store.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 type { Osdk } from \"@osdk/api\";\nimport {\n editTodo,\n Employee,\n FooInterface,\n Office,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { SetupServer } from \"@osdk/shared.test\";\nimport {\n FauxFoundry,\n ontologies,\n startNodeApiServer,\n stubData,\n TypeHelpers,\n} from \"@osdk/shared.test\";\nimport chalk from \"chalk\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { Task } from \"vitest\";\nimport {\n afterAll,\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport type { BaseServerObject } from \"../../../../faux/build/types/FauxFoundry/BaseServerObject.js\";\nimport { ActionValidationError } from \"../../actions/ActionValidationError.js\";\nimport { type Client } from \"../../Client.js\";\nimport { createClient } from \"../../createClient.js\";\nimport { TestLogger } from \"../../logger/TestLogger.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObserveListOptions,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport { runOptimisticJob } from \"./actions/OptimisticJob.js\";\nimport type { CacheKeys } from \"./CacheKeys.js\";\nimport type { KnownCacheKey } from \"./KnownCacheKey.js\";\nimport type { ObjectCacheKey } from \"./object/ObjectCacheKey.js\";\nimport { createOptimisticId } from \"./OptimisticId.js\";\nimport { Store } from \"./Store.js\";\nimport {\n applyCustomMatchers,\n createClientMockHelper,\n createDefer,\n expectNoMoreCalls,\n expectSingleLinkCallAndClear,\n expectSingleListCallAndClear,\n expectSingleObjectCallAndClear,\n getObject,\n mockListSubCallback,\n mockObserver,\n mockSingleSubCallback,\n objectPayloadContaining,\n updateList,\n updateObject,\n waitForCall,\n} from \"./testUtils.js\";\nimport { invalidateList } from \"./testUtils/invalidateList.js\";\nimport { expectStandardObserveLink } from \"./testUtils/observeLink/expectStandardObserveLink.js\";\nimport { expectStandardObserveObject } from \"./testUtils/observeObject/expectStandardObserveObject.js\";\n\nconst JOHN_DOE_ID = 50030;\n\nconst defer = createDefer();\n\nconst logger = new TestLogger({}, {\n level: \"debug\",\n});\n\ninspect.defaultOptions.depth = 9;\ninspect.defaultOptions.colors = true;\n\nbeforeAll(() => {\n vi.setConfig({\n fakeTimers: {\n toFake: [\n \"setTimeout\",\n \"clearTimeout\",\n \"Date\",\n \"setInterval\",\n \"clearInterval\",\n ],\n },\n });\n});\nafterAll(() => {\n vi.resetConfig();\n});\n\nconst ANY_INIT_ENTRY = {\n // cacheKey: expect.any(Object),\n object: undefined,\n lastUpdated: 0,\n status: \"init\",\n};\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nfunction fullTaskName(task?: Task): string {\n return task ? `${fullTaskName(task.suite)} > ${task.name}` : \"\";\n}\n\nbeforeEach((x) => {\n console.log(\n chalk.bgRed(chalk.white(fullTaskName(x.task))),\n );\n});\n\n// helper method to make debugging tests easier\nfunction testStage(s: string) {\n console.log(chalk.bgYellow(`Test Stage: ${s}`));\n}\n\napplyCustomMatchers();\n\nfunction 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\n b.modifyObject<Todo>(Todo.apiName, id, { ...other });\n },\n );\n}\n\nfunction setupSomeEmployees(fauxFoundry: FauxFoundry) {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n const emp1 = dataStore.registerObject(Employee, {\n employeeId: 1,\n });\n\n const emp2 = dataStore.registerObject(Employee, {\n employeeId: 2,\n });\n\n const emp3 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 3,\n });\n\n const emp4 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 4,\n });\n\n const johnDoe = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n dataStore.registerLink(emp1, \"peeps\", johnDoe, \"lead\");\n\n // Create offices\n const office1 = dataStore.registerObject(Office, {\n officeId: \"101\",\n name: \"Office 1\",\n });\n\n const office2 = dataStore.registerObject(Office, {\n officeId: \"102\",\n name: \"Office 2\",\n });\n\n // Link employees to offices (Employee->Office: officeLink, Office->Employee: occupants)\n dataStore.registerLink(emp1, \"officeLink\", office1, \"occupants\");\n dataStore.registerLink(emp2, \"officeLink\", office2, \"occupants\");\n}\n\ndescribe(Store, () => {\n describe(\"observeLinks\", () => {\n let client: Client;\n let cache: Store;\n let fauxFoundry: FauxFoundry;\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 // Use the existing setup function that adds Employee objects\n setupOntology(fauxFoundry);\n setupSomeEmployees(fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n return () => {\n cache = undefined!;\n };\n });\n\n const objectLikeJohnDoe = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: JOHN_DOE_ID,\n });\n const objectLikeEmp2 = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: 2,\n });\n\n it(\"removing link updates\", async (x) => {\n const { payload: emp1Payload, subFn } = await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n // Set up mock callback for observing links\n const { payload, linkSubFn } = await expectStandardObserveLink({\n store: cache,\n srcObject: emp1,\n srcLinkName: \"peeps\",\n targetType: Employee,\n expected: [objectLikeJohnDoe],\n });\n\n // Unregister the link \"in the backend\"\n fauxFoundry.getDefaultDataStore().unregisterLink(\n asBsoStub(emp1),\n \"peeps\",\n { __apiName: \"Employee\", __primaryKey: JOHN_DOE_ID },\n \"lead\",\n );\n\n const targetType = \"Employee\";\n const currentLinks: Osdk.Instance<any>[] = [objectLikeJohnDoe];\n const expectedLinks: Osdk.Instance<any>[] = [];\n\n testStage(\"Observing Employee 1's peeps\");\n\n // Invalidate the employee cache\n const invalidateEmployeePromise = cache.invalidateObjectType(\n targetType,\n undefined,\n );\n\n await waitForCall(linkSubFn);\n // Initially go to an invalidated loading state\n expectSingleLinkCallAndClear(linkSubFn, currentLinks, {\n status: \"loading\",\n });\n\n await invalidateEmployeePromise;\n\n // Should have no peeps now\n expectSingleLinkCallAndClear(linkSubFn, expectedLinks, {\n status: \"loaded\",\n });\n });\n\n it(\"invalidating Employee type only invalidates links, not Office objects\", async () => {\n // Get an Office object that has Employee occupants\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Office,\n primaryKey: \"101\",\n },\n );\n const office1 = office1Payload?.object;\n invariant(office1);\n\n expect(await office1.$link.occupants.fetchPage()).toMatchInlineSnapshot(`\n {\n \"data\": [\n {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:1\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 1,\n \"$title\": undefined,\n \"employeeId\": 1,\n \"office\": \"101\",\n },\n ],\n \"nextPageToken\": undefined,\n \"totalCount\": undefined,\n }\n `);\n\n testStage(\"Observing Employee 1\");\n\n // Get an Employee object linked to the office\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n testStage(\"Observing Office 101's occupants\");\n\n // Set up observation of occupants link\n const { linkSubFn: occupantsLinkSubFn } = await expectStandardObserveLink(\n {\n store: cache,\n srcObject: office1,\n srcLinkName: \"occupants\",\n targetType: Employee,\n expected: [expect.objectContaining({ $primaryKey: 1 })],\n },\n );\n\n // Clear any initial calls\n officeSubFn.next.mockClear();\n empSubFn.next.mockClear();\n occupantsLinkSubFn.next.mockClear();\n\n testStage(\"Invalidating Employee object type\");\n\n // Invalidate the Employee object type\n // This should cause:\n // - any object query for Employee to be invalidated\n // - any object list query for Employee to be invalidated\n // - any link queries where the source is an Employee to be invalidated\n // - any link queries where the target is an Employee to be invalidated\n const invalidateEmployeePromise = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n // The link should be invalidated (loading state)\n await waitForCall(occupantsLinkSubFn, 1);\n\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loading\",\n });\n\n // The employee should be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loading\");\n\n // The link should be revalidated (loaded state)\n await waitForCall(occupantsLinkSubFn, 1);\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loaded\",\n });\n\n // the Employee object should also be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loaded\");\n\n // The Office object should NOT have any calls\n // This is the key verification - no calls should be made to the office subscription\n expect(officeSubFn.next).not.toHaveBeenCalled();\n\n await invalidateEmployeePromise;\n\n // ensure at the end of invalidation there are no new calls\n expect(occupantsLinkSubFn.next).not.toHaveBeenCalled();\n expect(empSubFn.next).not.toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n });\n\n describe(\"with mock server\", () => {\n let client: Client;\n let cache: Store;\n let cacheKeys: CacheKeys<KnownCacheKey>;\n\n let employeesAsServerReturns: Osdk.Instance<Employee>[];\n let mutatedEmployees: Osdk.Instance<Employee>[];\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n setupSomeEmployees(testSetup.fauxFoundry);\n\n employeesAsServerReturns = (await client(Employee).fetchPage({\n $includeRid: true,\n })).data;\n mutatedEmployees = [\n employeesAsServerReturns[0],\n employeesAsServerReturns[1].$clone({\n fullName: \"foo\",\n }),\n ...employeesAsServerReturns.slice(2),\n ];\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n cacheKeys = cache.cacheKeys;\n\n return () => {\n cache = undefined!;\n };\n });\n\n it(\"basic single object works\", async () => {\n const emp = employeesAsServerReturns[0];\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n \"Employee\",\n emp.$primaryKey,\n );\n\n // starts empty\n expect(\n cache.getValue(cacheKey)?.value,\n ).toBeUndefined();\n\n const result = updateObject(cache, emp);\n expect(emp).toBe(result);\n\n // getting the object now matches the result\n expect(cache.getValue(cacheKey)?.value).toEqual(\n result,\n );\n\n const updatedEmpFromCache = updateObject(\n cache,\n emp.$clone({ fullName: \"new name\" }),\n );\n expect(updatedEmpFromCache).not.toBe(emp);\n\n // getting it again is the updated object\n expect(cache.getValue(cacheKey)?.value).toEqual(\n updatedEmpFromCache,\n );\n });\n\n describe(\"optimistic updates\", () => {\n it(\"rolls back objects\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticId = createOptimisticId();\n // update with an optimistic write\n updateObject(cache, emp.$clone({ fullName: \"new name\" }), {\n optimisticId,\n });\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n \"loaded\",\n );\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n });\n\n it(\"rolls back to an updated real value\", async () => {\n // pre-seed the cache with the \"real\" value\n updateList(cache, {\n type: Employee,\n where: {},\n orderBy: {},\n }, employeesAsServerReturns);\n\n const emp = employeesAsServerReturns[0];\n\n const empSubFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, empSubFn),\n );\n\n expectSingleObjectCallAndClear(empSubFn, emp, \"loaded\");\n\n const listSubFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, listSubFn),\n );\n\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, employeesAsServerReturns);\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n const optimisticId = createOptimisticId();\n\n testStage(\"optimistic update\");\n expect(listSubFn.next).not.toHaveBeenCalled();\n\n // update with an optimistic write\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n\n testStage(\"after optimistic update\");\n\n // expect optimistic write\n expectSingleObjectCallAndClear(empSubFn, optimisticEmployee);\n\n // expect optimistic write to the list\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(\n listSubFn,\n [\n optimisticEmployee,\n ...employeesAsServerReturns.slice(1),\n ],\n {\n isOptimistic: true,\n status: \"loading\",\n },\n );\n\n // write the real update, via the earlier list definition\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n\n testStage(\"write real update\");\n\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n truthUpdatedEmployee,\n ]);\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n // see the object observation get updated\n expectSingleObjectCallAndClear(\n empSubFn,\n truthUpdatedEmployee,\n \"loaded\",\n );\n\n // see the list get updated\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, [truthUpdatedEmployee], {\n status: \"loaded\",\n isOptimistic: false,\n });\n });\n\n it(\"rolls back to an updated real value via list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n // update with an optimistic write\n const optimisticId = createOptimisticId();\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n expectSingleObjectCallAndClear(subFn, optimisticEmployee);\n\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n updateObject(cache, truthUpdatedEmployee);\n\n // we shouldn't expect an update because the top layer has a value\n expect(subFn.next).not.toHaveBeenCalled();\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, truthUpdatedEmployee);\n expectNoMoreCalls(subFn);\n });\n\n describe(\"object deletes\", () => {\n it(\"it properly updates the list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n emp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [emp],\n { status: \"loaded\" },\n );\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n emp.$apiName,\n emp.$primaryKey,\n );\n\n // Actual test is here, prior to this is setup\n testStage(\"delete the object\");\n\n cache.batch({\n optimisticId: createOptimisticId(),\n }, (batch) => {\n batch.changes.deleteObject(cacheKey);\n batch.delete(cacheKey, \"loading\");\n });\n\n expectSingleObjectCallAndClear(subFn, undefined);\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [],\n { isOptimistic: true, status: \"loading\" },\n );\n });\n });\n });\n\n describe(\".invalidateObject\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateObject(cache, staleEmp);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loaded\");\n\n // invalidate\n void cache.invalidateObject(Employee, staleEmp.$primaryKey);\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loading\");\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n expectNoMoreCalls(subFn);\n });\n });\n\n describe(\".invalidateList\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const invalidateListPromise = invalidateList(cache, { type: Employee });\n testStage(\"check invalidate\");\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loading\" },\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n employeesAsServerReturns,\n { status: \"loaded\" },\n );\n\n await waitForCall(subFn, 1);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n // don't leave promises dangling\n await invalidateListPromise;\n });\n });\n\n describe(\".invalidateObjectType\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const pInvalidateComplete = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, [staleEmp], {\n status: \"loading\",\n });\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, employeesAsServerReturns);\n\n testStage(\"Check invalidation call for single sub\");\n\n await waitForCall(subFn, 2);\n // First call is for loading state\n expect(subFn.next).toHaveBeenNthCalledWith(\n 1,\n objectPayloadContaining({\n status: \"loading\",\n object: staleEmp as unknown as ObjectHolder,\n }),\n );\n // Second call is for loaded state with fresh data\n expect(subFn.next).toHaveBeenNthCalledWith(\n 2,\n objectPayloadContaining({\n status: \"loaded\",\n object: emp as unknown as ObjectHolder,\n }),\n );\n subFn.next.mockClear();\n\n // we don't need this value to control the test but we want to make sure we don't have\n // any unhandled exceptions upon test completion\n await pInvalidateComplete;\n });\n });\n\n describe(\".observeObject (force)\", () => {\n const subFn1 = mockSingleSubCallback();\n const subFn2 = mockSingleSubCallback();\n\n beforeEach(async () => {\n subFn1.complete.mockClear();\n subFn1.next.mockClear();\n subFn1.error.mockClear();\n\n subFn2.complete.mockClear();\n subFn2.next.mockClear();\n subFn2.error.mockClear();\n });\n\n const likeEmployee50030 = expect.objectContaining({\n $primaryKey: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n it(\"fetches and updates twice\", async () => {\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn1),\n );\n\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n );\n\n subFn1.next.mockClear();\n\n await waitForCall(subFn1);\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: likeEmployee50030,\n isOptimistic: false,\n }),\n );\n\n const firstLoad = subFn1.next.mock.lastCall?.[0]!;\n\n subFn1.next.mockClear();\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn2),\n );\n expectSingleObjectCallAndClear(subFn1, likeEmployee50030, \"loading\");\n\n // should be the earlier results\n expectSingleObjectCallAndClear(subFn2, likeEmployee50030, \"loading\");\n\n // both will be updated\n for (const s of [subFn1, subFn2]) {\n // wait for the result to come in\n await waitForCall(s, 1);\n expect(s.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n ...firstLoad,\n lastUpdated: expect.toBeGreaterThan(firstLoad.lastUpdated),\n }),\n );\n\n s.next.mockClear();\n }\n });\n });\n\n describe(\".observeObject (offline)\", () => {\n const subFn = mockSingleSubCallback();\n let sub: Unsubscribable;\n\n beforeEach(() => {\n subFn.complete.mockClear();\n subFn.next.mockClear();\n subFn.error.mockClear();\n\n sub = defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, undefined!, \"init\");\n });\n\n it(\"does basic observation and unsubscribe\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp);\n expectSingleObjectCallAndClear(subFn, emp);\n\n // force again\n updateObject(cache, emp.$clone({ fullName: \"new name\" }));\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n );\n\n sub.unsubscribe();\n\n // force again but no subscription update\n updateObject(cache, emp.$clone({ fullName: \"new name 2\" }));\n expect(subFn.next).not.toHaveBeenCalled();\n });\n\n it(\"observes with list update\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp.$clone({ fullName: \"not the name\" }));\n expect(subFn.next).toHaveBeenCalledTimes(1);\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n expect(subFn.next).toHaveBeenCalledTimes(2);\n\n expect(subFn.next.mock.calls[1][0]).toEqual(\n objectPayloadContaining({\n object: emp as unknown as ObjectHolder<typeof emp>,\n }),\n );\n });\n });\n\n describe(\".lists.observe\", () => {\n const listSub1 = mockListSubCallback();\n const ifaceSub = mockListSubCallback();\n\n beforeEach(() => {\n vi.mocked(listSub1.next).mockReset();\n vi.mocked(listSub1.error).mockReset();\n vi.mocked(listSub1.complete).mockReset();\n\n vi.mocked(ifaceSub.next).mockReset();\n vi.mocked(ifaceSub.error).mockReset();\n vi.mocked(ifaceSub.complete).mockReset();\n });\n\n describe(\"mode=force\", () => {\n it(\"initial load\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n\n orderBy: {},\n mode: \"force\",\n }, listSub1),\n );\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n\n await waitForCall(listSub1);\n await waitForCall(ifaceSub);\n\n expectSingleListCallAndClear(\n listSub1,\n [],\n { status: \"loading\" },\n );\n\n expectSingleListCallAndClear(\n ifaceSub,\n [],\n { status: \"loading\" },\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(\n listSub1,\n employeesAsServerReturns,\n {\n status: \"loaded\",\n },\n );\n\n await waitForCall(ifaceSub);\n expectSingleListCallAndClear(\n ifaceSub,\n employeesAsServerReturns.map(e =>\n expect.objectContaining({\n $apiName: \"FooInterface\",\n $objectType: \"Employee\",\n $primaryKey: e.$primaryKey,\n })\n ),\n {\n status: \"loaded\",\n },\n );\n\n expectNoMoreCalls(listSub1);\n expectNoMoreCalls(ifaceSub);\n\n expect(listSub1.next).not.toHaveBeenCalled();\n expect(listSub1.error).not.toHaveBeenCalled();\n expect(ifaceSub.next).not.toHaveBeenCalled();\n expect(ifaceSub.error).not.toHaveBeenCalled();\n });\n\n it(\"cache stores raw objects when loading via interface\", async () => {\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n const pk = employeesAsServerReturns[0].$primaryKey as number;\n const cached = getObject(cache, \"Employee\", pk);\n expect(cached?.$apiName).toBe(\"Employee\");\n expect(cached?.$objectType).toBe(\"Employee\");\n });\n\n it(\"interface queries return interface view while cache stores raw object\", async () => {\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n const ifacePayload = ifaceSub.next.mock.calls[1][0];\n expect(ifacePayload?.resolvedList?.[0]?.$apiName).toBe(\n \"FooInterface\",\n );\n expect(ifacePayload?.resolvedList?.[0]?.$objectType).toBe(\"Employee\");\n\n const pk = employeesAsServerReturns[0].$primaryKey as number;\n const cached = getObject(cache, \"Employee\", pk);\n expect(cached?.$apiName).toBe(\"Employee\");\n });\n\n it(\"direct query after interface query preserves interface $apiName\", async () => {\n const objSub = mockSingleSubCallback();\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n expect(ifaceSub.next.mock.calls[1][0]?.resolvedList?.[0]?.$apiName)\n .toBe(\"FooInterface\");\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: employeesAsServerReturns[0].$primaryKey,\n mode: \"force\",\n }, objSub),\n );\n await waitForCall(objSub, 2);\n\n expect(\n ifaceSub.next.mock.calls.at(-1)?.[0]?.resolvedList?.[0]?.$apiName,\n )\n .toBe(\"FooInterface\");\n });\n\n it(\"subsequent load\", async () => {\n // Pre-seed with data the server doesn't return\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n mutatedEmployees,\n );\n\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"force\",\n }, listSub1),\n );\n\n await waitForCall(listSub1, 1);\n const firstLoad = listSub1.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(listSub1, mutatedEmployees, {\n status: \"loading\",\n });\n\n await waitForCall(listSub1, 1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns, {\n status: \"loaded\",\n lastUpdated: expect.toBeGreaterThan(\n firstLoad.lastUpdated,\n ),\n });\n });\n });\n\n describe(\"mode = offline\", () => {\n it(\"updates with list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // list is just now one object\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n employeesAsServerReturns[0],\n ]);\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);\n });\n\n it(\"updates with different list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // new where === different list\n updateList(cache, {\n type: Employee,\n where: { employeeId: { $gt: 0 } },\n orderBy: {},\n }, mutatedEmployees);\n\n // original list updates still\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, mutatedEmployees);\n });\n });\n });\n\n describe(\".fetchMore\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"works in the solo case\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n const { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n });\n\n it(\"handles multiple sequential fetchMore calls\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n let { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 4),\n { status: \"loaded\" },\n );\n });\n });\n });\n\n describe(\"with mock client\", () => {\n let client: Client;\n let apiServer: SetupServer;\n let fauxFoundry: FauxFoundry;\n let store: Store;\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\", undefined, { logger }),\n createClient,\n { logger },\n );\n ({ client, apiServer, fauxFoundry } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n apiServer.resetHandlers();\n });\n\n beforeEach(async () => {\n store = new Store(client);\n });\n\n it(\"properly fires error handler for a list\", async () => {\n const sub = mockListSubCallback();\n\n // ignores unhandled rejection, like one we will get from fire-and-forget metadata call\n process.on(\"unhandledRejection\", () => {});\n\n store.lists.observe({\n type: { apiName: \"notReal\", type: \"object\" },\n orderBy: {},\n }, sub);\n\n await waitForCall(sub.next);\n\n // initial loading state\n expect(sub.next).toHaveBeenCalledOnce();\n expectSingleListCallAndClear(sub, [], { status: \"loading\" });\n\n await waitForCall(sub.error);\n expect(sub.error).toHaveBeenCalledOnce();\n expect(sub.next).not.toHaveBeenCalled();\n });\n\n describe(\"batching\", () => {\n it(\"groups requests for single objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 0,\n });\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n });\n\n const a = mockSingleSubCallback();\n const b = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Employee,\n pk: 0,\n }, a));\n defer(store.objects.observe({\n apiName: Employee,\n pk: 1,\n }, b));\n\n await a.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n await b.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 1,\n }),\n }),\n });\n });\n });\n\n describe(\"actions\", () => {\n beforeEach(() => {\n fauxFoundry.getDefaultDataStore().clear();\n });\n\n it(\"properly invalidates objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"og title\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn));\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n\n // at this point we have an observation properly set up\n await store.applyAction(editTodo, {\n id: 0,\n text: \"hello there kind sir\",\n });\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n text: \"hello there kind sir\",\n }),\n }),\n });\n });\n\n it(\"rolls back optimistic updates on error\", async () => {\n const fauxObject = expect.objectContaining({\n id: 0,\n text: \"does not matter\",\n });\n\n // set the object in the \"backend\"\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"does not matter\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n defer(\n store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn),\n );\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n\n const object: Osdk.Instance<Todo> | undefined = store.getValue(\n store.cacheKeys.get<ObjectCacheKey>(\"object\", \"Todo\", 0),\n )?.value as any;\n invariant(object);\n\n // at this point we have an observation properly set up\n await expect(\n store.applyAction(editTodo, {\n id: \"not an id that exists\",\n } as any, {\n optimisticUpdate: (ctx) => {\n ctx.updateObject(object.$clone({ text: \"optimistic\" }));\n },\n }),\n ).rejects.toThrow(ActionValidationError);\n\n await waitForCall(todoSubFn, 2);\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: expect.objectContaining({\n id: 0,\n text: \"optimistic\",\n }),\n isOptimistic: true,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n });\n });\n\n describe(\"orderBy\", async () => {\n let nextPk = 0;\n\n let fauxObjectA: Osdk.Instance<Todo>;\n let fauxObjectB: Osdk.Instance<Todo>;\n let fauxObjectC: Osdk.Instance<Todo>;\n\n beforeAll(async () => {\n fauxFoundry.getDefaultDataStore().clear();\n [fauxObjectA, fauxObjectB, fauxObjectC] = await Promise.all(\n ([\"a\", \"b\", \"c\"] as const).map(text => {\n const id = nextPk++;\n\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id,\n text,\n });\n\n return client(Todo).fetchOne(id, { $includeRid: true });\n }),\n );\n });\n\n const noWhereNoOrderBy = {\n type: Todo,\n where: {},\n orderBy: {},\n } satisfies ObserveListOptions<Todo>;\n\n const noWhereOrderByText = {\n type: Todo,\n where: {},\n orderBy: {\n text: \"asc\",\n },\n } satisfies ObserveListOptions<Todo>;\n\n let subListUnordered = mockListSubCallback();\n let subListOrdered = mockListSubCallback();\n\n beforeEach(async () => {\n subListUnordered = mockListSubCallback();\n subListOrdered = mockListSubCallback();\n defer(\n store.lists.observe({\n ...noWhereNoOrderBy,\n mode: \"offline\",\n }, subListUnordered),\n );\n await waitForCall(subListUnordered);\n expectSingleListCallAndClear(subListUnordered, [], { status: \"init\" });\n\n defer(\n store.lists.observe({\n ...noWhereOrderByText,\n mode: \"offline\",\n }, subListOrdered),\n );\n await waitForCall(subListOrdered);\n expectSingleListCallAndClear(subListOrdered, [], { status: \"init\" });\n });\n\n it(\"invalidates the correct lists\", async () => {\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n // For whatever reason, object B is no longer in the first set (use your imagination)\n // but we have added a C before A. So the first list is [C, A]\n updateList(store, { type: Todo, where: {}, orderBy: {} }, [\n fauxObjectC,\n fauxObjectA,\n ]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectC, fauxObjectA],\n );\n\n // Nothing told the system that B was deleted so we can presume it still exists\n // and therefore the second list is now [A, B, C]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB, fauxObjectC],\n );\n });\n\n it(\"produces proper results with optimistic updates and successful action\", async () => {\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"text\": \"d\",\n id: pkForOptimistic,\n });\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n testStage(\"Start\");\n\n // Perform something optimistic.\n const removeOptimisticResult = runOptimisticJob(store, (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d\",\n });\n b.updateObject(optimisticallyMutatedA as Osdk.Instance<any>);\n });\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ],\n { isOptimistic: true },\n );\n\n // the second list is now [A, B, optimistic]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ],\n { isOptimistic: true },\n );\n\n // Roll back the optimistic update\n await removeOptimisticResult();\n\n // The first list is now [B, A]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n { isOptimistic: false },\n );\n\n // the second list is now [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n { isOptimistic: false },\n );\n });\n // I think these are named backwards\n it(\"produces proper results with optimistic updates and rollback\", async () => {\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"$primaryKey\": pkForOptimistic,\n \"$title\": undefined, // FIXME once this is calculated by optimistic then this needs to be the right value\n \"text\": \"d optimistic\",\n id: pkForOptimistic,\n });\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n\n testStage(\"Initial Setup\");\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n fauxObjectA,\n ]);\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectA,\n fauxObjectB,\n ]);\n\n testStage(\"Optimistic Creation\");\n\n // create the weirdest action ever. It always creates a Todo with\n // a new primary key and the text \"d\" and updates A\n const {\n actionDefinition: crazyAction,\n actionTypeV2: crazyActionTypeV2,\n } = TypeHelpers.actionTypeBuilder(\"asdf\")\n .addParameter(\"foo\", \"string\")\n .build();\n\n fauxFoundry.getDefaultOntology().registerActionType(\n crazyActionTypeV2,\n (batch, params) => {\n const idForD = nextPk++;\n\n batch.addObject(Todo.apiName, idForD, {\n id: idForD,\n text: \"d\",\n });\n\n batch.modifyObject(fauxObjectA.$apiName, fauxObjectA.$primaryKey, {\n text: \"a prime\",\n $title: \"a prime\", // FIXME we shouldn't have to set this, it can be calculated\n });\n },\n );\n\n // the optimistic job will call createObject which triggers the `objectFactory2` of the\n // cache context.\n\n // Perform something optimistic.\n const pActionResult = store.applyAction<typeof crazyAction>(\n crazyAction,\n {},\n {\n optimisticUpdate: (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d optimistic\",\n });\n b.updateObject(optimisticallyMutatedA);\n },\n },\n );\n\n testStage(\"Optimistic Updates\");\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ], { isOptimistic: true });\n\n // the second list is now [B, optimistic, optimistic a]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ], { isOptimistic: true });\n\n testStage(\"Resolve Action\");\n\n const modifiedObjectA = fauxObjectA.$clone({\n text: \"a prime\",\n });\n\n const pkForD = (await pActionResult).addedObjects?.[0].primaryKey;\n invariant(typeof pkForD === \"number\");\n // load this without the cache for comparisons\n const createdObjectD = await client(Todo).fetchOne(pkForD, {\n $includeRid: true,\n });\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n modifiedObjectA,\n createdObjectD,\n ], { isOptimistic: false });\n\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [modifiedObjectA, fauxObjectB, createdObjectD],\n { isOptimistic: false },\n );\n });\n });\n\n it(\"works with pivotTo and orderBy on objectSets\", async () => {\n fauxFoundry.getDefaultDataStore().clear();\n\n const officeA = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-a\",\n name: \"Zebra Office\",\n });\n const officeB = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-b\",\n name: \"Alpha Office\",\n });\n\n const emp1 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n fullName: \"Test Employee\",\n });\n const emp2 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 2,\n fullName: \"Test Employee 2\",\n });\n\n fauxFoundry.getDefaultDataStore().registerLink(\n emp1,\n \"officeLink\",\n officeA,\n \"occupants\",\n );\n fauxFoundry.getDefaultDataStore().registerLink(\n emp2,\n \"officeLink\",\n officeB,\n \"occupants\",\n );\n\n const sub = mockObserver<ObjectSetPayload | undefined>();\n defer(\n store.objectSets.observe({\n baseObjectSet: client(Employee).pivotTo(\"officeLink\"),\n orderBy: { name: \"asc\" },\n }, sub),\n );\n\n await vi.waitFor(\n () => {\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n }),\n );\n },\n { timeout: 5000 },\n );\n\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n resolvedList: [\n expect.objectContaining({ name: \"Alpha Office\" }),\n expect.objectContaining({ name: \"Zebra Office\" }),\n ],\n }),\n );\n\n expect(sub.error).not.toHaveBeenCalled();\n });\n });\n\n describe(\"layers\", () => {\n it(\"properly remove\", () => {\n const clientHelper = createClientMockHelper();\n const store = new Store(clientHelper.client);\n\n const baseObjects = [1, 2].map((i) => ({\n $primaryKey: i,\n $objectType: \"Employee\",\n $apiName: \"Employee\",\n $title: `truth ${i}`,\n } as Osdk.Instance<Employee> & ObjectHolder<Osdk.Instance<Employee>>));\n\n const cacheKeys = baseObjects.map((obj) =>\n store.cacheKeys.get(\"object\", \"Employee\", obj.$primaryKey)\n );\n\n // set the truth\n for (const obj of baseObjects) {\n updateObject(store, obj);\n }\n\n // expect the truth\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n\n const layerIds = [1, 2].map(createOptimisticId);\n\n // optimistically set the objects in their own layers\n for (let i = 0; i < 2; i++) {\n store.batch({ optimisticId: layerIds[i] }, (batch) => {\n batch.write(\n cacheKeys[i],\n {\n ...baseObjects[i],\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n },\n \"loading\",\n );\n });\n }\n\n // expect the optimistic values\n for (let i = 0; i < 2; i++) {\n expect(getObject(store, \"Employee\", baseObjects[i].$primaryKey))\n .toEqual(\n expect.objectContaining({\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n }),\n );\n }\n\n // remove the first layer\n store.layers.remove(layerIds[0]);\n\n // should have truth object 1 and optimistic object 2\n expect(getObject(store, \"Employee\", 1)).toEqual(\n expect.objectContaining({ $title: \"truth 1\" }),\n );\n expect(getObject(store, \"Employee\", 2)).toEqual(\n expect.objectContaining({ $title: \"optimistic 2\" }),\n );\n\n // remove the second layer\n store.layers.remove(layerIds[1]);\n\n // should have truth objects\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n });\n });\n});\n\nexport function asBsoStub(\n x: ObjectHolder<any> | Osdk.Instance<any>,\n): BaseServerObject {\n return {\n __apiName: x.$apiName,\n __primaryKey: x.$primaryKey,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -50,8 +50,7 @@ export class ActionApplication {
50
50
  if (process.env.NODE_ENV !== "production") {
51
51
  if (ACTION_DELAY > 0) {
52
52
  logger?.debug("action done, pausing", actionResults);
53
- const delay = (await import("delay")).default;
54
- await delay(ACTION_DELAY);
53
+ await new Promise(resolve => setTimeout(resolve, ACTION_DELAY));
55
54
  logger?.debug("action done, pausing done");
56
55
  }
57
56
  }
@@ -66,13 +65,17 @@ export class ActionApplication {
66
65
  }
67
66
  })();
68
67
  };
69
- #invalidateActionEditResponse = async ({
70
- deletedObjects,
71
- modifiedObjects,
72
- addedObjects,
73
- editedObjectTypes,
74
- type
75
- }) => {
68
+ #invalidateActionEditResponse = async actionEditResponse => {
69
+ if (actionEditResponse == null) {
70
+ return;
71
+ }
72
+ const {
73
+ deletedObjects,
74
+ modifiedObjects,
75
+ addedObjects,
76
+ editedObjectTypes,
77
+ type
78
+ } = actionEditResponse;
76
79
  let changes;
77
80
  if (type === "edits") {
78
81
  const promisesToWait = [];